specweave 3.0.3 → 3.0.6
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/.claude-plugin/marketplace.json +2 -2
- package/README.md +2 -2
- package/bin/specweave.js +12 -7
- package/bin/startup-check.js +1 -1
- package/dist/src/cli/commands/auto-handoff.d.ts +17 -23
- package/dist/src/cli/commands/auto-handoff.d.ts.map +1 -1
- package/dist/src/cli/commands/auto-handoff.js +140 -65
- package/dist/src/cli/commands/auto-handoff.js.map +1 -1
- package/dist/src/cli/commands/handoff.d.ts +10 -0
- package/dist/src/cli/commands/handoff.d.ts.map +1 -1
- package/dist/src/cli/commands/handoff.js +50 -0
- package/dist/src/cli/commands/handoff.js.map +1 -1
- package/dist/src/cli/commands/jev-helpers.d.ts +1 -1
- package/dist/src/cli/commands/jev-helpers.d.ts.map +1 -1
- package/dist/src/cli/commands/jev-helpers.js +8 -4
- package/dist/src/cli/commands/jev-helpers.js.map +1 -1
- package/dist/src/cli/commands/jev.js +4 -4
- package/dist/src/cli/commands/jev.js.map +1 -1
- package/dist/src/cli/commands/pickup.d.ts +11 -0
- package/dist/src/cli/commands/pickup.d.ts.map +1 -1
- package/dist/src/cli/commands/pickup.js +28 -8
- package/dist/src/cli/commands/pickup.js.map +1 -1
- package/dist/src/cli/helpers/init/gitignore-generator.d.ts.map +1 -1
- package/dist/src/cli/helpers/init/gitignore-generator.js +26 -5
- package/dist/src/cli/helpers/init/gitignore-generator.js.map +1 -1
- package/dist/src/core/config/types.d.ts +2 -2
- package/dist/src/core/config/types.d.ts.map +1 -1
- package/dist/src/core/jev/client.d.ts +4 -1
- package/dist/src/core/jev/client.d.ts.map +1 -1
- package/dist/src/core/jev/client.js +118 -23
- package/dist/src/core/jev/client.js.map +1 -1
- package/dist/src/core/jev/config.d.ts +1 -1
- package/dist/src/core/jev/config.d.ts.map +1 -1
- package/dist/src/core/jev/config.js +8 -3
- package/dist/src/core/jev/config.js.map +1 -1
- package/dist/src/core/jev/openai.d.ts +21 -0
- package/dist/src/core/jev/openai.d.ts.map +1 -0
- package/dist/src/core/jev/openai.js +116 -0
- package/dist/src/core/jev/openai.js.map +1 -0
- package/dist/src/core/jev/usage.d.ts +4 -0
- package/dist/src/core/jev/usage.d.ts.map +1 -1
- package/dist/src/core/jev/usage.js +3 -0
- package/dist/src/core/jev/usage.js.map +1 -1
- package/dist/src/core/session/checkpoint-worker.d.ts +2 -0
- package/dist/src/core/session/checkpoint-worker.d.ts.map +1 -0
- package/dist/src/core/session/checkpoint-worker.js +43 -0
- package/dist/src/core/session/checkpoint-worker.js.map +1 -0
- package/dist/src/core/session/handoff-all.d.ts +124 -0
- package/dist/src/core/session/handoff-all.d.ts.map +1 -0
- package/dist/src/core/session/handoff-all.js +429 -0
- package/dist/src/core/session/handoff-all.js.map +1 -0
- package/dist/src/core/session/handoff-doc-format.d.ts +9 -0
- package/dist/src/core/session/handoff-doc-format.d.ts.map +1 -1
- package/dist/src/core/session/handoff-doc-format.js +28 -4
- package/dist/src/core/session/handoff-doc-format.js.map +1 -1
- package/dist/src/core/session/handoff-git-state.d.ts +3 -1
- package/dist/src/core/session/handoff-git-state.d.ts.map +1 -1
- package/dist/src/core/session/handoff-git-state.js +32 -12
- package/dist/src/core/session/handoff-git-state.js.map +1 -1
- package/dist/src/core/session/handoff-report.js +1 -0
- package/dist/src/core/session/handoff-report.js.map +1 -1
- package/dist/src/core/session/nested-repos.d.ts +90 -0
- package/dist/src/core/session/nested-repos.d.ts.map +1 -0
- package/dist/src/core/session/nested-repos.js +239 -0
- package/dist/src/core/session/nested-repos.js.map +1 -0
- package/dist/src/core/session/pickup.d.ts +1 -0
- package/dist/src/core/session/pickup.d.ts.map +1 -1
- package/dist/src/core/session/pickup.js +4 -4
- package/dist/src/core/session/pickup.js.map +1 -1
- package/dist/src/core/session/session-checkpoint.d.ts +46 -0
- package/dist/src/core/session/session-checkpoint.d.ts.map +1 -0
- package/dist/src/core/session/session-checkpoint.js +262 -0
- package/dist/src/core/session/session-checkpoint.js.map +1 -0
- package/dist/src/core/session/usage-guard.d.ts +59 -51
- package/dist/src/core/session/usage-guard.d.ts.map +1 -1
- package/dist/src/core/session/usage-guard.js +148 -88
- package/dist/src/core/session/usage-guard.js.map +1 -1
- package/dist/src/core/session/work-handoff.d.ts +6 -0
- package/dist/src/core/session/work-handoff.d.ts.map +1 -1
- package/dist/src/core/session/work-handoff.js +55 -13
- package/dist/src/core/session/work-handoff.js.map +1 -1
- package/dist/src/core/tasks/ledger.d.ts +5 -1
- package/dist/src/core/tasks/ledger.d.ts.map +1 -1
- package/dist/src/core/tasks/ledger.js +6 -2
- package/dist/src/core/tasks/ledger.js.map +1 -1
- package/package.json +1 -1
- package/plugins/specweave/.claude-plugin/plugin.json +1 -1
- package/plugins/specweave/skills/handoff/SKILL.md +54 -9
- package/plugins/specweave/skills/jev/SKILL.md +81 -83
- package/src/templates/AGENTS.md.template +1 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "specweave",
|
|
3
|
-
"version": "3.0.
|
|
3
|
+
"version": "3.0.6",
|
|
4
4
|
"description": "Portable intent, specifications, task evidence, and handoffs across AI coding tools.",
|
|
5
5
|
"owner": {
|
|
6
6
|
"name": "Anton Abyzov",
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
"description": "SpecWeave unified plugin — increment lifecycle (plan, work the ledger, verify, review, complete), cross-tool handoff, GitHub/Jira/ADO sync",
|
|
13
13
|
"source": "./plugins/specweave",
|
|
14
14
|
"category": "development",
|
|
15
|
-
"version": "3.0.
|
|
15
|
+
"version": "3.0.6",
|
|
16
16
|
"author": {
|
|
17
17
|
"name": "Anton Abyzov",
|
|
18
18
|
"email": "anton.abyzov@gmail.com"
|
package/README.md
CHANGED
|
@@ -33,7 +33,7 @@ you (in Codex, or account 2): pick up
|
|
|
33
33
|
|
|
34
34
|
That is the whole handoff. "Hand off" runs `specweave handoff`: it releases your task claims, records why you stopped, and pushes your branch plus a snapshot of your uncommitted edits. "Pick up" runs `specweave pickup` in any other tool, account, machine or cloud session (a Claude Code Projects thread, a Codex cloud task): it brings that work into the checkout and prints the next task with its acceptance criteria. Nothing to copy, no paths to paste.
|
|
35
35
|
|
|
36
|
-
|
|
36
|
+
Keep a local recovery point with `specweave auto-handoff on`, once per machine. Claude Code and Codex queue silent background checkpoints after turns, at most once every five minutes per worktree and session. They need no model or network, never stop work at a usage percentage, and leave claims and the checkout untouched. `auto-handoff status` shows the checkpoint directory. When you choose to switch tools or machines, use `specweave handoff` to transfer ownership and push your work; `pickup` does not apply automatic checkpoints. [Automatic checkpoint rules](https://spec-weave.com/docs/guides/auto-handoff/) explains recovery and supported hooks.
|
|
37
37
|
|
|
38
38
|
`specweave report` writes an HTML timeline of who did what on an increment (tools, sessions, handoffs, pickups, test evidence), straight from the ledger.
|
|
39
39
|
|
|
@@ -86,7 +86,7 @@ npm i -g specweave@3
|
|
|
86
86
|
specweave update
|
|
87
87
|
```
|
|
88
88
|
|
|
89
|
-
`specweave update` rewrites `AGENTS.md` into the lean form, turns `CLAUDE.md` into an import of it, keeps your own sections, and backs up the old files under `.specweave/backups/`. Existing increments need no migration. The **[3.0.0 changelog](https://github.com/anton-abyzov/specweave/blob/develop/CHANGELOG.md#300---2026-09-25)** lists what changed and what was removed. To
|
|
89
|
+
`specweave update` rewrites `AGENTS.md` into the lean form, turns `CLAUDE.md` into an import of it, keeps your own sections, and backs up the old files under `.specweave/backups/`. Existing increments need no migration. The **[3.0.0 changelog](https://github.com/anton-abyzov/specweave/blob/develop/CHANGELOG.md#300---2026-09-25)** lists what changed and what was removed. To keep local recovery checkpoints after turns, run `specweave auto-handoff on` once. Existing enabled settings use the new behavior after upgrading the CLI; run `specweave update` to refresh old quota-stop instructions in project files.
|
|
90
90
|
|
|
91
91
|
<br/>
|
|
92
92
|
|
package/bin/specweave.js
CHANGED
|
@@ -184,6 +184,8 @@ program
|
|
|
184
184
|
program
|
|
185
185
|
.command('handoff [incrementId]')
|
|
186
186
|
.description('Hand off your work: release your claims, record why, and push it so `specweave pickup` continues it in any tool or account')
|
|
187
|
+
.option('--all', 'Write .specweave/handoffs/<date>-INDEX.md and index.json: every active increment and every nested repo with local-only work (writes nothing else)')
|
|
188
|
+
.option('--dry-run', 'With --all: print the index instead of writing it')
|
|
187
189
|
.option('--reason <reason>', 'Why you are handing off (e.g. "out of tokens")')
|
|
188
190
|
.option('--summary <summary>', 'Short summary of where things stand')
|
|
189
191
|
.option('--next <next>', 'The exact next step for the resuming agent')
|
|
@@ -211,6 +213,8 @@ program
|
|
|
211
213
|
json: options.json,
|
|
212
214
|
push: options.push === false ? false : undefined,
|
|
213
215
|
keepClaims: options.keepClaims,
|
|
216
|
+
all: options.all,
|
|
217
|
+
dryRun: options.dryRun,
|
|
214
218
|
});
|
|
215
219
|
});
|
|
216
220
|
|
|
@@ -219,10 +223,11 @@ program
|
|
|
219
223
|
.command('pickup [incrementId]')
|
|
220
224
|
.description('Pick up handed-off work (from any tool, machine or account) and print the next task with its acceptance criteria')
|
|
221
225
|
.option('--no-apply', 'Only show the waiting handoff; do not apply it to this checkout')
|
|
226
|
+
.option('--all', 'Print the newest handoff index (from `handoff --all`), actionable increments first; changes nothing')
|
|
222
227
|
.option('--json', 'Output as JSON')
|
|
223
228
|
.action(async (incrementId, options) => {
|
|
224
229
|
const { pickupCommand } = await import('../dist/src/cli/commands/pickup.js');
|
|
225
|
-
process.exitCode = await pickupCommand({ incrementId, json: options.json, apply: options.apply });
|
|
230
|
+
process.exitCode = await pickupCommand({ incrementId, json: options.json, apply: options.apply, all: options.all });
|
|
226
231
|
});
|
|
227
232
|
|
|
228
233
|
// Report command - HTML timeline of an increment's ledger (handoff evidence)
|
|
@@ -244,11 +249,11 @@ program
|
|
|
244
249
|
process.exitCode = await noteCommand(text, { incrementId });
|
|
245
250
|
});
|
|
246
251
|
|
|
247
|
-
// Auto-handoff -
|
|
252
|
+
// Auto-handoff - silent local recovery checkpoints (Claude Code, Codex)
|
|
248
253
|
program
|
|
249
254
|
.command('auto-handoff [action]')
|
|
250
|
-
.description('on | off | status:
|
|
251
|
-
.option('--at <percent>', '
|
|
255
|
+
.description('on | off | status: save local background checkpoints without interrupting work')
|
|
256
|
+
.option('--at <percent>', 'Legacy compatibility option; checkpoints are independent of usage', (v) => Number(v))
|
|
252
257
|
.action(async (action, options) => {
|
|
253
258
|
const { autoHandoffCommand } = await import('../dist/src/cli/commands/auto-handoff.js');
|
|
254
259
|
process.exitCode = await autoHandoffCommand(action, { at: options.at });
|
|
@@ -265,8 +270,8 @@ program
|
|
|
265
270
|
|
|
266
271
|
program
|
|
267
272
|
.command('usage-guard')
|
|
268
|
-
.description('Stop hook:
|
|
269
|
-
.option('--limit-hit', 'StopFailure hook
|
|
273
|
+
.description('Stop hook: queue a local checkpoint and return without interrupting work')
|
|
274
|
+
.option('--limit-hit', 'StopFailure hook: save locally after a rate-limit failure')
|
|
270
275
|
.action(async (options) => {
|
|
271
276
|
const { usageGuardCommand } = await import('../dist/src/cli/commands/auto-handoff.js');
|
|
272
277
|
process.exitCode = await usageGuardCommand({ limitHit: options.limitHit === true });
|
|
@@ -277,7 +282,7 @@ program
|
|
|
277
282
|
.command('jev <action> [args...]')
|
|
278
283
|
.description('Jev (System One): doctor | setup | ask | route | task | guard | screen | failure | browse | usage')
|
|
279
284
|
.option('--json', 'Machine-readable JSON output')
|
|
280
|
-
.option('--provider <name>', 'setup: openrouter | typesafe')
|
|
285
|
+
.option('--provider <name>', 'setup: openrouter | typesafe | openai')
|
|
281
286
|
.option('--model <model>', 'setup: model id (defaults to the provider default)')
|
|
282
287
|
.option('--guard-bash', 'setup: enable the opt-in PreToolUse Bash guard')
|
|
283
288
|
.option('--no-guard-bash', 'setup: disable the Bash guard')
|
package/bin/startup-check.js
CHANGED
|
@@ -4,7 +4,7 @@ export async function checkForDuplicates() {
|
|
|
4
4
|
try {
|
|
5
5
|
// Skip check for init command (no .specweave yet)
|
|
6
6
|
const args = process.argv.slice(2);
|
|
7
|
-
if (args.length === 0 ||
|
|
7
|
+
if (args.length === 0 || ['init', 'usage-guard', 'statusline'].includes(args[0]) || args[0] === '--help' || args[0] === '-h' || args[0] === '--version' || args[0] === '-V') {
|
|
8
8
|
return;
|
|
9
9
|
}
|
|
10
10
|
|
|
@@ -1,30 +1,10 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* CLI Commands: auto-handoff, statusline, usage-guard
|
|
3
|
-
*
|
|
4
|
-
* specweave auto-handoff [on|off|status] [--at 90]
|
|
5
|
-
* specweave statusline [--wrap "<your status line command>"] (Claude Code status line)
|
|
6
|
-
* specweave usage-guard (Stop hook, Claude Code and Codex)
|
|
7
|
-
* specweave usage-guard --limit-hit (StopFailure hook, Grok Build)
|
|
8
|
-
*
|
|
9
|
-
* `auto-handoff on` wires the tools once, in the user's own settings:
|
|
10
|
-
* Claude Code gets the status line (wrapping any existing one) and a Stop
|
|
11
|
-
* hook; Codex gets the same Stop hook in ~/.codex/hooks.json. From then on a
|
|
12
|
-
* session that reaches the threshold hands off by itself. Grok Build reports
|
|
13
|
-
* no usage percentage, so it gets a StopFailure hook in ~/.grok/hooks/ that
|
|
14
|
-
* runs the handoff itself right after a turn hits the rate limit.
|
|
15
|
-
*
|
|
16
|
-
* @module cli/commands/auto-handoff
|
|
17
|
-
*/
|
|
1
|
+
/** Opt-in local checkpoints, status display, and silent lifecycle hooks. */
|
|
18
2
|
/** Claude Code status line: record usage, then print a line (or the wrapped command's). */
|
|
19
3
|
export declare function statuslineCommand(opts?: {
|
|
20
4
|
wrap?: string;
|
|
21
5
|
home?: string;
|
|
22
6
|
}): Promise<number>;
|
|
23
|
-
/**
|
|
24
|
-
* Stop hook for Claude Code and Codex: `{}` or a block that asks for a handoff.
|
|
25
|
-
* With `limitHit` (Grok Build's StopFailure hook) the model has already run
|
|
26
|
-
* out, so the hook writes the handoff itself.
|
|
27
|
-
*/
|
|
7
|
+
/** Always return valid empty hook JSON. Saving happens outside the model turn. */
|
|
28
8
|
export declare function usageGuardCommand(opts?: {
|
|
29
9
|
home?: string;
|
|
30
10
|
limitHit?: boolean;
|
|
@@ -47,12 +27,26 @@ type Settings = Record<string, unknown> & {
|
|
|
47
27
|
command?: string;
|
|
48
28
|
};
|
|
49
29
|
};
|
|
50
|
-
/** Grok Build hook file:
|
|
30
|
+
/** Grok Build hook file: save locally when a turn fails on the rate limit. */
|
|
51
31
|
export declare function grokHook(): Settings;
|
|
52
32
|
export interface AutoHandoffOptions {
|
|
53
33
|
at?: number;
|
|
54
34
|
home?: string;
|
|
55
35
|
}
|
|
56
36
|
export declare function autoHandoffCommand(action?: string, opts?: AutoHandoffOptions): Promise<number>;
|
|
37
|
+
/**
|
|
38
|
+
* Codex runs a user hook only after the user trusts it, and records that in
|
|
39
|
+
* ~/.codex/config.toml as a `[hooks.state."<home>/.codex/hooks.json:stop:<group>:<hook>"]`
|
|
40
|
+
* table with a `trusted_hash`. Plugin hooks use keys like
|
|
41
|
+
* `"sw@specweave:hooks/hooks.json:stop:0:0"`, which say nothing about ours.
|
|
42
|
+
* The hash covers the hook's content, so a changed hook needs approving again.
|
|
43
|
+
* There is no command to approve one; Codex asks when it next starts in a terminal.
|
|
44
|
+
*/
|
|
45
|
+
export declare function codexHookTrusted(home?: string): boolean;
|
|
46
|
+
/**
|
|
47
|
+
* What `auto-handoff status` prints: checkpoint policy, whether each tool's hooks
|
|
48
|
+
* are actually in place, and the last usage each tool reported.
|
|
49
|
+
*/
|
|
50
|
+
export declare function autoHandoffStatus(home?: string, now?: number): string[];
|
|
57
51
|
export {};
|
|
58
52
|
//# sourceMappingURL=auto-handoff.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auto-handoff.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/auto-handoff.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"auto-handoff.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/auto-handoff.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAgC5E,2FAA2F;AAC3F,wBAAsB,iBAAiB,CAAC,IAAI,GAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAcpG;AAED,kFAAkF;AAClF,wBAAsB,iBAAiB,CAAC,IAAI,GAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CASzH;AAED,UAAU,SAAS;IAAG,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE;AACvG,UAAU,SAAS;IAAG,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,SAAS,EAAE,CAAA;CAAE;AAC7D,KAAK,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;IAAC,UAAU,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,CAAC;AA0CpI,8EAA8E;AAC9E,wBAAgB,QAAQ,IAAI,QAAQ,CASnC;AAMD,MAAM,WAAW,kBAAkB;IACjC,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,wBAAsB,kBAAkB,CAAC,MAAM,SAAW,EAAE,IAAI,GAAE,kBAAuB,GAAG,OAAO,CAAC,MAAM,CAAC,CAmE1G;AAED;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,SAAe,GAAG,OAAO,CAsB7D;AAWD;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,SAAe,EAAE,GAAG,SAAa,GAAG,MAAM,EAAE,CA2CjF"}
|
|
@@ -1,27 +1,12 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* CLI Commands: auto-handoff, statusline, usage-guard
|
|
3
|
-
*
|
|
4
|
-
* specweave auto-handoff [on|off|status] [--at 90]
|
|
5
|
-
* specweave statusline [--wrap "<your status line command>"] (Claude Code status line)
|
|
6
|
-
* specweave usage-guard (Stop hook, Claude Code and Codex)
|
|
7
|
-
* specweave usage-guard --limit-hit (StopFailure hook, Grok Build)
|
|
8
|
-
*
|
|
9
|
-
* `auto-handoff on` wires the tools once, in the user's own settings:
|
|
10
|
-
* Claude Code gets the status line (wrapping any existing one) and a Stop
|
|
11
|
-
* hook; Codex gets the same Stop hook in ~/.codex/hooks.json. From then on a
|
|
12
|
-
* session that reaches the threshold hands off by itself. Grok Build reports
|
|
13
|
-
* no usage percentage, so it gets a StopFailure hook in ~/.grok/hooks/ that
|
|
14
|
-
* runs the handoff itself right after a turn hits the rate limit.
|
|
15
|
-
*
|
|
16
|
-
* @module cli/commands/auto-handoff
|
|
17
|
-
*/
|
|
1
|
+
/** Opt-in local checkpoints, status display, and silent lifecycle hooks. */
|
|
18
2
|
import * as fs from 'fs';
|
|
19
3
|
import * as os from 'os';
|
|
20
4
|
import * as path from 'path';
|
|
21
5
|
import { spawnSync } from 'child_process';
|
|
22
|
-
import { DEFAULT_THRESHOLD, readSettings, writeSettings, recordClaudeUsage,
|
|
23
|
-
import {
|
|
6
|
+
import { DEFAULT_THRESHOLD, readSettings, writeSettings, recordClaudeUsage, usageSummary, latestClaudeReading, latestCodexReading, claudeCachedReading, desktopUsageReading, } from '../../core/session/usage-guard.js';
|
|
7
|
+
import { queueSessionCheckpoint } from '../../core/session/session-checkpoint.js';
|
|
24
8
|
const GUARD_COMMAND = 'specweave usage-guard';
|
|
9
|
+
const LIMIT_HIT_COMMAND = `${GUARD_COMMAND} --limit-hit`;
|
|
25
10
|
const STATUS_COMMAND = 'specweave statusline';
|
|
26
11
|
async function readStdin() {
|
|
27
12
|
if (process.stdin.isTTY)
|
|
@@ -52,34 +37,20 @@ export async function statuslineCommand(opts = {}) {
|
|
|
52
37
|
}
|
|
53
38
|
const cwd = input.workspace?.current_dir ?? input.cwd ?? process.cwd();
|
|
54
39
|
const model = input.model?.display_name;
|
|
55
|
-
|
|
56
|
-
process.stdout.write([path.basename(cwd), model, windows.length ? usageSummary(windows) : '', top && top.percent >= (readSettings(opts.home)?.at ?? 101) ? 'hand off' : '']
|
|
40
|
+
process.stdout.write([path.basename(cwd), model, windows.length ? usageSummary(windows) : '']
|
|
57
41
|
.filter(Boolean).join(' · ') + '\n');
|
|
58
42
|
return 0;
|
|
59
43
|
}
|
|
60
|
-
/**
|
|
61
|
-
* Stop hook for Claude Code and Codex: `{}` or a block that asks for a handoff.
|
|
62
|
-
* With `limitHit` (Grok Build's StopFailure hook) the model has already run
|
|
63
|
-
* out, so the hook writes the handoff itself.
|
|
64
|
-
*/
|
|
44
|
+
/** Always return valid empty hook JSON. Saving happens outside the model turn. */
|
|
65
45
|
export async function usageGuardCommand(opts = {}) {
|
|
66
|
-
if (opts.limitHit) {
|
|
67
|
-
try {
|
|
68
|
-
const root = limitHitTarget(parse(opts.input ?? await readStdin()), { home: opts.home });
|
|
69
|
-
if (root) {
|
|
70
|
-
const { handoffCommand } = await import('./handoff.js');
|
|
71
|
-
await handoffCommand({ cwd: root, reason: `rate limit reached in ${detectTool()}` });
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
catch { /* a hook must never break the tool */ }
|
|
75
|
-
return 0;
|
|
76
|
-
}
|
|
77
|
-
let result = {};
|
|
78
46
|
try {
|
|
79
|
-
|
|
47
|
+
const input = parse(opts.input ?? await readStdin());
|
|
48
|
+
if (readSettings(opts.home) && (!opts.limitHit || input.error === 'rate_limit')) {
|
|
49
|
+
await queueSessionCheckpoint(input, { home: opts.home });
|
|
50
|
+
}
|
|
80
51
|
}
|
|
81
|
-
catch { /* a hook must never break the tool */ }
|
|
82
|
-
process.stdout.write(
|
|
52
|
+
catch { /* a hook must never break the tool or steer the model */ }
|
|
53
|
+
process.stdout.write('{}\n');
|
|
83
54
|
return 0;
|
|
84
55
|
}
|
|
85
56
|
function readJson(file) {
|
|
@@ -96,32 +67,38 @@ function writeJson(file, data) {
|
|
|
96
67
|
fs.mkdirSync(path.dirname(file), { recursive: true });
|
|
97
68
|
fs.writeFileSync(file, JSON.stringify(data, null, 2) + '\n');
|
|
98
69
|
}
|
|
99
|
-
function
|
|
100
|
-
return (s.hooks?.
|
|
70
|
+
function hasHook(s, event, command) {
|
|
71
|
+
return (s.hooks?.[event] ?? []).some((g) => (g.hooks ?? []).some((h) => h.command === command));
|
|
101
72
|
}
|
|
102
|
-
function
|
|
73
|
+
function addHook(s, event, group) {
|
|
74
|
+
const command = group.hooks?.[0]?.command ?? '';
|
|
75
|
+
if (hasHook(s, event, command))
|
|
76
|
+
return;
|
|
103
77
|
s.hooks = s.hooks ?? {};
|
|
104
|
-
s.hooks
|
|
78
|
+
s.hooks[event] = [...(s.hooks[event] ?? []), group];
|
|
105
79
|
}
|
|
106
|
-
function
|
|
107
|
-
if (!s.hooks?.
|
|
80
|
+
function removeHook(s, event, command) {
|
|
81
|
+
if (!s.hooks?.[event])
|
|
108
82
|
return;
|
|
109
|
-
s.hooks
|
|
110
|
-
.map((g) => ({ ...g, hooks: (g.hooks ?? []).filter((h) => h.command !==
|
|
83
|
+
s.hooks[event] = s.hooks[event]
|
|
84
|
+
.map((g) => ({ ...g, hooks: (g.hooks ?? []).filter((h) => h.command !== command) }))
|
|
111
85
|
.filter((g) => g.hooks.length);
|
|
112
|
-
if (!s.hooks.
|
|
113
|
-
delete s.hooks
|
|
86
|
+
if (!s.hooks[event].length)
|
|
87
|
+
delete s.hooks[event];
|
|
114
88
|
if (!Object.keys(s.hooks).length)
|
|
115
89
|
delete s.hooks;
|
|
116
90
|
}
|
|
91
|
+
const STOP_HOOK = { hooks: [{ type: 'command', command: GUARD_COMMAND, timeout: 10 }] };
|
|
92
|
+
/** Claude Code: a failed turn can save without calling the model again. */
|
|
93
|
+
const CLAUDE_LIMIT_HOOK = { matcher: 'rate_limit', hooks: [{ type: 'command', command: LIMIT_HIT_COMMAND, timeout: 60 }] };
|
|
117
94
|
const GROK_HOOK_FILE = 'specweave-auto-handoff.json';
|
|
118
|
-
/** Grok Build hook file:
|
|
95
|
+
/** Grok Build hook file: save locally when a turn fails on the rate limit. */
|
|
119
96
|
export function grokHook() {
|
|
120
97
|
return {
|
|
121
98
|
hooks: {
|
|
122
99
|
StopFailure: [{
|
|
123
100
|
matcher: 'rate_limit',
|
|
124
|
-
hooks: [{ type: 'command', command:
|
|
101
|
+
hooks: [{ type: 'command', command: LIMIT_HIT_COMMAND, timeout: 60, env: { SPECWEAVE_TOOL: 'grok' } }],
|
|
125
102
|
}],
|
|
126
103
|
},
|
|
127
104
|
};
|
|
@@ -153,35 +130,37 @@ export async function autoHandoffCommand(action = 'status', opts = {}) {
|
|
|
153
130
|
previousStatusLine = claude.statusLine;
|
|
154
131
|
claude.statusLine = { ...(claude.statusLine ?? {}), type: 'command', command: current ? `${STATUS_COMMAND} --wrap ${shellQuote(current)}` : STATUS_COMMAND };
|
|
155
132
|
}
|
|
156
|
-
|
|
157
|
-
|
|
133
|
+
addHook(claude, 'Stop', STOP_HOOK);
|
|
134
|
+
addHook(claude, 'StopFailure', CLAUDE_LIMIT_HOOK);
|
|
158
135
|
writeJson(claudeFile, claude);
|
|
159
|
-
say(`Claude Code: status line ${current ? 'wraps your existing one' : 'set'} and
|
|
136
|
+
say(`Claude Code: status line ${current ? 'wraps your existing one' : 'set'}, Stop and StopFailure hooks added in ${claudeFile}`);
|
|
160
137
|
}
|
|
161
138
|
if (fs.existsSync(path.dirname(codexFile))) {
|
|
162
139
|
const codex = readJson(codexFile);
|
|
163
140
|
if (!codex)
|
|
164
141
|
say(`Left ${codexFile} alone: it is not valid JSON.`);
|
|
165
142
|
else {
|
|
166
|
-
|
|
167
|
-
addGuard(codex);
|
|
143
|
+
addHook(codex, 'Stop', STOP_HOOK);
|
|
168
144
|
writeJson(codexFile, codex);
|
|
169
|
-
say(`Codex: Stop hook added in ${codexFile}
|
|
145
|
+
say(`Codex: Stop hook added in ${codexFile}. Codex skips it until you trust it: open \`codex\` in a terminal once and approve the hook when it asks.`);
|
|
170
146
|
}
|
|
171
147
|
}
|
|
172
148
|
if (fs.existsSync(path.join(home, '.grok'))) {
|
|
173
149
|
writeJson(grokFile, grokHook());
|
|
174
|
-
say(`Grok Build: StopFailure hook added in ${grokFile}; it
|
|
150
|
+
say(`Grok Build: StopFailure hook added in ${grokFile}; it saves a local checkpoint after a rate-limit failure`);
|
|
175
151
|
}
|
|
176
152
|
writeSettings({ at, since: new Date().toISOString(), ...(previousStatusLine ? { previousStatusLine } : {}) }, home);
|
|
177
|
-
say(
|
|
153
|
+
say('Auto-handoff is on: local checkpoints refresh after turns, at most once every five minutes. Work continues; quota percentages never stop it.');
|
|
154
|
+
if (opts.at !== undefined)
|
|
155
|
+
say('--at is accepted for compatibility; checkpoints no longer depend on a usage threshold.');
|
|
178
156
|
return 0;
|
|
179
157
|
}
|
|
180
158
|
if (action === 'off') {
|
|
181
159
|
const settings = readSettings(home);
|
|
182
160
|
const claude = readJson(claudeFile);
|
|
183
161
|
if (claude && fs.existsSync(claudeFile)) {
|
|
184
|
-
|
|
162
|
+
removeHook(claude, 'Stop', GUARD_COMMAND);
|
|
163
|
+
removeHook(claude, 'StopFailure', LIMIT_HIT_COMMAND);
|
|
185
164
|
if (claude.statusLine?.command?.startsWith(STATUS_COMMAND)) {
|
|
186
165
|
if (settings?.previousStatusLine)
|
|
187
166
|
claude.statusLine = settings.previousStatusLine;
|
|
@@ -192,7 +171,7 @@ export async function autoHandoffCommand(action = 'status', opts = {}) {
|
|
|
192
171
|
}
|
|
193
172
|
const codex = fs.existsSync(codexFile) ? readJson(codexFile) : undefined;
|
|
194
173
|
if (codex) {
|
|
195
|
-
|
|
174
|
+
removeHook(codex, 'Stop', GUARD_COMMAND);
|
|
196
175
|
writeJson(codexFile, codex);
|
|
197
176
|
}
|
|
198
177
|
fs.rmSync(grokFile, { force: true });
|
|
@@ -200,8 +179,104 @@ export async function autoHandoffCommand(action = 'status', opts = {}) {
|
|
|
200
179
|
say('Auto-handoff is off; your previous status line is back.');
|
|
201
180
|
return 0;
|
|
202
181
|
}
|
|
203
|
-
const
|
|
204
|
-
|
|
182
|
+
for (const line of autoHandoffStatus(home))
|
|
183
|
+
say(line);
|
|
205
184
|
return 0;
|
|
206
185
|
}
|
|
186
|
+
/**
|
|
187
|
+
* Codex runs a user hook only after the user trusts it, and records that in
|
|
188
|
+
* ~/.codex/config.toml as a `[hooks.state."<home>/.codex/hooks.json:stop:<group>:<hook>"]`
|
|
189
|
+
* table with a `trusted_hash`. Plugin hooks use keys like
|
|
190
|
+
* `"sw@specweave:hooks/hooks.json:stop:0:0"`, which say nothing about ours.
|
|
191
|
+
* The hash covers the hook's content, so a changed hook needs approving again.
|
|
192
|
+
* There is no command to approve one; Codex asks when it next starts in a terminal.
|
|
193
|
+
*/
|
|
194
|
+
export function codexHookTrusted(home = os.homedir()) {
|
|
195
|
+
const hooksFile = path.join(home, '.codex', 'hooks.json');
|
|
196
|
+
const codex = readJson(hooksFile);
|
|
197
|
+
const groups = codex?.hooks?.Stop ?? [];
|
|
198
|
+
const wanted = new Set();
|
|
199
|
+
groups.forEach((g, gi) => (g.hooks ?? []).forEach((h, hi) => {
|
|
200
|
+
if (h.command === GUARD_COMMAND)
|
|
201
|
+
wanted.add(`${hooksFile}:stop:${gi}:${hi}`);
|
|
202
|
+
}));
|
|
203
|
+
if (!wanted.size)
|
|
204
|
+
return false;
|
|
205
|
+
let toml;
|
|
206
|
+
try {
|
|
207
|
+
toml = fs.readFileSync(path.join(home, '.codex', 'config.toml'), 'utf8');
|
|
208
|
+
}
|
|
209
|
+
catch {
|
|
210
|
+
return false;
|
|
211
|
+
}
|
|
212
|
+
let current;
|
|
213
|
+
for (const line of toml.split(/\r?\n/)) {
|
|
214
|
+
const table = line.match(/^\s*\[(.*)\]\s*(#.*)?$/);
|
|
215
|
+
if (table) {
|
|
216
|
+
const key = table[1].match(/^\s*hooks\.state\.\s*"((?:[^"\\]|\\.)*)"\s*$/);
|
|
217
|
+
current = key ? key[1].replace(/\\(.)/g, '$1') : undefined;
|
|
218
|
+
continue;
|
|
219
|
+
}
|
|
220
|
+
if (current && wanted.has(current) && /^\s*trusted_hash\s*=\s*"[^"]+"/.test(line))
|
|
221
|
+
return true;
|
|
222
|
+
}
|
|
223
|
+
return false;
|
|
224
|
+
}
|
|
225
|
+
function ago(ms, now) {
|
|
226
|
+
const min = Math.max(0, Math.round((now - ms) / 60000));
|
|
227
|
+
return min < 60 ? `${min} min ago` : min < 48 * 60 ? `${Math.round(min / 60)} h ago` : `${Math.round(min / 1440)} days ago`;
|
|
228
|
+
}
|
|
229
|
+
function readingLine(r, now) {
|
|
230
|
+
return r ? `last reading ${usageSummary(r.windows)} (${ago(r.at, now)})` : 'no usage reading yet';
|
|
231
|
+
}
|
|
232
|
+
/**
|
|
233
|
+
* What `auto-handoff status` prints: checkpoint policy, whether each tool's hooks
|
|
234
|
+
* are actually in place, and the last usage each tool reported.
|
|
235
|
+
*/
|
|
236
|
+
export function autoHandoffStatus(home = os.homedir(), now = Date.now()) {
|
|
237
|
+
const settings = readSettings(home);
|
|
238
|
+
if (!settings)
|
|
239
|
+
return ['Auto-handoff is off. Turn it on with `specweave auto-handoff on`.'];
|
|
240
|
+
const lines = [`Auto-handoff is on: local background checkpoints every five minutes after turns (since ${settings.since ?? 'unknown'}).`];
|
|
241
|
+
let broken = false;
|
|
242
|
+
const claude = readJson(path.join(home, '.claude', 'settings.json'));
|
|
243
|
+
if (claude) {
|
|
244
|
+
const missing = [
|
|
245
|
+
claude.statusLine?.command?.startsWith(STATUS_COMMAND) ? '' : 'status line',
|
|
246
|
+
hasHook(claude, 'Stop', GUARD_COMMAND) ? '' : 'Stop hook',
|
|
247
|
+
hasHook(claude, 'StopFailure', LIMIT_HIT_COMMAND) ? '' : 'StopFailure hook',
|
|
248
|
+
].filter(Boolean);
|
|
249
|
+
broken || (broken = missing.length > 0);
|
|
250
|
+
const statusReading = latestClaudeReading(home);
|
|
251
|
+
const fallbacks = [
|
|
252
|
+
[statusReading, ''],
|
|
253
|
+
[desktopUsageReading({ home, now }), ' from the desktop app'],
|
|
254
|
+
[claudeCachedReading({ home, now }), ' from Claude Code\'s usage cache'],
|
|
255
|
+
];
|
|
256
|
+
const [best, source] = fallbacks.filter(([r]) => r).sort(([a], [b]) => b.at - a.at)[0] ?? [undefined, ''];
|
|
257
|
+
const reading = `${readingLine(best, now)}${source}`;
|
|
258
|
+
lines.push(`Claude Code: ${missing.length ? `missing ${missing.join(', ')}` : 'status line, Stop and StopFailure hooks in place'}; ${reading}`);
|
|
259
|
+
lines.push(' Usage readings are informational only; saving does not depend on a status line, account quota or proxy provider.');
|
|
260
|
+
}
|
|
261
|
+
const codexFile = path.join(home, '.codex', 'hooks.json');
|
|
262
|
+
if (fs.existsSync(path.dirname(codexFile))) {
|
|
263
|
+
const codex = readJson(codexFile);
|
|
264
|
+
const ok = !!codex && hasHook(codex, 'Stop', GUARD_COMMAND);
|
|
265
|
+
broken || (broken = !ok);
|
|
266
|
+
const trusted = codexHookTrusted(home);
|
|
267
|
+
lines.push(`Codex: ${ok ? `Stop hook in place${trusted ? '' : ' but not approved yet'}` : 'missing Stop hook'}; ${readingLine(latestCodexReading(home), now)}`);
|
|
268
|
+
if (ok && !trusted)
|
|
269
|
+
lines.push(' Codex skips a hook until you trust it: open `codex` in a terminal and approve the hook when it asks. It asks again whenever the hook changes, for example after `auto-handoff on` with a new SpecWeave version.');
|
|
270
|
+
}
|
|
271
|
+
if (fs.existsSync(path.join(home, '.grok'))) {
|
|
272
|
+
const ok = fs.existsSync(path.join(home, '.grok', 'hooks', GROK_HOOK_FILE));
|
|
273
|
+
broken || (broken = !ok);
|
|
274
|
+
lines.push(`Grok Build: ${ok ? 'StopFailure hook in place' : 'missing StopFailure hook'}; Grok reports no usage, so it saves locally when a turn hits the limit`);
|
|
275
|
+
}
|
|
276
|
+
lines.push(`Local checkpoints: ${path.join(home, '.specweave', 'checkpoints')} (per worktree and session; current.json points to the latest complete save).`);
|
|
277
|
+
lines.push('To transfer work to another tool or machine, run `specweave handoff` explicitly. Automatic checkpoints never push or release claims.');
|
|
278
|
+
if (broken)
|
|
279
|
+
lines.push('Run `specweave auto-handoff on` again to put the missing pieces back.');
|
|
280
|
+
return lines;
|
|
281
|
+
}
|
|
207
282
|
//# sourceMappingURL=auto-handoff.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auto-handoff.js","sourceRoot":"","sources":["../../../../src/cli/commands/auto-handoff.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"auto-handoff.js","sourceRoot":"","sources":["../../../../src/cli/commands/auto-handoff.ts"],"names":[],"mappings":"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"}
|
|
@@ -12,6 +12,7 @@
|
|
|
12
12
|
* [--reason <r>] [--summary <s>] [--next <n>] [--gotcha <g>] \
|
|
13
13
|
* [--decision <d> ...] [--inline] [--non-specweave] [--out <path>] [--json] \
|
|
14
14
|
* [--push] [--keep-claims]
|
|
15
|
+
* specweave handoff --all [--reason <r>] [--out <dir>] [--dry-run] [--json]
|
|
15
16
|
*
|
|
16
17
|
* Output is three or four lines: what was handed off, how to continue ("pick
|
|
17
18
|
* up" in the other tool), and where the details are. `--inline` prints a
|
|
@@ -20,6 +21,9 @@
|
|
|
20
21
|
* With `--json`, the full {@link WorkHandoffResult} is printed as JSON instead
|
|
21
22
|
* (for programmatic callers — e.g. the hook handler and tests).
|
|
22
23
|
*
|
|
24
|
+
* `--all` writes the handoff index instead (every active increment plus the
|
|
25
|
+
* nested checkouts with local-only work); see core/session/handoff-all.
|
|
26
|
+
*
|
|
23
27
|
* Part of increment 0867: Cross-Tool Work Handoff.
|
|
24
28
|
*
|
|
25
29
|
* @module cli/commands/handoff
|
|
@@ -49,8 +53,14 @@ export interface HandoffCommandOptions {
|
|
|
49
53
|
push?: boolean;
|
|
50
54
|
/** `--keep-claims` → do not release this agent's task claims. */
|
|
51
55
|
keepClaims?: boolean;
|
|
56
|
+
/** `--all` → write the index of every active increment and nested repo. */
|
|
57
|
+
all?: boolean;
|
|
58
|
+
/** `--dry-run` (with `--all`) → print the index, write nothing. */
|
|
59
|
+
dryRun?: boolean;
|
|
52
60
|
/** Override the starting directory for workspace resolution (tests). */
|
|
53
61
|
cwd?: string;
|
|
54
62
|
}
|
|
63
|
+
/** `specweave handoff --all`: write (or with `--dry-run` print) the handoff index. */
|
|
64
|
+
export declare function handoffAllCommand(opts?: HandoffCommandOptions): Promise<number>;
|
|
55
65
|
export declare function handoffCommand(opts?: HandoffCommandOptions): Promise<void>;
|
|
56
66
|
//# sourceMappingURL=handoff.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handoff.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/handoff.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"handoff.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/handoff.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAYH;;;GAGG;AACH,MAAM,WAAW,qBAAqB;IACpC,8DAA8D;IAC9D,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,+CAA+C;IAC/C,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,4EAA4E;IAC5E,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,0DAA0D;IAC1D,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,qDAAqD;IACrD,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,gDAAgD;IAChD,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,yFAAyF;IACzF,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,iEAAiE;IACjE,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,2EAA2E;IAC3E,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,mEAAmE;IACnE,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,wEAAwE;IACxE,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,sFAAsF;AACtF,wBAAsB,iBAAiB,CAAC,IAAI,GAAE,qBAA0B,GAAG,OAAO,CAAC,MAAM,CAAC,CA2BzF;AAED,wBAAsB,cAAc,CAAC,IAAI,GAAE,qBAA0B,GAAG,OAAO,CAAC,IAAI,CAAC,CA8EpF"}
|