instar 1.3.606 → 1.3.608

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 (76) hide show
  1. package/dist/commands/server.d.ts.map +1 -1
  2. package/dist/commands/server.js +333 -32
  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 +38 -0
  6. package/dist/config/ConfigDefaults.js.map +1 -1
  7. package/dist/coordination/CrossMachineMandate.d.ts +53 -0
  8. package/dist/coordination/CrossMachineMandate.d.ts.map +1 -0
  9. package/dist/coordination/CrossMachineMandate.js +76 -0
  10. package/dist/coordination/CrossMachineMandate.js.map +1 -0
  11. package/dist/core/AccountCredentialShare.d.ts +115 -0
  12. package/dist/core/AccountCredentialShare.d.ts.map +1 -0
  13. package/dist/core/AccountCredentialShare.js +113 -0
  14. package/dist/core/AccountCredentialShare.js.map +1 -0
  15. package/dist/core/AccountFollowMeGrants.d.ts +92 -0
  16. package/dist/core/AccountFollowMeGrants.d.ts.map +1 -0
  17. package/dist/core/AccountFollowMeGrants.js +106 -0
  18. package/dist/core/AccountFollowMeGrants.js.map +1 -0
  19. package/dist/core/CoherenceJournal.d.ts +1 -1
  20. package/dist/core/CoherenceJournal.d.ts.map +1 -1
  21. package/dist/core/CoherenceJournal.js +12 -2
  22. package/dist/core/CoherenceJournal.js.map +1 -1
  23. package/dist/core/PairingEpochManager.d.ts +68 -0
  24. package/dist/core/PairingEpochManager.d.ts.map +1 -0
  25. package/dist/core/PairingEpochManager.js +88 -0
  26. package/dist/core/PairingEpochManager.js.map +1 -0
  27. package/dist/core/PostUpdateMigrator.d.ts.map +1 -1
  28. package/dist/core/PostUpdateMigrator.js +38 -0
  29. package/dist/core/PostUpdateMigrator.js.map +1 -1
  30. package/dist/core/SecretStore.d.ts +44 -0
  31. package/dist/core/SecretStore.d.ts.map +1 -1
  32. package/dist/core/SecretStore.js +126 -0
  33. package/dist/core/SecretStore.js.map +1 -1
  34. package/dist/core/SecretSync.d.ts.map +1 -1
  35. package/dist/core/SecretSync.js +6 -0
  36. package/dist/core/SecretSync.js.map +1 -1
  37. package/dist/core/SubscriptionAccountMetaReplicatedStore.d.ts +106 -0
  38. package/dist/core/SubscriptionAccountMetaReplicatedStore.d.ts.map +1 -0
  39. package/dist/core/SubscriptionAccountMetaReplicatedStore.js +263 -0
  40. package/dist/core/SubscriptionAccountMetaReplicatedStore.js.map +1 -0
  41. package/dist/core/SubscriptionPool.d.ts +23 -5
  42. package/dist/core/SubscriptionPool.d.ts.map +1 -1
  43. package/dist/core/SubscriptionPool.js +30 -6
  44. package/dist/core/SubscriptionPool.js.map +1 -1
  45. package/dist/core/devGatedFeatures.d.ts.map +1 -1
  46. package/dist/core/devGatedFeatures.js +12 -0
  47. package/dist/core/devGatedFeatures.js.map +1 -1
  48. package/dist/core/types.d.ts +37 -0
  49. package/dist/core/types.d.ts.map +1 -1
  50. package/dist/core/types.js.map +1 -1
  51. package/dist/monitoring/AutonomousLivenessReconciler.d.ts +278 -0
  52. package/dist/monitoring/AutonomousLivenessReconciler.d.ts.map +1 -0
  53. package/dist/monitoring/AutonomousLivenessReconciler.js +660 -0
  54. package/dist/monitoring/AutonomousLivenessReconciler.js.map +1 -0
  55. package/dist/monitoring/ResumeQueue.d.ts +10 -0
  56. package/dist/monitoring/ResumeQueue.d.ts.map +1 -1
  57. package/dist/monitoring/ResumeQueue.js +12 -0
  58. package/dist/monitoring/ResumeQueue.js.map +1 -1
  59. package/dist/scaffold/templates.d.ts.map +1 -1
  60. package/dist/scaffold/templates.js +7 -0
  61. package/dist/scaffold/templates.js.map +1 -1
  62. package/dist/server/AgentServer.d.ts +1 -0
  63. package/dist/server/AgentServer.d.ts.map +1 -1
  64. package/dist/server/AgentServer.js +6 -0
  65. package/dist/server/AgentServer.js.map +1 -1
  66. package/dist/server/routes.d.ts +4 -0
  67. package/dist/server/routes.d.ts.map +1 -1
  68. package/dist/server/routes.js +10 -0
  69. package/dist/server/routes.js.map +1 -1
  70. package/package.json +1 -1
  71. package/src/data/builtin-manifest.json +64 -64
  72. package/src/scaffold/templates.ts +7 -0
  73. package/upgrades/1.3.607.md +25 -0
  74. package/upgrades/1.3.608.md +29 -0
  75. package/upgrades/side-effects/autonomous-liveness-reconciler.md +39 -0
  76. package/upgrades/side-effects/ws52-account-follow-me-pr1.md +74 -0
@@ -0,0 +1,278 @@
1
+ /**
2
+ * AutonomousLivenessReconciler — a level-triggered control loop that self-heals
3
+ * an autonomous run whose state file says ACTIVE (with time remaining) but has
4
+ * NO live session executing it.
5
+ *
6
+ * THE INCIDENT (2026-06-16): an autonomous run on topic 12476 was reaped under
7
+ * `age-limit` (the periodic per-session lifetime recycle). The recycle is meant
8
+ * to be invisible — the run should revive and continue — but the reap was tagged
9
+ * `midWork:false`, so it was never offered to the resume queue, and the run
10
+ * silently died. Its state file still said active with ~15h remaining; no tmux
11
+ * session was running it; nothing watched for the contradiction. When the user
12
+ * messaged 1h+ later there was no live session to answer.
13
+ *
14
+ * THE FIX (this module): don't perfect the edge — add a control loop that
15
+ * continuously compares desired state (run active+remaining) vs actual state
16
+ * (a live session exists) and converges. It self-heals regardless of HOW the
17
+ * run got orphaned. It is the liveness twin of the progress heartbeat: a
18
+ * heartbeat covers "alive but quiet"; this covers "dead but marked active".
19
+ *
20
+ * SIGNAL-ONLY / SAFE DIRECTION: in dryRun it only LOGS "would respawn" (plus a
21
+ * shadow "would-have-capped"). Live, its worst action is a bounded, capped,
22
+ * lease-gated, quota-gated, pressure-gated respawn of a run that genuinely
23
+ * should be alive (a false respawn wastes a few tokens; a missed one is the
24
+ * silent death above). It never blocks, delays, or rewrites anything. Ships dark
25
+ * on the fleet (dev-agent gate), dryRun-first on dev.
26
+ *
27
+ * THE RUN-STATE FILE IS UNTRUSTED. It is read ONLY for the binary
28
+ * "active + remaining" decision, the topicId, and the generation key
29
+ * (started_at). cwd / resumeUuid / spawn target are NEVER sourced from it — they
30
+ * come from authoritative registries (see §Action in the spec).
31
+ *
32
+ * Spec: docs/specs/autonomous-liveness-reconciler.md
33
+ */
34
+ /** Per-topic reconcile-condition (explicit observed state, not reconstructed from logs). */
35
+ export type ReconcileCondition = 'healthy' | 'orphaned-observing' | 'debouncing' | 'respawned' | 'capped' | 'blocked-quota' | 'blocked-pressure' | 'blocked-not-owner' | 'blocked-queue-owns' | 'mid-move';
36
+ export interface ReconcilerActiveRun {
37
+ topicId: number;
38
+ remainingSeconds: number;
39
+ /** state-file `paused` flag */
40
+ paused: boolean;
41
+ /** mid-machine-move markers (a moving run is owned by neither machine) */
42
+ movedTo: string | null;
43
+ moveSuspended: boolean;
44
+ /**
45
+ * Generation key: the run's `started_at` epoch-ms (criterion 1). A candidate
46
+ * is only valid if no NEWER autonomous-run registration exists than this. Null
47
+ * when the file has no parseable started_at → fails toward NOT-a-candidate.
48
+ */
49
+ startedAtMs: number | null;
50
+ }
51
+ /** In-flight-spawn status for a topic (criterion 7). */
52
+ export type InflightSpawnStatus = {
53
+ state: 'none';
54
+ } | {
55
+ state: 'claimed';
56
+ sinceMs: number;
57
+ } | {
58
+ state: 'spawning';
59
+ sinceMs: number;
60
+ } | {
61
+ state: 'live-grace';
62
+ sinceMs: number;
63
+ };
64
+ export interface AutonomousLivenessReconcilerDeps {
65
+ now: () => number;
66
+ /**
67
+ * The active autonomous runs as the run-state files report them (already
68
+ * filtered to remaining > 0). Reuses activeAutonomousJobs +
69
+ * autonomousRunRemainingForTopic at the wiring layer.
70
+ */
71
+ listActiveRuns: () => ReconcilerActiveRun[];
72
+ /**
73
+ * Build the reconciler's OWN once-per-tick session→topic snapshot: the set of
74
+ * topic ids that currently have a live session. Called ONCE per tick (NOT the
75
+ * drainer's per-invocation liveSessionForTopic fan-out). Criterion 6 probes
76
+ * the returned set.
77
+ */
78
+ liveTopicSnapshot: () => Set<number>;
79
+ /** Is the resume queue globally paused (e.g. emergency stop)? */
80
+ queuePaused: () => boolean;
81
+ /** Is this topic already queued / in-flight in the resume queue? (criterion 7, queue arm) */
82
+ topicInResumeQueue: (topicId: number) => boolean;
83
+ /**
84
+ * Did the operator stop this topic since `sinceIso`? Reads ALL THREE arms
85
+ * (per-topic record, globalOperatorStopAt, the emergency-stop file mtime),
86
+ * bounded to the CURRENT run's start (NOT epoch-0). The SAME closure the
87
+ * drainer uses (shared-closure drift prevention).
88
+ */
89
+ operatorStoppedSince: (topicId: number, sinceIso: string) => boolean;
90
+ /** Multi-machine: does ANOTHER machine own this topic? (only the owner reconciles) */
91
+ topicOwnerElsewhere: (topicId: number) => boolean;
92
+ /**
93
+ * Does THIS machine hold the lease? DEFAULTS TO HELD (true) when syncStatus is
94
+ * null/single-machine — otherwise a single-machine dev agent self-blocks and
95
+ * the feature is inert exactly where it should act (spec criterion 5).
96
+ */
97
+ holdsLease: () => boolean;
98
+ /**
99
+ * Generation guard (criterion 1): the CURRENT registered started_at (epoch-ms)
100
+ * for this topic, or null if none. A candidate is obsolete (NOT current
101
+ * generation) if this is NEWER than the run's own startedAtMs.
102
+ */
103
+ currentGenerationMs: (topicId: number) => number | null;
104
+ /** Quota/budget headroom for a respawn right now (canSpawnSession().allowed). */
105
+ quotaOk: () => boolean;
106
+ /** Session-count cap headroom (the SAME cap the drainer respects). */
107
+ sessionCountOk: () => boolean;
108
+ /** Is a migration in flight (never spawn-storm past it)? */
109
+ migrationInFlight: () => boolean;
110
+ /** The reaper's live pressure tier (hoisted once per tick). */
111
+ pressureTier: () => 'normal' | 'moderate' | 'critical';
112
+ /** In-flight-spawn status for a topic (criterion 7 + atomic-claim coordination). */
113
+ inflightSpawnStatus: (topicId: number) => InflightSpawnStatus;
114
+ /**
115
+ * Resolve the resume UUID from the CANONICAL resume map (NOT the state file).
116
+ * Null when absent → raise attention (no silent fresh-conversation spawn)
117
+ * unless allowFreshFallback is true.
118
+ */
119
+ resolveResumeUuid: (topicId: number) => string | null;
120
+ /**
121
+ * Resolve the authoritative cwd from the topic-binding registry, realpath-
122
+ * resolved + validated inside the agent home. Returns null when it cannot be
123
+ * resolved to a SAFE path (missing binding, or a realpath escaping the agent
124
+ * home) → refuse the respawn (loud attention).
125
+ */
126
+ resolveCwd: (topicId: number) => string | null;
127
+ /**
128
+ * Is the topic↔session binding UNAMBIGUOUS (criterion 8)? false → routes to
129
+ * attention as "needs attention", NEVER an auto-respawn.
130
+ */
131
+ bindingUnambiguous: (topicId: number) => boolean;
132
+ /**
133
+ * Respawn the run (conversation-preserving) — the SAME primitive the resume
134
+ * drainer uses (spawnSessionForTopic). Receives the AUTHORITATIVE resolved
135
+ * inputs; tags the new session midWork so a later reaper kill is revived.
136
+ */
137
+ respawn: (input: {
138
+ topicId: number;
139
+ resumeUuid: string | null;
140
+ cwd: string;
141
+ }) => Promise<void>;
142
+ /**
143
+ * Atomic CAS claim of the in-flight-spawn key for a topic (process-local
144
+ * in-memory map). Returns true if THIS caller now owns the claim, false if
145
+ * someone else holds it. Released via releaseClaim.
146
+ */
147
+ claimInflight: (topicId: number) => boolean;
148
+ releaseClaim: (topicId: number) => void;
149
+ /**
150
+ * Post-spawn settle-kill: terminally abort the just-spawned session (clears
151
+ * its midWork tag first so the ResumeQueue does NOT revive an operator-stopped
152
+ * topic). Only called when a stop arrived during the async spawn or a
153
+ * duplicate live session appeared. NEVER routes through the revival path.
154
+ */
155
+ settleKill: (topicId: number) => Promise<void>;
156
+ /** Post one honest self-heal line to the topic. */
157
+ notifyTopic: (topicId: number, text: string) => Promise<void>;
158
+ /** Raise ONE coalesced attention item (the loop-brake "give up loudly" surface). */
159
+ raiseAggregated: (kind: string, detail: string) => void;
160
+ /** Append one audit entry (logs/autonomous-liveness.jsonl). */
161
+ audit: (entry: Record<string, unknown>) => void;
162
+ /**
163
+ * The ResumeQueue's resurrection count for the topic (the queue's own cap),
164
+ * counted toward the reconciler's redie cap so the two paths share ONE
165
+ * effective give-up bound. Optional — 0 when unavailable.
166
+ */
167
+ queueResurrectionCount?: (topicId: number) => number;
168
+ /** Optional durable cap-state load/save so the respawn cap survives a restart. */
169
+ loadCapState?: () => DurableCapState | null;
170
+ saveCapState?: (state: DurableCapState) => void;
171
+ }
172
+ /** Durable cap-state on disk: separate redie + spawn-failure counters per topic. */
173
+ export interface DurableCapState {
174
+ /** topic → redie respawn timestamps (ms) within the rolling window. */
175
+ redie: Record<string, number[]>;
176
+ /** topic → spawn-failure timestamps (ms) within the rolling window. */
177
+ spawnFailure: Record<string, number[]>;
178
+ }
179
+ export interface AutonomousLivenessReconcilerConfig {
180
+ enabled?: boolean;
181
+ dryRun?: boolean;
182
+ tickIntervalSec?: number;
183
+ debounceTicks?: number;
184
+ debounceWindowSec?: number;
185
+ respawnTimeoutMs?: number;
186
+ respawnCapPerWindow?: number;
187
+ respawnCapWindowSec?: number;
188
+ spawnFailureRetryCeiling?: number;
189
+ maxPressureBlockedTicks?: number;
190
+ maxPressureBlockedSec?: number;
191
+ allowFreshFallback?: boolean;
192
+ inflightSpawnTtlMs?: number;
193
+ notifyUser?: boolean;
194
+ }
195
+ export declare class AutonomousLivenessReconciler {
196
+ private readonly deps;
197
+ private readonly cfg;
198
+ private timer;
199
+ /** Per-topic debounce observation state. */
200
+ private readonly observed;
201
+ /** Per-topic explicit condition record. */
202
+ private readonly conditions;
203
+ /** Redie counter: respawn-that-restarted-then-redied timestamps (ms). */
204
+ private redie;
205
+ /** Spawn-failure counter: respawn-that-threw-before-any-session timestamps (ms). */
206
+ private spawnFailure;
207
+ /** Topics that have hit the redie cap and been surfaced (so we don't re-raise every tick). */
208
+ private readonly cappedSurfaced;
209
+ /** Per-topic dedupe guards for the other raise-to-attention paths (P17). */
210
+ private readonly spawnFailSurfaced;
211
+ private readonly ambiguousSurfaced;
212
+ private readonly missingUuidSurfaced;
213
+ private readonly pressureSurfaced;
214
+ private lastTickAt;
215
+ private respawnTotal;
216
+ /** Effective inflight TTL (cfg.inflightSpawnTtlMs ?? respawnTimeoutMs + grace). */
217
+ private readonly inflightTtlMs;
218
+ constructor(deps: AutonomousLivenessReconcilerDeps, config?: AutonomousLivenessReconcilerConfig);
219
+ start(): void;
220
+ stop(): void;
221
+ /**
222
+ * One reconcile pass. All I/O goes through deps. Idempotent — a run already
223
+ * live / queued / not-owned / paused is a no-op. At most ONE respawn per tick.
224
+ */
225
+ tick(): Promise<void>;
226
+ /**
227
+ * Reconcile one candidate. Returns true if an actuation (respawn / would-respawn)
228
+ * happened this tick (counts toward the one-per-tick budget).
229
+ */
230
+ private actOn;
231
+ private isCurrentGeneration;
232
+ private inflightActive;
233
+ private freshWindow;
234
+ private withinRedieCap;
235
+ private recordRedie;
236
+ private recordSpawnFailure;
237
+ private persistCap;
238
+ private setCondition;
239
+ private clearPressureBlock;
240
+ private gc;
241
+ private withTimeout;
242
+ private scrub;
243
+ private safeBool;
244
+ private safe;
245
+ guardStatus(): {
246
+ enabled: boolean;
247
+ dryRun: boolean;
248
+ reason?: string;
249
+ };
250
+ status(): {
251
+ enabled: boolean;
252
+ dryRun: boolean;
253
+ tickIntervalSec: number;
254
+ lastTickAt: string | null;
255
+ respawnTotal: number;
256
+ capPerWindow: number;
257
+ capWindowSec: number;
258
+ observing: {
259
+ topicId: number;
260
+ count: number;
261
+ firstSeenAt: string;
262
+ }[];
263
+ conditions: {
264
+ topicId: number;
265
+ state: ReconcileCondition;
266
+ lastTransitionAt: string;
267
+ }[];
268
+ redie: {
269
+ topicId: number;
270
+ count: number;
271
+ }[];
272
+ spawnFailure: {
273
+ topicId: number;
274
+ count: number;
275
+ }[];
276
+ };
277
+ }
278
+ //# sourceMappingURL=AutonomousLivenessReconciler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AutonomousLivenessReconciler.d.ts","sourceRoot":"","sources":["../../src/monitoring/AutonomousLivenessReconciler.ts"],"names":[],"mappings":"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"}