instar 0.28.92 → 0.28.94

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 (39) hide show
  1. package/dist/commands/server.d.ts.map +1 -1
  2. package/dist/commands/server.js +9 -0
  3. package/dist/commands/server.js.map +1 -1
  4. package/dist/core/DriftSpendLedger.d.ts +112 -0
  5. package/dist/core/DriftSpendLedger.d.ts.map +1 -0
  6. package/dist/core/DriftSpendLedger.js +285 -0
  7. package/dist/core/DriftSpendLedger.js.map +1 -0
  8. package/dist/core/InitiativeTracker.d.ts +7 -2
  9. package/dist/core/InitiativeTracker.d.ts.map +1 -1
  10. package/dist/core/InitiativeTracker.js.map +1 -1
  11. package/dist/core/ProjectDriftChecker.d.ts +215 -0
  12. package/dist/core/ProjectDriftChecker.d.ts.map +1 -0
  13. package/dist/core/ProjectDriftChecker.js +572 -0
  14. package/dist/core/ProjectDriftChecker.js.map +1 -0
  15. package/dist/core/ProjectDriftCheckerCache.d.ts +118 -0
  16. package/dist/core/ProjectDriftCheckerCache.d.ts.map +1 -0
  17. package/dist/core/ProjectDriftCheckerCache.js +221 -0
  18. package/dist/core/ProjectDriftCheckerCache.js.map +1 -0
  19. package/dist/core/SessionManager.d.ts +5 -4
  20. package/dist/core/SessionManager.d.ts.map +1 -1
  21. package/dist/core/SessionManager.js +3 -2
  22. package/dist/core/SessionManager.js.map +1 -1
  23. package/dist/core/StuckInputSentinel.d.ts +160 -0
  24. package/dist/core/StuckInputSentinel.d.ts.map +1 -0
  25. package/dist/core/StuckInputSentinel.js +315 -0
  26. package/dist/core/StuckInputSentinel.js.map +1 -0
  27. package/dist/core/types.d.ts +40 -0
  28. package/dist/core/types.d.ts.map +1 -1
  29. package/dist/core/types.js.map +1 -1
  30. package/dist/lifeline/ServerSupervisor.d.ts.map +1 -1
  31. package/dist/lifeline/ServerSupervisor.js +8 -0
  32. package/dist/lifeline/ServerSupervisor.js.map +1 -1
  33. package/package.json +1 -1
  34. package/src/data/builtin-manifest.json +3 -3
  35. package/upgrades/0.28.93.md +126 -0
  36. package/upgrades/0.28.94.md +60 -0
  37. package/upgrades/side-effects/project-scope-phase1b-pr1.md +252 -0
  38. package/upgrades/side-effects/project-scope-phase1b-pr2.md +198 -0
  39. package/upgrades/side-effects/stuck-input-sentinel.md +137 -0
@@ -0,0 +1,118 @@
1
+ /**
2
+ * ProjectDriftCheckerCache — verdict cache with mtime fast-path.
3
+ *
4
+ * Spec: docs/specs/PROJECT-SCOPE-SPEC.md § Phase 1.4 ("Cache key" + mtime
5
+ * fast-path).
6
+ *
7
+ * Cache key: sha256(promptTemplateVersion + modelId + specBodySha + sortedFileHashes)
8
+ * TTL: 24h (cache entries older than this are treated as misses)
9
+ *
10
+ * Mtime fast-path:
11
+ * Before computing the cache key, the cache compares (specPath mtime,
12
+ * referencedFile mtimes) to the values it last saw associated with the
13
+ * stored entry. If every mtime matches, the cache key is REUSED without
14
+ * re-hashing — file contents haven't changed. If any mtime moved, full
15
+ * hashing falls back. This is the spec's stated optimization: hashing
16
+ * only happens when an mtime moved.
17
+ *
18
+ * Storage:
19
+ * In-memory Map keyed by `${projectId}:${roundIndex}` (the natural id
20
+ * for a drift check). Disk-backed snapshot at
21
+ * `.instar/drift-verdict-cache.json` so the cache survives restarts
22
+ * without a cold first-call penalty after a sleep/wake.
23
+ *
24
+ * Concurrency:
25
+ * This cache is consulted INSIDE the per-project mutex held by
26
+ * `POST /projects/:id/drift-check` (Phase 1.5 round runner has its own
27
+ * round-runner lock). Within a single process there's no race; across
28
+ * processes the JSON snapshot is read on construction and written on
29
+ * every put, atomically (tmp + rename).
30
+ */
31
+ import type { DriftVerdict } from './types.js';
32
+ export declare const DEFAULT_TTL_MS: number;
33
+ export declare const SNAPSHOT_FILENAME = "drift-verdict-cache.json";
34
+ export interface ProjectDriftCheckerCacheConfig {
35
+ /** Absolute path to the agent's `.instar/` directory. */
36
+ stateDir: string;
37
+ /** Override the 24h TTL (tests dial this down). */
38
+ ttlMs?: number;
39
+ /** When false, the cache does not read/write disk (in-memory only). */
40
+ persist?: boolean;
41
+ }
42
+ export interface CacheLookupInput {
43
+ projectId: string;
44
+ roundIndex: number;
45
+ /** Bumped on every prompt-template edit; part of the cache key. */
46
+ promptTemplateVersion: number;
47
+ /** Resolved model id from the provider; part of the cache key. */
48
+ modelId: string;
49
+ /** Absolute path to the spec file (used for mtime fast-path). */
50
+ specPath: string;
51
+ /** Absolute paths to referenced files. Order matters for fast-path but
52
+ * not for the cache key (sortedFileHashes is order-stable). */
53
+ referencedFilePaths: string[];
54
+ /** Buffers, in the same order as `referencedFilePaths`. Used to compute
55
+ * sha256 inputs when mtime fast-path misses. */
56
+ referencedFileBytes: Buffer[];
57
+ /** Spec body bytes — sha256 input. */
58
+ specBytes: Buffer;
59
+ }
60
+ export interface CacheHit {
61
+ hit: true;
62
+ verdict: DriftVerdict;
63
+ computedAt: string;
64
+ /** Cache key that matched. */
65
+ key: string;
66
+ /** True if served by the mtime fast-path (no re-hash performed). */
67
+ mtimeFastPath: boolean;
68
+ }
69
+ export interface CacheMiss {
70
+ hit: false;
71
+ /** Cache key the caller should associate with the verdict on put(). */
72
+ key: string;
73
+ }
74
+ export type CacheLookupResult = CacheHit | CacheMiss;
75
+ export declare class ProjectDriftCheckerCache {
76
+ private stateDir;
77
+ private ttlMs;
78
+ private persist;
79
+ private entries;
80
+ constructor(config: ProjectDriftCheckerCacheConfig);
81
+ /**
82
+ * Look up an entry for `(projectId, roundIndex)`. Returns a hit ONLY if:
83
+ * (a) an entry exists, AND
84
+ * (b) the entry is within the TTL, AND
85
+ * (c) either the mtime fast-path matches (no re-hash needed) OR the
86
+ * full sha256 cache key matches.
87
+ *
88
+ * On miss, the returned `key` is the freshly-computed sha256, which the
89
+ * caller should pass back to `put()` after running drift.
90
+ */
91
+ lookup(input: CacheLookupInput): CacheLookupResult;
92
+ /**
93
+ * Store `verdict` under `(projectId, roundIndex)` keyed by `key`. Captures
94
+ * file mtimes for the next mtime fast-path lookup.
95
+ *
96
+ * `manual-review-required` verdicts ARE cached too — re-running drift
97
+ * immediately won't change a deterministic over-budget or
98
+ * empty-spec answer. The TTL still expires them after 24h.
99
+ */
100
+ put(input: CacheLookupInput, key: string, verdict: DriftVerdict): void;
101
+ /** Remove an entry for `(projectId, roundIndex)`. */
102
+ invalidate(projectId: string, roundIndex: number): void;
103
+ /** For tests / digest. */
104
+ size(): number;
105
+ private snapshotPath;
106
+ private loadSnapshot;
107
+ private saveSnapshot;
108
+ }
109
+ /**
110
+ * Compute the deterministic cache key. Exported for tests and for the
111
+ * `cacheKeyInputs` helper in ProjectDriftChecker.ts (which produces the
112
+ * same inputs — this function hashes them into a stable string).
113
+ */
114
+ export declare function computeCacheKey(promptTemplateVersion: number, modelId: string, specBytes: Buffer, referencedFileBytes: Array<{
115
+ relPath: string;
116
+ bytes: Buffer;
117
+ }>): string;
118
+ //# sourceMappingURL=ProjectDriftCheckerCache.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProjectDriftCheckerCache.d.ts","sourceRoot":"","sources":["../../src/core/ProjectDriftCheckerCache.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAMH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/C,eAAO,MAAM,cAAc,QAAsB,CAAC;AAClD,eAAO,MAAM,iBAAiB,6BAA6B,CAAC;AAE5D,MAAM,WAAW,8BAA8B;IAC7C,yDAAyD;IACzD,QAAQ,EAAE,MAAM,CAAC;IACjB,mDAAmD;IACnD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,uEAAuE;IACvE,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,mEAAmE;IACnE,qBAAqB,EAAE,MAAM,CAAC;IAC9B,kEAAkE;IAClE,OAAO,EAAE,MAAM,CAAC;IAChB,iEAAiE;IACjE,QAAQ,EAAE,MAAM,CAAC;IACjB;oEACgE;IAChE,mBAAmB,EAAE,MAAM,EAAE,CAAC;IAC9B;qDACiD;IACjD,mBAAmB,EAAE,MAAM,EAAE,CAAC;IAC9B,sCAAsC;IACtC,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,QAAQ;IACvB,GAAG,EAAE,IAAI,CAAC;IACV,OAAO,EAAE,YAAY,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,8BAA8B;IAC9B,GAAG,EAAE,MAAM,CAAC;IACZ,oEAAoE;IACpE,aAAa,EAAE,OAAO,CAAC;CACxB;AACD,MAAM,WAAW,SAAS;IACxB,GAAG,EAAE,KAAK,CAAC;IACX,uEAAuE;IACvE,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,MAAM,iBAAiB,GAAG,QAAQ,GAAG,SAAS,CAAC;AAerD,qBAAa,wBAAwB;IACnC,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,OAAO,CAAU;IACzB,OAAO,CAAC,OAAO,CAAiC;gBAEpC,MAAM,EAAE,8BAA8B;IAOlD;;;;;;;;;OASG;IACH,MAAM,CAAC,KAAK,EAAE,gBAAgB,GAAG,iBAAiB;IAqElD;;;;;;;OAOG;IACH,GAAG,CACD,KAAK,EAAE,gBAAgB,EACvB,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,YAAY,GACpB,IAAI;IA6BP,qDAAqD;IACrD,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI;IAKvD,0BAA0B;IAC1B,IAAI,IAAI,MAAM;IAMd,OAAO,CAAC,YAAY;IAIpB,OAAO,CAAC,YAAY;IAkBpB,OAAO,CAAC,YAAY;CAOrB;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAC7B,qBAAqB,EAAE,MAAM,EAC7B,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,EACjB,mBAAmB,EAAE,KAAK,CAAC;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,GAC7D,MAAM,CAUR"}
@@ -0,0 +1,221 @@
1
+ /**
2
+ * ProjectDriftCheckerCache — verdict cache with mtime fast-path.
3
+ *
4
+ * Spec: docs/specs/PROJECT-SCOPE-SPEC.md § Phase 1.4 ("Cache key" + mtime
5
+ * fast-path).
6
+ *
7
+ * Cache key: sha256(promptTemplateVersion + modelId + specBodySha + sortedFileHashes)
8
+ * TTL: 24h (cache entries older than this are treated as misses)
9
+ *
10
+ * Mtime fast-path:
11
+ * Before computing the cache key, the cache compares (specPath mtime,
12
+ * referencedFile mtimes) to the values it last saw associated with the
13
+ * stored entry. If every mtime matches, the cache key is REUSED without
14
+ * re-hashing — file contents haven't changed. If any mtime moved, full
15
+ * hashing falls back. This is the spec's stated optimization: hashing
16
+ * only happens when an mtime moved.
17
+ *
18
+ * Storage:
19
+ * In-memory Map keyed by `${projectId}:${roundIndex}` (the natural id
20
+ * for a drift check). Disk-backed snapshot at
21
+ * `.instar/drift-verdict-cache.json` so the cache survives restarts
22
+ * without a cold first-call penalty after a sleep/wake.
23
+ *
24
+ * Concurrency:
25
+ * This cache is consulted INSIDE the per-project mutex held by
26
+ * `POST /projects/:id/drift-check` (Phase 1.5 round runner has its own
27
+ * round-runner lock). Within a single process there's no race; across
28
+ * processes the JSON snapshot is read on construction and written on
29
+ * every put, atomically (tmp + rename).
30
+ */
31
+ import fs from 'node:fs';
32
+ import path from 'node:path';
33
+ import crypto from 'node:crypto';
34
+ export const DEFAULT_TTL_MS = 24 * 60 * 60 * 1000; // 24h
35
+ export const SNAPSHOT_FILENAME = 'drift-verdict-cache.json';
36
+ export class ProjectDriftCheckerCache {
37
+ stateDir;
38
+ ttlMs;
39
+ persist;
40
+ entries = new Map();
41
+ constructor(config) {
42
+ this.stateDir = config.stateDir;
43
+ this.ttlMs = config.ttlMs ?? DEFAULT_TTL_MS;
44
+ this.persist = config.persist ?? true;
45
+ if (this.persist)
46
+ this.loadSnapshot();
47
+ }
48
+ /**
49
+ * Look up an entry for `(projectId, roundIndex)`. Returns a hit ONLY if:
50
+ * (a) an entry exists, AND
51
+ * (b) the entry is within the TTL, AND
52
+ * (c) either the mtime fast-path matches (no re-hash needed) OR the
53
+ * full sha256 cache key matches.
54
+ *
55
+ * On miss, the returned `key` is the freshly-computed sha256, which the
56
+ * caller should pass back to `put()` after running drift.
57
+ */
58
+ lookup(input) {
59
+ const entryId = `${input.projectId}:${input.roundIndex}`;
60
+ const existing = this.entries.get(entryId);
61
+ const now = Date.now();
62
+ // ── Mtime fast-path ──────────────────────────────────────────
63
+ // Cheap: verify the non-content cache-key inputs (templateVersion,
64
+ // modelId) match, then stat() each file and compare mtimes to the
65
+ // recorded mtimes. If everything matches, the cached entry is still
66
+ // valid and the cache key the entry holds is the one that matches
67
+ // the current bytes — we don't need to re-hash.
68
+ if (existing &&
69
+ now - Date.parse(existing.computedAt) < this.ttlMs &&
70
+ existing.promptTemplateVersion === input.promptTemplateVersion &&
71
+ existing.modelId === input.modelId) {
72
+ try {
73
+ const specMtime = fs.statSync(input.specPath).mtimeMs;
74
+ if (specMtime === existing.specMtimeMs) {
75
+ const allMatch = input.referencedFilePaths.every((p) => {
76
+ const recorded = existing.referencedFileMtimesMs[p];
77
+ if (recorded === undefined)
78
+ return false;
79
+ try {
80
+ return fs.statSync(p).mtimeMs === recorded;
81
+ }
82
+ catch {
83
+ return false;
84
+ }
85
+ });
86
+ // Also require referenced set hasn't shrunk OR grown
87
+ const sameSet = Object.keys(existing.referencedFileMtimesMs).length === input.referencedFilePaths.length;
88
+ if (allMatch && sameSet) {
89
+ return {
90
+ hit: true,
91
+ verdict: existing.verdict,
92
+ computedAt: existing.computedAt,
93
+ key: existing.key,
94
+ mtimeFastPath: true,
95
+ };
96
+ }
97
+ }
98
+ }
99
+ catch {
100
+ // statSync failure on the spec or a referenced file = treat as miss.
101
+ }
102
+ }
103
+ // ── Full hash path ───────────────────────────────────────────
104
+ const key = computeCacheKey(input.promptTemplateVersion, input.modelId, input.specBytes, input.referencedFilePaths.map((p, i) => ({
105
+ relPath: p,
106
+ bytes: input.referencedFileBytes[i] ?? Buffer.alloc(0),
107
+ })));
108
+ if (existing && existing.key === key && now - Date.parse(existing.computedAt) < this.ttlMs) {
109
+ return {
110
+ hit: true,
111
+ verdict: existing.verdict,
112
+ computedAt: existing.computedAt,
113
+ key,
114
+ mtimeFastPath: false,
115
+ };
116
+ }
117
+ return { hit: false, key };
118
+ }
119
+ /**
120
+ * Store `verdict` under `(projectId, roundIndex)` keyed by `key`. Captures
121
+ * file mtimes for the next mtime fast-path lookup.
122
+ *
123
+ * `manual-review-required` verdicts ARE cached too — re-running drift
124
+ * immediately won't change a deterministic over-budget or
125
+ * empty-spec answer. The TTL still expires them after 24h.
126
+ */
127
+ put(input, key, verdict) {
128
+ const entryId = `${input.projectId}:${input.roundIndex}`;
129
+ const referencedFileMtimesMs = {};
130
+ let specMtimeMs = 0;
131
+ try {
132
+ specMtimeMs = fs.statSync(input.specPath).mtimeMs;
133
+ }
134
+ catch {
135
+ // Spec gone — caller will probably get an `empty-spec` verdict
136
+ // anyway; record a zero so the next fast-path correctly invalidates.
137
+ }
138
+ for (const p of input.referencedFilePaths) {
139
+ try {
140
+ referencedFileMtimesMs[p] = fs.statSync(p).mtimeMs;
141
+ }
142
+ catch {
143
+ referencedFileMtimesMs[p] = -1; // Forces a future miss.
144
+ }
145
+ }
146
+ this.entries.set(entryId, {
147
+ key,
148
+ verdict,
149
+ computedAt: new Date().toISOString(),
150
+ promptTemplateVersion: input.promptTemplateVersion,
151
+ modelId: input.modelId,
152
+ specMtimeMs,
153
+ referencedFileMtimesMs,
154
+ });
155
+ if (this.persist)
156
+ this.saveSnapshot();
157
+ }
158
+ /** Remove an entry for `(projectId, roundIndex)`. */
159
+ invalidate(projectId, roundIndex) {
160
+ this.entries.delete(`${projectId}:${roundIndex}`);
161
+ if (this.persist)
162
+ this.saveSnapshot();
163
+ }
164
+ /** For tests / digest. */
165
+ size() {
166
+ return this.entries.size;
167
+ }
168
+ // ── Snapshot persistence (atomic write) ───────────────────────────
169
+ snapshotPath() {
170
+ return path.join(this.stateDir, SNAPSHOT_FILENAME);
171
+ }
172
+ loadSnapshot() {
173
+ const p = this.snapshotPath();
174
+ if (!fs.existsSync(p))
175
+ return;
176
+ try {
177
+ const raw = fs.readFileSync(p, 'utf-8');
178
+ const obj = JSON.parse(raw);
179
+ if (!obj || !Array.isArray(obj.entries))
180
+ return;
181
+ for (const [id, entry] of obj.entries) {
182
+ if (typeof id !== 'string')
183
+ continue;
184
+ if (!entry || typeof entry !== 'object')
185
+ continue;
186
+ if (typeof entry.key !== 'string')
187
+ continue;
188
+ this.entries.set(id, entry);
189
+ }
190
+ }
191
+ catch {
192
+ // Corrupt snapshot → start fresh, will be overwritten on next put.
193
+ }
194
+ }
195
+ saveSnapshot() {
196
+ if (!fs.existsSync(this.stateDir))
197
+ fs.mkdirSync(this.stateDir, { recursive: true });
198
+ const tmp = this.snapshotPath() + '.tmp';
199
+ const body = JSON.stringify({ entries: Array.from(this.entries.entries()) });
200
+ fs.writeFileSync(tmp, body, { mode: 0o600 });
201
+ fs.renameSync(tmp, this.snapshotPath());
202
+ }
203
+ }
204
+ /**
205
+ * Compute the deterministic cache key. Exported for tests and for the
206
+ * `cacheKeyInputs` helper in ProjectDriftChecker.ts (which produces the
207
+ * same inputs — this function hashes them into a stable string).
208
+ */
209
+ export function computeCacheKey(promptTemplateVersion, modelId, specBytes, referencedFileBytes) {
210
+ const sortedFileEntries = referencedFileBytes
211
+ .map((f) => `${f.relPath}:${crypto.createHash('sha256').update(f.bytes).digest('hex')}`)
212
+ .sort();
213
+ const h = crypto.createHash('sha256');
214
+ h.update(`v=${promptTemplateVersion}\n`);
215
+ h.update(`m=${modelId}\n`);
216
+ h.update(`s=${crypto.createHash('sha256').update(specBytes).digest('hex')}\n`);
217
+ for (const entry of sortedFileEntries)
218
+ h.update(`f=${entry}\n`);
219
+ return h.digest('hex');
220
+ }
221
+ //# sourceMappingURL=ProjectDriftCheckerCache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProjectDriftCheckerCache.js","sourceRoot":"","sources":["../../src/core/ProjectDriftCheckerCache.ts"],"names":[],"mappings":"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"}
@@ -408,16 +408,17 @@ export declare class SessionManager extends EventEmitter {
408
408
  * line as `❯` or on the immediately-following line (Claude Code wraps
409
409
  * long input across two visible rows).
410
410
  *
411
- * Exposed as a method so the StuckInputSweeper and tests can reuse it.
411
+ * Exposed as a method so StuckInputSentinel and tests can reuse it.
412
412
  */
413
- private isMarkerStuckAtPrompt;
413
+ isMarkerStuckAtPrompt(pane: string, marker: string): boolean;
414
414
  /**
415
415
  * Fire one recovery action for a stuck input. Escalates the action by
416
416
  * attempt index — early attempts use plain Enter, later attempts use
417
417
  * C-m (literal carriage return) or Enter+sleep+Enter to defeat tighter
418
- * race windows. Bounded; called from verifyInjection's polling loop.
418
+ * race windows. Bounded; called from verifyInjection's polling loop and
419
+ * from the persistent StuckInputSentinel after a server restart.
419
420
  */
420
- private fireStuckInputRecovery;
421
+ fireStuckInputRecovery(tmuxSession: string, attempt: number): void;
421
422
  /**
422
423
  * Wait for Claude to be ready in a tmux session by polling output.
423
424
  * Looks for Claude Code's prompt character (❯) which appears when ready for input.
@@ -1 +1 @@
1
- {"version":3,"file":"SessionManager.d.ts","sourceRoot":"","sources":["../../src/core/SessionManager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"SessionManager.d.ts","sourceRoot":"","sources":["../../src/core/SessionManager.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAS3C,+CAA+C;AAC/C,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,oCAAoC;AACpC,MAAM,MAAM,cAAc,GAAG,KAAK,GAAG,UAAU,GAAG,MAAM,GAAG,UAAU,CAAC;AAEtE,qEAAqE;AACrE,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,iBAAiB,EAAE,CAAC;IAC9B,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,iBAAiB,EAAE,CAAC;IACnC,cAAc,EAAE,cAAc,CAAC;IAC/B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB;AAED,OAAO,EAAE,UAAU,EAAqB,MAAM,iBAAiB,CAAC;AAChE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAGjE,OAAO,KAAK,EAAE,OAAO,EAAE,oBAAoB,EAAiB,SAAS,EAAE,MAAM,YAAY,CAAC;AAC1F,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAsEjD,MAAM,WAAW,oBAAoB;IACnC,eAAe,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;CACrC;AAED,qBAAa,cAAe,SAAQ,YAAY;IAC9C,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,KAAK,CAAe;IAC5B,OAAO,CAAC,eAAe,CAA+C;IACtE,OAAO,CAAC,oBAAoB,CAAS;IACrC,OAAO,CAAC,UAAU,CAA2B;IAC7C,OAAO,CAAC,YAAY,CAAuB;IAE3C,yFAAyF;IACzF,OAAO,CAAC,eAAe,CAA6B;IAEpD,wDAAwD;IACxD,OAAO,CAAC,aAAa,CAAK;IAE1B,iGAAiG;IACjG,OAAO,CAAC,eAAe,CAAC,CAAgC;IAExD,2GAA2G;IAC3G,OAAO,CAAC,qBAAqB,CAAC,CAAgC;IAE9D;;;+FAG2F;IAC3F,OAAO,CAAC,mBAAmB,CAAC,CAAkD;IAE9E,mFAAmF;IACnF,OAAO,CAAC,cAAc,CAAC,CAAgB;IAEvC,sGAAsG;IACtG,OAAO,CAAC,WAAW,CAA6B;IAEhD;2FACuF;IACvF,OAAO,CAAC,iBAAiB,CAA4E;IAErG;;wFAEoF;IACpF,OAAO,CAAC,mBAAmB,CAAqB;IAEhD;mFAC+E;IAC/E,OAAO,CAAC,YAAY,CAAqB;IAEzC;yEACqE;IACrE,OAAO,CAAC,mBAAmB,CAAK;IAChC,OAAO,CAAC,sBAAsB,CAAiB;IAE/C,yFAAyF;IACzF,OAAO,CAAC,eAAe,CAA+D;IAEtF,4FAA4F;IAC5F,OAAO,CAAC,QAAQ,CAAuB;gBAE3B,MAAM,EAAE,oBAAoB,EAAE,KAAK,EAAE,YAAY;IAM7D,qFAAqF;IACrF,OAAO,KAAK,wBAAwB,GAEnC;IAED;;qEAEiE;IACjE,OAAO,KAAK,6BAA6B,GAExC;IAED,qFAAqF;IACrF,OAAO,KAAK,2BAA2B,GAEtC;IAED;;;;;;;OAOG;IACH,kBAAkB,CAChB,EAAE,EAAE,OAAO,sBAAsB,EAAE,eAAe,EAClD,QAAQ,GAAE,MAAM,GAAG,IAAW,GAC7B,IAAI;IAKP;;;;;OAKG;IACH,OAAO,CAAC,kBAAkB;IA4B1B,OAAO,CAAC,iBAAiB;IAczB;;;OAGG;IACH,aAAa,CAAC,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,GAAG,IAAI;IAK5D;;;;OAIG;IACH,kBAAkB,CAAC,OAAO,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,GAAG,IAAI;IAIhE;;;;;;;;;;;;OAYG;IACH,sBAAsB,CAAC,OAAO,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,MAAM,GAAG,MAAM,GAAG,IAAI,GAAG,IAAI;IAItF;;;;;OAKG;IACH,wBAAwB,CAAC,OAAO,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,GAAG,IAAI;IAItE;;;OAGG;IACH,iBAAiB,CAAC,QAAQ,EAAE,aAAa,GAAG,IAAI;IAWhD;;;;OAIG;IACH,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI;IAI5D;;OAEG;IACH,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAIxC;;;;OAIG;IACH,kBAAkB,CAAC,eAAe,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,GAAG,IAAI;IAS1E;;OAEG;IACH,cAAc,CAAC,eAAe,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS;IAI5D;;;OAGG;IACH,OAAO,CAAC,eAAe;IA2BvB;;;;;;OAMG;IACH,eAAe,CAAC,UAAU,GAAE,MAAa,GAAG,IAAI;YAYlC,WAAW;IAsNzB;;OAEG;IACH,cAAc,IAAI,IAAI;IAOtB;;;;;;;OAOG;IACG,YAAY,CAAC,OAAO,EAAE;QAC1B,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,MAAM,CAAC;QACf,KAAK,CAAC,EAAE,SAAS,CAAC;QAClB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,kBAAkB,CAAC,EAAE,MAAM,CAAC;QAC5B,OAAO,CAAC,EAAE,MAAM,GAAG,UAAU,CAAC;QAC9B,YAAY,CAAC,EAAE,KAAK,GAAG,WAAW,GAAG,SAAS,GAAG,UAAU,CAAC;QAC5D,YAAY,CAAC,EAAE,MAAM,CAAC;KACvB,GAAG,OAAO,CAAC,OAAO,CAAC;IA6HpB;;;OAGG;IACH,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO;IAmC5C;;;;;;;;OAQG;YACW,mBAAmB;IAuCjC;;OAEG;IACH,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IA4BvC;;;;;;;;;OASG;IACH,kBAAkB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO;IAiEhD;;OAEG;IACH,aAAa,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,GAAE,MAAY,GAAG,MAAM,GAAG,IAAI;IActE;;OAEG;IACH,SAAS,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO;IAqBtD;;;;OAIG;IACH,OAAO,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO;IAclD;;;;;OAKG;IACH,mBAAmB,IAAI,OAAO,EAAE;IAShC;;;;OAIG;IACH,wBAAwB,IAAI;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,OAAO,EAAE,CAAA;KAAE;IAIlE;;;;;OAKG;IACG,iBAAiB,IAAI,OAAO,CAAC,MAAM,CAAC;IAyB1C;;;;OAIG;IACH,qBAAqB,IAAI,kBAAkB;IAiF3C;;OAEG;IACH,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO;IAS9C;;OAEG;IACH,qBAAqB,IAAI,MAAM,EAAE;IA2BjC;;;;;OAKG;IACH,oBAAoB,IAAI,MAAM,EAAE;IAmDhC;;;;OAIG;IACG,uBAAuB,CAAC,cAAc,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,eAAe,CAAC,EAAE,MAAM,CAAC;QAAC,cAAc,CAAC,EAAE,MAAM,CAAC;QAAC,eAAe,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,MAAM,CAAC;IA0HjL;;;;;;;;;;;;;OAaG;YACW,oBAAoB;IAoGlC;;;;;;OAMG;IACG,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE;QAC9C,YAAY,EAAE,MAAM,EAAE,CAAC;QACvB,cAAc,EAAE,MAAM,CAAC;QACvB,eAAe,CAAC,EAAE,MAAM,CAAC;KAC1B,GAAG,OAAO,CAAC,MAAM,CAAC;IAoFnB;;;;;;;OAOG;IACH;;;;OAIG;IACH,uBAAuB,CAAC,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,IAAI;IAmBxE,qBAAqB,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,MAAM,GAAG,OAAO;IAwDpJ;;;OAGG;IACH,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAQ5C;;OAEG;IACH,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,SAAS;IAI3G;;;OAGG;IACH,qBAAqB,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI;IAwBhG;;;;;OAKG;IACH,qBAAqB,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI;IAoCnG;;;OAGG;IACH,6BAA6B,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAenD;;;;;;;;;;;OAWG;IACH,aAAa,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO;IA2FzD;;;OAGG;IACH,OAAO,CAAC,SAAS;IAgFjB;;;;;;;;;;;;;;OAcG;IACH,OAAO,CAAC,eAAe;IAmDvB;;;;;;;OAOG;IACH,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO;IAa5D;;;;;;OAMG;IACH,sBAAsB,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IAoBlE;;;OAGG;IACG,kBAAkB,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,GAAE,MAAc,GAAG,OAAO,CAAC,OAAO,CAAC;IAqB1F;;;;;;OAMG;IACH,OAAO,CAAC,kBAAkB;IAmD1B;;;;;;;;;OASG;YACW,2BAA2B;IA6BzC,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAcxC,OAAO,CAAC,UAAU;CAGnB"}
@@ -1817,7 +1817,7 @@ rm() { "${shimRunner}" rm "$@"; }
1817
1817
  * line as `❯` or on the immediately-following line (Claude Code wraps
1818
1818
  * long input across two visible rows).
1819
1819
  *
1820
- * Exposed as a method so the StuckInputSweeper and tests can reuse it.
1820
+ * Exposed as a method so StuckInputSentinel and tests can reuse it.
1821
1821
  */
1822
1822
  isMarkerStuckAtPrompt(pane, marker) {
1823
1823
  if (!marker || marker.length < 8)
@@ -1836,7 +1836,8 @@ rm() { "${shimRunner}" rm "$@"; }
1836
1836
  * Fire one recovery action for a stuck input. Escalates the action by
1837
1837
  * attempt index — early attempts use plain Enter, later attempts use
1838
1838
  * C-m (literal carriage return) or Enter+sleep+Enter to defeat tighter
1839
- * race windows. Bounded; called from verifyInjection's polling loop.
1839
+ * race windows. Bounded; called from verifyInjection's polling loop and
1840
+ * from the persistent StuckInputSentinel after a server restart.
1840
1841
  */
1841
1842
  fireStuckInputRecovery(tmuxSession, attempt) {
1842
1843
  const target = `=${tmuxSession}:`;