codealmanac 0.2.3 → 0.2.4

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 (57) hide show
  1. package/README.md +19 -6
  2. package/dist/agents-4Y7X24WW.js +25 -0
  3. package/dist/chunk-BF2J4XTC.js +766 -0
  4. package/dist/chunk-BF2J4XTC.js.map +1 -0
  5. package/dist/{chunk-HNVOYWC2.js → chunk-CW4HRLMS.js} +88 -7
  6. package/dist/chunk-CW4HRLMS.js.map +1 -0
  7. package/dist/{chunk-P3LDTCLB.js → chunk-H37GKBWI.js} +13 -1
  8. package/dist/chunk-H37GKBWI.js.map +1 -0
  9. package/dist/{chunk-NBVIEZZQ.js → chunk-H6QKCB7M.js} +2 -2
  10. package/dist/{chunk-QQHIVTXT.js → chunk-MRRX4UQB.js} +4 -4
  11. package/dist/{chunk-QQHIVTXT.js.map → chunk-MRRX4UQB.js.map} +1 -1
  12. package/dist/chunk-P5WGG4FJ.js +359 -0
  13. package/dist/chunk-P5WGG4FJ.js.map +1 -0
  14. package/dist/{chunk-XNTNXEWY.js → chunk-QRK3JLFX.js} +131 -49
  15. package/dist/chunk-QRK3JLFX.js.map +1 -0
  16. package/dist/{chunk-V3QOQSXI.js → chunk-TILAKDN6.js} +14 -8
  17. package/dist/chunk-TILAKDN6.js.map +1 -0
  18. package/dist/chunk-TT6ZP4GS.js +282 -0
  19. package/dist/chunk-TT6ZP4GS.js.map +1 -0
  20. package/dist/chunk-UU6FBRQO.js +187 -0
  21. package/dist/chunk-UU6FBRQO.js.map +1 -0
  22. package/dist/{cli-6BOB6KAN.js → cli-MYMZ66EN.js} +123 -33
  23. package/dist/cli-MYMZ66EN.js.map +1 -0
  24. package/dist/codealmanac.js +1 -1
  25. package/dist/config-ML2RCR7J.js +16 -0
  26. package/dist/doctor-W5KQQLAX.js +17 -0
  27. package/dist/{register-commands-IXYE5CNZ.js → register-commands-XTK2G2FB.js} +293 -395
  28. package/dist/register-commands-XTK2G2FB.js.map +1 -0
  29. package/dist/uninstall-N7JY7ZV2.js +15 -0
  30. package/dist/{update-RAF7QRYF.js → update-P2IPG7RO.js} +3 -3
  31. package/guides/mini.md +1 -1
  32. package/guides/reference.md +68 -9
  33. package/package.json +1 -1
  34. package/dist/agents-RVYQ44DB.js +0 -16
  35. package/dist/auth-S5DVUIUJ.js +0 -18
  36. package/dist/chunk-HNVOYWC2.js.map +0 -1
  37. package/dist/chunk-P3LDTCLB.js.map +0 -1
  38. package/dist/chunk-PIYJQE4Z.js +0 -102
  39. package/dist/chunk-PIYJQE4Z.js.map +0 -1
  40. package/dist/chunk-SSYMRT4I.js +0 -126
  41. package/dist/chunk-SSYMRT4I.js.map +0 -1
  42. package/dist/chunk-TWM7I2LU.js +0 -116
  43. package/dist/chunk-TWM7I2LU.js.map +0 -1
  44. package/dist/chunk-V3QOQSXI.js.map +0 -1
  45. package/dist/chunk-WRUSDYYE.js +0 -97
  46. package/dist/chunk-WRUSDYYE.js.map +0 -1
  47. package/dist/chunk-XNTNXEWY.js.map +0 -1
  48. package/dist/cli-6BOB6KAN.js.map +0 -1
  49. package/dist/doctor-DD7EQGCA.js +0 -18
  50. package/dist/register-commands-IXYE5CNZ.js.map +0 -1
  51. package/dist/uninstall-OBV4Z3JE.js +0 -16
  52. /package/dist/{agents-RVYQ44DB.js.map → agents-4Y7X24WW.js.map} +0 -0
  53. /package/dist/{chunk-NBVIEZZQ.js.map → chunk-H6QKCB7M.js.map} +0 -0
  54. /package/dist/{auth-S5DVUIUJ.js.map → config-ML2RCR7J.js.map} +0 -0
  55. /package/dist/{doctor-DD7EQGCA.js.map → doctor-W5KQQLAX.js.map} +0 -0
  56. /package/dist/{uninstall-OBV4Z3JE.js.map → uninstall-N7JY7ZV2.js.map} +0 -0
  57. /package/dist/{update-RAF7QRYF.js.map → update-P2IPG7RO.js.map} +0 -0
@@ -0,0 +1,187 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ buildProviderSetupView,
4
+ parseAgentSelection
5
+ } from "./chunk-BF2J4XTC.js";
6
+ import {
7
+ isAgentProviderId,
8
+ readConfig,
9
+ writeConfig
10
+ } from "./chunk-P5WGG4FJ.js";
11
+
12
+ // src/commands/agents.ts
13
+ async function runAgentsList() {
14
+ const view = await buildProviderSetupView();
15
+ const lines = ["codealmanac agents\n"];
16
+ for (const choice of view.choices) {
17
+ const selected = choice.selected ? "*" : " ";
18
+ const recommended = choice.recommended ? "recommended" : "";
19
+ const model = choice.effectiveModel ?? "provider default";
20
+ const detail = choice.account ?? choice.fixCommand ?? choice.detail;
21
+ lines.push(
22
+ [
23
+ selected,
24
+ choice.label.padEnd(6),
25
+ readinessLabel(choice.readiness).padEnd(15),
26
+ recommended.padEnd(11),
27
+ `model: ${model}`.padEnd(31),
28
+ detail
29
+ ].join(" ").trimEnd()
30
+ );
31
+ }
32
+ lines.push(
33
+ "\nUse: almanac agents use <claude|codex|cursor>",
34
+ "Set model: almanac agents model <provider> <model>"
35
+ );
36
+ return { stdout: `${lines.join("\n")}
37
+ `, stderr: "", exitCode: 0 };
38
+ }
39
+ async function runAgentsDoctor() {
40
+ const view = await buildProviderSetupView();
41
+ const lines = ["codealmanac agent doctor\n"];
42
+ for (const choice of view.choices) {
43
+ lines.push(`${choice.ready ? "\u2713" : "\u2717"} ${choice.label}`);
44
+ lines.push(` status: ${readinessLabel(choice.readiness)}`);
45
+ lines.push(` model: ${choice.effectiveModel ?? "provider default"}`);
46
+ if (choice.account !== null) {
47
+ lines.push(` account: ${choice.account}`);
48
+ } else if (choice.detail.length > 0) {
49
+ lines.push(` detail: ${choice.detail}`);
50
+ }
51
+ if (choice.fixCommand !== null) lines.push(` fix: ${choice.fixCommand}`);
52
+ lines.push("");
53
+ }
54
+ return { stdout: `${lines.join("\n").trimEnd()}
55
+ `, stderr: "", exitCode: 0 };
56
+ }
57
+ async function runSetDefaultAgent(opts) {
58
+ return setDefaultAgent(opts);
59
+ }
60
+ async function runDeprecatedSetDefaultAgent(opts) {
61
+ return withDeprecation(
62
+ await setDefaultAgent(opts),
63
+ "almanac set default-agent <provider>",
64
+ "almanac agents use <provider>"
65
+ );
66
+ }
67
+ async function runAgentsUse(opts) {
68
+ return setDefaultAgent(opts);
69
+ }
70
+ async function setDefaultAgent(opts) {
71
+ const parsed = parseAgentSelection(opts.provider);
72
+ if (parsed.provider === null) {
73
+ return {
74
+ stdout: "",
75
+ stderr: `almanac: unknown agent '${opts.provider}'. Expected one of: claude, codex, cursor.
76
+ `,
77
+ exitCode: 1
78
+ };
79
+ }
80
+ const provider = parsed.provider;
81
+ const config = await readConfig();
82
+ const next = {
83
+ ...config,
84
+ agent: {
85
+ ...config.agent,
86
+ default: provider,
87
+ models: parsed.model === void 0 ? config.agent.models : {
88
+ ...config.agent.models,
89
+ [provider]: parsed.model
90
+ }
91
+ }
92
+ };
93
+ await writeConfig(next);
94
+ return {
95
+ stdout: parsed.model === void 0 ? `codealmanac: default agent set to ${provider}.
96
+ ` : `codealmanac: default agent set to ${provider}; ${provider} model set to ${parsed.model}.
97
+ `,
98
+ stderr: "",
99
+ exitCode: 0
100
+ };
101
+ }
102
+ async function runSetAgentModel(opts) {
103
+ return setProviderModel(opts);
104
+ }
105
+ async function runDeprecatedSetAgentModel(opts) {
106
+ return withDeprecation(
107
+ await setProviderModel(opts),
108
+ "almanac set model <provider> <model>",
109
+ "almanac agents model <provider> <model>"
110
+ );
111
+ }
112
+ async function runAgentsModel(opts) {
113
+ return setProviderModel(opts);
114
+ }
115
+ async function setProviderModel(opts) {
116
+ if (!isAgentProviderId(opts.provider)) {
117
+ return {
118
+ stdout: "",
119
+ stderr: `almanac: unknown agent '${opts.provider}'. Expected one of: claude, codex, cursor.
120
+ `,
121
+ exitCode: 1
122
+ };
123
+ }
124
+ if (opts.defaultModel !== true && (opts.model === void 0 || opts.model.length === 0)) {
125
+ return {
126
+ stdout: "",
127
+ stderr: `almanac: missing model for ${opts.provider}. Pass a model id or --default.
128
+ `,
129
+ exitCode: 1
130
+ };
131
+ }
132
+ const provider = opts.provider;
133
+ const config = await readConfig();
134
+ const model = normalizeRequestedModel(opts);
135
+ await writeConfig({
136
+ ...config,
137
+ agent: {
138
+ ...config.agent,
139
+ models: {
140
+ ...config.agent.models,
141
+ [provider]: model
142
+ }
143
+ }
144
+ });
145
+ return {
146
+ stdout: model === null ? `codealmanac: ${provider} model reset to provider default.
147
+ ` : `codealmanac: ${provider} model set to ${model}.
148
+ `,
149
+ stderr: "",
150
+ exitCode: 0
151
+ };
152
+ }
153
+ function normalizeRequestedModel(opts) {
154
+ if (opts.defaultModel === true) return null;
155
+ if (opts.model === void 0 || opts.model.length === 0) return null;
156
+ if (opts.model === "default" || opts.model === "null") return null;
157
+ return opts.model;
158
+ }
159
+ function readinessLabel(readiness) {
160
+ switch (readiness) {
161
+ case "ready":
162
+ return "ready";
163
+ case "missing":
164
+ return "missing";
165
+ case "not-authenticated":
166
+ return "not ready";
167
+ }
168
+ }
169
+ function withDeprecation(result, oldUsage, newUsage) {
170
+ return {
171
+ ...result,
172
+ stderr: `almanac: warning: \`${oldUsage}\` is deprecated; use \`${newUsage}\`.
173
+ ` + result.stderr
174
+ };
175
+ }
176
+
177
+ export {
178
+ runAgentsList,
179
+ runAgentsDoctor,
180
+ runSetDefaultAgent,
181
+ runDeprecatedSetDefaultAgent,
182
+ runAgentsUse,
183
+ runSetAgentModel,
184
+ runDeprecatedSetAgentModel,
185
+ runAgentsModel
186
+ };
187
+ //# sourceMappingURL=chunk-UU6FBRQO.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/commands/agents.ts"],"sourcesContent":["import {\n buildProviderSetupView,\n parseAgentSelection,\n type ProviderReadiness,\n} from \"../agent/provider-view.js\";\nimport {\n isAgentProviderId,\n readConfig,\n writeConfig,\n type AgentProviderId,\n} from \"../update/config.js\";\n\nexport interface AgentsResult {\n stdout: string;\n stderr: string;\n exitCode: number;\n}\n\nexport async function runAgentsList(): Promise<AgentsResult> {\n const view = await buildProviderSetupView();\n const lines = [\"codealmanac agents\\n\"];\n for (const choice of view.choices) {\n const selected = choice.selected ? \"*\" : \" \";\n const recommended = choice.recommended ? \"recommended\" : \"\";\n const model = choice.effectiveModel ?? \"provider default\";\n const detail = choice.account ?? choice.fixCommand ?? choice.detail;\n lines.push(\n [\n selected,\n choice.label.padEnd(6),\n readinessLabel(choice.readiness).padEnd(15),\n recommended.padEnd(11),\n `model: ${model}`.padEnd(31),\n detail,\n ].join(\" \").trimEnd(),\n );\n }\n lines.push(\n \"\\nUse: almanac agents use <claude|codex|cursor>\",\n \"Set model: almanac agents model <provider> <model>\",\n );\n return { stdout: `${lines.join(\"\\n\")}\\n`, stderr: \"\", exitCode: 0 };\n}\n\nexport async function runAgentsDoctor(): Promise<AgentsResult> {\n const view = await buildProviderSetupView();\n const lines = [\"codealmanac agent doctor\\n\"];\n for (const choice of view.choices) {\n lines.push(`${choice.ready ? \"✓\" : \"✗\"} ${choice.label}`);\n lines.push(` status: ${readinessLabel(choice.readiness)}`);\n lines.push(` model: ${choice.effectiveModel ?? \"provider default\"}`);\n if (choice.account !== null) {\n lines.push(` account: ${choice.account}`);\n } else if (choice.detail.length > 0) {\n lines.push(` detail: ${choice.detail}`);\n }\n if (choice.fixCommand !== null) lines.push(` fix: ${choice.fixCommand}`);\n lines.push(\"\");\n }\n return { stdout: `${lines.join(\"\\n\").trimEnd()}\\n`, stderr: \"\", exitCode: 0 };\n}\n\nexport interface SetDefaultAgentOptions {\n provider: string;\n}\n\nexport async function runSetDefaultAgent(\n opts: SetDefaultAgentOptions,\n): Promise<AgentsResult> {\n return setDefaultAgent(opts);\n}\n\nexport async function runDeprecatedSetDefaultAgent(\n opts: SetDefaultAgentOptions,\n): Promise<AgentsResult> {\n return withDeprecation(\n await setDefaultAgent(opts),\n \"almanac set default-agent <provider>\",\n \"almanac agents use <provider>\",\n );\n}\n\nexport async function runAgentsUse(opts: SetDefaultAgentOptions): Promise<AgentsResult> {\n return setDefaultAgent(opts);\n}\n\nasync function setDefaultAgent(\n opts: SetDefaultAgentOptions,\n): Promise<AgentsResult> {\n const parsed = parseAgentSelection(opts.provider);\n if (parsed.provider === null) {\n return {\n stdout: \"\",\n stderr:\n `almanac: unknown agent '${opts.provider}'. ` +\n \"Expected one of: claude, codex, cursor.\\n\",\n exitCode: 1,\n };\n }\n const provider = parsed.provider;\n const config = await readConfig();\n const next = {\n ...config,\n agent: {\n ...config.agent,\n default: provider,\n models:\n parsed.model === undefined\n ? config.agent.models\n : {\n ...config.agent.models,\n [provider]: parsed.model,\n },\n },\n };\n await writeConfig(next);\n return {\n stdout:\n parsed.model === undefined\n ? `codealmanac: default agent set to ${provider}.\\n`\n : `codealmanac: default agent set to ${provider}; ${provider} model set to ${parsed.model}.\\n`,\n stderr: \"\",\n exitCode: 0,\n };\n}\n\nexport async function runSetAgentModel(opts: {\n provider: string;\n model?: string;\n defaultModel?: boolean;\n}): Promise<AgentsResult> {\n return setProviderModel(opts);\n}\n\nexport async function runDeprecatedSetAgentModel(opts: {\n provider: string;\n model?: string;\n defaultModel?: boolean;\n}): Promise<AgentsResult> {\n return withDeprecation(\n await setProviderModel(opts),\n \"almanac set model <provider> <model>\",\n \"almanac agents model <provider> <model>\",\n );\n}\n\nexport async function runAgentsModel(opts: {\n provider: string;\n model?: string;\n defaultModel?: boolean;\n}): Promise<AgentsResult> {\n return setProviderModel(opts);\n}\n\nasync function setProviderModel(opts: {\n provider: string;\n model?: string;\n defaultModel?: boolean;\n}): Promise<AgentsResult> {\n if (!isAgentProviderId(opts.provider)) {\n return {\n stdout: \"\",\n stderr:\n `almanac: unknown agent '${opts.provider}'. ` +\n \"Expected one of: claude, codex, cursor.\\n\",\n exitCode: 1,\n };\n }\n if (\n opts.defaultModel !== true &&\n (opts.model === undefined || opts.model.length === 0)\n ) {\n return {\n stdout: \"\",\n stderr:\n `almanac: missing model for ${opts.provider}. ` +\n \"Pass a model id or --default.\\n\",\n exitCode: 1,\n };\n }\n const provider = opts.provider as AgentProviderId;\n const config = await readConfig();\n const model = normalizeRequestedModel(opts);\n await writeConfig({\n ...config,\n agent: {\n ...config.agent,\n models: {\n ...config.agent.models,\n [provider]: model,\n },\n },\n });\n return {\n stdout:\n model === null\n ? `codealmanac: ${provider} model reset to provider default.\\n`\n : `codealmanac: ${provider} model set to ${model}.\\n`,\n stderr: \"\",\n exitCode: 0,\n };\n}\n\nfunction normalizeRequestedModel(opts: {\n provider: string;\n model?: string;\n defaultModel?: boolean;\n}): string | null {\n if (opts.defaultModel === true) return null;\n if (opts.model === undefined || opts.model.length === 0) return null;\n if (opts.model === \"default\" || opts.model === \"null\") return null;\n return opts.model;\n}\n\nfunction readinessLabel(readiness: ProviderReadiness): string {\n switch (readiness) {\n case \"ready\":\n return \"ready\";\n case \"missing\":\n return \"missing\";\n case \"not-authenticated\":\n return \"not ready\";\n }\n}\n\nfunction withDeprecation(\n result: AgentsResult,\n oldUsage: string,\n newUsage: string,\n): AgentsResult {\n return {\n ...result,\n stderr:\n `almanac: warning: \\`${oldUsage}\\` is deprecated; use \\`${newUsage}\\`.\\n` +\n result.stderr,\n };\n}\n"],"mappings":"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","names":[]}
@@ -1,11 +1,11 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  emit
4
- } from "./chunk-P3LDTCLB.js";
4
+ } from "./chunk-H37GKBWI.js";
5
5
  import {
6
6
  runInternalUpdateCheck,
7
7
  scheduleBackgroundUpdateCheck
8
- } from "./chunk-V3QOQSXI.js";
8
+ } from "./chunk-TILAKDN6.js";
9
9
  import {
10
10
  BLUE,
11
11
  BOLD,
@@ -14,17 +14,18 @@ import {
14
14
  } from "./chunk-FM3VRDK7.js";
15
15
  import {
16
16
  runSetup
17
- } from "./chunk-XNTNXEWY.js";
17
+ } from "./chunk-QRK3JLFX.js";
18
18
  import "./chunk-447U3GQJ.js";
19
- import "./chunk-TWM7I2LU.js";
20
- import "./chunk-SSYMRT4I.js";
19
+ import "./chunk-BF2J4XTC.js";
21
20
  import {
22
21
  getStatePath,
23
22
  isNewer
24
23
  } from "./chunk-F53U6JQG.js";
25
24
  import {
26
- getConfigPath
27
- } from "./chunk-WRUSDYYE.js";
25
+ getConfigPath,
26
+ getLegacyConfigPath,
27
+ parseConfigText
28
+ } from "./chunk-P5WGG4FJ.js";
28
29
  import "./chunk-7JUX4ADQ.js";
29
30
 
30
31
  // src/cli.ts
@@ -44,11 +45,15 @@ var HELP_GROUPS = [
44
45
  },
45
46
  {
46
47
  title: "Wiki lifecycle",
47
- commands: ["bootstrap", "capture", "ps", "hook", "reindex"]
48
+ commands: ["bootstrap", "capture", "hook", "reindex"]
48
49
  },
49
50
  {
50
51
  title: "Setup",
51
- commands: ["setup", "uninstall", "doctor", "update"]
52
+ commands: ["agents", "config", "setup", "uninstall", "doctor", "update"]
53
+ },
54
+ {
55
+ title: "Deprecated",
56
+ commands: ["set", "ps"]
52
57
  }
53
58
  ];
54
59
  function configureGroupedHelp(program) {
@@ -365,20 +370,27 @@ function readStateSync(path2) {
365
370
  }
366
371
  }
367
372
  function shouldNotify(configPath) {
373
+ const loaded = readConfigSync(configPath);
374
+ if (loaded === null) {
375
+ const legacy = configPath.endsWith(".toml") ? readConfigSync(getLegacyConfigPath()) : null;
376
+ if (legacy === null) return true;
377
+ return legacy.update_notifier !== false;
378
+ }
379
+ return loaded.update_notifier !== false;
380
+ }
381
+ function readConfigSync(configPath) {
368
382
  let raw;
369
383
  try {
370
384
  raw = readFileSync(configPath, "utf8");
371
385
  } catch {
372
- return true;
386
+ return null;
373
387
  }
374
388
  const trimmed = raw.trim();
375
- if (trimmed.length === 0) return true;
389
+ if (trimmed.length === 0) return null;
376
390
  try {
377
- const parsed = JSON.parse(trimmed);
378
- if (parsed.update_notifier === false) return false;
379
- return true;
391
+ return parseConfigText(trimmed, configPath);
380
392
  } catch {
381
- return true;
393
+ return null;
382
394
  }
383
395
  }
384
396
  function readInstalledVersion() {
@@ -449,7 +461,7 @@ async function run(argv, deps = {}) {
449
461
  if (await tryRunSqliteFreeCommand(argv.slice(2), runSetupFn)) {
450
462
  return;
451
463
  }
452
- const { registerCommands } = await import("./register-commands-IXYE5CNZ.js");
464
+ const { registerCommands } = await import("./register-commands-XTK2G2FB.js");
453
465
  registerCommands(program);
454
466
  configureGroupedHelp(program);
455
467
  await program.parseAsync(argv);
@@ -462,13 +474,8 @@ function isRootVersionInvocation(args) {
462
474
  return args.length === 1 && (args[0] === "--version" || args[0] === "-v");
463
475
  }
464
476
  function parseSetupFlags(args) {
465
- const agentIdx = args.indexOf("--agent");
466
- return {
467
- yes: args.includes("--yes") || args.includes("-y"),
468
- agent: agentIdx === -1 ? void 0 : args[agentIdx + 1],
469
- skipHook: args.includes("--skip-hook"),
470
- skipGuides: args.includes("--skip-guides")
471
- };
477
+ const options = parseSetupShortcutFlags(args);
478
+ return options === null ? { ok: false, error: "invalid setup option value" } : { ok: true, options };
472
479
  }
473
480
  function parseUpdateFlags(args) {
474
481
  return {
@@ -497,7 +504,13 @@ async function tryRunSqliteFreeCommand(args, runSetupFn) {
497
504
  const [command, subcommand] = args;
498
505
  if (command === void 0) return false;
499
506
  if (command === "setup") {
500
- emit(await runSetupFn(parseSetupFlags(args.slice(1))));
507
+ const parsed = parseSetupFlags(args.slice(1));
508
+ if (parsed.ok === false) {
509
+ emit({ stdout: "", stderr: `almanac: ${parsed.error}
510
+ `, exitCode: 1 });
511
+ return true;
512
+ }
513
+ emit(await runSetupFn(parsed.options));
501
514
  return true;
502
515
  }
503
516
  if (command === "hook") {
@@ -517,32 +530,97 @@ async function tryRunSqliteFreeCommand(args, runSetupFn) {
517
530
  return false;
518
531
  }
519
532
  if (command === "agents") {
520
- const { runAgentsList } = await import("./agents-RVYQ44DB.js");
533
+ const {
534
+ runAgentsDoctor,
535
+ runAgentsList,
536
+ runAgentsModel,
537
+ runAgentsUse
538
+ } = await import("./agents-4Y7X24WW.js");
521
539
  if (subcommand === "list" || subcommand === void 0) {
522
540
  emit(await runAgentsList());
523
541
  return true;
524
542
  }
543
+ if (subcommand === "doctor") {
544
+ emit(await runAgentsDoctor());
545
+ return true;
546
+ }
547
+ if (subcommand === "use") {
548
+ emit(await runAgentsUse({ provider: args[2] ?? "" }));
549
+ return true;
550
+ }
551
+ if (subcommand === "model") {
552
+ emit(await runAgentsModel({
553
+ provider: args[2] ?? "",
554
+ model: args[3] === "--default" ? void 0 : args[3],
555
+ defaultModel: args.includes("--default")
556
+ }));
557
+ return true;
558
+ }
559
+ return false;
560
+ }
561
+ if (command === "config") {
562
+ const {
563
+ runConfigGet,
564
+ runConfigList,
565
+ runConfigSet,
566
+ runConfigUnset
567
+ } = await import("./config-ML2RCR7J.js");
568
+ if (subcommand === "list" || subcommand === void 0) {
569
+ emit(await runConfigList({
570
+ json: args.includes("--json"),
571
+ showOrigin: args.includes("--show-origin")
572
+ }));
573
+ return true;
574
+ }
575
+ if (subcommand === "get") {
576
+ emit(await runConfigGet({
577
+ key: args[2] ?? "",
578
+ json: args.includes("--json"),
579
+ showOrigin: args.includes("--show-origin")
580
+ }));
581
+ return true;
582
+ }
583
+ if (subcommand === "set") {
584
+ const values = args.slice(2).filter((arg) => arg !== "--project");
585
+ emit(await runConfigSet({
586
+ key: values[0] ?? "",
587
+ value: values[1],
588
+ project: args.includes("--project")
589
+ }));
590
+ return true;
591
+ }
592
+ if (subcommand === "unset") {
593
+ const values = args.slice(2).filter((arg) => arg !== "--project");
594
+ emit(await runConfigUnset({
595
+ key: values[0] ?? "",
596
+ project: args.includes("--project")
597
+ }));
598
+ return true;
599
+ }
525
600
  return false;
526
601
  }
527
602
  if (command === "set") {
528
- const { runSetAgentModel, runSetDefaultAgent } = await import("./agents-RVYQ44DB.js");
603
+ const { runDeprecatedSetAgentModel, runDeprecatedSetDefaultAgent } = await import("./agents-4Y7X24WW.js");
529
604
  if (subcommand === "default-agent") {
530
- emit(await runSetDefaultAgent({ provider: args[2] ?? "" }));
605
+ emit(await runDeprecatedSetDefaultAgent({ provider: args[2] ?? "" }));
531
606
  return true;
532
607
  }
533
608
  if (subcommand === "model") {
534
- emit(await runSetAgentModel({ provider: args[2] ?? "", model: args[3] }));
609
+ emit(await runDeprecatedSetAgentModel({
610
+ provider: args[2] ?? "",
611
+ model: args[3]
612
+ }));
535
613
  return true;
536
614
  }
537
615
  return false;
538
616
  }
539
617
  if (command === "update") {
540
- const { runUpdate } = await import("./update-RAF7QRYF.js");
618
+ const { runUpdate } = await import("./update-P2IPG7RO.js");
541
619
  emit(await runUpdate(parseUpdateFlags(args.slice(1))));
542
620
  return true;
543
621
  }
544
622
  if (command === "doctor") {
545
- const { runDoctor } = await import("./doctor-DD7EQGCA.js");
623
+ const { runDoctor } = await import("./doctor-W5KQQLAX.js");
546
624
  emit(await runDoctor({
547
625
  cwd: process.cwd(),
548
626
  ...parseDoctorFlags(args.slice(1))
@@ -550,7 +628,7 @@ async function tryRunSqliteFreeCommand(args, runSetupFn) {
550
628
  return true;
551
629
  }
552
630
  if (command === "uninstall") {
553
- const { runUninstall } = await import("./uninstall-OBV4Z3JE.js");
631
+ const { runUninstall } = await import("./uninstall-N7JY7ZV2.js");
554
632
  emit(await runUninstall(parseUninstallFlags(args.slice(1))));
555
633
  return true;
556
634
  }
@@ -577,6 +655,9 @@ function readPackageVersion2() {
577
655
  }
578
656
  function tryParseSetupShortcut(args) {
579
657
  if (args.length === 0) return {};
658
+ return parseSetupShortcutFlags(args);
659
+ }
660
+ function parseSetupShortcutFlags(args) {
580
661
  const opts = {};
581
662
  for (let i = 0; i < args.length; i++) {
582
663
  const arg = args[i];
@@ -585,7 +666,16 @@ function tryParseSetupShortcut(args) {
585
666
  continue;
586
667
  }
587
668
  if (arg === "--agent") {
588
- opts.agent = args[i + 1];
669
+ const value = args[i + 1];
670
+ if (value === void 0 || value.startsWith("-")) return null;
671
+ opts.agent = value;
672
+ i += 1;
673
+ continue;
674
+ }
675
+ if (arg === "--model") {
676
+ const value = args[i + 1];
677
+ if (value === void 0 || value.startsWith("-")) return null;
678
+ opts.model = value;
589
679
  i += 1;
590
680
  continue;
591
681
  }
@@ -605,4 +695,4 @@ export {
605
695
  run,
606
696
  tryParseSetupShortcut
607
697
  };
608
- //# sourceMappingURL=cli-6BOB6KAN.js.map
698
+ //# sourceMappingURL=cli-MYMZ66EN.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/cli.ts","../src/cli/help.ts","../src/install/global.ts","../src/update/announce.ts"],"sourcesContent":["import { createRequire } from \"node:module\";\nimport { basename } from \"node:path\";\n\nimport { Command } from \"commander\";\n\nimport { runSetup } from \"./commands/setup.js\";\nimport { configureGroupedHelp } from \"./cli/help.js\";\nimport { emit } from \"./cli/helpers.js\";\nimport { runCodealmanacBootstrap } from \"./install/global.js\";\nimport { announceUpdateIfAvailable } from \"./update/announce.js\";\nimport {\n runInternalUpdateCheck,\n scheduleBackgroundUpdateCheck,\n} from \"./update/schedule.js\";\n\n/**\n * Optional dependency overrides for `run`. Tests use these to avoid\n * spawning the real setup wizard, the real update background check,\n * and the real update banner. Production callers pass nothing.\n */\nexport interface RunDeps {\n /** Replace the setup wizard (bare `codealmanac` / `almanac setup`). */\n runSetup?: typeof runSetup;\n /** Replace the bare-`codealmanac` global install bootstrapper. */\n runCodealmanacBootstrap?: typeof runCodealmanacBootstrap;\n /** Replace the pre-command update-nag banner. */\n announceUpdate?: (stderr: NodeJS.WritableStream) => void;\n /** Replace the post-command background update check scheduler. */\n scheduleUpdateCheck?: (argv: string[]) => void;\n /** Replace the internal update-check worker (run on --internal-check-updates). */\n runInternalUpdateCheck?: () => Promise<void>;\n}\n\n/**\n * Process-level CLI entrypoint. This owns invocation-level behavior:\n * update checks, bare `codealmanac` setup routing, Commander creation,\n * grouped help, and parsing. Individual command wiring lives in\n * `src/cli/register-commands.ts`.\n */\nexport async function run(argv: string[], deps: RunDeps = {}): Promise<void> {\n const runSetupFn = deps.runSetup ?? runSetup;\n const runCodealmanacBootstrapFn =\n deps.runCodealmanacBootstrap ?? runCodealmanacBootstrap;\n const announceUpdateFn = deps.announceUpdate ?? announceUpdateIfAvailable;\n const scheduleUpdateCheckFn =\n deps.scheduleUpdateCheck ?? scheduleBackgroundUpdateCheck;\n const runInternalUpdateCheckFn =\n deps.runInternalUpdateCheck ?? runInternalUpdateCheck;\n\n if (argv.slice(2).includes(\"--internal-check-updates\")) {\n await runInternalUpdateCheckFn();\n return;\n }\n\n const programName = getProgramName(argv);\n\n announceUpdateFn(process.stderr);\n scheduleUpdateCheckFn(argv);\n\n const program = new Command();\n program\n .name(programName)\n .description(\n \"codealmanac — a living wiki for codebases, maintained by AI agents\",\n )\n .version(readPackageVersion(), \"-v, --version\", \"print version\");\n\n if (isRootVersionInvocation(argv.slice(2))) {\n await program.parseAsync(argv);\n return;\n }\n\n if (programName === \"codealmanac\") {\n const setupInvocation = tryParseSetupShortcut(argv.slice(2));\n if (setupInvocation !== null) {\n if (deps.runCodealmanacBootstrap !== undefined) {\n emit(\n await runCodealmanacBootstrapFn({\n setupOptions: setupInvocation,\n setupArgs: argv.slice(2),\n }),\n );\n } else if (deps.runSetup !== undefined) {\n emit(await runSetupFn(setupInvocation));\n } else {\n emit(\n await runCodealmanacBootstrapFn({\n setupOptions: setupInvocation,\n setupArgs: argv.slice(2),\n }),\n );\n }\n return;\n }\n }\n\n if (await tryRunSqliteFreeCommand(argv.slice(2), runSetupFn)) {\n return;\n }\n\n const { registerCommands } = await import(\"./cli/register-commands.js\");\n registerCommands(program);\n configureGroupedHelp(program);\n\n await program.parseAsync(argv);\n}\n\nfunction getProgramName(argv: string[]): \"almanac\" | \"codealmanac\" {\n const invoked = argv[1] !== undefined ? basename(argv[1]) : \"almanac\";\n return invoked === \"codealmanac\" ? \"codealmanac\" : \"almanac\";\n}\n\nfunction isRootVersionInvocation(args: string[]): boolean {\n return args.length === 1 && (args[0] === \"--version\" || args[0] === \"-v\");\n}\n\nfunction parseSetupFlags(args: string[]): {\n ok: true;\n options: SetupShortcutOptions;\n} | {\n ok: false;\n error: string;\n} {\n const options = parseSetupShortcutFlags(args);\n return options === null\n ? { ok: false, error: \"invalid setup option value\" }\n : { ok: true, options };\n}\n\nfunction parseUpdateFlags(args: string[]): {\n dismiss?: boolean;\n check?: boolean;\n enableNotifier?: boolean;\n disableNotifier?: boolean;\n} {\n return {\n dismiss: args.includes(\"--dismiss\"),\n check: args.includes(\"--check\"),\n enableNotifier: args.includes(\"--enable-notifier\"),\n disableNotifier: args.includes(\"--disable-notifier\"),\n };\n}\n\nfunction parseUninstallFlags(args: string[]): {\n yes?: boolean;\n keepHook?: boolean;\n keepGuides?: boolean;\n} {\n return {\n yes: args.includes(\"--yes\") || args.includes(\"-y\"),\n keepHook: args.includes(\"--keep-hook\"),\n keepGuides: args.includes(\"--keep-guides\"),\n };\n}\n\nfunction parseDoctorFlags(args: string[]): {\n json?: boolean;\n installOnly?: boolean;\n wikiOnly?: boolean;\n} {\n return {\n json: args.includes(\"--json\"),\n installOnly: args.includes(\"--install-only\"),\n wikiOnly: args.includes(\"--wiki-only\"),\n };\n}\n\nasync function tryRunSqliteFreeCommand(\n args: string[],\n runSetupFn: typeof runSetup,\n): Promise<boolean> {\n if (args.includes(\"--help\") || args.includes(\"-h\")) return false;\n\n const [command, subcommand] = args;\n if (command === undefined) return false;\n\n if (command === \"setup\") {\n const parsed = parseSetupFlags(args.slice(1));\n if (parsed.ok === false) {\n emit({ stdout: \"\", stderr: `almanac: ${parsed.error}\\n`, exitCode: 1 });\n return true;\n }\n emit(await runSetupFn(parsed.options));\n return true;\n }\n\n if (command === \"hook\") {\n const { runHookInstall, runHookStatus, runHookUninstall } = await import(\n \"./commands/hook.js\"\n );\n if (subcommand === \"install\") {\n emit(await runHookInstall({ source: parseHookSource(args.slice(2)) }));\n return true;\n }\n if (subcommand === \"uninstall\") {\n emit(await runHookUninstall());\n return true;\n }\n if (subcommand === \"status\") {\n emit(await runHookStatus());\n return true;\n }\n return false;\n }\n\n if (command === \"agents\") {\n const {\n runAgentsDoctor,\n runAgentsList,\n runAgentsModel,\n runAgentsUse,\n } = await import(\"./commands/agents.js\");\n if (subcommand === \"list\" || subcommand === undefined) {\n emit(await runAgentsList());\n return true;\n }\n if (subcommand === \"doctor\") {\n emit(await runAgentsDoctor());\n return true;\n }\n if (subcommand === \"use\") {\n emit(await runAgentsUse({ provider: args[2] ?? \"\" }));\n return true;\n }\n if (subcommand === \"model\") {\n emit(await runAgentsModel({\n provider: args[2] ?? \"\",\n model: args[3] === \"--default\" ? undefined : args[3],\n defaultModel: args.includes(\"--default\"),\n }));\n return true;\n }\n return false;\n }\n\n if (command === \"config\") {\n const {\n runConfigGet,\n runConfigList,\n runConfigSet,\n runConfigUnset,\n } = await import(\"./commands/config.js\");\n if (subcommand === \"list\" || subcommand === undefined) {\n emit(await runConfigList({\n json: args.includes(\"--json\"),\n showOrigin: args.includes(\"--show-origin\"),\n }));\n return true;\n }\n if (subcommand === \"get\") {\n emit(await runConfigGet({\n key: args[2] ?? \"\",\n json: args.includes(\"--json\"),\n showOrigin: args.includes(\"--show-origin\"),\n }));\n return true;\n }\n if (subcommand === \"set\") {\n const values = args.slice(2).filter((arg) => arg !== \"--project\");\n emit(await runConfigSet({\n key: values[0] ?? \"\",\n value: values[1],\n project: args.includes(\"--project\"),\n }));\n return true;\n }\n if (subcommand === \"unset\") {\n const values = args.slice(2).filter((arg) => arg !== \"--project\");\n emit(await runConfigUnset({\n key: values[0] ?? \"\",\n project: args.includes(\"--project\"),\n }));\n return true;\n }\n return false;\n }\n\n if (command === \"set\") {\n const { runDeprecatedSetAgentModel, runDeprecatedSetDefaultAgent } = await import(\n \"./commands/agents.js\"\n );\n if (subcommand === \"default-agent\") {\n emit(await runDeprecatedSetDefaultAgent({ provider: args[2] ?? \"\" }));\n return true;\n }\n if (subcommand === \"model\") {\n emit(await runDeprecatedSetAgentModel({\n provider: args[2] ?? \"\",\n model: args[3],\n }));\n return true;\n }\n return false;\n }\n\n if (command === \"update\") {\n const { runUpdate } = await import(\"./commands/update.js\");\n emit(await runUpdate(parseUpdateFlags(args.slice(1))));\n return true;\n }\n\n if (command === \"doctor\") {\n const { runDoctor } = await import(\"./commands/doctor.js\");\n emit(await runDoctor({\n cwd: process.cwd(),\n ...parseDoctorFlags(args.slice(1)),\n }));\n return true;\n }\n\n if (command === \"uninstall\") {\n const { runUninstall } = await import(\"./commands/uninstall.js\");\n emit(await runUninstall(parseUninstallFlags(args.slice(1))));\n return true;\n }\n\n return false;\n}\n\nfunction parseHookSource(\n args: string[],\n): \"claude\" | \"codex\" | \"cursor\" | \"all\" | undefined {\n const idx = args.indexOf(\"--source\");\n const value = idx === -1 ? undefined : args[idx + 1];\n if (\n value === \"claude\" ||\n value === \"codex\" ||\n value === \"cursor\" ||\n value === \"all\"\n ) {\n return value;\n }\n return undefined;\n}\n\nfunction readPackageVersion(): string {\n try {\n const require = createRequire(import.meta.url);\n const pkg = require(\"../package.json\") as { version?: unknown };\n if (typeof pkg.version === \"string\" && pkg.version.length > 0) {\n return pkg.version;\n }\n } catch {\n // Fall back to \"unknown\" rather than crashing the CLI on a broken install.\n }\n return \"unknown\";\n}\n\nexport interface SetupShortcutOptions {\n yes?: boolean;\n agent?: string;\n model?: string;\n skipHook?: boolean;\n skipGuides?: boolean;\n}\n\n/**\n * Decide whether a bare `codealmanac [...args]` invocation should route\n * straight to `runSetup` (and if so, with which flags). Returns the\n * options object when it's a setup shortcut, or `null` when Commander\n * should parse the invocation normally.\n */\nexport function tryParseSetupShortcut(args: string[]): SetupShortcutOptions | null {\n if (args.length === 0) return {};\n\n return parseSetupShortcutFlags(args);\n}\n\nfunction parseSetupShortcutFlags(args: string[]): SetupShortcutOptions | null {\n const opts: SetupShortcutOptions = {};\n for (let i = 0; i < args.length; i++) {\n const arg = args[i]!;\n if (arg === \"--yes\" || arg === \"-y\") {\n opts.yes = true;\n continue;\n }\n if (arg === \"--agent\") {\n const value = args[i + 1];\n if (value === undefined || value.startsWith(\"-\")) return null;\n opts.agent = value;\n i += 1;\n continue;\n }\n if (arg === \"--model\") {\n const value = args[i + 1];\n if (value === undefined || value.startsWith(\"-\")) return null;\n opts.model = value;\n i += 1;\n continue;\n }\n if (arg === \"--skip-hook\") {\n opts.skipHook = true;\n continue;\n }\n if (arg === \"--skip-guides\") {\n opts.skipGuides = true;\n continue;\n }\n return null;\n }\n return opts;\n}\n","import { Command, type Help } from \"commander\";\n\nimport { BLUE, BOLD, DIM, RST } from \"../ansi.js\";\n\nconst HELP_GROUPS: Array<{ title: string; commands: string[] }> = [\n {\n title: \"Query\",\n commands: [\"search\", \"show\", \"health\", \"list\"],\n },\n {\n title: \"Edit\",\n commands: [\"tag\", \"untag\", \"topics\"],\n },\n {\n title: \"Wiki lifecycle\",\n commands: [\"bootstrap\", \"capture\", \"hook\", \"reindex\"],\n },\n {\n title: \"Setup\",\n commands: [\"agents\", \"config\", \"setup\", \"uninstall\", \"doctor\", \"update\"],\n },\n {\n title: \"Deprecated\",\n commands: [\"set\", \"ps\"],\n },\n];\n\n/**\n * Install a custom `formatHelp` that replaces commander's flat\n * \"Commands:\" section with grouped headings. Keeps usage + options +\n * per-command short descriptions; only the commands section changes.\n */\nexport function configureGroupedHelp(program: Command): void {\n program.configureHelp({\n formatHelp(cmd, helper): string {\n if (cmd.parent !== null) {\n return renderDefault(cmd, helper);\n }\n\n const termWidth = helper.padWidth(cmd, helper);\n const helpWidth =\n helper.helpWidth ?? process.stdout.columns ?? 80;\n const itemSepWidth = 2;\n\n const out: string[] = [];\n out.push(`${BOLD}Usage:${RST} ${helper.commandUsage(cmd)}\\n`);\n\n const description = helper.commandDescription(cmd);\n if (description.length > 0) {\n out.push(\n helper.wrap(description, helpWidth, 0) + \"\\n\",\n );\n }\n\n const optionList = helper\n .visibleOptions(cmd)\n .map((o) => {\n const term = helper.optionTerm(o);\n const pad = \" \".repeat(Math.max(0, termWidth - term.length) + itemSepWidth);\n return `${BLUE}${term}${RST}${pad}${DIM}${helper.optionDescription(o)}${RST}`;\n });\n if (optionList.length > 0) {\n out.push(`${BOLD}Options:${RST}`);\n for (const l of optionList) out.push(` ${l}`);\n out.push(\"\");\n }\n\n const visible = helper.visibleCommands(cmd);\n const byName = new Map<string, (typeof visible)[number]>();\n for (const c of visible) byName.set(c.name(), c);\n\n for (const group of HELP_GROUPS) {\n const members = group.commands\n .map((n) => byName.get(n))\n .filter((c): c is (typeof visible)[number] => c !== undefined);\n if (members.length === 0) continue;\n out.push(`${BOLD}${group.title}:${RST}`);\n for (const c of members) {\n const term = helper.subcommandTerm(c);\n const desc = helper.subcommandDescription(c);\n const padding = Math.max(\n 0,\n termWidth - term.length + itemSepWidth,\n );\n out.push(` ${BLUE}${term}${RST}${\" \".repeat(padding)}${DIM}${desc}${RST}`);\n byName.delete(c.name());\n }\n out.push(\"\");\n }\n\n byName.delete(\"help\");\n if (byName.size > 0) {\n out.push(`${BOLD}Other:${RST}`);\n for (const c of byName.values()) {\n const term = helper.subcommandTerm(c);\n const desc = helper.subcommandDescription(c);\n const padding = Math.max(\n 0,\n termWidth - term.length + itemSepWidth,\n );\n out.push(` ${BLUE}${term}${RST}${\" \".repeat(padding)}${DIM}${desc}${RST}`);\n }\n out.push(\"\");\n }\n\n return out.join(\"\\n\");\n },\n });\n}\n\nfunction renderDefault(cmd: Command, helper: Help): string {\n const termWidth = helper.padWidth(cmd, helper);\n const helpWidth = helper.helpWidth ?? process.stdout.columns ?? 80;\n const itemSepWidth = 2;\n\n const lines: string[] = [`${BOLD}Usage:${RST} ${helper.commandUsage(cmd)}\\n`];\n const description = helper.commandDescription(cmd);\n if (description.length > 0) {\n lines.push(helper.wrap(description, helpWidth, 0) + \"\\n\");\n }\n\n const args = helper.visibleArguments(cmd).map((a) => {\n const term = helper.argumentTerm(a);\n const pad = \" \".repeat(Math.max(0, termWidth - term.length) + itemSepWidth);\n return `${BLUE}${term}${RST}${pad}${DIM}${helper.argumentDescription(a)}${RST}`;\n });\n if (args.length > 0) {\n lines.push(`${BOLD}Arguments:${RST}`);\n for (const a of args) lines.push(` ${a}`);\n lines.push(\"\");\n }\n\n const opts = helper.visibleOptions(cmd).map((o) => {\n const term = helper.optionTerm(o);\n const pad = \" \".repeat(Math.max(0, termWidth - term.length) + itemSepWidth);\n return `${BLUE}${term}${RST}${pad}${DIM}${helper.optionDescription(o)}${RST}`;\n });\n if (opts.length > 0) {\n lines.push(`${BOLD}Options:${RST}`);\n for (const o of opts) lines.push(` ${o}`);\n lines.push(\"\");\n }\n\n const subs = helper.visibleCommands(cmd).map((c) => {\n const term = helper.subcommandTerm(c);\n const pad = \" \".repeat(Math.max(0, termWidth - term.length) + itemSepWidth);\n return `${BLUE}${term}${RST}${pad}${DIM}${helper.subcommandDescription(c)}${RST}`;\n });\n if (subs.length > 0) {\n lines.push(`${BOLD}Commands:${RST}`);\n for (const s of subs) lines.push(` ${s}`);\n lines.push(\"\");\n }\n\n return lines.join(\"\\n\");\n}\n","import { spawn, type SpawnOptions } from \"node:child_process\";\nimport { readFile } from \"node:fs/promises\";\nimport { createRequire } from \"node:module\";\nimport path from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\n\nimport { runSetup, type SetupOptions, type SetupResult } from \"../commands/setup.js\";\nimport { isNewer } from \"../update/semver.js\";\n\n/**\n * Bare `codealmanac` is the npm bootstrap surface. When it is invoked\n * through `npx`, the running package can live in a temporary cache; if\n * setup installed hooks from that copy, the hook path could disappear\n * later. This helper makes the promise durable:\n *\n * 1. If already running from the global npm package, run setup locally.\n * 2. Otherwise ensure `npm i -g codealmanac@latest` has succeeded.\n * 3. Re-run `setup` from the global package entry point.\n */\n\nexport interface CodealmanacBootstrapOptions {\n setupOptions: SetupOptions;\n setupArgs: string[];\n\n // Injection points for tests.\n runSetup?: typeof runSetup;\n spawnFn?: typeof spawn;\n currentPackageRoot?: string;\n globalPackageRoot?: string;\n env?: NodeJS.ProcessEnv;\n}\n\nconst SKIP_BOOTSTRAP_ENV = \"CODEALMANAC_SKIP_GLOBAL_BOOTSTRAP\";\n\nexport async function runCodealmanacBootstrap(\n opts: CodealmanacBootstrapOptions,\n): Promise<SetupResult> {\n const env = opts.env ?? process.env;\n const runSetupFn = opts.runSetup ?? runSetup;\n const currentRoot = opts.currentPackageRoot ?? findCurrentPackageRoot();\n\n if (env[SKIP_BOOTSTRAP_ENV] === \"1\") {\n return await runSetupFn(opts.setupOptions);\n }\n\n const globalRootResult =\n opts.globalPackageRoot !== undefined\n ? { ok: true as const, path: opts.globalPackageRoot }\n : await resolveGlobalPackageRoot(opts.spawnFn ?? spawn);\n\n if (!globalRootResult.ok) {\n return {\n stdout: \"\",\n stderr: globalRootResult.stderr,\n exitCode: 1,\n };\n }\n\n const globalRoot = globalRootResult.path;\n if (samePath(currentRoot, globalRoot)) {\n return await runSetupFn(opts.setupOptions);\n }\n\n if (await shouldInstallGlobal(currentRoot, globalRoot)) {\n const install = await spawnInherited(\n opts.spawnFn ?? spawn,\n \"npm\",\n [\"i\", \"-g\", \"codealmanac@latest\"],\n env,\n );\n if (install.exitCode !== 0) {\n return {\n stdout: \"\",\n stderr:\n `codealmanac: npm install failed (exit ${install.exitCode}).\\n` +\n `If you see \"EACCES\" above, try: sudo npm i -g codealmanac@latest\\n` +\n `Or install with a version manager (nvm, volta, fnm) to avoid sudo.\\n`,\n exitCode: install.exitCode,\n };\n }\n }\n\n const entry = path.join(globalRoot, \"dist\", \"codealmanac.js\");\n const rerun = await spawnInherited(\n opts.spawnFn ?? spawn,\n process.execPath,\n [entry, \"setup\", ...opts.setupArgs],\n {\n ...env,\n [SKIP_BOOTSTRAP_ENV]: \"1\",\n },\n );\n\n return {\n stdout: \"\",\n stderr: \"\",\n exitCode: rerun.exitCode,\n };\n}\n\nasync function shouldInstallGlobal(\n currentRoot: string,\n globalRoot: string,\n): Promise<boolean> {\n const globalVersion = await readPackageVersion(globalRoot);\n if (globalVersion === null) return true;\n\n const currentVersion = await readPackageVersion(currentRoot);\n if (currentVersion === null) return false;\n\n return isNewer(currentVersion, globalVersion);\n}\n\nfunction samePath(a: string, b: string): boolean {\n return path.resolve(a) === path.resolve(b);\n}\n\nasync function readPackageVersion(root: string): Promise<string | null> {\n try {\n const raw = await readFile(path.join(root, \"package.json\"), \"utf8\");\n const parsed = JSON.parse(raw) as { version?: unknown };\n return typeof parsed.version === \"string\" && parsed.version.length > 0\n ? parsed.version\n : null;\n } catch {\n return null;\n }\n}\n\nfunction findCurrentPackageRoot(): string {\n const here = path.dirname(fileURLToPath(import.meta.url));\n const candidates = [\n // Bundled: `.../codealmanac/dist/codealmanac.js` -> package root.\n path.resolve(here, \"..\"),\n // Source: `.../codealmanac/src/install/global.ts` -> package root.\n path.resolve(here, \"..\", \"..\"),\n ];\n\n for (const candidate of candidates) {\n try {\n const require = createRequire(import.meta.url);\n const pkg = require(path.join(candidate, \"package.json\")) as {\n name?: unknown;\n };\n if (pkg.name === \"codealmanac\") return candidate;\n } catch {\n // Try the next layout.\n }\n }\n\n return path.resolve(here, \"..\", \"..\");\n}\n\nasync function resolveGlobalPackageRoot(\n spawnFn: typeof spawn,\n): Promise<{ ok: true; path: string } | { ok: false; stderr: string }> {\n const result = await spawnCaptured(spawnFn, \"npm\", [\"root\", \"-g\"]);\n if (result.exitCode !== 0) {\n return {\n ok: false,\n stderr:\n \"codealmanac: could not find npm's global install directory.\\n\" +\n \"Install Node.js + npm, or install codealmanac via your package manager.\\n\",\n };\n }\n\n const root = result.stdout.trim();\n if (root.length === 0) {\n return {\n ok: false,\n stderr:\n \"codealmanac: npm returned an empty global install directory.\\n\" +\n \"Try: npm root -g\\n\",\n };\n }\n\n return { ok: true, path: path.join(root, \"codealmanac\") };\n}\n\nasync function spawnInherited(\n spawnFn: typeof spawn,\n cmd: string,\n args: string[],\n env: NodeJS.ProcessEnv,\n): Promise<{ exitCode: number }> {\n return await new Promise((resolve) => {\n const child = spawnFn(cmd, args, {\n stdio: \"inherit\",\n env,\n });\n\n child.on(\"error\", () => {\n resolve({ exitCode: 1 });\n });\n child.on(\"exit\", (code) => {\n resolve({ exitCode: code ?? 1 });\n });\n });\n}\n\nasync function spawnCaptured(\n spawnFn: typeof spawn,\n cmd: string,\n args: string[],\n): Promise<{ stdout: string; stderr: string; exitCode: number }> {\n return await new Promise((resolve) => {\n const child = spawnFn(cmd, args, {\n stdio: [\"ignore\", \"pipe\", \"pipe\"],\n } as SpawnOptions);\n const stdout: Buffer[] = [];\n const stderr: Buffer[] = [];\n\n child.stdout?.on(\"data\", (chunk: Buffer | string) => {\n stdout.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk));\n });\n child.stderr?.on(\"data\", (chunk: Buffer | string) => {\n stderr.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk));\n });\n child.on(\"error\", (err: NodeJS.ErrnoException) => {\n resolve({\n stdout: \"\",\n stderr: err.message,\n exitCode: 1,\n });\n });\n child.on(\"exit\", (code) => {\n resolve({\n stdout: Buffer.concat(stdout).toString(\"utf8\"),\n stderr: Buffer.concat(stderr).toString(\"utf8\"),\n exitCode: code ?? 1,\n });\n });\n });\n}\n","import { readFileSync } from \"node:fs\";\nimport { createRequire } from \"node:module\";\n\nimport {\n getConfigPath,\n getLegacyConfigPath,\n parseConfigText,\n} from \"./config.js\";\nimport { isNewer } from \"./semver.js\";\nimport { getStatePath, type UpdateState } from \"./state.js\";\n\n/**\n * Pre-command update-nag banner. Runs synchronously at the very top of\n * every `run()` invocation, before commander even touches argv. Prints\n * one line to stderr if:\n *\n * 1. `~/.almanac/update-state.json` exists and parses.\n * 2. `latest_version` is strictly newer than `installed_version`.\n * 3. `latest_version` is NOT in `dismissed_versions`.\n * 4. `~/.almanac/config.toml`.`update_notifier` is not `false`.\n *\n * Otherwise silent. Deliberately synchronous and filesystem-blocking:\n * this runs in the CLI critical path and waiting on a Promise would\n * force every command to become async upfront. The files are tiny\n * (<1KB each); a sync read is cheap.\n *\n * Why stderr: agents and scripts parse stdout; stderr is the\n * conventional channel for diagnostics and nags. A tool piping\n * `almanac search` into `xargs` shouldn't see the banner mixed into\n * its slug list. Users running interactively see stderr anyway, so\n * the nag is visible in practice.\n */\n\nexport interface AnnounceOptions {\n statePath?: string;\n configPath?: string;\n /** Override for tests — normally reads from package.json at import time. */\n installedVersion?: string;\n /** Enable ANSI coloring regardless of isTTY. Tests pass `false`. */\n color?: boolean;\n}\n\nconst RST = \"\\x1b[0m\";\nconst BOLD = \"\\x1b[1m\";\nconst YELLOW = \"\\x1b[33m\";\n\nexport function announceUpdateIfAvailable(\n stderr: NodeJS.WritableStream,\n opts: AnnounceOptions = {},\n): void {\n const statePath = opts.statePath ?? getStatePath();\n const configPath = opts.configPath ?? getConfigPath();\n const installed = opts.installedVersion ?? readInstalledVersion();\n\n // Config gate. Must be checked before state: a user who disabled the\n // notifier shouldn't pay even a state-file read.\n if (!shouldNotify(configPath)) return;\n\n const state = readStateSync(statePath);\n if (state === null) return;\n if (state.latest_version.length === 0) return;\n if (!isNewer(state.latest_version, installed)) return;\n if (state.dismissed_versions.includes(state.latest_version)) return;\n\n const useColor =\n opts.color ?? (process.stderr.isTTY === true && !(\"NO_COLOR\" in process.env));\n const warn = useColor ? `${YELLOW}${BOLD}\\u26a0${RST}` : \"!\";\n const cmd = useColor ? `${BOLD}almanac update${RST}` : \"almanac update\";\n stderr.write(\n `${warn} codealmanac ${state.latest_version} available ` +\n `(you're on ${installed}) — run: ${cmd}\\n`,\n );\n}\n\n/**\n * Sync-read the state file. Returns `null` when missing, empty, or\n * malformed — the announce path MUST NOT throw into the CLI critical\n * path. Avoids the `async readState` used by the worker because\n * `run()` would otherwise need `await announceUpdateIfAvailable(...)`\n * on every invocation, which turns into a multi-millisecond penalty\n * on commands that don't care.\n */\nfunction readStateSync(path: string): UpdateState | null {\n let raw: string;\n try {\n raw = readFileSync(path, \"utf8\");\n } catch {\n return null;\n }\n const trimmed = raw.trim();\n if (trimmed.length === 0) return null;\n try {\n const parsed = JSON.parse(trimmed) as Partial<UpdateState>;\n return {\n last_check_at:\n typeof parsed.last_check_at === \"number\" ? parsed.last_check_at : 0,\n installed_version:\n typeof parsed.installed_version === \"string\"\n ? parsed.installed_version\n : \"\",\n latest_version:\n typeof parsed.latest_version === \"string\" ? parsed.latest_version : \"\",\n dismissed_versions: Array.isArray(parsed.dismissed_versions)\n ? parsed.dismissed_versions.filter(\n (v): v is string => typeof v === \"string\",\n )\n : [],\n };\n } catch {\n return null;\n }\n}\n\nfunction shouldNotify(configPath: string): boolean {\n const loaded = readConfigSync(configPath);\n if (loaded === null) {\n const legacy = configPath.endsWith(\".toml\") ? readConfigSync(getLegacyConfigPath()) : null;\n if (legacy === null) return true; // no config file → default notify on\n return legacy.update_notifier !== false;\n }\n return loaded.update_notifier !== false;\n}\n\nfunction readConfigSync(configPath: string): { update_notifier?: unknown } | null {\n let raw: string;\n try {\n raw = readFileSync(configPath, \"utf8\");\n } catch {\n return null;\n }\n const trimmed = raw.trim();\n if (trimmed.length === 0) return null;\n try {\n return parseConfigText(trimmed, configPath) as {\n update_notifier?: unknown;\n };\n } catch {\n return null;\n }\n}\n\nfunction readInstalledVersion(): string {\n // Dev: `src/update/announce.ts` → `../../package.json`. Bundled:\n // `dist/codealmanac.js` → `../package.json`. Try both.\n try {\n const require = createRequire(import.meta.url);\n const pkg = require(\"../../package.json\") as { version?: unknown };\n if (typeof pkg.version === \"string\" && pkg.version.length > 0) {\n return pkg.version;\n }\n } catch {\n // Fall through.\n }\n try {\n const require = createRequire(import.meta.url);\n const pkg = require(\"../package.json\") as { version?: unknown };\n if (typeof pkg.version === \"string\" && pkg.version.length > 0) {\n return pkg.version;\n }\n } catch {\n // Fall through.\n }\n return \"unknown\";\n}\n"],"mappings":"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","names":["createRequire","require","createRequire","RST","BOLD","path","require","createRequire","readPackageVersion","require","createRequire"]}
@@ -59,7 +59,7 @@ if (shouldCheckSqliteAbi(process.argv)) {
59
59
  process.exit(1);
60
60
  }
61
61
  }
62
- var { run } = await import("./cli-6BOB6KAN.js");
62
+ var { run } = await import("./cli-MYMZ66EN.js");
63
63
  run(process.argv).catch((err) => {
64
64
  const message = err instanceof Error ? err.message : String(err);
65
65
  process.stderr.write(`almanac: ${message}
@@ -0,0 +1,16 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ runConfigGet,
4
+ runConfigList,
5
+ runConfigSet,
6
+ runConfigUnset
7
+ } from "./chunk-TT6ZP4GS.js";
8
+ import "./chunk-P5WGG4FJ.js";
9
+ import "./chunk-7JUX4ADQ.js";
10
+ export {
11
+ runConfigGet,
12
+ runConfigList,
13
+ runConfigSet,
14
+ runConfigUnset
15
+ };
16
+ //# sourceMappingURL=config-ML2RCR7J.js.map
@@ -0,0 +1,17 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ runDoctor
4
+ } from "./chunk-CW4HRLMS.js";
5
+ import "./chunk-TILAKDN6.js";
6
+ import "./chunk-4CODZRHH.js";
7
+ import "./chunk-FM3VRDK7.js";
8
+ import "./chunk-QRK3JLFX.js";
9
+ import "./chunk-447U3GQJ.js";
10
+ import "./chunk-BF2J4XTC.js";
11
+ import "./chunk-F53U6JQG.js";
12
+ import "./chunk-P5WGG4FJ.js";
13
+ import "./chunk-7JUX4ADQ.js";
14
+ export {
15
+ runDoctor
16
+ };
17
+ //# sourceMappingURL=doctor-W5KQQLAX.js.map