codealmanac 0.2.3 → 0.2.5

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 (58) hide show
  1. package/README.md +27 -14
  2. package/dist/agents-RVTQYE6A.js +25 -0
  3. package/dist/chunk-6BJUYZ43.js +195 -0
  4. package/dist/chunk-6BJUYZ43.js.map +1 -0
  5. package/dist/chunk-BGUID5BS.js +766 -0
  6. package/dist/chunk-BGUID5BS.js.map +1 -0
  7. package/dist/{chunk-NBVIEZZQ.js → chunk-DL5BXZCX.js} +53 -3
  8. package/dist/chunk-DL5BXZCX.js.map +1 -0
  9. package/dist/{chunk-XNTNXEWY.js → chunk-GFUB57IT.js} +243 -83
  10. package/dist/chunk-GFUB57IT.js.map +1 -0
  11. package/dist/{chunk-P3LDTCLB.js → chunk-H37GKBWI.js} +13 -1
  12. package/dist/chunk-H37GKBWI.js.map +1 -0
  13. package/dist/{chunk-QQHIVTXT.js → chunk-MRRX4UQB.js} +4 -4
  14. package/dist/{chunk-QQHIVTXT.js.map → chunk-MRRX4UQB.js.map} +1 -1
  15. package/dist/chunk-P5WGG4FJ.js +359 -0
  16. package/dist/chunk-P5WGG4FJ.js.map +1 -0
  17. package/dist/{chunk-HNVOYWC2.js → chunk-SMIK2YLU.js} +165 -76
  18. package/dist/chunk-SMIK2YLU.js.map +1 -0
  19. package/dist/{chunk-V3QOQSXI.js → chunk-TILAKDN6.js} +14 -8
  20. package/dist/chunk-TILAKDN6.js.map +1 -0
  21. package/dist/chunk-TT6ZP4GS.js +282 -0
  22. package/dist/chunk-TT6ZP4GS.js.map +1 -0
  23. package/dist/{cli-6BOB6KAN.js → cli-CL4ID7EO.js} +123 -33
  24. package/dist/cli-CL4ID7EO.js.map +1 -0
  25. package/dist/codealmanac.js +1 -1
  26. package/dist/config-ML2RCR7J.js +16 -0
  27. package/dist/doctor-DOLJRGS4.js +17 -0
  28. package/dist/{register-commands-IXYE5CNZ.js → register-commands-FBJ6XQ3L.js} +296 -398
  29. package/dist/register-commands-FBJ6XQ3L.js.map +1 -0
  30. package/dist/uninstall-DX6LFKMX.js +15 -0
  31. package/dist/{update-RAF7QRYF.js → update-P2IPG7RO.js} +3 -3
  32. package/guides/mini.md +4 -4
  33. package/guides/reference.md +75 -16
  34. package/package.json +1 -1
  35. package/dist/agents-RVYQ44DB.js +0 -16
  36. package/dist/auth-S5DVUIUJ.js +0 -18
  37. package/dist/chunk-HNVOYWC2.js.map +0 -1
  38. package/dist/chunk-NBVIEZZQ.js.map +0 -1
  39. package/dist/chunk-P3LDTCLB.js.map +0 -1
  40. package/dist/chunk-PIYJQE4Z.js +0 -102
  41. package/dist/chunk-PIYJQE4Z.js.map +0 -1
  42. package/dist/chunk-SSYMRT4I.js +0 -126
  43. package/dist/chunk-SSYMRT4I.js.map +0 -1
  44. package/dist/chunk-TWM7I2LU.js +0 -116
  45. package/dist/chunk-TWM7I2LU.js.map +0 -1
  46. package/dist/chunk-V3QOQSXI.js.map +0 -1
  47. package/dist/chunk-WRUSDYYE.js +0 -97
  48. package/dist/chunk-WRUSDYYE.js.map +0 -1
  49. package/dist/chunk-XNTNXEWY.js.map +0 -1
  50. package/dist/cli-6BOB6KAN.js.map +0 -1
  51. package/dist/doctor-DD7EQGCA.js +0 -18
  52. package/dist/register-commands-IXYE5CNZ.js.map +0 -1
  53. package/dist/uninstall-OBV4Z3JE.js +0 -16
  54. /package/dist/{agents-RVYQ44DB.js.map → agents-RVTQYE6A.js.map} +0 -0
  55. /package/dist/{auth-S5DVUIUJ.js.map → config-ML2RCR7J.js.map} +0 -0
  56. /package/dist/{doctor-DD7EQGCA.js.map → doctor-DOLJRGS4.js.map} +0 -0
  57. /package/dist/{uninstall-OBV4Z3JE.js.map → uninstall-DX6LFKMX.js.map} +0 -0
  58. /package/dist/{update-RAF7QRYF.js.map → update-P2IPG7RO.js.map} +0 -0
package/README.md CHANGED
@@ -42,17 +42,17 @@ codealmanac --yes
42
42
  ```
43
43
 
44
44
  `codealmanac` (the bare invocation) routes to a setup wizard that:
45
- - lets you choose a default agent: Claude, Codex, or Cursor,
46
- - checks local agent readiness,
47
- - installs auto-capture hooks for Claude, Codex, and Cursor,
48
- - drops two agent guides into `~/.claude/` (`codealmanac.md` mini, `codealmanac-reference.md` full),
49
- - appends `@~/.claude/codealmanac.md` to `~/.claude/CLAUDE.md` so every Claude Code session loads the mini guide.
45
+ - lets you choose a default provider: Claude, Codex, or Cursor,
46
+ - lets you choose a provider-local model or inherit the provider default,
47
+ - reports local provider readiness,
48
+ - installs auto-capture hooks for supported agents,
49
+ - installs the codealmanac guide into the selected provider's instruction surface: Claude uses `~/.claude/CLAUDE.md`, Codex uses `~/.codex/AGENTS.md`, and Cursor uses `.cursor/rules/codealmanac.mdc`.
50
50
 
51
51
  The setup is idempotent — safe to re-run. Opt out with `--skip-hook` or `--skip-guides`. Later, `almanac uninstall` reverses it.
52
52
 
53
53
  Two binaries ship, both pointing at the same entry: `codealmanac` (install surface) and `almanac` (day-to-day). Requires Node 20 or 22.
54
54
 
55
- `bootstrap` and `capture` invoke your configured default agent. Claude uses the bundled Claude Agent SDK, Codex uses `codex exec --json`, and Cursor uses `cursor-agent --print --output-format stream-json`. The query commands (`search`, `show`, `health`, `topics`) need no credentials at all.
55
+ `bootstrap` and `capture` invoke your configured default provider. Claude uses the bundled Claude Agent SDK, Codex uses `codex exec --json`, and Cursor uses `cursor-agent --print --output-format stream-json`. The query commands (`search`, `show`, `health`, `topics`) need no credentials at all.
56
56
 
57
57
  ## Authentication
58
58
 
@@ -78,21 +78,27 @@ almanac doctor
78
78
  Set or change the default at any time:
79
79
 
80
80
  ```bash
81
- almanac set default-agent codex
82
- almanac set model codex gpt-5.3-codex
81
+ almanac agents use codex
82
+ almanac agents model codex gpt-5.3-codex
83
+
84
+ # Scriptable equivalent:
85
+ almanac config set agent.default codex
86
+ almanac config set agent.models.codex gpt-5.3-codex
87
+ almanac config set --project agent.default claude
83
88
  ```
84
89
 
85
90
  codealmanac itself never stores your provider credentials. Auth stays in each agent's normal local credential store.
91
+ User config lives in `~/.almanac/config.toml`; project agent defaults can live in `.almanac/config.toml`.
86
92
 
87
93
  ## Quickstart
88
94
 
89
95
  ```bash
90
96
  npm install -g codealmanac
91
- codealmanac # interactive setup wizard; choose Claude/Codex/Cursor
97
+ codealmanac # interactive setup wizard; choose provider + model
92
98
  # (or: codealmanac --yes)
93
99
 
94
100
  cd your-repo
95
- almanac bootstrap # default agent reads the repo and seeds pages + topic DAG
101
+ almanac bootstrap # default provider reads the repo and seeds pages + topic DAG
96
102
 
97
103
  almanac search "auth" # full-text search across pages
98
104
  almanac show checkout-flow # read a page
@@ -117,7 +123,7 @@ almanac search --topic database # filter by topic
117
123
  almanac search --mentions src/lib/stripe.ts # pages referencing a file
118
124
  almanac show checkout-flow # read a page
119
125
  almanac show checkout-flow --meta # metadata only
120
- almanac show checkout-flow --raw # body only
126
+ almanac show checkout-flow --body # body only
121
127
 
122
128
  # Organize
123
129
  almanac topics list # all topics with page counts
@@ -128,16 +134,23 @@ almanac health # graph integrity report
128
134
  # Wiki lifecycle
129
135
  almanac bootstrap --agent codex # seed a new wiki from the repo
130
136
  almanac capture --agent cursor <transcript> # update wiki from a transcript
137
+ almanac capture --json <transcript> # structured CommandOutcome output
131
138
  almanac hook install --source all # auto-capture for Claude/Codex/Cursor
132
139
 
133
140
  # Setup & diagnose
134
- almanac agents list # provider readiness + default
135
- almanac set default-agent codex # change default provider
141
+ almanac agents list # provider readiness + current model
142
+ almanac agents use codex # change default provider
143
+ almanac agents model claude claude-opus-4-6 # set provider model
144
+ almanac agents model claude --default # inherit provider default
145
+ almanac config list --show-origin # scriptable settings view
136
146
  almanac doctor # check install + wiki health
137
147
  almanac update # update to latest version
138
148
  ```
139
149
 
140
- All commands output slugs one per line. Add `--json` for structured output. Pipe with `--stdin`:
150
+ `bootstrap` and `capture` resolve provider settings in the standard order:
151
+ `--agent` / `--model`, then `ALMANAC_AGENT` / `ALMANAC_MODEL`, then config.
152
+
153
+ All query commands output slugs one per line. Add `--json` for structured output. Pipe with `--stdin`:
141
154
 
142
155
  ```bash
143
156
  almanac search --topic flows | almanac show --stdin
@@ -0,0 +1,25 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ runAgentsDoctor,
4
+ runAgentsList,
5
+ runAgentsModel,
6
+ runAgentsUse,
7
+ runDeprecatedSetAgentModel,
8
+ runDeprecatedSetDefaultAgent,
9
+ runSetAgentModel,
10
+ runSetDefaultAgent
11
+ } from "./chunk-6BJUYZ43.js";
12
+ import "./chunk-BGUID5BS.js";
13
+ import "./chunk-P5WGG4FJ.js";
14
+ import "./chunk-7JUX4ADQ.js";
15
+ export {
16
+ runAgentsDoctor,
17
+ runAgentsList,
18
+ runAgentsModel,
19
+ runAgentsUse,
20
+ runDeprecatedSetAgentModel,
21
+ runDeprecatedSetDefaultAgent,
22
+ runSetAgentModel,
23
+ runSetDefaultAgent
24
+ };
25
+ //# sourceMappingURL=agents-RVTQYE6A.js.map
@@ -0,0 +1,195 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ buildProviderSetupView,
4
+ parseAgentSelection
5
+ } from "./chunk-BGUID5BS.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 active = view.choices.find((choice) => choice.selected);
16
+ const activeModel = active?.effectiveModel ?? "provider default";
17
+ const lines = [
18
+ "codealmanac agents",
19
+ `current: ${view.defaultProvider} (model: ${activeModel})`,
20
+ ""
21
+ ];
22
+ for (const choice of view.choices) {
23
+ const selected = choice.selected ? "*" : " ";
24
+ const recommended = choice.recommended ? "recommended" : "";
25
+ const model = choice.effectiveModel ?? "provider default";
26
+ const detail = choice.account ?? choice.fixCommand ?? choice.detail;
27
+ lines.push(
28
+ [
29
+ selected,
30
+ choice.label.padEnd(6),
31
+ readinessLabel(choice.readiness).padEnd(15),
32
+ recommended.padEnd(11),
33
+ `model: ${model}`.padEnd(31),
34
+ detail
35
+ ].join(" ").trimEnd()
36
+ );
37
+ }
38
+ lines.push(
39
+ "",
40
+ "Change provider: almanac agents use <claude|codex|cursor>",
41
+ "Set model: almanac agents model <provider> <model>",
42
+ "Reset model: almanac agents model <provider> --default"
43
+ );
44
+ return { stdout: `${lines.join("\n")}
45
+ `, stderr: "", exitCode: 0 };
46
+ }
47
+ async function runAgentsDoctor() {
48
+ const view = await buildProviderSetupView();
49
+ const lines = ["codealmanac agent doctor\n"];
50
+ for (const choice of view.choices) {
51
+ lines.push(`${choice.ready ? "\u2713" : "\u2717"} ${choice.label}`);
52
+ lines.push(` status: ${readinessLabel(choice.readiness)}`);
53
+ lines.push(` model: ${choice.effectiveModel ?? "provider default"}`);
54
+ if (choice.account !== null) {
55
+ lines.push(` account: ${choice.account}`);
56
+ } else if (choice.detail.length > 0) {
57
+ lines.push(` detail: ${choice.detail}`);
58
+ }
59
+ if (choice.fixCommand !== null) lines.push(` fix: ${choice.fixCommand}`);
60
+ lines.push("");
61
+ }
62
+ return { stdout: `${lines.join("\n").trimEnd()}
63
+ `, stderr: "", exitCode: 0 };
64
+ }
65
+ async function runSetDefaultAgent(opts) {
66
+ return setDefaultAgent(opts);
67
+ }
68
+ async function runDeprecatedSetDefaultAgent(opts) {
69
+ return withDeprecation(
70
+ await setDefaultAgent(opts),
71
+ "almanac set default-agent <provider>",
72
+ "almanac agents use <provider>"
73
+ );
74
+ }
75
+ async function runAgentsUse(opts) {
76
+ return setDefaultAgent(opts);
77
+ }
78
+ async function setDefaultAgent(opts) {
79
+ const parsed = parseAgentSelection(opts.provider);
80
+ if (parsed.provider === null) {
81
+ return {
82
+ stdout: "",
83
+ stderr: `almanac: unknown agent '${opts.provider}'. Expected one of: claude, codex, cursor.
84
+ `,
85
+ exitCode: 1
86
+ };
87
+ }
88
+ const provider = parsed.provider;
89
+ const config = await readConfig();
90
+ const next = {
91
+ ...config,
92
+ agent: {
93
+ ...config.agent,
94
+ default: provider,
95
+ models: parsed.model === void 0 ? config.agent.models : {
96
+ ...config.agent.models,
97
+ [provider]: parsed.model
98
+ }
99
+ }
100
+ };
101
+ await writeConfig(next);
102
+ return {
103
+ stdout: parsed.model === void 0 ? `codealmanac: default provider set to ${provider}.
104
+ ` : `codealmanac: default provider set to ${provider}; ${provider} model set to ${parsed.model}.
105
+ `,
106
+ stderr: "",
107
+ exitCode: 0
108
+ };
109
+ }
110
+ async function runSetAgentModel(opts) {
111
+ return setProviderModel(opts);
112
+ }
113
+ async function runDeprecatedSetAgentModel(opts) {
114
+ return withDeprecation(
115
+ await setProviderModel(opts),
116
+ "almanac set model <provider> <model>",
117
+ "almanac agents model <provider> <model>"
118
+ );
119
+ }
120
+ async function runAgentsModel(opts) {
121
+ return setProviderModel(opts);
122
+ }
123
+ async function setProviderModel(opts) {
124
+ if (!isAgentProviderId(opts.provider)) {
125
+ return {
126
+ stdout: "",
127
+ stderr: `almanac: unknown agent '${opts.provider}'. Expected one of: claude, codex, cursor.
128
+ `,
129
+ exitCode: 1
130
+ };
131
+ }
132
+ if (opts.defaultModel !== true && (opts.model === void 0 || opts.model.length === 0)) {
133
+ return {
134
+ stdout: "",
135
+ stderr: `almanac: missing model for ${opts.provider}. Pass a model id or --default.
136
+ `,
137
+ exitCode: 1
138
+ };
139
+ }
140
+ const provider = opts.provider;
141
+ const config = await readConfig();
142
+ const model = normalizeRequestedModel(opts);
143
+ await writeConfig({
144
+ ...config,
145
+ agent: {
146
+ ...config.agent,
147
+ models: {
148
+ ...config.agent.models,
149
+ [provider]: model
150
+ }
151
+ }
152
+ });
153
+ return {
154
+ stdout: model === null ? `codealmanac: ${provider} model reset to provider default.
155
+ ` : `codealmanac: ${provider} model set to ${model}.
156
+ `,
157
+ stderr: "",
158
+ exitCode: 0
159
+ };
160
+ }
161
+ function normalizeRequestedModel(opts) {
162
+ if (opts.defaultModel === true) return null;
163
+ if (opts.model === void 0 || opts.model.length === 0) return null;
164
+ if (opts.model === "default" || opts.model === "null") return null;
165
+ return opts.model;
166
+ }
167
+ function readinessLabel(readiness) {
168
+ switch (readiness) {
169
+ case "ready":
170
+ return "ready";
171
+ case "missing":
172
+ return "missing";
173
+ case "not-authenticated":
174
+ return "not ready";
175
+ }
176
+ }
177
+ function withDeprecation(result, oldUsage, newUsage) {
178
+ return {
179
+ ...result,
180
+ stderr: `almanac: warning: \`${oldUsage}\` is deprecated; use \`${newUsage}\`.
181
+ ` + result.stderr
182
+ };
183
+ }
184
+
185
+ export {
186
+ runAgentsList,
187
+ runAgentsDoctor,
188
+ runSetDefaultAgent,
189
+ runDeprecatedSetDefaultAgent,
190
+ runAgentsUse,
191
+ runSetAgentModel,
192
+ runDeprecatedSetAgentModel,
193
+ runAgentsModel
194
+ };
195
+ //# sourceMappingURL=chunk-6BJUYZ43.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 active = view.choices.find((choice) => choice.selected);\n const activeModel = active?.effectiveModel ?? \"provider default\";\n const lines = [\n \"codealmanac agents\",\n `current: ${view.defaultProvider} (model: ${activeModel})`,\n \"\",\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 \"\",\n \"Change provider: almanac agents use <claude|codex|cursor>\",\n \"Set model: almanac agents model <provider> <model>\",\n \"Reset model: almanac agents model <provider> --default\",\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 provider set to ${provider}.\\n`\n : `codealmanac: default provider 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":[]}