iosm-cli 0.2.12 → 0.2.13
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/CHANGELOG.md +29 -0
- package/README.md +5 -3
- 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 +80 -1
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/background-processes.d.ts +11 -0
- package/dist/core/background-processes.d.ts.map +1 -1
- package/dist/core/background-processes.js +115 -9
- package/dist/core/background-processes.js.map +1 -1
- package/dist/core/openrouter-model-catalog.d.ts +9 -0
- package/dist/core/openrouter-model-catalog.d.ts.map +1 -0
- package/dist/core/openrouter-model-catalog.js +139 -0
- package/dist/core/openrouter-model-catalog.js.map +1 -0
- package/dist/core/settings-manager.d.ts +2 -0
- package/dist/core/settings-manager.d.ts.map +1 -1
- package/dist/core/settings-manager.js +6 -0
- package/dist/core/settings-manager.js.map +1 -1
- package/dist/core/slash-commands.d.ts.map +1 -1
- package/dist/core/slash-commands.js +9 -1
- package/dist/core/slash-commands.js.map +1 -1
- package/dist/core/system-prompt.d.ts.map +1 -1
- package/dist/core/system-prompt.js +3 -0
- package/dist/core/system-prompt.js.map +1 -1
- package/dist/core/usage-cost.d.ts +4 -0
- package/dist/core/usage-cost.d.ts.map +1 -0
- package/dist/core/usage-cost.js +28 -0
- package/dist/core/usage-cost.js.map +1 -0
- package/dist/modes/interactive/components/footer.d.ts.map +1 -1
- package/dist/modes/interactive/components/footer.js +7 -5
- package/dist/modes/interactive/components/footer.js.map +1 -1
- package/dist/modes/interactive/interactive-mode.d.ts +19 -0
- package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode.js +646 -37
- package/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/docs/cli-reference.md +10 -2
- package/docs/configuration.md +6 -3
- package/docs/interactive-mode.md +15 -2
- package/docs/sessions-traces-export.md +2 -2
- package/package.json +1 -1
|
@@ -23,9 +23,20 @@ export interface StartBackgroundProcessInput {
|
|
|
23
23
|
cwd?: string;
|
|
24
24
|
source?: "interactive" | "tool";
|
|
25
25
|
}
|
|
26
|
+
export interface PruneBackgroundProcessesResult {
|
|
27
|
+
removed: number;
|
|
28
|
+
removedIds: string[];
|
|
29
|
+
skippedRunning: number;
|
|
30
|
+
skippedRecent: number;
|
|
31
|
+
thresholdHours: number;
|
|
32
|
+
}
|
|
26
33
|
export declare function startBackgroundProcess(input: StartBackgroundProcessInput): BackgroundProcessRecord;
|
|
27
34
|
export declare function listBackgroundProcesses(rootCwd: string, limit?: number): BackgroundProcessRecord[];
|
|
28
35
|
export declare function getBackgroundProcess(rootCwd: string, id: string): BackgroundProcessRecord | undefined;
|
|
29
36
|
export declare function stopBackgroundProcess(rootCwd: string, id: string): BackgroundProcessRecord | undefined;
|
|
30
37
|
export declare function readBackgroundProcessLogTail(rootCwd: string, id: string, lines?: number): string | undefined;
|
|
38
|
+
export declare function pruneBackgroundProcesses(rootCwd: string, options?: {
|
|
39
|
+
maxAgeHours?: number;
|
|
40
|
+
limit?: number;
|
|
41
|
+
}): PruneBackgroundProcessesResult;
|
|
31
42
|
//# sourceMappingURL=background-processes.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"background-processes.d.ts","sourceRoot":"","sources":["../../src/core/background-processes.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"background-processes.d.ts","sourceRoot":"","sources":["../../src/core/background-processes.ts"],"names":[],"mappings":"AAkBA,MAAM,MAAM,uBAAuB,GAAG,SAAS,GAAG,MAAM,GAAG,OAAO,GAAG,YAAY,GAAG,SAAS,CAAC;AAiB9F,MAAM,WAAW,uBAAuB;IACvC,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,aAAa,GAAG,MAAM,CAAC;IAChC,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,uBAAuB,CAAC;IAChC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,2BAA2B;IAC3C,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,aAAa,GAAG,MAAM,CAAC;CAChC;AAED,MAAM,WAAW,8BAA8B;IAC9C,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;CACvB;AA2KD,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,2BAA2B,GAAG,uBAAuB,CA2DlG;AAED,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,SAAK,GAAG,uBAAuB,EAAE,CAiB9F;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,uBAAuB,GAAG,SAAS,CAOrG;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,uBAAuB,GAAG,SAAS,CA8BtG;AAED,wBAAgB,4BAA4B,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,SAAK,GAAG,MAAM,GAAG,SAAS,CASxG;AAED,wBAAgB,wBAAwB,CACvC,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE;IACT,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;CACf,GACC,8BAA8B,CAuDhC"}
|
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
import { randomBytes } from "node:crypto";
|
|
2
|
-
import { closeSync, existsSync, fstatSync, mkdirSync, openSync, readFileSync, readSync, readdirSync, statSync, writeFileSync, } from "node:fs";
|
|
2
|
+
import { closeSync, existsSync, fstatSync, mkdirSync, openSync, readFileSync, readSync, readdirSync, rmSync, statSync, writeFileSync, } from "node:fs";
|
|
3
3
|
import { join, resolve } from "node:path";
|
|
4
|
-
import { spawn } from "child_process";
|
|
4
|
+
import { spawn, spawnSync } from "child_process";
|
|
5
5
|
import { getShellConfig, getShellEnv, killProcessTree } from "../utils/shell.js";
|
|
6
6
|
const BACKGROUND_DIR_SEGMENTS = [".iosm", "background", "processes"];
|
|
7
7
|
const MAX_LOG_TAIL_BYTES = 256 * 1024;
|
|
8
|
+
const BACKGROUND_STOP_FORCE_KILL_DELAY_MS = 1500;
|
|
9
|
+
const BACKGROUND_STOP_FALLBACK_EXIT_CODE = 143;
|
|
8
10
|
function getProcessesDir(rootCwd) {
|
|
9
11
|
return join(rootCwd, ...BACKGROUND_DIR_SEGMENTS);
|
|
10
12
|
}
|
|
@@ -47,20 +49,56 @@ function parseTextFile(path) {
|
|
|
47
49
|
return undefined;
|
|
48
50
|
}
|
|
49
51
|
}
|
|
52
|
+
function writeCompletionArtifacts(meta, finishedAt, exitCode) {
|
|
53
|
+
writeFileSync(meta.finishedAtPath, `${finishedAt}\n`, "utf8");
|
|
54
|
+
writeFileSync(meta.exitCodePath, `${exitCode}\n`, "utf8");
|
|
55
|
+
}
|
|
56
|
+
function signalProcessTree(pid, signal) {
|
|
57
|
+
if (process.platform === "win32") {
|
|
58
|
+
// /F is forced kill; omit it for soft terminate attempt.
|
|
59
|
+
const args = signal === "SIGKILL" ? ["/F", "/T", "/PID", String(pid)] : ["/T", "/PID", String(pid)];
|
|
60
|
+
try {
|
|
61
|
+
spawnSync("taskkill", args, { stdio: "ignore", timeout: 5000 });
|
|
62
|
+
}
|
|
63
|
+
catch {
|
|
64
|
+
// Ignore termination errors (process may already be gone).
|
|
65
|
+
}
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
68
|
+
try {
|
|
69
|
+
process.kill(-pid, signal);
|
|
70
|
+
}
|
|
71
|
+
catch {
|
|
72
|
+
try {
|
|
73
|
+
process.kill(pid, signal);
|
|
74
|
+
}
|
|
75
|
+
catch {
|
|
76
|
+
// Process already dead.
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
function scheduleForceKill(pid) {
|
|
81
|
+
const timer = setTimeout(() => {
|
|
82
|
+
if (!isProcessAlive(pid))
|
|
83
|
+
return;
|
|
84
|
+
killProcessTree(pid);
|
|
85
|
+
}, BACKGROUND_STOP_FORCE_KILL_DELAY_MS);
|
|
86
|
+
timer.unref();
|
|
87
|
+
}
|
|
50
88
|
function toRecord(meta, metaPath) {
|
|
51
89
|
const finishedAt = parseTextFile(meta.finishedAtPath);
|
|
52
90
|
const exitCode = parseIntegerFile(meta.exitCodePath);
|
|
53
91
|
const alive = isProcessAlive(meta.pid);
|
|
54
92
|
let status = "unknown";
|
|
55
|
-
if (
|
|
56
|
-
status = exitCode === 0 ? "done" : "error";
|
|
57
|
-
}
|
|
58
|
-
else if (meta.requestedStopAt && !alive) {
|
|
93
|
+
if (!alive && meta.requestedStopAt) {
|
|
59
94
|
status = "terminated";
|
|
60
95
|
}
|
|
61
96
|
else if (alive) {
|
|
62
97
|
status = "running";
|
|
63
98
|
}
|
|
99
|
+
else if (finishedAt && typeof exitCode === "number") {
|
|
100
|
+
status = exitCode === 0 ? "done" : "error";
|
|
101
|
+
}
|
|
64
102
|
return {
|
|
65
103
|
id: meta.id,
|
|
66
104
|
command: meta.command,
|
|
@@ -150,11 +188,14 @@ export function startBackgroundProcess(input) {
|
|
|
150
188
|
const now = new Date().toISOString();
|
|
151
189
|
const { shell, args } = getShellConfig();
|
|
152
190
|
const wrappedCommand = [
|
|
191
|
+
"(",
|
|
153
192
|
input.command,
|
|
193
|
+
")",
|
|
154
194
|
"__iosm_bg_exit_code=$?",
|
|
155
195
|
`__iosm_bg_finished_at=$(date -u +%Y-%m-%dT%H:%M:%SZ 2>/dev/null || node -e 'console.log(new Date().toISOString())')`,
|
|
156
196
|
`printf "%s\\n" "$__iosm_bg_finished_at" > ${shellQuote(finishedAtPath)}`,
|
|
157
197
|
`printf "%s\\n" "$__iosm_bg_exit_code" > ${shellQuote(exitCodePath)}`,
|
|
198
|
+
'exit "$__iosm_bg_exit_code"',
|
|
158
199
|
].join("\n");
|
|
159
200
|
const logFd = openSync(logPath, "a");
|
|
160
201
|
const child = spawn(shell, [...args, wrappedCommand], {
|
|
@@ -219,10 +260,23 @@ export function stopBackgroundProcess(rootCwd, id) {
|
|
|
219
260
|
const meta = loadMeta(metaPath);
|
|
220
261
|
if (!meta)
|
|
221
262
|
return undefined;
|
|
263
|
+
const wasAlive = isProcessAlive(meta.pid);
|
|
264
|
+
if (!wasAlive) {
|
|
265
|
+
return toRecord(meta, metaPath);
|
|
266
|
+
}
|
|
267
|
+
meta.requestedStopAt = new Date().toISOString();
|
|
268
|
+
saveMeta(metaPath, meta);
|
|
269
|
+
// Try graceful shutdown first and then enforce a hard kill in the background if needed.
|
|
270
|
+
signalProcessTree(meta.pid, "SIGTERM");
|
|
271
|
+
scheduleForceKill(meta.pid);
|
|
222
272
|
if (isProcessAlive(meta.pid)) {
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
273
|
+
return toRecord(meta, metaPath);
|
|
274
|
+
}
|
|
275
|
+
// Process already stopped synchronously; write fallback completion markers if shell did not flush them.
|
|
276
|
+
const hasFinishedAt = existsSync(meta.finishedAtPath);
|
|
277
|
+
const hasExitCode = existsSync(meta.exitCodePath);
|
|
278
|
+
if (!hasFinishedAt || !hasExitCode) {
|
|
279
|
+
writeCompletionArtifacts(meta, new Date().toISOString(), BACKGROUND_STOP_FALLBACK_EXIT_CODE);
|
|
226
280
|
}
|
|
227
281
|
return toRecord(meta, metaPath);
|
|
228
282
|
}
|
|
@@ -238,4 +292,56 @@ export function readBackgroundProcessLogTail(rootCwd, id, lines = 80) {
|
|
|
238
292
|
const sliced = chunks.slice(-maxLines);
|
|
239
293
|
return sliced.join("\n").trimEnd();
|
|
240
294
|
}
|
|
295
|
+
export function pruneBackgroundProcesses(rootCwd, options) {
|
|
296
|
+
const thresholdHoursRaw = options?.maxAgeHours;
|
|
297
|
+
const thresholdHours = typeof thresholdHoursRaw === "number" && Number.isFinite(thresholdHoursRaw)
|
|
298
|
+
? Math.max(1, Math.floor(thresholdHoursRaw))
|
|
299
|
+
: 168;
|
|
300
|
+
const limitRaw = options?.limit;
|
|
301
|
+
const limit = typeof limitRaw === "number" && Number.isFinite(limitRaw) ? Math.max(1, Math.floor(limitRaw)) : 1000;
|
|
302
|
+
const thresholdMs = thresholdHours * 60 * 60 * 1000;
|
|
303
|
+
const now = Date.now();
|
|
304
|
+
const result = {
|
|
305
|
+
removed: 0,
|
|
306
|
+
removedIds: [],
|
|
307
|
+
skippedRunning: 0,
|
|
308
|
+
skippedRecent: 0,
|
|
309
|
+
thresholdHours,
|
|
310
|
+
};
|
|
311
|
+
const dir = getProcessesDir(resolve(rootCwd));
|
|
312
|
+
if (!existsSync(dir))
|
|
313
|
+
return result;
|
|
314
|
+
const metaPaths = readdirSync(dir)
|
|
315
|
+
.filter((name) => name.endsWith(".json"))
|
|
316
|
+
.map((name) => join(dir, name))
|
|
317
|
+
.sort((a, b) => b.localeCompare(a))
|
|
318
|
+
.slice(0, limit);
|
|
319
|
+
for (const metaPath of metaPaths) {
|
|
320
|
+
const meta = loadMeta(metaPath);
|
|
321
|
+
if (!meta)
|
|
322
|
+
continue;
|
|
323
|
+
const record = toRecord(meta, metaPath);
|
|
324
|
+
if (record.status === "running") {
|
|
325
|
+
result.skippedRunning += 1;
|
|
326
|
+
continue;
|
|
327
|
+
}
|
|
328
|
+
const createdAtMs = Date.parse(record.createdAt);
|
|
329
|
+
if (Number.isFinite(createdAtMs) && now - createdAtMs < thresholdMs) {
|
|
330
|
+
result.skippedRecent += 1;
|
|
331
|
+
continue;
|
|
332
|
+
}
|
|
333
|
+
const filesToDelete = [record.metaPath, record.logPath, record.finishedAtPath, record.exitCodePath];
|
|
334
|
+
for (const filePath of filesToDelete) {
|
|
335
|
+
try {
|
|
336
|
+
rmSync(filePath, { force: true });
|
|
337
|
+
}
|
|
338
|
+
catch {
|
|
339
|
+
// Ignore cleanup errors for best-effort pruning.
|
|
340
|
+
}
|
|
341
|
+
}
|
|
342
|
+
result.removed += 1;
|
|
343
|
+
result.removedIds.push(record.id);
|
|
344
|
+
}
|
|
345
|
+
return result;
|
|
346
|
+
}
|
|
241
347
|
//# sourceMappingURL=background-processes.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"background-processes.js","sourceRoot":"","sources":["../../src/core/background-processes.ts"],"names":[],"mappings":"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","sourcesContent":["import { randomBytes } from \"node:crypto\";\nimport {\n\tcloseSync,\n\texistsSync,\n\tfstatSync,\n\tmkdirSync,\n\topenSync,\n\treadFileSync,\n\treadSync,\n\treaddirSync,\n\tstatSync,\n\twriteFileSync,\n} from \"node:fs\";\nimport { join, resolve } from \"node:path\";\nimport { spawn } from \"child_process\";\nimport { getShellConfig, getShellEnv, killProcessTree } from \"../utils/shell.js\";\n\nexport type BackgroundProcessStatus = \"running\" | \"done\" | \"error\" | \"terminated\" | \"unknown\";\n\ninterface BackgroundProcessMeta {\n\tid: string;\n\tcommand: string;\n\tcwd: string;\n\trootCwd: string;\n\tpid: number;\n\tcreatedAt: string;\n\tstartedAt: string;\n\tsource?: \"interactive\" | \"tool\";\n\trequestedStopAt?: string;\n\tlogPath: string;\n\tfinishedAtPath: string;\n\texitCodePath: string;\n}\n\nexport interface BackgroundProcessRecord {\n\tid: string;\n\tcommand: string;\n\tcwd: string;\n\trootCwd: string;\n\tpid: number;\n\tcreatedAt: string;\n\tstartedAt: string;\n\tsource?: \"interactive\" | \"tool\";\n\trequestedStopAt?: string;\n\tlogPath: string;\n\tfinishedAtPath: string;\n\texitCodePath: string;\n\tmetaPath: string;\n\tstatus: BackgroundProcessStatus;\n\tfinishedAt?: string;\n\texitCode?: number;\n}\n\nexport interface StartBackgroundProcessInput {\n\trootCwd: string;\n\tcommand: string;\n\tcwd?: string;\n\tsource?: \"interactive\" | \"tool\";\n}\n\nconst BACKGROUND_DIR_SEGMENTS = [\".iosm\", \"background\", \"processes\"] as const;\nconst MAX_LOG_TAIL_BYTES = 256 * 1024;\n\nfunction getProcessesDir(rootCwd: string): string {\n\treturn join(rootCwd, ...BACKGROUND_DIR_SEGMENTS);\n}\n\nfunction shellQuote(value: string): string {\n\treturn `'${value.replace(/'/g, `'\\\"'\\\"'`)}'`;\n}\n\nfunction isProcessAlive(pid: number): boolean {\n\ttry {\n\t\tprocess.kill(pid, 0);\n\t\treturn true;\n\t} catch (error) {\n\t\tif ((error as NodeJS.ErrnoException | undefined)?.code === \"EPERM\") return true;\n\t\treturn false;\n\t}\n}\n\nfunction parseIntegerFile(path: string): number | undefined {\n\tif (!existsSync(path)) return undefined;\n\ttry {\n\t\tconst raw = readFileSync(path, \"utf8\").trim();\n\t\tif (!raw) return undefined;\n\t\tconst value = Number.parseInt(raw, 10);\n\t\treturn Number.isFinite(value) ? value : undefined;\n\t} catch {\n\t\treturn undefined;\n\t}\n}\n\nfunction parseTextFile(path: string): string | undefined {\n\tif (!existsSync(path)) return undefined;\n\ttry {\n\t\tconst raw = readFileSync(path, \"utf8\").trim();\n\t\treturn raw || undefined;\n\t} catch {\n\t\treturn undefined;\n\t}\n}\n\nfunction toRecord(meta: BackgroundProcessMeta, metaPath: string): BackgroundProcessRecord {\n\tconst finishedAt = parseTextFile(meta.finishedAtPath);\n\tconst exitCode = parseIntegerFile(meta.exitCodePath);\n\tconst alive = isProcessAlive(meta.pid);\n\tlet status: BackgroundProcessStatus = \"unknown\";\n\tif (finishedAt && typeof exitCode === \"number\") {\n\t\tstatus = exitCode === 0 ? \"done\" : \"error\";\n\t} else if (meta.requestedStopAt && !alive) {\n\t\tstatus = \"terminated\";\n\t} else if (alive) {\n\t\tstatus = \"running\";\n\t}\n\n\treturn {\n\t\tid: meta.id,\n\t\tcommand: meta.command,\n\t\tcwd: meta.cwd,\n\t\trootCwd: meta.rootCwd,\n\t\tpid: meta.pid,\n\t\tcreatedAt: meta.createdAt,\n\t\tstartedAt: meta.startedAt,\n\t\tsource: meta.source,\n\t\trequestedStopAt: meta.requestedStopAt,\n\t\tlogPath: meta.logPath,\n\t\tfinishedAtPath: meta.finishedAtPath,\n\t\texitCodePath: meta.exitCodePath,\n\t\tmetaPath,\n\t\tstatus,\n\t\tfinishedAt,\n\t\texitCode,\n\t};\n}\n\nfunction loadMeta(metaPath: string): BackgroundProcessMeta | undefined {\n\ttry {\n\t\tconst parsed = JSON.parse(readFileSync(metaPath, \"utf8\")) as Partial<BackgroundProcessMeta>;\n\t\tif (\n\t\t\ttypeof parsed.id !== \"string\" ||\n\t\t\ttypeof parsed.command !== \"string\" ||\n\t\t\ttypeof parsed.cwd !== \"string\" ||\n\t\t\ttypeof parsed.rootCwd !== \"string\" ||\n\t\t\ttypeof parsed.pid !== \"number\" ||\n\t\t\ttypeof parsed.createdAt !== \"string\" ||\n\t\t\ttypeof parsed.startedAt !== \"string\" ||\n\t\t\ttypeof parsed.logPath !== \"string\" ||\n\t\t\ttypeof parsed.finishedAtPath !== \"string\" ||\n\t\t\ttypeof parsed.exitCodePath !== \"string\"\n\t\t) {\n\t\t\treturn undefined;\n\t\t}\n\t\treturn {\n\t\t\tid: parsed.id,\n\t\t\tcommand: parsed.command,\n\t\t\tcwd: parsed.cwd,\n\t\t\trootCwd: parsed.rootCwd,\n\t\t\tpid: parsed.pid,\n\t\t\tcreatedAt: parsed.createdAt,\n\t\t\tstartedAt: parsed.startedAt,\n\t\t\tsource: parsed.source,\n\t\t\trequestedStopAt: parsed.requestedStopAt,\n\t\t\tlogPath: parsed.logPath,\n\t\t\tfinishedAtPath: parsed.finishedAtPath,\n\t\t\texitCodePath: parsed.exitCodePath,\n\t\t};\n\t} catch {\n\t\treturn undefined;\n\t}\n}\n\nfunction saveMeta(metaPath: string, meta: BackgroundProcessMeta): void {\n\twriteFileSync(metaPath, `${JSON.stringify(meta, null, 2)}\\n`, \"utf8\");\n}\n\nfunction readFileTailUtf8(path: string, maxBytes: number): string {\n\tif (!existsSync(path)) return \"\";\n\tconst fd = openSync(path, \"r\");\n\ttry {\n\t\tconst size = fstatSync(fd).size;\n\t\tif (size <= 0) return \"\";\n\t\tconst readSize = Math.min(size, maxBytes);\n\t\tconst buffer = Buffer.alloc(readSize);\n\t\treadSync(fd, buffer, 0, readSize, size - readSize);\n\t\treturn buffer.toString(\"utf8\");\n\t} finally {\n\t\tcloseSync(fd);\n\t}\n}\n\nexport function startBackgroundProcess(input: StartBackgroundProcessInput): BackgroundProcessRecord {\n\tconst rootCwd = resolve(input.rootCwd);\n\tconst processCwd = resolve(input.cwd ?? rootCwd);\n\tif (!existsSync(processCwd) || !statSync(processCwd).isDirectory()) {\n\t\tthrow new Error(`Background process cwd does not exist: ${processCwd}`);\n\t}\n\n\tconst processesDir = getProcessesDir(rootCwd);\n\tmkdirSync(processesDir, { recursive: true });\n\n\tconst id = `bg_${Date.now()}_${randomBytes(4).toString(\"hex\")}`;\n\tconst logPath = join(processesDir, `${id}.log`);\n\tconst finishedAtPath = join(processesDir, `${id}.finished`);\n\tconst exitCodePath = join(processesDir, `${id}.exitcode`);\n\tconst metaPath = join(processesDir, `${id}.json`);\n\tconst now = new Date().toISOString();\n\n\tconst { shell, args } = getShellConfig();\n\tconst wrappedCommand = [\n\t\tinput.command,\n\t\t\"__iosm_bg_exit_code=$?\",\n\t\t`__iosm_bg_finished_at=$(date -u +%Y-%m-%dT%H:%M:%SZ 2>/dev/null || node -e 'console.log(new Date().toISOString())')`,\n\t\t`printf \"%s\\\\n\" \"$__iosm_bg_finished_at\" > ${shellQuote(finishedAtPath)}`,\n\t\t`printf \"%s\\\\n\" \"$__iosm_bg_exit_code\" > ${shellQuote(exitCodePath)}`,\n\t].join(\"\\n\");\n\n\tconst logFd = openSync(logPath, \"a\");\n\tconst child = spawn(shell, [...args, wrappedCommand], {\n\t\tcwd: processCwd,\n\t\tdetached: true,\n\t\tenv: getShellEnv(),\n\t\tstdio: [\"ignore\", logFd, logFd],\n\t});\n\tcloseSync(logFd);\n\n\tif (!child.pid) {\n\t\tthrow new Error(\"Failed to start background process: missing pid.\");\n\t}\n\n\tchild.unref();\n\n\tconst meta: BackgroundProcessMeta = {\n\t\tid,\n\t\tcommand: input.command,\n\t\tcwd: processCwd,\n\t\trootCwd,\n\t\tpid: child.pid,\n\t\tcreatedAt: now,\n\t\tstartedAt: now,\n\t\tsource: input.source,\n\t\tlogPath,\n\t\tfinishedAtPath,\n\t\texitCodePath,\n\t};\n\tsaveMeta(metaPath, meta);\n\treturn toRecord(meta, metaPath);\n}\n\nexport function listBackgroundProcesses(rootCwd: string, limit = 20): BackgroundProcessRecord[] {\n\tconst dir = getProcessesDir(resolve(rootCwd));\n\tif (!existsSync(dir)) return [];\n\tconst maxItems = Math.max(1, Math.min(200, Math.floor(limit)));\n\tconst files = readdirSync(dir)\n\t\t.filter((name) => name.endsWith(\".json\"))\n\t\t.map((name) => join(dir, name))\n\t\t.sort((a, b) => b.localeCompare(a))\n\t\t.slice(0, maxItems);\n\n\tconst records: BackgroundProcessRecord[] = [];\n\tfor (const metaPath of files) {\n\t\tconst meta = loadMeta(metaPath);\n\t\tif (!meta) continue;\n\t\trecords.push(toRecord(meta, metaPath));\n\t}\n\treturn records;\n}\n\nexport function getBackgroundProcess(rootCwd: string, id: string): BackgroundProcessRecord | undefined {\n\tconst dir = getProcessesDir(resolve(rootCwd));\n\tconst metaPath = join(dir, `${id}.json`);\n\tif (!existsSync(metaPath)) return undefined;\n\tconst meta = loadMeta(metaPath);\n\tif (!meta) return undefined;\n\treturn toRecord(meta, metaPath);\n}\n\nexport function stopBackgroundProcess(rootCwd: string, id: string): BackgroundProcessRecord | undefined {\n\tconst dir = getProcessesDir(resolve(rootCwd));\n\tconst metaPath = join(dir, `${id}.json`);\n\tconst meta = loadMeta(metaPath);\n\tif (!meta) return undefined;\n\n\tif (isProcessAlive(meta.pid)) {\n\t\tkillProcessTree(meta.pid);\n\t\tmeta.requestedStopAt = new Date().toISOString();\n\t\tsaveMeta(metaPath, meta);\n\t}\n\n\treturn toRecord(meta, metaPath);\n}\n\nexport function readBackgroundProcessLogTail(rootCwd: string, id: string, lines = 80): string | undefined {\n\tconst record = getBackgroundProcess(rootCwd, id);\n\tif (!record) return undefined;\n\tconst maxLines = Math.max(1, Math.min(1000, Math.floor(lines)));\n\tconst tail = readFileTailUtf8(record.logPath, MAX_LOG_TAIL_BYTES);\n\tif (!tail) return \"\";\n\tconst chunks = tail.split(/\\r?\\n/);\n\tconst sliced = chunks.slice(-maxLines);\n\treturn sliced.join(\"\\n\").trimEnd();\n}\n\n"]}
|
|
1
|
+
{"version":3,"file":"background-processes.js","sourceRoot":"","sources":["../../src/core/background-processes.ts"],"names":[],"mappings":"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","sourcesContent":["import { randomBytes } from \"node:crypto\";\nimport {\n\tcloseSync,\n\texistsSync,\n\tfstatSync,\n\tmkdirSync,\n\topenSync,\n\treadFileSync,\n\treadSync,\n\treaddirSync,\n\trmSync,\n\tstatSync,\n\twriteFileSync,\n} from \"node:fs\";\nimport { join, resolve } from \"node:path\";\nimport { spawn, spawnSync } from \"child_process\";\nimport { getShellConfig, getShellEnv, killProcessTree } from \"../utils/shell.js\";\n\nexport type BackgroundProcessStatus = \"running\" | \"done\" | \"error\" | \"terminated\" | \"unknown\";\n\ninterface BackgroundProcessMeta {\n\tid: string;\n\tcommand: string;\n\tcwd: string;\n\trootCwd: string;\n\tpid: number;\n\tcreatedAt: string;\n\tstartedAt: string;\n\tsource?: \"interactive\" | \"tool\";\n\trequestedStopAt?: string;\n\tlogPath: string;\n\tfinishedAtPath: string;\n\texitCodePath: string;\n}\n\nexport interface BackgroundProcessRecord {\n\tid: string;\n\tcommand: string;\n\tcwd: string;\n\trootCwd: string;\n\tpid: number;\n\tcreatedAt: string;\n\tstartedAt: string;\n\tsource?: \"interactive\" | \"tool\";\n\trequestedStopAt?: string;\n\tlogPath: string;\n\tfinishedAtPath: string;\n\texitCodePath: string;\n\tmetaPath: string;\n\tstatus: BackgroundProcessStatus;\n\tfinishedAt?: string;\n\texitCode?: number;\n}\n\nexport interface StartBackgroundProcessInput {\n\trootCwd: string;\n\tcommand: string;\n\tcwd?: string;\n\tsource?: \"interactive\" | \"tool\";\n}\n\nexport interface PruneBackgroundProcessesResult {\n\tremoved: number;\n\tremovedIds: string[];\n\tskippedRunning: number;\n\tskippedRecent: number;\n\tthresholdHours: number;\n}\n\nconst BACKGROUND_DIR_SEGMENTS = [\".iosm\", \"background\", \"processes\"] as const;\nconst MAX_LOG_TAIL_BYTES = 256 * 1024;\nconst BACKGROUND_STOP_FORCE_KILL_DELAY_MS = 1500;\nconst BACKGROUND_STOP_FALLBACK_EXIT_CODE = 143;\n\nfunction getProcessesDir(rootCwd: string): string {\n\treturn join(rootCwd, ...BACKGROUND_DIR_SEGMENTS);\n}\n\nfunction shellQuote(value: string): string {\n\treturn `'${value.replace(/'/g, `'\\\"'\\\"'`)}'`;\n}\n\nfunction isProcessAlive(pid: number): boolean {\n\ttry {\n\t\tprocess.kill(pid, 0);\n\t\treturn true;\n\t} catch (error) {\n\t\tif ((error as NodeJS.ErrnoException | undefined)?.code === \"EPERM\") return true;\n\t\treturn false;\n\t}\n}\n\nfunction parseIntegerFile(path: string): number | undefined {\n\tif (!existsSync(path)) return undefined;\n\ttry {\n\t\tconst raw = readFileSync(path, \"utf8\").trim();\n\t\tif (!raw) return undefined;\n\t\tconst value = Number.parseInt(raw, 10);\n\t\treturn Number.isFinite(value) ? value : undefined;\n\t} catch {\n\t\treturn undefined;\n\t}\n}\n\nfunction parseTextFile(path: string): string | undefined {\n\tif (!existsSync(path)) return undefined;\n\ttry {\n\t\tconst raw = readFileSync(path, \"utf8\").trim();\n\t\treturn raw || undefined;\n\t} catch {\n\t\treturn undefined;\n\t}\n}\n\nfunction writeCompletionArtifacts(meta: BackgroundProcessMeta, finishedAt: string, exitCode: number): void {\n\twriteFileSync(meta.finishedAtPath, `${finishedAt}\\n`, \"utf8\");\n\twriteFileSync(meta.exitCodePath, `${exitCode}\\n`, \"utf8\");\n}\n\nfunction signalProcessTree(pid: number, signal: \"SIGTERM\" | \"SIGKILL\"): void {\n\tif (process.platform === \"win32\") {\n\t\t// /F is forced kill; omit it for soft terminate attempt.\n\t\tconst args = signal === \"SIGKILL\" ? [\"/F\", \"/T\", \"/PID\", String(pid)] : [\"/T\", \"/PID\", String(pid)];\n\t\ttry {\n\t\t\tspawnSync(\"taskkill\", args, { stdio: \"ignore\", timeout: 5000 });\n\t\t} catch {\n\t\t\t// Ignore termination errors (process may already be gone).\n\t\t}\n\t\treturn;\n\t}\n\n\ttry {\n\t\tprocess.kill(-pid, signal);\n\t} catch {\n\t\ttry {\n\t\t\tprocess.kill(pid, signal);\n\t\t} catch {\n\t\t\t// Process already dead.\n\t\t}\n\t}\n}\n\nfunction scheduleForceKill(pid: number): void {\n\tconst timer = setTimeout(() => {\n\t\tif (!isProcessAlive(pid)) return;\n\t\tkillProcessTree(pid);\n\t}, BACKGROUND_STOP_FORCE_KILL_DELAY_MS);\n\ttimer.unref();\n}\n\nfunction toRecord(meta: BackgroundProcessMeta, metaPath: string): BackgroundProcessRecord {\n\tconst finishedAt = parseTextFile(meta.finishedAtPath);\n\tconst exitCode = parseIntegerFile(meta.exitCodePath);\n\tconst alive = isProcessAlive(meta.pid);\n\tlet status: BackgroundProcessStatus = \"unknown\";\n\tif (!alive && meta.requestedStopAt) {\n\t\tstatus = \"terminated\";\n\t} else if (alive) {\n\t\tstatus = \"running\";\n\t} else if (finishedAt && typeof exitCode === \"number\") {\n\t\tstatus = exitCode === 0 ? \"done\" : \"error\";\n\t}\n\n\treturn {\n\t\tid: meta.id,\n\t\tcommand: meta.command,\n\t\tcwd: meta.cwd,\n\t\trootCwd: meta.rootCwd,\n\t\tpid: meta.pid,\n\t\tcreatedAt: meta.createdAt,\n\t\tstartedAt: meta.startedAt,\n\t\tsource: meta.source,\n\t\trequestedStopAt: meta.requestedStopAt,\n\t\tlogPath: meta.logPath,\n\t\tfinishedAtPath: meta.finishedAtPath,\n\t\texitCodePath: meta.exitCodePath,\n\t\tmetaPath,\n\t\tstatus,\n\t\tfinishedAt,\n\t\texitCode,\n\t};\n}\n\nfunction loadMeta(metaPath: string): BackgroundProcessMeta | undefined {\n\ttry {\n\t\tconst parsed = JSON.parse(readFileSync(metaPath, \"utf8\")) as Partial<BackgroundProcessMeta>;\n\t\tif (\n\t\t\ttypeof parsed.id !== \"string\" ||\n\t\t\ttypeof parsed.command !== \"string\" ||\n\t\t\ttypeof parsed.cwd !== \"string\" ||\n\t\t\ttypeof parsed.rootCwd !== \"string\" ||\n\t\t\ttypeof parsed.pid !== \"number\" ||\n\t\t\ttypeof parsed.createdAt !== \"string\" ||\n\t\t\ttypeof parsed.startedAt !== \"string\" ||\n\t\t\ttypeof parsed.logPath !== \"string\" ||\n\t\t\ttypeof parsed.finishedAtPath !== \"string\" ||\n\t\t\ttypeof parsed.exitCodePath !== \"string\"\n\t\t) {\n\t\t\treturn undefined;\n\t\t}\n\t\treturn {\n\t\t\tid: parsed.id,\n\t\t\tcommand: parsed.command,\n\t\t\tcwd: parsed.cwd,\n\t\t\trootCwd: parsed.rootCwd,\n\t\t\tpid: parsed.pid,\n\t\t\tcreatedAt: parsed.createdAt,\n\t\t\tstartedAt: parsed.startedAt,\n\t\t\tsource: parsed.source,\n\t\t\trequestedStopAt: parsed.requestedStopAt,\n\t\t\tlogPath: parsed.logPath,\n\t\t\tfinishedAtPath: parsed.finishedAtPath,\n\t\t\texitCodePath: parsed.exitCodePath,\n\t\t};\n\t} catch {\n\t\treturn undefined;\n\t}\n}\n\nfunction saveMeta(metaPath: string, meta: BackgroundProcessMeta): void {\n\twriteFileSync(metaPath, `${JSON.stringify(meta, null, 2)}\\n`, \"utf8\");\n}\n\nfunction readFileTailUtf8(path: string, maxBytes: number): string {\n\tif (!existsSync(path)) return \"\";\n\tconst fd = openSync(path, \"r\");\n\ttry {\n\t\tconst size = fstatSync(fd).size;\n\t\tif (size <= 0) return \"\";\n\t\tconst readSize = Math.min(size, maxBytes);\n\t\tconst buffer = Buffer.alloc(readSize);\n\t\treadSync(fd, buffer, 0, readSize, size - readSize);\n\t\treturn buffer.toString(\"utf8\");\n\t} finally {\n\t\tcloseSync(fd);\n\t}\n}\n\nexport function startBackgroundProcess(input: StartBackgroundProcessInput): BackgroundProcessRecord {\n\tconst rootCwd = resolve(input.rootCwd);\n\tconst processCwd = resolve(input.cwd ?? rootCwd);\n\tif (!existsSync(processCwd) || !statSync(processCwd).isDirectory()) {\n\t\tthrow new Error(`Background process cwd does not exist: ${processCwd}`);\n\t}\n\n\tconst processesDir = getProcessesDir(rootCwd);\n\tmkdirSync(processesDir, { recursive: true });\n\n\tconst id = `bg_${Date.now()}_${randomBytes(4).toString(\"hex\")}`;\n\tconst logPath = join(processesDir, `${id}.log`);\n\tconst finishedAtPath = join(processesDir, `${id}.finished`);\n\tconst exitCodePath = join(processesDir, `${id}.exitcode`);\n\tconst metaPath = join(processesDir, `${id}.json`);\n\tconst now = new Date().toISOString();\n\n\tconst { shell, args } = getShellConfig();\n\tconst wrappedCommand = [\n\t\t\"(\",\n\t\tinput.command,\n\t\t\")\",\n\t\t\"__iosm_bg_exit_code=$?\",\n\t\t`__iosm_bg_finished_at=$(date -u +%Y-%m-%dT%H:%M:%SZ 2>/dev/null || node -e 'console.log(new Date().toISOString())')`,\n\t\t`printf \"%s\\\\n\" \"$__iosm_bg_finished_at\" > ${shellQuote(finishedAtPath)}`,\n\t\t`printf \"%s\\\\n\" \"$__iosm_bg_exit_code\" > ${shellQuote(exitCodePath)}`,\n\t\t'exit \"$__iosm_bg_exit_code\"',\n\t].join(\"\\n\");\n\n\tconst logFd = openSync(logPath, \"a\");\n\tconst child = spawn(shell, [...args, wrappedCommand], {\n\t\tcwd: processCwd,\n\t\tdetached: true,\n\t\tenv: getShellEnv(),\n\t\tstdio: [\"ignore\", logFd, logFd],\n\t});\n\tcloseSync(logFd);\n\n\tif (!child.pid) {\n\t\tthrow new Error(\"Failed to start background process: missing pid.\");\n\t}\n\n\tchild.unref();\n\n\tconst meta: BackgroundProcessMeta = {\n\t\tid,\n\t\tcommand: input.command,\n\t\tcwd: processCwd,\n\t\trootCwd,\n\t\tpid: child.pid,\n\t\tcreatedAt: now,\n\t\tstartedAt: now,\n\t\tsource: input.source,\n\t\tlogPath,\n\t\tfinishedAtPath,\n\t\texitCodePath,\n\t};\n\tsaveMeta(metaPath, meta);\n\treturn toRecord(meta, metaPath);\n}\n\nexport function listBackgroundProcesses(rootCwd: string, limit = 20): BackgroundProcessRecord[] {\n\tconst dir = getProcessesDir(resolve(rootCwd));\n\tif (!existsSync(dir)) return [];\n\tconst maxItems = Math.max(1, Math.min(200, Math.floor(limit)));\n\tconst files = readdirSync(dir)\n\t\t.filter((name) => name.endsWith(\".json\"))\n\t\t.map((name) => join(dir, name))\n\t\t.sort((a, b) => b.localeCompare(a))\n\t\t.slice(0, maxItems);\n\n\tconst records: BackgroundProcessRecord[] = [];\n\tfor (const metaPath of files) {\n\t\tconst meta = loadMeta(metaPath);\n\t\tif (!meta) continue;\n\t\trecords.push(toRecord(meta, metaPath));\n\t}\n\treturn records;\n}\n\nexport function getBackgroundProcess(rootCwd: string, id: string): BackgroundProcessRecord | undefined {\n\tconst dir = getProcessesDir(resolve(rootCwd));\n\tconst metaPath = join(dir, `${id}.json`);\n\tif (!existsSync(metaPath)) return undefined;\n\tconst meta = loadMeta(metaPath);\n\tif (!meta) return undefined;\n\treturn toRecord(meta, metaPath);\n}\n\nexport function stopBackgroundProcess(rootCwd: string, id: string): BackgroundProcessRecord | undefined {\n\tconst dir = getProcessesDir(resolve(rootCwd));\n\tconst metaPath = join(dir, `${id}.json`);\n\tconst meta = loadMeta(metaPath);\n\tif (!meta) return undefined;\n\n\tconst wasAlive = isProcessAlive(meta.pid);\n\tif (!wasAlive) {\n\t\treturn toRecord(meta, metaPath);\n\t}\n\n\tmeta.requestedStopAt = new Date().toISOString();\n\tsaveMeta(metaPath, meta);\n\n\t// Try graceful shutdown first and then enforce a hard kill in the background if needed.\n\tsignalProcessTree(meta.pid, \"SIGTERM\");\n\tscheduleForceKill(meta.pid);\n\n\tif (isProcessAlive(meta.pid)) {\n\t\treturn toRecord(meta, metaPath);\n\t}\n\n\t// Process already stopped synchronously; write fallback completion markers if shell did not flush them.\n\tconst hasFinishedAt = existsSync(meta.finishedAtPath);\n\tconst hasExitCode = existsSync(meta.exitCodePath);\n\tif (!hasFinishedAt || !hasExitCode) {\n\t\twriteCompletionArtifacts(meta, new Date().toISOString(), BACKGROUND_STOP_FALLBACK_EXIT_CODE);\n\t}\n\n\treturn toRecord(meta, metaPath);\n}\n\nexport function readBackgroundProcessLogTail(rootCwd: string, id: string, lines = 80): string | undefined {\n\tconst record = getBackgroundProcess(rootCwd, id);\n\tif (!record) return undefined;\n\tconst maxLines = Math.max(1, Math.min(1000, Math.floor(lines)));\n\tconst tail = readFileTailUtf8(record.logPath, MAX_LOG_TAIL_BYTES);\n\tif (!tail) return \"\";\n\tconst chunks = tail.split(/\\r?\\n/);\n\tconst sliced = chunks.slice(-maxLines);\n\treturn sliced.join(\"\\n\").trimEnd();\n}\n\nexport function pruneBackgroundProcesses(\n\trootCwd: string,\n\toptions?: {\n\t\tmaxAgeHours?: number;\n\t\tlimit?: number;\n\t},\n): PruneBackgroundProcessesResult {\n\tconst thresholdHoursRaw = options?.maxAgeHours;\n\tconst thresholdHours =\n\t\ttypeof thresholdHoursRaw === \"number\" && Number.isFinite(thresholdHoursRaw)\n\t\t\t? Math.max(1, Math.floor(thresholdHoursRaw))\n\t\t\t: 168;\n\tconst limitRaw = options?.limit;\n\tconst limit = typeof limitRaw === \"number\" && Number.isFinite(limitRaw) ? Math.max(1, Math.floor(limitRaw)) : 1000;\n\tconst thresholdMs = thresholdHours * 60 * 60 * 1000;\n\tconst now = Date.now();\n\tconst result: PruneBackgroundProcessesResult = {\n\t\tremoved: 0,\n\t\tremovedIds: [],\n\t\tskippedRunning: 0,\n\t\tskippedRecent: 0,\n\t\tthresholdHours,\n\t};\n\n\tconst dir = getProcessesDir(resolve(rootCwd));\n\tif (!existsSync(dir)) return result;\n\n\tconst metaPaths = readdirSync(dir)\n\t\t.filter((name) => name.endsWith(\".json\"))\n\t\t.map((name) => join(dir, name))\n\t\t.sort((a, b) => b.localeCompare(a))\n\t\t.slice(0, limit);\n\n\tfor (const metaPath of metaPaths) {\n\t\tconst meta = loadMeta(metaPath);\n\t\tif (!meta) continue;\n\t\tconst record = toRecord(meta, metaPath);\n\t\tif (record.status === \"running\") {\n\t\t\tresult.skippedRunning += 1;\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst createdAtMs = Date.parse(record.createdAt);\n\t\tif (Number.isFinite(createdAtMs) && now - createdAtMs < thresholdMs) {\n\t\t\tresult.skippedRecent += 1;\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst filesToDelete = [record.metaPath, record.logPath, record.finishedAtPath, record.exitCodePath];\n\t\tfor (const filePath of filesToDelete) {\n\t\t\ttry {\n\t\t\t\trmSync(filePath, { force: true });\n\t\t\t} catch {\n\t\t\t\t// Ignore cleanup errors for best-effort pruning.\n\t\t\t}\n\t\t}\n\t\tresult.removed += 1;\n\t\tresult.removedIds.push(record.id);\n\t}\n\n\treturn result;\n}\n"]}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { ProviderConfigInput } from "./model-registry.js";
|
|
2
|
+
interface OpenRouterModelCatalogOptions {
|
|
3
|
+
apiKey?: string;
|
|
4
|
+
timeoutMs?: number;
|
|
5
|
+
fetchImpl?: typeof fetch;
|
|
6
|
+
}
|
|
7
|
+
export declare function loadOpenRouterProviderConfig(options?: OpenRouterModelCatalogOptions): Promise<ProviderConfigInput | undefined>;
|
|
8
|
+
export {};
|
|
9
|
+
//# sourceMappingURL=openrouter-model-catalog.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openrouter-model-catalog.d.ts","sourceRoot":"","sources":["../../src/core/openrouter-model-catalog.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAQ/D,UAAU,6BAA6B;IACtC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;CACzB;AAwHD,wBAAsB,4BAA4B,CACjD,OAAO,GAAE,6BAAkC,GACzC,OAAO,CAAC,mBAAmB,GAAG,SAAS,CAAC,CA+B1C"}
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
const OPENROUTER_BASE_URL = "https://openrouter.ai/api/v1";
|
|
2
|
+
const OPENROUTER_MODELS_URL = `${OPENROUTER_BASE_URL}/models`;
|
|
3
|
+
const OPENROUTER_USER_MODELS_URL = `${OPENROUTER_MODELS_URL}/user`;
|
|
4
|
+
const DEFAULT_TIMEOUT_MS = 12_000;
|
|
5
|
+
const TOKENS_PER_MILLION = 1_000_000;
|
|
6
|
+
function isRecord(value) {
|
|
7
|
+
return typeof value === "object" && value !== null;
|
|
8
|
+
}
|
|
9
|
+
function toFiniteNumber(value, fallback) {
|
|
10
|
+
if (typeof value === "number" && Number.isFinite(value))
|
|
11
|
+
return value;
|
|
12
|
+
if (typeof value === "string") {
|
|
13
|
+
const parsed = Number.parseFloat(value);
|
|
14
|
+
if (Number.isFinite(parsed))
|
|
15
|
+
return parsed;
|
|
16
|
+
}
|
|
17
|
+
return fallback;
|
|
18
|
+
}
|
|
19
|
+
function tokenPriceToPerMillion(value, fallback) {
|
|
20
|
+
const perToken = toFiniteNumber(value, Number.NaN);
|
|
21
|
+
if (!Number.isFinite(perToken))
|
|
22
|
+
return fallback;
|
|
23
|
+
return perToken * TOKENS_PER_MILLION;
|
|
24
|
+
}
|
|
25
|
+
function toNonEmptyString(value) {
|
|
26
|
+
if (typeof value !== "string")
|
|
27
|
+
return undefined;
|
|
28
|
+
const trimmed = value.trim();
|
|
29
|
+
return trimmed.length > 0 ? trimmed : undefined;
|
|
30
|
+
}
|
|
31
|
+
function includesImageInput(architecture) {
|
|
32
|
+
if (!architecture)
|
|
33
|
+
return false;
|
|
34
|
+
const inputModalities = Array.isArray(architecture.input_modalities)
|
|
35
|
+
? architecture.input_modalities.filter((value) => typeof value === "string")
|
|
36
|
+
: [];
|
|
37
|
+
if (inputModalities.some((modality) => modality.toLowerCase().includes("image"))) {
|
|
38
|
+
return true;
|
|
39
|
+
}
|
|
40
|
+
const modality = toNonEmptyString(architecture.modality)?.toLowerCase() ?? "";
|
|
41
|
+
return modality.includes("image");
|
|
42
|
+
}
|
|
43
|
+
function supportsReasoning(row) {
|
|
44
|
+
const params = Array.isArray(row.supported_parameters)
|
|
45
|
+
? row.supported_parameters.filter((value) => typeof value === "string")
|
|
46
|
+
: [];
|
|
47
|
+
return params.some((param) => param.toLowerCase().includes("reason"));
|
|
48
|
+
}
|
|
49
|
+
function normalizeModelRecord(row) {
|
|
50
|
+
const id = toNonEmptyString(row.id);
|
|
51
|
+
if (!id)
|
|
52
|
+
return undefined;
|
|
53
|
+
const architecture = isRecord(row.architecture) ? row.architecture : undefined;
|
|
54
|
+
const pricing = isRecord(row.pricing) ? row.pricing : undefined;
|
|
55
|
+
const topProvider = isRecord(row.top_provider) ? row.top_provider : undefined;
|
|
56
|
+
const input = includesImageInput(architecture) ? ["text", "image"] : ["text"];
|
|
57
|
+
const contextWindow = toFiniteNumber(row.context_length, toFiniteNumber(topProvider?.context_length, 128000));
|
|
58
|
+
const maxTokens = toFiniteNumber(topProvider?.max_completion_tokens, 16384);
|
|
59
|
+
return {
|
|
60
|
+
id,
|
|
61
|
+
name: toNonEmptyString(row.name) ?? id,
|
|
62
|
+
api: "openai-completions",
|
|
63
|
+
reasoning: supportsReasoning(row),
|
|
64
|
+
input: [...input],
|
|
65
|
+
cost: {
|
|
66
|
+
input: tokenPriceToPerMillion(pricing?.prompt, 0),
|
|
67
|
+
output: tokenPriceToPerMillion(pricing?.completion, 0),
|
|
68
|
+
cacheRead: tokenPriceToPerMillion(pricing?.input_cache_read, 0),
|
|
69
|
+
cacheWrite: tokenPriceToPerMillion(pricing?.input_cache_write, 0),
|
|
70
|
+
},
|
|
71
|
+
contextWindow,
|
|
72
|
+
maxTokens,
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
function normalizeModels(payload) {
|
|
76
|
+
if (!isRecord(payload) || !Array.isArray(payload.data))
|
|
77
|
+
return [];
|
|
78
|
+
const seen = new Set();
|
|
79
|
+
const models = [];
|
|
80
|
+
for (const row of payload.data) {
|
|
81
|
+
if (!isRecord(row))
|
|
82
|
+
continue;
|
|
83
|
+
const model = normalizeModelRecord(row);
|
|
84
|
+
if (!model || seen.has(model.id))
|
|
85
|
+
continue;
|
|
86
|
+
seen.add(model.id);
|
|
87
|
+
models.push(model);
|
|
88
|
+
}
|
|
89
|
+
models.sort((a, b) => a.name.localeCompare(b.name, "en") || a.id.localeCompare(b.id, "en"));
|
|
90
|
+
return models;
|
|
91
|
+
}
|
|
92
|
+
async function requestCatalog(url, options) {
|
|
93
|
+
try {
|
|
94
|
+
const response = await options.fetchImpl(url, {
|
|
95
|
+
method: "GET",
|
|
96
|
+
headers: options.headers,
|
|
97
|
+
signal: AbortSignal.timeout(options.timeoutMs),
|
|
98
|
+
});
|
|
99
|
+
if (!response.ok)
|
|
100
|
+
return undefined;
|
|
101
|
+
const payload = (await response.json());
|
|
102
|
+
const models = normalizeModels(payload);
|
|
103
|
+
return models.length > 0 ? models : undefined;
|
|
104
|
+
}
|
|
105
|
+
catch {
|
|
106
|
+
return undefined;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
export async function loadOpenRouterProviderConfig(options = {}) {
|
|
110
|
+
const timeoutMs = Math.max(1_000, options.timeoutMs ?? DEFAULT_TIMEOUT_MS);
|
|
111
|
+
const fetchImpl = options.fetchImpl ?? globalThis.fetch;
|
|
112
|
+
if (typeof fetchImpl !== "function")
|
|
113
|
+
return undefined;
|
|
114
|
+
const apiKey = options.apiKey?.trim();
|
|
115
|
+
const headers = { Accept: "application/json" };
|
|
116
|
+
if (apiKey) {
|
|
117
|
+
headers.Authorization = `Bearer ${apiKey}`;
|
|
118
|
+
}
|
|
119
|
+
const fromUserCatalog = apiKey
|
|
120
|
+
? await requestCatalog(OPENROUTER_USER_MODELS_URL, {
|
|
121
|
+
timeoutMs,
|
|
122
|
+
headers,
|
|
123
|
+
fetchImpl,
|
|
124
|
+
})
|
|
125
|
+
: undefined;
|
|
126
|
+
const models = fromUserCatalog ??
|
|
127
|
+
(await requestCatalog(OPENROUTER_MODELS_URL, {
|
|
128
|
+
timeoutMs,
|
|
129
|
+
headers,
|
|
130
|
+
fetchImpl,
|
|
131
|
+
}));
|
|
132
|
+
if (!models || models.length === 0)
|
|
133
|
+
return undefined;
|
|
134
|
+
return {
|
|
135
|
+
baseUrl: OPENROUTER_BASE_URL,
|
|
136
|
+
models,
|
|
137
|
+
};
|
|
138
|
+
}
|
|
139
|
+
//# sourceMappingURL=openrouter-model-catalog.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openrouter-model-catalog.js","sourceRoot":"","sources":["../../src/core/openrouter-model-catalog.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Api } from \"@mariozechner/pi-ai\";\nimport type { ProviderConfigInput } from \"./model-registry.js\";\n\nconst OPENROUTER_BASE_URL = \"https://openrouter.ai/api/v1\";\nconst OPENROUTER_MODELS_URL = `${OPENROUTER_BASE_URL}/models`;\nconst OPENROUTER_USER_MODELS_URL = `${OPENROUTER_MODELS_URL}/user`;\nconst DEFAULT_TIMEOUT_MS = 12_000;\nconst TOKENS_PER_MILLION = 1_000_000;\n\ninterface OpenRouterModelCatalogOptions {\n\tapiKey?: string;\n\ttimeoutMs?: number;\n\tfetchImpl?: typeof fetch;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn typeof value === \"object\" && value !== null;\n}\n\nfunction toFiniteNumber(value: unknown, fallback: number): number {\n\tif (typeof value === \"number\" && Number.isFinite(value)) return value;\n\tif (typeof value === \"string\") {\n\t\tconst parsed = Number.parseFloat(value);\n\t\tif (Number.isFinite(parsed)) return parsed;\n\t}\n\treturn fallback;\n}\n\nfunction tokenPriceToPerMillion(value: unknown, fallback: number): number {\n\tconst perToken = toFiniteNumber(value, Number.NaN);\n\tif (!Number.isFinite(perToken)) return fallback;\n\treturn perToken * TOKENS_PER_MILLION;\n}\n\nfunction toNonEmptyString(value: unknown): string | undefined {\n\tif (typeof value !== \"string\") return undefined;\n\tconst trimmed = value.trim();\n\treturn trimmed.length > 0 ? trimmed : undefined;\n}\n\nfunction includesImageInput(architecture: Record<string, unknown> | undefined): boolean {\n\tif (!architecture) return false;\n\n\tconst inputModalities = Array.isArray(architecture.input_modalities)\n\t\t? architecture.input_modalities.filter((value): value is string => typeof value === \"string\")\n\t\t: [];\n\tif (inputModalities.some((modality) => modality.toLowerCase().includes(\"image\"))) {\n\t\treturn true;\n\t}\n\n\tconst modality = toNonEmptyString(architecture.modality)?.toLowerCase() ?? \"\";\n\treturn modality.includes(\"image\");\n}\n\nfunction supportsReasoning(row: Record<string, unknown>): boolean {\n\tconst params = Array.isArray(row.supported_parameters)\n\t\t? row.supported_parameters.filter((value): value is string => typeof value === \"string\")\n\t\t: [];\n\treturn params.some((param) => param.toLowerCase().includes(\"reason\"));\n}\n\nfunction normalizeModelRecord(\n\trow: Record<string, unknown>,\n): NonNullable<ProviderConfigInput[\"models\"]>[number] | undefined {\n\tconst id = toNonEmptyString(row.id);\n\tif (!id) return undefined;\n\n\tconst architecture = isRecord(row.architecture) ? row.architecture : undefined;\n\tconst pricing = isRecord(row.pricing) ? row.pricing : undefined;\n\tconst topProvider = isRecord(row.top_provider) ? row.top_provider : undefined;\n\n\tconst input = includesImageInput(architecture) ? ([\"text\", \"image\"] as const) : ([\"text\"] as const);\n\tconst contextWindow = toFiniteNumber(row.context_length, toFiniteNumber(topProvider?.context_length, 128000));\n\tconst maxTokens = toFiniteNumber(topProvider?.max_completion_tokens, 16384);\n\n\treturn {\n\t\tid,\n\t\tname: toNonEmptyString(row.name) ?? id,\n\t\tapi: \"openai-completions\" as Api,\n\t\treasoning: supportsReasoning(row),\n\t\tinput: [...input],\n\t\tcost: {\n\t\t\tinput: tokenPriceToPerMillion(pricing?.prompt, 0),\n\t\t\toutput: tokenPriceToPerMillion(pricing?.completion, 0),\n\t\t\tcacheRead: tokenPriceToPerMillion(pricing?.input_cache_read, 0),\n\t\t\tcacheWrite: tokenPriceToPerMillion(pricing?.input_cache_write, 0),\n\t\t},\n\t\tcontextWindow,\n\t\tmaxTokens,\n\t};\n}\n\nfunction normalizeModels(payload: unknown): NonNullable<ProviderConfigInput[\"models\"]> {\n\tif (!isRecord(payload) || !Array.isArray(payload.data)) return [];\n\n\tconst seen = new Set<string>();\n\tconst models: NonNullable<ProviderConfigInput[\"models\"]> = [];\n\tfor (const row of payload.data) {\n\t\tif (!isRecord(row)) continue;\n\t\tconst model = normalizeModelRecord(row);\n\t\tif (!model || seen.has(model.id)) continue;\n\t\tseen.add(model.id);\n\t\tmodels.push(model);\n\t}\n\n\tmodels.sort((a, b) => a.name.localeCompare(b.name, \"en\") || a.id.localeCompare(b.id, \"en\"));\n\treturn models;\n}\n\nasync function requestCatalog(\n\turl: string,\n\toptions: {\n\t\ttimeoutMs: number;\n\t\theaders?: Record<string, string>;\n\t\tfetchImpl: typeof fetch;\n\t},\n): Promise<NonNullable<ProviderConfigInput[\"models\"]> | undefined> {\n\ttry {\n\t\tconst response = await options.fetchImpl(url, {\n\t\t\tmethod: \"GET\",\n\t\t\theaders: options.headers,\n\t\t\tsignal: AbortSignal.timeout(options.timeoutMs),\n\t\t});\n\t\tif (!response.ok) return undefined;\n\n\t\tconst payload = (await response.json()) as unknown;\n\t\tconst models = normalizeModels(payload);\n\t\treturn models.length > 0 ? models : undefined;\n\t} catch {\n\t\treturn undefined;\n\t}\n}\n\nexport async function loadOpenRouterProviderConfig(\n\toptions: OpenRouterModelCatalogOptions = {},\n): Promise<ProviderConfigInput | undefined> {\n\tconst timeoutMs = Math.max(1_000, options.timeoutMs ?? DEFAULT_TIMEOUT_MS);\n\tconst fetchImpl = options.fetchImpl ?? globalThis.fetch;\n\tif (typeof fetchImpl !== \"function\") return undefined;\n\n\tconst apiKey = options.apiKey?.trim();\n\tconst headers: Record<string, string> = { Accept: \"application/json\" };\n\tif (apiKey) {\n\t\theaders.Authorization = `Bearer ${apiKey}`;\n\t}\n\n\tconst fromUserCatalog = apiKey\n\t\t? await requestCatalog(OPENROUTER_USER_MODELS_URL, {\n\t\t\t\ttimeoutMs,\n\t\t\t\theaders,\n\t\t\t\tfetchImpl,\n\t\t\t})\n\t\t: undefined;\n\tconst models =\n\t\tfromUserCatalog ??\n\t\t(await requestCatalog(OPENROUTER_MODELS_URL, {\n\t\t\ttimeoutMs,\n\t\t\theaders,\n\t\t\tfetchImpl,\n\t\t}));\n\tif (!models || models.length === 0) return undefined;\n\n\treturn {\n\t\tbaseUrl: OPENROUTER_BASE_URL,\n\t\tmodels,\n\t};\n}\n"]}
|
|
@@ -66,6 +66,7 @@ export interface PromptContextSettings {
|
|
|
66
66
|
maxContextCharsPerFile?: number;
|
|
67
67
|
maxTotalContextChars?: number;
|
|
68
68
|
enableGitSnapshotContext?: boolean;
|
|
69
|
+
gitSnapshotMaxChars?: number;
|
|
69
70
|
}
|
|
70
71
|
export interface PermissionsSettings {
|
|
71
72
|
extensionToolEnforcement?: boolean;
|
|
@@ -246,6 +247,7 @@ export declare class SettingsManager {
|
|
|
246
247
|
getPromptContextMaxCharsPerFile(): number;
|
|
247
248
|
getPromptContextMaxTotalChars(): number;
|
|
248
249
|
getPromptContextEnableGitSnapshotContext(): boolean;
|
|
250
|
+
getPromptContextGitSnapshotMaxChars(): number;
|
|
249
251
|
getShellCommandPrefix(): string | undefined;
|
|
250
252
|
setShellCommandPrefix(prefix: string | undefined): void;
|
|
251
253
|
getCollapseChangelog(): boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"settings-manager.d.ts","sourceRoot":"","sources":["../../src/core/settings-manager.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"settings-manager.d.ts","sourceRoot":"","sources":["../../src/core/settings-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -536,6 +536,12 @@ export class SettingsManager {
|
|
|
536
536
|
getPromptContextEnableGitSnapshotContext() {
|
|
537
537
|
return this.settings.promptContext?.enableGitSnapshotContext ?? false;
|
|
538
538
|
}
|
|
539
|
+
getPromptContextGitSnapshotMaxChars() {
|
|
540
|
+
const value = this.settings.promptContext?.gitSnapshotMaxChars;
|
|
541
|
+
if (typeof value !== "number" || !Number.isFinite(value))
|
|
542
|
+
return 2000;
|
|
543
|
+
return Math.max(256, Math.floor(value));
|
|
544
|
+
}
|
|
539
545
|
getShellCommandPrefix() {
|
|
540
546
|
return this.settings.shellCommandPrefix;
|
|
541
547
|
}
|