specweave 3.0.3 → 3.0.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/.claude-plugin/marketplace.json +2 -2
- package/bin/specweave.js +7 -2
- package/dist/src/cli/commands/auto-handoff.d.ts +21 -5
- package/dist/src/cli/commands/auto-handoff.d.ts.map +1 -1
- package/dist/src/cli/commands/auto-handoff.js +132 -28
- 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/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 +7 -0
- package/dist/src/core/session/handoff-doc-format.d.ts.map +1 -1
- package/dist/src/core/session/handoff-doc-format.js +12 -0
- package/dist/src/core/session/handoff-doc-format.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/usage-guard.d.ts +84 -13
- package/dist/src/core/session/usage-guard.d.ts.map +1 -1
- package/dist/src/core/session/usage-guard.js +206 -15
- package/dist/src/core/session/usage-guard.js.map +1 -1
- package/dist/src/core/session/work-handoff.d.ts +2 -0
- package/dist/src/core/session/work-handoff.d.ts.map +1 -1
- package/dist/src/core/session/work-handoff.js +24 -3
- 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 +42 -5
- package/plugins/specweave/skills/jev/SKILL.md +81 -83
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "specweave",
|
|
3
|
-
"version": "3.0.
|
|
3
|
+
"version": "3.0.5",
|
|
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.5",
|
|
16
16
|
"author": {
|
|
17
17
|
"name": "Anton Abyzov",
|
|
18
18
|
"email": "anton.abyzov@gmail.com"
|
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)
|
|
@@ -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')
|
|
@@ -7,11 +7,13 @@
|
|
|
7
7
|
* specweave usage-guard --limit-hit (StopFailure hook, Grok Build)
|
|
8
8
|
*
|
|
9
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)
|
|
11
|
-
* hook; Codex gets the same Stop hook in ~/.codex/hooks.json.
|
|
12
|
-
* session that reaches the threshold hands off by itself.
|
|
13
|
-
* no usage percentage, so it gets
|
|
14
|
-
* runs the handoff itself right after a turn hits
|
|
10
|
+
* Claude Code gets the status line (wrapping any existing one), a Stop hook
|
|
11
|
+
* and a StopFailure hook; Codex gets the same Stop hook in ~/.codex/hooks.json.
|
|
12
|
+
* From then on a session that reaches the threshold hands off by itself.
|
|
13
|
+
* Grok Build reports no usage percentage, so it gets only the StopFailure
|
|
14
|
+
* hook, in ~/.grok/hooks/; it runs the handoff itself right after a turn hits
|
|
15
|
+
* the rate limit. In Claude Code the same StopFailure hook is the backstop for
|
|
16
|
+
* a turn that jumps past the limit before the Stop hook could ask.
|
|
15
17
|
*
|
|
16
18
|
* @module cli/commands/auto-handoff
|
|
17
19
|
*/
|
|
@@ -54,5 +56,19 @@ export interface AutoHandoffOptions {
|
|
|
54
56
|
home?: string;
|
|
55
57
|
}
|
|
56
58
|
export declare function autoHandoffCommand(action?: string, opts?: AutoHandoffOptions): Promise<number>;
|
|
59
|
+
/**
|
|
60
|
+
* Codex runs a user hook only after the user trusts it, and records that in
|
|
61
|
+
* ~/.codex/config.toml as a `[hooks.state."<home>/.codex/hooks.json:stop:<group>:<hook>"]`
|
|
62
|
+
* table with a `trusted_hash`. Plugin hooks use keys like
|
|
63
|
+
* `"sw@specweave:hooks/hooks.json:stop:0:0"`, which say nothing about ours.
|
|
64
|
+
* The hash covers the hook's content, so a changed hook needs approving again.
|
|
65
|
+
* There is no command to approve one; Codex asks when it next starts in a terminal.
|
|
66
|
+
*/
|
|
67
|
+
export declare function codexHookTrusted(home?: string): boolean;
|
|
68
|
+
/**
|
|
69
|
+
* What `auto-handoff status` prints: the threshold, whether each tool's hooks
|
|
70
|
+
* are actually in place, and the last usage each tool reported.
|
|
71
|
+
*/
|
|
72
|
+
export declare function autoHandoffStatus(home?: string, now?: number): string[];
|
|
57
73
|
export {};
|
|
58
74
|
//# 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;;;;;;;;;;;;;;;;;;GAkBG;AAgCH,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,CAepG;AAED;;;;GAIG;AACH,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,CAkBzH;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,0EAA0E;AAC1E,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,CAkE1G;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,CAyCjF"}
|
|
@@ -7,11 +7,13 @@
|
|
|
7
7
|
* specweave usage-guard --limit-hit (StopFailure hook, Grok Build)
|
|
8
8
|
*
|
|
9
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)
|
|
11
|
-
* hook; Codex gets the same Stop hook in ~/.codex/hooks.json.
|
|
12
|
-
* session that reaches the threshold hands off by itself.
|
|
13
|
-
* no usage percentage, so it gets
|
|
14
|
-
* runs the handoff itself right after a turn hits
|
|
10
|
+
* Claude Code gets the status line (wrapping any existing one), a Stop hook
|
|
11
|
+
* and a StopFailure hook; Codex gets the same Stop hook in ~/.codex/hooks.json.
|
|
12
|
+
* From then on a session that reaches the threshold hands off by itself.
|
|
13
|
+
* Grok Build reports no usage percentage, so it gets only the StopFailure
|
|
14
|
+
* hook, in ~/.grok/hooks/; it runs the handoff itself right after a turn hits
|
|
15
|
+
* the rate limit. In Claude Code the same StopFailure hook is the backstop for
|
|
16
|
+
* a turn that jumps past the limit before the Stop hook could ask.
|
|
15
17
|
*
|
|
16
18
|
* @module cli/commands/auto-handoff
|
|
17
19
|
*/
|
|
@@ -19,9 +21,10 @@ import * as fs from 'fs';
|
|
|
19
21
|
import * as os from 'os';
|
|
20
22
|
import * as path from 'path';
|
|
21
23
|
import { spawnSync } from 'child_process';
|
|
22
|
-
import { DEFAULT_THRESHOLD, readSettings, writeSettings, recordClaudeUsage, usageGuard, usageSummary, fullest, limitHitTarget, } from '../../core/session/usage-guard.js';
|
|
24
|
+
import { DEFAULT_THRESHOLD, readSettings, writeSettings, recordClaudeUsage, usageGuard, usageSummary, fullest, limitHitTarget, latestClaudeReading, latestCodexReading, claudeCachedReading, desktopUsageReading, } from '../../core/session/usage-guard.js';
|
|
23
25
|
import { detectTool } from '../../core/tasks/ledger.js';
|
|
24
26
|
const GUARD_COMMAND = 'specweave usage-guard';
|
|
27
|
+
const LIMIT_HIT_COMMAND = `${GUARD_COMMAND} --limit-hit`;
|
|
25
28
|
const STATUS_COMMAND = 'specweave statusline';
|
|
26
29
|
async function readStdin() {
|
|
27
30
|
if (process.stdin.isTTY)
|
|
@@ -68,7 +71,8 @@ export async function usageGuardCommand(opts = {}) {
|
|
|
68
71
|
const root = limitHitTarget(parse(opts.input ?? await readStdin()), { home: opts.home });
|
|
69
72
|
if (root) {
|
|
70
73
|
const { handoffCommand } = await import('./handoff.js');
|
|
71
|
-
|
|
74
|
+
const tool = detectTool();
|
|
75
|
+
await handoffCommand({ cwd: root, reason: tool === 'cli' ? 'usage limit reached' : `usage limit reached in ${tool}` });
|
|
72
76
|
}
|
|
73
77
|
}
|
|
74
78
|
catch { /* a hook must never break the tool */ }
|
|
@@ -96,24 +100,30 @@ function writeJson(file, data) {
|
|
|
96
100
|
fs.mkdirSync(path.dirname(file), { recursive: true });
|
|
97
101
|
fs.writeFileSync(file, JSON.stringify(data, null, 2) + '\n');
|
|
98
102
|
}
|
|
99
|
-
function
|
|
100
|
-
return (s.hooks?.
|
|
103
|
+
function hasHook(s, event, command) {
|
|
104
|
+
return (s.hooks?.[event] ?? []).some((g) => (g.hooks ?? []).some((h) => h.command === command));
|
|
101
105
|
}
|
|
102
|
-
function
|
|
106
|
+
function addHook(s, event, group) {
|
|
107
|
+
const command = group.hooks?.[0]?.command ?? '';
|
|
108
|
+
if (hasHook(s, event, command))
|
|
109
|
+
return;
|
|
103
110
|
s.hooks = s.hooks ?? {};
|
|
104
|
-
s.hooks
|
|
111
|
+
s.hooks[event] = [...(s.hooks[event] ?? []), group];
|
|
105
112
|
}
|
|
106
|
-
function
|
|
107
|
-
if (!s.hooks?.
|
|
113
|
+
function removeHook(s, event, command) {
|
|
114
|
+
if (!s.hooks?.[event])
|
|
108
115
|
return;
|
|
109
|
-
s.hooks
|
|
110
|
-
.map((g) => ({ ...g, hooks: (g.hooks ?? []).filter((h) => h.command !==
|
|
116
|
+
s.hooks[event] = s.hooks[event]
|
|
117
|
+
.map((g) => ({ ...g, hooks: (g.hooks ?? []).filter((h) => h.command !== command) }))
|
|
111
118
|
.filter((g) => g.hooks.length);
|
|
112
|
-
if (!s.hooks.
|
|
113
|
-
delete s.hooks
|
|
119
|
+
if (!s.hooks[event].length)
|
|
120
|
+
delete s.hooks[event];
|
|
114
121
|
if (!Object.keys(s.hooks).length)
|
|
115
122
|
delete s.hooks;
|
|
116
123
|
}
|
|
124
|
+
const STOP_HOOK = { hooks: [{ type: 'command', command: GUARD_COMMAND, timeout: 10 }] };
|
|
125
|
+
/** Claude Code: a turn that failed on the usage limit (HTTP 429) hands off from the hook itself. */
|
|
126
|
+
const CLAUDE_LIMIT_HOOK = { matcher: 'rate_limit', hooks: [{ type: 'command', command: LIMIT_HIT_COMMAND, timeout: 60 }] };
|
|
117
127
|
const GROK_HOOK_FILE = 'specweave-auto-handoff.json';
|
|
118
128
|
/** Grok Build hook file: hand off when a turn fails on the rate limit. */
|
|
119
129
|
export function grokHook() {
|
|
@@ -121,7 +131,7 @@ export function grokHook() {
|
|
|
121
131
|
hooks: {
|
|
122
132
|
StopFailure: [{
|
|
123
133
|
matcher: 'rate_limit',
|
|
124
|
-
hooks: [{ type: 'command', command:
|
|
134
|
+
hooks: [{ type: 'command', command: LIMIT_HIT_COMMAND, timeout: 60, env: { SPECWEAVE_TOOL: 'grok' } }],
|
|
125
135
|
}],
|
|
126
136
|
},
|
|
127
137
|
};
|
|
@@ -153,20 +163,19 @@ export async function autoHandoffCommand(action = 'status', opts = {}) {
|
|
|
153
163
|
previousStatusLine = claude.statusLine;
|
|
154
164
|
claude.statusLine = { ...(claude.statusLine ?? {}), type: 'command', command: current ? `${STATUS_COMMAND} --wrap ${shellQuote(current)}` : STATUS_COMMAND };
|
|
155
165
|
}
|
|
156
|
-
|
|
157
|
-
|
|
166
|
+
addHook(claude, 'Stop', STOP_HOOK);
|
|
167
|
+
addHook(claude, 'StopFailure', CLAUDE_LIMIT_HOOK);
|
|
158
168
|
writeJson(claudeFile, claude);
|
|
159
|
-
say(`Claude Code: status line ${current ? 'wraps your existing one' : 'set'} and
|
|
169
|
+
say(`Claude Code: status line ${current ? 'wraps your existing one' : 'set'}, Stop and StopFailure hooks added in ${claudeFile}`);
|
|
160
170
|
}
|
|
161
171
|
if (fs.existsSync(path.dirname(codexFile))) {
|
|
162
172
|
const codex = readJson(codexFile);
|
|
163
173
|
if (!codex)
|
|
164
174
|
say(`Left ${codexFile} alone: it is not valid JSON.`);
|
|
165
175
|
else {
|
|
166
|
-
|
|
167
|
-
addGuard(codex);
|
|
176
|
+
addHook(codex, 'Stop', STOP_HOOK);
|
|
168
177
|
writeJson(codexFile, codex);
|
|
169
|
-
say(`Codex: Stop hook added in ${codexFile}
|
|
178
|
+
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
179
|
}
|
|
171
180
|
}
|
|
172
181
|
if (fs.existsSync(path.join(home, '.grok'))) {
|
|
@@ -181,7 +190,8 @@ export async function autoHandoffCommand(action = 'status', opts = {}) {
|
|
|
181
190
|
const settings = readSettings(home);
|
|
182
191
|
const claude = readJson(claudeFile);
|
|
183
192
|
if (claude && fs.existsSync(claudeFile)) {
|
|
184
|
-
|
|
193
|
+
removeHook(claude, 'Stop', GUARD_COMMAND);
|
|
194
|
+
removeHook(claude, 'StopFailure', LIMIT_HIT_COMMAND);
|
|
185
195
|
if (claude.statusLine?.command?.startsWith(STATUS_COMMAND)) {
|
|
186
196
|
if (settings?.previousStatusLine)
|
|
187
197
|
claude.statusLine = settings.previousStatusLine;
|
|
@@ -192,7 +202,7 @@ export async function autoHandoffCommand(action = 'status', opts = {}) {
|
|
|
192
202
|
}
|
|
193
203
|
const codex = fs.existsSync(codexFile) ? readJson(codexFile) : undefined;
|
|
194
204
|
if (codex) {
|
|
195
|
-
|
|
205
|
+
removeHook(codex, 'Stop', GUARD_COMMAND);
|
|
196
206
|
writeJson(codexFile, codex);
|
|
197
207
|
}
|
|
198
208
|
fs.rmSync(grokFile, { force: true });
|
|
@@ -200,8 +210,102 @@ export async function autoHandoffCommand(action = 'status', opts = {}) {
|
|
|
200
210
|
say('Auto-handoff is off; your previous status line is back.');
|
|
201
211
|
return 0;
|
|
202
212
|
}
|
|
203
|
-
const
|
|
204
|
-
|
|
213
|
+
for (const line of autoHandoffStatus(home))
|
|
214
|
+
say(line);
|
|
205
215
|
return 0;
|
|
206
216
|
}
|
|
217
|
+
/**
|
|
218
|
+
* Codex runs a user hook only after the user trusts it, and records that in
|
|
219
|
+
* ~/.codex/config.toml as a `[hooks.state."<home>/.codex/hooks.json:stop:<group>:<hook>"]`
|
|
220
|
+
* table with a `trusted_hash`. Plugin hooks use keys like
|
|
221
|
+
* `"sw@specweave:hooks/hooks.json:stop:0:0"`, which say nothing about ours.
|
|
222
|
+
* The hash covers the hook's content, so a changed hook needs approving again.
|
|
223
|
+
* There is no command to approve one; Codex asks when it next starts in a terminal.
|
|
224
|
+
*/
|
|
225
|
+
export function codexHookTrusted(home = os.homedir()) {
|
|
226
|
+
const hooksFile = path.join(home, '.codex', 'hooks.json');
|
|
227
|
+
const codex = readJson(hooksFile);
|
|
228
|
+
const groups = codex?.hooks?.Stop ?? [];
|
|
229
|
+
const wanted = new Set();
|
|
230
|
+
groups.forEach((g, gi) => (g.hooks ?? []).forEach((h, hi) => {
|
|
231
|
+
if (h.command === GUARD_COMMAND)
|
|
232
|
+
wanted.add(`${hooksFile}:stop:${gi}:${hi}`);
|
|
233
|
+
}));
|
|
234
|
+
if (!wanted.size)
|
|
235
|
+
return false;
|
|
236
|
+
let toml;
|
|
237
|
+
try {
|
|
238
|
+
toml = fs.readFileSync(path.join(home, '.codex', 'config.toml'), 'utf8');
|
|
239
|
+
}
|
|
240
|
+
catch {
|
|
241
|
+
return false;
|
|
242
|
+
}
|
|
243
|
+
let current;
|
|
244
|
+
for (const line of toml.split(/\r?\n/)) {
|
|
245
|
+
const table = line.match(/^\s*\[(.*)\]\s*(#.*)?$/);
|
|
246
|
+
if (table) {
|
|
247
|
+
const key = table[1].match(/^\s*hooks\.state\.\s*"((?:[^"\\]|\\.)*)"\s*$/);
|
|
248
|
+
current = key ? key[1].replace(/\\(.)/g, '$1') : undefined;
|
|
249
|
+
continue;
|
|
250
|
+
}
|
|
251
|
+
if (current && wanted.has(current) && /^\s*trusted_hash\s*=\s*"[^"]+"/.test(line))
|
|
252
|
+
return true;
|
|
253
|
+
}
|
|
254
|
+
return false;
|
|
255
|
+
}
|
|
256
|
+
function ago(ms, now) {
|
|
257
|
+
const min = Math.max(0, Math.round((now - ms) / 60000));
|
|
258
|
+
return min < 60 ? `${min} min ago` : min < 48 * 60 ? `${Math.round(min / 60)} h ago` : `${Math.round(min / 1440)} days ago`;
|
|
259
|
+
}
|
|
260
|
+
function readingLine(r, now) {
|
|
261
|
+
return r ? `last reading ${usageSummary(r.windows)} (${ago(r.at, now)})` : 'no usage reading yet';
|
|
262
|
+
}
|
|
263
|
+
/**
|
|
264
|
+
* What `auto-handoff status` prints: the threshold, whether each tool's hooks
|
|
265
|
+
* are actually in place, and the last usage each tool reported.
|
|
266
|
+
*/
|
|
267
|
+
export function autoHandoffStatus(home = os.homedir(), now = Date.now()) {
|
|
268
|
+
const settings = readSettings(home);
|
|
269
|
+
if (!settings)
|
|
270
|
+
return ['Auto-handoff is off. Turn it on with `specweave auto-handoff on`.'];
|
|
271
|
+
const lines = [`Auto-handoff is on at ${settings.at}% (since ${settings.since ?? 'unknown'}).`];
|
|
272
|
+
let broken = false;
|
|
273
|
+
const claude = readJson(path.join(home, '.claude', 'settings.json'));
|
|
274
|
+
if (claude) {
|
|
275
|
+
const missing = [
|
|
276
|
+
claude.statusLine?.command?.startsWith(STATUS_COMMAND) ? '' : 'status line',
|
|
277
|
+
hasHook(claude, 'Stop', GUARD_COMMAND) ? '' : 'Stop hook',
|
|
278
|
+
hasHook(claude, 'StopFailure', LIMIT_HIT_COMMAND) ? '' : 'StopFailure hook',
|
|
279
|
+
].filter(Boolean);
|
|
280
|
+
broken || (broken = missing.length > 0);
|
|
281
|
+
const statusReading = latestClaudeReading(home);
|
|
282
|
+
const fallbacks = [
|
|
283
|
+
[statusReading, ''],
|
|
284
|
+
[desktopUsageReading({ home, now }), ' from the desktop app'],
|
|
285
|
+
[claudeCachedReading({ home, now }), ' from Claude Code\'s usage cache'],
|
|
286
|
+
];
|
|
287
|
+
const [best, source] = fallbacks.filter(([r]) => r).sort(([a], [b]) => b.at - a.at)[0] ?? [undefined, ''];
|
|
288
|
+
const reading = `${readingLine(best, now)}${source}`;
|
|
289
|
+
lines.push(`Claude Code: ${missing.length ? `missing ${missing.join(', ')}` : 'status line, Stop and StopFailure hooks in place'}; ${reading}`);
|
|
290
|
+
lines.push(' Desktop, Remote Control and `claude -p` sessions run no status line. They read the desktop app\'s usage samples (every 15 minutes or so) or Claude Code\'s usage cache when either is fresh, so a jump past the threshold between samples is missed; then they hand off when a turn hits the limit.');
|
|
291
|
+
}
|
|
292
|
+
const codexFile = path.join(home, '.codex', 'hooks.json');
|
|
293
|
+
if (fs.existsSync(path.dirname(codexFile))) {
|
|
294
|
+
const codex = readJson(codexFile);
|
|
295
|
+
const ok = !!codex && hasHook(codex, 'Stop', GUARD_COMMAND);
|
|
296
|
+
broken || (broken = !ok);
|
|
297
|
+
const trusted = codexHookTrusted(home);
|
|
298
|
+
lines.push(`Codex: ${ok ? `Stop hook in place${trusted ? '' : ' but not approved yet'}` : 'missing Stop hook'}; ${readingLine(latestCodexReading(home), now)}`);
|
|
299
|
+
if (ok && !trusted)
|
|
300
|
+
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.');
|
|
301
|
+
}
|
|
302
|
+
if (fs.existsSync(path.join(home, '.grok'))) {
|
|
303
|
+
const ok = fs.existsSync(path.join(home, '.grok', 'hooks', GROK_HOOK_FILE));
|
|
304
|
+
broken || (broken = !ok);
|
|
305
|
+
lines.push(`Grok Build: ${ok ? 'StopFailure hook in place' : 'missing StopFailure hook'}; Grok reports no usage, so it hands off when a turn hits the limit`);
|
|
306
|
+
}
|
|
307
|
+
if (broken)
|
|
308
|
+
lines.push('Run `specweave auto-handoff on` again to put the missing pieces back.');
|
|
309
|
+
return lines;
|
|
310
|
+
}
|
|
207
311
|
//# 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"}
|
|
@@ -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,13 +21,62 @@
|
|
|
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
|
|
26
30
|
*/
|
|
31
|
+
import * as fs from 'fs';
|
|
27
32
|
import * as path from 'path';
|
|
33
|
+
import { resolveEffectiveRoot } from '../../utils/find-project-root.js';
|
|
34
|
+
import { writeHandoffIndex } from '../../core/session/handoff-all.js';
|
|
28
35
|
import { buildWorkHandoff, AmbiguousActiveIncrementError, } from '../../core/session/work-handoff.js';
|
|
36
|
+
/** `specweave handoff --all`: write (or with `--dry-run` print) the handoff index. */
|
|
37
|
+
export async function handoffAllCommand(opts = {}) {
|
|
38
|
+
const root = resolveEffectiveRoot(opts.cwd ?? process.cwd());
|
|
39
|
+
if (!fs.existsSync(path.join(root, '.specweave'))) {
|
|
40
|
+
process.stderr.write('Not a SpecWeave workspace: `handoff --all` needs a .specweave folder.\n');
|
|
41
|
+
return 1;
|
|
42
|
+
}
|
|
43
|
+
const result = await writeHandoffIndex(root, { reason: opts.reason, outDir: opts.out, dryRun: opts.dryRun });
|
|
44
|
+
if (opts.json) {
|
|
45
|
+
process.stdout.write(JSON.stringify(result.index, null, 2) + '\n');
|
|
46
|
+
return 0;
|
|
47
|
+
}
|
|
48
|
+
if (opts.dryRun) {
|
|
49
|
+
process.stdout.write(result.markdown);
|
|
50
|
+
return 0;
|
|
51
|
+
}
|
|
52
|
+
const rel = (p) => path.relative(root, p).split(path.sep).join('/');
|
|
53
|
+
const waiting = result.index.rows.filter((r) => r.waits.length).length;
|
|
54
|
+
const repos = result.index.repos;
|
|
55
|
+
const out = [
|
|
56
|
+
`Indexed ${result.index.rows.length} active increment${result.index.rows.length === 1 ? '' : 's'} (${result.index.rows.length - waiting} actionable, ${waiting} waiting on a person)` +
|
|
57
|
+
(repos ? `; ${repos.flagged.length} of ${repos.scanned} checkouts hold local-only work.` : '.'),
|
|
58
|
+
'Nothing was committed or pushed. Commit and push the local-only work listed there, or tell the next session about it.',
|
|
59
|
+
'On the other side, say "pick up all" (or run `specweave pickup --all`).',
|
|
60
|
+
`Details: ${rel(result.mdPath)} and ${rel(result.jsonPath)}`,
|
|
61
|
+
];
|
|
62
|
+
process.stdout.write(out.join('\n') + '\n');
|
|
63
|
+
return 0;
|
|
64
|
+
}
|
|
29
65
|
export async function handoffCommand(opts = {}) {
|
|
66
|
+
if (opts.all) {
|
|
67
|
+
if (opts.incrementId) {
|
|
68
|
+
process.stderr.write('`--all` covers every active increment; drop the increment id or drop --all.\n');
|
|
69
|
+
process.exitCode = 1;
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
process.exitCode = await handoffAllCommand(opts);
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
if (opts.dryRun) {
|
|
76
|
+
process.stderr.write('`--dry-run` works with `--all` only.\n');
|
|
77
|
+
process.exitCode = 1;
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
30
80
|
const startDir = opts.cwd ?? process.cwd();
|
|
31
81
|
const builderOpts = {
|
|
32
82
|
incrementId: opts.incrementId,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handoff.js","sourceRoot":"","sources":["../../../../src/cli/commands/handoff.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"handoff.js","sourceRoot":"","sources":["../../../../src/cli/commands/handoff.ts"],"names":[],"mappings":"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"}
|
|
@@ -110,7 +110,7 @@ export declare function shorthandQuestions(opts: {
|
|
|
110
110
|
/** Body of a `## <heading>` section of a markdown doc, up to the next `## `. */
|
|
111
111
|
export declare function extractSection(markdown: string, heading: string): string;
|
|
112
112
|
/** `0.0000155` → `$0.0000155`; small enough that toFixed(2) would read as $0.00. */
|
|
113
|
-
export declare function formatCost(cost: number): string;
|
|
113
|
+
export declare function formatCost(cost: number | undefined): string;
|
|
114
114
|
/** `{a: 0.91, b: 0.09}` → `a 0.91 · b 0.09`, highest first, top 5. */
|
|
115
115
|
export declare function formatProbabilities(probabilities: Record<string, number>): string;
|
|
116
116
|
export interface JevCommandOptions {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jev-helpers.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/jev-helpers.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"jev-helpers.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/jev-helpers.ts"],"names":[],"mappings":"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"}
|
|
@@ -408,7 +408,9 @@ export function extractSection(markdown, heading) {
|
|
|
408
408
|
}
|
|
409
409
|
/** `0.0000155` → `$0.0000155`; small enough that toFixed(2) would read as $0.00. */
|
|
410
410
|
export function formatCost(cost) {
|
|
411
|
-
if (!Number.isFinite(cost)
|
|
411
|
+
if (cost === undefined || !Number.isFinite(cost))
|
|
412
|
+
return 'unknown';
|
|
413
|
+
if (cost === 0)
|
|
412
414
|
return '$0';
|
|
413
415
|
return cost < 0.01 ? `$${cost.toPrecision(3)}` : `$${cost.toFixed(4)}`;
|
|
414
416
|
}
|
|
@@ -487,7 +489,7 @@ export async function jevDoctor(root, env, opts) {
|
|
|
487
489
|
else {
|
|
488
490
|
out(' ping skipped (Jev unavailable)');
|
|
489
491
|
}
|
|
490
|
-
out(` usage ${summary.calls} call(s) · ${summary.input_tokens} input tokens · ${formatCost(summary.cost)}`);
|
|
492
|
+
out(` usage ${summary.calls} call(s) · ${summary.input_tokens} input tokens · ${formatCost(summary.unknownCostCalls ? undefined : summary.cost)}`);
|
|
491
493
|
if (unavailable)
|
|
492
494
|
err('Jev unavailable: run `specweave jev setup` (exit 4 = continue without Jev)');
|
|
493
495
|
return code;
|
|
@@ -515,8 +517,8 @@ export async function jevSetup(root, env, opts) {
|
|
|
515
517
|
return EXIT.ok;
|
|
516
518
|
}
|
|
517
519
|
const requested = opts.provider?.trim().toLowerCase();
|
|
518
|
-
if (requested && requested !== 'openrouter' && requested !== 'typesafe') {
|
|
519
|
-
err(`Unknown provider "${opts.provider}". Use: openrouter | typesafe`);
|
|
520
|
+
if (requested && requested !== 'openrouter' && requested !== 'typesafe' && requested !== 'openai') {
|
|
521
|
+
err(`Unknown provider "${opts.provider}". Use: openrouter | typesafe | openai`);
|
|
520
522
|
return EXIT.error;
|
|
521
523
|
}
|
|
522
524
|
const provider = requested ?? cfg.provider;
|
|
@@ -528,6 +530,7 @@ export async function jevSetup(root, env, opts) {
|
|
|
528
530
|
enabled: true,
|
|
529
531
|
provider,
|
|
530
532
|
model,
|
|
533
|
+
apiKeyEnv: provider === cfg.provider ? cfg.apiKeyEnv : undefined,
|
|
531
534
|
guards: { bash: guardBash },
|
|
532
535
|
};
|
|
533
536
|
const key = resolveApiKey(candidate, env);
|
|
@@ -551,6 +554,7 @@ export async function jevSetup(root, env, opts) {
|
|
|
551
554
|
enabled: true,
|
|
552
555
|
provider,
|
|
553
556
|
model,
|
|
557
|
+
apiKeyEnv: provider === cfg.provider ? cfg.apiKeyEnv : undefined,
|
|
554
558
|
guards: { bash: guardBash },
|
|
555
559
|
});
|
|
556
560
|
const markerPresent = setGuardMarker(root, guardBash);
|