@kenkaiiii/ggcoder 5.47.0 → 5.49.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 (111) hide show
  1. package/dist/app-sidecar-auth-broadcast.test.js +1 -1
  2. package/dist/app-sidecar-auth-broadcast.test.js.map +1 -1
  3. package/dist/app-sidecar.js +253 -2
  4. package/dist/app-sidecar.js.map +1 -1
  5. package/dist/cli/shared.d.ts.map +1 -1
  6. package/dist/cli/shared.js +2 -0
  7. package/dist/cli/shared.js.map +1 -1
  8. package/dist/cli.d.ts.map +1 -1
  9. package/dist/cli.js +6 -2
  10. package/dist/cli.js.map +1 -1
  11. package/dist/config.d.ts.map +1 -1
  12. package/dist/config.js +1 -0
  13. package/dist/config.js.map +1 -1
  14. package/dist/core/agent-session-compaction.test.js +1 -0
  15. package/dist/core/agent-session-compaction.test.js.map +1 -1
  16. package/dist/core/agent-session.d.ts +2 -0
  17. package/dist/core/agent-session.d.ts.map +1 -1
  18. package/dist/core/agent-session.js +15 -8
  19. package/dist/core/agent-session.js.map +1 -1
  20. package/dist/core/auth-providers.d.ts.map +1 -1
  21. package/dist/core/auth-providers.js +21 -21
  22. package/dist/core/auth-providers.js.map +1 -1
  23. package/dist/core/context-limits.d.ts +35 -0
  24. package/dist/core/context-limits.d.ts.map +1 -0
  25. package/dist/core/context-limits.js +35 -0
  26. package/dist/core/context-limits.js.map +1 -0
  27. package/dist/core/context-limits.test.d.ts +2 -0
  28. package/dist/core/context-limits.test.d.ts.map +1 -0
  29. package/dist/core/context-limits.test.js +55 -0
  30. package/dist/core/context-limits.test.js.map +1 -0
  31. package/dist/core/local-endpoint-store.test.js +1 -9
  32. package/dist/core/local-endpoint-store.test.js.map +1 -1
  33. package/dist/core/mcp/deferred-catalog.d.ts +9 -0
  34. package/dist/core/mcp/deferred-catalog.d.ts.map +1 -1
  35. package/dist/core/mcp/deferred-catalog.js +15 -1
  36. package/dist/core/mcp/deferred-catalog.js.map +1 -1
  37. package/dist/core/process-manager-wake.test.js +8 -4
  38. package/dist/core/process-manager-wake.test.js.map +1 -1
  39. package/dist/core/process-manager.d.ts.map +1 -1
  40. package/dist/core/process-manager.js +8 -1
  41. package/dist/core/process-manager.js.map +1 -1
  42. package/dist/core/prompt-commands.d.ts.map +1 -1
  43. package/dist/core/prompt-commands.js +95 -0
  44. package/dist/core/prompt-commands.js.map +1 -1
  45. package/dist/core/prompt-commands.test.js +25 -0
  46. package/dist/core/prompt-commands.test.js.map +1 -1
  47. package/dist/core/settings-manager.d.ts +9 -0
  48. package/dist/core/settings-manager.d.ts.map +1 -1
  49. package/dist/core/settings-manager.js +18 -0
  50. package/dist/core/settings-manager.js.map +1 -1
  51. package/dist/core/skills-routing.test.js +42 -0
  52. package/dist/core/skills-routing.test.js.map +1 -1
  53. package/dist/core/skills.d.ts +16 -1
  54. package/dist/core/skills.d.ts.map +1 -1
  55. package/dist/core/skills.js +37 -5
  56. package/dist/core/skills.js.map +1 -1
  57. package/dist/core/subagent-manager.d.ts +17 -0
  58. package/dist/core/subagent-manager.d.ts.map +1 -1
  59. package/dist/core/subagent-manager.js +92 -1
  60. package/dist/core/subagent-manager.js.map +1 -1
  61. package/dist/core/subagent-manager.test.js +161 -0
  62. package/dist/core/subagent-manager.test.js.map +1 -1
  63. package/dist/core/subagent-turn-record.d.ts +17 -0
  64. package/dist/core/subagent-turn-record.d.ts.map +1 -0
  65. package/dist/core/subagent-turn-record.js +82 -0
  66. package/dist/core/subagent-turn-record.js.map +1 -0
  67. package/dist/core/subagent-turn-record.test.d.ts +2 -0
  68. package/dist/core/subagent-turn-record.test.d.ts.map +1 -0
  69. package/dist/core/subagent-turn-record.test.js +70 -0
  70. package/dist/core/subagent-turn-record.test.js.map +1 -0
  71. package/dist/hf-pull.d.ts +66 -0
  72. package/dist/hf-pull.d.ts.map +1 -0
  73. package/dist/hf-pull.js +109 -0
  74. package/dist/hf-pull.js.map +1 -0
  75. package/dist/hf-pull.test.d.ts +2 -0
  76. package/dist/hf-pull.test.d.ts.map +1 -0
  77. package/dist/hf-pull.test.js +112 -0
  78. package/dist/hf-pull.test.js.map +1 -0
  79. package/dist/modes/subagent-worker-mode.d.ts.map +1 -1
  80. package/dist/modes/subagent-worker-mode.js +66 -8
  81. package/dist/modes/subagent-worker-mode.js.map +1 -1
  82. package/dist/system-prompt.d.ts +7 -2
  83. package/dist/system-prompt.d.ts.map +1 -1
  84. package/dist/system-prompt.js +26 -9
  85. package/dist/system-prompt.js.map +1 -1
  86. package/dist/system-prompt.test.js +26 -0
  87. package/dist/system-prompt.test.js.map +1 -1
  88. package/dist/tools/index.d.ts +3 -0
  89. package/dist/tools/index.d.ts.map +1 -1
  90. package/dist/tools/index.js +1 -1
  91. package/dist/tools/index.js.map +1 -1
  92. package/dist/tools/skill.d.ts +3 -2
  93. package/dist/tools/skill.d.ts.map +1 -1
  94. package/dist/tools/skill.js +10 -7
  95. package/dist/tools/skill.js.map +1 -1
  96. package/dist/tools/tool-search.d.ts +2 -1
  97. package/dist/tools/tool-search.d.ts.map +1 -1
  98. package/dist/tools/tool-search.js +28 -3
  99. package/dist/tools/tool-search.js.map +1 -1
  100. package/dist/tools/tool-search.test.js +58 -0
  101. package/dist/tools/tool-search.test.js.map +1 -1
  102. package/dist/ui/App.d.ts.map +1 -1
  103. package/dist/ui/App.js +1 -0
  104. package/dist/ui/App.js.map +1 -1
  105. package/dist/ui/components/ModelSelector.d.ts.map +1 -1
  106. package/dist/ui/components/ModelSelector.js +1 -0
  107. package/dist/ui/components/ModelSelector.js.map +1 -1
  108. package/dist/ui/login.d.ts.map +1 -1
  109. package/dist/ui/login.js +7 -2
  110. package/dist/ui/login.js.map +1 -1
  111. package/package.json +4 -4
@@ -0,0 +1,70 @@
1
+ import fs from "node:fs/promises";
2
+ import os from "node:os";
3
+ import path from "node:path";
4
+ import { afterEach, describe, expect, it } from "vitest";
5
+ import { clearTurnRecord, readTurnRecord, writeTurnRecord, } from "./subagent-turn-record.js";
6
+ const tempDirs = [];
7
+ async function tempDir() {
8
+ const directory = await fs.mkdtemp(path.join(os.tmpdir(), "gg-turn-record-"));
9
+ tempDirs.push(directory);
10
+ return directory;
11
+ }
12
+ afterEach(async () => {
13
+ await Promise.all(tempDirs.splice(0).map((dir) => fs.rm(dir, { recursive: true, force: true })));
14
+ });
15
+ const completed = {
16
+ status: "completed",
17
+ output: "result of the orphaned turn",
18
+ model: "fast",
19
+ turn_count: 3,
20
+ token_usage: { input: 120, output: 40 },
21
+ completed_at: Date.now(),
22
+ };
23
+ describe("subagent turn record", () => {
24
+ it("round-trips a written record", async () => {
25
+ const root = await tempDir();
26
+ const sessionPath = path.join(root, "child.jsonl");
27
+ await writeTurnRecord(sessionPath, completed);
28
+ const record = await readTurnRecord(sessionPath);
29
+ expect(record).toEqual(completed);
30
+ });
31
+ it("stores the record as a sibling of the session file", async () => {
32
+ const root = await tempDir();
33
+ const sessionPath = path.join(root, "child.jsonl");
34
+ await writeTurnRecord(sessionPath, completed);
35
+ expect(await fs.readFile(`${sessionPath}.turn.json`, "utf-8")).toContain('"status"');
36
+ });
37
+ it("reads absent, malformed and oversized records as undefined (fail closed)", async () => {
38
+ const root = await tempDir();
39
+ const sessionPath = path.join(root, "child.jsonl");
40
+ expect(await readTurnRecord(sessionPath)).toBeUndefined(); // absent
41
+ expect(await readTurnRecord(undefined)).toBeUndefined(); // no session path
42
+ await fs.writeFile(`${sessionPath}.turn.json`, "{not json", "utf-8");
43
+ expect(await readTurnRecord(sessionPath)).toBeUndefined(); // malformed
44
+ await fs.writeFile(`${sessionPath}.turn.json`, JSON.stringify({ ...completed, output: "x".repeat(2 * 1024 * 1024) }), "utf-8");
45
+ expect(await readTurnRecord(sessionPath)).toBeUndefined(); // oversize rejected
46
+ });
47
+ it("rejects records with missing required fields", async () => {
48
+ const root = await tempDir();
49
+ const sessionPath = path.join(root, "child.jsonl");
50
+ await fs.writeFile(`${sessionPath}.turn.json`, JSON.stringify({ status: "completed", output: "no counts" }), "utf-8");
51
+ expect(await readTurnRecord(sessionPath)).toBeUndefined();
52
+ });
53
+ it("clears a record and tolerates clearing twice", async () => {
54
+ const root = await tempDir();
55
+ const sessionPath = path.join(root, "child.jsonl");
56
+ await writeTurnRecord(sessionPath, completed);
57
+ await clearTurnRecord(sessionPath);
58
+ await clearTurnRecord(sessionPath);
59
+ expect(await readTurnRecord(sessionPath)).toBeUndefined();
60
+ });
61
+ it("never throws when the record cannot be written", async () => {
62
+ // An unwritable target must never reject: the turn it describes is more
63
+ // important than the record. (mkdir recursive means this path usually
64
+ // succeeds instead — either outcome must resolve, never throw.)
65
+ const root = await tempDir();
66
+ const sessionPath = path.join(root, "no-such-dir", "child.jsonl");
67
+ await expect(writeTurnRecord(sessionPath, completed)).resolves.toBeUndefined();
68
+ });
69
+ });
70
+ //# sourceMappingURL=subagent-turn-record.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"subagent-turn-record.test.js","sourceRoot":"","sources":["../../src/core/subagent-turn-record.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,66 @@
1
+ /**
2
+ * Hugging Face → Ollama pull pipeline (pure helpers).
3
+ *
4
+ * The sidecar's `/hf/*` routes (app-sidecar.ts) use these to search the Hub,
5
+ * pick a quantized GGUF variant, and stream `ollama pull hf.co/<repo>:<quant>`
6
+ * progress to the app. Kept dependency-free and side-effect-free so the
7
+ * parsing/selection rules are unit-testable.
8
+ */
9
+ /** `org/repo` only — no tags, no traversal, no leading slashes. */
10
+ export declare function isValidHfRepoId(id: string): boolean;
11
+ export interface HfSearchRow {
12
+ id: string;
13
+ downloads: number;
14
+ likes: number;
15
+ updatedAt: string | null;
16
+ }
17
+ /** Map a Hub `/api/models?search=` result entry to what the dropdown shows. */
18
+ export declare function toHfSearchRow(entry: {
19
+ id?: unknown;
20
+ downloads?: unknown;
21
+ likes?: unknown;
22
+ lastModified?: unknown;
23
+ }): HfSearchRow | null;
24
+ export interface GgufFile {
25
+ /** Filename, e.g. `qwen3-coder-30b-q4_k_m.gguf`. */
26
+ path: string;
27
+ sizeBytes: number;
28
+ }
29
+ export interface QuantChoice {
30
+ /** Ollama tag for `hf.co/<repo>:<tag>` — `Q4_K_M`, or null to pull tagless. */
31
+ tag: string | null;
32
+ file: GgufFile;
33
+ }
34
+ /** Quant token from a GGUF filename (`...-q4_k_m.gguf` → `Q4_K_M`), if any. */
35
+ export declare function quantFromFilename(path: string): string | null;
36
+ /**
37
+ * Pick which GGUF file `ollama pull` should fetch. Deterministic: the first
38
+ * entry of `QUANT_PREFERENCE` present, else the smallest file (multi-quant
39
+ * repos list big quants first), else the only file — tagless when the repo
40
+ * ships a single unnamed GGUF.
41
+ */
42
+ export declare function pickGgufQuant(files: readonly GgufFile[]): QuantChoice | null;
43
+ export type PullPhase = "preparing" | "downloading" | "verifying" | "success" | "error";
44
+ export interface PullProgress {
45
+ phase: PullPhase;
46
+ /** 0-100 while downloading; sticky afterwards. */
47
+ percent?: number;
48
+ /** Raw human text, e.g. `45% 1.2 GB/2.7 GB 30 MB/s`. */
49
+ detail?: string;
50
+ }
51
+ /**
52
+ * Parse one non-TTY `ollama pull` line. The CLI prints status verbs plus
53
+ * `<sha>: <pct>% <done>/<total> <rate>` lines to stderr; any unrecognized line
54
+ * is still surfaced as `downloading` with the raw text so the UI never stalls
55
+ * silently behind a parser gap.
56
+ */
57
+ export declare function parseOllamaPullLine(line: string): PullProgress | null;
58
+ /**
59
+ * Map a failed pull's stderr to the one action that fixes it. Ollama ≥0.32 has
60
+ * a manifest-realm bug pulling `hf.co/…` and gated/auth-required repos need a
61
+ * token — everything else is passed through with context.
62
+ */
63
+ export declare function explainPullFailure(stderrTail: string): string;
64
+ /** `12.4M` → `12.4M downloads`, `3,412` stays exact under 1000. */
65
+ export declare function formatCount(n: number): string;
66
+ //# sourceMappingURL=hf-pull.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hf-pull.d.ts","sourceRoot":"","sources":["../src/hf-pull.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,mEAAmE;AACnE,wBAAgB,eAAe,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAEnD;AAED,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAED,+EAA+E;AAC/E,wBAAgB,aAAa,CAAC,KAAK,EAAE;IACnC,EAAE,CAAC,EAAE,OAAO,CAAC;IACb,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB,GAAG,WAAW,GAAG,IAAI,CAQrB;AAED,MAAM,WAAW,QAAQ;IACvB,oDAAoD;IACpD,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,WAAW;IAC1B,+EAA+E;IAC/E,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,IAAI,EAAE,QAAQ,CAAC;CAChB;AAKD,+EAA+E;AAC/E,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAI7D;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,SAAS,QAAQ,EAAE,GAAG,WAAW,GAAG,IAAI,CAS5E;AAED,MAAM,MAAM,SAAS,GAAG,WAAW,GAAG,aAAa,GAAG,WAAW,GAAG,SAAS,GAAG,OAAO,CAAC;AAExF,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,SAAS,CAAC;IACjB,kDAAkD;IAClD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,wDAAwD;IACxD,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAOD;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI,CAoBrE;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAY7D;AAED,mEAAmE;AACnE,wBAAgB,WAAW,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAI7C"}
@@ -0,0 +1,109 @@
1
+ /**
2
+ * Hugging Face → Ollama pull pipeline (pure helpers).
3
+ *
4
+ * The sidecar's `/hf/*` routes (app-sidecar.ts) use these to search the Hub,
5
+ * pick a quantized GGUF variant, and stream `ollama pull hf.co/<repo>:<quant>`
6
+ * progress to the app. Kept dependency-free and side-effect-free so the
7
+ * parsing/selection rules are unit-testable.
8
+ */
9
+ /** `org/repo` only — no tags, no traversal, no leading slashes. */
10
+ export function isValidHfRepoId(id) {
11
+ return /^[A-Za-z0-9][A-Za-z0-9._-]{0,127}\/[A-Za-z0-9][A-Za-z0-9._-]{0,127}$/.test(id);
12
+ }
13
+ /** Map a Hub `/api/models?search=` result entry to what the dropdown shows. */
14
+ export function toHfSearchRow(entry) {
15
+ if (typeof entry.id !== "string" || !isValidHfRepoId(entry.id))
16
+ return null;
17
+ return {
18
+ id: entry.id,
19
+ downloads: typeof entry.downloads === "number" && entry.downloads > 0 ? entry.downloads : 0,
20
+ likes: typeof entry.likes === "number" && entry.likes > 0 ? entry.likes : 0,
21
+ updatedAt: typeof entry.lastModified === "string" ? entry.lastModified : null,
22
+ };
23
+ }
24
+ /** Preference order: best quality-per-byte first, the community default. */
25
+ const QUANT_PREFERENCE = ["Q4_K_M", "Q4_K_S", "Q4_0", "Q5_K_M", "Q6_K", "Q8_0", "Q3_K_M"];
26
+ /** Quant token from a GGUF filename (`...-q4_k_m.gguf` → `Q4_K_M`), if any. */
27
+ export function quantFromFilename(path) {
28
+ const base = path.split("/").pop() ?? path;
29
+ const match = /[-.]((?:i|t)?q\d[_a-z0-9]*)\.gguf$/i.exec(base);
30
+ return match ? match[1].toUpperCase() : null;
31
+ }
32
+ /**
33
+ * Pick which GGUF file `ollama pull` should fetch. Deterministic: the first
34
+ * entry of `QUANT_PREFERENCE` present, else the smallest file (multi-quant
35
+ * repos list big quants first), else the only file — tagless when the repo
36
+ * ships a single unnamed GGUF.
37
+ */
38
+ export function pickGgufQuant(files) {
39
+ const ggufs = files.filter((f) => f.path.toLowerCase().endsWith(".gguf"));
40
+ if (ggufs.length === 0)
41
+ return null;
42
+ for (const quant of QUANT_PREFERENCE) {
43
+ const hit = ggufs.find((f) => quantFromFilename(f.path) === quant);
44
+ if (hit)
45
+ return { tag: quant, file: hit };
46
+ }
47
+ const smallest = ggufs.reduce((a, b) => (a.sizeBytes <= b.sizeBytes ? a : b));
48
+ return { tag: quantFromFilename(smallest.path), file: smallest };
49
+ }
50
+ /** Strip terminal control noise (cursor moves, enable/disable, spinner
51
+ * frames) that ollama emits even when piped, so lines stay readable. */
52
+ // eslint-disable-next-line no-control-regex -- stripping control characters is the point
53
+ const ANSI_NOISE = /\u001b\[[0-9;?]*[A-Za-z]|[\u001b\u0000-\u0008\u000b-\u001f]|[\u2800-\u28ff]/g;
54
+ /**
55
+ * Parse one non-TTY `ollama pull` line. The CLI prints status verbs plus
56
+ * `<sha>: <pct>% <done>/<total> <rate>` lines to stderr; any unrecognized line
57
+ * is still surfaced as `downloading` with the raw text so the UI never stalls
58
+ * silently behind a parser gap.
59
+ */
60
+ export function parseOllamaPullLine(line) {
61
+ const text = line.replace(ANSI_NOISE, "").trim();
62
+ if (!text)
63
+ return null;
64
+ if (text === "success")
65
+ return { phase: "success", percent: 100 };
66
+ if (text.startsWith("verifying") || text.startsWith("writing manifest")) {
67
+ return { phase: "verifying", percent: 100, detail: text };
68
+ }
69
+ if (text.startsWith("pulling manifest")) {
70
+ return { phase: "preparing", percent: 0, detail: text };
71
+ }
72
+ const pct = /(\d{1,3})%/.exec(text);
73
+ if (pct) {
74
+ const percent = Math.min(100, Number(pct[1]));
75
+ return {
76
+ phase: "downloading",
77
+ percent,
78
+ detail: text.replace(/^(pulling\s+)?[a-f0-9]{6,64}:\s*/, ""),
79
+ };
80
+ }
81
+ return { phase: "downloading", detail: text };
82
+ }
83
+ /**
84
+ * Map a failed pull's stderr to the one action that fixes it. Ollama ≥0.32 has
85
+ * a manifest-realm bug pulling `hf.co/…` and gated/auth-required repos need a
86
+ * token — everything else is passed through with context.
87
+ */
88
+ export function explainPullFailure(stderrTail) {
89
+ if (stderrTail.includes("realm host")) {
90
+ return "This Ollama version can't pull from Hugging Face (a 0.32 manifest bug). Upgrade Ollama, then try again.";
91
+ }
92
+ if (/\b401\b|unauthorized|invalid username or password/i.test(stderrTail)) {
93
+ return "Hugging Face rejected the download as unauthenticated. Connect an HF token under the Hugging Face provider (or `ollama login huggingface.co`), then retry.";
94
+ }
95
+ if (/no such file|not found|404/i.test(stderrTail)) {
96
+ return "Hugging Face has no GGUF file in that repo, or the quant doesn't exist. Pick another model.";
97
+ }
98
+ const tail = stderrTail.trim().split("\n").slice(-3).join(" ");
99
+ return tail ? `Ollama pull failed: ${tail}` : "Ollama pull failed.";
100
+ }
101
+ /** `12.4M` → `12.4M downloads`, `3,412` stays exact under 1000. */
102
+ export function formatCount(n) {
103
+ if (n >= 1_000_000)
104
+ return `${(n / 1_000_000).toFixed(1)}M`;
105
+ if (n >= 10_000)
106
+ return `${Math.round(n / 1_000)}K`;
107
+ return n.toLocaleString("en-US");
108
+ }
109
+ //# sourceMappingURL=hf-pull.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hf-pull.js","sourceRoot":"","sources":["../src/hf-pull.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,mEAAmE;AACnE,MAAM,UAAU,eAAe,CAAC,EAAU;IACxC,OAAO,sEAAsE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACzF,CAAC;AASD,+EAA+E;AAC/E,MAAM,UAAU,aAAa,CAAC,KAK7B;IACC,IAAI,OAAO,KAAK,CAAC,EAAE,KAAK,QAAQ,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,EAAE,CAAC;QAAE,OAAO,IAAI,CAAC;IAC5E,OAAO;QACL,EAAE,EAAE,KAAK,CAAC,EAAE;QACZ,SAAS,EAAE,OAAO,KAAK,CAAC,SAAS,KAAK,QAAQ,IAAI,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;QAC3F,KAAK,EAAE,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC3E,SAAS,EAAE,OAAO,KAAK,CAAC,YAAY,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI;KAC9E,CAAC;AACJ,CAAC;AAcD,4EAA4E;AAC5E,MAAM,gBAAgB,GAAG,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;AAE1F,+EAA+E;AAC/E,MAAM,UAAU,iBAAiB,CAAC,IAAY;IAC5C,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC;IAC3C,MAAM,KAAK,GAAG,qCAAqC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC/D,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AAC/C,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,aAAa,CAAC,KAA0B;IACtD,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;IAC1E,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACpC,KAAK,MAAM,KAAK,IAAI,gBAAgB,EAAE,CAAC;QACrC,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,CAAC;QACnE,IAAI,GAAG;YAAE,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;IAC5C,CAAC;IACD,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9E,OAAO,EAAE,GAAG,EAAE,iBAAiB,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;AACnE,CAAC;AAYD;yEACyE;AACzE,yFAAyF;AACzF,MAAM,UAAU,GAAG,8EAA8E,CAAC;AAElG;;;;;GAKG;AACH,MAAM,UAAU,mBAAmB,CAAC,IAAY;IAC9C,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IACjD,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC;IACvB,IAAI,IAAI,KAAK,SAAS;QAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC;IAClE,IAAI,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAAC,EAAE,CAAC;QACxE,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;IAC5D,CAAC;IACD,IAAI,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAAC,EAAE,CAAC;QACxC,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;IAC1D,CAAC;IACD,MAAM,GAAG,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACpC,IAAI,GAAG,EAAE,CAAC;QACR,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC9C,OAAO;YACL,KAAK,EAAE,aAAa;YACpB,OAAO;YACP,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,kCAAkC,EAAE,EAAE,CAAC;SAC7D,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;AAChD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,kBAAkB,CAAC,UAAkB;IACnD,IAAI,UAAU,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;QACtC,OAAO,yGAAyG,CAAC;IACnH,CAAC;IACD,IAAI,oDAAoD,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;QAC1E,OAAO,4JAA4J,CAAC;IACtK,CAAC;IACD,IAAI,6BAA6B,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;QACnD,OAAO,6FAA6F,CAAC;IACvG,CAAC;IACD,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC/D,OAAO,IAAI,CAAC,CAAC,CAAC,uBAAuB,IAAI,EAAE,CAAC,CAAC,CAAC,qBAAqB,CAAC;AACtE,CAAC;AAED,mEAAmE;AACnE,MAAM,UAAU,WAAW,CAAC,CAAS;IACnC,IAAI,CAAC,IAAI,SAAS;QAAE,OAAO,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;IAC5D,IAAI,CAAC,IAAI,MAAM;QAAE,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC;IACpD,OAAO,CAAC,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;AACnC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=hf-pull.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hf-pull.test.d.ts","sourceRoot":"","sources":["../src/hf-pull.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,112 @@
1
+ import { describe, expect, it } from "vitest";
2
+ import { explainPullFailure, formatCount, isValidHfRepoId, parseOllamaPullLine, pickGgufQuant, quantFromFilename, toHfSearchRow, } from "./hf-pull.js";
3
+ describe("isValidHfRepoId", () => {
4
+ it("accepts org/repo with dots, dashes, digits", () => {
5
+ expect(isValidHfRepoId("Qwen/Qwen3-Coder-480B-A35B-Instruct")).toBe(true);
6
+ expect(isValidHfRepoId("bartowski/SmolLM2-135M-Instruct-GGUF")).toBe(true);
7
+ });
8
+ it("rejects traversal, tags, bare names", () => {
9
+ expect(isValidHfRepoId("../etc/passwd")).toBe(false);
10
+ expect(isValidHfRepoId("user/repo:Q4")).toBe(false);
11
+ expect(isValidHfRepoId("solo")).toBe(false);
12
+ expect(isValidHfRepoId("")).toBe(false);
13
+ });
14
+ });
15
+ describe("toHfSearchRow", () => {
16
+ it("maps a Hub entry defensively", () => {
17
+ expect(toHfSearchRow({ id: "a/b", downloads: 123456, likes: 7, lastModified: "2026-01-02" })).toEqual({ id: "a/b", downloads: 123456, likes: 7, updatedAt: "2026-01-02" });
18
+ });
19
+ it("drops entries without a usable id", () => {
20
+ expect(toHfSearchRow({ downloads: 5 })).toBeNull();
21
+ expect(toHfSearchRow({ id: "no-slash" })).toBeNull();
22
+ });
23
+ });
24
+ describe("quantFromFilename", () => {
25
+ it("reads upper, lower, dot-separated quant tokens", () => {
26
+ expect(quantFromFilename("model-Q4_K_M.gguf")).toBe("Q4_K_M");
27
+ expect(quantFromFilename("model.q5_k_m.gguf")).toBe("Q5_K_M");
28
+ expect(quantFromFilename("smollm2-135m-instruct-q4_k_m.gguf")).toBe("Q4_K_M");
29
+ });
30
+ it("returns null for unnamed or non-gguf files", () => {
31
+ expect(quantFromFilename("model.gguf")).toBeNull();
32
+ expect(quantFromFilename("README.md")).toBeNull();
33
+ });
34
+ });
35
+ describe("pickGgufQuant", () => {
36
+ const f = (path, sizeBytes = 1) => ({
37
+ path,
38
+ sizeBytes,
39
+ });
40
+ it("prefers Q4_K_M when present", () => {
41
+ const files = [f("m-Q8_0.gguf", 9), f("m-q4_k_m.gguf", 4), f("m-Q3_K_M.gguf", 3)];
42
+ expect(pickGgufQuant(files)).toEqual({ tag: "Q4_K_M", file: f("m-q4_k_m.gguf", 4) });
43
+ });
44
+ it("falls back to the smallest file, keeping its tag", () => {
45
+ const files = [f("m-IQ2_XS.gguf", 90), f("m-TQ1_0.gguf", 40)];
46
+ const pick = pickGgufQuant(files);
47
+ expect(pick?.file.path).toBe("m-TQ1_0.gguf");
48
+ expect(pick?.tag).toBe("TQ1_0");
49
+ });
50
+ it("is tagless for a single unnamed GGUF", () => {
51
+ expect(pickGgufQuant([f("model.gguf", 5)])).toEqual({ tag: null, file: f("model.gguf", 5) });
52
+ });
53
+ it("returns null with no GGUFs", () => {
54
+ expect(pickGgufQuant([f("README.md")])).toBeNull();
55
+ });
56
+ });
57
+ describe("parseOllamaPullLine", () => {
58
+ it("strips ollama's ANSI cursor/spinner noise before parsing", () => {
59
+ // Raw bytes from a real piped pull: cursor-move + spinner + clear codes.
60
+ const noisy = "\u001b[?2026h\u001b[?25l\u001b[1Gpulling manifest \u2819\u001b[K\u001b[?25h\u001b[?2026l";
61
+ expect(parseOllamaPullLine(noisy)).toEqual({
62
+ phase: "preparing",
63
+ percent: 0,
64
+ detail: "pulling manifest",
65
+ });
66
+ });
67
+ it("reads percent lines and strips the blob sha", () => {
68
+ expect(parseOllamaPullLine("pulling 8f4b3c1d2e5a: 45% 1.2 GB/2.7 GB 30 MB/s")).toEqual({
69
+ phase: "downloading",
70
+ percent: 45,
71
+ detail: "45% 1.2 GB/2.7 GB 30 MB/s",
72
+ });
73
+ });
74
+ it("maps the status verbs", () => {
75
+ expect(parseOllamaPullLine("pulling manifest")).toEqual({
76
+ phase: "preparing",
77
+ percent: 0,
78
+ detail: "pulling manifest",
79
+ });
80
+ expect(parseOllamaPullLine("verifying sha256 digest")).toMatchObject({
81
+ phase: "verifying",
82
+ percent: 100,
83
+ });
84
+ expect(parseOllamaPullLine("success")).toEqual({ phase: "success", percent: 100 });
85
+ });
86
+ it("surfaces unrecognized output instead of swallowing it", () => {
87
+ expect(parseOllamaPullLine("something odd happened")).toEqual({
88
+ phase: "downloading",
89
+ detail: "something odd happened",
90
+ });
91
+ expect(parseOllamaPullLine(" ")).toBeNull();
92
+ });
93
+ });
94
+ describe("explainPullFailure", () => {
95
+ it("maps the known failure modes to their fix", () => {
96
+ expect(explainPullFailure('Error: realm host "huggingface.co" does not match')).toMatch(/Upgrade Ollama/);
97
+ expect(explainPullFailure('Error: 401: {"error":"Invalid username or password."}')).toMatch(/HF token/);
98
+ expect(explainPullFailure("Error: 404: not found")).toMatch(/no GGUF file/);
99
+ });
100
+ it("passes unknown errors through with the tail", () => {
101
+ expect(explainPullFailure("line1\nline2\nline3\nline4")).toBe("Ollama pull failed: line2 line3 line4");
102
+ expect(explainPullFailure("")).toBe("Ollama pull failed.");
103
+ });
104
+ });
105
+ describe("formatCount", () => {
106
+ it("compacts large download counts", () => {
107
+ expect(formatCount(2_400_000)).toBe("2.4M");
108
+ expect(formatCount(45_000)).toBe("45K");
109
+ expect(formatCount(712)).toBe("712");
110
+ });
111
+ });
112
+ //# sourceMappingURL=hf-pull.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hf-pull.test.js","sourceRoot":"","sources":["../src/hf-pull.test.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"subagent-worker-mode.d.ts","sourceRoot":"","sources":["../../src/modes/subagent-worker-mode.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAChE,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAaxD,yFAAyF;AACzF,wBAAsB,mBAAmB,CACvC,aAAa,EAAE,IAAI,CAAC,YAAY,EAAE,QAAQ,GAAG,WAAW,CAAC,EACzD,aAAa,EAAE,MAAM,MAAM,EAC3B,aAAa,EAAE,CAAC,UAAU,EAAE,eAAe,KAAK,IAAI,GACnD,OAAO,CAAC,OAAO,CAAC,CAqBlB;AAED,MAAM,WAAW,wBAAwB;IACvC,QAAQ,EAAE,QAAQ,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,wCAAwC;IACxC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,sFAAsF;IACtF,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,sEAAsE;IACtE,YAAY,CAAC,EAAE,SAAS,GAAG,MAAM,CAAC;IAClC,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,iFAAiF;IACjF,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC7B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAoBD,wBAAsB,qBAAqB,IAAI,OAAO,CAAC,IAAI,CAAC,CAkQ3D"}
1
+ {"version":3,"file":"subagent-worker-mode.d.ts","sourceRoot":"","sources":["../../src/modes/subagent-worker-mode.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAChE,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAcxD,yFAAyF;AACzF,wBAAsB,mBAAmB,CACvC,aAAa,EAAE,IAAI,CAAC,YAAY,EAAE,QAAQ,GAAG,WAAW,CAAC,EACzD,aAAa,EAAE,MAAM,MAAM,EAC3B,aAAa,EAAE,CAAC,UAAU,EAAE,eAAe,KAAK,IAAI,GACnD,OAAO,CAAC,OAAO,CAAC,CAqBlB;AAED,MAAM,WAAW,wBAAwB;IACvC,QAAQ,EAAE,QAAQ,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,wCAAwC;IACxC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,sFAAsF;IACtF,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,sEAAsE;IACtE,YAAY,CAAC,EAAE,SAAS,GAAG,MAAM,CAAC;IAClC,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,iFAAiF;IACjF,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC7B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AA6BD,wBAAsB,qBAAqB,IAAI,OAAO,CAAC,IAAI,CAAC,CAkT3D"}
@@ -3,6 +3,7 @@ import { AgentSession } from "../core/agent-session.js";
3
3
  import { isModelUnavailableError } from "../tools/subagent.js";
4
4
  import { boundSubAgentOutput, SUB_AGENT_MAX_TURN_EXTENSIONS, SUB_AGENT_TIMEOUT_MS, } from "../tools/subagent-shared.js";
5
5
  import { captureSidecarError, flushSidecarErrors } from "../core/sidecar-error-reporter.js";
6
+ import { writeTurnRecord } from "../core/subagent-turn-record.js";
6
7
  const TIMEOUT_RECOVERY_GRACE_MS = 60_000;
7
8
  const TIMEOUT_RECOVERY_PROMPT = `Your execution time limit was reached and the active operation was stopped.
8
9
  You have one final 60-second recovery turn. Do not call any tools. Immediately return the best concise answer you can from the evidence already in this conversation. Clearly state what remains incomplete or unverified.`;
@@ -25,13 +26,37 @@ export async function recoverTimedOutTurn(activeSession, currentOutput, setContr
25
26
  clearTimeout(recoveryTimer);
26
27
  }
27
28
  }
29
+ /** Set once our stdout pipe dies (parent restart). See runSubagentWorkerMode. */
30
+ let orphaned = false;
28
31
  function emit(frame) {
29
- process.stdout.write(`${JSON.stringify(frame)}\n`);
32
+ if (orphaned)
33
+ return;
34
+ try {
35
+ process.stdout.write(`${JSON.stringify(frame)}\n`);
36
+ }
37
+ catch {
38
+ // A racing pipe teardown between the guard and the write — the error
39
+ // handler below flips `orphaned` for subsequent frames.
40
+ }
30
41
  }
31
42
  function errorMessage(error) {
32
43
  return error instanceof Error ? error.message : String(error);
33
44
  }
34
45
  export async function runSubagentWorkerMode() {
46
+ // Detached child outliving its parent: a parent restart kills our stdout
47
+ // pipe, and the first write after that would crash us mid-turn (EPIPE).
48
+ // Swallow it, stop emitting, and keep running — the durable session
49
+ // transcript plus the turn record written beside it are what the
50
+ // rehydrated parent adopts.
51
+ const pipeError = (error) => {
52
+ if (error.code === "EPIPE") {
53
+ orphaned = true;
54
+ return;
55
+ }
56
+ throw error;
57
+ };
58
+ process.stdout.on("error", pipeError);
59
+ process.stderr.on("error", pipeError);
35
60
  let session;
36
61
  let initializeOptions;
37
62
  let state = "uninitialized";
@@ -43,6 +68,11 @@ export async function runSubagentWorkerMode() {
43
68
  let recoveryOutput = "";
44
69
  let recoveringAfterTimeout = false;
45
70
  let producedToolCall = false;
71
+ // This worker's LIFETIME totals — one initialize = one agent_id = one
72
+ // worker lifetime, so the durable turn record carries authoritative
73
+ // cumulative numbers an adopting parent can trust.
74
+ let turnCount = 0;
75
+ const tokenUsage = { input: 0, output: 0 };
46
76
  const setState = (next, extra = {}) => {
47
77
  state = next;
48
78
  emit({ type: "state", state: next, ...extra });
@@ -74,6 +104,13 @@ export async function runSubagentWorkerMode() {
74
104
  activeSession.eventBus.on(event, (payload) => {
75
105
  if (event === "tool_call_start")
76
106
  producedToolCall = true;
107
+ if (event === "turn_end") {
108
+ turnCount++;
109
+ const usage = payload
110
+ .usage;
111
+ tokenUsage.input += usage?.inputTokens ?? 0;
112
+ tokenUsage.output += usage?.outputTokens ?? 0;
113
+ }
77
114
  emit({ type: "event", event, payload });
78
115
  });
79
116
  }
@@ -159,8 +196,7 @@ export async function runSubagentWorkerMode() {
159
196
  const interrupted = controller.signal.aborted || (abortReason !== undefined && abortReason !== "timeout");
160
197
  const timedOut = abortReason === "timeout" && !recoveredAfterTimeout;
161
198
  setState(interrupted && !timedOut ? "interrupted" : "idle");
162
- emit({
163
- type: "turn_complete",
199
+ completeTurn({
164
200
  status: recoveredAfterTimeout
165
201
  ? "completed"
166
202
  : timedOut
@@ -192,8 +228,7 @@ export async function runSubagentWorkerMode() {
192
228
  });
193
229
  }
194
230
  setState(interrupted && !timedOut ? "interrupted" : "idle");
195
- emit({
196
- type: "turn_complete",
231
+ completeTurn({
197
232
  status: timedOut ? "failed" : interrupted ? "interrupted" : "failed",
198
233
  output: boundSubAgentOutput(output),
199
234
  error: timedOut
@@ -208,6 +243,20 @@ export async function runSubagentWorkerMode() {
208
243
  activeTurn = undefined;
209
244
  });
210
245
  };
246
+ /** Durably record the turn, then announce it. Record FIRST: an adopting
247
+ * parent must never observe a terminal frame with no record behind it. */
248
+ const completeTurn = (frame) => {
249
+ void writeTurnRecord(initializeOptions?.childSessionPath, {
250
+ status: frame.status ?? "failed",
251
+ output: typeof frame.output === "string" ? frame.output : undefined,
252
+ error: typeof frame.error === "string" ? frame.error : undefined,
253
+ model: typeof frame.model === "string" ? frame.model : undefined,
254
+ turn_count: turnCount,
255
+ token_usage: { input: tokenUsage.input, output: tokenUsage.output },
256
+ completed_at: Date.now(),
257
+ });
258
+ emit({ type: "turn_complete", ...frame });
259
+ };
211
260
  const acknowledge = (requestId, result = {}) => emit({ type: "ack", request_id: requestId, ok: true, ...result });
212
261
  const reject = (requestId, error) => emit({ type: "ack", request_id: requestId, ok: false, error: errorMessage(error) });
213
262
  const handle = async (command) => {
@@ -283,9 +332,18 @@ export async function runSubagentWorkerMode() {
283
332
  void handle(command);
284
333
  });
285
334
  await new Promise((resolve) => lines.once("close", resolve));
286
- abortReason = "stdin_closed";
287
- controller.abort();
288
- await activeTurn?.catch(() => undefined);
335
+ if (activeTurn) {
336
+ // Stdin closed mid-turn: the parent is gone. Finish the turn so its
337
+ // result lands in the durable turn record (the rehydrated parent adopts
338
+ // it); emit() is a no-op by then. The turn's own SUB_AGENT_TIMEOUT_MS
339
+ // still bounds it — the process cannot linger past that.
340
+ orphaned = true;
341
+ await activeTurn.catch(() => undefined);
342
+ }
343
+ else {
344
+ abortReason = "stdin_closed";
345
+ controller.abort();
346
+ }
289
347
  await session?.dispose();
290
348
  await flushSidecarErrors();
291
349
  }
@@ -1 +1 @@
1
- {"version":3,"file":"subagent-worker-mode.js","sourceRoot":"","sources":["../../src/modes/subagent-worker-mode.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAEhD,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AAC/D,OAAO,EACL,mBAAmB,EACnB,6BAA6B,EAC7B,oBAAoB,GACrB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAC;AAE5F,MAAM,yBAAyB,GAAG,MAAM,CAAC;AACzC,MAAM,uBAAuB,GAAG;2NAC2L,CAAC;AAE5N,yFAAyF;AACzF,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,aAAyD,EACzD,aAA2B,EAC3B,aAAoD;IAEpD,MAAM,mBAAmB,GAAG,aAAa,EAAE,CAAC,MAAM,CAAC;IACnD,MAAM,kBAAkB,GAAG,IAAI,eAAe,EAAE,CAAC;IACjD,aAAa,CAAC,kBAAkB,CAAC,CAAC;IAClC,aAAa,CAAC,SAAS,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;IACnD,MAAM,aAAa,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,kBAAkB,CAAC,KAAK,EAAE,EAAE,yBAAyB,CAAC,CAAC;IAC9F,IAAI,CAAC;QACH,MAAM,aAAa,CAAC,MAAM,CACxB,uBAAuB,EACvB,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,iBAAiB,EAAE,UAAU,EAAE,QAAQ,EAAE,EACpE,EAAE,YAAY,EAAE,IAAI,EAAE,CACvB,CAAC;QACF,OAAO,CACL,CAAC,kBAAkB,CAAC,MAAM,CAAC,OAAO;YAClC,aAAa,EAAE,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAC7D,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;YAAS,CAAC;QACT,YAAY,CAAC,aAAa,CAAC,CAAC;IAC9B,CAAC;AACH,CAAC;AAiCD,SAAS,IAAI,CAAC,KAA8B;IAC1C,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AACrD,CAAC;AAED,SAAS,YAAY,CAAC,KAAc;IAClC,OAAO,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAChE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,qBAAqB;IACzC,IAAI,OAAiC,CAAC;IACtC,IAAI,iBAAuD,CAAC;IAC5D,IAAI,KAAK,GAAgB,eAAe,CAAC;IACzC,IAAI,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;IACvC,IAAI,UAAqC,CAAC;IAC1C,IAAI,SAAoD,CAAC;IACzD,IAAI,WAA8E,CAAC;IACnF,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,IAAI,cAAc,GAAG,EAAE,CAAC;IACxB,IAAI,sBAAsB,GAAG,KAAK,CAAC;IACnC,IAAI,gBAAgB,GAAG,KAAK,CAAC;IAE7B,MAAM,QAAQ,GAAG,CAAC,IAAiB,EAAE,QAAiC,EAAE,EAAE,EAAE;QAC1E,KAAK,GAAG,IAAI,CAAC;QACb,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,KAAK,EAAE,CAAC,CAAC;IACjD,CAAC,CAAC;IAEF,MAAM,UAAU,GAAG,CAAC,aAA2B,EAAE,EAAE;QACjD,MAAM,SAAS,GAAG;YAChB,gBAAgB;YAChB,iBAAiB;YACjB,kBAAkB;YAClB,eAAe;YACf,UAAU;YACV,WAAW;YACX,sBAAsB;YACtB,WAAW;YACX,kBAAkB;YAClB,oBAAoB;SACZ,CAAC;QACX,aAAa,CAAC,QAAQ,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC,OAAO,EAAE,EAAE;YAClD,IAAI,sBAAsB,EAAE,CAAC;gBAC3B,IAAI,cAAc,CAAC,MAAM,GAAG,OAAO;oBAAE,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC;YACtE,CAAC;iBAAM,IAAI,MAAM,CAAC,MAAM,GAAG,OAAO,EAAE,CAAC;gBACnC,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;YACzB,CAAC;YACD,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,CAAC,CAAC;QACxD,CAAC,CAAC,CAAC;QACH,KAAK,MAAM,KAAK,IAAI,SAAS,EAAE,CAAC;YAC9B,aAAa,CAAC,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,OAAO,EAAE,EAAE;gBAC3C,IAAI,KAAK,KAAK,iBAAiB;oBAAE,gBAAgB,GAAG,IAAI,CAAC;gBACzD,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;YAC1C,CAAC,CAAC,CAAC;QACL,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,aAAa,GAAG,KAAK,EAAE,OAAiC,EAAyB,EAAE;QACvF,MAAM,EAAE,aAAa,EAAE,cAAc,EAAE,gBAAgB,EAAE,GAAG,cAAc,EAAE,GAAG,OAAO,CAAC;QACvF,MAAM,IAAI,GAAG,IAAI,YAAY,CAAC;YAC5B,GAAG,cAAc;YACjB,QAAQ,EAAE,EAAE;YACZ,iBAAiB,EAAE,6BAA6B;YAChD,SAAS,EAAE,KAAK;YAChB,cAAc,EAAE,OAAO,CAAC,cAAc;YACtC,SAAS,EAAE,gBAAgB;YAC3B,MAAM,EAAE,UAAU,CAAC,MAAM;YACzB,cAAc,EAAE,IAAI;SACrB,CAAC,CAAC;QACH,UAAU,CAAC,IAAI,CAAC,CAAC;QACjB,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QACxB,OAAO,IAAI,CAAC;IACd,CAAC,CAAC;IAEF,MAAM,OAAO,GAAG,CAAC,IAAY,EAAE,EAAE;QAC/B,IAAI,CAAC,OAAO;YAAE,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;QAC3D,IAAI,KAAK,KAAK,SAAS;YAAE,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;QAC9E,MAAM,GAAG,EAAE,CAAC;QACZ,cAAc,GAAG,EAAE,CAAC;QACpB,sBAAsB,GAAG,KAAK,CAAC;QAC/B,gBAAgB,GAAG,KAAK,CAAC;QACzB,WAAW,GAAG,SAAS,CAAC;QACxB,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;QACnC,OAAO,CAAC,SAAS,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QACrC,QAAQ,CAAC,SAAS,CAAC,CAAC;QACpB,SAAS,GAAG,UAAU,CAAC,GAAG,EAAE;YAC1B,WAAW,GAAG,SAAS,CAAC;YACxB,UAAU,CAAC,KAAK,EAAE,CAAC;QACrB,CAAC,EAAE,oBAAoB,CAAC,CAAC;QACzB,UAAU,GAAG,CAAC,KAAK,IAAI,EAAE;YACvB,IAAI,CAAC;gBACH,MAAM,OAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YAC9B,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,OAAO,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;gBACpC,MAAM,aAAa,GAAG,iBAAiB,EAAE,aAAa,CAAC;gBACvD,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;oBAC9B,uEAAuE;oBACvE,+DAA+D;gBACjE,CAAC;qBAAM,IACL,aAAa;oBACb,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO;oBAC1B,CAAC,MAAM;oBACP,CAAC,gBAAgB;oBACjB,uBAAuB,CAAC,OAAO,CAAC,EAChC,CAAC;oBACD,MAAM,OAAQ,CAAC,OAAO,EAAE,CAAC;oBACzB,iBAAiB,GAAG;wBAClB,GAAG,iBAAkB;wBACrB,KAAK,EAAE,aAAa;wBACpB,aAAa,EAAE,SAAS;qBACzB,CAAC;oBACF,OAAO,GAAG,MAAM,aAAa,CAAC,iBAAiB,CAAC,CAAC;oBACjD,MAAM,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;gBAC7B,CAAC;qBAAM,CAAC;oBACN,MAAM,KAAK,CAAC;gBACd,CAAC;YACH,CAAC;YACD,YAAY,CAAC,SAAS,CAAC,CAAC;YAExB,IAAI,qBAAqB,GAAG,KAAK,CAAC;YAClC,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;gBAC9B,sBAAsB,GAAG,IAAI,CAAC;gBAC9B,IAAI,CAAC;oBACH,qBAAqB,GAAG,MAAM,mBAAmB,CAC/C,OAAQ,EACR,GAAG,EAAE,CAAC,cAAc,EACpB,CAAC,kBAAkB,EAAE,EAAE;wBACrB,UAAU,GAAG,kBAAkB,CAAC;oBAClC,CAAC,CACF,CAAC;gBACJ,CAAC;wBAAS,CAAC;oBACT,sBAAsB,GAAG,KAAK,CAAC;gBACjC,CAAC;gBACD,IAAI,cAAc,CAAC,IAAI,EAAE,EAAE,CAAC;oBAC1B,MAAM,IAAI,mCAAmC,cAAc,EAAE,CAAC;gBAChE,CAAC;YACH,CAAC;YAED,MAAM,WAAW,GACf,UAAU,CAAC,MAAM,CAAC,OAAO,IAAI,CAAC,WAAW,KAAK,SAAS,IAAI,WAAW,KAAK,SAAS,CAAC,CAAC;YACxF,MAAM,QAAQ,GAAG,WAAW,KAAK,SAAS,IAAI,CAAC,qBAAqB,CAAC;YACrE,QAAQ,CAAC,WAAW,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;YAC5D,IAAI,CAAC;gBACH,IAAI,EAAE,eAAe;gBACrB,MAAM,EAAE,qBAAqB;oBAC3B,CAAC,CAAC,WAAW;oBACb,CAAC,CAAC,QAAQ;wBACR,CAAC,CAAC,QAAQ;wBACV,CAAC,CAAC,WAAW;4BACX,CAAC,CAAC,aAAa;4BACf,CAAC,CAAC,WAAW;gBACnB,MAAM,EAAE,mBAAmB,CAAC,MAAM,CAAC;gBACnC,GAAG,CAAC,qBAAqB;oBACvB,CAAC,CAAC,EAAE,uBAAuB,EAAE,IAAI,EAAE;oBACnC,CAAC,CAAC,QAAQ;wBACR,CAAC,CAAC;4BACE,KAAK,EAAE,mBAAmB,IAAI,CAAC,KAAK,CAAC,oBAAoB,GAAG,MAAM,CAAC,mCAAmC;yBACvG;wBACH,CAAC,CAAC,WAAW;4BACX,CAAC,CAAC,EAAE,KAAK,EAAE,aAAa,EAAE;4BAC1B,CAAC,CAAC,EAAE,CAAC;gBACX,KAAK,EAAE,iBAAiB,EAAE,KAAK;aAChC,CAAC,CAAC;QACL,CAAC,CAAC,EAAE;aACD,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE;YACxB,YAAY,CAAC,SAAS,CAAC,CAAC;YACxB,MAAM,WAAW,GAAG,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC;YAC9C,MAAM,QAAQ,GAAG,WAAW,KAAK,SAAS,CAAC;YAC3C,IAAI,CAAC,WAAW,EAAE,CAAC;gBACjB,mBAAmB,CAAC,KAAK,EAAE,sBAAsB,EAAE;oBACjD,QAAQ,EAAE,iBAAiB,EAAE,QAAQ,IAAI,SAAS;oBAClD,KAAK,EAAE,iBAAiB,EAAE,KAAK,IAAI,SAAS;iBAC7C,CAAC,CAAC;YACL,CAAC;YACD,QAAQ,CAAC,WAAW,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;YAC5D,IAAI,CAAC;gBACH,IAAI,EAAE,eAAe;gBACrB,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,QAAQ;gBACpE,MAAM,EAAE,mBAAmB,CAAC,MAAM,CAAC;gBACnC,KAAK,EAAE,QAAQ;oBACb,CAAC,CAAC,mBAAmB,IAAI,CAAC,KAAK,CAAC,oBAAoB,GAAG,MAAM,CAAC,mCAAmC;oBACjG,CAAC,CAAC,WAAW;wBACX,CAAC,CAAC,aAAa;wBACf,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC;gBACzB,KAAK,EAAE,iBAAiB,EAAE,KAAK;aAChC,CAAC,CAAC;QACL,CAAC,CAAC;aACD,OAAO,CAAC,GAAG,EAAE;YACZ,UAAU,GAAG,SAAS,CAAC;QACzB,CAAC,CAAC,CAAC;IACP,CAAC,CAAC;IAEF,MAAM,WAAW,GAAG,CAAC,SAAiB,EAAE,SAAkC,EAAE,EAAE,EAAE,CAC9E,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,MAAM,EAAE,CAAC,CAAC;IACpE,MAAM,MAAM,GAAG,CAAC,SAAiB,EAAE,KAAc,EAAE,EAAE,CACnD,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAEtF,MAAM,MAAM,GAAG,KAAK,EAAE,OAAsB,EAAiB,EAAE;QAC7D,IAAI,CAAC;YACH,QAAQ,OAAO,CAAC,OAAO,EAAE,CAAC;gBACxB,KAAK,YAAY,CAAC,CAAC,CAAC;oBAClB,IAAI,OAAO;wBAAE,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;oBAC9D,iBAAiB,GAAG,OAAO,CAAC,OAAO,CAAC;oBACpC,OAAO,GAAG,MAAM,aAAa,CAAC,iBAAiB,CAAC,CAAC;oBACjD,QAAQ,CAAC,MAAM,CAAC,CAAC;oBACjB,MAAM,KAAK,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;oBACjC,iBAAiB,GAAG,EAAE,GAAG,iBAAiB,EAAE,gBAAgB,EAAE,KAAK,CAAC,WAAW,EAAE,CAAC;oBAClF,WAAW,CAAC,OAAO,CAAC,UAAU,EAAE;wBAC9B,gBAAgB,EAAE,KAAK,CAAC,SAAS;wBACjC,kBAAkB,EAAE,KAAK,CAAC,WAAW;wBACrC,KAAK,EAAE,iBAAiB,CAAC,KAAK;qBAC/B,CAAC,CAAC;oBACH,OAAO;gBACT,CAAC;gBACD,KAAK,OAAO,CAAC;gBACb,KAAK,UAAU;oBACb,IAAI,CAAC,OAAO;wBAAE,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;oBAC3D,IAAI,KAAK,KAAK,SAAS;wBAAE,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;oBAC9E,WAAW,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;oBACvD,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;oBACtB,OAAO;gBACT,KAAK,eAAe,CAAC,CAAC,CAAC;oBACrB,IAAI,CAAC,OAAO,IAAI,KAAK,KAAK,SAAS;wBAAE,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;oBAC9E,MAAM,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;oBACrD,WAAW,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;oBAC5C,OAAO;gBACT,CAAC;gBACD,KAAK,WAAW;oBACd,IAAI,CAAC,OAAO,IAAI,KAAK,KAAK,SAAS;wBAAE,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;oBAC9E,WAAW,GAAG,WAAW,CAAC;oBAC1B,UAAU,CAAC,KAAK,EAAE,CAAC;oBACnB,WAAW,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;oBAChC,OAAO;gBACT,KAAK,UAAU;oBACb,WAAW,GAAG,UAAU,CAAC;oBACzB,UAAU,CAAC,KAAK,EAAE,CAAC;oBACnB,MAAM,UAAU,EAAE,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;oBACzC,MAAM,OAAO,EAAE,OAAO,EAAE,CAAC;oBACzB,QAAQ,CAAC,QAAQ,CAAC,CAAC;oBACnB,WAAW,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;oBAChC,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;oBACrB,OAAO;YACX,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,mBAAmB,CAAC,KAAK,EAAE,yBAAyB,EAAE,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;YACpF,MAAM,CAAC,OAAO,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;QACpC,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,KAAK,GAAG,eAAe,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;IACzE,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;QACxB,IAAI,OAAsB,CAAC;QAC3B,IAAI,CAAC;YACH,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAkB,CAAC;YAC5C,IAAI,CAAC,OAAO,CAAC,UAAU,IAAI,CAAC,OAAO,CAAC,OAAO;gBAAE,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;QACxF,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,mBAAmB,CAAC,KAAK,EAAE,0BAA0B,CAAC,CAAC;YACvD,IAAI,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE,KAAK,EAAE,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAC7D,OAAO;QACT,CAAC;QACD,KAAK,MAAM,CAAC,OAAO,CAAC,CAAC;IACvB,CAAC,CAAC,CAAC;IACH,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;IACnE,WAAW,GAAG,cAAc,CAAC;IAC7B,UAAU,CAAC,KAAK,EAAE,CAAC;IACnB,MAAM,UAAU,EAAE,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;IACzC,MAAM,OAAO,EAAE,OAAO,EAAE,CAAC;IACzB,MAAM,kBAAkB,EAAE,CAAC;AAC7B,CAAC"}
1
+ {"version":3,"file":"subagent-worker-mode.js","sourceRoot":"","sources":["../../src/modes/subagent-worker-mode.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
1
  import { type Skill } from "./core/skills.js";
2
+ import { type ContextLimits } from "./core/context-limits.js";
2
3
  import type { LanguageId } from "./core/language-detector.js";
3
4
  import type { Provider } from "@kenkaiiii/gg-ai";
4
5
  /** Combined byte budget for all project instruction files (Codex default). */
@@ -13,7 +14,7 @@ export declare const PROJECT_CONTEXT_MAX_BYTES: number;
13
14
  * combined budget is filled nearest-first (the nearest instructions are the
14
15
  * most binding); files dropped by the cap are reported in a one-line note.
15
16
  */
16
- export declare function collectProjectContext(cwd: string): Promise<string[]>;
17
+ export declare function collectProjectContext(cwd: string, limits?: ContextLimits): Promise<string[]>;
17
18
  /** Extra Environment-section facts that vary per session rather than per host. */
18
19
  export interface SystemPromptEnvironment {
19
20
  /** Extra workspace roots added with `/add-dir`. */
@@ -53,6 +54,8 @@ export declare function buildSubAgentSystemPrompt(agentBody: string, opts: {
53
54
  deferredToolNames?: readonly string[];
54
55
  context?: "project" | "none";
55
56
  environment?: SystemPromptEnvironment;
57
+ /** Byte budgets for skill catalog / project instructions / total ceiling. */
58
+ contextLimits?: ContextLimits;
56
59
  }): Promise<string>;
57
60
  /**
58
61
  * Build the system prompt dynamically based on cwd and context.
@@ -69,5 +72,7 @@ export declare function buildSubAgentSystemPrompt(agentBody: string, opts: {
69
72
  * promotes them. Listed as one-line hints so the capability stays discoverable
70
73
  * while its parameter schema stays out of the request.
71
74
  */
72
- export declare function buildSystemPrompt(cwd: string, skills?: Skill[], planMode?: boolean, approvedPlanPath?: string, toolNames?: readonly string[], activeLanguages?: Set<LanguageId>, provider?: Provider, environment?: SystemPromptEnvironment, deferredToolNames?: readonly string[]): Promise<string>;
75
+ export declare function buildSystemPrompt(cwd: string, skills?: Skill[], planMode?: boolean, approvedPlanPath?: string, toolNames?: readonly string[], activeLanguages?: Set<LanguageId>, provider?: Provider, environment?: SystemPromptEnvironment, deferredToolNames?: readonly string[],
76
+ /** Byte budgets for skill catalog / project instructions / total ceiling. */
77
+ contextLimits?: ContextLimits): Promise<string>;
73
78
  //# sourceMappingURL=system-prompt.d.ts.map