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.
- package/dist/commands/server.d.ts.map +1 -1
- package/dist/commands/server.js +333 -32
- package/dist/commands/server.js.map +1 -1
- package/dist/config/ConfigDefaults.d.ts.map +1 -1
- package/dist/config/ConfigDefaults.js +38 -0
- package/dist/config/ConfigDefaults.js.map +1 -1
- package/dist/coordination/CrossMachineMandate.d.ts +53 -0
- package/dist/coordination/CrossMachineMandate.d.ts.map +1 -0
- package/dist/coordination/CrossMachineMandate.js +76 -0
- package/dist/coordination/CrossMachineMandate.js.map +1 -0
- package/dist/core/AccountCredentialShare.d.ts +115 -0
- package/dist/core/AccountCredentialShare.d.ts.map +1 -0
- package/dist/core/AccountCredentialShare.js +113 -0
- package/dist/core/AccountCredentialShare.js.map +1 -0
- package/dist/core/AccountFollowMeGrants.d.ts +92 -0
- package/dist/core/AccountFollowMeGrants.d.ts.map +1 -0
- package/dist/core/AccountFollowMeGrants.js +106 -0
- package/dist/core/AccountFollowMeGrants.js.map +1 -0
- package/dist/core/CoherenceJournal.d.ts +1 -1
- package/dist/core/CoherenceJournal.d.ts.map +1 -1
- package/dist/core/CoherenceJournal.js +12 -2
- package/dist/core/CoherenceJournal.js.map +1 -1
- package/dist/core/PairingEpochManager.d.ts +68 -0
- package/dist/core/PairingEpochManager.d.ts.map +1 -0
- package/dist/core/PairingEpochManager.js +88 -0
- package/dist/core/PairingEpochManager.js.map +1 -0
- package/dist/core/PostUpdateMigrator.d.ts.map +1 -1
- package/dist/core/PostUpdateMigrator.js +38 -0
- package/dist/core/PostUpdateMigrator.js.map +1 -1
- package/dist/core/SecretStore.d.ts +44 -0
- package/dist/core/SecretStore.d.ts.map +1 -1
- package/dist/core/SecretStore.js +126 -0
- package/dist/core/SecretStore.js.map +1 -1
- package/dist/core/SecretSync.d.ts.map +1 -1
- package/dist/core/SecretSync.js +6 -0
- package/dist/core/SecretSync.js.map +1 -1
- package/dist/core/SubscriptionAccountMetaReplicatedStore.d.ts +106 -0
- package/dist/core/SubscriptionAccountMetaReplicatedStore.d.ts.map +1 -0
- package/dist/core/SubscriptionAccountMetaReplicatedStore.js +263 -0
- package/dist/core/SubscriptionAccountMetaReplicatedStore.js.map +1 -0
- package/dist/core/SubscriptionPool.d.ts +23 -5
- package/dist/core/SubscriptionPool.d.ts.map +1 -1
- package/dist/core/SubscriptionPool.js +30 -6
- package/dist/core/SubscriptionPool.js.map +1 -1
- package/dist/core/devGatedFeatures.d.ts.map +1 -1
- package/dist/core/devGatedFeatures.js +12 -0
- package/dist/core/devGatedFeatures.js.map +1 -1
- package/dist/core/types.d.ts +37 -0
- package/dist/core/types.d.ts.map +1 -1
- package/dist/core/types.js.map +1 -1
- package/dist/monitoring/AutonomousLivenessReconciler.d.ts +278 -0
- package/dist/monitoring/AutonomousLivenessReconciler.d.ts.map +1 -0
- package/dist/monitoring/AutonomousLivenessReconciler.js +660 -0
- package/dist/monitoring/AutonomousLivenessReconciler.js.map +1 -0
- package/dist/monitoring/ResumeQueue.d.ts +10 -0
- package/dist/monitoring/ResumeQueue.d.ts.map +1 -1
- package/dist/monitoring/ResumeQueue.js +12 -0
- package/dist/monitoring/ResumeQueue.js.map +1 -1
- package/dist/scaffold/templates.d.ts.map +1 -1
- package/dist/scaffold/templates.js +7 -0
- package/dist/scaffold/templates.js.map +1 -1
- package/dist/server/AgentServer.d.ts +1 -0
- package/dist/server/AgentServer.d.ts.map +1 -1
- package/dist/server/AgentServer.js +6 -0
- package/dist/server/AgentServer.js.map +1 -1
- package/dist/server/routes.d.ts +4 -0
- package/dist/server/routes.d.ts.map +1 -1
- package/dist/server/routes.js +10 -0
- package/dist/server/routes.js.map +1 -1
- package/package.json +1 -1
- package/src/data/builtin-manifest.json +64 -64
- package/src/scaffold/templates.ts +7 -0
- package/upgrades/1.3.607.md +25 -0
- package/upgrades/1.3.608.md +29 -0
- package/upgrades/side-effects/autonomous-liveness-reconciler.md +39 -0
- 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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"}
|