xiaotime 0.3.0 → 0.5.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.
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=legacy_compat.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"legacy_compat.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/legacy_compat.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ /**
4
+ * Legacy-compatibility / version-cutover tests.
5
+ *
6
+ * SPRINT-TERMINAL-CLIENT-OWNED-DISPATCH-1 (#6565) PR5.
7
+ *
8
+ * The hard cutover (decision D2) rejects CLI <0.4.0 at the WS auth
9
+ * handshake: the CLI sends its `version`, the server gates on it.
10
+ * These tests guard the CLI half of that contract — the version the
11
+ * CLI advertises must be its real package version and at/above the
12
+ * 0.4.0 client-owned-dispatch floor. The server-side rejection logic
13
+ * is covered by tests/test_terminal_orchestrator_cli_version.py.
14
+ */
15
+ const vitest_1 = require("vitest");
16
+ const config_js_1 = require("../config.js");
17
+ // `require` (not `import`) so the tsc build doesn't flag package.json
18
+ // as outside rootDir (TS6059); vitest resolves it fine at runtime.
19
+ const pkg = require("../../package.json");
20
+ (0, vitest_1.describe)("CLI version cutover (#6565 PR5)", () => {
21
+ (0, vitest_1.test)("CLI_VERSION matches package.json — no drift", () => {
22
+ // The server gates the WS handshake on the version the CLI sends.
23
+ // If CLI_VERSION drifts from package.json the CLI would advertise
24
+ // a version it isn't, silently defeating the cutover gate.
25
+ (0, vitest_1.expect)(config_js_1.CLI_VERSION).toBe(pkg.version);
26
+ });
27
+ (0, vitest_1.test)("CLI_VERSION is a 3-part semver at or above the 0.4.0 floor", () => {
28
+ const parts = config_js_1.CLI_VERSION.split(".").map((p) => Number.parseInt(p, 10));
29
+ (0, vitest_1.expect)(parts).toHaveLength(3);
30
+ (0, vitest_1.expect)(parts.every((n) => Number.isInteger(n))).toBe(true);
31
+ const [major, minor] = parts;
32
+ // >= 0.4.0 — the client-owned-dispatch cutover floor.
33
+ (0, vitest_1.expect)(major > 0 || (major === 0 && minor >= 4)).toBe(true);
34
+ });
35
+ });
36
+ //# sourceMappingURL=legacy_compat.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"legacy_compat.test.js","sourceRoot":"","sources":["../../src/__tests__/legacy_compat.test.ts"],"names":[],"mappings":";;AAAA;;;;;;;;;;;GAWG;AACH,mCAAgD;AAChD,4CAA2C;AAE3C,sEAAsE;AACtE,mEAAmE;AACnE,MAAM,GAAG,GAAG,OAAO,CAAC,oBAAoB,CAAwB,CAAC;AAEjE,IAAA,iBAAQ,EAAC,iCAAiC,EAAE,GAAG,EAAE;IAC/C,IAAA,aAAI,EAAC,6CAA6C,EAAE,GAAG,EAAE;QACvD,kEAAkE;QAClE,kEAAkE;QAClE,2DAA2D;QAC3D,IAAA,eAAM,EAAC,uBAAW,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;IAEH,IAAA,aAAI,EAAC,4DAA4D,EAAE,GAAG,EAAE;QACtE,MAAM,KAAK,GAAG,uBAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;QACxE,IAAA,eAAM,EAAC,KAAK,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QAC9B,IAAA,eAAM,EAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC3D,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,KAAK,CAAC;QAC7B,sDAAsD;QACtD,IAAA,eAAM,EAAC,KAAK,GAAG,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC9D,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * REST POST client tests.
3
+ *
4
+ * SPRINT-TERMINAL-CLIENT-OWNED-DISPATCH-1 (#6565) PR3.
5
+ *
6
+ * Verifies the contract between the CLI's drain queue (in ws.ts)
7
+ * and the server's POST /tool_results endpoint (added in PR1,
8
+ * consumed by PR2's dispatch refactor):
9
+ *
10
+ * - Happy path: 200 OK returns parsed body (completed,
11
+ * all_completed, resume_signaled).
12
+ * - Retry policy: 5xx + network errors retry with exponential
13
+ * backoff (100ms → 200ms → 400ms, 3 attempts total).
14
+ * - 4xx is durable — throws immediately, no retry.
15
+ * - Auth header (x-api-key with the cli_token) on every attempt.
16
+ * - Request body shape matches the server's PostToolResultsRequest
17
+ * Pydantic model.
18
+ */
19
+ export {};
20
+ //# sourceMappingURL=tool_result_client.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool_result_client.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/tool_result_client.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG"}
@@ -0,0 +1,142 @@
1
+ "use strict";
2
+ /**
3
+ * REST POST client tests.
4
+ *
5
+ * SPRINT-TERMINAL-CLIENT-OWNED-DISPATCH-1 (#6565) PR3.
6
+ *
7
+ * Verifies the contract between the CLI's drain queue (in ws.ts)
8
+ * and the server's POST /tool_results endpoint (added in PR1,
9
+ * consumed by PR2's dispatch refactor):
10
+ *
11
+ * - Happy path: 200 OK returns parsed body (completed,
12
+ * all_completed, resume_signaled).
13
+ * - Retry policy: 5xx + network errors retry with exponential
14
+ * backoff (100ms → 200ms → 400ms, 3 attempts total).
15
+ * - 4xx is durable — throws immediately, no retry.
16
+ * - Auth header (x-api-key with the cli_token) on every attempt.
17
+ * - Request body shape matches the server's PostToolResultsRequest
18
+ * Pydantic model.
19
+ */
20
+ Object.defineProperty(exports, "__esModule", { value: true });
21
+ const vitest_1 = require("vitest");
22
+ const tool_result_client_js_1 = require("../tool_result_client.js");
23
+ // Mock the auth module so we don't read a real token from
24
+ // ~/.xiaotime/cli_token.json during tests.
25
+ vitest_1.vi.mock("../auth.js", () => ({
26
+ getToken: () => "fake-cli-token-for-tests",
27
+ }));
28
+ // Mock the config so the URL is deterministic.
29
+ vitest_1.vi.mock("../config.js", () => ({
30
+ ORCHESTRATOR_URL: "https://terminal.xiaotime.test",
31
+ }));
32
+ let fetchMock;
33
+ let origFetch;
34
+ (0, vitest_1.beforeEach)(() => {
35
+ fetchMock = vitest_1.vi.fn();
36
+ origFetch = globalThis.fetch;
37
+ globalThis.fetch = fetchMock;
38
+ });
39
+ (0, vitest_1.afterEach)(() => {
40
+ globalThis.fetch = origFetch;
41
+ vitest_1.vi.restoreAllMocks();
42
+ });
43
+ function _okResponse(body) {
44
+ return new Response(JSON.stringify(body), {
45
+ status: 200,
46
+ headers: { "content-type": "application/json" },
47
+ });
48
+ }
49
+ function _errorResponse(status, body) {
50
+ return new Response(body, { status });
51
+ }
52
+ (0, vitest_1.describe)("postToolResults happy path", () => {
53
+ (0, vitest_1.test)("posts to correct URL with auth header + JSON body", async () => {
54
+ fetchMock.mockResolvedValue(_okResponse({ completed: ["toolu_a"], all_completed: true, resume_signaled: true }));
55
+ const result = await (0, tool_result_client_js_1.postToolResults)("session-abc", [
56
+ { tool_use_id: "toolu_a", content: "ok", is_error: false },
57
+ ]);
58
+ (0, vitest_1.expect)(result).toEqual({
59
+ completed: ["toolu_a"],
60
+ all_completed: true,
61
+ resume_signaled: true,
62
+ });
63
+ (0, vitest_1.expect)(fetchMock).toHaveBeenCalledTimes(1);
64
+ const [url, init] = fetchMock.mock.calls[0];
65
+ (0, vitest_1.expect)(url).toBe("https://terminal.xiaotime.test/terminal/sessions/session-abc/tool_results");
66
+ (0, vitest_1.expect)(init.method).toBe("POST");
67
+ (0, vitest_1.expect)(init.headers["x-api-key"]).toBe("fake-cli-token-for-tests");
68
+ (0, vitest_1.expect)(init.headers["Content-Type"]).toBe("application/json");
69
+ const body = JSON.parse(init.body);
70
+ (0, vitest_1.expect)(body).toEqual({
71
+ results: [{ tool_use_id: "toolu_a", content: "ok", is_error: false }],
72
+ });
73
+ });
74
+ (0, vitest_1.test)("supports multi-result batches", async () => {
75
+ fetchMock.mockResolvedValue(_okResponse({
76
+ completed: ["toolu_a", "toolu_b"],
77
+ all_completed: false,
78
+ resume_signaled: false,
79
+ }));
80
+ await (0, tool_result_client_js_1.postToolResults)("sess", [
81
+ { tool_use_id: "toolu_a", content: "1", is_error: false },
82
+ { tool_use_id: "toolu_b", content: "2", is_error: true },
83
+ ]);
84
+ const body = JSON.parse(fetchMock.mock.calls[0][1].body);
85
+ (0, vitest_1.expect)(body.results).toHaveLength(2);
86
+ (0, vitest_1.expect)(body.results[1].is_error).toBe(true);
87
+ });
88
+ });
89
+ (0, vitest_1.describe)("postToolResults retry behavior", () => {
90
+ (0, vitest_1.test)("4xx error throws immediately without retrying", async () => {
91
+ // Use mockImplementation (fresh Response per call) instead of
92
+ // mockResolvedValue (single Response instance) — the latter's
93
+ // body stream gets consumed on the first .text() read and
94
+ // subsequent reads fail with "Body is unusable".
95
+ fetchMock.mockImplementation(() => Promise.resolve(_errorResponse(400, "unknown_tool_use_id")));
96
+ await (0, vitest_1.expect)((0, tool_result_client_js_1.postToolResults)("sess", [
97
+ { tool_use_id: "toolu_a", content: "x", is_error: false },
98
+ ])).rejects.toThrow(/rejected \(400\)/);
99
+ (0, vitest_1.expect)(fetchMock).toHaveBeenCalledTimes(1);
100
+ });
101
+ (0, vitest_1.test)("4xx error includes server body in the thrown message", async () => {
102
+ fetchMock.mockImplementation(() => Promise.resolve(_errorResponse(400, '{"code":"unknown_tool_use_id","unknown":["toolu_x"]}')));
103
+ await (0, vitest_1.expect)((0, tool_result_client_js_1.postToolResults)("sess", [
104
+ { tool_use_id: "toolu_x", content: "x", is_error: false },
105
+ ])).rejects.toThrow(/unknown_tool_use_id/);
106
+ });
107
+ (0, vitest_1.test)("5xx error retries up to 3 attempts then throws", async () => {
108
+ fetchMock.mockImplementation(() => Promise.resolve(_errorResponse(503, "service unavailable")));
109
+ await (0, vitest_1.expect)((0, tool_result_client_js_1.postToolResults)("sess", [
110
+ { tool_use_id: "toolu_a", content: "x", is_error: false },
111
+ ])).rejects.toThrow(/503/);
112
+ (0, vitest_1.expect)(fetchMock).toHaveBeenCalledTimes(3);
113
+ });
114
+ (0, vitest_1.test)("5xx then success on retry → returns success", async () => {
115
+ fetchMock
116
+ .mockResolvedValueOnce(_errorResponse(500, "internal"))
117
+ .mockResolvedValueOnce(_okResponse({ completed: ["a"], all_completed: true, resume_signaled: true }));
118
+ const result = await (0, tool_result_client_js_1.postToolResults)("sess", [
119
+ { tool_use_id: "a", content: "x", is_error: false },
120
+ ]);
121
+ (0, vitest_1.expect)(result.all_completed).toBe(true);
122
+ (0, vitest_1.expect)(fetchMock).toHaveBeenCalledTimes(2);
123
+ });
124
+ (0, vitest_1.test)("network error retries up to 3 attempts then throws", async () => {
125
+ fetchMock.mockRejectedValue(new Error("ECONNRESET"));
126
+ await (0, vitest_1.expect)((0, tool_result_client_js_1.postToolResults)("sess", [
127
+ { tool_use_id: "a", content: "x", is_error: false },
128
+ ])).rejects.toThrow(/ECONNRESET/);
129
+ (0, vitest_1.expect)(fetchMock).toHaveBeenCalledTimes(3);
130
+ });
131
+ (0, vitest_1.test)("network error then success on retry → returns success", async () => {
132
+ fetchMock
133
+ .mockRejectedValueOnce(new Error("ECONNRESET"))
134
+ .mockResolvedValueOnce(_okResponse({ completed: ["a"], all_completed: false, resume_signaled: false }));
135
+ const result = await (0, tool_result_client_js_1.postToolResults)("sess", [
136
+ { tool_use_id: "a", content: "x", is_error: false },
137
+ ]);
138
+ (0, vitest_1.expect)(result.completed).toEqual(["a"]);
139
+ (0, vitest_1.expect)(fetchMock).toHaveBeenCalledTimes(2);
140
+ });
141
+ });
142
+ //# sourceMappingURL=tool_result_client.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool_result_client.test.js","sourceRoot":"","sources":["../../src/__tests__/tool_result_client.test.ts"],"names":[],"mappings":"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"}
package/dist/config.d.ts CHANGED
@@ -22,4 +22,13 @@
22
22
  export declare const ORCHESTRATOR_URL: string;
23
23
  export declare const AUTH_URL: string;
24
24
  export declare const WS_URL: string;
25
+ /**
26
+ * The CLI's own version, sent in the WebSocket auth handshake so the
27
+ * server can reject pre-0.4.0 clients (#6565 PR5 — the client-owned
28
+ * dispatch cutover) and pre-0.5.0 clients that don't ship the tool
29
+ * manifest declaration the brain-dispatch path expects post-#7224 PR3.
30
+ * MUST stay in sync with `version` in package.json; the drift-guard
31
+ * test in `__tests__/legacy_compat.test.ts` enforces it.
32
+ */
33
+ export declare const CLI_VERSION = "0.5.0";
25
34
  //# sourceMappingURL=config.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAGH,eAAO,MAAM,gBAAgB,QAC4C,CAAC;AAK1E,eAAO,MAAM,QAAQ,QACuC,CAAC;AAQ7D,eAAO,MAAM,MAAM,QAA4B,CAAC"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAGH,eAAO,MAAM,gBAAgB,QAC4C,CAAC;AAK1E,eAAO,MAAM,QAAQ,QACuC,CAAC;AAQ7D,eAAO,MAAM,MAAM,QAA4B,CAAC;AAEhD;;;;;;;GAOG;AACH,eAAO,MAAM,WAAW,UAAU,CAAC"}
package/dist/config.js CHANGED
@@ -21,7 +21,7 @@
21
21
  * got 404. Restored in 0.2.1 (#6097 PR2 follow-up).
22
22
  */
23
23
  Object.defineProperty(exports, "__esModule", { value: true });
24
- exports.WS_URL = exports.AUTH_URL = exports.ORCHESTRATOR_URL = void 0;
24
+ exports.CLI_VERSION = exports.WS_URL = exports.AUTH_URL = exports.ORCHESTRATOR_URL = void 0;
25
25
  // Terminal orchestrator — handles dev sessions (WebSocket + REST).
26
26
  exports.ORCHESTRATOR_URL = process.env.XIAOTIME_ORCHESTRATOR_URL || "https://terminal.xiaotime.ai";
27
27
  // Main orchestrator — handles the OAuth login flow (init + token poll).
@@ -34,4 +34,13 @@ function toWsUrl(url) {
34
34
  return parsed.toString().replace(/\/$/, "");
35
35
  }
36
36
  exports.WS_URL = toWsUrl(exports.ORCHESTRATOR_URL);
37
+ /**
38
+ * The CLI's own version, sent in the WebSocket auth handshake so the
39
+ * server can reject pre-0.4.0 clients (#6565 PR5 — the client-owned
40
+ * dispatch cutover) and pre-0.5.0 clients that don't ship the tool
41
+ * manifest declaration the brain-dispatch path expects post-#7224 PR3.
42
+ * MUST stay in sync with `version` in package.json; the drift-guard
43
+ * test in `__tests__/legacy_compat.test.ts` enforces it.
44
+ */
45
+ exports.CLI_VERSION = "0.5.0";
37
46
  //# sourceMappingURL=config.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;;;AAEH,mEAAmE;AACtD,QAAA,gBAAgB,GAC3B,OAAO,CAAC,GAAG,CAAC,yBAAyB,IAAI,8BAA8B,CAAC;AAE1E,wEAAwE;AACxE,6EAA6E;AAC7E,4BAA4B;AACf,QAAA,QAAQ,GACnB,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,yBAAyB,CAAC;AAE7D,SAAS,OAAO,CAAC,GAAW;IAC1B,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;IAC5B,MAAM,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC;IAChE,OAAO,MAAM,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;AAC9C,CAAC;AAEY,QAAA,MAAM,GAAG,OAAO,CAAC,wBAAgB,CAAC,CAAC"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;;;AAEH,mEAAmE;AACtD,QAAA,gBAAgB,GAC3B,OAAO,CAAC,GAAG,CAAC,yBAAyB,IAAI,8BAA8B,CAAC;AAE1E,wEAAwE;AACxE,6EAA6E;AAC7E,4BAA4B;AACf,QAAA,QAAQ,GACnB,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,yBAAyB,CAAC;AAE7D,SAAS,OAAO,CAAC,GAAW;IAC1B,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;IAC5B,MAAM,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC;IAChE,OAAO,MAAM,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;AAC9C,CAAC;AAEY,QAAA,MAAM,GAAG,OAAO,CAAC,wBAAgB,CAAC,CAAC;AAEhD;;;;;;;GAOG;AACU,QAAA,WAAW,GAAG,OAAO,CAAC"}
@@ -0,0 +1,72 @@
1
+ /**
2
+ * REST POST client for tool_result delivery.
3
+ *
4
+ * SPRINT-TERMINAL-CLIENT-OWNED-DISPATCH-1 (#6565) PR3.
5
+ *
6
+ * Pre-#6565 the CLI sent tool_result back to terminal-orchestrator
7
+ * over the WebSocket — the server awaited each one inline with a
8
+ * 120s timeout. Any approval taking >2 min wedged the session
9
+ * (the wedge class observed live 2026-05-20 during #6509 PR1
10
+ * canary).
11
+ *
12
+ * Post-#6565 the CLI POSTs results to the new REST endpoint:
13
+ *
14
+ * POST <ORCHESTRATOR_URL>/terminal/sessions/{session_id}/tool_results
15
+ * Headers: x-api-key: <cli_token>
16
+ * Body: {"results": [{tool_use_id, content, is_error}, ...]}
17
+ *
18
+ * Server-side: atomic across the batch. Any unknown `tool_use_id`
19
+ * → 400 `unknown_tool_use_id` + no rows mutated. On success,
20
+ * ``mark_completed_batch.all_completed=True`` signals the WS
21
+ * handler (waiting on the per-session resume queue) to assemble
22
+ * tool_result blocks + resume the model stream.
23
+ *
24
+ * Retry policy: 3 attempts with 100ms→200ms→400ms exponential
25
+ * backoff for transient 5xx + network errors. 4xx errors are
26
+ * non-retriable (the server's rejection is durable — the
27
+ * tool_use_id IS unknown, retrying won't change that).
28
+ *
29
+ * Failure mode if all retries exhaust: the tool_result is lost
30
+ * from the server's perspective; the corresponding row stays as
31
+ * `status='pending'` in `terminal_pending_tool_calls` until the
32
+ * future expiry sweep (PR5). The user-visible symptom is a
33
+ * session that appears frozen (model never resumes). Tightening
34
+ * this is the WS-reconnect-replay work in PR4 — on the next WS
35
+ * connect, server re-emits pending tool_call events and the CLI
36
+ * can re-attempt the POST after re-rendering the menu.
37
+ */
38
+ export interface ToolResultEntry {
39
+ tool_use_id: string;
40
+ content: string;
41
+ is_error: boolean;
42
+ }
43
+ export interface PostToolResultsResponse {
44
+ completed: string[];
45
+ all_completed: boolean;
46
+ resume_signaled: boolean;
47
+ }
48
+ /**
49
+ * Thrown on durable (4xx) HTTP rejections that retrying won't fix.
50
+ * #6573 CR-r1: replaces the pre-r1 string-prefix matching on the
51
+ * Error message (`startsWith("POST tool_results rejected")`) which
52
+ * was fragile to message-format drift. The retry loop checks
53
+ * `instanceof DurableHttpError` and re-throws without retry; all
54
+ * other thrown errors are treated as transient + retried.
55
+ */
56
+ export declare class DurableHttpError extends Error {
57
+ readonly status: number;
58
+ readonly body: string;
59
+ constructor(status: number, body: string);
60
+ }
61
+ /**
62
+ * POST a batch of tool_results to the orchestrator. Retries on
63
+ * 5xx / network errors with exponential backoff; throws on
64
+ * 4xx (non-retriable) or after retries exhaust.
65
+ *
66
+ * Most callers pass a single-result batch (one tool finished, POST
67
+ * the result, move to next). Batch form exists so a future
68
+ * client-side allowlist-auto-execute path could fire multiple
69
+ * results in one POST.
70
+ */
71
+ export declare function postToolResults(sessionId: string, results: ToolResultEntry[]): Promise<PostToolResultsResponse>;
72
+ //# sourceMappingURL=tool_result_client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool_result_client.d.ts","sourceRoot":"","sources":["../src/tool_result_client.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AAKH,MAAM,WAAW,eAAe;IAC9B,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,uBAAuB;IACtC,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,aAAa,EAAE,OAAO,CAAC;IACvB,eAAe,EAAE,OAAO,CAAC;CAC1B;AAED;;;;;;;GAOG;AACH,qBAAa,gBAAiB,SAAQ,KAAK;IACzC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;gBACV,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM;CAMzC;AAKD;;;;;;;;;GASG;AACH,wBAAsB,eAAe,CACnC,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,eAAe,EAAE,GACzB,OAAO,CAAC,uBAAuB,CAAC,CAmDlC"}
@@ -0,0 +1,123 @@
1
+ "use strict";
2
+ /**
3
+ * REST POST client for tool_result delivery.
4
+ *
5
+ * SPRINT-TERMINAL-CLIENT-OWNED-DISPATCH-1 (#6565) PR3.
6
+ *
7
+ * Pre-#6565 the CLI sent tool_result back to terminal-orchestrator
8
+ * over the WebSocket — the server awaited each one inline with a
9
+ * 120s timeout. Any approval taking >2 min wedged the session
10
+ * (the wedge class observed live 2026-05-20 during #6509 PR1
11
+ * canary).
12
+ *
13
+ * Post-#6565 the CLI POSTs results to the new REST endpoint:
14
+ *
15
+ * POST <ORCHESTRATOR_URL>/terminal/sessions/{session_id}/tool_results
16
+ * Headers: x-api-key: <cli_token>
17
+ * Body: {"results": [{tool_use_id, content, is_error}, ...]}
18
+ *
19
+ * Server-side: atomic across the batch. Any unknown `tool_use_id`
20
+ * → 400 `unknown_tool_use_id` + no rows mutated. On success,
21
+ * ``mark_completed_batch.all_completed=True`` signals the WS
22
+ * handler (waiting on the per-session resume queue) to assemble
23
+ * tool_result blocks + resume the model stream.
24
+ *
25
+ * Retry policy: 3 attempts with 100ms→200ms→400ms exponential
26
+ * backoff for transient 5xx + network errors. 4xx errors are
27
+ * non-retriable (the server's rejection is durable — the
28
+ * tool_use_id IS unknown, retrying won't change that).
29
+ *
30
+ * Failure mode if all retries exhaust: the tool_result is lost
31
+ * from the server's perspective; the corresponding row stays as
32
+ * `status='pending'` in `terminal_pending_tool_calls` until the
33
+ * future expiry sweep (PR5). The user-visible symptom is a
34
+ * session that appears frozen (model never resumes). Tightening
35
+ * this is the WS-reconnect-replay work in PR4 — on the next WS
36
+ * connect, server re-emits pending tool_call events and the CLI
37
+ * can re-attempt the POST after re-rendering the menu.
38
+ */
39
+ Object.defineProperty(exports, "__esModule", { value: true });
40
+ exports.DurableHttpError = void 0;
41
+ exports.postToolResults = postToolResults;
42
+ const config_js_1 = require("./config.js");
43
+ const auth_js_1 = require("./auth.js");
44
+ /**
45
+ * Thrown on durable (4xx) HTTP rejections that retrying won't fix.
46
+ * #6573 CR-r1: replaces the pre-r1 string-prefix matching on the
47
+ * Error message (`startsWith("POST tool_results rejected")`) which
48
+ * was fragile to message-format drift. The retry loop checks
49
+ * `instanceof DurableHttpError` and re-throws without retry; all
50
+ * other thrown errors are treated as transient + retried.
51
+ */
52
+ class DurableHttpError extends Error {
53
+ status;
54
+ body;
55
+ constructor(status, body) {
56
+ super(`POST tool_results rejected (${status}): ${body}`);
57
+ this.name = "DurableHttpError";
58
+ this.status = status;
59
+ this.body = body;
60
+ }
61
+ }
62
+ exports.DurableHttpError = DurableHttpError;
63
+ const MAX_ATTEMPTS = 3;
64
+ const BACKOFF_BASE_MS = 100;
65
+ /**
66
+ * POST a batch of tool_results to the orchestrator. Retries on
67
+ * 5xx / network errors with exponential backoff; throws on
68
+ * 4xx (non-retriable) or after retries exhaust.
69
+ *
70
+ * Most callers pass a single-result batch (one tool finished, POST
71
+ * the result, move to next). Batch form exists so a future
72
+ * client-side allowlist-auto-execute path could fire multiple
73
+ * results in one POST.
74
+ */
75
+ async function postToolResults(sessionId, results) {
76
+ const url = `${config_js_1.ORCHESTRATOR_URL}/terminal/sessions/${sessionId}/tool_results`;
77
+ const headers = {
78
+ "Content-Type": "application/json",
79
+ "x-api-key": (0, auth_js_1.getToken)(),
80
+ };
81
+ const body = JSON.stringify({ results });
82
+ let lastErr = null;
83
+ for (let attempt = 1; attempt <= MAX_ATTEMPTS; attempt++) {
84
+ try {
85
+ const response = await fetch(url, {
86
+ method: "POST",
87
+ headers,
88
+ body,
89
+ });
90
+ if (response.ok) {
91
+ return (await response.json());
92
+ }
93
+ // 4xx is durable — server rejected the payload, retrying
94
+ // won't change the outcome. Throw a typed DurableHttpError
95
+ // (caught + re-raised below via instanceof check, never
96
+ // retried).
97
+ if (response.status >= 400 && response.status < 500) {
98
+ const errBody = await response.text();
99
+ throw new DurableHttpError(response.status, errBody);
100
+ }
101
+ // 5xx — retriable.
102
+ lastErr = new Error(`POST tool_results failed (${response.status}): ${await response.text()}`);
103
+ }
104
+ catch (err) {
105
+ // #6573 CR-r1: type-check the rejection class instead of
106
+ // string-matching the Error message. DurableHttpError means
107
+ // "server told us no, retrying won't change that" — re-raise
108
+ // immediately. Everything else (network error, fetch
109
+ // failure, unexpected throw) is treated as transient +
110
+ // retried below.
111
+ if (err instanceof DurableHttpError) {
112
+ throw err;
113
+ }
114
+ lastErr = err instanceof Error ? err : new Error(String(err));
115
+ }
116
+ if (attempt < MAX_ATTEMPTS) {
117
+ const delay = BACKOFF_BASE_MS * 2 ** (attempt - 1);
118
+ await new Promise((r) => setTimeout(r, delay));
119
+ }
120
+ }
121
+ throw lastErr ?? new Error("POST tool_results failed (unknown)");
122
+ }
123
+ //# sourceMappingURL=tool_result_client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool_result_client.js","sourceRoot":"","sources":["../src/tool_result_client.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;;;AAiDH,0CAsDC;AArGD,2CAA+C;AAC/C,uCAAqC;AAcrC;;;;;;;GAOG;AACH,MAAa,gBAAiB,SAAQ,KAAK;IAChC,MAAM,CAAS;IACf,IAAI,CAAS;IACtB,YAAY,MAAc,EAAE,IAAY;QACtC,KAAK,CAAC,+BAA+B,MAAM,MAAM,IAAI,EAAE,CAAC,CAAC;QACzD,IAAI,CAAC,IAAI,GAAG,kBAAkB,CAAC;QAC/B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;CACF;AATD,4CASC;AAED,MAAM,YAAY,GAAG,CAAC,CAAC;AACvB,MAAM,eAAe,GAAG,GAAG,CAAC;AAE5B;;;;;;;;;GASG;AACI,KAAK,UAAU,eAAe,CACnC,SAAiB,EACjB,OAA0B;IAE1B,MAAM,GAAG,GAAG,GAAG,4BAAgB,sBAAsB,SAAS,eAAe,CAAC;IAC9E,MAAM,OAAO,GAAG;QACd,cAAc,EAAE,kBAAkB;QAClC,WAAW,EAAE,IAAA,kBAAQ,GAAE;KACxB,CAAC;IACF,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;IAEzC,IAAI,OAAO,GAAiB,IAAI,CAAC;IACjC,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,IAAI,YAAY,EAAE,OAAO,EAAE,EAAE,CAAC;QACzD,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;gBAChC,MAAM,EAAE,MAAM;gBACd,OAAO;gBACP,IAAI;aACL,CAAC,CAAC;YACH,IAAI,QAAQ,CAAC,EAAE,EAAE,CAAC;gBAChB,OAAO,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAA4B,CAAC;YAC5D,CAAC;YACD,yDAAyD;YACzD,2DAA2D;YAC3D,wDAAwD;YACxD,YAAY;YACZ,IAAI,QAAQ,CAAC,MAAM,IAAI,GAAG,IAAI,QAAQ,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC;gBACpD,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;gBACtC,MAAM,IAAI,gBAAgB,CAAC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YACvD,CAAC;YACD,mBAAmB;YACnB,OAAO,GAAG,IAAI,KAAK,CACjB,6BAA6B,QAAQ,CAAC,MAAM,MAAM,MAAM,QAAQ,CAAC,IAAI,EAAE,EAAE,CAC1E,CAAC;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,yDAAyD;YACzD,4DAA4D;YAC5D,6DAA6D;YAC7D,qDAAqD;YACrD,uDAAuD;YACvD,iBAAiB;YACjB,IAAI,GAAG,YAAY,gBAAgB,EAAE,CAAC;gBACpC,MAAM,GAAG,CAAC;YACZ,CAAC;YACD,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;QAChE,CAAC;QAED,IAAI,OAAO,GAAG,YAAY,EAAE,CAAC;YAC3B,MAAM,KAAK,GAAG,eAAe,GAAG,CAAC,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC;YACnD,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;QACjD,CAAC;IACH,CAAC;IAED,MAAM,OAAO,IAAI,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;AACnE,CAAC"}
package/dist/tools.d.ts CHANGED
@@ -22,6 +22,20 @@ export interface ToolResult {
22
22
  content: string;
23
23
  is_error: boolean;
24
24
  }
25
+ export interface ToolManifestEntry {
26
+ name: string;
27
+ description: string;
28
+ input_schema: {
29
+ type: "object";
30
+ properties: Record<string, {
31
+ type: string;
32
+ description: string;
33
+ default?: unknown;
34
+ }>;
35
+ required?: string[];
36
+ };
37
+ }
38
+ export declare const TOOL_MANIFEST: ToolManifestEntry[];
25
39
  export declare function setSessionCwd(cwd: string): void;
26
40
  export declare function executeTool(call: ToolCall, ui: SessionUI): Promise<ToolResult>;
27
41
  //# sourceMappingURL=tools.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAOH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAS/C,MAAM,WAAW,QAAQ;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChC;AAED,MAAM,WAAW,UAAU;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,OAAO,CAAC;CACnB;AAID,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,QAExC;AA2ED,wBAAsB,WAAW,CAC/B,IAAI,EAAE,QAAQ,EACd,EAAE,EAAE,SAAS,GACZ,OAAO,CAAC,UAAU,CAAC,CA2KrB"}
1
+ {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAOH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAS/C,MAAM,WAAW,QAAQ;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChC;AAED,MAAM,WAAW,UAAU;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,OAAO,CAAC;CACnB;AAiBD,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE;QACZ,IAAI,EAAE,QAAQ,CAAC;QACf,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,WAAW,EAAE,MAAM,CAAC;YAAC,OAAO,CAAC,EAAE,OAAO,CAAA;SAAE,CAAC,CAAC;QACrF,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;KACrB,CAAC;CACH;AAED,eAAO,MAAM,aAAa,EAAE,iBAAiB,EAiF5C,CAAC;AAIF,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,QAExC;AA2ED,wBAAsB,WAAW,CAC/B,IAAI,EAAE,QAAQ,EACd,EAAE,EAAE,SAAS,GACZ,OAAO,CAAC,UAAU,CAAC,CA2KrB"}
package/dist/tools.js CHANGED
@@ -49,6 +49,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
49
49
  return (mod && mod.__esModule) ? mod : { "default": mod };
50
50
  };
51
51
  Object.defineProperty(exports, "__esModule", { value: true });
52
+ exports.TOOL_MANIFEST = void 0;
52
53
  exports.setSessionCwd = setSessionCwd;
53
54
  exports.executeTool = executeTool;
54
55
  const fs = __importStar(require("fs"));
@@ -57,6 +58,88 @@ const child_process = __importStar(require("child_process"));
57
58
  const diff_1 = require("diff");
58
59
  const chalk_1 = __importDefault(require("chalk"));
59
60
  const settings_js_1 = require("./settings.js");
61
+ exports.TOOL_MANIFEST = [
62
+ {
63
+ name: "read_file",
64
+ description: "Read a file from the user's local filesystem. Returns the contents with line numbers.",
65
+ input_schema: {
66
+ type: "object",
67
+ properties: {
68
+ path: { type: "string", description: "Absolute or session-cwd-relative path to the file" },
69
+ offset: { type: "integer", description: "1-indexed line number to start reading from (default 1)" },
70
+ limit: { type: "integer", description: "Maximum number of lines to read (default: rest of file)" },
71
+ },
72
+ required: ["path"],
73
+ },
74
+ },
75
+ {
76
+ name: "write_file",
77
+ description: "Write content to a file on the user's local filesystem. Shows a diff + prompts for approval before writing.",
78
+ input_schema: {
79
+ type: "object",
80
+ properties: {
81
+ path: { type: "string", description: "Absolute or session-cwd-relative path to the target file" },
82
+ content: { type: "string", description: "Full content to write (replaces existing file)" },
83
+ },
84
+ required: ["path", "content"],
85
+ },
86
+ },
87
+ {
88
+ name: "list_directory",
89
+ description: "List files and subdirectories in a directory. Optional glob pattern + recursive flag.",
90
+ input_schema: {
91
+ type: "object",
92
+ properties: {
93
+ path: { type: "string", description: "Absolute or session-cwd-relative directory path" },
94
+ pattern: { type: "string", description: "Optional glob pattern (e.g. *.py, **/*.tsx)" },
95
+ recursive: { type: "boolean", description: "Walk subdirectories (default false)" },
96
+ },
97
+ required: ["path"],
98
+ },
99
+ },
100
+ {
101
+ name: "shell_command",
102
+ description: "Run a shell command on the user's local machine. Shows the command + prompts for approval. 60s timeout.",
103
+ input_schema: {
104
+ type: "object",
105
+ properties: {
106
+ command: { type: "string", description: "Shell command line" },
107
+ cwd: { type: "string", description: "Optional working directory (default: session cwd)" },
108
+ },
109
+ required: ["command"],
110
+ },
111
+ },
112
+ {
113
+ name: "git_status",
114
+ description: "Run `git status` in the session's working directory. No approval needed (read-only).",
115
+ input_schema: {
116
+ type: "object",
117
+ properties: {},
118
+ },
119
+ },
120
+ {
121
+ name: "git_diff",
122
+ description: "Run `git diff` (or `git diff --staged`) in the session's working directory. No approval needed (read-only).",
123
+ input_schema: {
124
+ type: "object",
125
+ properties: {
126
+ staged: { type: "boolean", description: "Show staged changes instead of working-tree changes" },
127
+ path: { type: "string", description: "Optional path filter" },
128
+ },
129
+ },
130
+ },
131
+ {
132
+ name: "git_commit",
133
+ description: "Run `git commit -m <message>` on staged changes. Shows the message + staged files + prompts for approval.",
134
+ input_schema: {
135
+ type: "object",
136
+ properties: {
137
+ message: { type: "string", description: "Commit message" },
138
+ },
139
+ required: ["message"],
140
+ },
141
+ },
142
+ ];
60
143
  // Session cwd — set on connect
61
144
  let sessionCwd = process.cwd();
62
145
  function setSessionCwd(cwd) {
package/dist/tools.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"tools.js","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tools.js","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"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"}
package/dist/ws.d.ts CHANGED
@@ -5,6 +5,16 @@
5
5
  * SessionUI state machine from incoming WS events so the user gets
6
6
  * a spinner while the model is generating / a tool is running, and
7
7
  * approval prompts don't race the main rl on keystrokes.
8
+ *
9
+ * SPRINT-TERMINAL-CLIENT-OWNED-DISPATCH-1 (#6565) PR3 — tool_result
10
+ * delivery moved off the WebSocket: results POST to
11
+ * /terminal/sessions/{id}/tool_results via the new REST endpoint.
12
+ * The WS now carries only inbound (server→client) `tool_call`
13
+ * events as informational triggers. Tool calls drain serially
14
+ * through a local queue so concurrent menus can't corrupt
15
+ * SessionUI state — the pre-#6565 `inFlightToolUseId` reject-on-
16
+ * overlap guard is gone (it caused the wedge observed in the
17
+ * #6509 PR1 canary).
8
18
  */
9
19
  export declare function runSession(sessionId: string): Promise<void>;
10
20
  //# sourceMappingURL=ws.d.ts.map
package/dist/ws.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"ws.d.ts","sourceRoot":"","sources":["../src/ws.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAgBH,wBAAsB,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAgMjE"}
1
+ {"version":3,"file":"ws.d.ts","sourceRoot":"","sources":["../src/ws.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAwBH,wBAAsB,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAyQjE"}
package/dist/ws.js CHANGED
@@ -6,6 +6,16 @@
6
6
  * SessionUI state machine from incoming WS events so the user gets
7
7
  * a spinner while the model is generating / a tool is running, and
8
8
  * approval prompts don't race the main rl on keystrokes.
9
+ *
10
+ * SPRINT-TERMINAL-CLIENT-OWNED-DISPATCH-1 (#6565) PR3 — tool_result
11
+ * delivery moved off the WebSocket: results POST to
12
+ * /terminal/sessions/{id}/tool_results via the new REST endpoint.
13
+ * The WS now carries only inbound (server→client) `tool_call`
14
+ * events as informational triggers. Tool calls drain serially
15
+ * through a local queue so concurrent menus can't corrupt
16
+ * SessionUI state — the pre-#6565 `inFlightToolUseId` reject-on-
17
+ * overlap guard is gone (it caused the wedge observed in the
18
+ * #6509 PR1 canary).
9
19
  */
10
20
  var __importDefault = (this && this.__importDefault) || function (mod) {
11
21
  return (mod && mod.__esModule) ? mod : { "default": mod };
@@ -16,8 +26,10 @@ const ws_1 = __importDefault(require("ws"));
16
26
  const config_js_1 = require("./config.js");
17
27
  const auth_js_1 = require("./auth.js");
18
28
  const tools_js_1 = require("./tools.js");
29
+ const tool_result_client_js_1 = require("./tool_result_client.js");
19
30
  const display_js_1 = require("./display.js");
20
31
  const ui_state_js_1 = require("./ui_state.js");
32
+ const chalk_1 = __importDefault(require("chalk"));
21
33
  async function runSession(sessionId) {
22
34
  const wsUrl = `${config_js_1.WS_URL}/terminal/sessions/${sessionId}/stream`;
23
35
  return new Promise((resolve, reject) => {
@@ -25,21 +37,103 @@ async function runSession(sessionId) {
25
37
  let connected = false;
26
38
  const ui = new ui_state_js_1.SessionUI();
27
39
  let firstTokenThisTurn = true;
28
- // #6169 review §1 guard against concurrent tool_call messages.
29
- // The server-side WS handler dispatches tool calls serially (one
30
- // tool_call wait for tool_result → next tool_call), but a buggy
31
- // server or future protocol change could break that invariant.
32
- // Overlapping executions would corrupt the SessionUI state
33
- // machine (running_tool vs awaiting_approval) and possibly skip
34
- // the approval gate on the second call. Track the in-flight
35
- // tool_use_id; reject any second tool_call that arrives before
36
- // the first one's tool_result was sent.
37
- let inFlightToolUseId = null;
40
+ // #6565 PR3serial drain queue. The server may emit multiple
41
+ // tool_call events back-to-back (one per tool_use block in the
42
+ // model's batch). Executing concurrently would corrupt
43
+ // SessionUI state (two menus rendering on top of each other);
44
+ // queueing + draining one-at-a-time gives clean approval flows
45
+ // while still parallelizable across the server (server emits
46
+ // all N then awaits the resume signal order of completion
47
+ // doesn't matter to the server, only that all N land via POST).
48
+ const toolCallQueue = [];
49
+ let drainRunning = false;
50
+ async function drainToolCallQueue() {
51
+ if (drainRunning)
52
+ return;
53
+ drainRunning = true;
54
+ try {
55
+ while (toolCallQueue.length > 0) {
56
+ const tc = toolCallQueue.shift();
57
+ ui.setState("running_tool");
58
+ const result = await (0, tools_js_1.executeTool)({
59
+ tool_use_id: tc.tool_use_id,
60
+ name: tc.name,
61
+ input: tc.input,
62
+ }, ui);
63
+ let postFailed = false;
64
+ try {
65
+ await (0, tool_result_client_js_1.postToolResults)(sessionId, [
66
+ {
67
+ tool_use_id: result.tool_use_id,
68
+ content: result.content,
69
+ is_error: result.is_error,
70
+ },
71
+ ]);
72
+ }
73
+ catch (err) {
74
+ // POST exhausted retries (transient 5xx / network) OR
75
+ // 4xx (durable rejection, e.g. unknown_tool_use_id from
76
+ // a server restart that lost the pending row). Tool
77
+ // result is lost from the server's perspective; the
78
+ // pending row stays as `pending` until PR5's expiry
79
+ // sweep. PR4's WS-reconnect replay path will re-emit
80
+ // the tool_call on next session connect for a retry.
81
+ const msg = err instanceof Error ? err.message : String(err);
82
+ process.stderr.write(chalk_1.default.yellow(` (tool_result POST failed: ${msg})\n`));
83
+ postFailed = true;
84
+ }
85
+ // #6573 CR-r1: on POST failure, the server's resume signal
86
+ // won't fire (server never learns this tool completed).
87
+ // The CLI would sit silently with no further events from
88
+ // the server, looking wedged. Bounce the user back to the
89
+ // prompt with a clear cue + a fresh idle state so they can
90
+ // type `xiaotime dev --session <id>` (resume) or pick a
91
+ // different recovery action. The unfinished pending rows
92
+ // stay durable in the DB for PR4's reconnect replay.
93
+ if (postFailed) {
94
+ ui.setState("idle");
95
+ process.stderr.write(chalk_1.default.yellow(" (session paused — POST failed; reconnect with " +
96
+ "`xiaotime dev --session " +
97
+ sessionId +
98
+ "` to retry pending tool calls)\n"));
99
+ // #6573 CR-r1: a POST failure means the server never got
100
+ // the resume signal — its dispatch state is inconsistent.
101
+ // Close the socket rather than returning to the prompt:
102
+ // the clean recovery is a fresh session, not a retry on a
103
+ // half-dispatched one. ws.close() fires the on("close")
104
+ // handler (rl teardown + resolve), so the user genuinely
105
+ // re-runs `xiaotime dev --session <id>`. Pending rows stay
106
+ // durable in the DB for PR4's reconnect replay; draining
107
+ // stops here because the loop is abandoned with the session.
108
+ ws.close();
109
+ return;
110
+ }
111
+ // Don't transition state back to "generating" here — the
112
+ // model may already be streaming on the next turn (the
113
+ // server's resume happens as soon as all batch results
114
+ // land via POST). The next text_delta clears the spinner
115
+ // via onFirstToken.
116
+ firstTokenThisTurn = true;
117
+ }
118
+ }
119
+ finally {
120
+ drainRunning = false;
121
+ }
122
+ }
38
123
  ws.on("open", () => {
39
- // Auth
40
- ws.send(JSON.stringify({ type: "auth", token: (0, auth_js_1.getToken)() }));
41
- // Connect with cwd
42
- ws.send(JSON.stringify({ type: "connect", cwd: process.cwd() }));
124
+ // Auth — #6565 PR5: `version` lets the server reject pre-0.4.0
125
+ // clients that would wedge on the old WS tool_result path.
126
+ ws.send(JSON.stringify({ type: "auth", token: (0, auth_js_1.getToken)(), version: config_js_1.CLI_VERSION }));
127
+ // Connect with cwd + tool manifest. SPRINT-UNIFIED-PA-PER-USER-1
128
+ // (#7224) PR3 — `tools` declares the CLI's local tool set so the
129
+ // brain can include them in the LLM's `tools=` array. Server
130
+ // forwards verbatim to /brain/dispatch; missing field on a
131
+ // pre-0.5.0 client is rejected at the cli_compat handshake gate.
132
+ ws.send(JSON.stringify({
133
+ type: "connect",
134
+ cwd: process.cwd(),
135
+ tools: tools_js_1.TOOL_MANIFEST,
136
+ }));
43
137
  });
44
138
  ws.on("message", async (raw) => {
45
139
  const msg = JSON.parse(raw.toString());
@@ -48,7 +142,20 @@ async function runSession(sessionId) {
48
142
  connected = true;
49
143
  (0, tools_js_1.setSessionCwd)(process.cwd());
50
144
  (0, display_js_1.printWelcome)(msg.session_id, msg.session_name, msg.resumed, msg.message_count);
51
- startUserPromptLoop();
145
+ // #6565 PR4b — if the server is replaying tool calls left
146
+ // pending by a prior session (restart / crash mid-approval),
147
+ // defer the prompt loop. The server emits those `tool_call`
148
+ // events next; they drain through the queue, the CLI POSTs
149
+ // results, the server resumes the turn, and that turn's
150
+ // `message_stop` starts the prompt loop. Starting it here
151
+ // would race the replayed approval menus against the prompt.
152
+ if ((msg.pending_tool_calls ?? 0) > 0) {
153
+ process.stderr.write(chalk_1.default.cyan(` (resuming ${msg.pending_tool_calls} pending tool ` +
154
+ `call(s) from a prior session)\n`));
155
+ }
156
+ else {
157
+ startUserPromptLoop();
158
+ }
52
159
  break;
53
160
  case "text_delta":
54
161
  if (firstTokenThisTurn) {
@@ -58,49 +165,22 @@ async function runSession(sessionId) {
58
165
  (0, display_js_1.printTextDelta)(msg.content);
59
166
  break;
60
167
  case "tool_call": {
61
- // #6169 review §1 reject overlapping tool calls. The
62
- // server-side WS handler is supposed to dispatch one
63
- // tool_call at a time and wait for its tool_result before
64
- // sending the next; a protocol violation here would
65
- // corrupt the SessionUI state. Reject the second tool by
66
- // returning an is_error tool_result and logging — leaves
67
- // the first execution untouched.
68
- if (inFlightToolUseId !== null) {
69
- const errMsg = `Protocol violation: tool_call (id=${msg.tool_use_id}) arrived ` +
70
- `while another tool (id=${inFlightToolUseId}) is still in flight. ` +
71
- `CLI rejects overlapping executions; the server WS handler should ` +
72
- `serialize tool dispatch.`;
73
- console.error(`\n[cli] ${errMsg}\n`);
74
- ws.send(JSON.stringify({
75
- type: "tool_result",
76
- tool_use_id: msg.tool_use_id,
77
- content: errMsg,
78
- is_error: true,
79
- }));
80
- break;
81
- }
82
- inFlightToolUseId = msg.tool_use_id;
83
- // executeTool drives its own state transitions when an
84
- // approval is needed (running_tool ↔ awaiting_approval).
85
- ui.setState("running_tool");
86
- (0, tools_js_1.executeTool)({
168
+ // #6565 PR3informational event now. Server has already
169
+ // persisted the pending row + is awaiting our POST to
170
+ // /terminal/sessions/{id}/tool_results. Queue the call
171
+ // for serial draining (one menu rendering at a time);
172
+ // POST the result after each drain iteration. The
173
+ // pre-#6565 inFlightToolUseId reject-on-overlap guard is
174
+ // gone concurrent dispatch is now safe by construction
175
+ // via the drain serialization.
176
+ toolCallQueue.push({
87
177
  tool_use_id: msg.tool_use_id,
88
178
  name: msg.name,
89
179
  input: msg.input,
90
- }, ui).then((result) => {
91
- inFlightToolUseId = null;
92
- ws.send(JSON.stringify({
93
- type: "tool_result",
94
- tool_use_id: result.tool_use_id,
95
- content: result.content,
96
- is_error: result.is_error,
97
- }));
98
- // Back to generating; the next text_delta will clear any
99
- // spinner if onFirstToken hasn't yet been called for this
100
- // generation segment.
101
- ui.setState("generating");
102
- firstTokenThisTurn = true;
103
180
  });
181
+ // Fire-and-forget — drainToolCallQueue is idempotent on
182
+ // concurrent invocation (the drainRunning guard inside).
183
+ drainToolCallQueue();
104
184
  break;
105
185
  }
106
186
  case "message_stop":
package/dist/ws.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"ws.js","sourceRoot":"","sources":["../src/ws.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ws.js","sourceRoot":"","sources":["../src/ws.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "xiaotime",
3
- "version": "0.3.0",
3
+ "version": "0.5.0",
4
4
  "description": "Xiaotime Developer — persistent-memory AI coding assistant",
5
5
  "bin": {
6
6
  "xiaotime": "./dist/index.js"
@@ -26,9 +26,9 @@
26
26
  "@types/node": "^22.0.0",
27
27
  "typescript": "^5.7.0",
28
28
  "ts-node": "^10.9.2",
29
- "vitest": "^2.1.0"
29
+ "vitest": "^4.1.7"
30
30
  },
31
31
  "engines": {
32
- "node": ">=18.0.0"
32
+ "node": ">=20.19.0"
33
33
  }
34
34
  }