specweave 3.0.5 → 3.0.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (46) hide show
  1. package/.claude-plugin/marketplace.json +2 -2
  2. package/bin/specweave.js +18 -5
  3. package/bin/startup-check.js +1 -1
  4. package/dist/src/cli/commands/auto-handoff.d.ts +21 -14
  5. package/dist/src/cli/commands/auto-handoff.d.ts.map +1 -1
  6. package/dist/src/cli/commands/auto-handoff.js +58 -32
  7. package/dist/src/cli/commands/auto-handoff.js.map +1 -1
  8. package/dist/src/cli/commands/autocompact.d.ts +56 -0
  9. package/dist/src/cli/commands/autocompact.d.ts.map +1 -0
  10. package/dist/src/cli/commands/autocompact.js +166 -0
  11. package/dist/src/cli/commands/autocompact.js.map +1 -0
  12. package/dist/src/cli/commands/init.d.ts.map +1 -1
  13. package/dist/src/cli/commands/init.js +14 -0
  14. package/dist/src/cli/commands/init.js.map +1 -1
  15. package/dist/src/core/session/checkpoint-worker.d.ts +2 -0
  16. package/dist/src/core/session/checkpoint-worker.d.ts.map +1 -0
  17. package/dist/src/core/session/checkpoint-worker.js +43 -0
  18. package/dist/src/core/session/checkpoint-worker.js.map +1 -0
  19. package/dist/src/core/session/handoff-doc-format.d.ts +2 -0
  20. package/dist/src/core/session/handoff-doc-format.d.ts.map +1 -1
  21. package/dist/src/core/session/handoff-doc-format.js +16 -4
  22. package/dist/src/core/session/handoff-doc-format.js.map +1 -1
  23. package/dist/src/core/session/handoff-git-state.d.ts +3 -1
  24. package/dist/src/core/session/handoff-git-state.d.ts.map +1 -1
  25. package/dist/src/core/session/handoff-git-state.js +32 -12
  26. package/dist/src/core/session/handoff-git-state.js.map +1 -1
  27. package/dist/src/core/session/pickup.d.ts +2 -0
  28. package/dist/src/core/session/pickup.d.ts.map +1 -1
  29. package/dist/src/core/session/pickup.js +26 -5
  30. package/dist/src/core/session/pickup.js.map +1 -1
  31. package/dist/src/core/session/session-checkpoint.d.ts +56 -0
  32. package/dist/src/core/session/session-checkpoint.d.ts.map +1 -0
  33. package/dist/src/core/session/session-checkpoint.js +315 -0
  34. package/dist/src/core/session/session-checkpoint.js.map +1 -0
  35. package/dist/src/core/session/usage-guard.d.ts +17 -3
  36. package/dist/src/core/session/usage-guard.d.ts.map +1 -1
  37. package/dist/src/core/session/usage-guard.js +20 -6
  38. package/dist/src/core/session/usage-guard.js.map +1 -1
  39. package/dist/src/core/session/work-handoff.d.ts +4 -0
  40. package/dist/src/core/session/work-handoff.d.ts.map +1 -1
  41. package/dist/src/core/session/work-handoff.js +31 -10
  42. package/dist/src/core/session/work-handoff.js.map +1 -1
  43. package/package.json +1 -1
  44. package/plugins/specweave/.claude-plugin/plugin.json +1 -1
  45. package/plugins/specweave/skills/handoff/SKILL.md +7 -0
  46. package/src/templates/AGENTS.md.template +1 -1
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "specweave",
3
- "version": "3.0.5",
3
+ "version": "3.0.7",
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.5",
15
+ "version": "3.0.7",
16
16
  "author": {
17
17
  "name": "Anton Abyzov",
18
18
  "email": "anton.abyzov@gmail.com"
package/bin/specweave.js CHANGED
@@ -249,14 +249,16 @@ program
249
249
  process.exitCode = await noteCommand(text, { incrementId });
250
250
  });
251
251
 
252
- // Auto-handoff - hand off by itself near the plan's usage limit (Claude Code, Codex)
252
+ // Auto-handoff - hand off by itself near the plan's usage limit, with local checkpoints (Claude Code, Codex, Grok Build)
253
253
  program
254
254
  .command('auto-handoff [action]')
255
- .description('on | off | status: hand off automatically at a share of the usage limit (default 90%)')
255
+ .description('on | off | status: hand off automatically at a share of the usage limit (default 90%) and save local checkpoints')
256
256
  .option('--at <percent>', 'Threshold in percent of any usage window', (v) => Number(v))
257
+ .option('--checkpoint-only', 'Only save local checkpoints; never stop on usage (credits or a proxy keep working)')
258
+ .option('--handoff', 'Hand off at the threshold again after --checkpoint-only')
257
259
  .action(async (action, options) => {
258
260
  const { autoHandoffCommand } = await import('../dist/src/cli/commands/auto-handoff.js');
259
- process.exitCode = await autoHandoffCommand(action, { at: options.at });
261
+ process.exitCode = await autoHandoffCommand(action, { at: options.at, checkpointOnly: options.checkpointOnly === true, handoff: options.handoff === true });
260
262
  });
261
263
 
262
264
  program
@@ -270,13 +272,24 @@ program
270
272
 
271
273
  program
272
274
  .command('usage-guard')
273
- .description('Stop hook: asks the agent to hand off once usage passes the auto-handoff threshold')
274
- .option('--limit-hit', 'StopFailure hook (Grok Build): hand off now, the turn hit the rate limit')
275
+ .description('Stop hook: save a local checkpoint; at the auto-handoff threshold, ask the agent to hand off once')
276
+ .option('--limit-hit', 'StopFailure hook: the turn hit the rate limit, so hand off now (or only save, in checkpoint-only mode)')
275
277
  .action(async (options) => {
276
278
  const { usageGuardCommand } = await import('../dist/src/cli/commands/auto-handoff.js');
277
279
  process.exitCode = await usageGuardCommand({ limitHit: options.limitHit === true });
278
280
  });
279
281
 
282
+ // Auto-compact window for Claude Code (400K keeps 1M-context turns small)
283
+ program
284
+ .command('autocompact [action]')
285
+ .description('on | off | status: where Claude Code summarizes a long session (default 400k)')
286
+ .option('--at <tokens>', 'Window for `on`, 100k to 1M (default 400k)')
287
+ .option('--project', 'Write .claude/settings.json in this project instead of ~/.claude/settings.json')
288
+ .action(async (action, options) => {
289
+ const { autocompactCommand } = await import('../dist/src/cli/commands/autocompact.js');
290
+ process.exitCode = await autocompactCommand(action, { at: options.at, project: options.project === true });
291
+ });
292
+
280
293
  // Jev command - TypeSafe System One: fast, cheap, calibrated closed-set decisions
281
294
  program
282
295
  .command('jev <action> [args...]')
@@ -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 || args[0] === 'init' || args[0] === '--help' || args[0] === '-h' || args[0] === '--version' || args[0] === '-V') {
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,19 +1,19 @@
1
1
  /**
2
2
  * CLI Commands: auto-handoff, statusline, usage-guard
3
3
  *
4
- * specweave auto-handoff [on|off|status] [--at 90]
4
+ * specweave auto-handoff [on|off|status] [--at 90] [--checkpoint-only | --handoff]
5
5
  * specweave statusline [--wrap "<your status line command>"] (Claude Code status line)
6
6
  * specweave usage-guard (Stop hook, Claude Code and Codex)
7
- * specweave usage-guard --limit-hit (StopFailure hook, Grok Build)
7
+ * specweave usage-guard --limit-hit (StopFailure hook, Claude Code and Grok Build)
8
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), 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.
9
+ * `auto-handoff on` wires the tools once, in the user's own settings. Every
10
+ * hook saves a local checkpoint. In the default `handoff` mode the Stop hook
11
+ * also asks the session, once per usage window, to run `specweave handoff`
12
+ * when any window reaches the threshold, and a turn that fails on the rate
13
+ * limit hands off from the StopFailure hook itself. `--checkpoint-only` keeps
14
+ * only the checkpoints, for plans where credits or a proxy keep working past
15
+ * the limit. Inside SpecWeave Studio the hooks only save the checkpoint:
16
+ * Studio switches provider between turns.
17
17
  *
18
18
  * @module cli/commands/auto-handoff
19
19
  */
@@ -23,14 +23,17 @@ export declare function statuslineCommand(opts?: {
23
23
  home?: string;
24
24
  }): Promise<number>;
25
25
  /**
26
- * Stop hook for Claude Code and Codex: `{}` or a block that asks for a handoff.
27
- * With `limitHit` (Grok Build's StopFailure hook) the model has already run
28
- * out, so the hook writes the handoff itself.
26
+ * Stop hook (Claude Code, Codex): queue a local checkpoint, then print `{}` or,
27
+ * once per usage window at the threshold, the output that asks for a handoff.
28
+ * With `limitHit` (StopFailure, Claude Code and Grok Build) the model has
29
+ * already run out, so the hook writes the handoff itself, or only the
30
+ * checkpoint when the mode or Studio says so.
29
31
  */
30
32
  export declare function usageGuardCommand(opts?: {
31
33
  home?: string;
32
34
  limitHit?: boolean;
33
35
  input?: string;
36
+ env?: NodeJS.ProcessEnv;
34
37
  }): Promise<number>;
35
38
  interface HookEntry {
36
39
  type?: string;
@@ -53,6 +56,10 @@ type Settings = Record<string, unknown> & {
53
56
  export declare function grokHook(): Settings;
54
57
  export interface AutoHandoffOptions {
55
58
  at?: number;
59
+ /** Only save local checkpoints; never stop on usage. */
60
+ checkpointOnly?: boolean;
61
+ /** Back to the default after `--checkpoint-only`. */
62
+ handoff?: boolean;
56
63
  home?: string;
57
64
  }
58
65
  export declare function autoHandoffCommand(action?: string, opts?: AutoHandoffOptions): Promise<number>;
@@ -66,7 +73,7 @@ export declare function autoHandoffCommand(action?: string, opts?: AutoHandoffOp
66
73
  */
67
74
  export declare function codexHookTrusted(home?: string): boolean;
68
75
  /**
69
- * What `auto-handoff status` prints: the threshold, whether each tool's hooks
76
+ * What `auto-handoff status` prints: checkpoint policy, whether each tool's hooks
70
77
  * are actually in place, and the last usage each tool reported.
71
78
  */
72
79
  export declare function autoHandoffStatus(home?: string, now?: number): string[];
@@ -1 +1 @@
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"}
1
+ {"version":3,"file":"auto-handoff.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/auto-handoff.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAiCH,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,CAiBpG;AAED;;;;;;GAMG;AACH,wBAAsB,iBAAiB,CAAC,IAAI,GAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAA;CAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAqBlJ;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,wDAAwD;IACxD,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,qDAAqD;IACrD,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,wBAAsB,kBAAkB,CAAC,MAAM,SAAW,EAAE,IAAI,GAAE,kBAAuB,GAAG,OAAO,CAAC,MAAM,CAAC,CAsE1G;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,CAkDjF"}
@@ -1,19 +1,19 @@
1
1
  /**
2
2
  * CLI Commands: auto-handoff, statusline, usage-guard
3
3
  *
4
- * specweave auto-handoff [on|off|status] [--at 90]
4
+ * specweave auto-handoff [on|off|status] [--at 90] [--checkpoint-only | --handoff]
5
5
  * specweave statusline [--wrap "<your status line command>"] (Claude Code status line)
6
6
  * specweave usage-guard (Stop hook, Claude Code and Codex)
7
- * specweave usage-guard --limit-hit (StopFailure hook, Grok Build)
7
+ * specweave usage-guard --limit-hit (StopFailure hook, Claude Code and Grok Build)
8
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), 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.
9
+ * `auto-handoff on` wires the tools once, in the user's own settings. Every
10
+ * hook saves a local checkpoint. In the default `handoff` mode the Stop hook
11
+ * also asks the session, once per usage window, to run `specweave handoff`
12
+ * when any window reaches the threshold, and a turn that fails on the rate
13
+ * limit hands off from the StopFailure hook itself. `--checkpoint-only` keeps
14
+ * only the checkpoints, for plans where credits or a proxy keep working past
15
+ * the limit. Inside SpecWeave Studio the hooks only save the checkpoint:
16
+ * Studio switches provider between turns.
17
17
  *
18
18
  * @module cli/commands/auto-handoff
19
19
  */
@@ -21,7 +21,8 @@ import * as fs from 'fs';
21
21
  import * as os from 'os';
22
22
  import * as path from 'path';
23
23
  import { spawnSync } from 'child_process';
24
- import { DEFAULT_THRESHOLD, readSettings, writeSettings, recordClaudeUsage, usageGuard, usageSummary, fullest, limitHitTarget, latestClaudeReading, latestCodexReading, claudeCachedReading, desktopUsageReading, } from '../../core/session/usage-guard.js';
24
+ import { DEFAULT_THRESHOLD, readSettings, writeSettings, recordClaudeUsage, usageGuard, usageSummary, fullest, limitHitTarget, handsOff, studioThreadId, latestClaudeReading, latestCodexReading, claudeCachedReading, desktopUsageReading, } from '../../core/session/usage-guard.js';
25
+ import { queueSessionCheckpoint } from '../../core/session/session-checkpoint.js';
25
26
  import { detectTool } from '../../core/tasks/ledger.js';
26
27
  const GUARD_COMMAND = 'specweave usage-guard';
27
28
  const LIMIT_HIT_COMMAND = `${GUARD_COMMAND} --limit-hit`;
@@ -55,35 +56,43 @@ export async function statuslineCommand(opts = {}) {
55
56
  }
56
57
  const cwd = input.workspace?.current_dir ?? input.cwd ?? process.cwd();
57
58
  const model = input.model?.display_name;
59
+ const settings = readSettings(opts.home);
58
60
  const top = fullest(windows);
59
- process.stdout.write([path.basename(cwd), model, windows.length ? usageSummary(windows) : '', top && top.percent >= (readSettings(opts.home)?.at ?? 101) ? 'hand off' : '']
61
+ const due = !!settings && handsOff(settings) && !!top && top.percent >= settings.at;
62
+ process.stdout.write([path.basename(cwd), model, windows.length ? usageSummary(windows) : '', due ? 'hand off' : '']
60
63
  .filter(Boolean).join(' · ') + '\n');
61
64
  return 0;
62
65
  }
63
66
  /**
64
- * Stop hook for Claude Code and Codex: `{}` or a block that asks for a handoff.
65
- * With `limitHit` (Grok Build's StopFailure hook) the model has already run
66
- * out, so the hook writes the handoff itself.
67
+ * Stop hook (Claude Code, Codex): queue a local checkpoint, then print `{}` or,
68
+ * once per usage window at the threshold, the output that asks for a handoff.
69
+ * With `limitHit` (StopFailure, Claude Code and Grok Build) the model has
70
+ * already run out, so the hook writes the handoff itself, or only the
71
+ * checkpoint when the mode or Studio says so.
67
72
  */
68
73
  export async function usageGuardCommand(opts = {}) {
69
- if (opts.limitHit) {
70
- try {
71
- const root = limitHitTarget(parse(opts.input ?? await readStdin()), { home: opts.home });
74
+ let result = {};
75
+ try {
76
+ const input = parse(opts.input ?? await readStdin());
77
+ if (opts.limitHit) {
78
+ const root = limitHitTarget(input, { home: opts.home, env: opts.env });
72
79
  if (root) {
73
80
  const { handoffCommand } = await import('./handoff.js');
74
81
  const tool = detectTool();
75
82
  await handoffCommand({ cwd: root, reason: tool === 'cli' ? 'usage limit reached' : `usage limit reached in ${tool}` });
76
83
  }
84
+ else if (readSettings(opts.home) && input.error === 'rate_limit') {
85
+ queueSessionCheckpoint(input, { home: opts.home });
86
+ }
87
+ }
88
+ else if (readSettings(opts.home)) {
89
+ queueSessionCheckpoint(input, { home: opts.home });
90
+ result = usageGuard(input, { home: opts.home, env: opts.env });
77
91
  }
78
- catch { /* a hook must never break the tool */ }
79
- return 0;
80
- }
81
- let result = {};
82
- try {
83
- result = usageGuard(parse(opts.input ?? await readStdin()), { home: opts.home });
84
92
  }
85
93
  catch { /* a hook must never break the tool */ }
86
- process.stdout.write(JSON.stringify(result) + '\n');
94
+ // The limit-hit hook's output is ignored; keep stdout valid JSON either way.
95
+ process.stdout.write(JSON.stringify(opts.limitHit ? {} : result) + '\n');
87
96
  return 0;
88
97
  }
89
98
  function readJson(file) {
@@ -151,7 +160,12 @@ export async function autoHandoffCommand(action = 'status', opts = {}) {
151
160
  process.stderr.write('--at takes a percentage from 1 to 100\n');
152
161
  return 2;
153
162
  }
163
+ if (opts.checkpointOnly && opts.handoff) {
164
+ process.stderr.write('Choose one of --checkpoint-only and --handoff\n');
165
+ return 2;
166
+ }
154
167
  const previous = readSettings(home);
168
+ const mode = opts.checkpointOnly ? 'checkpoint' : opts.handoff ? 'handoff' : previous?.mode ?? 'handoff';
155
169
  const claude = readJson(claudeFile);
156
170
  let previousStatusLine = previous?.previousStatusLine;
157
171
  if (!claude) {
@@ -180,10 +194,12 @@ export async function autoHandoffCommand(action = 'status', opts = {}) {
180
194
  }
181
195
  if (fs.existsSync(path.join(home, '.grok'))) {
182
196
  writeJson(grokFile, grokHook());
183
- say(`Grok Build: StopFailure hook added in ${grokFile}; it hands off right after a turn hits the rate limit, since Grok shows no usage percentage`);
197
+ say(`Grok Build: StopFailure hook added in ${grokFile}; ${mode === 'handoff' ? 'it hands off right after a turn hits the rate limit, since Grok shows no usage percentage' : 'it saves a local checkpoint after a rate-limit failure'}`);
184
198
  }
185
- writeSettings({ at, since: new Date().toISOString(), ...(previousStatusLine ? { previousStatusLine } : {}) }, home);
186
- say(`Auto-handoff is on: at ${at}% of any usage window, the session runs \`specweave handoff\` and tells you to say "pick up" elsewhere.`);
199
+ writeSettings({ at, mode, since: new Date().toISOString(), ...(previousStatusLine ? { previousStatusLine } : {}) }, home);
200
+ say(mode === 'handoff'
201
+ ? `Auto-handoff is on at ${at}%: the first time a session reaches ${at}% of any usage window, it runs \`specweave handoff\` and tells you to say "pick up" in another tool or account. Local checkpoints are saved after turns in between.`
202
+ : 'Auto-handoff is on in checkpoint-only mode: local checkpoints refresh after turns, at most once every five minutes, and usage never stops work. Run `specweave auto-handoff on --handoff` to hand off at the threshold again.');
187
203
  return 0;
188
204
  }
189
205
  if (action === 'off') {
@@ -261,14 +277,16 @@ function readingLine(r, now) {
261
277
  return r ? `last reading ${usageSummary(r.windows)} (${ago(r.at, now)})` : 'no usage reading yet';
262
278
  }
263
279
  /**
264
- * What `auto-handoff status` prints: the threshold, whether each tool's hooks
280
+ * What `auto-handoff status` prints: checkpoint policy, whether each tool's hooks
265
281
  * are actually in place, and the last usage each tool reported.
266
282
  */
267
283
  export function autoHandoffStatus(home = os.homedir(), now = Date.now()) {
268
284
  const settings = readSettings(home);
269
285
  if (!settings)
270
286
  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'}).`];
287
+ const lines = [handsOff(settings)
288
+ ? `Auto-handoff is on at ${settings.at}% (since ${settings.since ?? 'unknown'}): a session hands off once per usage window at the threshold, and saves local checkpoints in between.`
289
+ : `Auto-handoff is on in checkpoint-only mode (since ${settings.since ?? 'unknown'}): local background checkpoints every five minutes after turns; usage never stops work.`];
272
290
  let broken = false;
273
291
  const claude = readJson(path.join(home, '.claude', 'settings.json'));
274
292
  if (claude) {
@@ -287,7 +305,9 @@ export function autoHandoffStatus(home = os.homedir(), now = Date.now()) {
287
305
  const [best, source] = fallbacks.filter(([r]) => r).sort(([a], [b]) => b.at - a.at)[0] ?? [undefined, ''];
288
306
  const reading = `${readingLine(best, now)}${source}`;
289
307
  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.');
308
+ lines.push(handsOff(settings)
309
+ ? ' 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.'
310
+ : ' Usage readings are informational only; saving does not depend on a status line, account quota or proxy provider.');
291
311
  }
292
312
  const codexFile = path.join(home, '.codex', 'hooks.json');
293
313
  if (fs.existsSync(path.dirname(codexFile))) {
@@ -302,8 +322,14 @@ export function autoHandoffStatus(home = os.homedir(), now = Date.now()) {
302
322
  if (fs.existsSync(path.join(home, '.grok'))) {
303
323
  const ok = fs.existsSync(path.join(home, '.grok', 'hooks', GROK_HOOK_FILE));
304
324
  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`);
325
+ lines.push(`Grok Build: ${ok ? 'StopFailure hook in place' : 'missing StopFailure hook'}; Grok reports no usage, so it ${handsOff(settings) ? 'hands off' : 'saves locally'} when a turn hits the limit`);
306
326
  }
327
+ lines.push(`Local checkpoints: ${path.join(home, '.specweave', 'checkpoints')} (per worktree and session; current.json points to the latest complete save).`);
328
+ lines.push(handsOff(settings)
329
+ ? 'Checkpoints never push or release claims; the handoff at the threshold does, so the next tool can `specweave pickup`.'
330
+ : 'To transfer work to another tool or machine, run `specweave handoff` explicitly. Automatic checkpoints never push or release claims.');
331
+ if (studioThreadId())
332
+ lines.push('Running inside SpecWeave Studio: hooks only save checkpoints here, and Studio switches provider between turns.');
307
333
  if (broken)
308
334
  lines.push('Run `specweave auto-handoff on` again to put the missing pieces back.');
309
335
  return lines;
@@ -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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"}
@@ -0,0 +1,56 @@
1
+ /**
2
+ * Claude Code auto-compact window: where a session summarizes itself.
3
+ *
4
+ * Until compaction runs, every turn resends the whole conversation. Most of it
5
+ * is a cache read, which is cheaper but still counts toward plan usage. On
6
+ * 1M-context models Claude Code's own default waits until about 967K tokens,
7
+ * so late turns each carry close to a million. Compacting at 400K keeps them
8
+ * small. Claude Code compacts at the smaller of the setting and the model's
9
+ * window, so 400K changes nothing on 200K models.
10
+ *
11
+ * Claude Code reads `autoCompactWindow` (100000 to 1000000) from each settings
12
+ * file, user < project < local, and `modelSettings.<model>.autoCompactWindow`
13
+ * (where `/autocompact` saves). A file that sets the top-level key replaces the
14
+ * per-model values of the files below it; CLAUDE_CODE_AUTO_COMPACT_WINDOW wins
15
+ * over all of them.
16
+ */
17
+ export declare const DEFAULT_AUTO_COMPACT_WINDOW = 400000;
18
+ export declare const MIN_AUTO_COMPACT_WINDOW = 100000;
19
+ export declare const MAX_AUTO_COMPACT_WINDOW = 1000000;
20
+ /** `400k`, `400000`, `1M` → tokens; undefined when outside 100K..1M or unreadable. */
21
+ export declare function parseWindow(value: string): number | undefined;
22
+ export interface SettingsLayer {
23
+ name: 'user' | 'project' | 'local';
24
+ file: string;
25
+ }
26
+ /** Claude Code's settings files, lowest precedence first. */
27
+ export declare function settingsLayers(home: string, projectRoot: string): SettingsLayer[];
28
+ export interface EffectiveWindow {
29
+ /** Tokens, or undefined when Claude Code picks its own window ("auto"). */
30
+ window?: number;
31
+ /** Where it comes from: a layer name, the env var, or 'auto'. */
32
+ source: SettingsLayer['name'] | 'env' | 'auto';
33
+ /** Per-model values still in force (model → tokens or "auto"). */
34
+ byModel: Record<string, number | 'auto'>;
35
+ }
36
+ /** What Claude Code would use, following its own merge of settings files. */
37
+ export declare function effectiveWindow(home: string, projectRoot: string, env?: NodeJS.ProcessEnv): EffectiveWindow;
38
+ /** Codex's own cap, from ~/.codex/config.toml, if one is set. */
39
+ export declare function codexCompactLimit(home: string): number | undefined;
40
+ /**
41
+ * Turn the 400K default on in a new project's `.claude/settings.json`, unless
42
+ * that file already says something about the window or cannot be read.
43
+ * Returns the line to print, or undefined when nothing changed.
44
+ */
45
+ export declare function applyProjectDefault(projectRoot: string): string | undefined;
46
+ export interface AutocompactOptions {
47
+ at?: string;
48
+ project?: boolean;
49
+ home?: string;
50
+ cwd?: string;
51
+ env?: NodeJS.ProcessEnv;
52
+ }
53
+ export declare function autocompactCommand(action?: string, opts?: AutocompactOptions): Promise<number>;
54
+ /** What `autocompact status` prints. */
55
+ export declare function autocompactStatus(home: string, projectRoot: string, env?: NodeJS.ProcessEnv): string[];
56
+ //# sourceMappingURL=autocompact.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"autocompact.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/autocompact.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAMH,eAAO,MAAM,2BAA2B,SAAU,CAAC;AACnD,eAAO,MAAM,uBAAuB,SAAU,CAAC;AAC/C,eAAO,MAAM,uBAAuB,UAAY,CAAC;AAQjD,sFAAsF;AACtF,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAK7D;AAqBD,MAAM,WAAW,aAAa;IAAG,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE;AAEnF,6DAA6D;AAC7D,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,aAAa,EAAE,CAMjF;AAED,MAAM,WAAW,eAAe;IAC9B,2EAA2E;IAC3E,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,iEAAiE;IACjE,MAAM,EAAE,aAAa,CAAC,MAAM,CAAC,GAAG,KAAK,GAAG,MAAM,CAAC;IAC/C,kEAAkE;IAClE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,CAAC;CAC1C;AAED,6EAA6E;AAC7E,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,eAAe,CAkBxH;AAED,iEAAiE;AACjE,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAUlE;AAID;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAM3E;AAED,MAAM,WAAW,kBAAkB;IACjC,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;CACzB;AAED,wBAAsB,kBAAkB,CAAC,MAAM,SAAW,EAAE,IAAI,GAAE,kBAAuB,GAAG,OAAO,CAAC,MAAM,CAAC,CA8B1G;AAED,wCAAwC;AACxC,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,MAAM,EAAE,CAenH"}
@@ -0,0 +1,166 @@
1
+ /**
2
+ * Claude Code auto-compact window: where a session summarizes itself.
3
+ *
4
+ * Until compaction runs, every turn resends the whole conversation. Most of it
5
+ * is a cache read, which is cheaper but still counts toward plan usage. On
6
+ * 1M-context models Claude Code's own default waits until about 967K tokens,
7
+ * so late turns each carry close to a million. Compacting at 400K keeps them
8
+ * small. Claude Code compacts at the smaller of the setting and the model's
9
+ * window, so 400K changes nothing on 200K models.
10
+ *
11
+ * Claude Code reads `autoCompactWindow` (100000 to 1000000) from each settings
12
+ * file, user < project < local, and `modelSettings.<model>.autoCompactWindow`
13
+ * (where `/autocompact` saves). A file that sets the top-level key replaces the
14
+ * per-model values of the files below it; CLAUDE_CODE_AUTO_COMPACT_WINDOW wins
15
+ * over all of them.
16
+ */
17
+ import * as fs from 'fs';
18
+ import * as os from 'os';
19
+ import * as path from 'path';
20
+ export const DEFAULT_AUTO_COMPACT_WINDOW = 400000;
21
+ export const MIN_AUTO_COMPACT_WINDOW = 100000;
22
+ export const MAX_AUTO_COMPACT_WINDOW = 1000000;
23
+ const ENV_KEY = 'CLAUDE_CODE_AUTO_COMPACT_WINDOW';
24
+ /** `400k`, `400000`, `1M` → tokens; undefined when outside 100K..1M or unreadable. */
25
+ export function parseWindow(value) {
26
+ const m = value.trim().toLowerCase().replace(/[,_]/g, '').match(/^(\d+(?:\.\d+)?)(k|m)?$/);
27
+ if (!m)
28
+ return undefined;
29
+ const n = Math.round(Number(m[1]) * (m[2] === 'm' ? 1000000 : m[2] === 'k' ? 1000 : 1));
30
+ return n >= MIN_AUTO_COMPACT_WINDOW && n <= MAX_AUTO_COMPACT_WINDOW ? n : undefined;
31
+ }
32
+ function readSettingsFile(file) {
33
+ if (!fs.existsSync(file))
34
+ return {};
35
+ try {
36
+ const v = JSON.parse(fs.readFileSync(file, 'utf8'));
37
+ return v && typeof v === 'object' && !Array.isArray(v) ? v : undefined;
38
+ }
39
+ catch {
40
+ return undefined; // unreadable: leave it alone
41
+ }
42
+ }
43
+ function writeSettingsFile(file, data) {
44
+ fs.mkdirSync(path.dirname(file), { recursive: true });
45
+ fs.writeFileSync(file, JSON.stringify(data, null, 2) + '\n');
46
+ }
47
+ function validWindow(v) {
48
+ return typeof v === 'number' && Number.isInteger(v) && v >= MIN_AUTO_COMPACT_WINDOW && v <= MAX_AUTO_COMPACT_WINDOW ? v : undefined;
49
+ }
50
+ /** Claude Code's settings files, lowest precedence first. */
51
+ export function settingsLayers(home, projectRoot) {
52
+ return [
53
+ { name: 'user', file: path.join(home, '.claude', 'settings.json') },
54
+ { name: 'project', file: path.join(projectRoot, '.claude', 'settings.json') },
55
+ { name: 'local', file: path.join(projectRoot, '.claude', 'settings.local.json') },
56
+ ];
57
+ }
58
+ /** What Claude Code would use, following its own merge of settings files. */
59
+ export function effectiveWindow(home, projectRoot, env = process.env) {
60
+ let result = { source: 'auto', byModel: {} };
61
+ for (const layer of settingsLayers(home, projectRoot)) {
62
+ const s = readSettingsFile(layer.file);
63
+ if (!s)
64
+ continue;
65
+ const byModel = {};
66
+ for (const [model, entry] of Object.entries(s.modelSettings ?? {})) {
67
+ const v = entry?.autoCompactWindow;
68
+ if (v === 'auto')
69
+ byModel[model] = 'auto';
70
+ else if (validWindow(v) !== undefined)
71
+ byModel[model] = v;
72
+ }
73
+ const top = validWindow(s.autoCompactWindow);
74
+ result = top === undefined
75
+ ? { ...result, byModel: { ...result.byModel, ...byModel } }
76
+ : { window: top, source: layer.name, byModel };
77
+ }
78
+ const fromEnv = env[ENV_KEY] ? parseWindow(env[ENV_KEY]) : undefined;
79
+ return fromEnv === undefined ? result : { window: fromEnv, source: 'env', byModel: {} };
80
+ }
81
+ /** Codex's own cap, from ~/.codex/config.toml, if one is set. */
82
+ export function codexCompactLimit(home) {
83
+ try {
84
+ const toml = fs.readFileSync(path.join(home, '.codex', 'config.toml'), 'utf8');
85
+ for (const line of toml.split(/\r?\n/)) {
86
+ if (/^\s*\[/.test(line))
87
+ return undefined; // top-level keys come before the first table
88
+ const m = line.match(/^\s*model_auto_compact_token_limit\s*=\s*(\d+)/);
89
+ if (m)
90
+ return Number(m[1]);
91
+ }
92
+ }
93
+ catch { /* no Codex config */ }
94
+ return undefined;
95
+ }
96
+ const fmt = (n) => `${Math.round(n / 1000)}K`;
97
+ /**
98
+ * Turn the 400K default on in a new project's `.claude/settings.json`, unless
99
+ * that file already says something about the window or cannot be read.
100
+ * Returns the line to print, or undefined when nothing changed.
101
+ */
102
+ export function applyProjectDefault(projectRoot) {
103
+ const file = path.join(projectRoot, '.claude', 'settings.json');
104
+ const s = readSettingsFile(file);
105
+ if (!s || s.autoCompactWindow !== undefined)
106
+ return undefined;
107
+ writeSettingsFile(file, { ...s, autoCompactWindow: DEFAULT_AUTO_COMPACT_WINDOW });
108
+ return `Claude Code compacts at ${fmt(DEFAULT_AUTO_COMPACT_WINDOW)} tokens in this project (.claude/settings.json); \`specweave autocompact off --project\` undoes it`;
109
+ }
110
+ export async function autocompactCommand(action = 'status', opts = {}) {
111
+ const home = opts.home ?? os.homedir();
112
+ const cwd = opts.cwd ?? process.cwd();
113
+ const env = opts.env ?? process.env;
114
+ const say = (line) => process.stdout.write(line + '\n');
115
+ const target = opts.project ? path.join(cwd, '.claude', 'settings.json') : path.join(home, '.claude', 'settings.json');
116
+ const where = opts.project ? '.claude/settings.json (this project, shared through git)' : target;
117
+ if (action === 'on' || action === 'off') {
118
+ const s = readSettingsFile(target);
119
+ if (!s) {
120
+ process.stderr.write(`Left ${target} alone: it is not valid JSON.\n`);
121
+ return 1;
122
+ }
123
+ if (action === 'on') {
124
+ const window = opts.at === undefined ? DEFAULT_AUTO_COMPACT_WINDOW : parseWindow(opts.at);
125
+ if (window === undefined) {
126
+ process.stderr.write('--at takes 100k to 1M tokens, for example 400k\n');
127
+ return 2;
128
+ }
129
+ s.autoCompactWindow = window;
130
+ writeSettingsFile(target, s);
131
+ say(`Claude Code now compacts at ${fmt(window)} tokens (${where}).`);
132
+ }
133
+ else {
134
+ delete s.autoCompactWindow;
135
+ writeSettingsFile(target, s);
136
+ say(`Removed the auto-compact window from ${where}; Claude Code picks its own again.`);
137
+ }
138
+ if (env[ENV_KEY])
139
+ say(`${ENV_KEY}=${env[ENV_KEY]} is set in this shell and overrides every settings file.`);
140
+ }
141
+ else if (action !== 'status') {
142
+ process.stderr.write(`Unknown action "${action}". Use on, off or status.\n`);
143
+ return 2;
144
+ }
145
+ for (const line of autocompactStatus(home, cwd, env))
146
+ say(line);
147
+ return 0;
148
+ }
149
+ /** What `autocompact status` prints. */
150
+ export function autocompactStatus(home, projectRoot, env = process.env) {
151
+ const eff = effectiveWindow(home, projectRoot, env);
152
+ const source = eff.source === 'env' ? ENV_KEY
153
+ : eff.source === 'auto' ? '' : settingsLayers(home, projectRoot).find((l) => l.name === eff.source).file;
154
+ const lines = [eff.window === undefined
155
+ ? 'Claude Code: picks its own window (about 967K tokens on 1M-context models). `specweave autocompact on` sets 400K.'
156
+ : `Claude Code: compacts at ${fmt(eff.window)} tokens, or the model's window if smaller (from ${source}).`];
157
+ for (const [model, v] of Object.entries(eff.byModel)) {
158
+ lines.push(` ${model}: ${v === 'auto' ? 'its own window' : `${fmt(v)} tokens`} (saved by /autocompact; replaces the value above for that model)`);
159
+ }
160
+ const codex = codexCompactLimit(home);
161
+ lines.push(codex === undefined
162
+ ? 'Codex: compacts on its own schedule; set model_auto_compact_token_limit in ~/.codex/config.toml to cap it.'
163
+ : `Codex: compacts at ${fmt(codex)} tokens (model_auto_compact_token_limit in ~/.codex/config.toml).`);
164
+ return lines;
165
+ }
166
+ //# sourceMappingURL=autocompact.js.map