@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.
- 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/prompt-commands.d.ts.map +1 -1
- package/dist/core/prompt-commands.js +95 -0
- package/dist/core/prompt-commands.js.map +1 -1
- package/dist/core/prompt-commands.test.js +25 -0
- package/dist/core/prompt-commands.test.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 +1 -0
- 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
|
@@ -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"}
|
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
|