@kenkaiiii/ggcoder 5.48.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.
- package/dist/app-sidecar-auth-broadcast.test.js +1 -1
- package/dist/app-sidecar-auth-broadcast.test.js.map +1 -1
- package/dist/app-sidecar.js +253 -2
- package/dist/app-sidecar.js.map +1 -1
- package/dist/cli/shared.d.ts.map +1 -1
- package/dist/cli/shared.js +2 -0
- package/dist/cli/shared.js.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +6 -2
- package/dist/cli.js.map +1 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +1 -0
- package/dist/config.js.map +1 -1
- package/dist/core/agent-session-compaction.test.js +1 -0
- package/dist/core/agent-session-compaction.test.js.map +1 -1
- package/dist/core/agent-session.d.ts +2 -0
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +15 -8
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/auth-providers.d.ts.map +1 -1
- package/dist/core/auth-providers.js +21 -21
- package/dist/core/auth-providers.js.map +1 -1
- package/dist/core/context-limits.d.ts +35 -0
- package/dist/core/context-limits.d.ts.map +1 -0
- package/dist/core/context-limits.js +35 -0
- package/dist/core/context-limits.js.map +1 -0
- package/dist/core/context-limits.test.d.ts +2 -0
- package/dist/core/context-limits.test.d.ts.map +1 -0
- package/dist/core/context-limits.test.js +55 -0
- package/dist/core/context-limits.test.js.map +1 -0
- package/dist/core/local-endpoint-store.test.js +1 -9
- package/dist/core/local-endpoint-store.test.js.map +1 -1
- package/dist/core/mcp/deferred-catalog.d.ts +9 -0
- package/dist/core/mcp/deferred-catalog.d.ts.map +1 -1
- package/dist/core/mcp/deferred-catalog.js +15 -1
- package/dist/core/mcp/deferred-catalog.js.map +1 -1
- package/dist/core/process-manager-wake.test.js +8 -4
- package/dist/core/process-manager-wake.test.js.map +1 -1
- package/dist/core/process-manager.d.ts.map +1 -1
- package/dist/core/process-manager.js +8 -1
- package/dist/core/process-manager.js.map +1 -1
- package/dist/core/settings-manager.d.ts +9 -0
- package/dist/core/settings-manager.d.ts.map +1 -1
- package/dist/core/settings-manager.js +18 -0
- package/dist/core/settings-manager.js.map +1 -1
- package/dist/core/skills-routing.test.js +42 -0
- package/dist/core/skills-routing.test.js.map +1 -1
- package/dist/core/skills.d.ts +16 -1
- package/dist/core/skills.d.ts.map +1 -1
- package/dist/core/skills.js +37 -5
- package/dist/core/skills.js.map +1 -1
- package/dist/core/subagent-manager.d.ts +17 -0
- package/dist/core/subagent-manager.d.ts.map +1 -1
- package/dist/core/subagent-manager.js +92 -1
- package/dist/core/subagent-manager.js.map +1 -1
- package/dist/core/subagent-manager.test.js +161 -0
- package/dist/core/subagent-manager.test.js.map +1 -1
- package/dist/core/subagent-turn-record.d.ts +17 -0
- package/dist/core/subagent-turn-record.d.ts.map +1 -0
- package/dist/core/subagent-turn-record.js +82 -0
- package/dist/core/subagent-turn-record.js.map +1 -0
- package/dist/core/subagent-turn-record.test.d.ts +2 -0
- package/dist/core/subagent-turn-record.test.d.ts.map +1 -0
- package/dist/core/subagent-turn-record.test.js +70 -0
- package/dist/core/subagent-turn-record.test.js.map +1 -0
- package/dist/hf-pull.d.ts +66 -0
- package/dist/hf-pull.d.ts.map +1 -0
- package/dist/hf-pull.js +109 -0
- package/dist/hf-pull.js.map +1 -0
- package/dist/hf-pull.test.d.ts +2 -0
- package/dist/hf-pull.test.d.ts.map +1 -0
- package/dist/hf-pull.test.js +112 -0
- package/dist/hf-pull.test.js.map +1 -0
- package/dist/modes/subagent-worker-mode.d.ts.map +1 -1
- package/dist/modes/subagent-worker-mode.js +66 -8
- package/dist/modes/subagent-worker-mode.js.map +1 -1
- package/dist/system-prompt.d.ts +7 -2
- package/dist/system-prompt.d.ts.map +1 -1
- package/dist/system-prompt.js +26 -9
- package/dist/system-prompt.js.map +1 -1
- package/dist/system-prompt.test.js +26 -0
- package/dist/system-prompt.test.js.map +1 -1
- package/dist/tools/index.d.ts +3 -0
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +1 -1
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/skill.d.ts +3 -2
- package/dist/tools/skill.d.ts.map +1 -1
- package/dist/tools/skill.js +10 -7
- package/dist/tools/skill.js.map +1 -1
- package/dist/tools/tool-search.d.ts +2 -1
- package/dist/tools/tool-search.d.ts.map +1 -1
- package/dist/tools/tool-search.js +28 -3
- package/dist/tools/tool-search.js.map +1 -1
- package/dist/tools/tool-search.test.js +58 -0
- package/dist/tools/tool-search.test.js.map +1 -1
- package/dist/ui/App.d.ts.map +1 -1
- package/dist/ui/App.js.map +1 -1
- package/dist/ui/components/ModelSelector.d.ts.map +1 -1
- package/dist/ui/components/ModelSelector.js +1 -0
- package/dist/ui/components/ModelSelector.js.map +1 -1
- package/dist/ui/login.d.ts.map +1 -1
- package/dist/ui/login.js +7 -2
- package/dist/ui/login.js.map +1 -1
- package/package.json +4 -4
package/dist/hf-pull.js
ADDED
|
@@ -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":"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"}
|
|
@@ -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;
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
287
|
-
|
|
288
|
-
|
|
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":"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"}
|
|
1
|
+
{"version":3,"file":"subagent-worker-mode.js","sourceRoot":"","sources":["../../src/modes/subagent-worker-mode.ts"],"names":[],"mappings":"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"}
|
package/dist/system-prompt.d.ts
CHANGED
|
@@ -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[]
|
|
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
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"system-prompt.d.ts","sourceRoot":"","sources":["../src/system-prompt.ts"],"names":[],"mappings":"AAEA,OAAO,EAAyB,KAAK,KAAK,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"system-prompt.d.ts","sourceRoot":"","sources":["../src/system-prompt.ts"],"names":[],"mappings":"AAEA,OAAO,EAAyB,KAAK,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACrE,OAAO,EAAgC,KAAK,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAE5F,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAM9D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAYjD,8EAA8E;AAC9E,eAAO,MAAM,yBAAyB,QAAqC,CAAC;AA2P5E;;;;;;;;;GASG;AACH,wBAAsB,qBAAqB,CACzC,GAAG,EAAE,MAAM,EACX,MAAM,GAAE,aAA8B,GACrC,OAAO,CAAC,MAAM,EAAE,CAAC,CAwDnB;AAWD,kFAAkF;AAClF,MAAM,WAAW,uBAAuB;IACtC,mDAAmD;IACnD,eAAe,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,8EAA8E;IAC9E,YAAY,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAClC;AA2CD;;;;;;;GAOG;AACH,eAAO,MAAM,wBAAwB,QAOmE,CAAC;AAEzG;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,yBAAyB,CAC7C,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE;IACJ,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC9B,6EAA6E;IAC7E,iBAAiB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACtC,OAAO,CAAC,EAAE,SAAS,GAAG,MAAM,CAAC;IAC7B,WAAW,CAAC,EAAE,uBAAuB,CAAC;IACtC,6EAA6E;IAC7E,aAAa,CAAC,EAAE,aAAa,CAAC;CAC/B,GACA,OAAO,CAAC,MAAM,CAAC,CA4BjB;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,iBAAiB,CACrC,GAAG,EAAE,MAAM,EACX,MAAM,CAAC,EAAE,KAAK,EAAE,EAChB,QAAQ,CAAC,EAAE,OAAO,EAClB,gBAAgB,CAAC,EAAE,MAAM,EACzB,SAAS,CAAC,EAAE,SAAS,MAAM,EAAE,EAC7B,eAAe,CAAC,EAAE,GAAG,CAAC,UAAU,CAAC,EACjC,QAAQ,CAAC,EAAE,QAAQ,EACnB,WAAW,CAAC,EAAE,uBAAuB,EACrC,iBAAiB,CAAC,EAAE,SAAS,MAAM,EAAE;AACrC,6EAA6E;AAC7E,aAAa,CAAC,EAAE,aAAa,GAC5B,OAAO,CAAC,MAAM,CAAC,CA2CjB"}
|
package/dist/system-prompt.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import fs from "node:fs/promises";
|
|
2
2
|
import path from "node:path";
|
|
3
3
|
import { formatSkillsForPrompt } from "./core/skills.js";
|
|
4
|
+
import { clampToBytes, CONTEXT_LIMITS } from "./core/context-limits.js";
|
|
4
5
|
import { TOOL_PROMPT_HINTS, buildToolSteering, DEFAULT_TOOL_NAMES } from "./tools/prompt-hints.js";
|
|
5
6
|
import { stripBom } from "./utils/text.js";
|
|
6
7
|
import { resolveShell } from "./core/shell.js";
|
|
@@ -17,7 +18,7 @@ const CONTEXT_FILES = [
|
|
|
17
18
|
"CONVENTIONS.md",
|
|
18
19
|
];
|
|
19
20
|
/** Combined byte budget for all project instruction files (Codex default). */
|
|
20
|
-
export const PROJECT_CONTEXT_MAX_BYTES =
|
|
21
|
+
export const PROJECT_CONTEXT_MAX_BYTES = CONTEXT_LIMITS.projectContextBytes;
|
|
21
22
|
const UNCACHED_MARKER = "<!-- uncached -->";
|
|
22
23
|
/**
|
|
23
24
|
* The agent's product identity. Anthropic models run as "Claude Code" (matching
|
|
@@ -250,7 +251,7 @@ function renderToolsSection(toolNames, deferredToolNames) {
|
|
|
250
251
|
* combined budget is filled nearest-first (the nearest instructions are the
|
|
251
252
|
* most binding); files dropped by the cap are reported in a one-line note.
|
|
252
253
|
*/
|
|
253
|
-
export async function collectProjectContext(cwd) {
|
|
254
|
+
export async function collectProjectContext(cwd, limits = CONTEXT_LIMITS) {
|
|
254
255
|
// Nearest-first collection order (cwd → root).
|
|
255
256
|
const collected = [];
|
|
256
257
|
let dir = cwd;
|
|
@@ -281,7 +282,7 @@ export async function collectProjectContext(cwd) {
|
|
|
281
282
|
dir = parent;
|
|
282
283
|
}
|
|
283
284
|
// Budget nearest-first: the closest files are the most binding.
|
|
284
|
-
let budget =
|
|
285
|
+
let budget = limits.projectContextBytes;
|
|
285
286
|
const kept = new Set();
|
|
286
287
|
const skipped = [];
|
|
287
288
|
for (let i = 0; i < collected.length; i++) {
|
|
@@ -341,6 +342,18 @@ function renderUncachedDateSuffix() {
|
|
|
341
342
|
const year = today.getFullYear();
|
|
342
343
|
return `${UNCACHED_MARKER}\nToday's date: ${day} ${month} ${year}`;
|
|
343
344
|
}
|
|
345
|
+
/**
|
|
346
|
+
* Emergency ceiling on the assembled prompt. Normal prompts are 15–25 KB; a
|
|
347
|
+
* hostile AGENTS.md stack plus a bloated skill catalog is the threat. Every
|
|
348
|
+
* individual input is already budgeted upstream — this is the backstop that
|
|
349
|
+
* bounds the total no matter what a future section adds.
|
|
350
|
+
*/
|
|
351
|
+
function enforcePromptCeiling(prompt, ceilingBytes) {
|
|
352
|
+
if (Buffer.byteLength(prompt, "utf8") <= ceilingBytes)
|
|
353
|
+
return prompt;
|
|
354
|
+
const marker = `\n[system prompt exceeded the ${ceilingBytes}-byte ceiling and was truncated]`;
|
|
355
|
+
return `${clampToBytes(prompt, ceilingBytes - Buffer.byteLength(marker, "utf8")).text}${marker}`;
|
|
356
|
+
}
|
|
344
357
|
/**
|
|
345
358
|
* What every sub-agent owes its parent.
|
|
346
359
|
*
|
|
@@ -373,6 +386,7 @@ export const SUBAGENT_RETURN_CONTRACT = `## Report\n\n` +
|
|
|
373
386
|
* agents where conventions are dead weight.
|
|
374
387
|
*/
|
|
375
388
|
export async function buildSubAgentSystemPrompt(agentBody, opts) {
|
|
389
|
+
const limits = opts.contextLimits ?? CONTEXT_LIMITS;
|
|
376
390
|
const sections = [agentBody.trim()];
|
|
377
391
|
const toolsSection = renderToolsSection(opts.toolNames, opts.deferredToolNames);
|
|
378
392
|
if (toolsSection)
|
|
@@ -383,7 +397,7 @@ export async function buildSubAgentSystemPrompt(agentBody, opts) {
|
|
|
383
397
|
if (delegationSection)
|
|
384
398
|
sections.push(delegationSection);
|
|
385
399
|
if ((opts.context ?? "project") === "project") {
|
|
386
|
-
const projectContextSection = renderProjectContextSection(await collectProjectContext(opts.cwd));
|
|
400
|
+
const projectContextSection = renderProjectContextSection(await collectProjectContext(opts.cwd, limits));
|
|
387
401
|
if (projectContextSection)
|
|
388
402
|
sections.push(projectContextSection);
|
|
389
403
|
}
|
|
@@ -391,7 +405,7 @@ export async function buildSubAgentSystemPrompt(agentBody, opts) {
|
|
|
391
405
|
// Environment + date stay last so the cached prefix matches the parent's
|
|
392
406
|
// layout: everything above is stable, the date suffix is the uncached tail.
|
|
393
407
|
renderEnvironmentSection(opts.cwd, opts.environment), renderUncachedDateSuffix());
|
|
394
|
-
return sections.join("\n\n");
|
|
408
|
+
return enforcePromptCeiling(sections.join("\n\n"), limits.systemPromptCeilingBytes);
|
|
395
409
|
}
|
|
396
410
|
/**
|
|
397
411
|
* Build the system prompt dynamically based on cwd and context.
|
|
@@ -408,7 +422,10 @@ export async function buildSubAgentSystemPrompt(agentBody, opts) {
|
|
|
408
422
|
* promotes them. Listed as one-line hints so the capability stays discoverable
|
|
409
423
|
* while its parameter schema stays out of the request.
|
|
410
424
|
*/
|
|
411
|
-
export async function buildSystemPrompt(cwd, skills, planMode, approvedPlanPath, toolNames, activeLanguages, provider, environment, deferredToolNames
|
|
425
|
+
export async function buildSystemPrompt(cwd, skills, planMode, approvedPlanPath, toolNames, activeLanguages, provider, environment, deferredToolNames,
|
|
426
|
+
/** Byte budgets for skill catalog / project instructions / total ceiling. */
|
|
427
|
+
contextLimits) {
|
|
428
|
+
const limits = contextLimits ?? CONTEXT_LIMITS;
|
|
412
429
|
const sections = [
|
|
413
430
|
renderIdentitySection(provider),
|
|
414
431
|
renderTalkSection(),
|
|
@@ -426,7 +443,7 @@ export async function buildSystemPrompt(cwd, skills, planMode, approvedPlanPath,
|
|
|
426
443
|
const delegationSection = renderDelegationSection(toolNames);
|
|
427
444
|
if (delegationSection)
|
|
428
445
|
sections.push(delegationSection);
|
|
429
|
-
const projectContextSection = renderProjectContextSection(await collectProjectContext(cwd));
|
|
446
|
+
const projectContextSection = renderProjectContextSection(await collectProjectContext(cwd, limits));
|
|
430
447
|
if (projectContextSection)
|
|
431
448
|
sections.push(projectContextSection);
|
|
432
449
|
if (activeLanguages && activeLanguages.size > 0) {
|
|
@@ -439,11 +456,11 @@ export async function buildSystemPrompt(cwd, skills, planMode, approvedPlanPath,
|
|
|
439
456
|
sections.push(verifySection);
|
|
440
457
|
}
|
|
441
458
|
if (skills && skills.length > 0) {
|
|
442
|
-
const skillsSection = formatSkillsForPrompt(skills);
|
|
459
|
+
const skillsSection = formatSkillsForPrompt(skills, limits);
|
|
443
460
|
if (skillsSection)
|
|
444
461
|
sections.push(skillsSection);
|
|
445
462
|
}
|
|
446
463
|
sections.push(renderEnvironmentSection(cwd, environment), renderUncachedDateSuffix());
|
|
447
|
-
return sections.join("\n\n");
|
|
464
|
+
return enforcePromptCeiling(sections.join("\n\n"), limits.systemPromptCeilingBytes);
|
|
448
465
|
}
|
|
449
466
|
//# sourceMappingURL=system-prompt.js.map
|