chore(worker): external MCP tools return explicit results instead of empty responses

set_task_config/set_list_config now echo which fields were set vs cleared, get_list_config/get_task_config return an explicit found=false instead of null, and delete_list/run_task_now/reset_failed_task/remove_task_attachment return a confirmation record — matching the found/ok convention already used by batch_get_tasks and get_task_log.
This commit is contained in:
mika kuns
2026-08-05 10:58:28 +02:00
parent 334cf1e1d2
commit c871f35513
11 changed files with 156 additions and 39 deletions
+84 -9
View File
@@ -37,14 +37,31 @@ public sealed class ConfigMcpToolsTests : IDisposable
{
var listId = await SeedListAsync();
await _sut.SetListConfig(listId, "sonnet", "be terse", null, 42, CancellationToken.None);
var setResult = await _sut.SetListConfig(listId, "sonnet", "be terse", null, 42, CancellationToken.None);
Assert.True(setResult.Ok);
Assert.Equal(listId, setResult.ListId);
Assert.NotNull(setResult.Config);
Assert.Equal("sonnet", setResult.Config!.Model);
var cfg = await _sut.GetListConfig(listId, CancellationToken.None);
Assert.NotNull(cfg);
Assert.Equal("sonnet", cfg!.Model);
Assert.Equal("be terse", cfg.SystemPrompt);
Assert.Null(cfg.AgentPath);
Assert.Equal(42, cfg.MaxTurns);
Assert.True(cfg.Found);
Assert.NotNull(cfg.Config);
Assert.Equal("sonnet", cfg.Config!.Model);
Assert.Equal("be terse", cfg.Config.SystemPrompt);
Assert.Null(cfg.Config.AgentPath);
Assert.Equal(42, cfg.Config.MaxTurns);
}
[Fact]
public async Task GetListConfig_NoConfigSet_ReturnsNotFound()
{
var listId = await SeedListAsync();
var cfg = await _sut.GetListConfig(listId, CancellationToken.None);
Assert.False(cfg.Found);
Assert.Null(cfg.Config);
}
[Fact]
@@ -53,9 +70,12 @@ public sealed class ConfigMcpToolsTests : IDisposable
var listId = await SeedListAsync();
await _sut.SetListConfig(listId, "sonnet", null, null, null, CancellationToken.None);
await _sut.SetListConfig(listId, null, null, null, null, CancellationToken.None);
var clearResult = await _sut.SetListConfig(listId, null, null, null, null, CancellationToken.None);
Assert.Null(await _sut.GetListConfig(listId, CancellationToken.None));
Assert.True(clearResult.Ok);
Assert.Null(clearResult.Config);
var cfg = await _sut.GetListConfig(listId, CancellationToken.None);
Assert.False(cfg.Found);
}
[Fact]
@@ -73,10 +93,65 @@ public sealed class ConfigMcpToolsTests : IDisposable
};
await _tasks.AddAsync(task);
await _sut.SetTaskConfig(task.Id, "opus", null, null, 15, CancellationToken.None);
var result = await _sut.SetTaskConfig(task.Id, "opus", null, null, 15, CancellationToken.None);
Assert.True(result.Ok);
Assert.Equal(task.Id, result.TaskId);
Assert.Equal("opus", result.Config!.Model);
Assert.Equal(15, result.Config.MaxTurns);
var loaded = await _tasks.GetByIdAsync(task.Id);
Assert.Equal("opus", loaded!.Model);
Assert.Equal(15, loaded.MaxTurns);
}
[Fact]
public async Task SetTaskConfig_NullField_ClearsThatOverride()
{
var listId = await SeedListAsync();
var task = new TaskEntity
{
Id = Guid.NewGuid().ToString(),
ListId = listId,
Title = "t",
Status = ClaudeDo.Data.Models.TaskStatus.Idle,
CreatedAt = DateTime.UtcNow,
CommitType = "chore",
};
await _tasks.AddAsync(task);
await _sut.SetTaskConfig(task.Id, "opus", "be terse", "agent.md", 15, CancellationToken.None);
var result = await _sut.SetTaskConfig(task.Id, "opus", null, "agent.md", null, CancellationToken.None);
Assert.True(result.Ok);
Assert.Equal("opus", result.Config!.Model);
Assert.Null(result.Config.SystemPrompt);
Assert.Equal("agent.md", result.Config.AgentPath);
Assert.Null(result.Config.MaxTurns);
var loaded = await _tasks.GetByIdAsync(task.Id);
Assert.Null(loaded!.SystemPrompt);
Assert.Null(loaded.MaxTurns);
}
[Fact]
public async Task GetTaskConfig_NoOverrideSet_ReturnsNotFound()
{
var listId = await SeedListAsync();
var task = new TaskEntity
{
Id = Guid.NewGuid().ToString(),
ListId = listId,
Title = "t",
Status = ClaudeDo.Data.Models.TaskStatus.Idle,
CreatedAt = DateTime.UtcNow,
CommitType = "chore",
};
await _tasks.AddAsync(task);
var cfg = await _sut.GetTaskConfig(task.Id, CancellationToken.None);
Assert.False(cfg.Found);
Assert.Null(cfg.Config);
}
}