feat(worker): accept #123 task numbers as MCP tool input

TaskIdResolver resolves a #123/bare-123 taskId parameter to its GUID
before any lookup, across every External/ MCP tool that takes a task
id, including the batch tools' id arrays (via delegation to the
already-resolving single-entity methods) and update_task's
dependsOnTaskId (empty string still passes through unchanged as the
clear-link sentinel). An unknown number throws a clear error instead
of a silent null. McpToolDocs.TaskNumberHint tells the agent to refer
to tasks as #<number> when reporting to the user, added to the
description of get_task, list_tasks, add_task, update_task_status and
review_task.
This commit is contained in:
mika kuns
2026-08-11 13:10:49 +02:00
parent 9660a29da4
commit 2a3133efad
14 changed files with 298 additions and 7 deletions
@@ -205,6 +205,22 @@ public sealed class BatchMcpToolsTests : IDisposable
Assert.Null(found.TaskFull);
}
[Fact]
public async Task BatchGetTasks_MixedNumberAndGuidIds_ResolvesBoth()
{
var listId = await SeedListAsync();
var a = await SeedTaskAsync(listId);
var b = await SeedTaskAsync(listId);
var sut = BuildSut();
var results = await sut.BatchGetTasks(new[] { $"#{a.Number}", b.Id }, cancellationToken: CancellationToken.None);
Assert.True(results[0].Found);
Assert.Equal(a.Id, results[0].Task!.Id);
Assert.True(results[1].Found);
Assert.Equal(b.Id, results[1].Task!.Id);
}
[Fact]
public async Task BatchGetTasks_IncludeDescriptionTrue_ReturnsTaskFull()
{