agenthub-multiagent-mcp 1.22.0 → 1.25.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (52) hide show
  1. package/dist/activity.d.ts +3 -0
  2. package/dist/activity.d.ts.map +1 -1
  3. package/dist/activity.js +21 -1
  4. package/dist/activity.js.map +1 -1
  5. package/dist/activityHookCli.d.ts +13 -0
  6. package/dist/activityHookCli.d.ts.map +1 -0
  7. package/dist/activityHookCli.js +47 -0
  8. package/dist/activityHookCli.js.map +1 -0
  9. package/dist/activityHookInstall.d.ts +10 -0
  10. package/dist/activityHookInstall.d.ts.map +1 -0
  11. package/dist/activityHookInstall.js +57 -0
  12. package/dist/activityHookInstall.js.map +1 -0
  13. package/dist/activityMarker.d.ts +25 -0
  14. package/dist/activityMarker.d.ts.map +1 -0
  15. package/dist/activityMarker.js +72 -0
  16. package/dist/activityMarker.js.map +1 -0
  17. package/dist/activityMarker.test.d.ts +2 -0
  18. package/dist/activityMarker.test.d.ts.map +1 -0
  19. package/dist/activityMarker.test.js +0 -0
  20. package/dist/activityMarker.test.js.map +1 -0
  21. package/dist/client.d.ts +52 -0
  22. package/dist/client.d.ts.map +1 -1
  23. package/dist/client.js +46 -0
  24. package/dist/client.js.map +1 -1
  25. package/dist/client.unit.test.js +22 -0
  26. package/dist/client.unit.test.js.map +1 -1
  27. package/dist/index.js +19 -2
  28. package/dist/index.js.map +1 -1
  29. package/dist/skillInstaller.d.ts +27 -1
  30. package/dist/skillInstaller.d.ts.map +1 -1
  31. package/dist/skillInstaller.gate.test.d.ts +2 -0
  32. package/dist/skillInstaller.gate.test.d.ts.map +1 -0
  33. package/dist/skillInstaller.gate.test.js +95 -0
  34. package/dist/skillInstaller.gate.test.js.map +1 -0
  35. package/dist/skillInstaller.js +59 -0
  36. package/dist/skillInstaller.js.map +1 -1
  37. package/dist/skillInstaller.test.js +19 -1
  38. package/dist/skillInstaller.test.js.map +1 -1
  39. package/dist/tools/capabilities.test.d.ts +6 -0
  40. package/dist/tools/capabilities.test.d.ts.map +1 -0
  41. package/dist/tools/capabilities.test.js +154 -0
  42. package/dist/tools/capabilities.test.js.map +1 -0
  43. package/dist/tools/index.d.ts.map +1 -1
  44. package/dist/tools/index.js +127 -1
  45. package/dist/tools/index.js.map +1 -1
  46. package/dist/tools/tools.test.js +6 -2
  47. package/dist/tools/tools.test.js.map +1 -1
  48. package/package.json +71 -70
  49. package/skills/catalog.json +18 -0
  50. package/skills/manifest.json +11 -0
  51. package/skills/skills/deploy-staging/SKILL.md +164 -0
  52. package/skills/skills/deploy-vps-openclaw/SKILL.md +97 -0
@@ -7,6 +7,12 @@ import { installSkills } from "./skillInstaller.js";
7
7
  const SKILL_A = "commands/start-session.md";
8
8
  const SKILL_B = "commands/close-session.md";
9
9
  const SKILL_C = "skills/karpathy-guidelines/SKILL.md";
10
+ // Destructive deploy runbooks are also bundled (gated by CR-R2). They have fixed
11
+ // bodies in the fixture so the no-op / count assertions stay deterministic.
12
+ const SKILL_D = "skills/deploy-staging/SKILL.md";
13
+ const SKILL_E = "skills/deploy-vps-openclaw/SKILL.md";
14
+ const DEPLOY_STAGING_BODY = "deploy-staging v1";
15
+ const DEPLOY_VPS_BODY = "deploy-vps-openclaw v1";
10
16
  function sha256(s) {
11
17
  return createHash("sha256").update(s).digest("hex");
12
18
  }
@@ -15,15 +21,21 @@ function seedBundle(bundleDir, opts) {
15
21
  mkdirSync(join(bundleDir, "commands"), { recursive: true });
16
22
  mkdirSync(join(bundleDir, "skills"), { recursive: true });
17
23
  mkdirSync(join(bundleDir, "skills", "karpathy-guidelines"), { recursive: true });
24
+ mkdirSync(join(bundleDir, "skills", "deploy-staging"), { recursive: true });
25
+ mkdirSync(join(bundleDir, "skills", "deploy-vps-openclaw"), { recursive: true });
18
26
  writeFileSync(join(bundleDir, SKILL_A), opts.startBody);
19
27
  writeFileSync(join(bundleDir, SKILL_B), opts.closeBody);
20
28
  writeFileSync(join(bundleDir, SKILL_C), karpathyBody);
29
+ writeFileSync(join(bundleDir, SKILL_D), DEPLOY_STAGING_BODY);
30
+ writeFileSync(join(bundleDir, SKILL_E), DEPLOY_VPS_BODY);
21
31
  const manifest = {
22
32
  version: 1,
23
33
  skills: {
24
34
  [SKILL_A]: { hashes: opts.manifestHashes?.[SKILL_A] ?? [sha256(opts.startBody)] },
25
35
  [SKILL_B]: { hashes: opts.manifestHashes?.[SKILL_B] ?? [sha256(opts.closeBody)] },
26
36
  [SKILL_C]: { hashes: opts.manifestHashes?.[SKILL_C] ?? [sha256(karpathyBody)] },
37
+ [SKILL_D]: { hashes: opts.manifestHashes?.[SKILL_D] ?? [sha256(DEPLOY_STAGING_BODY)] },
38
+ [SKILL_E]: { hashes: opts.manifestHashes?.[SKILL_E] ?? [sha256(DEPLOY_VPS_BODY)] },
27
39
  },
28
40
  };
29
41
  writeFileSync(join(bundleDir, "manifest.json"), JSON.stringify(manifest));
@@ -45,18 +57,24 @@ describe("installSkills", () => {
45
57
  seedBundle(bundleDir, { startBody: "start v1", closeBody: "close v1" });
46
58
  const report = await installSkills({ targetHome: home, bundleDir });
47
59
  expect(report.errors).toEqual([]);
48
- expect(report.actions.map((a) => a.action).sort()).toEqual(["installed", "installed", "installed"]);
60
+ expect(report.actions.every((a) => a.action === "installed")).toBe(true);
61
+ expect(report.actions).toHaveLength(5);
49
62
  expect(readFileSync(join(home, ".claude", SKILL_A), "utf8")).toBe("start v1");
50
63
  expect(readFileSync(join(home, ".claude", SKILL_B), "utf8")).toBe("close v1");
51
64
  expect(readFileSync(join(home, ".claude", SKILL_C), "utf8")).toBe("karpathy v1");
65
+ expect(readFileSync(join(home, ".claude", SKILL_D), "utf8")).toBe(DEPLOY_STAGING_BODY);
52
66
  });
53
67
  it("no-ops when target matches current bundle", async () => {
54
68
  seedBundle(bundleDir, { startBody: "v1", closeBody: "v1", karpathyBody: "v1" });
55
69
  mkdirSync(join(home, ".claude", "commands"), { recursive: true });
56
70
  mkdirSync(join(home, ".claude", "skills", "karpathy-guidelines"), { recursive: true });
71
+ mkdirSync(join(home, ".claude", "skills", "deploy-staging"), { recursive: true });
72
+ mkdirSync(join(home, ".claude", "skills", "deploy-vps-openclaw"), { recursive: true });
57
73
  writeFileSync(join(home, ".claude", SKILL_A), "v1");
58
74
  writeFileSync(join(home, ".claude", SKILL_B), "v1");
59
75
  writeFileSync(join(home, ".claude", SKILL_C), "v1");
76
+ writeFileSync(join(home, ".claude", SKILL_D), DEPLOY_STAGING_BODY);
77
+ writeFileSync(join(home, ".claude", SKILL_E), DEPLOY_VPS_BODY);
60
78
  const report = await installSkills({ targetHome: home, bundleDir });
61
79
  expect(report.actions.every((a) => a.action === "skipped_current")).toBe(true);
62
80
  });
@@ -1 +1 @@
1
- {"version":3,"file":"skillInstaller.test.js","sourceRoot":"","sources":["../src/skillInstaller.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"skillInstaller.test.js","sourceRoot":"","sources":["../src/skillInstaller.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Unit tests for capability MCP tool handlers.
3
+ * add-agent-capabilities Phase 2 §2.3.
4
+ */
5
+ export {};
6
+ //# sourceMappingURL=capabilities.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"capabilities.test.d.ts","sourceRoot":"","sources":["../../src/tools/capabilities.test.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
@@ -0,0 +1,154 @@
1
+ /**
2
+ * Unit tests for capability MCP tool handlers.
3
+ * add-agent-capabilities Phase 2 §2.3.
4
+ */
5
+ import { describe, it, expect, vi } from "vitest";
6
+ import { handleToolCall } from "./index.js";
7
+ // ─── Module mocks ──────────────────────────────────────────────────────────
8
+ vi.mock("../state.js", () => ({
9
+ loadState: vi.fn(() => null),
10
+ saveState: vi.fn(),
11
+ deleteState: vi.fn(),
12
+ stateExists: vi.fn(() => false),
13
+ getCurrentOwner: vi.fn(() => "test-user"),
14
+ }));
15
+ vi.mock("../hooks/sessionState.js", async (importOriginal) => {
16
+ const actual = await importOriginal();
17
+ return { ...actual, isEnabled: vi.fn(() => false) };
18
+ });
19
+ // ─── Shared fixtures ───────────────────────────────────────────────────────
20
+ const AGENT_ID = "test-agent-42";
21
+ function createMockContext(agentId = AGENT_ID) {
22
+ return {
23
+ getCurrentAgentId: () => agentId,
24
+ setCurrentAgentId: vi.fn(),
25
+ stopHeartbeat: vi.fn(),
26
+ getWorkingDir: () => "/tmp/test",
27
+ setWorkingDir: vi.fn(),
28
+ getPushedItems: () => ({ tasks: [], messages: [] }),
29
+ };
30
+ }
31
+ function buildMockClient(overrides = {}) {
32
+ return {
33
+ // Base stubs used by wrapWithPendingItems
34
+ getInbox: vi.fn().mockResolvedValue({ messages: [] }),
35
+ getPendingTasks: vi.fn().mockResolvedValue({ tasks: [] }),
36
+ // Capability methods
37
+ listAgentCapabilities: vi.fn(),
38
+ invokeCapability: vi.fn(),
39
+ requestCapability: vi.fn(),
40
+ // Other stubs the switch might need
41
+ post: vi.fn(),
42
+ get: vi.fn(),
43
+ ...overrides,
44
+ };
45
+ }
46
+ // ─── capability_list ───────────────────────────────────────────────────────
47
+ describe("capability_list", () => {
48
+ it("calls listAgentCapabilities with the current agent id", async () => {
49
+ const expected = {
50
+ capabilities: [
51
+ {
52
+ capability_id: "cap-1",
53
+ capability_name: "test-vault",
54
+ kind: "vault",
55
+ tier: "read",
56
+ attached_by: "user-1",
57
+ attached_at: "2026-05-20T00:00:00Z",
58
+ scope: { deny: false },
59
+ },
60
+ ],
61
+ };
62
+ const client = buildMockClient({
63
+ listAgentCapabilities: vi.fn().mockResolvedValue(expected),
64
+ });
65
+ const ctx = createMockContext();
66
+ const result = await handleToolCall("capability_list", {}, client, ctx);
67
+ expect(client.listAgentCapabilities).toHaveBeenCalledWith(AGENT_ID);
68
+ // wrapWithPendingItems may wrap the result; check the nested result field.
69
+ const r = result.result ?? result;
70
+ expect(r).toEqual(expected);
71
+ });
72
+ it("throws when no agent id is set", async () => {
73
+ const client = buildMockClient();
74
+ const ctx = createMockContext(""); // no agent id
75
+ await expect(handleToolCall("capability_list", {}, client, ctx)).rejects.toThrow(/agent_register/);
76
+ });
77
+ });
78
+ // ─── capability_invoke ─────────────────────────────────────────────────────
79
+ describe("capability_invoke", () => {
80
+ it("calls invokeCapability and returns vault response", async () => {
81
+ const vaultResponse = {
82
+ kind: "vault",
83
+ secrets: { MY_SECRET: "supersecret" },
84
+ missing: [],
85
+ };
86
+ const client = buildMockClient({
87
+ invokeCapability: vi.fn().mockResolvedValue(vaultResponse),
88
+ });
89
+ const ctx = createMockContext();
90
+ const result = await handleToolCall("capability_invoke", { capability_id: "test-vault", params: { env: "staging" } }, client, ctx);
91
+ expect(client.invokeCapability).toHaveBeenCalledWith("test-vault", { env: "staging" });
92
+ const r = result.result ?? result;
93
+ expect(r.kind).toBe("vault");
94
+ expect(r.secrets).toEqual({ MY_SECRET: "supersecret" });
95
+ });
96
+ it("calls invokeCapability with empty params when params omitted", async () => {
97
+ const client = buildMockClient({
98
+ invokeCapability: vi.fn().mockResolvedValue({ kind: "skill", skill_name: "deploy-staging", hint: "hint" }),
99
+ });
100
+ const ctx = createMockContext();
101
+ await handleToolCall("capability_invoke", { capability_id: "deploy-staging" }, client, ctx);
102
+ expect(client.invokeCapability).toHaveBeenCalledWith("deploy-staging", {});
103
+ });
104
+ it("throws when capability_id is missing", async () => {
105
+ const client = buildMockClient();
106
+ const ctx = createMockContext();
107
+ await expect(handleToolCall("capability_invoke", {}, client, ctx)).rejects.toThrow(/capability_id/);
108
+ });
109
+ it("throws when no agent id is set", async () => {
110
+ const client = buildMockClient();
111
+ const ctx = createMockContext("");
112
+ await expect(handleToolCall("capability_invoke", { capability_id: "x" }, client, ctx)).rejects.toThrow(/agent_register/);
113
+ });
114
+ });
115
+ // ─── capability_request ────────────────────────────────────────────────────
116
+ describe("capability_request", () => {
117
+ it("returns attached:true for read/write tier direct attach", async () => {
118
+ const client = buildMockClient({
119
+ requestCapability: vi.fn().mockResolvedValue({
120
+ agent_id: AGENT_ID,
121
+ capability_id: "cap-read-1",
122
+ }),
123
+ });
124
+ const ctx = createMockContext();
125
+ const result = await handleToolCall("capability_request", { capability_id: "cap-read-1", reason: "need it" }, client, ctx);
126
+ expect(client.requestCapability).toHaveBeenCalledWith(AGENT_ID, "cap-read-1", "need it");
127
+ const r = result.result ?? result;
128
+ expect(r.attached).toBe(true);
129
+ });
130
+ it("returns request_id + pending status for destructive tier", async () => {
131
+ const client = buildMockClient({
132
+ requestCapability: vi.fn().mockResolvedValue({
133
+ request_id: "req-999",
134
+ status: "pending",
135
+ }),
136
+ });
137
+ const ctx = createMockContext();
138
+ const result = await handleToolCall("capability_request", { capability_id: "ssh-staging", reason: "deploy test" }, client, ctx);
139
+ const r = result.result ?? result;
140
+ expect(r.request_id).toBe("req-999");
141
+ expect(r.status).toBe("pending");
142
+ });
143
+ it("throws when no agent id is set", async () => {
144
+ const client = buildMockClient();
145
+ const ctx = createMockContext("");
146
+ await expect(handleToolCall("capability_request", { capability_id: "x" }, client, ctx)).rejects.toThrow(/agent_register/);
147
+ });
148
+ it("throws when capability_id is missing", async () => {
149
+ const client = buildMockClient();
150
+ const ctx = createMockContext();
151
+ await expect(handleToolCall("capability_request", {}, client, ctx)).rejects.toThrow(/capability_id/);
152
+ });
153
+ });
154
+ //# sourceMappingURL=capabilities.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"capabilities.test.js","sourceRoot":"","sources":["../../src/tools/capabilities.test.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,SAAS,EAAE,OAAO,EAAqD,MAAM,cAAc,CAAC;AACrG,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AA6B/D,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,WAAW,EAAE,CAAC;IACrB,QAAQ,EAAE,OAAO,EAAE,CAAC;CACrB;AAED,MAAM,WAAW,WAAW;IAC1B,iBAAiB,EAAE,MAAM,MAAM,CAAC;IAChC,iBAAiB,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,aAAa,EAAE,MAAM,IAAI,CAAC;IAC1B,aAAa,EAAE,MAAM,MAAM,CAAC;IAC5B,aAAa,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,cAAc,EAAE,MAAM,WAAW,CAAC;CACnC;AAED,UAAU,WAAW;IACnB,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;CACpB;AAwJD,wBAAgB,aAAa,IAAI,IAAI,EAAE,CA+xDtC;AAED,wBAAsB,cAAc,CAClC,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,MAAM,EAAE,SAAS,EACjB,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC,OAAO,CAAC,CAu2DlB"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,SAAS,EAAE,OAAO,EAAqD,MAAM,cAAc,CAAC;AACrG,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AA6B/D,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,WAAW,EAAE,CAAC;IACrB,QAAQ,EAAE,OAAO,EAAE,CAAC;CACrB;AAED,MAAM,WAAW,WAAW;IAC1B,iBAAiB,EAAE,MAAM,MAAM,CAAC;IAChC,iBAAiB,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,aAAa,EAAE,MAAM,IAAI,CAAC;IAC1B,aAAa,EAAE,MAAM,MAAM,CAAC;IAC5B,aAAa,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,cAAc,EAAE,MAAM,WAAW,CAAC;CACnC;AAED,UAAU,WAAW;IACnB,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;CACpB;AAwJD,wBAAgB,aAAa,IAAI,IAAI,EAAE,CAg3DtC;AAED,wBAAsB,cAAc,CAClC,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,MAAM,EAAE,SAAS,EACjB,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC,OAAO,CAAC,CAs6DlB"}
@@ -940,6 +940,28 @@ export function registerTools() {
940
940
  required: ["task_id", "description"],
941
941
  },
942
942
  },
943
+ {
944
+ name: "report_progress",
945
+ description: "Report mid-task progress (0–100) for a task you own or have claimed. Drives the live Mission Control HUD. Optional; the HUD falls back to elapsed-time when you don't report. The task must be in 'working' status.",
946
+ inputSchema: {
947
+ type: "object",
948
+ properties: {
949
+ task_id: {
950
+ type: "string",
951
+ description: "ID of the task you're working on",
952
+ },
953
+ progress: {
954
+ type: "number",
955
+ description: "Percent complete, 0 to 100",
956
+ },
957
+ note: {
958
+ type: "string",
959
+ description: "Optional short step label, e.g. '3/7 tests'",
960
+ },
961
+ },
962
+ required: ["task_id", "progress"],
963
+ },
964
+ },
943
965
  // Ticket creation tools
944
966
  {
945
967
  name: "create_epic",
@@ -1911,7 +1933,7 @@ export function registerTools() {
1911
1933
  },
1912
1934
  {
1913
1935
  name: "secret_get",
1914
- description: "Retrieve a secret value from the vault. Access is enforced by scope: org secrets are visible to all agents, project secrets require matching project, agent secrets are private to the creator.",
1936
+ description: "DEPRECATED prefer capability_invoke on a kind=vault capability, which adds per-invocation audit, policy, and rate limits. secret_get remains for backward compatibility and will be removed from the agent surface once direct callers reach zero (tracked via the agenthub_secret_get_direct_calls_total metric). Retrieves a secret value from the vault; access is enforced by scope (org/project/agent).",
1915
1937
  inputSchema: {
1916
1938
  type: "object",
1917
1939
  properties: {
@@ -1935,6 +1957,60 @@ export function registerTools() {
1935
1957
  },
1936
1958
  },
1937
1959
  },
1960
+ // ── Capabilities (add-agent-capabilities Phase 2 §2.3) ──────────────────
1961
+ {
1962
+ name: "capability_list",
1963
+ description: "List this agent's attached capabilities with each capability's resolved scope for the agent's trust tier. " +
1964
+ "Use this to discover what capabilities are available before calling capability_invoke.",
1965
+ inputSchema: {
1966
+ type: "object",
1967
+ properties: {},
1968
+ },
1969
+ },
1970
+ {
1971
+ name: "capability_invoke",
1972
+ description: "Invoke an attached capability by ID or name. " +
1973
+ "For kind=vault: the server reads named secrets from the vault and returns them in {secrets: {NAME: value}}; " +
1974
+ "the agent receives the decrypted values in plaintext (see AC9 — exfil window is documented, not solved). " +
1975
+ "For kind=skill: returns {skill_name, hint} — call the Skill tool with skill_name to execute it. " +
1976
+ "For kind=broker: Phase 3 (returns 501 for now). " +
1977
+ "Writes a per-invocation audit row regardless of outcome.",
1978
+ inputSchema: {
1979
+ type: "object",
1980
+ properties: {
1981
+ capability_id: {
1982
+ type: "string",
1983
+ description: "Capability ID or name (resolved in that order)",
1984
+ },
1985
+ params: {
1986
+ type: "object",
1987
+ description: "Params passed to the capability (schema varies per capability — check capability_list)",
1988
+ },
1989
+ },
1990
+ required: ["capability_id"],
1991
+ },
1992
+ },
1993
+ {
1994
+ name: "capability_request",
1995
+ description: "Request that a capability be attached to this agent. " +
1996
+ "For read/write tier capabilities: attaches immediately and returns {attached: true}. " +
1997
+ "For destructive tier: the request is queued for admin approval and returns {request_id, status: 'pending'}. " +
1998
+ "An admin must approve the request via the dashboard before you can invoke a destructive capability.",
1999
+ inputSchema: {
2000
+ type: "object",
2001
+ properties: {
2002
+ capability_id: {
2003
+ type: "string",
2004
+ description: "Capability ID or name to request",
2005
+ },
2006
+ reason: {
2007
+ type: "string",
2008
+ description: "Why you need this capability (required for destructive-tier caps; shown to the approver)",
2009
+ },
2010
+ },
2011
+ required: ["capability_id"],
2012
+ },
2013
+ },
1938
2014
  ];
1939
2015
  }
1940
2016
  export async function handleToolCall(name, args, client, context) {
@@ -2687,6 +2763,23 @@ export async function handleToolCall(name, args, client, context) {
2687
2763
  const result = await client.createCheckpoint(args.task_id, agentId, args.description);
2688
2764
  return wrapWithPendingItems(client, agentId, result, context);
2689
2765
  }
2766
+ case "report_progress": {
2767
+ if (!agentId)
2768
+ throw new Error("Not registered. Call agent_register first.");
2769
+ const progress = args.progress;
2770
+ if (typeof progress !== "number" || Number.isNaN(progress) || progress < 0 || progress > 100) {
2771
+ throw new Error("progress must be a number between 0 and 100");
2772
+ }
2773
+ await client.reportProgress(args.task_id, agentId, progress, args.note);
2774
+ return {
2775
+ content: [
2776
+ {
2777
+ type: "text",
2778
+ text: `Progress recorded: ${progress}% on task ${args.task_id}.`,
2779
+ },
2780
+ ],
2781
+ };
2782
+ }
2690
2783
  // Ticket creation tools
2691
2784
  case "create_epic": {
2692
2785
  if (!agentId)
@@ -3603,6 +3696,39 @@ export async function handleToolCall(name, args, client, context) {
3603
3696
  const projectId = args.project_id;
3604
3697
  return client.post(`/projects/${projectId}/features/sync-openspec`, {});
3605
3698
  }
3699
+ // ── Capabilities (add-agent-capabilities Phase 2 §2.3) ──
3700
+ case "capability_list": {
3701
+ if (!agentId) {
3702
+ throw new Error("capability_list requires an agent identity — run agent_register first");
3703
+ }
3704
+ return client.listAgentCapabilities(agentId);
3705
+ }
3706
+ case "capability_invoke": {
3707
+ if (!agentId) {
3708
+ throw new Error("capability_invoke requires an agent identity — run agent_register first");
3709
+ }
3710
+ const capId = args.capability_id;
3711
+ if (!capId)
3712
+ throw new Error("capability_id is required");
3713
+ const params = (args.params ?? {});
3714
+ return client.invokeCapability(capId, params);
3715
+ }
3716
+ case "capability_request": {
3717
+ if (!agentId) {
3718
+ throw new Error("capability_request requires an agent identity — run agent_register first");
3719
+ }
3720
+ const capId = args.capability_id;
3721
+ if (!capId)
3722
+ throw new Error("capability_id is required");
3723
+ const reason = args.reason;
3724
+ const result = await client.requestCapability(agentId, capId, reason);
3725
+ // Normalise: server returns 201 {agent_id, capability_id} for direct attach
3726
+ // and 202 {request_id, status} for queued destructive requests.
3727
+ if ("request_id" in result && result.request_id) {
3728
+ return result; // {request_id, status: "pending"}
3729
+ }
3730
+ return { attached: true, ...result };
3731
+ }
3606
3732
  // ── Secrets Vault ──
3607
3733
  case "secret_set": {
3608
3734
  const body = {