89 lines
2.6 KiB
TypeScript
89 lines
2.6 KiB
TypeScript
import assert from "node:assert/strict";
|
|
import test from "node:test";
|
|
|
|
import type { AgentsRepository, AgentSessionRecord } from "../repositories/agents.js";
|
|
import { TaskerClient } from "../tasker/client.js";
|
|
import { executeMcpTool, getToolsForSession } from "./tool-runtime.js";
|
|
|
|
const session: AgentSessionRecord = {
|
|
agent: {
|
|
id: "agent-1",
|
|
ownerUserId: "owner-1",
|
|
ownerEmail: "owner@example.test",
|
|
displayName: "Codex Agent",
|
|
avatarUrl: null,
|
|
status: "active",
|
|
createdAt: "2026-08-06T00:00:00.000Z",
|
|
updatedAt: "2026-08-06T00:00:00.000Z",
|
|
},
|
|
token: {
|
|
id: "token-1",
|
|
agentId: "agent-1",
|
|
name: "test",
|
|
status: "active",
|
|
grantScope: "agent",
|
|
tokenSuffix: "test",
|
|
expiresAt: null,
|
|
lastUsedAt: null,
|
|
createdAt: "2026-08-06T00:00:00.000Z",
|
|
},
|
|
grants: [
|
|
{
|
|
id: "grant-1",
|
|
agentId: "agent-1",
|
|
workspaceSlug: "nodedc",
|
|
projectId: "project-1",
|
|
scopes: ["issue:comment"],
|
|
mode: "voluntary",
|
|
createdByUserId: "owner-1",
|
|
createdAt: "2026-08-06T00:00:00.000Z",
|
|
updatedAt: "2026-08-06T00:00:00.000Z",
|
|
},
|
|
],
|
|
grantSource: "agent",
|
|
};
|
|
|
|
test("tasker_update_comment is exposed and forwards the owned comment identity", async () => {
|
|
const tool = getToolsForSession(session).find((candidate) => candidate.name === "tasker_update_comment");
|
|
assert.ok(tool);
|
|
assert.deepEqual(tool.inputSchema.required, ["issue_id", "project_id", "comment_id", "body"]);
|
|
|
|
const forwarded: unknown[] = [];
|
|
const taskerClient = new TaskerClient({ baseUrl: "http://tasker.test", internalAccessToken: "test" });
|
|
taskerClient.updateComment = async (...args) => {
|
|
forwarded.push(args);
|
|
return { ok: true, comment: { id: "comment-1", body: "updated" } };
|
|
};
|
|
|
|
const agentsRepository = {
|
|
claimIdempotencyKey: async () => ({ status: "claimed" as const }),
|
|
completeIdempotencyKey: async () => undefined,
|
|
releaseIdempotencyKey: async () => undefined,
|
|
createAuditEvent: async () => undefined,
|
|
} as unknown as AgentsRepository;
|
|
|
|
const result = await executeMcpTool(
|
|
session,
|
|
"tasker_update_comment",
|
|
{
|
|
issue_id: "issue-1",
|
|
project_id: "project-1",
|
|
workspace_slug: "nodedc",
|
|
comment_id: "comment-1",
|
|
body: "updated",
|
|
idempotency_key: "comment-update-test-1",
|
|
},
|
|
{ agentsRepository, taskerClient }
|
|
);
|
|
|
|
assert.deepEqual(forwarded, [
|
|
[
|
|
session,
|
|
"issue-1",
|
|
"comment-1",
|
|
{ project_id: "project-1", workspace_slug: "nodedc", body: "updated" },
|
|
],
|
|
]);
|
|
assert.deepEqual(result.structuredContent, { ok: true, comment: { id: "comment-1", body: "updated" } });
|
|
});
|