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.
- package/README.md +27 -14
- package/dist/agents-RVTQYE6A.js +25 -0
- package/dist/chunk-6BJUYZ43.js +195 -0
- package/dist/chunk-6BJUYZ43.js.map +1 -0
- package/dist/chunk-BGUID5BS.js +766 -0
- package/dist/chunk-BGUID5BS.js.map +1 -0
- package/dist/{chunk-NBVIEZZQ.js → chunk-DL5BXZCX.js} +53 -3
- package/dist/chunk-DL5BXZCX.js.map +1 -0
- package/dist/{chunk-XNTNXEWY.js → chunk-GFUB57IT.js} +243 -83
- package/dist/chunk-GFUB57IT.js.map +1 -0
- package/dist/{chunk-P3LDTCLB.js → chunk-H37GKBWI.js} +13 -1
- package/dist/chunk-H37GKBWI.js.map +1 -0
- package/dist/{chunk-QQHIVTXT.js → chunk-MRRX4UQB.js} +4 -4
- package/dist/{chunk-QQHIVTXT.js.map → chunk-MRRX4UQB.js.map} +1 -1
- package/dist/chunk-P5WGG4FJ.js +359 -0
- package/dist/chunk-P5WGG4FJ.js.map +1 -0
- package/dist/{chunk-HNVOYWC2.js → chunk-SMIK2YLU.js} +165 -76
- package/dist/chunk-SMIK2YLU.js.map +1 -0
- package/dist/{chunk-V3QOQSXI.js → chunk-TILAKDN6.js} +14 -8
- package/dist/chunk-TILAKDN6.js.map +1 -0
- package/dist/chunk-TT6ZP4GS.js +282 -0
- package/dist/chunk-TT6ZP4GS.js.map +1 -0
- package/dist/{cli-6BOB6KAN.js → cli-CL4ID7EO.js} +123 -33
- package/dist/cli-CL4ID7EO.js.map +1 -0
- package/dist/codealmanac.js +1 -1
- package/dist/config-ML2RCR7J.js +16 -0
- package/dist/doctor-DOLJRGS4.js +17 -0
- package/dist/{register-commands-IXYE5CNZ.js → register-commands-FBJ6XQ3L.js} +296 -398
- package/dist/register-commands-FBJ6XQ3L.js.map +1 -0
- package/dist/uninstall-DX6LFKMX.js +15 -0
- package/dist/{update-RAF7QRYF.js → update-P2IPG7RO.js} +3 -3
- package/guides/mini.md +4 -4
- package/guides/reference.md +75 -16
- package/package.json +1 -1
- package/dist/agents-RVYQ44DB.js +0 -16
- package/dist/auth-S5DVUIUJ.js +0 -18
- package/dist/chunk-HNVOYWC2.js.map +0 -1
- package/dist/chunk-NBVIEZZQ.js.map +0 -1
- package/dist/chunk-P3LDTCLB.js.map +0 -1
- package/dist/chunk-PIYJQE4Z.js +0 -102
- package/dist/chunk-PIYJQE4Z.js.map +0 -1
- package/dist/chunk-SSYMRT4I.js +0 -126
- package/dist/chunk-SSYMRT4I.js.map +0 -1
- package/dist/chunk-TWM7I2LU.js +0 -116
- package/dist/chunk-TWM7I2LU.js.map +0 -1
- package/dist/chunk-V3QOQSXI.js.map +0 -1
- package/dist/chunk-WRUSDYYE.js +0 -97
- package/dist/chunk-WRUSDYYE.js.map +0 -1
- package/dist/chunk-XNTNXEWY.js.map +0 -1
- package/dist/cli-6BOB6KAN.js.map +0 -1
- package/dist/doctor-DD7EQGCA.js +0 -18
- package/dist/register-commands-IXYE5CNZ.js.map +0 -1
- package/dist/uninstall-OBV4Z3JE.js +0 -16
- /package/dist/{agents-RVYQ44DB.js.map → agents-RVTQYE6A.js.map} +0 -0
- /package/dist/{auth-S5DVUIUJ.js.map → config-ML2RCR7J.js.map} +0 -0
- /package/dist/{doctor-DD7EQGCA.js.map → doctor-DOLJRGS4.js.map} +0 -0
- /package/dist/{uninstall-OBV4Z3JE.js.map → uninstall-DX6LFKMX.js.map} +0 -0
- /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
|
|
46
|
-
-
|
|
47
|
-
-
|
|
48
|
-
-
|
|
49
|
-
-
|
|
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
|
|
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
|
|
82
|
-
almanac
|
|
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
|
|
97
|
+
codealmanac # interactive setup wizard; choose provider + model
|
|
92
98
|
# (or: codealmanac --yes)
|
|
93
99
|
|
|
94
100
|
cd your-repo
|
|
95
|
-
almanac bootstrap # default
|
|
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 --
|
|
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 +
|
|
135
|
-
almanac
|
|
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
|
-
|
|
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":[]}
|