codealmanac 0.2.6 → 0.2.7
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/LICENSE +21 -133
- package/README.md +20 -15
- package/dist/{agents-HYRWRHRX.js → agents-V2ZOIACP.js} +6 -5
- package/dist/{chunk-PDFS5VFE.js → chunk-447U3GQJ.js} +5 -17
- package/dist/chunk-447U3GQJ.js.map +1 -0
- package/dist/{chunk-3E7JNMTZ.js → chunk-5BWUMAOX.js} +4 -29
- package/dist/chunk-5BWUMAOX.js.map +1 -0
- package/dist/{chunk-KQUVMF27.js → chunk-BFIG2CXM.js} +2 -516
- package/dist/chunk-BFIG2CXM.js.map +1 -0
- package/dist/{chunk-K2JBCB7R.js → chunk-BQY5L3DL.js} +7 -43
- package/dist/chunk-BQY5L3DL.js.map +1 -0
- package/dist/{chunk-F53U6JQG.js → chunk-CQJVM34R.js} +2 -2
- package/dist/chunk-FUBE6KCO.js +124 -0
- package/dist/chunk-FUBE6KCO.js.map +1 -0
- package/dist/chunk-IZBXXAVL.js +524 -0
- package/dist/chunk-IZBXXAVL.js.map +1 -0
- package/dist/{chunk-7JUX4ADQ.js → chunk-IZT6RBHS.js} +1 -1
- package/dist/{chunk-DW32TL5W.js → chunk-JLQZELHQ.js} +18 -58
- package/dist/chunk-JLQZELHQ.js.map +1 -0
- package/dist/{chunk-2BNDNGUR.js → chunk-KZXWPG4P.js} +4 -8
- package/dist/{chunk-2BNDNGUR.js.map → chunk-KZXWPG4P.js.map} +1 -1
- package/dist/{chunk-GPFVEF6V.js → chunk-QIA22IAM.js} +6 -24
- package/dist/chunk-QIA22IAM.js.map +1 -0
- package/dist/{chunk-J7DNV2DH.js → chunk-RALBM6HZ.js} +43 -355
- package/dist/chunk-RALBM6HZ.js.map +1 -0
- package/dist/{chunk-HJ3WREGP.js → chunk-U5DLLWIC.js} +3 -3
- package/dist/chunk-WL4UE7Q6.js +1386 -0
- package/dist/chunk-WL4UE7Q6.js.map +1 -0
- package/dist/{chunk-VXDPUOQ5.js → chunk-ZUQN5Y3K.js} +129 -382
- package/dist/chunk-ZUQN5Y3K.js.map +1 -0
- package/dist/{chunk-ODJAAJGZ.js → chunk-ZZLLOAI6.js} +3 -3
- package/dist/{cli-MKXCNEMW.js → cli-XWPNARA6.js} +37 -20
- package/dist/cli-XWPNARA6.js.map +1 -0
- package/dist/codealmanac.js +1 -1
- package/dist/{config-F7FKEQ7F.js → config-KH3JUMG6.js} +4 -4
- package/dist/doctor-ENJT665Z.js +18 -0
- package/dist/{hook-4SVX446M.js → hook-2NP3UE7U.js} +2 -4
- package/dist/paths-O5CZADP2.js +14 -0
- package/dist/process-KFSLENL3.js +61 -0
- package/dist/{register-commands-2F6SXLDI.js → register-commands-LULZUSPO.js} +999 -1030
- package/dist/register-commands-LULZUSPO.js.map +1 -0
- package/dist/uninstall-BD4MMQ7M.js +16 -0
- package/dist/uninstall-BD4MMQ7M.js.map +1 -0
- package/dist/update-XSKPDFMJ.js +11 -0
- package/dist/update-XSKPDFMJ.js.map +1 -0
- package/dist/{wiki-IGNRNLUZ.js → wiki-O4RWMAE6.js} +8 -6
- package/dist/wiki-O4RWMAE6.js.map +1 -0
- package/guides/mini.md +8 -6
- package/guides/reference.md +89 -32
- package/hooks/almanac-capture.sh +7 -8
- package/package.json +3 -4
- package/prompts/agents/.gitkeep +1 -0
- package/prompts/base/notability.md +139 -0
- package/prompts/base/purpose.md +85 -0
- package/prompts/base/syntax.md +114 -0
- package/prompts/operations/absorb.md +43 -0
- package/prompts/operations/build.md +49 -0
- package/prompts/operations/garden.md +51 -0
- package/COMMERCIAL.md +0 -9
- package/dist/chunk-3E7JNMTZ.js.map +0 -1
- package/dist/chunk-DW32TL5W.js.map +0 -1
- package/dist/chunk-GPFVEF6V.js.map +0 -1
- package/dist/chunk-J7DNV2DH.js.map +0 -1
- package/dist/chunk-K2JBCB7R.js.map +0 -1
- package/dist/chunk-KQUVMF27.js.map +0 -1
- package/dist/chunk-PDFS5VFE.js.map +0 -1
- package/dist/chunk-VXDPUOQ5.js.map +0 -1
- package/dist/cli-MKXCNEMW.js.map +0 -1
- package/dist/doctor-37UH3HT5.js +0 -17
- package/dist/register-commands-2F6SXLDI.js.map +0 -1
- package/dist/uninstall-C62ZOK32.js +0 -17
- package/dist/update-2UGOFN5C.js +0 -11
- package/dist/wiki-IGNRNLUZ.js.map +0 -1
- package/prompts/bootstrap.md +0 -176
- package/prompts/reviewer.md +0 -129
- package/prompts/writer.md +0 -134
- /package/dist/{agents-HYRWRHRX.js.map → agents-V2ZOIACP.js.map} +0 -0
- /package/dist/{chunk-F53U6JQG.js.map → chunk-CQJVM34R.js.map} +0 -0
- /package/dist/{chunk-7JUX4ADQ.js.map → chunk-IZT6RBHS.js.map} +0 -0
- /package/dist/{chunk-HJ3WREGP.js.map → chunk-U5DLLWIC.js.map} +0 -0
- /package/dist/{chunk-ODJAAJGZ.js.map → chunk-ZZLLOAI6.js.map} +0 -0
- /package/dist/{config-F7FKEQ7F.js.map → config-KH3JUMG6.js.map} +0 -0
- /package/dist/{doctor-37UH3HT5.js.map → doctor-ENJT665Z.js.map} +0 -0
- /package/dist/{hook-4SVX446M.js.map → hook-2NP3UE7U.js.map} +0 -0
- /package/dist/{uninstall-C62ZOK32.js.map → paths-O5CZADP2.js.map} +0 -0
- /package/dist/{update-2UGOFN5C.js.map → process-KFSLENL3.js.map} +0 -0
|
@@ -1,129 +1,17 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
|
-
|
|
3
|
+
assertClaudeAuth,
|
|
4
|
+
checkClaudeAuth,
|
|
5
|
+
resolveClaudeExecutable
|
|
6
|
+
} from "./chunk-FUBE6KCO.js";
|
|
7
|
+
import {
|
|
8
|
+
AGENT_PROVIDER_IDS,
|
|
4
9
|
isAgentProviderId,
|
|
5
10
|
readConfig
|
|
6
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-5BWUMAOX.js";
|
|
7
12
|
|
|
8
13
|
// src/agent/providers/claude/index.ts
|
|
9
14
|
import { query } from "@anthropic-ai/claude-agent-sdk";
|
|
10
|
-
|
|
11
|
-
// src/agent/providers/claude/auth.ts
|
|
12
|
-
import { spawn, spawnSync } from "child_process";
|
|
13
|
-
import { createRequire } from "module";
|
|
14
|
-
import { dirname, join } from "path";
|
|
15
|
-
var AUTH_TIMEOUT_MS = 1e4;
|
|
16
|
-
function resolveClaudeExecutable() {
|
|
17
|
-
const result = spawnSync("sh", ["-lc", "command -v claude"], {
|
|
18
|
-
encoding: "utf8"
|
|
19
|
-
});
|
|
20
|
-
if (result.status !== 0) return void 0;
|
|
21
|
-
const found = result.stdout.trim().split("\n")[0]?.trim();
|
|
22
|
-
return found !== void 0 && found.length > 0 ? found : void 0;
|
|
23
|
-
}
|
|
24
|
-
function resolveCliJsPath() {
|
|
25
|
-
const require2 = createRequire(import.meta.url);
|
|
26
|
-
const entry = require2.resolve("@anthropic-ai/claude-agent-sdk");
|
|
27
|
-
return join(dirname(entry), "cli.js");
|
|
28
|
-
}
|
|
29
|
-
var defaultSpawnCli = (args) => {
|
|
30
|
-
const command = resolveClaudeExecutable() ?? "claude";
|
|
31
|
-
const child = spawn(command, args, {
|
|
32
|
-
stdio: ["ignore", "pipe", "pipe"]
|
|
33
|
-
});
|
|
34
|
-
return child;
|
|
35
|
-
};
|
|
36
|
-
var legacySdkSpawnCli = (args) => {
|
|
37
|
-
const cliPath = resolveCliJsPath();
|
|
38
|
-
const child = spawn(process.execPath, [cliPath, ...args], {
|
|
39
|
-
stdio: ["ignore", "pipe", "pipe"]
|
|
40
|
-
});
|
|
41
|
-
return child;
|
|
42
|
-
};
|
|
43
|
-
async function checkClaudeAuth(spawnCli = defaultSpawnCli) {
|
|
44
|
-
if (spawnCli === defaultSpawnCli) {
|
|
45
|
-
const status = await checkClaudeAuthWith(defaultSpawnCli);
|
|
46
|
-
if (status.loggedIn) return status;
|
|
47
|
-
return await checkClaudeAuthWith(legacySdkSpawnCli);
|
|
48
|
-
}
|
|
49
|
-
return await checkClaudeAuthWith(spawnCli);
|
|
50
|
-
}
|
|
51
|
-
async function checkClaudeAuthWith(spawnCli) {
|
|
52
|
-
let child;
|
|
53
|
-
try {
|
|
54
|
-
child = spawnCli(["auth", "status", "--json"]);
|
|
55
|
-
} catch {
|
|
56
|
-
return { loggedIn: false };
|
|
57
|
-
}
|
|
58
|
-
return new Promise((resolve) => {
|
|
59
|
-
let stdout = "";
|
|
60
|
-
let stderr = "";
|
|
61
|
-
let settled = false;
|
|
62
|
-
const settle = (value) => {
|
|
63
|
-
if (settled) return;
|
|
64
|
-
settled = true;
|
|
65
|
-
clearTimeout(timer);
|
|
66
|
-
resolve(value);
|
|
67
|
-
};
|
|
68
|
-
const timer = setTimeout(() => {
|
|
69
|
-
try {
|
|
70
|
-
child.kill("SIGTERM");
|
|
71
|
-
} catch {
|
|
72
|
-
}
|
|
73
|
-
settle({ loggedIn: false });
|
|
74
|
-
}, AUTH_TIMEOUT_MS);
|
|
75
|
-
child.stdout.on("data", (data) => {
|
|
76
|
-
stdout += data.toString();
|
|
77
|
-
});
|
|
78
|
-
child.stderr.on("data", (data) => {
|
|
79
|
-
stderr += data.toString();
|
|
80
|
-
});
|
|
81
|
-
child.on("error", () => {
|
|
82
|
-
settle({ loggedIn: false });
|
|
83
|
-
});
|
|
84
|
-
child.on("close", (code) => {
|
|
85
|
-
if (code !== 0 && stdout.trim().length === 0) {
|
|
86
|
-
void stderr;
|
|
87
|
-
settle({ loggedIn: false });
|
|
88
|
-
return;
|
|
89
|
-
}
|
|
90
|
-
try {
|
|
91
|
-
settle(parseClaudeAuthStatus(stdout.trim()));
|
|
92
|
-
} catch {
|
|
93
|
-
settle({ loggedIn: false });
|
|
94
|
-
}
|
|
95
|
-
});
|
|
96
|
-
});
|
|
97
|
-
}
|
|
98
|
-
function parseClaudeAuthStatus(raw) {
|
|
99
|
-
const parsed = JSON.parse(raw);
|
|
100
|
-
const loggedIn = parsed.loggedIn === true;
|
|
101
|
-
const out = { loggedIn };
|
|
102
|
-
if (typeof parsed.email === "string") out.email = parsed.email;
|
|
103
|
-
if (typeof parsed.subscriptionType === "string") {
|
|
104
|
-
out.subscriptionType = parsed.subscriptionType;
|
|
105
|
-
}
|
|
106
|
-
if (typeof parsed.authMethod === "string") {
|
|
107
|
-
out.authMethod = parsed.authMethod;
|
|
108
|
-
}
|
|
109
|
-
return out;
|
|
110
|
-
}
|
|
111
|
-
var UNAUTHENTICATED_MESSAGE = "not authenticated to Claude.\n\nOption 1 \u2014 use your Claude subscription (Pro/Max):\n claude auth login --claudeai\n\nOption 2 \u2014 use a pay-per-token API key:\n Get one at https://console.anthropic.com\n export ANTHROPIC_API_KEY=sk-ant-...\n\nVerify with: claude auth status";
|
|
112
|
-
async function assertClaudeAuth(spawnCli = defaultSpawnCli) {
|
|
113
|
-
const status = await checkClaudeAuth(spawnCli);
|
|
114
|
-
if (status.loggedIn) {
|
|
115
|
-
return status;
|
|
116
|
-
}
|
|
117
|
-
const apiKey = process.env.ANTHROPIC_API_KEY;
|
|
118
|
-
if (apiKey !== void 0 && apiKey.length > 0) {
|
|
119
|
-
return { loggedIn: true, authMethod: "apiKey" };
|
|
120
|
-
}
|
|
121
|
-
const err = new Error(UNAUTHENTICATED_MESSAGE);
|
|
122
|
-
err.code = "CLAUDE_AUTH_MISSING";
|
|
123
|
-
throw err;
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
// src/agent/providers/claude/index.ts
|
|
127
15
|
var DEFAULT_AGENT_MODEL = "claude-sonnet-4-6";
|
|
128
16
|
var metadata = {
|
|
129
17
|
id: "claude",
|
|
@@ -147,52 +35,8 @@ var claudeProvider = {
|
|
|
147
35
|
metadata,
|
|
148
36
|
checkStatus,
|
|
149
37
|
assertReady,
|
|
150
|
-
run
|
|
151
|
-
modelChoices
|
|
38
|
+
run
|
|
152
39
|
};
|
|
153
|
-
var CLAUDE_MODELS = [
|
|
154
|
-
{
|
|
155
|
-
value: "claude-opus-4-7",
|
|
156
|
-
label: "Opus 4.7",
|
|
157
|
-
recommended: false
|
|
158
|
-
},
|
|
159
|
-
{
|
|
160
|
-
value: "claude-sonnet-4-6",
|
|
161
|
-
label: "Sonnet 4.6",
|
|
162
|
-
recommended: true
|
|
163
|
-
},
|
|
164
|
-
{
|
|
165
|
-
value: "claude-haiku-4-5-20251001",
|
|
166
|
-
label: "Haiku 4.5",
|
|
167
|
-
recommended: false
|
|
168
|
-
}
|
|
169
|
-
];
|
|
170
|
-
function modelChoices(args) {
|
|
171
|
-
const choices = [];
|
|
172
|
-
if (args.configuredModel !== null && !CLAUDE_MODELS.some((model) => model.value === args.configuredModel)) {
|
|
173
|
-
choices.push({
|
|
174
|
-
value: args.configuredModel,
|
|
175
|
-
label: args.configuredModel,
|
|
176
|
-
recommended: false,
|
|
177
|
-
source: "configured"
|
|
178
|
-
});
|
|
179
|
-
}
|
|
180
|
-
for (const model of CLAUDE_MODELS) {
|
|
181
|
-
choices.push({
|
|
182
|
-
value: model.value,
|
|
183
|
-
label: model.label,
|
|
184
|
-
recommended: model.recommended,
|
|
185
|
-
source: "catalog"
|
|
186
|
-
});
|
|
187
|
-
}
|
|
188
|
-
choices.push({
|
|
189
|
-
value: "__custom__",
|
|
190
|
-
label: "Enter a model name",
|
|
191
|
-
recommended: false,
|
|
192
|
-
source: "custom"
|
|
193
|
-
});
|
|
194
|
-
return choices;
|
|
195
|
-
}
|
|
196
40
|
async function run(opts) {
|
|
197
41
|
const claudeExecutable = resolveClaudeExecutable();
|
|
198
42
|
const q = query({
|
|
@@ -260,10 +104,10 @@ async function assertReady(spawnCli) {
|
|
|
260
104
|
}
|
|
261
105
|
|
|
262
106
|
// src/agent/providers/cli-status.ts
|
|
263
|
-
import { spawn
|
|
107
|
+
import { spawn, spawnSync } from "child_process";
|
|
264
108
|
var STATUS_TIMEOUT_MS = 3e3;
|
|
265
109
|
function commandExists(command) {
|
|
266
|
-
const result =
|
|
110
|
+
const result = spawnSync("sh", ["-lc", `command -v ${command}`], {
|
|
267
111
|
encoding: "utf8"
|
|
268
112
|
});
|
|
269
113
|
return result.status === 0 && result.stdout.trim().length > 0;
|
|
@@ -281,7 +125,7 @@ function runStatusCommand(command, args) {
|
|
|
281
125
|
resolve(value);
|
|
282
126
|
};
|
|
283
127
|
try {
|
|
284
|
-
child =
|
|
128
|
+
child = spawn(command, args, { stdio: ["ignore", "pipe", "pipe"] });
|
|
285
129
|
} catch (err) {
|
|
286
130
|
const msg = err instanceof Error ? err.message : String(err);
|
|
287
131
|
resolve({ ok: false, detail: msg });
|
|
@@ -321,53 +165,12 @@ ${stderr}`.trim();
|
|
|
321
165
|
});
|
|
322
166
|
});
|
|
323
167
|
}
|
|
324
|
-
function runInjectedStatusCommand(spawnCli, args) {
|
|
325
|
-
return new Promise((resolve) => {
|
|
326
|
-
let stdout = "";
|
|
327
|
-
let stderr = "";
|
|
328
|
-
let settled = false;
|
|
329
|
-
const settle = (value) => {
|
|
330
|
-
if (settled) return;
|
|
331
|
-
settled = true;
|
|
332
|
-
resolve(value);
|
|
333
|
-
};
|
|
334
|
-
try {
|
|
335
|
-
const child = spawnCli(args);
|
|
336
|
-
child.stdout.on("data", (chunk) => {
|
|
337
|
-
stdout += chunk.toString();
|
|
338
|
-
});
|
|
339
|
-
child.stderr.on("data", (chunk) => {
|
|
340
|
-
stderr += chunk.toString();
|
|
341
|
-
});
|
|
342
|
-
child.on("error", (err) => {
|
|
343
|
-
settle({
|
|
344
|
-
ok: false,
|
|
345
|
-
detail: err instanceof Error ? err.message : String(err)
|
|
346
|
-
});
|
|
347
|
-
});
|
|
348
|
-
child.on("close", (codeOrError) => {
|
|
349
|
-
const code = typeof codeOrError === "number" ? codeOrError : 1;
|
|
350
|
-
const text = `${stdout}
|
|
351
|
-
${stderr}`.trim();
|
|
352
|
-
settle({
|
|
353
|
-
ok: code === 0,
|
|
354
|
-
detail: text.split("\n").find((line) => line.trim().length > 0)?.trim() ?? (code === 0 ? "ready" : `${args[0] ?? "command"} exited ${code}`)
|
|
355
|
-
});
|
|
356
|
-
});
|
|
357
|
-
} catch (err) {
|
|
358
|
-
settle({
|
|
359
|
-
ok: false,
|
|
360
|
-
detail: err instanceof Error ? err.message : String(err)
|
|
361
|
-
});
|
|
362
|
-
}
|
|
363
|
-
});
|
|
364
|
-
}
|
|
365
168
|
|
|
366
169
|
// src/agent/providers/jsonl-cli.ts
|
|
367
|
-
import { spawn as
|
|
170
|
+
import { spawn as spawn2 } from "child_process";
|
|
368
171
|
function runJsonlCli(opts) {
|
|
369
172
|
return new Promise((resolve) => {
|
|
370
|
-
const child =
|
|
173
|
+
const child = spawn2(opts.command, opts.args, {
|
|
371
174
|
cwd: opts.cwd,
|
|
372
175
|
env: opts.env,
|
|
373
176
|
stdio: ["ignore", "pipe", "pipe"]
|
|
@@ -476,18 +279,20 @@ function numberField(input, key) {
|
|
|
476
279
|
|
|
477
280
|
// src/agent/providers/prompt.ts
|
|
478
281
|
function combinedPrompt(opts, metadata4) {
|
|
479
|
-
const
|
|
480
|
-
return `${opts.systemPrompt}${
|
|
282
|
+
const agentFallback = buildAgentFallback(opts, metadata4);
|
|
283
|
+
return `${opts.systemPrompt}${agentFallback}
|
|
481
284
|
|
|
482
285
|
---
|
|
483
286
|
|
|
484
287
|
${opts.prompt}`;
|
|
485
288
|
}
|
|
486
|
-
function
|
|
289
|
+
function buildAgentFallback(opts, metadata4) {
|
|
487
290
|
if (metadata4.capabilities.supportsProgrammaticSubagents) return "";
|
|
488
|
-
const
|
|
489
|
-
if (
|
|
490
|
-
return "\n\nNon-Claude provider note: this runtime does not receive Claude's nested Agent tool contract.
|
|
291
|
+
const agents = Object.entries(opts.agents ?? {});
|
|
292
|
+
if (agents.length === 0) return "";
|
|
293
|
+
return "\n\nNon-Claude provider note: this runtime does not receive Claude's nested Agent tool contract. If the operation prompt asks you to invoke a helper agent, perform that helper work inline before final edits. Treat these helper prompts as read-only guidance:\n\n" + agents.map(([name, agent]) => `## ${name}
|
|
294
|
+
|
|
295
|
+
${agent.prompt}`).join("\n\n");
|
|
491
296
|
}
|
|
492
297
|
|
|
493
298
|
// src/agent/providers/codex-cli.ts
|
|
@@ -513,100 +318,8 @@ var codexProvider = {
|
|
|
513
318
|
metadata: metadata2,
|
|
514
319
|
checkStatus: checkStatus2,
|
|
515
320
|
assertReady: assertReady2,
|
|
516
|
-
run: run2
|
|
517
|
-
modelChoices: modelChoices2
|
|
518
|
-
};
|
|
519
|
-
var CODEX_MODEL_ORDER = [
|
|
520
|
-
"gpt-5.5",
|
|
521
|
-
"gpt-5.4",
|
|
522
|
-
"gpt-5.4-mini",
|
|
523
|
-
"gpt-5.3-codex"
|
|
524
|
-
];
|
|
525
|
-
var CODEX_MODEL_LABELS = {
|
|
526
|
-
"gpt-5.5": "GPT-5.5",
|
|
527
|
-
"gpt-5.4": "GPT-5.4",
|
|
528
|
-
"gpt-5.4-mini": "GPT-5.4 Mini",
|
|
529
|
-
"gpt-5.3-codex": "GPT-5.3 Codex"
|
|
321
|
+
run: run2
|
|
530
322
|
};
|
|
531
|
-
async function modelChoices2(args) {
|
|
532
|
-
const catalog = await readCodexModelCatalog(args.spawnCli);
|
|
533
|
-
const choices = [];
|
|
534
|
-
if (args.configuredModel !== null) {
|
|
535
|
-
choices.push({
|
|
536
|
-
value: args.configuredModel,
|
|
537
|
-
label: modelLabel(args.configuredModel, catalog),
|
|
538
|
-
recommended: false,
|
|
539
|
-
source: "configured"
|
|
540
|
-
});
|
|
541
|
-
}
|
|
542
|
-
for (const slug of CODEX_MODEL_ORDER) {
|
|
543
|
-
if (choices.some((choice) => choice.value === slug)) continue;
|
|
544
|
-
if (catalog !== void 0 && !catalog.some((model) => model.slug === slug)) {
|
|
545
|
-
continue;
|
|
546
|
-
}
|
|
547
|
-
choices.push({
|
|
548
|
-
value: slug,
|
|
549
|
-
label: modelLabel(slug, catalog),
|
|
550
|
-
recommended: slug === "gpt-5.4",
|
|
551
|
-
source: "catalog"
|
|
552
|
-
});
|
|
553
|
-
}
|
|
554
|
-
choices.push({
|
|
555
|
-
value: "__custom__",
|
|
556
|
-
label: "Enter a model name",
|
|
557
|
-
recommended: false,
|
|
558
|
-
source: "custom"
|
|
559
|
-
});
|
|
560
|
-
return choices;
|
|
561
|
-
}
|
|
562
|
-
async function readCodexModelCatalog(spawnCli) {
|
|
563
|
-
if (spawnCli === void 0) return void 0;
|
|
564
|
-
try {
|
|
565
|
-
const result = await collectSpawn(spawnCli(["codex", "debug", "models"]));
|
|
566
|
-
if (result.code !== 0) return void 0;
|
|
567
|
-
const parsed = JSON.parse(result.stdout);
|
|
568
|
-
if (parsed === null || typeof parsed !== "object") return void 0;
|
|
569
|
-
const models = parsed.models;
|
|
570
|
-
if (!Array.isArray(models)) return void 0;
|
|
571
|
-
const out = [];
|
|
572
|
-
for (const model of models) {
|
|
573
|
-
if (model === null || typeof model !== "object") continue;
|
|
574
|
-
const record = model;
|
|
575
|
-
if (record.visibility !== "list") continue;
|
|
576
|
-
if (typeof record.slug !== "string") continue;
|
|
577
|
-
out.push({
|
|
578
|
-
slug: record.slug,
|
|
579
|
-
displayName: typeof record.display_name === "string" ? record.display_name : record.slug
|
|
580
|
-
});
|
|
581
|
-
}
|
|
582
|
-
return out;
|
|
583
|
-
} catch {
|
|
584
|
-
return void 0;
|
|
585
|
-
}
|
|
586
|
-
}
|
|
587
|
-
function collectSpawn(child) {
|
|
588
|
-
return new Promise((resolve) => {
|
|
589
|
-
let stdout = "";
|
|
590
|
-
let settled = false;
|
|
591
|
-
const settle = (code) => {
|
|
592
|
-
if (settled) return;
|
|
593
|
-
settled = true;
|
|
594
|
-
resolve({ stdout, code });
|
|
595
|
-
};
|
|
596
|
-
child.stdout.on("data", (chunk) => {
|
|
597
|
-
stdout += chunk.toString();
|
|
598
|
-
});
|
|
599
|
-
child.on("error", () => {
|
|
600
|
-
settle(1);
|
|
601
|
-
});
|
|
602
|
-
child.on("close", (codeOrError) => {
|
|
603
|
-
settle(typeof codeOrError === "number" ? codeOrError ?? 1 : 1);
|
|
604
|
-
});
|
|
605
|
-
});
|
|
606
|
-
}
|
|
607
|
-
function modelLabel(slug, catalog) {
|
|
608
|
-
return CODEX_MODEL_LABELS[slug] ?? catalog?.find((model) => model.slug === slug)?.displayName ?? slug;
|
|
609
|
-
}
|
|
610
323
|
async function run2(opts) {
|
|
611
324
|
const args = [
|
|
612
325
|
"exec",
|
|
@@ -630,8 +343,8 @@ async function run2(opts) {
|
|
|
630
343
|
parseFinal: parseCodexFinal
|
|
631
344
|
});
|
|
632
345
|
}
|
|
633
|
-
async function checkStatus2(
|
|
634
|
-
if (
|
|
346
|
+
async function checkStatus2() {
|
|
347
|
+
if (!commandExists(metadata2.executable)) {
|
|
635
348
|
return {
|
|
636
349
|
id: metadata2.id,
|
|
637
350
|
installed: false,
|
|
@@ -639,11 +352,7 @@ async function checkStatus2(spawnCli) {
|
|
|
639
352
|
detail: `${metadata2.executable} not found on PATH`
|
|
640
353
|
};
|
|
641
354
|
}
|
|
642
|
-
const auth =
|
|
643
|
-
metadata2.executable,
|
|
644
|
-
"login",
|
|
645
|
-
"status"
|
|
646
|
-
]) : await runStatusCommand(metadata2.executable, ["login", "status"]);
|
|
355
|
+
const auth = await runStatusCommand(metadata2.executable, ["login", "status"]);
|
|
647
356
|
return {
|
|
648
357
|
id: metadata2.id,
|
|
649
358
|
installed: true,
|
|
@@ -651,8 +360,8 @@ async function checkStatus2(spawnCli) {
|
|
|
651
360
|
detail: auth.detail
|
|
652
361
|
};
|
|
653
362
|
}
|
|
654
|
-
async function assertReady2(
|
|
655
|
-
const status = await checkStatus2(
|
|
363
|
+
async function assertReady2() {
|
|
364
|
+
const status = await checkStatus2();
|
|
656
365
|
if (!status.installed || !status.authenticated) {
|
|
657
366
|
const err = new Error(`${status.id} not ready: ${status.detail}`);
|
|
658
367
|
err.code = "AGENT_AUTH_MISSING";
|
|
@@ -730,8 +439,8 @@ async function run3(opts) {
|
|
|
730
439
|
parseFinal: parseCursorFinal
|
|
731
440
|
});
|
|
732
441
|
}
|
|
733
|
-
async function checkStatus3(
|
|
734
|
-
if (
|
|
442
|
+
async function checkStatus3() {
|
|
443
|
+
if (!commandExists(metadata3.executable)) {
|
|
735
444
|
return {
|
|
736
445
|
id: metadata3.id,
|
|
737
446
|
installed: false,
|
|
@@ -739,10 +448,7 @@ async function checkStatus3(spawnCli) {
|
|
|
739
448
|
detail: `${metadata3.executable} not found on PATH`
|
|
740
449
|
};
|
|
741
450
|
}
|
|
742
|
-
const auth =
|
|
743
|
-
metadata3.executable,
|
|
744
|
-
"status"
|
|
745
|
-
]) : await runStatusCommand(metadata3.executable, ["status"]);
|
|
451
|
+
const auth = await runStatusCommand(metadata3.executable, ["status"]);
|
|
746
452
|
return {
|
|
747
453
|
id: metadata3.id,
|
|
748
454
|
installed: true,
|
|
@@ -750,8 +456,8 @@ async function checkStatus3(spawnCli) {
|
|
|
750
456
|
detail: auth.detail
|
|
751
457
|
};
|
|
752
458
|
}
|
|
753
|
-
async function assertReady3(
|
|
754
|
-
const status = await checkStatus3(
|
|
459
|
+
async function assertReady3() {
|
|
460
|
+
const status = await checkStatus3();
|
|
755
461
|
if (!status.installed || !status.authenticated) {
|
|
756
462
|
const err = new Error(`${status.id} not ready: ${status.detail}`);
|
|
757
463
|
err.code = "AGENT_AUTH_MISSING";
|
|
@@ -772,12 +478,9 @@ function parseCursorFinal(msg) {
|
|
|
772
478
|
}
|
|
773
479
|
|
|
774
480
|
// src/agent/providers/status.ts
|
|
775
|
-
async function assertAgentAuth(args) {
|
|
776
|
-
await getAgentProvider(args.provider).assertReady(args.spawnCli);
|
|
777
|
-
}
|
|
778
481
|
async function listProviderStatuses(spawnCli) {
|
|
779
482
|
const out = [];
|
|
780
|
-
for (const id of
|
|
483
|
+
for (const id of AGENT_PROVIDER_IDS) {
|
|
781
484
|
out.push(await getAgentProvider(id).checkStatus(spawnCli));
|
|
782
485
|
}
|
|
783
486
|
return out;
|
|
@@ -820,14 +523,13 @@ async function buildProviderSetupView(opts = {}) {
|
|
|
820
523
|
const statuses = opts.statuses ?? await listProviderStatuses(opts.spawnCli);
|
|
821
524
|
const statusById = new Map(statuses.map((status) => [status.id, status]));
|
|
822
525
|
const recommendedProvider = chooseRecommendedProvider(statuses);
|
|
823
|
-
const choices =
|
|
824
|
-
for (const id of getEnabledAgentProviderIds()) {
|
|
526
|
+
const choices = AGENT_PROVIDER_IDS.map((id) => {
|
|
825
527
|
const status = statusById.get(id) ?? missingStatus(id);
|
|
826
528
|
const readiness = getReadiness(status);
|
|
827
529
|
const configuredModel = normalizeModel(config.agent.models[id]);
|
|
828
530
|
const providerDefaultModel = getProviderDefaultModel(id);
|
|
829
531
|
const effectiveModel = configuredModel ?? providerDefaultModel;
|
|
830
|
-
|
|
532
|
+
return {
|
|
831
533
|
id,
|
|
832
534
|
label: getProviderLabel(id),
|
|
833
535
|
selected: id === config.agent.default,
|
|
@@ -842,22 +544,16 @@ async function buildProviderSetupView(opts = {}) {
|
|
|
842
544
|
account: status.authenticated ? accountFromDetail(status.detail) : null,
|
|
843
545
|
detail: status.detail,
|
|
844
546
|
fixCommand: fixFor(id, readiness),
|
|
845
|
-
modelChoices:
|
|
846
|
-
|
|
847
|
-
|
|
848
|
-
});
|
|
849
|
-
}
|
|
547
|
+
modelChoices: buildProviderModelChoices(id, configuredModel)
|
|
548
|
+
};
|
|
549
|
+
});
|
|
850
550
|
return {
|
|
851
551
|
defaultProvider: config.agent.default,
|
|
852
552
|
recommendedProvider,
|
|
853
553
|
choices
|
|
854
554
|
};
|
|
855
555
|
}
|
|
856
|
-
function buildProviderModelChoices(id, configuredModel = null
|
|
857
|
-
const provider = getAgentProvider(id);
|
|
858
|
-
if (provider.modelChoices !== void 0) {
|
|
859
|
-
return provider.modelChoices({ configuredModel, spawnCli: opts.spawnCli });
|
|
860
|
-
}
|
|
556
|
+
function buildProviderModelChoices(id, configuredModel = null) {
|
|
861
557
|
const choices = [];
|
|
862
558
|
if (configuredModel !== null) {
|
|
863
559
|
choices.push({
|
|
@@ -889,16 +585,16 @@ function buildProviderModelChoices(id, configuredModel = null, opts = {}) {
|
|
|
889
585
|
}
|
|
890
586
|
choices.push({
|
|
891
587
|
value: "__custom__",
|
|
892
|
-
label: "
|
|
588
|
+
label: "custom model id",
|
|
893
589
|
recommended: false,
|
|
894
590
|
source: "custom"
|
|
895
591
|
});
|
|
896
592
|
return choices;
|
|
897
593
|
}
|
|
898
594
|
function chooseRecommendedProvider(statuses) {
|
|
899
|
-
const ready = statuses.filter((status) =>
|
|
595
|
+
const ready = statuses.filter((status) => status.installed && status.authenticated).map((status) => status.id);
|
|
900
596
|
if (ready.includes("claude")) return "claude";
|
|
901
|
-
for (const id of
|
|
597
|
+
for (const id of AGENT_PROVIDER_IDS) {
|
|
902
598
|
if (ready.includes(id)) return id;
|
|
903
599
|
}
|
|
904
600
|
return "claude";
|
|
@@ -916,9 +612,6 @@ function parseAgentSelection(value) {
|
|
|
916
612
|
}
|
|
917
613
|
function getReadiness(status) {
|
|
918
614
|
if (!status.installed) return "missing";
|
|
919
|
-
if (/not (logged|signed) in|not authenticated/i.test(status.detail)) {
|
|
920
|
-
return "not-authenticated";
|
|
921
|
-
}
|
|
922
615
|
if (!status.authenticated) return "not-authenticated";
|
|
923
616
|
return "ready";
|
|
924
617
|
}
|
|
@@ -947,13 +640,8 @@ function missingStatus(id) {
|
|
|
947
640
|
}
|
|
948
641
|
|
|
949
642
|
export {
|
|
950
|
-
checkClaudeAuth,
|
|
951
|
-
DEFAULT_AGENT_MODEL,
|
|
952
|
-
assertAgentAuth,
|
|
953
|
-
getAgentProvider,
|
|
954
|
-
getProviderDefaultModel,
|
|
955
643
|
buildProviderSetupView,
|
|
956
644
|
buildProviderModelChoices,
|
|
957
645
|
parseAgentSelection
|
|
958
646
|
};
|
|
959
|
-
//# sourceMappingURL=chunk-
|
|
647
|
+
//# sourceMappingURL=chunk-RALBM6HZ.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/agent/providers/claude/index.ts","../src/agent/providers/cli-status.ts","../src/agent/providers/jsonl-cli.ts","../src/agent/providers/prompt.ts","../src/agent/providers/codex-cli.ts","../src/agent/providers/cursor-cli.ts","../src/agent/providers/status.ts","../src/agent/providers/index.ts","../src/agent/provider-view.ts"],"sourcesContent":["import { query } from \"@anthropic-ai/claude-agent-sdk\";\n\nimport type {\n AgentProvider,\n AgentProviderMetadata,\n AgentResult,\n ProviderStatus,\n RunAgentOptions,\n SpawnCliFn,\n} from \"../../types.js\";\nimport {\n assertClaudeAuth,\n checkClaudeAuth,\n resolveClaudeExecutable,\n UNAUTHENTICATED_MESSAGE,\n type ClaudeAuthStatus,\n} from \"./auth.js\";\n\nexport const DEFAULT_AGENT_MODEL = \"claude-sonnet-4-6\";\n\nconst metadata: AgentProviderMetadata = {\n id: \"claude\",\n displayName: \"Claude\",\n defaultModel: DEFAULT_AGENT_MODEL,\n executable: \"claude\",\n capabilities: {\n transport: \"sdk\",\n writesFiles: true,\n supportsModelOverride: true,\n supportsStreaming: true,\n supportsSessionId: true,\n supportsUsage: false,\n supportsCost: true,\n supportsProviderReportedTurns: true,\n supportsProgrammaticSubagents: true,\n supportsStrictToolAllowlist: false,\n },\n};\n\nexport const claudeProvider: AgentProvider = {\n metadata,\n checkStatus,\n assertReady,\n run,\n};\n\nasync function run(opts: RunAgentOptions): Promise<AgentResult> {\n const claudeExecutable = resolveClaudeExecutable();\n\n const q = query({\n prompt: opts.prompt,\n options: {\n systemPrompt: opts.systemPrompt,\n allowedTools: opts.allowedTools,\n agents: opts.agents ?? {},\n cwd: opts.cwd,\n model: opts.model ?? metadata.defaultModel ?? undefined,\n maxTurns: opts.maxTurns ?? 100,\n ...(claudeExecutable !== undefined\n ? { pathToClaudeCodeExecutable: claudeExecutable }\n : {}),\n env: {\n ...process.env,\n CODEALMANAC_INTERNAL_SESSION: \"1\",\n },\n includePartialMessages: true,\n },\n });\n\n let cost = 0;\n let turns = 0;\n let result = \"\";\n let sessionId: string | undefined;\n let success = false;\n let errorMsg: string | undefined;\n\n try {\n for await (const msg of q) {\n opts.onMessage?.(msg);\n\n if (\n sessionId === undefined &&\n typeof (msg as { session_id?: unknown }).session_id === \"string\"\n ) {\n sessionId = (msg as { session_id: string }).session_id;\n }\n\n if (msg.type === \"result\") {\n cost = msg.total_cost_usd;\n turns = msg.num_turns;\n if (msg.subtype === \"success\") {\n success = true;\n result = msg.result;\n } else {\n success = false;\n errorMsg =\n (msg.errors?.join(\"; \") ?? \"\") || `agent error: ${msg.subtype}`;\n }\n }\n }\n } catch (err: unknown) {\n errorMsg = err instanceof Error ? err.message : String(err);\n success = false;\n }\n\n return { success, cost, turns, result, sessionId, error: errorMsg };\n}\n\nasync function checkStatus(spawnCli?: SpawnCliFn): Promise<ProviderStatus> {\n let auth: ClaudeAuthStatus = { loggedIn: false };\n try {\n auth = await checkClaudeAuth(spawnCli);\n } catch {\n auth = { loggedIn: false };\n }\n const hasApiKey =\n process.env.ANTHROPIC_API_KEY !== undefined &&\n process.env.ANTHROPIC_API_KEY.length > 0;\n const installed = resolveClaudeExecutable() !== undefined;\n const authenticated = auth.loggedIn || hasApiKey;\n const detail = authenticated\n ? auth.email ?? (hasApiKey ? \"ANTHROPIC_API_KEY set\" : \"logged in\")\n : installed\n ? \"not logged in\"\n : `${metadata.executable} not found on PATH`;\n return { id: metadata.id, installed, authenticated, detail };\n}\n\nasync function assertReady(spawnCli?: SpawnCliFn): Promise<void> {\n await assertClaudeAuth(spawnCli);\n}\n\nexport { assertClaudeAuth, checkClaudeAuth, UNAUTHENTICATED_MESSAGE };\nexport type { ClaudeAuthStatus } from \"./auth.js\";\nexport type { SpawnCliFn, SpawnedProcess } from \"../../types.js\";\n","import { spawn, spawnSync, type ChildProcess } from \"node:child_process\";\n\nconst STATUS_TIMEOUT_MS = 3_000;\n\nexport function commandExists(command: string): boolean {\n const result = spawnSync(\"sh\", [\"-lc\", `command -v ${command}`], {\n encoding: \"utf8\",\n });\n return result.status === 0 && result.stdout.trim().length > 0;\n}\n\nexport function runStatusCommand(\n command: string,\n args: string[],\n): Promise<{ ok: boolean; detail: string }> {\n return new Promise((resolve) => {\n let stdout = \"\";\n let stderr = \"\";\n let child: ChildProcess;\n let settled = false;\n const settle = (value: { ok: boolean; detail: string }): void => {\n if (settled) return;\n settled = true;\n clearTimeout(timer);\n resolve(value);\n };\n try {\n child = spawn(command, args, { stdio: [\"ignore\", \"pipe\", \"pipe\"] });\n } catch (err: unknown) {\n const msg = err instanceof Error ? err.message : String(err);\n resolve({ ok: false, detail: msg });\n return;\n }\n const timer = setTimeout(() => {\n try {\n child.kill(\"SIGTERM\");\n setTimeout(() => {\n if (child.exitCode === null && child.signalCode === null) {\n try {\n child.kill(\"SIGKILL\");\n } catch {\n // already exited\n }\n }\n }, 500).unref();\n } catch {\n // already exited\n }\n settle({ ok: false, detail: `${command} status timed out` });\n }, STATUS_TIMEOUT_MS);\n child.stdout?.on(\"data\", (chunk) => {\n stdout += chunk.toString(\"utf8\");\n });\n child.stderr?.on(\"data\", (chunk) => {\n stderr += chunk.toString(\"utf8\");\n });\n child.on(\"error\", (err) => {\n settle({ ok: false, detail: err.message });\n });\n child.on(\"close\", (code) => {\n const text = `${stdout}\\n${stderr}`.trim();\n settle({\n ok: code === 0,\n detail:\n text\n .split(\"\\n\")\n .find((line) => line.trim().length > 0)\n ?.trim() ?? (code === 0 ? \"ready\" : `${command} exited ${code ?? 1}`),\n });\n });\n });\n}\n","import { spawn } from \"node:child_process\";\n\nimport type {\n AgentResult,\n AgentStreamMessage,\n AgentUsage,\n} from \"../types.js\";\n\nexport interface JsonlCliOptions {\n command: string;\n args: string[];\n cwd: string;\n env: NodeJS.ProcessEnv;\n onMessage?: (msg: AgentStreamMessage) => void;\n parseFinal: (msg: Record<string, unknown>) => Partial<AgentResult> | null;\n}\n\nexport function runJsonlCli(opts: JsonlCliOptions): Promise<AgentResult> {\n return new Promise((resolve) => {\n const child = spawn(opts.command, opts.args, {\n cwd: opts.cwd,\n env: opts.env,\n stdio: [\"ignore\", \"pipe\", \"pipe\"],\n });\n\n let stdoutBuf = \"\";\n let stderr = \"\";\n let cost = 0;\n let turns = 0;\n let result = \"\";\n let sessionId: string | undefined;\n let usage: AgentUsage | undefined;\n let success = false;\n let finalSeen = false;\n let error: string | undefined;\n\n const observe = (msg: Record<string, unknown>): void => {\n opts.onMessage?.(msg);\n if (\n sessionId === undefined &&\n typeof msg.session_id === \"string\" &&\n msg.session_id.length > 0\n ) {\n sessionId = msg.session_id;\n }\n if (\n sessionId === undefined &&\n typeof msg.thread_id === \"string\" &&\n msg.thread_id.length > 0\n ) {\n sessionId = msg.thread_id;\n }\n const final = opts.parseFinal(msg);\n if (final === null) return;\n finalSeen = true;\n if (final.cost !== undefined) cost = final.cost;\n if (final.turns !== undefined) turns = final.turns;\n if (final.result !== undefined) result = final.result;\n if (final.sessionId !== undefined) sessionId = final.sessionId;\n if (final.usage !== undefined) usage = final.usage;\n if (final.success !== undefined) success = final.success;\n if (final.error !== undefined) error = final.error;\n };\n\n const flushLines = (): void => {\n let idx = stdoutBuf.indexOf(\"\\n\");\n while (idx !== -1) {\n const rawLine = stdoutBuf.slice(0, idx);\n stdoutBuf = stdoutBuf.slice(idx + 1);\n const line = rawLine.trim();\n if (line.length > 0) {\n try {\n observe(JSON.parse(line) as Record<string, unknown>);\n } catch {\n // Ignore non-JSON chatter; stderr is captured for failures.\n }\n }\n idx = stdoutBuf.indexOf(\"\\n\");\n }\n };\n\n child.stdout.on(\"data\", (chunk) => {\n stdoutBuf += chunk.toString(\"utf8\");\n flushLines();\n });\n child.stderr.on(\"data\", (chunk) => {\n stderr += chunk.toString(\"utf8\");\n });\n child.on(\"error\", (err: NodeJS.ErrnoException) => {\n resolve({\n success: false,\n cost,\n turns,\n result,\n sessionId,\n usage,\n error:\n err.code === \"ENOENT\"\n ? `${opts.command} not found on PATH`\n : err.message,\n });\n });\n child.on(\"close\", (code) => {\n flushLines();\n if (stdoutBuf.trim().length > 0) {\n try {\n observe(JSON.parse(stdoutBuf.trim()) as Record<string, unknown>);\n } catch {\n // Ignore trailing non-JSON.\n }\n }\n\n if (code === 0 && finalSeen && success) {\n resolve({ success, cost, turns, result, sessionId, usage });\n return;\n }\n\n const firstStderr = stderr.trim().split(\"\\n\")[0];\n resolve({\n success: false,\n cost,\n turns,\n result,\n sessionId,\n usage,\n error:\n error ??\n (firstStderr !== undefined && firstStderr.length > 0\n ? firstStderr\n : `${opts.command} exited ${code ?? 1}`),\n });\n });\n });\n}\n\nexport function parseUsage(value: unknown): AgentUsage | undefined {\n if (value === null || typeof value !== \"object\") return undefined;\n const obj = value as Record<string, unknown>;\n return {\n inputTokens: numberField(obj, \"input_tokens\") ?? numberField(obj, \"inputTokens\"),\n cachedInputTokens:\n numberField(obj, \"cached_input_tokens\") ??\n numberField(obj, \"cachedInputTokens\") ??\n numberField(obj, \"cacheReadTokens\"),\n outputTokens:\n numberField(obj, \"output_tokens\") ?? numberField(obj, \"outputTokens\"),\n reasoningOutputTokens:\n numberField(obj, \"reasoning_output_tokens\") ??\n numberField(obj, \"reasoningOutputTokens\"),\n };\n}\n\nfunction numberField(\n input: Record<string, unknown>,\n key: string,\n): number | undefined {\n const value = input[key];\n return typeof value === \"number\" ? value : undefined;\n}\n","import type { AgentProviderMetadata, RunAgentOptions } from \"../types.js\";\n\nexport function combinedPrompt(\n opts: RunAgentOptions,\n metadata: AgentProviderMetadata,\n): string {\n const agentFallback = buildAgentFallback(opts, metadata);\n return `${opts.systemPrompt}${agentFallback}\\n\\n---\\n\\n${opts.prompt}`;\n}\n\nfunction buildAgentFallback(\n opts: RunAgentOptions,\n metadata: AgentProviderMetadata,\n): string {\n if (metadata.capabilities.supportsProgrammaticSubagents) return \"\";\n const agents = Object.entries(opts.agents ?? {});\n if (agents.length === 0) return \"\";\n\n return (\n \"\\n\\nNon-Claude provider note: this runtime does not receive Claude's \" +\n \"nested Agent tool contract. If the operation prompt asks you to invoke \" +\n \"a helper agent, perform that helper work inline before final edits. \" +\n \"Treat these helper prompts as read-only guidance:\\n\\n\" +\n agents\n .map(([name, agent]) => `## ${name}\\n\\n${agent.prompt}`)\n .join(\"\\n\\n\")\n );\n}\n","import type {\n AgentProvider,\n AgentProviderMetadata,\n AgentResult,\n ProviderStatus,\n RunAgentOptions,\n} from \"../types.js\";\nimport { commandExists, runStatusCommand } from \"./cli-status.js\";\nimport { parseUsage, runJsonlCli } from \"./jsonl-cli.js\";\nimport { combinedPrompt } from \"./prompt.js\";\n\nconst metadata: AgentProviderMetadata = {\n id: \"codex\",\n displayName: \"Codex\",\n defaultModel: null,\n executable: \"codex\",\n capabilities: {\n transport: \"cli-jsonl\",\n writesFiles: true,\n supportsModelOverride: true,\n supportsStreaming: true,\n supportsSessionId: false,\n supportsUsage: true,\n supportsCost: false,\n supportsProviderReportedTurns: false,\n supportsProgrammaticSubagents: false,\n supportsStrictToolAllowlist: false,\n },\n};\n\nexport const codexProvider: AgentProvider = {\n metadata,\n checkStatus,\n assertReady,\n run,\n};\n\nasync function run(opts: RunAgentOptions): Promise<AgentResult> {\n const args = [\n \"exec\",\n \"--json\",\n \"--sandbox\",\n \"workspace-write\",\n \"--skip-git-repo-check\",\n \"-C\",\n opts.cwd,\n ];\n if (opts.model !== undefined && opts.model.length > 0) {\n args.push(\"--model\", opts.model);\n }\n args.push(combinedPrompt({ ...opts, provider: \"codex\" }, metadata));\n\n return await runJsonlCli({\n command: metadata.executable,\n args,\n cwd: opts.cwd,\n env: { ...process.env, CODEALMANAC_INTERNAL_SESSION: \"1\" },\n onMessage: opts.onMessage,\n parseFinal: parseCodexFinal,\n });\n}\n\nasync function checkStatus(): Promise<ProviderStatus> {\n if (!commandExists(metadata.executable)) {\n return {\n id: metadata.id,\n installed: false,\n authenticated: false,\n detail: `${metadata.executable} not found on PATH`,\n };\n }\n\n const auth = await runStatusCommand(metadata.executable, [\"login\", \"status\"]);\n return {\n id: metadata.id,\n installed: true,\n authenticated: auth.ok,\n detail: auth.detail,\n };\n}\n\nasync function assertReady(): Promise<void> {\n const status = await checkStatus();\n if (!status.installed || !status.authenticated) {\n const err = new Error(`${status.id} not ready: ${status.detail}`);\n (err as { code?: string }).code = \"AGENT_AUTH_MISSING\";\n throw err;\n }\n}\n\nfunction parseCodexFinal(\n msg: Record<string, unknown>,\n): Partial<AgentResult> | null {\n if (msg.type === \"item.completed\") {\n const item = msg.item;\n if (item !== null && typeof item === \"object\") {\n const obj = item as Record<string, unknown>;\n if (obj.type === \"agent_message\" && typeof obj.text === \"string\") {\n return { result: obj.text };\n }\n }\n return null;\n }\n if (msg.type === \"turn.completed\") {\n return { success: true, turns: 1, usage: parseUsage(msg.usage) };\n }\n if (msg.type === \"turn.failed\" || msg.type === \"error\") {\n return {\n success: false,\n error:\n typeof msg.message === \"string\"\n ? msg.message\n : typeof msg.error === \"string\"\n ? msg.error\n : \"codex turn failed\",\n };\n }\n return null;\n}\n","import type {\n AgentProvider,\n AgentProviderMetadata,\n AgentResult,\n ProviderStatus,\n RunAgentOptions,\n} from \"../types.js\";\nimport { commandExists, runStatusCommand } from \"./cli-status.js\";\nimport { parseUsage, runJsonlCli } from \"./jsonl-cli.js\";\nimport { combinedPrompt } from \"./prompt.js\";\n\nconst metadata: AgentProviderMetadata = {\n id: \"cursor\",\n displayName: \"Cursor\",\n defaultModel: null,\n executable: \"cursor-agent\",\n capabilities: {\n transport: \"cli-jsonl\",\n writesFiles: true,\n supportsModelOverride: true,\n supportsStreaming: true,\n supportsSessionId: true,\n supportsUsage: true,\n supportsCost: false,\n supportsProviderReportedTurns: false,\n supportsProgrammaticSubagents: false,\n supportsStrictToolAllowlist: false,\n },\n};\n\nexport const cursorProvider: AgentProvider = {\n metadata,\n checkStatus,\n assertReady,\n run,\n};\n\nasync function run(opts: RunAgentOptions): Promise<AgentResult> {\n const args = [\n \"--print\",\n \"--output-format\",\n \"stream-json\",\n \"--stream-partial-output\",\n \"--trust\",\n \"--workspace\",\n opts.cwd,\n ];\n if (opts.model !== undefined && opts.model.length > 0) {\n args.push(\"--model\", opts.model);\n }\n args.push(combinedPrompt({ ...opts, provider: \"cursor\" }, metadata));\n\n return await runJsonlCli({\n command: metadata.executable,\n args,\n cwd: opts.cwd,\n env: { ...process.env, CODEALMANAC_INTERNAL_SESSION: \"1\" },\n onMessage: opts.onMessage,\n parseFinal: parseCursorFinal,\n });\n}\n\nasync function checkStatus(): Promise<ProviderStatus> {\n if (!commandExists(metadata.executable)) {\n return {\n id: metadata.id,\n installed: false,\n authenticated: false,\n detail: `${metadata.executable} not found on PATH`,\n };\n }\n\n const auth = await runStatusCommand(metadata.executable, [\"status\"]);\n return {\n id: metadata.id,\n installed: true,\n authenticated: auth.ok,\n detail: auth.detail,\n };\n}\n\nasync function assertReady(): Promise<void> {\n const status = await checkStatus();\n if (!status.installed || !status.authenticated) {\n const err = new Error(`${status.id} not ready: ${status.detail}`);\n (err as { code?: string }).code = \"AGENT_AUTH_MISSING\";\n throw err;\n }\n}\n\nfunction parseCursorFinal(\n msg: Record<string, unknown>,\n): Partial<AgentResult> | null {\n if (msg.type !== \"result\") return null;\n const isError = msg.is_error === true || msg.subtype !== \"success\";\n return {\n success: !isError,\n turns: 1,\n result: typeof msg.result === \"string\" ? msg.result : \"\",\n sessionId:\n typeof msg.session_id === \"string\" ? msg.session_id : undefined,\n usage: parseUsage(msg.usage),\n error: isError\n ? typeof msg.result === \"string\"\n ? msg.result\n : `cursor result: ${String(msg.subtype ?? \"error\")}`\n : undefined,\n };\n}\n","import {\n AGENT_PROVIDER_IDS,\n type AgentProviderId,\n} from \"../../update/config.js\";\nimport type { ProviderStatus, SpawnCliFn } from \"../types.js\";\nimport { getAgentProvider } from \"./index.js\";\n\nexport async function assertAgentAuth(args: {\n provider: AgentProviderId;\n spawnCli?: SpawnCliFn;\n}): Promise<void> {\n await getAgentProvider(args.provider).assertReady(args.spawnCli);\n}\n\nexport async function listProviderStatuses(\n spawnCli?: SpawnCliFn,\n): Promise<ProviderStatus[]> {\n const out: ProviderStatus[] = [];\n for (const id of AGENT_PROVIDER_IDS) {\n out.push(await getAgentProvider(id).checkStatus(spawnCli));\n }\n return out;\n}\n","import type { AgentProvider } from \"../types.js\";\nimport { claudeProvider, DEFAULT_AGENT_MODEL } from \"./claude/index.js\";\nimport { codexProvider } from \"./codex-cli.js\";\nimport { cursorProvider } from \"./cursor-cli.js\";\n\nconst AGENT_PROVIDERS = {\n claude: claudeProvider,\n codex: codexProvider,\n cursor: cursorProvider,\n} satisfies Record<string, AgentProvider>;\n\nexport function getAgentProvider(id: keyof typeof AGENT_PROVIDERS): AgentProvider {\n return AGENT_PROVIDERS[id];\n}\n\nexport const AGENT_PROVIDER_METADATA = {\n claude: claudeProvider.metadata,\n codex: codexProvider.metadata,\n cursor: cursorProvider.metadata,\n};\nexport { DEFAULT_AGENT_MODEL };\nexport { assertAgentAuth, listProviderStatuses } from \"./status.js\";\n","import {\n AGENT_PROVIDER_METADATA,\n listProviderStatuses,\n} from \"./providers.js\";\nimport type { ProviderStatus, SpawnCliFn } from \"./types.js\";\nimport {\n AGENT_PROVIDER_IDS,\n isAgentProviderId,\n readConfig,\n type AgentProviderId,\n type GlobalConfig,\n} from \"../update/config.js\";\n\nexport type ProviderReadiness = \"ready\" | \"not-authenticated\" | \"missing\";\n\nexport interface ProviderSetupChoice {\n id: AgentProviderId;\n label: string;\n selected: boolean;\n recommended: boolean;\n readiness: ProviderReadiness;\n ready: boolean;\n installed: boolean;\n authenticated: boolean;\n effectiveModel: string | null;\n providerDefaultModel: string | null;\n configuredModel: string | null;\n account: string | null;\n detail: string;\n fixCommand: string | null;\n modelChoices: ProviderModelChoice[];\n}\n\nexport interface ProviderModelChoice {\n value: string | null;\n label: string;\n recommended: boolean;\n source: \"configured\" | \"provider-default\" | \"custom\";\n}\n\nexport interface ProviderSetupView {\n defaultProvider: AgentProviderId;\n recommendedProvider: AgentProviderId;\n choices: ProviderSetupChoice[];\n}\n\nexport interface ProviderViewOptions {\n config?: GlobalConfig;\n statuses?: ProviderStatus[];\n spawnCli?: SpawnCliFn;\n}\n\nconst LOGIN_FIXES: Record<AgentProviderId, string> = {\n claude: \"run: claude auth login --claudeai\",\n codex: \"run: codex login\",\n cursor: \"run: cursor-agent login\",\n};\n\nconst INSTALL_FIXES: Record<AgentProviderId, string> = {\n claude: \"install Claude Code, then run: claude auth login --claudeai\",\n codex: \"install Codex CLI, then run: codex login\",\n cursor: \"install cursor-agent, then run: cursor-agent login\",\n};\n\nexport function getProviderLabel(id: AgentProviderId): string {\n return AGENT_PROVIDER_METADATA[id].displayName;\n}\n\nexport function getProviderDefaultModel(id: AgentProviderId): string | null {\n return AGENT_PROVIDER_METADATA[id].defaultModel;\n}\n\nexport async function buildProviderSetupView(\n opts: ProviderViewOptions = {},\n): Promise<ProviderSetupView> {\n const config = opts.config ?? await readConfig();\n const statuses = opts.statuses ?? await listProviderStatuses(opts.spawnCli);\n const statusById = new Map(statuses.map((status) => [status.id, status]));\n const recommendedProvider = chooseRecommendedProvider(statuses);\n const choices = AGENT_PROVIDER_IDS.map((id) => {\n const status = statusById.get(id) ?? missingStatus(id);\n const readiness = getReadiness(status);\n const configuredModel = normalizeModel(config.agent.models[id]);\n const providerDefaultModel = getProviderDefaultModel(id);\n const effectiveModel = configuredModel ?? providerDefaultModel;\n return {\n id,\n label: getProviderLabel(id),\n selected: id === config.agent.default,\n recommended: id === recommendedProvider,\n readiness,\n ready: readiness === \"ready\",\n installed: status.installed,\n authenticated: status.authenticated,\n effectiveModel,\n providerDefaultModel,\n configuredModel,\n account: status.authenticated ? accountFromDetail(status.detail) : null,\n detail: status.detail,\n fixCommand: fixFor(id, readiness),\n modelChoices: buildProviderModelChoices(id, configuredModel),\n };\n });\n return {\n defaultProvider: config.agent.default,\n recommendedProvider,\n choices,\n };\n}\n\nexport function buildProviderModelChoices(\n id: AgentProviderId,\n configuredModel: string | null = null,\n): ProviderModelChoice[] {\n const choices: ProviderModelChoice[] = [];\n if (configuredModel !== null) {\n choices.push({\n value: configuredModel,\n label: configuredModel,\n recommended: false,\n source: \"configured\",\n });\n }\n\n const providerDefault = getProviderDefaultModel(id);\n if (providerDefault !== null) {\n if (!choices.some((choice) => choice.value === providerDefault)) {\n choices.push({\n value: providerDefault,\n label: providerDefault,\n recommended: true,\n source: \"provider-default\",\n });\n } else {\n choices[0] = { ...choices[0]!, recommended: true };\n }\n } else {\n choices.push({\n value: null,\n label: \"provider default\",\n recommended: true,\n source: \"provider-default\",\n });\n }\n\n choices.push({\n value: \"__custom__\",\n label: \"custom model id\",\n recommended: false,\n source: \"custom\",\n });\n return choices;\n}\n\nexport function chooseRecommendedProvider(\n statuses: ProviderStatus[],\n): AgentProviderId {\n const ready = statuses\n .filter((status) => status.installed && status.authenticated)\n .map((status) => status.id);\n if (ready.includes(\"claude\")) return \"claude\";\n for (const id of AGENT_PROVIDER_IDS) {\n if (ready.includes(id)) return id;\n }\n return \"claude\";\n}\n\nexport function parseAgentSelection(value: string): {\n provider: AgentProviderId | null;\n model?: string;\n} {\n const [rawProvider, ...modelParts] = value.split(\"/\");\n if (rawProvider === undefined || !isAgentProviderId(rawProvider)) {\n return { provider: null };\n }\n const model = modelParts.join(\"/\");\n return {\n provider: rawProvider,\n model: model.length > 0 ? model : undefined,\n };\n}\n\nfunction getReadiness(status: ProviderStatus): ProviderReadiness {\n if (!status.installed) return \"missing\";\n if (!status.authenticated) return \"not-authenticated\";\n return \"ready\";\n}\n\nfunction fixFor(\n id: AgentProviderId,\n readiness: ProviderReadiness,\n): string | null {\n if (readiness === \"ready\") return null;\n if (readiness === \"missing\") return INSTALL_FIXES[id];\n return LOGIN_FIXES[id];\n}\n\nfunction accountFromDetail(detail: string): string | null {\n const clean = detail.trim();\n if (\n clean.length === 0 ||\n clean === \"ready\" ||\n clean === \"logged in\" ||\n clean === \"ANTHROPIC_API_KEY set\"\n ) {\n return null;\n }\n return clean;\n}\n\nfunction normalizeModel(value: string | null | undefined): string | null {\n return typeof value === \"string\" && value.length > 0 ? value : null;\n}\n\nfunction missingStatus(id: AgentProviderId): ProviderStatus {\n return {\n id,\n installed: false,\n authenticated: false,\n detail: \"provider status unavailable\",\n };\n}\n"],"mappings":"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","names":["spawn","metadata","metadata","checkStatus","assertReady","run","metadata","checkStatus","assertReady","run"]}
|
|
@@ -2,12 +2,12 @@
|
|
|
2
2
|
import {
|
|
3
3
|
checkForUpdate,
|
|
4
4
|
getStatePath
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-CQJVM34R.js";
|
|
6
6
|
import {
|
|
7
7
|
getConfigPath,
|
|
8
8
|
getLegacyConfigPath,
|
|
9
9
|
parseConfigText
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-5BWUMAOX.js";
|
|
11
11
|
|
|
12
12
|
// src/update/schedule.ts
|
|
13
13
|
import { spawn } from "child_process";
|
|
@@ -86,4 +86,4 @@ export {
|
|
|
86
86
|
runInternalUpdateCheck,
|
|
87
87
|
readStateForDoctor
|
|
88
88
|
};
|
|
89
|
-
//# sourceMappingURL=chunk-
|
|
89
|
+
//# sourceMappingURL=chunk-U5DLLWIC.js.map
|