agenthub-multiagent-mcp 1.52.0 → 1.53.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 (61) hide show
  1. package/dist/captureHookInstall.d.ts +127 -0
  2. package/dist/captureHookInstall.d.ts.map +1 -0
  3. package/dist/captureHookInstall.js +256 -0
  4. package/dist/captureHookInstall.js.map +1 -0
  5. package/dist/captureHookInstall.test.d.ts +10 -0
  6. package/dist/captureHookInstall.test.d.ts.map +1 -0
  7. package/dist/captureHookInstall.test.js +325 -0
  8. package/dist/captureHookInstall.test.js.map +1 -0
  9. package/dist/channel.js +96 -0
  10. package/dist/channel.js.map +1 -1
  11. package/dist/client.d.ts +50 -0
  12. package/dist/client.d.ts.map +1 -1
  13. package/dist/client.js +90 -0
  14. package/dist/client.js.map +1 -1
  15. package/dist/commands/setup-shell.js +11 -11
  16. package/dist/daemon.js +142 -3
  17. package/dist/daemon.js.map +1 -1
  18. package/dist/index.js +25 -0
  19. package/dist/index.js.map +1 -1
  20. package/dist/session-capture.sh +410 -0
  21. package/dist/sessionCapture.d.ts +163 -0
  22. package/dist/sessionCapture.d.ts.map +1 -0
  23. package/dist/sessionCapture.js +279 -0
  24. package/dist/sessionCapture.js.map +1 -0
  25. package/dist/sessionCapture.test.d.ts +9 -0
  26. package/dist/sessionCapture.test.d.ts.map +1 -0
  27. package/dist/sessionCapture.test.js +366 -0
  28. package/dist/sessionCapture.test.js.map +1 -0
  29. package/dist/sessionCaptureScript.test.d.ts +16 -0
  30. package/dist/sessionCaptureScript.test.d.ts.map +1 -0
  31. package/dist/sessionCaptureScript.test.js +92 -0
  32. package/dist/sessionCaptureScript.test.js.map +1 -0
  33. package/dist/steering.test.d.ts +2 -0
  34. package/dist/steering.test.d.ts.map +1 -0
  35. package/dist/steering.test.js +223 -0
  36. package/dist/steering.test.js.map +1 -0
  37. package/dist/streamingRuntimeLib.d.ts +260 -1
  38. package/dist/streamingRuntimeLib.d.ts.map +1 -1
  39. package/dist/streamingRuntimeLib.js +474 -1
  40. package/dist/streamingRuntimeLib.js.map +1 -1
  41. package/dist/streamingRuntimeLib.test.js +87 -1
  42. package/dist/streamingRuntimeLib.test.js.map +1 -1
  43. package/dist/tools/index.d.ts.map +1 -1
  44. package/dist/tools/index.js +8 -0
  45. package/dist/tools/index.js.map +1 -1
  46. package/dist/tools/sessionControl.d.ts +53 -0
  47. package/dist/tools/sessionControl.d.ts.map +1 -0
  48. package/dist/tools/sessionControl.js +265 -0
  49. package/dist/tools/sessionControl.js.map +1 -0
  50. package/dist/tools/sessionControl.test.d.ts +14 -0
  51. package/dist/tools/sessionControl.test.d.ts.map +1 -0
  52. package/dist/tools/sessionControl.test.js +298 -0
  53. package/dist/tools/sessionControl.test.js.map +1 -0
  54. package/dist/tools/tools.test.js +4 -2
  55. package/dist/tools/tools.test.js.map +1 -1
  56. package/native/agenthub-memvid/agenthub-memvid.linux-x64-gnu.node +0 -0
  57. package/package.json +2 -2
  58. package/skills/commands/start-session.md +77 -77
  59. package/skills/skills/deploy-staging/SKILL.md +164 -164
  60. package/skills/skills/deploy-vps-openclaw/SKILL.md +97 -97
  61. package/skills/skills/karpathy-guidelines/SKILL.md +67 -67
@@ -0,0 +1,325 @@
1
+ /**
2
+ * add-multiplayer-sessions §3.2/§3.3/§3.4 — consent-gated install of the
3
+ * interactive capture hook.
4
+ *
5
+ * The load-bearing assertions here are the negative ones: with no consent, or
6
+ * with a consent lookup that failed, nothing is written to the user's machine
7
+ * that could cause their session to be recorded.
8
+ */
9
+ import { describe, it, expect } from "vitest";
10
+ import * as path from "path";
11
+ import { applyCaptureConsent, captureApiRoot, captureStateDir, fetchCaptureConsent, installCaptureHook, removeCaptureHook, } from "./captureHookInstall.js";
12
+ import { CAPTURE_HOOK_MARKER } from "./sessionCapture.js";
13
+ /** In-memory filesystem so the tests never touch a real ~/.claude. */
14
+ function fakeFs(seed = {}) {
15
+ const files = new Map(Object.entries(seed));
16
+ const dirs = new Set();
17
+ const removedDirs = [];
18
+ const modes = new Map();
19
+ const deps = {
20
+ exists: (p) => files.has(p),
21
+ readFile: (p) => {
22
+ const v = files.get(p);
23
+ if (v === undefined)
24
+ throw new Error("ENOENT " + p);
25
+ return v;
26
+ },
27
+ writeFile: (p, d) => void files.set(p, d),
28
+ mkdir: (p) => void dirs.add(p),
29
+ removeFile: (p) => void files.delete(p),
30
+ removeDir: (p) => void removedDirs.push(p),
31
+ chmod: (p, m) => void modes.set(p, m),
32
+ now: () => new Date("2026-07-26T00:00:00.000Z"),
33
+ };
34
+ return { files, dirs, removedDirs, modes, deps };
35
+ }
36
+ const SETTINGS = "/home/alice/.claude/settings.json";
37
+ const GRANT = "/home/alice/.claude/agenthub-capture.json";
38
+ function opts(over = {}) {
39
+ return {
40
+ settingsPath: SETTINGS,
41
+ grantPath: GRANT,
42
+ hookScript: "/opt/mcp/dist/session-capture.sh",
43
+ apiRoot: "https://agenthub.example.com",
44
+ userId: "user-alice",
45
+ agentId: "agent-alice",
46
+ connectToken: "rt-alice",
47
+ ...over,
48
+ };
49
+ }
50
+ describe("captureApiRoot", () => {
51
+ it("strips the client's /api suffix so the hook does not build /api/api", () => {
52
+ expect(captureApiRoot("https://agenthub.example.com/api")).toBe("https://agenthub.example.com");
53
+ expect(captureApiRoot("https://agenthub.example.com/api/")).toBe("https://agenthub.example.com");
54
+ });
55
+ it("leaves a root that has no /api alone", () => {
56
+ expect(captureApiRoot("https://agenthub.example.com")).toBe("https://agenthub.example.com");
57
+ });
58
+ });
59
+ describe("applyCaptureConsent — consent absent", () => {
60
+ it("writes nothing at all for a user who has not consented", () => {
61
+ const fs = fakeFs();
62
+ const status = applyCaptureConsent(false, opts(), fs.deps);
63
+ expect(fs.files.has(GRANT)).toBe(false);
64
+ expect(fs.files.has(SETTINGS)).toBe(false);
65
+ expect(status).toMatch(/not consented/);
66
+ });
67
+ it("removes a grant and deregisters the hook when consent is withdrawn", () => {
68
+ const existing = {
69
+ hooks: {
70
+ PostToolUse: [
71
+ { matcher: "", hooks: [{ type: "command", command: `bash "/opt/mcp/${CAPTURE_HOOK_MARKER}"` }] },
72
+ ],
73
+ },
74
+ };
75
+ const fs = fakeFs({
76
+ [SETTINGS]: JSON.stringify(existing),
77
+ [GRANT]: JSON.stringify({ connect_token: "rt-alice" }),
78
+ });
79
+ applyCaptureConsent(false, opts(), fs.deps);
80
+ expect(fs.files.has(GRANT)).toBe(false);
81
+ const after = JSON.parse(fs.files.get(SETTINGS));
82
+ expect(after.hooks.PostToolUse).toEqual([]);
83
+ // The per-session bootstrap cache goes too, so a stale session id cannot
84
+ // be reused if consent is granted again later.
85
+ expect(fs.removedDirs).toContain(captureStateDir(GRANT));
86
+ });
87
+ it("leaves the user's other hooks untouched while removing ours", () => {
88
+ const existing = {
89
+ model: "opus",
90
+ hooks: {
91
+ SessionStart: [{ hooks: [{ type: "command", command: "node inboxHookCli.js" }] }],
92
+ PostToolUse: [
93
+ { matcher: "", hooks: [{ type: "command", command: "node activityHookCli.js" }] },
94
+ { matcher: "", hooks: [{ type: "command", command: `bash "/opt/${CAPTURE_HOOK_MARKER}"` }] },
95
+ ],
96
+ },
97
+ };
98
+ const fs = fakeFs({ [SETTINGS]: JSON.stringify(existing) });
99
+ applyCaptureConsent(false, opts(), fs.deps);
100
+ const after = JSON.parse(fs.files.get(SETTINGS));
101
+ expect(after.model).toBe("opus");
102
+ expect(after.hooks.SessionStart).toHaveLength(1);
103
+ expect(after.hooks.PostToolUse).toHaveLength(1);
104
+ expect(after.hooks.PostToolUse[0].hooks[0].command).toContain("activityHookCli");
105
+ });
106
+ });
107
+ describe("applyCaptureConsent — consent given", () => {
108
+ it("writes the grant and registers the hook", () => {
109
+ const fs = fakeFs();
110
+ const status = applyCaptureConsent(true, opts(), fs.deps);
111
+ const grant = JSON.parse(fs.files.get(GRANT));
112
+ expect(grant.api_url).toBe("https://agenthub.example.com");
113
+ expect(grant.connect_token).toBe("rt-alice");
114
+ expect(grant.user_id).toBe("user-alice");
115
+ expect(grant.notice_interval_sec).toBeGreaterThan(0);
116
+ const settings = JSON.parse(fs.files.get(SETTINGS));
117
+ expect(settings.hooks.PostToolUse[0].hooks[0].command).toContain(CAPTURE_HOOK_MARKER);
118
+ expect(status).toMatch(/consented/);
119
+ });
120
+ it("writes the grant owner-only — it carries a credential", () => {
121
+ const fs = fakeFs();
122
+ applyCaptureConsent(true, opts(), fs.deps);
123
+ expect(fs.modes.get(GRANT)).toBe(0o600);
124
+ });
125
+ // The required test: the merge must not be a rewrite.
126
+ it("preserves an existing user hook configuration", () => {
127
+ const existing = {
128
+ permissions: { allow: ["Bash(npm run test)"] },
129
+ hooks: {
130
+ SessionStart: [{ hooks: [{ type: "command", command: "node inboxHookCli.js" }] }],
131
+ PostToolUse: [{ matcher: "Edit", hooks: [{ type: "command", command: "node activityHookCli.js" }] }],
132
+ Stop: [{ hooks: [{ type: "command", command: "say done" }] }],
133
+ },
134
+ };
135
+ const fs = fakeFs({ [SETTINGS]: JSON.stringify(existing) });
136
+ applyCaptureConsent(true, opts(), fs.deps);
137
+ const after = JSON.parse(fs.files.get(SETTINGS));
138
+ expect(after.permissions).toEqual(existing.permissions);
139
+ expect(after.hooks.SessionStart).toEqual(existing.hooks.SessionStart);
140
+ expect(after.hooks.Stop).toEqual(existing.hooks.Stop);
141
+ // The pre-existing PostToolUse entry survives verbatim, alongside ours.
142
+ expect(after.hooks.PostToolUse).toHaveLength(2);
143
+ expect(after.hooks.PostToolUse[0]).toEqual(existing.hooks.PostToolUse[0]);
144
+ expect(after.hooks.PostToolUse[1].hooks[0].command).toContain(CAPTURE_HOOK_MARKER);
145
+ });
146
+ it("is idempotent — a second run does not duplicate the hook entry", () => {
147
+ const fs = fakeFs();
148
+ applyCaptureConsent(true, opts(), fs.deps);
149
+ applyCaptureConsent(true, opts(), fs.deps);
150
+ const after = JSON.parse(fs.files.get(SETTINGS));
151
+ expect(after.hooks.PostToolUse).toHaveLength(1);
152
+ });
153
+ it("refuses to install without a credential rather than writing an inert grant", () => {
154
+ const fs = fakeFs();
155
+ const status = applyCaptureConsent(true, opts({ connectToken: "" }), fs.deps);
156
+ expect(fs.files.has(GRANT)).toBe(false);
157
+ expect(fs.files.has(SETTINGS)).toBe(false);
158
+ expect(status).toMatch(/no connect token/);
159
+ });
160
+ it("refuses to install when the hook script cannot be found", () => {
161
+ const fs = fakeFs();
162
+ const status = applyCaptureConsent(true, opts({ hookScript: null }), fs.deps);
163
+ expect(fs.files.has(GRANT)).toBe(false);
164
+ expect(status).toMatch(/not found/);
165
+ });
166
+ it("never rewrites a settings file it cannot parse", () => {
167
+ const fs = fakeFs({ [SETTINGS]: "{ this is not json" });
168
+ const status = applyCaptureConsent(true, opts(), fs.deps);
169
+ expect(fs.files.get(SETTINGS)).toBe("{ this is not json");
170
+ expect(fs.files.has(GRANT)).toBe(false);
171
+ expect(status).toMatch(/not valid JSON/);
172
+ });
173
+ });
174
+ describe("removeCaptureHook", () => {
175
+ it("keeps an entry that also carries a hook we did not install", () => {
176
+ const base = {
177
+ hooks: {
178
+ PostToolUse: [
179
+ {
180
+ matcher: "",
181
+ hooks: [
182
+ { type: "command", command: "node activityHookCli.js" },
183
+ { type: "command", command: `bash "${CAPTURE_HOOK_MARKER}"` },
184
+ ],
185
+ },
186
+ ],
187
+ },
188
+ };
189
+ const after = removeCaptureHook(base);
190
+ expect(after.hooks.PostToolUse).toHaveLength(1);
191
+ expect(after.hooks.PostToolUse[0].hooks).toHaveLength(1);
192
+ });
193
+ it("does not mutate the input", () => {
194
+ const base = {
195
+ hooks: { PostToolUse: [{ hooks: [{ type: "command", command: CAPTURE_HOOK_MARKER }] }] },
196
+ };
197
+ const snapshot = JSON.stringify(base);
198
+ removeCaptureHook(base);
199
+ expect(JSON.stringify(base)).toBe(snapshot);
200
+ });
201
+ it("is a no-op on settings that never had the hook", () => {
202
+ const base = { hooks: { SessionStart: [{ hooks: [{ type: "command", command: "x" }] }] } };
203
+ expect(removeCaptureHook(base)).toEqual(base);
204
+ });
205
+ });
206
+ describe("fetchCaptureConsent", () => {
207
+ const okResponse = (consented, streaming = true) => async () => ({
208
+ ok: true,
209
+ status: 200,
210
+ json: async () => ({
211
+ consent: { consented, user_id: "user-alice" },
212
+ streaming_enabled: streaming,
213
+ }),
214
+ });
215
+ it("reports consent when the server grants it", async () => {
216
+ const got = await fetchCaptureConsent("https://x/api", "rt", okResponse(true));
217
+ expect(got).toEqual({ consented: true, userId: "user-alice", streamingEnabled: true });
218
+ });
219
+ it("reports the absence of consent as such, not as an error", async () => {
220
+ const got = await fetchCaptureConsent("https://x/api", "rt", okResponse(false));
221
+ expect(got?.consented).toBe(false);
222
+ });
223
+ it("returns null (⇒ do not capture) when the server refuses", async () => {
224
+ const f = async () => ({ ok: false, status: 401, json: async () => ({}) });
225
+ expect(await fetchCaptureConsent("https://x/api", "rt", f)).toBeNull();
226
+ });
227
+ it("returns null (⇒ do not capture) when the server is unreachable", async () => {
228
+ const f = async () => {
229
+ throw new Error("ECONNREFUSED");
230
+ };
231
+ expect(await fetchCaptureConsent("https://x/api", "rt", f)).toBeNull();
232
+ });
233
+ it("does not even ask without a credential", async () => {
234
+ let called = false;
235
+ const f = async () => {
236
+ called = true;
237
+ return { ok: true, status: 200, json: async () => ({}) };
238
+ };
239
+ expect(await fetchCaptureConsent("https://x/api", "", f)).toBeNull();
240
+ expect(called).toBe(false);
241
+ });
242
+ });
243
+ describe("installCaptureHook — end to end", () => {
244
+ const base = {
245
+ clientBaseUrl: "https://agenthub.example.com/api",
246
+ connectToken: "rt-alice",
247
+ agentId: "agent-alice",
248
+ homeDir: "/home/alice",
249
+ moduleDir: "/opt/mcp/dist",
250
+ };
251
+ // installCaptureHook builds these with path.join, so the tests must too —
252
+ // otherwise they only pass on POSIX.
253
+ const grantPath = path.join(base.homeDir, ".claude", "agenthub-capture.json");
254
+ const settingsPath = path.join(base.homeDir, ".claude", "settings.json");
255
+ function withScript(seed = {}) {
256
+ const fs = fakeFs(seed);
257
+ // resolveCaptureHookScript probes the filesystem through the same `exists`.
258
+ fs.files.set(path.join(base.moduleDir, "session-capture.sh"), "#!/bin/bash");
259
+ return fs;
260
+ }
261
+ it("§3.4 — a server that says 'not consented' leaves the machine clean", async () => {
262
+ const fs = withScript();
263
+ const f = async () => ({
264
+ ok: true,
265
+ status: 200,
266
+ json: async () => ({ consent: { consented: false, user_id: "user-alice" }, streaming_enabled: true }),
267
+ });
268
+ await installCaptureHook({ ...base, fetchImpl: f, deps: fs.deps });
269
+ expect(fs.files.has(grantPath)).toBe(false);
270
+ expect(fs.files.has(settingsPath)).toBe(false);
271
+ });
272
+ it("fails closed — an unreachable server installs nothing", async () => {
273
+ const fs = withScript();
274
+ const f = async () => {
275
+ throw new Error("network down");
276
+ };
277
+ const status = await installCaptureHook({ ...base, fetchImpl: f, deps: fs.deps });
278
+ expect(fs.files.has(grantPath)).toBe(false);
279
+ expect(status).toMatch(/could not be confirmed/);
280
+ });
281
+ it("installs when the server confirms consent", async () => {
282
+ const fs = withScript();
283
+ const f = async () => ({
284
+ ok: true,
285
+ status: 200,
286
+ json: async () => ({ consent: { consented: true, user_id: "user-alice" }, streaming_enabled: true }),
287
+ });
288
+ await installCaptureHook({ ...base, fetchImpl: f, deps: fs.deps });
289
+ const grant = JSON.parse(fs.files.get(grantPath));
290
+ expect(grant.api_url).toBe("https://agenthub.example.com");
291
+ expect(grant.user_id).toBe("user-alice");
292
+ const settings = JSON.parse(fs.files.get(settingsPath));
293
+ expect(settings.hooks.PostToolUse[0].hooks[0].command).toContain(CAPTURE_HOOK_MARKER);
294
+ });
295
+ it("says so when consent is given but the server-side switch is off", async () => {
296
+ const fs = withScript();
297
+ const f = async () => ({
298
+ ok: true,
299
+ status: 200,
300
+ json: async () => ({ consent: { consented: true, user_id: "user-alice" }, streaming_enabled: false }),
301
+ });
302
+ const status = await installCaptureHook({ ...base, fetchImpl: f, deps: fs.deps });
303
+ expect(status).toMatch(/streaming is disabled/);
304
+ });
305
+ it("propagates a revocation: a previously installed hook and grant are removed", async () => {
306
+ const fs = withScript({
307
+ [settingsPath]: JSON.stringify({
308
+ hooks: {
309
+ PostToolUse: [{ matcher: "", hooks: [{ type: "command", command: `bash "${CAPTURE_HOOK_MARKER}"` }] }],
310
+ },
311
+ }),
312
+ [grantPath]: JSON.stringify({ connect_token: "rt-alice" }),
313
+ });
314
+ const f = async () => ({
315
+ ok: true,
316
+ status: 200,
317
+ json: async () => ({ consent: { consented: false, user_id: "user-alice" }, streaming_enabled: true }),
318
+ });
319
+ await installCaptureHook({ ...base, fetchImpl: f, deps: fs.deps });
320
+ expect(fs.files.has(grantPath)).toBe(false);
321
+ const settings = JSON.parse(fs.files.get(settingsPath));
322
+ expect(settings.hooks.PostToolUse).toEqual([]);
323
+ });
324
+ });
325
+ //# sourceMappingURL=captureHookInstall.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"captureHookInstall.test.js","sourceRoot":"","sources":["../src/captureHookInstall.test.ts"],"names":[],"mappings":"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"}
package/dist/channel.js CHANGED
@@ -20,6 +20,8 @@ import { Server } from "@modelcontextprotocol/sdk/server/index.js";
20
20
  import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
21
21
  import { CallToolRequestSchema, ListToolsRequestSchema, } from "@modelcontextprotocol/sdk/types.js";
22
22
  import WebSocket from "ws";
23
+ import { buildSteerTurnContent, parseSteerFrame, sessionSteerEnabled } from "./streamingRuntimeLib.js";
24
+ import * as state from "./state.js";
23
25
  // =============================================================================
24
26
  // Config
25
27
  // =============================================================================
@@ -134,6 +136,93 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
134
136
  return { content: [{ type: "text", text: `Unknown tool: ${name}` }] };
135
137
  });
136
138
  // =============================================================================
139
+ // Human steering over the channel (add-multiplayer-sessions §4.5)
140
+ // =============================================================================
141
+ //
142
+ // DELIVERY IS IMPLEMENTED HERE; THE DECLARATION IS DELIBERATELY NOT.
143
+ //
144
+ // The server refuses a steer for any session whose runtime has not declared a
145
+ // transport, so the question §4.5 asks of this plugin is: if a steer ever *is*
146
+ // routed here, does it land, or is it accepted and silently dropped? Before this
147
+ // branch existed the answer was "dropped" — the frame arrived on the socket and
148
+ // fell through the message handler with nothing to match it.
149
+ //
150
+ // The declaration is a separate matter, and this plugin genuinely cannot make
151
+ // it. `PUT /api/sessions/{id}/transport` needs the id of the coding session the
152
+ // steer is aimed at, and this process does not have one: an interactive Claude
153
+ // Code session is captured by the `session-capture.sh` hook, which owns
154
+ // `AGENTHUB_SESSION_ID`, and the plugin is a sibling subprocess with no view of
155
+ // it. Declaring `channel` from here would mean guessing which session this
156
+ // socket belongs to, and a wrong guess is a steer routed to a session nobody is
157
+ // watching — the same silent drop wearing the transport contract's clothes.
158
+ //
159
+ // So: nothing in this repository declares `channel`, interactive sessions stay
160
+ // non-injectable, and a human aiming a steer at one gets the server's 409 naming
161
+ // the transport rather than a 202 that lies. When the declaration is wired up
162
+ // (it needs the capture hook, which is outside this change's file ownership),
163
+ // the delivery half is already correct and tested.
164
+ /** Ack a channel-delivered steer (§4.4). Best-effort; see the note on identity. */
165
+ async function markSteerApplied(frame) {
166
+ // The endpoint refuses a caller it cannot name — an org API key identifies a
167
+ // deployment, not a person, and every steer action is audited with an acting
168
+ // identity. The connect token lives in the workspace's `.agenthub/state`, the
169
+ // same place the MCP client reads it from.
170
+ const connectToken = state.loadState(process.cwd())?.token;
171
+ if (!connectToken)
172
+ return; // the steer stays `pending`, which is honest: nothing acked it
173
+ try {
174
+ await fetch(`${API_URL}/api/sessions/${encodeURIComponent(frame.sessionId)}/steers/${encodeURIComponent(frame.steerId)}/applied`, {
175
+ method: "POST",
176
+ headers: {
177
+ "Content-Type": "application/json",
178
+ "X-API-Key": API_KEY,
179
+ "X-Connect-Token": connectToken,
180
+ },
181
+ body: "{}",
182
+ });
183
+ }
184
+ catch {
185
+ // A failed ack leaves the steer `pending` — the model still saw it, and the
186
+ // display under-reports rather than over-reports. Never fatal to the plugin.
187
+ }
188
+ }
189
+ /**
190
+ * Deliver a steer into the live session as a channel notification.
191
+ *
192
+ * Emitting the notification *is* consumption for this transport: the frame
193
+ * becomes a new turn the model sees, and there is no later moment at which the
194
+ * plugin learns whether it was acted on. So the ack follows a successful emit and
195
+ * nothing else — an ack before it would claim delivery that had not happened.
196
+ */
197
+ async function handleSteerFrame(msg) {
198
+ if (!sessionSteerEnabled())
199
+ return;
200
+ const frame = parseSteerFrame(msg);
201
+ if (!frame)
202
+ return;
203
+ // Same framing function the streaming runtime uses (§4.3): a human instruction,
204
+ // with no suggestion of replying via agenthub_reply.
205
+ await server.notification({
206
+ method: "notifications/claude/channel",
207
+ params: {
208
+ content: buildSteerTurnContent({
209
+ id: frame.steerId,
210
+ from_agent: frame.createdBy,
211
+ type: frame.messageType,
212
+ body: frame.text,
213
+ }),
214
+ meta: {
215
+ source: "agenthub",
216
+ type: "session_steer",
217
+ session_id: frame.sessionId,
218
+ steer_id: frame.steerId,
219
+ from: frame.createdBy,
220
+ },
221
+ },
222
+ });
223
+ await markSteerApplied(frame);
224
+ }
225
+ // =============================================================================
137
226
  // WebSocket: connect to AgentHub and emit channel notifications
138
227
  // =============================================================================
139
228
  let ws = null;
@@ -180,6 +269,13 @@ function connectWebSocket() {
180
269
  },
181
270
  });
182
271
  }
272
+ // add-multiplayer-sessions §4.5 — a human steering this session. Handled
273
+ // rather than falling through, which is what "never accepted and dropped"
274
+ // means on the receiving end.
275
+ if (msg.type === "session_steer") {
276
+ await handleSteerFrame(msg);
277
+ return;
278
+ }
183
279
  if (msg.type === "task" && msg.task) {
184
280
  const t = msg.task;
185
281
  await server.notification({
@@ -1 +1 @@
1
- {"version":3,"file":"channel.js","sourceRoot":"","sources":["../src/channel.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"channel.js","sourceRoot":"","sources":["../src/channel.ts"],"names":[],"mappings":"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"}
package/dist/client.d.ts CHANGED
@@ -167,6 +167,32 @@ export declare function filenameFromContentDisposition(header: string | null): s
167
167
  * ownership §7.1). Non-lifecycle errors pass through unchanged.
168
168
  */
169
169
  export declare function authLifecycleHint(status: number, code: string, message: string): string;
170
+ /**
171
+ * Result of a session steer/control call (add-multiplayer-sessions).
172
+ *
173
+ * Deliberately non-throwing: these endpoints answer with expected 4xx/503
174
+ * codes (`session_not_injectable`, `session_already_claimed`,
175
+ * `session_steer_disabled`) that a tool must be able to relay verbatim rather
176
+ * than collapse into an exception message.
177
+ */
178
+ export type SessionControlResult = {
179
+ ok: true;
180
+ status: number;
181
+ data: Record<string, unknown>;
182
+ } | {
183
+ ok: false;
184
+ status: number;
185
+ /** Server `error` code, or `http_<status>` when the body carried none. */
186
+ error: string;
187
+ /** Server `message`, when present. */
188
+ message?: string;
189
+ /** Server `reason` — why a session cannot be steered. */
190
+ reason?: string;
191
+ /** Server `holder` — who currently holds the claim. */
192
+ holder?: string;
193
+ /** Set when the error body was not JSON; carries the status + a snippet. */
194
+ detail?: string;
195
+ };
170
196
  export declare class ApiClient {
171
197
  private baseUrl;
172
198
  private apiKey;
@@ -1151,5 +1177,29 @@ export declare class ApiClient {
1151
1177
  request_id?: string;
1152
1178
  status?: string;
1153
1179
  }>;
1180
+ private sessionControlHeaders;
1181
+ /**
1182
+ * Issue a session-control request and return a structured result.
1183
+ *
1184
+ * Never throws on an HTTP status. Parses the body defensively and *always*
1185
+ * carries the HTTP status forward: an empty body (chi's bare 405 for an
1186
+ * unmatched method) or an HTML body (a proxy error page) must not degrade
1187
+ * into an opaque JSON parse error the way `request()` once did before
1188
+ * fix-mcp-nonjson-error-handling. Status first, parse second.
1189
+ */
1190
+ private sessionControlFetch;
1191
+ /**
1192
+ * Inject a human instruction into a live session.
1193
+ * `sessionId` may be a UUID or a display number (`s-YYYYMMDD-NNN`).
1194
+ */
1195
+ steerSession(sessionId: string, text: string): Promise<SessionControlResult>;
1196
+ /** List recorded steers for a session with their pending/applied status. */
1197
+ listSessionSteers(sessionId: string): Promise<SessionControlResult>;
1198
+ /** Read the session's control state (agent_driven | draining | human_driven). */
1199
+ getSessionControl(sessionId: string): Promise<SessionControlResult>;
1200
+ /** Claim exclusive (leased) control of a live session. */
1201
+ claimSession(sessionId: string): Promise<SessionControlResult>;
1202
+ /** Hand control of a session back to the agent. */
1203
+ releaseSession(sessionId: string): Promise<SessionControlResult>;
1154
1204
  }
1155
1205
  //# sourceMappingURL=client.d.ts.map