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.
Files changed (86) hide show
  1. package/LICENSE +21 -133
  2. package/README.md +20 -15
  3. package/dist/{agents-HYRWRHRX.js → agents-V2ZOIACP.js} +6 -5
  4. package/dist/{chunk-PDFS5VFE.js → chunk-447U3GQJ.js} +5 -17
  5. package/dist/chunk-447U3GQJ.js.map +1 -0
  6. package/dist/{chunk-3E7JNMTZ.js → chunk-5BWUMAOX.js} +4 -29
  7. package/dist/chunk-5BWUMAOX.js.map +1 -0
  8. package/dist/{chunk-KQUVMF27.js → chunk-BFIG2CXM.js} +2 -516
  9. package/dist/chunk-BFIG2CXM.js.map +1 -0
  10. package/dist/{chunk-K2JBCB7R.js → chunk-BQY5L3DL.js} +7 -43
  11. package/dist/chunk-BQY5L3DL.js.map +1 -0
  12. package/dist/{chunk-F53U6JQG.js → chunk-CQJVM34R.js} +2 -2
  13. package/dist/chunk-FUBE6KCO.js +124 -0
  14. package/dist/chunk-FUBE6KCO.js.map +1 -0
  15. package/dist/chunk-IZBXXAVL.js +524 -0
  16. package/dist/chunk-IZBXXAVL.js.map +1 -0
  17. package/dist/{chunk-7JUX4ADQ.js → chunk-IZT6RBHS.js} +1 -1
  18. package/dist/{chunk-DW32TL5W.js → chunk-JLQZELHQ.js} +18 -58
  19. package/dist/chunk-JLQZELHQ.js.map +1 -0
  20. package/dist/{chunk-2BNDNGUR.js → chunk-KZXWPG4P.js} +4 -8
  21. package/dist/{chunk-2BNDNGUR.js.map → chunk-KZXWPG4P.js.map} +1 -1
  22. package/dist/{chunk-GPFVEF6V.js → chunk-QIA22IAM.js} +6 -24
  23. package/dist/chunk-QIA22IAM.js.map +1 -0
  24. package/dist/{chunk-J7DNV2DH.js → chunk-RALBM6HZ.js} +43 -355
  25. package/dist/chunk-RALBM6HZ.js.map +1 -0
  26. package/dist/{chunk-HJ3WREGP.js → chunk-U5DLLWIC.js} +3 -3
  27. package/dist/chunk-WL4UE7Q6.js +1386 -0
  28. package/dist/chunk-WL4UE7Q6.js.map +1 -0
  29. package/dist/{chunk-VXDPUOQ5.js → chunk-ZUQN5Y3K.js} +129 -382
  30. package/dist/chunk-ZUQN5Y3K.js.map +1 -0
  31. package/dist/{chunk-ODJAAJGZ.js → chunk-ZZLLOAI6.js} +3 -3
  32. package/dist/{cli-MKXCNEMW.js → cli-XWPNARA6.js} +37 -20
  33. package/dist/cli-XWPNARA6.js.map +1 -0
  34. package/dist/codealmanac.js +1 -1
  35. package/dist/{config-F7FKEQ7F.js → config-KH3JUMG6.js} +4 -4
  36. package/dist/doctor-ENJT665Z.js +18 -0
  37. package/dist/{hook-4SVX446M.js → hook-2NP3UE7U.js} +2 -4
  38. package/dist/paths-O5CZADP2.js +14 -0
  39. package/dist/process-KFSLENL3.js +61 -0
  40. package/dist/{register-commands-2F6SXLDI.js → register-commands-LULZUSPO.js} +999 -1030
  41. package/dist/register-commands-LULZUSPO.js.map +1 -0
  42. package/dist/uninstall-BD4MMQ7M.js +16 -0
  43. package/dist/uninstall-BD4MMQ7M.js.map +1 -0
  44. package/dist/update-XSKPDFMJ.js +11 -0
  45. package/dist/update-XSKPDFMJ.js.map +1 -0
  46. package/dist/{wiki-IGNRNLUZ.js → wiki-O4RWMAE6.js} +8 -6
  47. package/dist/wiki-O4RWMAE6.js.map +1 -0
  48. package/guides/mini.md +8 -6
  49. package/guides/reference.md +89 -32
  50. package/hooks/almanac-capture.sh +7 -8
  51. package/package.json +3 -4
  52. package/prompts/agents/.gitkeep +1 -0
  53. package/prompts/base/notability.md +139 -0
  54. package/prompts/base/purpose.md +85 -0
  55. package/prompts/base/syntax.md +114 -0
  56. package/prompts/operations/absorb.md +43 -0
  57. package/prompts/operations/build.md +49 -0
  58. package/prompts/operations/garden.md +51 -0
  59. package/COMMERCIAL.md +0 -9
  60. package/dist/chunk-3E7JNMTZ.js.map +0 -1
  61. package/dist/chunk-DW32TL5W.js.map +0 -1
  62. package/dist/chunk-GPFVEF6V.js.map +0 -1
  63. package/dist/chunk-J7DNV2DH.js.map +0 -1
  64. package/dist/chunk-K2JBCB7R.js.map +0 -1
  65. package/dist/chunk-KQUVMF27.js.map +0 -1
  66. package/dist/chunk-PDFS5VFE.js.map +0 -1
  67. package/dist/chunk-VXDPUOQ5.js.map +0 -1
  68. package/dist/cli-MKXCNEMW.js.map +0 -1
  69. package/dist/doctor-37UH3HT5.js +0 -17
  70. package/dist/register-commands-2F6SXLDI.js.map +0 -1
  71. package/dist/uninstall-C62ZOK32.js +0 -17
  72. package/dist/update-2UGOFN5C.js +0 -11
  73. package/dist/wiki-IGNRNLUZ.js.map +0 -1
  74. package/prompts/bootstrap.md +0 -176
  75. package/prompts/reviewer.md +0 -129
  76. package/prompts/writer.md +0 -134
  77. /package/dist/{agents-HYRWRHRX.js.map → agents-V2ZOIACP.js.map} +0 -0
  78. /package/dist/{chunk-F53U6JQG.js.map → chunk-CQJVM34R.js.map} +0 -0
  79. /package/dist/{chunk-7JUX4ADQ.js.map → chunk-IZT6RBHS.js.map} +0 -0
  80. /package/dist/{chunk-HJ3WREGP.js.map → chunk-U5DLLWIC.js.map} +0 -0
  81. /package/dist/{chunk-ODJAAJGZ.js.map → chunk-ZZLLOAI6.js.map} +0 -0
  82. /package/dist/{config-F7FKEQ7F.js.map → config-KH3JUMG6.js.map} +0 -0
  83. /package/dist/{doctor-37UH3HT5.js.map → doctor-ENJT665Z.js.map} +0 -0
  84. /package/dist/{hook-4SVX446M.js.map → hook-2NP3UE7U.js.map} +0 -0
  85. /package/dist/{uninstall-C62ZOK32.js.map → paths-O5CZADP2.js.map} +0 -0
  86. /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
- getEnabledAgentProviderIds,
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-3E7JNMTZ.js";
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 as spawn2, spawnSync as spawnSync2 } from "child_process";
107
+ import { spawn, spawnSync } from "child_process";
264
108
  var STATUS_TIMEOUT_MS = 3e3;
265
109
  function commandExists(command) {
266
- const result = spawnSync2("sh", ["-lc", `command -v ${command}`], {
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 = spawn2(command, args, { stdio: ["ignore", "pipe", "pipe"] });
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 spawn3 } from "child_process";
170
+ import { spawn as spawn2 } from "child_process";
368
171
  function runJsonlCli(opts) {
369
172
  return new Promise((resolve) => {
370
- const child = spawn3(opts.command, opts.args, {
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 reviewerFallback = buildReviewerFallback(opts, metadata4);
480
- return `${opts.systemPrompt}${reviewerFallback}
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 buildReviewerFallback(opts, metadata4) {
289
+ function buildAgentFallback(opts, metadata4) {
487
290
  if (metadata4.capabilities.supportsProgrammaticSubagents) return "";
488
- const reviewer = opts.agents?.reviewer;
489
- if (reviewer === void 0) return "";
490
- return "\n\nNon-Claude provider note: this runtime does not receive Claude's nested Agent tool contract. When the writer prompt asks you to invoke the reviewer subagent, perform that review pass yourself before final wiki edits. Treat this reviewer prompt as read-only review guidance:\n\n" + reviewer.prompt;
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(spawnCli) {
634
- if (spawnCli === void 0 && !commandExists(metadata2.executable)) {
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 = spawnCli !== void 0 ? await runInjectedStatusCommand(spawnCli, [
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(spawnCli) {
655
- const status = await checkStatus2(spawnCli);
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(spawnCli) {
734
- if (spawnCli === void 0 && !commandExists(metadata3.executable)) {
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 = spawnCli !== void 0 ? await runInjectedStatusCommand(spawnCli, [
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(spawnCli) {
754
- const status = await checkStatus3(spawnCli);
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 getEnabledAgentProviderIds()) {
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
- choices.push({
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: await buildProviderModelChoices(id, configuredModel, {
846
- spawnCli: opts.spawnCli
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, opts = {}) {
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: "Enter a model name",
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) => getReadiness(status) === "ready").map((status) => status.id);
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 getEnabledAgentProviderIds()) {
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-J7DNV2DH.js.map
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-F53U6JQG.js";
5
+ } from "./chunk-CQJVM34R.js";
6
6
  import {
7
7
  getConfigPath,
8
8
  getLegacyConfigPath,
9
9
  parseConfigText
10
- } from "./chunk-3E7JNMTZ.js";
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-HJ3WREGP.js.map
89
+ //# sourceMappingURL=chunk-U5DLLWIC.js.map