instar 1.3.499 → 1.3.501

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 (98) hide show
  1. package/dist/commands/server.d.ts.map +1 -1
  2. package/dist/commands/server.js +407 -6
  3. package/dist/commands/server.js.map +1 -1
  4. package/dist/config/ConfigDefaults.d.ts.map +1 -1
  5. package/dist/config/ConfigDefaults.js +10 -0
  6. package/dist/config/ConfigDefaults.js.map +1 -1
  7. package/dist/core/PostUpdateMigrator.d.ts +1 -0
  8. package/dist/core/PostUpdateMigrator.d.ts.map +1 -1
  9. package/dist/core/PostUpdateMigrator.js +69 -0
  10. package/dist/core/PostUpdateMigrator.js.map +1 -1
  11. package/dist/core/ReapGuard.d.ts +24 -0
  12. package/dist/core/ReapGuard.d.ts.map +1 -1
  13. package/dist/core/ReapGuard.js +62 -0
  14. package/dist/core/ReapGuard.js.map +1 -1
  15. package/dist/core/SessionManager.d.ts +32 -0
  16. package/dist/core/SessionManager.d.ts.map +1 -1
  17. package/dist/core/SessionManager.js +74 -2
  18. package/dist/core/SessionManager.js.map +1 -1
  19. package/dist/core/WorkEvidence.d.ts +45 -0
  20. package/dist/core/WorkEvidence.d.ts.map +1 -0
  21. package/dist/core/WorkEvidence.js +88 -0
  22. package/dist/core/WorkEvidence.js.map +1 -0
  23. package/dist/core/componentCategories.d.ts.map +1 -1
  24. package/dist/core/componentCategories.js +3 -0
  25. package/dist/core/componentCategories.js.map +1 -1
  26. package/dist/core/devGatedFeatures.d.ts.map +1 -1
  27. package/dist/core/devGatedFeatures.js +5 -0
  28. package/dist/core/devGatedFeatures.js.map +1 -1
  29. package/dist/core/types.d.ts +50 -0
  30. package/dist/core/types.d.ts.map +1 -1
  31. package/dist/core/types.js.map +1 -1
  32. package/dist/messaging/NotificationBatcher.d.ts +12 -0
  33. package/dist/messaging/NotificationBatcher.d.ts.map +1 -1
  34. package/dist/messaging/NotificationBatcher.js +36 -0
  35. package/dist/messaging/NotificationBatcher.js.map +1 -1
  36. package/dist/messaging/pending-relay-store.d.ts +67 -8
  37. package/dist/messaging/pending-relay-store.d.ts.map +1 -1
  38. package/dist/messaging/pending-relay-store.js +151 -14
  39. package/dist/messaging/pending-relay-store.js.map +1 -1
  40. package/dist/messaging/reap-notice-delivery-id.d.ts +37 -0
  41. package/dist/messaging/reap-notice-delivery-id.d.ts.map +1 -0
  42. package/dist/messaging/reap-notice-delivery-id.js +52 -0
  43. package/dist/messaging/reap-notice-delivery-id.js.map +1 -0
  44. package/dist/monitoring/QuotaManager.d.ts +6 -0
  45. package/dist/monitoring/QuotaManager.d.ts.map +1 -1
  46. package/dist/monitoring/QuotaManager.js +11 -0
  47. package/dist/monitoring/QuotaManager.js.map +1 -1
  48. package/dist/monitoring/ReapLog.d.ts +39 -4
  49. package/dist/monitoring/ReapLog.d.ts.map +1 -1
  50. package/dist/monitoring/ReapLog.js +54 -4
  51. package/dist/monitoring/ReapLog.js.map +1 -1
  52. package/dist/monitoring/ReapNoticeDrain.d.ts +113 -0
  53. package/dist/monitoring/ReapNoticeDrain.d.ts.map +1 -0
  54. package/dist/monitoring/ReapNoticeDrain.js +231 -0
  55. package/dist/monitoring/ReapNoticeDrain.js.map +1 -0
  56. package/dist/monitoring/ReapNotifier.d.ts +89 -18
  57. package/dist/monitoring/ReapNotifier.d.ts.map +1 -1
  58. package/dist/monitoring/ReapNotifier.js +329 -22
  59. package/dist/monitoring/ReapNotifier.js.map +1 -1
  60. package/dist/monitoring/ResumeQueue.d.ts +223 -0
  61. package/dist/monitoring/ResumeQueue.d.ts.map +1 -0
  62. package/dist/monitoring/ResumeQueue.js +600 -0
  63. package/dist/monitoring/ResumeQueue.js.map +1 -0
  64. package/dist/monitoring/ResumeQueueDrainer.d.ts +151 -0
  65. package/dist/monitoring/ResumeQueueDrainer.d.ts.map +1 -0
  66. package/dist/monitoring/ResumeQueueDrainer.js +420 -0
  67. package/dist/monitoring/ResumeQueueDrainer.js.map +1 -0
  68. package/dist/monitoring/SessionMigrator.d.ts +10 -0
  69. package/dist/monitoring/SessionMigrator.d.ts.map +1 -1
  70. package/dist/monitoring/SessionMigrator.js +43 -1
  71. package/dist/monitoring/SessionMigrator.js.map +1 -1
  72. package/dist/monitoring/SessionReaper.d.ts +1 -0
  73. package/dist/monitoring/SessionReaper.d.ts.map +1 -1
  74. package/dist/monitoring/SessionReaper.js +5 -0
  75. package/dist/monitoring/SessionReaper.js.map +1 -1
  76. package/dist/monitoring/delivery-failure-sentinel.d.ts.map +1 -1
  77. package/dist/monitoring/delivery-failure-sentinel.js +7 -3
  78. package/dist/monitoring/delivery-failure-sentinel.js.map +1 -1
  79. package/dist/scaffold/templates.d.ts.map +1 -1
  80. package/dist/scaffold/templates.js +4 -3
  81. package/dist/scaffold/templates.js.map +1 -1
  82. package/dist/server/AgentServer.d.ts +5 -0
  83. package/dist/server/AgentServer.d.ts.map +1 -1
  84. package/dist/server/AgentServer.js +3 -0
  85. package/dist/server/AgentServer.js.map +1 -1
  86. package/dist/server/routes.d.ts +8 -0
  87. package/dist/server/routes.d.ts.map +1 -1
  88. package/dist/server/routes.js +94 -0
  89. package/dist/server/routes.js.map +1 -1
  90. package/package.json +1 -1
  91. package/skills/spec-converge/SKILL.md +23 -0
  92. package/src/data/builtin-manifest.json +65 -65
  93. package/src/data/state-coherence-registry.json +14 -1
  94. package/src/scaffold/templates.ts +4 -3
  95. package/upgrades/1.3.500.md +43 -0
  96. package/upgrades/1.3.501.md +51 -0
  97. package/upgrades/side-effects/conformance-gate-autoinvoke.md +58 -0
  98. package/upgrades/side-effects/reap-notify-resume-queue.md +89 -0
@@ -0,0 +1,223 @@
1
+ /**
2
+ * ResumeQueue — the durable, ordered queue of mid-work reaped sessions
3
+ * awaiting revival (reap-notify spec R2.2/R2.3, parts of R2.9/R2.10).
4
+ *
5
+ * One queue per machine, JSON-file backed (`state/resume-queue.json`),
6
+ * in-memory authoritative with SYNCHRONOUS persist on every mutation using
7
+ * the crash-durable discipline: write temp → fsync temp → rename → fsync
8
+ * parent dir. A crash loses at most the latest mutation, which boot
9
+ * reconciliation absorbs (a lost enqueue is re-created from the reap-log; a
10
+ * lost transition replays as a failed attempt).
11
+ *
12
+ * Single-writer is ENFORCED, not assumed: a lockfile
13
+ * (`state/resume-queue.lock`, pid + hostname + heartbeat mtime) is taken at
14
+ * start. Stale-lock recovery is automatic on the SAME host (dead pid or old
15
+ * heartbeat ⇒ reclaim + log); a LIVE other process disables the queue loudly.
16
+ * HARD INVARIANT: a lock whose hostname differs from this host is NEVER
17
+ * liveness-probed or reclaimed — pid checks are meaningless cross-host — it
18
+ * disables the queue loudly instead, and the disable message documents the
19
+ * operational recovery (verify nothing else uses the state dir, delete the
20
+ * lock, restart).
21
+ *
22
+ * Eligibility (R2.2) is stricter than midWork: terminal + autonomous +
23
+ * (≥1 strong signal, OR topic-bound with ≥2 distinct weak signals); jobs
24
+ * must opt in (`resumeOnReap:true`, default false); sessions with neither a
25
+ * topic binding nor a jobSlug are excluded at enqueue; operator kills
26
+ * excluded by default; watchdog stuck-kills and topic-moved closeouts never
27
+ * queue. The resurrection LEDGER (keyed on stable identity
28
+ * `topicId ?? jobSlug ?? tmuxSession`, tombstones surviving dequeue, 24h
29
+ * reset window) caps kill-resume-kill loops at `maxResurrections`.
30
+ *
31
+ * Dry-run posture (the fleet's shipped default): entries ARE durably
32
+ * enqueued (observable in `GET /sessions/resume-queue` — the soak needs real
33
+ * midWork entries), but the drainer never spawns (it audits `would-resume`)
34
+ * and nothing user-facing claims a queued resume. Deliberate interpretation
35
+ * of "observe-only", recorded in the side-effects review.
36
+ */
37
+ export type ResumePriorityClass = 'interactive' | 'job' | 'other';
38
+ export type ResumeEntryStatus = 'queued' | 'starting' | 'respawned' | 'failed' | 'cancelled' | `invalidated:${string}` | `gave-up:${string}`;
39
+ export interface ResumeQueueEntry {
40
+ id: string;
41
+ queuedAt: string;
42
+ /** TTL re-anchor on an operator requeue (R2.10); TTL keys on max(queuedAt, requeuedAt). */
43
+ requeuedAt?: string;
44
+ /** Stable identity: topicId ?? jobSlug ?? tmuxSession (R2.3). */
45
+ stableKey: string;
46
+ sessionName: string;
47
+ tmuxSession: string;
48
+ topicId?: number;
49
+ /** Conversation-resume UUID snapshot at enqueue time (R2.6 revalidates). */
50
+ resumeUuid?: string;
51
+ jobSlug?: string;
52
+ cwd: string;
53
+ worktreePath?: string;
54
+ priorityClass: ResumePriorityClass;
55
+ reason: string;
56
+ workEvidence: string[];
57
+ attempts: number;
58
+ status: ResumeEntryStatus;
59
+ lastAttemptAt?: string;
60
+ /** Backoff hold between attempts (R2.9). */
61
+ nextAttemptAt?: string;
62
+ /** Milliseconds of operator-pause time excluded from this entry's TTL clock. */
63
+ frozenMs?: number;
64
+ /** TTL expiry under sustained pressure carries this marker (R2.9). */
65
+ pressureStarved?: boolean;
66
+ }
67
+ /** Tombstone ledger row — survives dequeue (R2.9 resurrection cap). */
68
+ export interface ResurrectionTombstone {
69
+ stableKey: string;
70
+ resurrections: number;
71
+ windowStartAt: string;
72
+ lastResumeAt?: string;
73
+ }
74
+ export interface ResumeQueueConfig {
75
+ enabled: boolean;
76
+ dryRun: boolean;
77
+ maxAttempts: number;
78
+ maxResurrections: number;
79
+ entryTtlHours: number;
80
+ maxQueueSize: number;
81
+ includeOperatorKills: boolean;
82
+ }
83
+ export declare const DEFAULT_RESUME_QUEUE_CONFIG: ResumeQueueConfig;
84
+ export interface EnqueueDecision {
85
+ enqueued: boolean;
86
+ /** Why not (audit vocabulary). */
87
+ why?: string;
88
+ entry?: ResumeQueueEntry;
89
+ }
90
+ export interface ResumeCandidateInput {
91
+ sessionName: string;
92
+ tmuxSession: string;
93
+ topicId?: number | null;
94
+ jobSlug?: string;
95
+ jobResumeOptIn?: boolean;
96
+ resumeUuid?: string | null;
97
+ cwd: string;
98
+ worktreePath?: string;
99
+ reason: string;
100
+ disposition: 'terminal' | 'recovery-bounce';
101
+ origin: 'operator' | 'autonomous';
102
+ workEvidence: string[];
103
+ }
104
+ export interface ResumeQueueDeps {
105
+ /** `.instar` state dir — files live under `<stateDir>/state/`. */
106
+ stateDir: string;
107
+ /** Decision-transition audit sink (logs/resume-queue.jsonl). */
108
+ audit?: (event: Record<string, unknown>) => void;
109
+ /** Aggregated attention surface (ONE rolling item — the caller dedupes). */
110
+ raiseAggregated?: (kind: string, detail: string) => void;
111
+ now?: () => number;
112
+ hostname?: () => string;
113
+ /** pid liveness probe (tests override). */
114
+ pidAlive?: (pid: number) => boolean;
115
+ }
116
+ /** Pure eligibility classifier (R2.2) — exported for tests. */
117
+ export declare function classifyEligibility(input: ResumeCandidateInput, cfg: Pick<ResumeQueueConfig, 'includeOperatorKills'>): {
118
+ eligible: boolean;
119
+ why?: string;
120
+ };
121
+ export declare class ResumeQueue {
122
+ private readonly deps;
123
+ private readonly cfg;
124
+ private readonly now;
125
+ private readonly statePath;
126
+ private readonly lockPath;
127
+ private state;
128
+ private seq;
129
+ /** Non-null ⇒ the queue is disabled (lock conflict / foreign lock). */
130
+ private disabledReason;
131
+ private lockHeld;
132
+ constructor(deps: ResumeQueueDeps, cfg?: Partial<ResumeQueueConfig>);
133
+ config(): ResumeQueueConfig;
134
+ isDisabled(): string | null;
135
+ isPaused(): boolean;
136
+ isDryRun(): boolean;
137
+ /**
138
+ * Acquire the single-writer lock + load the durable state. Returns false
139
+ * (queue disabled, reason in `isDisabled()`) on a live-other-process or
140
+ * foreign-host lock — never throws for those.
141
+ */
142
+ start(): boolean;
143
+ stop(): void;
144
+ /** Refresh the lock heartbeat (drainer calls this every tick). */
145
+ heartbeat(): void;
146
+ private acquireLock;
147
+ private load;
148
+ /** Crash-durable persist: temp → fsync temp → rename → fsync parent dir. */
149
+ private persist;
150
+ private audit;
151
+ /** Boot reconciliation half 1 (R2.4): `starting` found at load = failed attempt. */
152
+ private reconcileStartingEntries;
153
+ /**
154
+ * Boot reconciliation half 2 (R2.4): recent reap-log midWork terminal
155
+ * autonomous entries with no queue entry AND no tombstone are re-enqueued —
156
+ * closing the crash window where an enqueue's persist was lost. The caller
157
+ * supplies reconstruction (session records, resume map) — a candidate that
158
+ * cannot be reconstructed is skipped (the next re-reap recreates it).
159
+ */
160
+ reconcileFromReapLog(candidates: ResumeCandidateInput[]): number;
161
+ private stableKeyFor;
162
+ /**
163
+ * The enqueue decision (R2.2 + R2.3 + R2.9 resurrection cap). Audited on
164
+ * every outcome. In dry-run the entry is still durably enqueued (the soak's
165
+ * observable), but nothing downstream spawns or claims a resume.
166
+ */
167
+ considerEnqueue(input: ResumeCandidateInput, opts?: {
168
+ source?: string;
169
+ }): EnqueueDecision;
170
+ private tombstoneFor;
171
+ /** Record a successful resume (drainer, after spawn verification). */
172
+ recordResumeSuccess(stableKey: string): void;
173
+ /** Ordered open entries: interactive → job → other, FIFO inside each (R2.5). */
174
+ nextCandidates(): ResumeQueueEntry[];
175
+ list(): ResumeQueueEntry[];
176
+ get(id: string): ResumeQueueEntry | undefined;
177
+ /** State-transition helpers (each persists + audits the TRANSITION). */
178
+ transition(id: string, status: ResumeEntryStatus, extra?: Partial<ResumeQueueEntry>): boolean;
179
+ /** Operator/API cancel (an explicit per-topic stop cancels that topic's entries — R2.7). */
180
+ cancel(id: string): boolean;
181
+ cancelByTopic(topicId: number): number;
182
+ /**
183
+ * Requeue clamps (R2.10): eligible from gave-up:* ONLY — never `cancelled`
184
+ * (an operator stop) and refused while paused (callers enforce the 409).
185
+ * Resets attempts and RE-ANCHORS the TTL clock while preserving the original
186
+ * queuedAt for the R2.6 operator-stop / job-ran-since checks. Requeueing a
187
+ * gave-up:resurrection-cap entry grants exactly ONE audited override.
188
+ */
189
+ requeue(id: string): {
190
+ ok: boolean;
191
+ why?: string;
192
+ };
193
+ /** Queue-global pause (R2.7): entries keep their states; TTLs freeze. */
194
+ pause(reason: string): void;
195
+ /** Explicit unpause lever (R2.7) — accumulates the pause into frozenMs. */
196
+ unpause(): void;
197
+ pauseInfo(): {
198
+ paused: boolean;
199
+ pausedAt?: string;
200
+ reason?: string;
201
+ };
202
+ /**
203
+ * TTL sweep (R2.9): INCIDENT-AGE semantics — wall clock since
204
+ * max(queuedAt, requeuedAt), minus operator-pause freeze, NOT frozen by
205
+ * pressure. Expiries under sustained pressure carry the pressure-starved
206
+ * marker so a day-long overload reads differently from ordinary staleness.
207
+ * No sweep while paused (an operator pause must not silently expire the queue).
208
+ */
209
+ expireTtl(pressureCalm: boolean): ResumeQueueEntry[];
210
+ /** Snapshot for the API surface (R2.10). */
211
+ snapshot(): {
212
+ paused: boolean;
213
+ pauseReason?: string;
214
+ disabled: string | null;
215
+ dryRun: boolean;
216
+ entries: ResumeQueueEntry[];
217
+ tombstones: ResurrectionTombstone[];
218
+ };
219
+ /** True when a LIVE (non-dry-run) queued entry exists for this tmux session
220
+ * — feeds the notifier's "restart is queued" line (R1.2). */
221
+ hasLiveQueuedEntryFor(tmuxSession: string): boolean;
222
+ }
223
+ //# sourceMappingURL=ResumeQueue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ResumeQueue.d.ts","sourceRoot":"","sources":["../../src/monitoring/ResumeQueue.ts"],"names":[],"mappings":"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"}