specweave 3.0.6 → 3.0.8
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 +19 -6
- package/dist/src/cli/commands/auto-handoff.d.ts +32 -3
- package/dist/src/cli/commands/auto-handoff.d.ts.map +1 -1
- package/dist/src/cli/commands/auto-handoff.js +74 -19
- package/dist/src/cli/commands/auto-handoff.js.map +1 -1
- package/dist/src/cli/commands/autocompact.d.ts +56 -0
- package/dist/src/cli/commands/autocompact.d.ts.map +1 -0
- package/dist/src/cli/commands/autocompact.js +166 -0
- package/dist/src/cli/commands/autocompact.js.map +1 -0
- package/dist/src/cli/commands/init.d.ts.map +1 -1
- package/dist/src/cli/commands/init.js +14 -0
- package/dist/src/cli/commands/init.js.map +1 -1
- package/dist/src/core/session/pickup.d.ts +2 -0
- package/dist/src/core/session/pickup.d.ts.map +1 -1
- package/dist/src/core/session/pickup.js +26 -5
- package/dist/src/core/session/pickup.js.map +1 -1
- package/dist/src/core/session/session-checkpoint.d.ts +10 -0
- package/dist/src/core/session/session-checkpoint.d.ts.map +1 -1
- package/dist/src/core/session/session-checkpoint.js +61 -1
- package/dist/src/core/session/session-checkpoint.js.map +1 -1
- package/dist/src/core/session/usage-guard.d.ts +87 -6
- package/dist/src/core/session/usage-guard.d.ts.map +1 -1
- package/dist/src/core/session/usage-guard.js +154 -6
- package/dist/src/core/session/usage-guard.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 +20 -21
- 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.8",
|
|
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.8",
|
|
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
|
+
Running out mid-task? `specweave auto-handoff on`, once per machine, makes it automatic: when a session reaches 90% of your plan's 5-hour or weekly limit, it hands off by itself and tells you to say "pick up" elsewhere. Claude Code reads the limit through its status line (your own status line keeps working) and Codex through a Stop hook. Under the threshold it costs no tokens. `--at 85` changes the threshold and `off` undoes every change.
|
|
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 have sessions hand off by themselves near the usage limit, run `specweave auto-handoff on` once.
|
|
90
90
|
|
|
91
91
|
<br/>
|
|
92
92
|
|
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 -
|
|
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:
|
|
256
|
-
.option('--at <percent>', '
|
|
255
|
+
.description('on | off | status: hand off automatically at a share of the usage limit (default 90%) and save local checkpoints')
|
|
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:
|
|
274
|
-
.option('--limit-hit', 'StopFailure hook:
|
|
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...]')
|
|
@@ -1,14 +1,39 @@
|
|
|
1
|
-
/**
|
|
1
|
+
/**
|
|
2
|
+
* CLI Commands: auto-handoff, statusline, usage-guard
|
|
3
|
+
*
|
|
4
|
+
* specweave auto-handoff [on|off|status] [--at 90] [--checkpoint-only | --handoff]
|
|
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, Claude Code and Grok Build)
|
|
8
|
+
*
|
|
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
|
+
*
|
|
18
|
+
* @module cli/commands/auto-handoff
|
|
19
|
+
*/
|
|
2
20
|
/** Claude Code status line: record usage, then print a line (or the wrapped command's). */
|
|
3
21
|
export declare function statuslineCommand(opts?: {
|
|
4
22
|
wrap?: string;
|
|
5
23
|
home?: string;
|
|
6
24
|
}): Promise<number>;
|
|
7
|
-
/**
|
|
25
|
+
/**
|
|
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.
|
|
31
|
+
*/
|
|
8
32
|
export declare function usageGuardCommand(opts?: {
|
|
9
33
|
home?: string;
|
|
10
34
|
limitHit?: boolean;
|
|
11
35
|
input?: string;
|
|
36
|
+
env?: NodeJS.ProcessEnv;
|
|
12
37
|
}): Promise<number>;
|
|
13
38
|
interface HookEntry {
|
|
14
39
|
type?: string;
|
|
@@ -27,10 +52,14 @@ type Settings = Record<string, unknown> & {
|
|
|
27
52
|
command?: string;
|
|
28
53
|
};
|
|
29
54
|
};
|
|
30
|
-
/** Grok Build hook file:
|
|
55
|
+
/** Grok Build hook file: hand off when a turn fails on the rate limit. */
|
|
31
56
|
export declare function grokHook(): Settings;
|
|
32
57
|
export interface AutoHandoffOptions {
|
|
33
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;
|
|
34
63
|
home?: string;
|
|
35
64
|
}
|
|
36
65
|
export declare function autoHandoffCommand(action?: string, opts?: AutoHandoffOptions): Promise<number>;
|
|
@@ -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;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,10 +1,29 @@
|
|
|
1
|
-
/**
|
|
1
|
+
/**
|
|
2
|
+
* CLI Commands: auto-handoff, statusline, usage-guard
|
|
3
|
+
*
|
|
4
|
+
* specweave auto-handoff [on|off|status] [--at 90] [--checkpoint-only | --handoff]
|
|
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, Claude Code and Grok Build)
|
|
8
|
+
*
|
|
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
|
+
*
|
|
18
|
+
* @module cli/commands/auto-handoff
|
|
19
|
+
*/
|
|
2
20
|
import * as fs from 'fs';
|
|
3
21
|
import * as os from 'os';
|
|
4
22
|
import * as path from 'path';
|
|
5
23
|
import { spawnSync } from 'child_process';
|
|
6
|
-
import { DEFAULT_THRESHOLD, readSettings, writeSettings, recordClaudeUsage, usageSummary, 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';
|
|
7
25
|
import { queueSessionCheckpoint } from '../../core/session/session-checkpoint.js';
|
|
26
|
+
import { detectTool } from '../../core/tasks/ledger.js';
|
|
8
27
|
const GUARD_COMMAND = 'specweave usage-guard';
|
|
9
28
|
const LIMIT_HIT_COMMAND = `${GUARD_COMMAND} --limit-hit`;
|
|
10
29
|
const STATUS_COMMAND = 'specweave statusline';
|
|
@@ -37,20 +56,43 @@ export async function statuslineCommand(opts = {}) {
|
|
|
37
56
|
}
|
|
38
57
|
const cwd = input.workspace?.current_dir ?? input.cwd ?? process.cwd();
|
|
39
58
|
const model = input.model?.display_name;
|
|
40
|
-
|
|
59
|
+
const settings = readSettings(opts.home);
|
|
60
|
+
const top = fullest(windows);
|
|
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' : '']
|
|
41
63
|
.filter(Boolean).join(' · ') + '\n');
|
|
42
64
|
return 0;
|
|
43
65
|
}
|
|
44
|
-
/**
|
|
66
|
+
/**
|
|
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.
|
|
72
|
+
*/
|
|
45
73
|
export async function usageGuardCommand(opts = {}) {
|
|
74
|
+
let result = {};
|
|
46
75
|
try {
|
|
47
76
|
const input = parse(opts.input ?? await readStdin());
|
|
48
|
-
if (
|
|
49
|
-
|
|
77
|
+
if (opts.limitHit) {
|
|
78
|
+
const root = limitHitTarget(input, { home: opts.home, env: opts.env });
|
|
79
|
+
if (root) {
|
|
80
|
+
const { handoffCommand } = await import('./handoff.js');
|
|
81
|
+
const tool = detectTool();
|
|
82
|
+
await handoffCommand({ cwd: root, reason: tool === 'cli' ? 'usage limit reached' : `usage limit reached in ${tool}` });
|
|
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 });
|
|
50
91
|
}
|
|
51
92
|
}
|
|
52
|
-
catch { /* a hook must never break the tool
|
|
53
|
-
|
|
93
|
+
catch { /* a hook must never break the tool */ }
|
|
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');
|
|
54
96
|
return 0;
|
|
55
97
|
}
|
|
56
98
|
function readJson(file) {
|
|
@@ -89,10 +131,10 @@ function removeHook(s, event, command) {
|
|
|
89
131
|
delete s.hooks;
|
|
90
132
|
}
|
|
91
133
|
const STOP_HOOK = { hooks: [{ type: 'command', command: GUARD_COMMAND, timeout: 10 }] };
|
|
92
|
-
/** Claude Code: a failed
|
|
134
|
+
/** Claude Code: a turn that failed on the usage limit (HTTP 429) hands off from the hook itself. */
|
|
93
135
|
const CLAUDE_LIMIT_HOOK = { matcher: 'rate_limit', hooks: [{ type: 'command', command: LIMIT_HIT_COMMAND, timeout: 60 }] };
|
|
94
136
|
const GROK_HOOK_FILE = 'specweave-auto-handoff.json';
|
|
95
|
-
/** Grok Build hook file:
|
|
137
|
+
/** Grok Build hook file: hand off when a turn fails on the rate limit. */
|
|
96
138
|
export function grokHook() {
|
|
97
139
|
return {
|
|
98
140
|
hooks: {
|
|
@@ -118,7 +160,12 @@ export async function autoHandoffCommand(action = 'status', opts = {}) {
|
|
|
118
160
|
process.stderr.write('--at takes a percentage from 1 to 100\n');
|
|
119
161
|
return 2;
|
|
120
162
|
}
|
|
163
|
+
if (opts.checkpointOnly && opts.handoff) {
|
|
164
|
+
process.stderr.write('Choose one of --checkpoint-only and --handoff\n');
|
|
165
|
+
return 2;
|
|
166
|
+
}
|
|
121
167
|
const previous = readSettings(home);
|
|
168
|
+
const mode = opts.checkpointOnly ? 'checkpoint' : opts.handoff ? 'handoff' : previous?.mode ?? 'handoff';
|
|
122
169
|
const claude = readJson(claudeFile);
|
|
123
170
|
let previousStatusLine = previous?.previousStatusLine;
|
|
124
171
|
if (!claude) {
|
|
@@ -147,12 +194,12 @@ export async function autoHandoffCommand(action = 'status', opts = {}) {
|
|
|
147
194
|
}
|
|
148
195
|
if (fs.existsSync(path.join(home, '.grok'))) {
|
|
149
196
|
writeJson(grokFile, grokHook());
|
|
150
|
-
say(`Grok Build: StopFailure hook added in ${grokFile}; it saves a local checkpoint after a rate-limit failure`);
|
|
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'}`);
|
|
151
198
|
}
|
|
152
|
-
writeSettings({ at, since: new Date().toISOString(), ...(previousStatusLine ? { previousStatusLine } : {}) }, home);
|
|
153
|
-
say(
|
|
154
|
-
|
|
155
|
-
|
|
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.');
|
|
156
203
|
return 0;
|
|
157
204
|
}
|
|
158
205
|
if (action === 'off') {
|
|
@@ -237,7 +284,9 @@ export function autoHandoffStatus(home = os.homedir(), now = Date.now()) {
|
|
|
237
284
|
const settings = readSettings(home);
|
|
238
285
|
if (!settings)
|
|
239
286
|
return ['Auto-handoff is off. Turn it on with `specweave auto-handoff on`.'];
|
|
240
|
-
const lines = [
|
|
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.`];
|
|
241
290
|
let broken = false;
|
|
242
291
|
const claude = readJson(path.join(home, '.claude', 'settings.json'));
|
|
243
292
|
if (claude) {
|
|
@@ -256,7 +305,9 @@ export function autoHandoffStatus(home = os.homedir(), now = Date.now()) {
|
|
|
256
305
|
const [best, source] = fallbacks.filter(([r]) => r).sort(([a], [b]) => b.at - a.at)[0] ?? [undefined, ''];
|
|
257
306
|
const reading = `${readingLine(best, now)}${source}`;
|
|
258
307
|
lines.push(`Claude Code: ${missing.length ? `missing ${missing.join(', ')}` : 'status line, Stop and StopFailure hooks in place'}; ${reading}`);
|
|
259
|
-
lines.push(
|
|
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.');
|
|
260
311
|
}
|
|
261
312
|
const codexFile = path.join(home, '.codex', 'hooks.json');
|
|
262
313
|
if (fs.existsSync(path.dirname(codexFile))) {
|
|
@@ -271,10 +322,14 @@ export function autoHandoffStatus(home = os.homedir(), now = Date.now()) {
|
|
|
271
322
|
if (fs.existsSync(path.join(home, '.grok'))) {
|
|
272
323
|
const ok = fs.existsSync(path.join(home, '.grok', 'hooks', GROK_HOOK_FILE));
|
|
273
324
|
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`);
|
|
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`);
|
|
275
326
|
}
|
|
276
327
|
lines.push(`Local checkpoints: ${path.join(home, '.specweave', 'checkpoints')} (per worktree and session; current.json points to the latest complete save).`);
|
|
277
|
-
lines.push(
|
|
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.');
|
|
278
333
|
if (broken)
|
|
279
334
|
lines.push('Run `specweave auto-handoff on` again to put the missing pieces back.');
|
|
280
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
|