@slowcook-ai/cli 0.19.0-alpha.8 → 0.19.1
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/AGENTS.md +240 -0
- package/REPORTING.md +193 -0
- package/dist/cli.js +78 -0
- package/dist/cli.js.map +1 -1
- package/dist/commands/brand/index.d.ts +26 -0
- package/dist/commands/brand/index.d.ts.map +1 -0
- package/dist/commands/brand/index.js +257 -0
- package/dist/commands/brand/index.js.map +1 -0
- package/dist/commands/brew/agent.d.ts +7 -2
- package/dist/commands/brew/agent.d.ts.map +1 -1
- package/dist/commands/brew/agent.js +9 -0
- package/dist/commands/brew/agent.js.map +1 -1
- package/dist/commands/brew/halt.d.ts +26 -0
- package/dist/commands/brew/halt.d.ts.map +1 -1
- package/dist/commands/brew/halt.js.map +1 -1
- package/dist/commands/brew/index.d.ts.map +1 -1
- package/dist/commands/brew/index.js +142 -18
- package/dist/commands/brew/index.js.map +1 -1
- package/dist/commands/brew/pair-navigator.d.ts +119 -0
- package/dist/commands/brew/pair-navigator.d.ts.map +1 -0
- package/dist/commands/brew/pair-navigator.js +187 -0
- package/dist/commands/brew/pair-navigator.js.map +1 -0
- package/dist/commands/budget/index.d.ts +2 -0
- package/dist/commands/budget/index.d.ts.map +1 -0
- package/dist/commands/budget/index.js +252 -0
- package/dist/commands/budget/index.js.map +1 -0
- package/dist/commands/chef/drift-fix.d.ts +33 -4
- package/dist/commands/chef/drift-fix.d.ts.map +1 -1
- package/dist/commands/chef/drift-fix.js +417 -29
- package/dist/commands/chef/drift-fix.js.map +1 -1
- package/dist/commands/chef/index.js +13 -3
- package/dist/commands/chef/index.js.map +1 -1
- package/dist/commands/chef/orchestrate.d.ts +1 -1
- package/dist/commands/chef/orchestrate.d.ts.map +1 -1
- package/dist/commands/chef/orchestrate.js +32 -9
- package/dist/commands/chef/orchestrate.js.map +1 -1
- package/dist/commands/dev-env/config.d.ts +57 -0
- package/dist/commands/dev-env/config.d.ts.map +1 -0
- package/dist/commands/dev-env/config.js +96 -0
- package/dist/commands/dev-env/config.js.map +1 -0
- package/dist/commands/dev-env/index.d.ts +27 -0
- package/dist/commands/dev-env/index.d.ts.map +1 -0
- package/dist/commands/dev-env/index.js +226 -0
- package/dist/commands/dev-env/index.js.map +1 -0
- package/dist/commands/dev-env/init.d.ts +28 -0
- package/dist/commands/dev-env/init.d.ts.map +1 -0
- package/dist/commands/dev-env/init.js +135 -0
- package/dist/commands/dev-env/init.js.map +1 -0
- package/dist/commands/docs/index.d.ts +16 -0
- package/dist/commands/docs/index.d.ts.map +1 -0
- package/dist/commands/docs/index.js +127 -0
- package/dist/commands/docs/index.js.map +1 -0
- package/dist/commands/eval/index.d.ts +54 -0
- package/dist/commands/eval/index.d.ts.map +1 -0
- package/dist/commands/eval/index.js +294 -0
- package/dist/commands/eval/index.js.map +1 -0
- package/dist/commands/extract/index.d.ts.map +1 -1
- package/dist/commands/extract/index.js +23 -1
- package/dist/commands/extract/index.js.map +1 -1
- package/dist/commands/garnish/index.d.ts +56 -0
- package/dist/commands/garnish/index.d.ts.map +1 -0
- package/dist/commands/garnish/index.js +281 -0
- package/dist/commands/garnish/index.js.map +1 -0
- package/dist/commands/garnish/trailer.d.ts +79 -0
- package/dist/commands/garnish/trailer.d.ts.map +1 -0
- package/dist/commands/garnish/trailer.js +118 -0
- package/dist/commands/garnish/trailer.js.map +1 -0
- package/dist/commands/init/index.d.ts.map +1 -1
- package/dist/commands/init/index.js +33 -0
- package/dist/commands/init/index.js.map +1 -1
- package/dist/commands/init/mock-vite.d.ts +54 -0
- package/dist/commands/init/mock-vite.d.ts.map +1 -0
- package/dist/commands/init/mock-vite.js +613 -0
- package/dist/commands/init/mock-vite.js.map +1 -0
- package/dist/commands/init/mock.d.ts +6 -0
- package/dist/commands/init/mock.d.ts.map +1 -1
- package/dist/commands/init/mock.js +20 -4
- package/dist/commands/init/mock.js.map +1 -1
- package/dist/commands/init/plan.d.ts +26 -1
- package/dist/commands/init/plan.d.ts.map +1 -1
- package/dist/commands/init/plan.js +41 -3
- package/dist/commands/init/plan.js.map +1 -1
- package/dist/commands/init/templates.d.ts.map +1 -1
- package/dist/commands/init/templates.js +12 -4
- package/dist/commands/init/templates.js.map +1 -1
- package/dist/commands/knowledge-add.d.ts +52 -0
- package/dist/commands/knowledge-add.d.ts.map +1 -0
- package/dist/commands/knowledge-add.js +232 -0
- package/dist/commands/knowledge-add.js.map +1 -0
- package/dist/commands/map/emit-typeorm.d.ts +117 -0
- package/dist/commands/map/emit-typeorm.d.ts.map +1 -0
- package/dist/commands/map/emit-typeorm.js +341 -0
- package/dist/commands/map/emit-typeorm.js.map +1 -0
- package/dist/commands/map/index.d.ts +18 -0
- package/dist/commands/map/index.d.ts.map +1 -1
- package/dist/commands/map/index.js +28 -0
- package/dist/commands/map/index.js.map +1 -1
- package/dist/commands/plate/agent.d.ts +7 -0
- package/dist/commands/plate/agent.d.ts.map +1 -1
- package/dist/commands/plate/agent.js +1 -1
- package/dist/commands/plate/agent.js.map +1 -1
- package/dist/commands/plate/index.d.ts.map +1 -1
- package/dist/commands/plate/index.js +6 -0
- package/dist/commands/plate/index.js.map +1 -1
- package/dist/commands/recon/index.d.ts +16 -3
- package/dist/commands/recon/index.d.ts.map +1 -1
- package/dist/commands/recon/index.js +267 -16
- package/dist/commands/recon/index.js.map +1 -1
- package/dist/commands/recon/migration-gate.d.ts +59 -0
- package/dist/commands/recon/migration-gate.d.ts.map +1 -0
- package/dist/commands/recon/migration-gate.js +131 -0
- package/dist/commands/recon/migration-gate.js.map +1 -0
- package/dist/commands/recon/reuse.d.ts +32 -0
- package/dist/commands/recon/reuse.d.ts.map +1 -1
- package/dist/commands/recon/reuse.js +66 -0
- package/dist/commands/recon/reuse.js.map +1 -1
- package/dist/commands/recon/stale-stubs.d.ts +65 -0
- package/dist/commands/recon/stale-stubs.d.ts.map +1 -0
- package/dist/commands/recon/stale-stubs.js +84 -0
- package/dist/commands/recon/stale-stubs.js.map +1 -0
- package/dist/commands/refine/agent.d.ts +23 -0
- package/dist/commands/refine/agent.d.ts.map +1 -1
- package/dist/commands/refine/agent.js +245 -15
- package/dist/commands/refine/agent.js.map +1 -1
- package/dist/commands/refine/brownfield-answer.d.ts +81 -0
- package/dist/commands/refine/brownfield-answer.d.ts.map +1 -0
- package/dist/commands/refine/brownfield-answer.js +231 -0
- package/dist/commands/refine/brownfield-answer.js.map +1 -0
- package/dist/commands/refine/context.d.ts +27 -1
- package/dist/commands/refine/context.d.ts.map +1 -1
- package/dist/commands/refine/context.js +438 -6
- package/dist/commands/refine/context.js.map +1 -1
- package/dist/commands/refine/git-attention.d.ts +123 -0
- package/dist/commands/refine/git-attention.d.ts.map +1 -0
- package/dist/commands/refine/git-attention.js +378 -0
- package/dist/commands/refine/git-attention.js.map +1 -0
- package/dist/commands/refine/history-index.d.ts +66 -0
- package/dist/commands/refine/history-index.d.ts.map +1 -1
- package/dist/commands/refine/history-index.js +195 -8
- package/dist/commands/refine/history-index.js.map +1 -1
- package/dist/commands/refine/index.d.ts.map +1 -1
- package/dist/commands/refine/index.js +105 -18
- package/dist/commands/refine/index.js.map +1 -1
- package/dist/commands/refine/multifurcate.d.ts +129 -0
- package/dist/commands/refine/multifurcate.d.ts.map +1 -0
- package/dist/commands/refine/multifurcate.js +247 -0
- package/dist/commands/refine/multifurcate.js.map +1 -0
- package/dist/commands/refine/proposals-synth.d.ts +50 -1
- package/dist/commands/refine/proposals-synth.d.ts.map +1 -1
- package/dist/commands/refine/proposals-synth.js +199 -35
- package/dist/commands/refine/proposals-synth.js.map +1 -1
- package/dist/commands/refine/spec-yaml.d.ts +214 -1210
- package/dist/commands/refine/spec-yaml.d.ts.map +1 -1
- package/dist/commands/refine/spec-yaml.js +10 -0
- package/dist/commands/refine/spec-yaml.js.map +1 -1
- package/dist/commands/refresh-knowledge.d.ts +139 -0
- package/dist/commands/refresh-knowledge.d.ts.map +1 -0
- package/dist/commands/refresh-knowledge.js +1029 -0
- package/dist/commands/refresh-knowledge.js.map +1 -0
- package/dist/commands/run-mock/index.d.ts.map +1 -1
- package/dist/commands/run-mock/index.js +135 -22
- package/dist/commands/run-mock/index.js.map +1 -1
- package/dist/commands/testgen/agent.d.ts +13 -0
- package/dist/commands/testgen/agent.d.ts.map +1 -1
- package/dist/commands/testgen/agent.js +137 -11
- package/dist/commands/testgen/agent.js.map +1 -1
- package/dist/commands/upsert-agent-docs.d.ts +48 -0
- package/dist/commands/upsert-agent-docs.d.ts.map +1 -0
- package/dist/commands/upsert-agent-docs.js +298 -0
- package/dist/commands/upsert-agent-docs.js.map +1 -0
- package/dist/commands/vibe/agent.d.ts +7 -0
- package/dist/commands/vibe/agent.d.ts.map +1 -1
- package/dist/commands/vibe/agent.js +2 -2
- package/dist/commands/vibe/agent.js.map +1 -1
- package/dist/commands/vibe/index.d.ts.map +1 -1
- package/dist/commands/vibe/index.js +7 -1
- package/dist/commands/vibe/index.js.map +1 -1
- package/dist/cost-store.d.ts +52 -0
- package/dist/cost-store.d.ts.map +1 -0
- package/dist/cost-store.js +108 -0
- package/dist/cost-store.js.map +1 -0
- package/dist/lib/budget.d.ts +73 -0
- package/dist/lib/budget.d.ts.map +1 -0
- package/dist/lib/budget.js +225 -0
- package/dist/lib/budget.js.map +1 -0
- package/dist/lib/mock-shape.d.ts +29 -0
- package/dist/lib/mock-shape.d.ts.map +1 -0
- package/dist/lib/mock-shape.js +77 -0
- package/dist/lib/mock-shape.js.map +1 -0
- package/dist/lib/read-only.d.ts +22 -0
- package/dist/lib/read-only.d.ts.map +1 -0
- package/dist/lib/read-only.js +34 -0
- package/dist/lib/read-only.js.map +1 -0
- package/package.json +17 -12
|
@@ -0,0 +1,252 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 0.19.0-α.35 (sc#66 follow-up) — `slowcook budget` subcommand.
|
|
3
|
+
*
|
|
4
|
+
* slowcook budget # show config + month-to-date spend
|
|
5
|
+
* slowcook budget set --monthly 50 # set monthly_budget_usd
|
|
6
|
+
* slowcook budget set --monthly 50 --start-day 15 --story 10
|
|
7
|
+
* slowcook budget rm # delete config (disables gauge)
|
|
8
|
+
*
|
|
9
|
+
* Writes/reads `.brewing/budget.yaml`. Idempotent: `set` merges into
|
|
10
|
+
* existing config; absent flags keep their current values; missing
|
|
11
|
+
* monthly_budget_usd on a brand-new config defaults nothing (must be
|
|
12
|
+
* supplied at least once).
|
|
13
|
+
*/
|
|
14
|
+
import { existsSync, mkdirSync, readFileSync, unlinkSync, writeFileSync } from "node:fs";
|
|
15
|
+
import { join } from "node:path";
|
|
16
|
+
import YAML from "yaml";
|
|
17
|
+
import { loadBudgetConfig, aggregateMonthSpend, aggregateSpendSince, currentPeriodStart, classifyBudgetStatus, } from "../../lib/budget.js";
|
|
18
|
+
function parseArgs(argv) {
|
|
19
|
+
const args = { cwd: process.cwd(), action: "show" };
|
|
20
|
+
const positional = [];
|
|
21
|
+
for (let i = 0; i < argv.length; i++) {
|
|
22
|
+
const arg = argv[i];
|
|
23
|
+
const next = argv[i + 1];
|
|
24
|
+
if (arg === "--cwd" && next) {
|
|
25
|
+
args.cwd = next;
|
|
26
|
+
i++;
|
|
27
|
+
}
|
|
28
|
+
else if (arg === "--monthly" && next) {
|
|
29
|
+
args.monthly = Number(next);
|
|
30
|
+
i++;
|
|
31
|
+
}
|
|
32
|
+
else if (arg === "--start-day" && next) {
|
|
33
|
+
args.startDay = Number(next);
|
|
34
|
+
i++;
|
|
35
|
+
}
|
|
36
|
+
else if (arg === "--story" && next) {
|
|
37
|
+
args.story = Number(next);
|
|
38
|
+
i++;
|
|
39
|
+
}
|
|
40
|
+
else if (arg === "--credit" && next) {
|
|
41
|
+
args.credit = Number(next);
|
|
42
|
+
i++;
|
|
43
|
+
}
|
|
44
|
+
else if (arg === "--credit-baseline" && next) {
|
|
45
|
+
args.creditBaselineAt = next;
|
|
46
|
+
i++;
|
|
47
|
+
}
|
|
48
|
+
else if (arg === "--help" || arg === "-h") {
|
|
49
|
+
printHelp();
|
|
50
|
+
process.exit(0);
|
|
51
|
+
}
|
|
52
|
+
else if (arg && !arg.startsWith("--")) {
|
|
53
|
+
positional.push(arg);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
const verb = positional[0];
|
|
57
|
+
if (verb === "set" || verb === "rm")
|
|
58
|
+
args.action = verb;
|
|
59
|
+
else if (verb && verb !== "show") {
|
|
60
|
+
throw new Error(`Unknown budget action: ${verb}. Use show | set | rm.`);
|
|
61
|
+
}
|
|
62
|
+
return args;
|
|
63
|
+
}
|
|
64
|
+
function printHelp() {
|
|
65
|
+
console.log(`
|
|
66
|
+
slowcook budget — manage the project budget(s) for the fuel gauge
|
|
67
|
+
|
|
68
|
+
Two independent gauges, both optional, both opt-in:
|
|
69
|
+
|
|
70
|
+
monthly_budget_usd A per-period cap that resets each month.
|
|
71
|
+
credit_balance_usd A non-recurring credit deposit (e.g. you topped
|
|
72
|
+
up $25 on Anthropic and DON'T have auto-recharge);
|
|
73
|
+
the gauge subtracts ALL-TIME spend from this.
|
|
74
|
+
|
|
75
|
+
Usage:
|
|
76
|
+
slowcook budget Show current config + spend
|
|
77
|
+
slowcook budget set --monthly <usd> Set the monthly cap
|
|
78
|
+
slowcook budget set --monthly 50 --start-day 15 Non-1st reset day
|
|
79
|
+
slowcook budget set --credit <usd> Track a one-shot deposit
|
|
80
|
+
slowcook budget set --story <usd> Optional per-story ceiling
|
|
81
|
+
slowcook budget rm Delete .brewing/budget.yaml
|
|
82
|
+
|
|
83
|
+
Flags:
|
|
84
|
+
--monthly <usd> Monthly budget in USD. Resets each period.
|
|
85
|
+
--start-day <1-31> Calendar day the monthly budget resets. Default 1.
|
|
86
|
+
--credit <usd> One-shot credit deposit. Captures the date of set as
|
|
87
|
+
a baseline; spend tracked from there. Re-run to top up.
|
|
88
|
+
--story <usd> Optional per-story informational ceiling.
|
|
89
|
+
--cwd <path> Project root. Defaults to current working dir.
|
|
90
|
+
|
|
91
|
+
When set, every refine comment appends:
|
|
92
|
+
⛽ Project this month: $X of $Y (monthly cap)
|
|
93
|
+
🪙 Anthropic credit: $X of $Y (credit balance)
|
|
94
|
+
|
|
95
|
+
Both fire ⚠️ at 80% and 🛑 at 95%.
|
|
96
|
+
|
|
97
|
+
Top-up workflow (no auto-recharge):
|
|
98
|
+
$ slowcook budget set --credit 25 # at the start of $25 deposit
|
|
99
|
+
... burn through credit ...
|
|
100
|
+
$ slowcook budget set --credit 50 # after topping up to $50 (new baseline)
|
|
101
|
+
`);
|
|
102
|
+
}
|
|
103
|
+
function configPath(cwd) {
|
|
104
|
+
return join(cwd, ".brewing", "budget.yaml");
|
|
105
|
+
}
|
|
106
|
+
function fmtUsd(n) {
|
|
107
|
+
return `$${n.toFixed(2)}`;
|
|
108
|
+
}
|
|
109
|
+
export async function budget(argv) {
|
|
110
|
+
let parsed;
|
|
111
|
+
try {
|
|
112
|
+
parsed = parseArgs(argv);
|
|
113
|
+
}
|
|
114
|
+
catch (e) {
|
|
115
|
+
console.error(e.message);
|
|
116
|
+
process.exit(2);
|
|
117
|
+
}
|
|
118
|
+
if (parsed.action === "rm") {
|
|
119
|
+
const p = configPath(parsed.cwd);
|
|
120
|
+
if (!existsSync(p)) {
|
|
121
|
+
console.log(`No .brewing/budget.yaml — nothing to remove.`);
|
|
122
|
+
return;
|
|
123
|
+
}
|
|
124
|
+
unlinkSync(p);
|
|
125
|
+
console.log(`Removed ${p}. Fuel gauge now disabled.`);
|
|
126
|
+
return;
|
|
127
|
+
}
|
|
128
|
+
if (parsed.action === "set") {
|
|
129
|
+
// Merge into existing config; allow updating individual fields.
|
|
130
|
+
let existing = null;
|
|
131
|
+
try {
|
|
132
|
+
existing = loadBudgetConfig(parsed.cwd);
|
|
133
|
+
}
|
|
134
|
+
catch (e) {
|
|
135
|
+
console.error(`Existing config is invalid — fix or rm first: ${e.message}`);
|
|
136
|
+
process.exit(2);
|
|
137
|
+
}
|
|
138
|
+
const monthly = parsed.monthly ?? existing?.monthly_budget_usd;
|
|
139
|
+
if (monthly !== undefined && (!Number.isFinite(monthly) || monthly <= 0)) {
|
|
140
|
+
console.error(`--monthly must be a positive number, got ${parsed.monthly}`);
|
|
141
|
+
process.exit(2);
|
|
142
|
+
}
|
|
143
|
+
const startDay = parsed.startDay ?? existing?.monthly_start_day ?? 1;
|
|
144
|
+
if (!Number.isInteger(startDay) || startDay < 1 || startDay > 31) {
|
|
145
|
+
console.error(`--start-day must be an integer 1-31, got ${parsed.startDay}`);
|
|
146
|
+
process.exit(2);
|
|
147
|
+
}
|
|
148
|
+
const story = parsed.story ?? existing?.story_budget_usd;
|
|
149
|
+
if (story !== undefined && (!Number.isFinite(story) || story <= 0)) {
|
|
150
|
+
console.error(`--story must be a positive number, got ${parsed.story}`);
|
|
151
|
+
process.exit(2);
|
|
152
|
+
}
|
|
153
|
+
// Credit handling — a fresh --credit captures "now" as the
|
|
154
|
+
// baseline. Re-running --credit (top-up) refreshes the baseline so
|
|
155
|
+
// the gauge tracks ONLY spend from the new deposit forward.
|
|
156
|
+
let credit = existing?.credit_balance_usd;
|
|
157
|
+
let creditBaselineAt = existing?.credit_baseline_at;
|
|
158
|
+
if (parsed.credit !== undefined) {
|
|
159
|
+
if (!Number.isFinite(parsed.credit) || parsed.credit <= 0) {
|
|
160
|
+
console.error(`--credit must be a positive number, got ${parsed.credit}`);
|
|
161
|
+
process.exit(2);
|
|
162
|
+
}
|
|
163
|
+
credit = parsed.credit;
|
|
164
|
+
creditBaselineAt = parsed.creditBaselineAt ?? new Date().toISOString();
|
|
165
|
+
}
|
|
166
|
+
if (monthly === undefined && credit === undefined) {
|
|
167
|
+
console.error(`Set at least one of --monthly or --credit. Try: slowcook budget set --credit 25`);
|
|
168
|
+
process.exit(2);
|
|
169
|
+
}
|
|
170
|
+
const next = {
|
|
171
|
+
schema_version: 1,
|
|
172
|
+
monthly_start_day: startDay,
|
|
173
|
+
...(monthly !== undefined ? { monthly_budget_usd: monthly } : {}),
|
|
174
|
+
...(story !== undefined ? { story_budget_usd: story } : {}),
|
|
175
|
+
...(credit !== undefined ? { credit_balance_usd: credit } : {}),
|
|
176
|
+
...(creditBaselineAt !== undefined ? { credit_baseline_at: creditBaselineAt } : {}),
|
|
177
|
+
};
|
|
178
|
+
const p = configPath(parsed.cwd);
|
|
179
|
+
mkdirSync(join(parsed.cwd, ".brewing"), { recursive: true });
|
|
180
|
+
writeFileSync(p, YAML.stringify(next, { lineWidth: 0 }), "utf8");
|
|
181
|
+
const verb = existing ? "Updated" : "Wrote";
|
|
182
|
+
console.log(`${verb} ${p}`);
|
|
183
|
+
console.log(readFileSync(p, "utf8"));
|
|
184
|
+
return;
|
|
185
|
+
}
|
|
186
|
+
// show
|
|
187
|
+
let config;
|
|
188
|
+
try {
|
|
189
|
+
config = loadBudgetConfig(parsed.cwd);
|
|
190
|
+
}
|
|
191
|
+
catch (e) {
|
|
192
|
+
console.error(`Config at ${configPath(parsed.cwd)} is invalid: ${e.message}`);
|
|
193
|
+
process.exit(2);
|
|
194
|
+
}
|
|
195
|
+
if (!config) {
|
|
196
|
+
console.log(`No .brewing/budget.yaml — fuel gauge disabled.`);
|
|
197
|
+
console.log(`Set one with: slowcook budget set --credit 25 (one-shot deposit)`);
|
|
198
|
+
console.log(` or: slowcook budget set --monthly 50 (recurring cap)`);
|
|
199
|
+
return;
|
|
200
|
+
}
|
|
201
|
+
const now = new Date();
|
|
202
|
+
console.log(`Config: ${configPath(parsed.cwd)}`);
|
|
203
|
+
if (config.monthly_budget_usd !== undefined) {
|
|
204
|
+
console.log(` monthly_budget_usd: ${fmtUsd(config.monthly_budget_usd)}`);
|
|
205
|
+
console.log(` monthly_start_day: ${config.monthly_start_day}`);
|
|
206
|
+
}
|
|
207
|
+
if (config.story_budget_usd !== undefined) {
|
|
208
|
+
console.log(` story_budget_usd: ${fmtUsd(config.story_budget_usd)}`);
|
|
209
|
+
}
|
|
210
|
+
if (config.credit_balance_usd !== undefined) {
|
|
211
|
+
console.log(` credit_balance_usd: ${fmtUsd(config.credit_balance_usd)}`);
|
|
212
|
+
console.log(` credit_baseline_at: ${config.credit_baseline_at ?? "(unset)"}`);
|
|
213
|
+
}
|
|
214
|
+
console.log(``);
|
|
215
|
+
if (config.monthly_budget_usd !== undefined) {
|
|
216
|
+
const period = currentPeriodStart(config, now);
|
|
217
|
+
const spend = aggregateMonthSpend(parsed.cwd, config, now);
|
|
218
|
+
const status = classifyBudgetStatus(spend.usd, config.monthly_budget_usd);
|
|
219
|
+
const pct = Math.round((spend.usd / config.monthly_budget_usd) * 100);
|
|
220
|
+
const icon = status === "halt" ? "🛑" : status === "warn" ? "⚠️" : "⛽";
|
|
221
|
+
console.log(`Period start: ${period.toISOString().slice(0, 10)}`);
|
|
222
|
+
console.log(`${icon} Spent this period: ${fmtUsd(spend.usd)} of ${fmtUsd(config.monthly_budget_usd)} (${pct}%)`);
|
|
223
|
+
console.log(` ${spend.entryCount} entr${spend.entryCount === 1 ? "y" : "ies"} across ${spend.storyCount} stor${spend.storyCount === 1 ? "y" : "ies"}.`);
|
|
224
|
+
if (status === "warn") {
|
|
225
|
+
console.log(` ⚠️ approaching monthly budget — consider topping up.`);
|
|
226
|
+
}
|
|
227
|
+
else if (status === "halt") {
|
|
228
|
+
console.log(` 🛑 over budget — agents will halt without the override-budget label.`);
|
|
229
|
+
}
|
|
230
|
+
console.log(``);
|
|
231
|
+
}
|
|
232
|
+
if (config.credit_balance_usd !== undefined && config.credit_baseline_at) {
|
|
233
|
+
const baseline = new Date(config.credit_baseline_at);
|
|
234
|
+
const spend = aggregateSpendSince(parsed.cwd, baseline);
|
|
235
|
+
const status = classifyBudgetStatus(spend.usd, config.credit_balance_usd);
|
|
236
|
+
const remaining = Math.max(0, config.credit_balance_usd - spend.usd);
|
|
237
|
+
const pctLeft = Math.max(0, 100 - Math.round((spend.usd / config.credit_balance_usd) * 100));
|
|
238
|
+
const icon = status === "halt" ? "🛑" : status === "warn" ? "⚠️" : "🪙";
|
|
239
|
+
console.log(`Credit baseline: ${config.credit_baseline_at.slice(0, 10)}`);
|
|
240
|
+
console.log(`${icon} Anthropic credit: ${fmtUsd(remaining)} of ${fmtUsd(config.credit_balance_usd)} remaining (${pctLeft}%)`);
|
|
241
|
+
console.log(` Spent ${fmtUsd(spend.usd)} since baseline. ${spend.entryCount} entr${spend.entryCount === 1 ? "y" : "ies"}.`);
|
|
242
|
+
if (status === "warn") {
|
|
243
|
+
console.log(` ⚠️ approaching empty — top up at https://console.anthropic.com/settings/billing.`);
|
|
244
|
+
console.log(` Then: slowcook budget set --credit <new-total> # captures fresh baseline`);
|
|
245
|
+
}
|
|
246
|
+
else if (status === "halt") {
|
|
247
|
+
console.log(` 🛑 credit nearly exhausted — pipeline will halt on 402 imminently.`);
|
|
248
|
+
console.log(` Top up + re-run: slowcook budget set --credit <new-total>`);
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/budget/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,9 +8,17 @@
|
|
|
8
8
|
* ChefVerdict, applies edits surgically, validates, commits, posts an
|
|
9
9
|
* audit comment.
|
|
10
10
|
*
|
|
11
|
-
* Frozen surface (HARD):
|
|
12
|
-
* .brewing/
|
|
13
|
-
*
|
|
11
|
+
* Frozen surface (HARD): tests/integration/, tests/schema/,
|
|
12
|
+
* tests/acceptance/ (spec-contract assertions) + .brewing/auto-gen/,
|
|
13
|
+
* .brewing/code-map.*, .brewing/recon-result.json, .brewing/history-
|
|
14
|
+
* index.json (slowcook-managed artifacts). If a fix requires an
|
|
15
|
+
* ASSERTION change → escalates to PM via pm_comment (option B =
|
|
16
|
+
* testgen --regenerate).
|
|
17
|
+
*
|
|
18
|
+
* NOT frozen (α.54 — chef owns test infrastructure):
|
|
19
|
+
* tests/helpers/, vitest.config.*, playwright.config.*, package.json
|
|
20
|
+
* (devDeps), tsconfig.json, setup files. Chef can fix the runner
|
|
21
|
+
* machinery freehand.
|
|
14
22
|
*
|
|
15
23
|
* Ledger at .brewing/chef/<story-id>.json tracks moves + cost. Cycle
|
|
16
24
|
* detection + budget cap enforce convergence.
|
|
@@ -21,6 +29,8 @@
|
|
|
21
29
|
* --trigger mock_isolation_check_failed \
|
|
22
30
|
* --trigger-detail "Relative import resolves to a non-existent file..."
|
|
23
31
|
*/
|
|
32
|
+
import { type ChefVerdict } from "@slowcook-ai/llm-anthropic";
|
|
33
|
+
export declare function isFrozenPath(path: string): boolean;
|
|
24
34
|
/**
|
|
25
35
|
* Parse a vitest-style test runner output to extract the failing test
|
|
26
36
|
* files. Brew agent halts include the runner's stdout/stderr; chef
|
|
@@ -60,5 +70,24 @@ export declare function collectImportedSourceFiles(testContents: Record<string,
|
|
|
60
70
|
* different `exists` predicate).
|
|
61
71
|
*/
|
|
62
72
|
export declare function resolveImportToFile(importPath: string, testFile: string, repoRoot: string, exists: (p: string) => boolean): string | null;
|
|
63
|
-
export declare function chefDrift(argv: string[],
|
|
73
|
+
export declare function chefDrift(argv: string[], cliVersion: string): Promise<void>;
|
|
74
|
+
/**
|
|
75
|
+
* α.53 — extract whatever signal we can from a malformed chef JSON.
|
|
76
|
+
*
|
|
77
|
+
* The model often returns valid prose (`"rationale": "long sentence about
|
|
78
|
+
* what's wrong"`) but the JSON envelope breaks if the rationale runs past
|
|
79
|
+
* Anthropic's max-tokens midstring or contains an unescaped quote.
|
|
80
|
+
*
|
|
81
|
+
* Strategy:
|
|
82
|
+
* 1. Look for ```json fence — strip it.
|
|
83
|
+
* 2. Try a quick "auto-close unterminated string" repair: count
|
|
84
|
+
* unescaped quotes; if odd, append a closing quote + `}` and retry
|
|
85
|
+
* JSON.parse.
|
|
86
|
+
* 3. If still broken, regex-extract the `"rationale"` field value up
|
|
87
|
+
* to wherever it terminates (literal quote or end of buffer).
|
|
88
|
+
* 4. Build a pm_question verdict with the recovered rationale plus a
|
|
89
|
+
* bookkeeping note about the parse failure. Empty edits, no
|
|
90
|
+
* next-dispatch — the PM is the next step.
|
|
91
|
+
*/
|
|
92
|
+
export declare function recoverChefVerdictFromMalformedJson(rawText: string, parseError: string, storyId: string, issueNumber: number): ChefVerdict;
|
|
64
93
|
//# sourceMappingURL=drift-fix.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"drift-fix.d.ts","sourceRoot":"","sources":["../../../src/commands/chef/drift-fix.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"drift-fix.d.ts","sourceRoot":"","sources":["../../../src/commands/chef/drift-fix.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAKH,OAAO,EAIL,KAAK,WAAW,EAEjB,MAAM,4BAA4B,CAAC;AAqGpC,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAQlD;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG;IACjD,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,gBAAgB,EAAE,MAAM,EAAE,CAAC;CAC5B,CA0BA;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,0BAA0B,CAAC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CA+BzG;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CACjC,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,OAAO,GAC7B,MAAM,GAAG,IAAI,CA4Bf;AA+dD,wBAAsB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAidjF;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,mCAAmC,CACjD,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,MAAM,GAClB,WAAW,CA4Db"}
|