instar 1.3.605 → 1.3.607
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 +140 -1
- package/dist/commands/server.js.map +1 -1
- package/dist/config/ConfigDefaults.d.ts.map +1 -1
- package/dist/config/ConfigDefaults.js +29 -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/AutonomousSessions.d.ts +24 -0
- package/dist/core/AutonomousSessions.d.ts.map +1 -1
- package/dist/core/AutonomousSessions.js +22 -0
- package/dist/core/AutonomousSessions.js.map +1 -1
- 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 +13 -0
- package/dist/core/PostUpdateMigrator.d.ts.map +1 -1
- package/dist/core/PostUpdateMigrator.js +105 -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 +29 -0
- package/dist/core/types.d.ts.map +1 -1
- package/dist/core/types.js.map +1 -1
- package/dist/monitoring/AutonomousProgressHeartbeat.d.ts +169 -0
- package/dist/monitoring/AutonomousProgressHeartbeat.d.ts.map +1 -0
- package/dist/monitoring/AutonomousProgressHeartbeat.js +296 -0
- package/dist/monitoring/AutonomousProgressHeartbeat.js.map +1 -0
- package/dist/monitoring/ProxyCoordinator.d.ts +1 -1
- package/dist/monitoring/ProxyCoordinator.d.ts.map +1 -1
- package/dist/monitoring/autonomousHeartbeatScrub.d.ts +44 -0
- package/dist/monitoring/autonomousHeartbeatScrub.d.ts.map +1 -0
- package/dist/monitoring/autonomousHeartbeatScrub.js +81 -0
- package/dist/monitoring/autonomousHeartbeatScrub.js.map +1 -0
- package/dist/monitoring/sentinelWiring.d.ts +14 -0
- package/dist/monitoring/sentinelWiring.d.ts.map +1 -1
- package/dist/monitoring/sentinelWiring.js +19 -0
- package/dist/monitoring/sentinelWiring.js.map +1 -1
- package/dist/scaffold/templates.d.ts.map +1 -1
- package/dist/scaffold/templates.js +10 -0
- package/dist/scaffold/templates.js.map +1 -1
- package/dist/server/CapabilityIndex.d.ts.map +1 -1
- package/dist/server/CapabilityIndex.js +9 -0
- package/dist/server/CapabilityIndex.js.map +1 -1
- package/dist/server/routes.d.ts.map +1 -1
- package/dist/server/routes.js +15 -0
- package/dist/server/routes.js.map +1 -1
- package/package.json +1 -1
- package/src/data/builtin-manifest.json +63 -63
- package/src/scaffold/templates.ts +10 -0
- package/upgrades/1.3.606.md +28 -0
- package/upgrades/1.3.607.md +25 -0
- package/upgrades/side-effects/autonomous-progress-heartbeat-ratchet-fix.md +36 -0
- package/upgrades/side-effects/autonomous-progress-heartbeat.md +40 -0
- package/upgrades/side-effects/ws52-account-follow-me-pr1.md +74 -0
|
@@ -0,0 +1,296 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AutonomousProgressHeartbeat — a hedged, change-gated, sparse liveness BACKSTOP
|
|
3
|
+
* for an autonomous run that has gone silent on the user for a long stretch
|
|
4
|
+
* while its terminal output is STILL changing.
|
|
5
|
+
*
|
|
6
|
+
* Spec: docs/specs/autonomous-progress-heartbeat.md (ELI16: .eli16.md).
|
|
7
|
+
*
|
|
8
|
+
* The incident this closes (2026-06-16, topic 12476): during a 24h autonomous
|
|
9
|
+
* run the agent finished a milestone, said "PR is armed", then went heads-down
|
|
10
|
+
* for ~an hour fixing CI — real work the whole time, but emitted ZERO
|
|
11
|
+
* user-facing message. An hour of silence is indistinguishable from a stall.
|
|
12
|
+
*
|
|
13
|
+
* This is NOT the suppressed PromiseBeacon §B1 "still on it, no new output"
|
|
14
|
+
* filler (HONEST-PROGRESS-MESSAGING removed that). It is a structurally higher
|
|
15
|
+
* bar: it fires ONLY on a LONG user-silence gate (≥25m) AND a corroborated
|
|
16
|
+
* recent output change (read from ActiveWorkSilenceSentinel's already-computed
|
|
17
|
+
* `lastOutputAt` snapshot — predicate #8 captures NOTHING of its own), with
|
|
18
|
+
* purely-observational wording, a per-topic cooldown, a widening per-run backoff
|
|
19
|
+
* + hard cap, and the shared one-voice ProxyCoordinator lease.
|
|
20
|
+
*
|
|
21
|
+
* Signal-only: it emits a liveness message and never gates, blocks, delays, or
|
|
22
|
+
* rewrites anything. Every predicate fails CLOSED (no emit) on any uncertainty.
|
|
23
|
+
*/
|
|
24
|
+
import { EventEmitter } from 'node:events';
|
|
25
|
+
import { scrubFocus } from './autonomousHeartbeatScrub.js';
|
|
26
|
+
const DEFAULTS = {
|
|
27
|
+
silenceThresholdMinutes: 25,
|
|
28
|
+
silenceThresholdFloorMinutes: 5,
|
|
29
|
+
tickIntervalMs: 60_000,
|
|
30
|
+
tickIntervalFloorMs: 30_000,
|
|
31
|
+
maxHeartbeatsPerRun: 6,
|
|
32
|
+
recentOutputChangeWindowMs: 5 * 60_000,
|
|
33
|
+
};
|
|
34
|
+
/** Widening per-run backoff (minutes). Floor = silenceThresholdMinutes; the
|
|
35
|
+
* ladder widens 25→40→60→90 (then holds at the last value, capped by the
|
|
36
|
+
* per-run budget). */
|
|
37
|
+
const BACKOFF_LADDER_MINUTES = [25, 40, 60, 90];
|
|
38
|
+
export class AutonomousProgressHeartbeat extends EventEmitter {
|
|
39
|
+
deps;
|
|
40
|
+
cfg;
|
|
41
|
+
runState = new Map();
|
|
42
|
+
lastEmits = [];
|
|
43
|
+
static LAST_EMITS_CAP = 50;
|
|
44
|
+
tickHandle = null;
|
|
45
|
+
ticking = false;
|
|
46
|
+
lastTickAt = 0;
|
|
47
|
+
topicsConsidered = 0;
|
|
48
|
+
constructor(deps, raw = {}) {
|
|
49
|
+
super();
|
|
50
|
+
this.deps = deps;
|
|
51
|
+
const silenceMin = Math.max(DEFAULTS.silenceThresholdFloorMinutes, raw.silenceThresholdMinutes ?? DEFAULTS.silenceThresholdMinutes);
|
|
52
|
+
const tickMs = Math.max(DEFAULTS.tickIntervalFloorMs, raw.tickIntervalMs ?? DEFAULTS.tickIntervalMs);
|
|
53
|
+
this.cfg = {
|
|
54
|
+
enabled: raw.enabled === true,
|
|
55
|
+
// default true: dryRun unless explicitly false (the graduated-rollout ladder).
|
|
56
|
+
dryRun: raw.dryRun !== false,
|
|
57
|
+
silenceThresholdMs: silenceMin * 60_000,
|
|
58
|
+
tickIntervalMs: tickMs,
|
|
59
|
+
maxHeartbeatsPerRun: raw.maxHeartbeatsPerRun ?? DEFAULTS.maxHeartbeatsPerRun,
|
|
60
|
+
recentOutputChangeWindowMs: raw.recentOutputChangeWindowMs ?? DEFAULTS.recentOutputChangeWindowMs,
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
start() {
|
|
64
|
+
if (!this.cfg.enabled || this.tickHandle)
|
|
65
|
+
return;
|
|
66
|
+
this.tickHandle = setInterval(() => {
|
|
67
|
+
this.tick().catch((err) => {
|
|
68
|
+
// Observability never endangers the observed; never throw out of the tick.
|
|
69
|
+
this.emit('tick-error', err);
|
|
70
|
+
});
|
|
71
|
+
}, this.cfg.tickIntervalMs);
|
|
72
|
+
if (typeof this.tickHandle.unref === 'function')
|
|
73
|
+
this.tickHandle.unref();
|
|
74
|
+
}
|
|
75
|
+
stop() {
|
|
76
|
+
if (this.tickHandle) {
|
|
77
|
+
clearInterval(this.tickHandle);
|
|
78
|
+
this.tickHandle = null;
|
|
79
|
+
}
|
|
80
|
+
this.runState.clear();
|
|
81
|
+
}
|
|
82
|
+
/** Read-only status for GET /autonomous-heartbeat. */
|
|
83
|
+
status() {
|
|
84
|
+
return {
|
|
85
|
+
enabled: this.cfg.enabled,
|
|
86
|
+
dryRun: this.cfg.dryRun,
|
|
87
|
+
silenceThresholdMinutes: Math.round(this.cfg.silenceThresholdMs / 60_000),
|
|
88
|
+
lastTickAt: this.lastTickAt,
|
|
89
|
+
topicsConsidered: this.topicsConsidered,
|
|
90
|
+
lastEmits: [...this.lastEmits],
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
/** Guard-posture surface (GET /guards). Cheap property read — no I/O. */
|
|
94
|
+
guardStatus() {
|
|
95
|
+
return { enabled: this.cfg.enabled, lastTickAt: this.lastTickAt };
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* One tick. Re-entrancy-guarded (the emit step is awaited and a send can
|
|
99
|
+
* block). Evaluates the per-topic predicate cheap-first; the ProxyCoordinator
|
|
100
|
+
* lease is acquired/released in a try/finally within THIS tick.
|
|
101
|
+
*
|
|
102
|
+
* Public for tests.
|
|
103
|
+
*/
|
|
104
|
+
async tick() {
|
|
105
|
+
if (this.ticking)
|
|
106
|
+
return;
|
|
107
|
+
this.ticking = true;
|
|
108
|
+
this.lastTickAt = (this.deps.now ?? Date.now)();
|
|
109
|
+
try {
|
|
110
|
+
const now = (this.deps.now ?? Date.now)();
|
|
111
|
+
const runs = this.deps.listActiveAutonomousRuns();
|
|
112
|
+
this.topicsConsidered = runs.length;
|
|
113
|
+
// Prune run-state for topics no longer active so the map can't leak.
|
|
114
|
+
const activeTopicIds = new Set(runs.map((r) => r.topicId));
|
|
115
|
+
for (const t of [...this.runState.keys()]) {
|
|
116
|
+
if (!activeTopicIds.has(t))
|
|
117
|
+
this.runState.delete(t);
|
|
118
|
+
}
|
|
119
|
+
for (const run of runs) {
|
|
120
|
+
await this.evaluateTopic(run, now);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
finally {
|
|
124
|
+
this.ticking = false;
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* The per-topic predicate, evaluated strictly cheapest-first, short-circuiting
|
|
129
|
+
* on the first failure. Predicate #1 (run active) is implied by `run` being in
|
|
130
|
+
* the active set. Every predicate is an in-memory read.
|
|
131
|
+
*/
|
|
132
|
+
async evaluateTopic(run, now) {
|
|
133
|
+
const topicId = run.topicId;
|
|
134
|
+
// #2 Not mid-handoff + #3 destination warmup elapsed (markers fail closed).
|
|
135
|
+
const markers = this.deps.getRunMarkers(topicId);
|
|
136
|
+
if (!markers) {
|
|
137
|
+
this.recordSuppressed(topicId, now, 'run-markers-unreadable');
|
|
138
|
+
return;
|
|
139
|
+
}
|
|
140
|
+
if (markers.movedTo || markers.moveSuspended) {
|
|
141
|
+
this.recordSuppressed(topicId, now, 'mid-move-marker');
|
|
142
|
+
return;
|
|
143
|
+
}
|
|
144
|
+
// #3 warmup: the run must have been active on THIS machine ≥ one full window.
|
|
145
|
+
if (markers.startedAtMs == null || now - markers.startedAtMs < this.cfg.silenceThresholdMs) {
|
|
146
|
+
this.recordSuppressed(topicId, now, 'warmup-not-elapsed');
|
|
147
|
+
return;
|
|
148
|
+
}
|
|
149
|
+
// #4 Session alive.
|
|
150
|
+
if (!run.sessionName || !this.deps.isSessionAlive(run.sessionName)) {
|
|
151
|
+
this.recordSuppressed(topicId, now, 'session-not-alive');
|
|
152
|
+
return;
|
|
153
|
+
}
|
|
154
|
+
// #5 Silent-to-user ≥ threshold (minutes since most-recent fromUser===false).
|
|
155
|
+
const lastOutboundAt = this.mostRecentOutboundAt(topicId);
|
|
156
|
+
if (lastOutboundAt != null && now - lastOutboundAt < this.cfg.silenceThresholdMs) {
|
|
157
|
+
this.recordSuppressed(topicId, now, 'spoke-recently');
|
|
158
|
+
return;
|
|
159
|
+
}
|
|
160
|
+
const silenceAnchor = lastOutboundAt ?? markers.startedAtMs;
|
|
161
|
+
const minutesSilent = Math.max(1, Math.round((now - silenceAnchor) / 60_000));
|
|
162
|
+
// #6 Per-topic emit-cooldown elapsed (LOCAL map). A new run resets state.
|
|
163
|
+
const state = this.ensureRunState(topicId, markers.startedAtMs);
|
|
164
|
+
const cooldownMs = this.currentBackoffMs(state.count);
|
|
165
|
+
if (state.lastHeartbeatAt > 0 && now - state.lastHeartbeatAt < cooldownMs) {
|
|
166
|
+
this.recordSuppressed(topicId, now, 'cooldown-not-elapsed');
|
|
167
|
+
return;
|
|
168
|
+
}
|
|
169
|
+
// #7 Per-run heartbeat budget not exhausted.
|
|
170
|
+
if (state.count >= this.cfg.maxHeartbeatsPerRun) {
|
|
171
|
+
this.recordSuppressed(topicId, now, 'budget-exhausted');
|
|
172
|
+
return;
|
|
173
|
+
}
|
|
174
|
+
// #8 Recent output change — from the SHARED snapshot (no own capture).
|
|
175
|
+
const lastOutputAt = this.deps.getSharedLastOutputAt(run.sessionName);
|
|
176
|
+
if (lastOutputAt == null || lastOutputAt <= 0) {
|
|
177
|
+
// Snapshot unavailable / lastOutputAt absent → fail CLOSED, never capture.
|
|
178
|
+
this.recordSuppressed(topicId, now, 'shared-snapshot-unavailable');
|
|
179
|
+
return;
|
|
180
|
+
}
|
|
181
|
+
if (now - lastOutputAt > this.cfg.recentOutputChangeWindowMs) {
|
|
182
|
+
// Output has NOT advanced recently (e.g. frozen spinner) → suppress.
|
|
183
|
+
this.recordSuppressed(topicId, now, 'no-recent-output-change');
|
|
184
|
+
return;
|
|
185
|
+
}
|
|
186
|
+
// #9 One-voice free: acquire the shared lease; release UNCONDITIONALLY here.
|
|
187
|
+
if (!this.deps.proxyCoordinator.tryAcquire(topicId, 'autonomous-heartbeat')) {
|
|
188
|
+
this.recordSuppressed(topicId, now, 'lease-held');
|
|
189
|
+
return;
|
|
190
|
+
}
|
|
191
|
+
try {
|
|
192
|
+
const rawFocus = this.deps.getFocusForTopic(topicId);
|
|
193
|
+
const scrub = scrubFocus(rawFocus);
|
|
194
|
+
const text = this.buildMessage(scrub.focus);
|
|
195
|
+
if (this.cfg.dryRun) {
|
|
196
|
+
// dryRun gates on the SAME cooldown/budget as live (it only swaps the
|
|
197
|
+
// final send for a log). Advance state so the next tick doesn't re-log.
|
|
198
|
+
state.lastHeartbeatAt = now;
|
|
199
|
+
state.count += 1;
|
|
200
|
+
this.recordEmit({ topicId, at: now, minutesSilent, focus: scrub.focus, dryRun: true });
|
|
201
|
+
this.emit('would-emit', { topicId, minutesSilent, focus: scrub.focus });
|
|
202
|
+
return;
|
|
203
|
+
}
|
|
204
|
+
try {
|
|
205
|
+
await this.deps.sendMessage(topicId, text, {
|
|
206
|
+
source: 'autonomous-heartbeat',
|
|
207
|
+
isProxy: true,
|
|
208
|
+
tier: 1,
|
|
209
|
+
});
|
|
210
|
+
state.lastHeartbeatAt = now;
|
|
211
|
+
state.count += 1;
|
|
212
|
+
this.recordEmit({ topicId, at: now, minutesSilent, focus: scrub.focus, dryRun: false });
|
|
213
|
+
this.emit('emitted', { topicId, minutesSilent, focus: scrub.focus });
|
|
214
|
+
}
|
|
215
|
+
catch (err) {
|
|
216
|
+
// @silent-fallback-ok: NOT silent — a failed heartbeat send is surfaced via
|
|
217
|
+
// recordSuppressed('send-failed') + the 'send-error' event. We deliberately do
|
|
218
|
+
// NOT advance cooldown/count (a missed heartbeat is the safe status quo; the
|
|
219
|
+
// next tick retries). The lease still releases in finally.
|
|
220
|
+
this.recordSuppressed(topicId, now, 'send-failed');
|
|
221
|
+
this.emit('send-error', { topicId, err });
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
finally {
|
|
225
|
+
this.deps.proxyCoordinator.release(topicId, 'autonomous-heartbeat');
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
/**
|
|
229
|
+
* The purely-observational, untrusted-framed line. NEVER an assertive "still
|
|
230
|
+
* working"/"still going" claim. `focus` is already scrubbed + HTML-escaped;
|
|
231
|
+
* null → the generic fallback.
|
|
232
|
+
*/
|
|
233
|
+
buildMessage(focus) {
|
|
234
|
+
if (focus) {
|
|
235
|
+
return `I haven't posted here in a while — last observed activity was «${focus}». Message me if you need me.`;
|
|
236
|
+
}
|
|
237
|
+
return `I haven't posted here in a while on this autonomous run. Message me if you need me.`;
|
|
238
|
+
}
|
|
239
|
+
// ─── Internals ──────────────────────────────────────────────────────────────
|
|
240
|
+
/** Most-recent outbound (fromUser===false) entry time, or null when none. */
|
|
241
|
+
mostRecentOutboundAt(topicId) {
|
|
242
|
+
let history;
|
|
243
|
+
try {
|
|
244
|
+
history = this.deps.getTopicHistory(topicId) ?? [];
|
|
245
|
+
}
|
|
246
|
+
catch {
|
|
247
|
+
// @silent-fallback-ok: this is fail-CLOSED, not a degraded fallback — when history
|
|
248
|
+
// can't be read we treat the topic as "spoke just now" (MAX_SAFE_INTEGER sentinel)
|
|
249
|
+
// so the silence gate CANNOT fire on missing evidence. Suppressing a heartbeat on
|
|
250
|
+
// an unreadable read is the safe direction; reporting degradation here would be
|
|
251
|
+
// noise on the common transient-read case.
|
|
252
|
+
return Number.MAX_SAFE_INTEGER;
|
|
253
|
+
}
|
|
254
|
+
let latest = null;
|
|
255
|
+
for (const e of history) {
|
|
256
|
+
if (e.fromUser === false && typeof e.at === 'number') {
|
|
257
|
+
if (latest === null || e.at > latest)
|
|
258
|
+
latest = e.at;
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
return latest;
|
|
262
|
+
}
|
|
263
|
+
ensureRunState(topicId, runStartedAtMs) {
|
|
264
|
+
const existing = this.runState.get(topicId);
|
|
265
|
+
if (existing && existing.runStartedAtMs === runStartedAtMs)
|
|
266
|
+
return existing;
|
|
267
|
+
// New run (or first sighting) → fresh throttle state.
|
|
268
|
+
const fresh = { runStartedAtMs, lastHeartbeatAt: 0, count: 0 };
|
|
269
|
+
this.runState.set(topicId, fresh);
|
|
270
|
+
return fresh;
|
|
271
|
+
}
|
|
272
|
+
/**
|
|
273
|
+
* The cooldown (ms) that must elapse before the NEXT heartbeat, given how many
|
|
274
|
+
* have already fired on this run (`count`). The gap WIDENS with each heartbeat:
|
|
275
|
+
* the 1st→2nd gap is ladder[0] (25m), the 2nd→3rd gap is ladder[1] (40m), …
|
|
276
|
+
* (then holds at the last ladder value). So the index is `count-1` (the number
|
|
277
|
+
* of gaps already opened). Floored at silenceThresholdMinutes — the ladder
|
|
278
|
+
* never goes below the user-silence gate.
|
|
279
|
+
*/
|
|
280
|
+
currentBackoffMs(count) {
|
|
281
|
+
const gapIdx = Math.min(Math.max(count - 1, 0), BACKOFF_LADDER_MINUTES.length - 1);
|
|
282
|
+
const ladderMin = BACKOFF_LADDER_MINUTES[gapIdx];
|
|
283
|
+
const floorMin = this.cfg.silenceThresholdMs / 60_000;
|
|
284
|
+
return Math.max(ladderMin, floorMin) * 60_000;
|
|
285
|
+
}
|
|
286
|
+
recordEmit(e) {
|
|
287
|
+
this.lastEmits.push(e);
|
|
288
|
+
if (this.lastEmits.length > AutonomousProgressHeartbeat.LAST_EMITS_CAP) {
|
|
289
|
+
this.lastEmits.splice(0, this.lastEmits.length - AutonomousProgressHeartbeat.LAST_EMITS_CAP);
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
recordSuppressed(topicId, at, reason) {
|
|
293
|
+
this.emit('suppressed', { topicId, reason });
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
//# sourceMappingURL=AutonomousProgressHeartbeat.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AutonomousProgressHeartbeat.js","sourceRoot":"","sources":["../../src/monitoring/AutonomousProgressHeartbeat.ts"],"names":[],"mappings":"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"}
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
* In-memory only (spec §"ProxyCoordinator liveness" — P16). Dies with the
|
|
12
12
|
* process. No persistence, no distributed lock.
|
|
13
13
|
*/
|
|
14
|
-
export type ProxyHolder = 'presence-proxy' | 'promise-beacon';
|
|
14
|
+
export type ProxyHolder = 'presence-proxy' | 'promise-beacon' | 'autonomous-heartbeat';
|
|
15
15
|
export declare class ProxyCoordinator {
|
|
16
16
|
private held;
|
|
17
17
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ProxyCoordinator.d.ts","sourceRoot":"","sources":["../../src/monitoring/ProxyCoordinator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,MAAM,MAAM,WAAW,GAAG,gBAAgB,GAAG,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"ProxyCoordinator.d.ts","sourceRoot":"","sources":["../../src/monitoring/ProxyCoordinator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,MAAM,MAAM,WAAW,GAAG,gBAAgB,GAAG,gBAAgB,GAAG,sBAAsB,CAAC;AAEvF,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,IAAI,CAAuE;IACnF;;;;;;;;;;OAUG;IACH,OAAO,CAAC,oBAAoB,CAAkC;IAE9D,+CAA+C;IAC/C,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO;IASzD,iDAAiD;IACjD,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,IAAI;IAOnD,mCAAmC;IACnC,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI;IAIlD,mBAAmB;IACnB,OAAO,IAAI,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,WAAW,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IASzE;;;;;OAKG;IACH,oBAAoB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,GAAE,MAAmB,GAAG,IAAI;IAItE;;;;;;;OAOG;IACH,uBAAuB,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,GAAE,MAAmB,GAAG,OAAO;IAMhF;;;OAGG;IACH,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;CAG3C"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* autonomousHeartbeatScrub — the deterministic boundary scrub for the
|
|
3
|
+
* AutonomousProgressHeartbeat's interpolated `focus`.
|
|
4
|
+
*
|
|
5
|
+
* Per docs/specs/autonomous-progress-heartbeat.md §Content, `focus` is
|
|
6
|
+
* LLM-derived from conversation/feedback content and therefore
|
|
7
|
+
* attacker-influenceable. Before it is used in the message AND before it is
|
|
8
|
+
* stored into the status route's `lastEmits`, it MUST pass this deterministic
|
|
9
|
+
* boundary scrub:
|
|
10
|
+
* - run it through the credential/secret/path regex set (reuse of the
|
|
11
|
+
* credential-leak-detector / PolicyEnforcementLayer patterns);
|
|
12
|
+
* - on ANY match, DROP focus entirely (the caller falls back to the generic
|
|
13
|
+
* line) — never emit partially-redacted attacker content;
|
|
14
|
+
* - length-clamp to ≤200 chars;
|
|
15
|
+
* - HTML-escape for the Telegram formatter (the message is sent on the
|
|
16
|
+
* `isProxy` path; focus is interpolated).
|
|
17
|
+
*
|
|
18
|
+
* This is a BOUNDARY SCRUB — a deterministic structural validator, not a new
|
|
19
|
+
* LLM gate — and is therefore signal-vs-authority compliant.
|
|
20
|
+
*/
|
|
21
|
+
/** Max length of the (post-clamp, pre-escape) focus string. */
|
|
22
|
+
export declare const FOCUS_MAX_LENGTH = 200;
|
|
23
|
+
/** True if `text` matches any credential/secret/path pattern → focus must drop. */
|
|
24
|
+
export declare function focusHasScrubMatch(text: string): boolean;
|
|
25
|
+
export interface ScrubResult {
|
|
26
|
+
/** The HTML-escaped, length-clamped focus to interpolate — or null to drop. */
|
|
27
|
+
focus: string | null;
|
|
28
|
+
/** Why focus was dropped (for the status route / observability). */
|
|
29
|
+
dropped: boolean;
|
|
30
|
+
/** The reason a drop happened: 'scrub-match' | 'empty'. Absent when kept. */
|
|
31
|
+
reason?: 'scrub-match' | 'empty';
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Apply the boundary scrub to a raw focus string.
|
|
35
|
+
* - empty/whitespace → dropped (reason 'empty').
|
|
36
|
+
* - any scrub match → dropped (reason 'scrub-match') — never partially redacted.
|
|
37
|
+
* - otherwise → length-clamped to FOCUS_MAX_LENGTH then HTML-escaped.
|
|
38
|
+
*
|
|
39
|
+
* Length-clamp happens BEFORE escape so the 200-char budget is over the visible
|
|
40
|
+
* text, not the escaped expansion. The scrub runs over the RAW text (before
|
|
41
|
+
* clamp) so a secret split across the clamp boundary still trips a pattern.
|
|
42
|
+
*/
|
|
43
|
+
export declare function scrubFocus(raw: string | null | undefined): ScrubResult;
|
|
44
|
+
//# sourceMappingURL=autonomousHeartbeatScrub.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"autonomousHeartbeatScrub.d.ts","sourceRoot":"","sources":["../../src/monitoring/autonomousHeartbeatScrub.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAIH,+DAA+D;AAC/D,eAAO,MAAM,gBAAgB,MAAM,CAAC;AAgCpC,mFAAmF;AACnF,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAGxD;AAED,MAAM,WAAW,WAAW;IAC1B,+EAA+E;IAC/E,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,oEAAoE;IACpE,OAAO,EAAE,OAAO,CAAC;IACjB,6EAA6E;IAC7E,MAAM,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC;CAClC;AAED;;;;;;;;;GASG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,WAAW,CAQtE"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* autonomousHeartbeatScrub — the deterministic boundary scrub for the
|
|
3
|
+
* AutonomousProgressHeartbeat's interpolated `focus`.
|
|
4
|
+
*
|
|
5
|
+
* Per docs/specs/autonomous-progress-heartbeat.md §Content, `focus` is
|
|
6
|
+
* LLM-derived from conversation/feedback content and therefore
|
|
7
|
+
* attacker-influenceable. Before it is used in the message AND before it is
|
|
8
|
+
* stored into the status route's `lastEmits`, it MUST pass this deterministic
|
|
9
|
+
* boundary scrub:
|
|
10
|
+
* - run it through the credential/secret/path regex set (reuse of the
|
|
11
|
+
* credential-leak-detector / PolicyEnforcementLayer patterns);
|
|
12
|
+
* - on ANY match, DROP focus entirely (the caller falls back to the generic
|
|
13
|
+
* line) — never emit partially-redacted attacker content;
|
|
14
|
+
* - length-clamp to ≤200 chars;
|
|
15
|
+
* - HTML-escape for the Telegram formatter (the message is sent on the
|
|
16
|
+
* `isProxy` path; focus is interpolated).
|
|
17
|
+
*
|
|
18
|
+
* This is a BOUNDARY SCRUB — a deterministic structural validator, not a new
|
|
19
|
+
* LLM gate — and is therefore signal-vs-authority compliant.
|
|
20
|
+
*/
|
|
21
|
+
import { escapeHtmlText } from '../messaging/TelegramMarkdownFormatter.js';
|
|
22
|
+
/** Max length of the (post-clamp, pre-escape) focus string. */
|
|
23
|
+
export const FOCUS_MAX_LENGTH = 200;
|
|
24
|
+
/**
|
|
25
|
+
* Credential / secret / path / internal-URL patterns. A reuse of the
|
|
26
|
+
* PolicyEnforcementLayer credential-leak set (kept inline + self-contained so
|
|
27
|
+
* the scrub is a pure, deterministic, unit-testable function with no I/O).
|
|
28
|
+
* On ANY match, focus is dropped.
|
|
29
|
+
*/
|
|
30
|
+
const SCRUB_PATTERNS = [
|
|
31
|
+
// ── Credentials / secrets ──
|
|
32
|
+
/\bsk-ant-[A-Za-z0-9_-]{20,}\b/, // Anthropic API key
|
|
33
|
+
/\bsk-[A-Za-z0-9_-]{20,}\b/, // OpenAI API key
|
|
34
|
+
/\bghp_[A-Za-z0-9]{20,}\b/, // GitHub PAT
|
|
35
|
+
/\bgho_[A-Za-z0-9]{20,}\b/, // GitHub OAuth token
|
|
36
|
+
/\bghu_[A-Za-z0-9]{20,}\b/, // GitHub user-to-server token
|
|
37
|
+
/\bghs_[A-Za-z0-9]{20,}\b/, // GitHub server-to-server token
|
|
38
|
+
/\bghr_[A-Za-z0-9]{20,}\b/, // GitHub refresh token
|
|
39
|
+
/\bxox[baprs]-[A-Za-z0-9-]{8,}\b/, // Slack tokens
|
|
40
|
+
/\bAKIA[0-9A-Z]{12,}\b/, // AWS access key
|
|
41
|
+
/\bsk_(?:live|test)_[A-Za-z0-9]{12,}\b/, // Stripe keys
|
|
42
|
+
/Bearer\s+[A-Za-z0-9_\-.]{20,}/i, // bearer token
|
|
43
|
+
/(?:password|passwd|pwd|secret|api[_-]?key|token)\s*[:=]\s*\S{6,}/i, // generic secret assignment
|
|
44
|
+
/-----BEGIN\s+(?:RSA\s+)?PRIVATE\s+KEY-----/, // PEM private key block
|
|
45
|
+
// ── Sensitive / absolute paths ──
|
|
46
|
+
/\/?\.instar\/[^\s)"']*/, // .instar/ paths
|
|
47
|
+
/\/?\.claude\/[^\s)"']*/, // .claude/ paths
|
|
48
|
+
/\/Users\/[^\s)"']+/, // macOS home paths
|
|
49
|
+
/\/home\/[^\s)"']+/, // linux home paths
|
|
50
|
+
// ── Internal URLs ──
|
|
51
|
+
/\bhttps?:\/\/(?:localhost|127\.0\.0\.1|0\.0\.0\.0)(?::\d+)?[^\s)]*/i,
|
|
52
|
+
];
|
|
53
|
+
/** True if `text` matches any credential/secret/path pattern → focus must drop. */
|
|
54
|
+
export function focusHasScrubMatch(text) {
|
|
55
|
+
if (!text)
|
|
56
|
+
return false;
|
|
57
|
+
return SCRUB_PATTERNS.some((p) => p.test(text));
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Apply the boundary scrub to a raw focus string.
|
|
61
|
+
* - empty/whitespace → dropped (reason 'empty').
|
|
62
|
+
* - any scrub match → dropped (reason 'scrub-match') — never partially redacted.
|
|
63
|
+
* - otherwise → length-clamped to FOCUS_MAX_LENGTH then HTML-escaped.
|
|
64
|
+
*
|
|
65
|
+
* Length-clamp happens BEFORE escape so the 200-char budget is over the visible
|
|
66
|
+
* text, not the escaped expansion. The scrub runs over the RAW text (before
|
|
67
|
+
* clamp) so a secret split across the clamp boundary still trips a pattern.
|
|
68
|
+
*/
|
|
69
|
+
export function scrubFocus(raw) {
|
|
70
|
+
const text = (raw ?? '').replace(/\s+/g, ' ').trim();
|
|
71
|
+
if (!text)
|
|
72
|
+
return { focus: null, dropped: true, reason: 'empty' };
|
|
73
|
+
if (focusHasScrubMatch(text))
|
|
74
|
+
return { focus: null, dropped: true, reason: 'scrub-match' };
|
|
75
|
+
const clamped = text.length > FOCUS_MAX_LENGTH ? text.slice(0, FOCUS_MAX_LENGTH) : text;
|
|
76
|
+
const escaped = escapeHtmlText(clamped);
|
|
77
|
+
if (!escaped)
|
|
78
|
+
return { focus: null, dropped: true, reason: 'empty' };
|
|
79
|
+
return { focus: escaped, dropped: false };
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=autonomousHeartbeatScrub.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"autonomousHeartbeatScrub.js","sourceRoot":"","sources":["../../src/monitoring/autonomousHeartbeatScrub.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,2CAA2C,CAAC;AAE3E,+DAA+D;AAC/D,MAAM,CAAC,MAAM,gBAAgB,GAAG,GAAG,CAAC;AAEpC;;;;;GAKG;AACH,MAAM,cAAc,GAAa;IAC/B,8BAA8B;IAC9B,+BAA+B,EAAY,oBAAoB;IAC/D,2BAA2B,EAAgB,iBAAiB;IAC5D,0BAA0B,EAAiB,aAAa;IACxD,0BAA0B,EAAiB,qBAAqB;IAChE,0BAA0B,EAAiB,8BAA8B;IACzE,0BAA0B,EAAiB,gCAAgC;IAC3E,0BAA0B,EAAiB,uBAAuB;IAClE,iCAAiC,EAAU,eAAe;IAC1D,uBAAuB,EAAoB,iBAAiB;IAC5D,uCAAuC,EAAI,cAAc;IACzD,gCAAgC,EAAW,eAAe;IAC1D,mEAAmE,EAAE,4BAA4B;IACjG,4CAA4C,EAAE,wBAAwB;IACtE,mCAAmC;IACnC,wBAAwB,EAAmB,iBAAiB;IAC5D,wBAAwB,EAAmB,iBAAiB;IAC5D,oBAAoB,EAAuB,mBAAmB;IAC9D,mBAAmB,EAAwB,mBAAmB;IAC9D,sBAAsB;IACtB,qEAAqE;CACtE,CAAC;AAEF,mFAAmF;AACnF,MAAM,UAAU,kBAAkB,CAAC,IAAY;IAC7C,IAAI,CAAC,IAAI;QAAE,OAAO,KAAK,CAAC;IACxB,OAAO,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AAClD,CAAC;AAWD;;;;;;;;;GASG;AACH,MAAM,UAAU,UAAU,CAAC,GAA8B;IACvD,MAAM,IAAI,GAAG,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;IACrD,IAAI,CAAC,IAAI;QAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;IAClE,IAAI,kBAAkB,CAAC,IAAI,CAAC;QAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC;IAC3F,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,GAAG,gBAAgB,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,gBAAgB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACxF,MAAM,OAAO,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC;IACxC,IAAI,CAAC,OAAO;QAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;IACrE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;AAC5C,CAAC"}
|
|
@@ -132,6 +132,20 @@ export declare class OutputActivityTracker {
|
|
|
132
132
|
private readonly last;
|
|
133
133
|
constructor(sessions: SentinelSessionSurface, now?: () => number);
|
|
134
134
|
snapshot(): SessionRegistryEntry[];
|
|
135
|
+
/**
|
|
136
|
+
* Cached read of the LAST-computed output-change time for a session, WITHOUT
|
|
137
|
+
* capturing (no tmux frame is read). Returns the `lastChangeAt` recorded by
|
|
138
|
+
* the most recent `snapshot()` call, or null when the session has not been
|
|
139
|
+
* observed yet OR its first sighting only recorded the baseline (lastChangeAt
|
|
140
|
+
* is still 0 — i.e. no real output change has been observed).
|
|
141
|
+
*
|
|
142
|
+
* This is the AutonomousProgressHeartbeat's predicate #8 read (spec
|
|
143
|
+
* §Shared-snapshot dependency): the heartbeat shares THIS tracker (the one
|
|
144
|
+
* ActiveWorkSilenceSentinel ticks on its own 60s loop) and reads the value it
|
|
145
|
+
* already computed — it NEVER captures its own frame. Returns null fails-closed
|
|
146
|
+
* for the heartbeat (no emit).
|
|
147
|
+
*/
|
|
148
|
+
lastOutputAtFor(sessionName: string): number | null;
|
|
135
149
|
}
|
|
136
150
|
export declare function buildActiveWorkSilenceDeps(opts: {
|
|
137
151
|
tracker: OutputActivityTracker;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sentinelWiring.d.ts","sourceRoot":"","sources":["../../src/monitoring/sentinelWiring.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"sentinelWiring.d.ts","sourceRoot":"","sources":["../../src/monitoring/sentinelWiring.ts"],"names":[],"mappings":"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"}
|
|
@@ -207,6 +207,25 @@ export class OutputActivityTracker {
|
|
|
207
207
|
}
|
|
208
208
|
return out;
|
|
209
209
|
}
|
|
210
|
+
/**
|
|
211
|
+
* Cached read of the LAST-computed output-change time for a session, WITHOUT
|
|
212
|
+
* capturing (no tmux frame is read). Returns the `lastChangeAt` recorded by
|
|
213
|
+
* the most recent `snapshot()` call, or null when the session has not been
|
|
214
|
+
* observed yet OR its first sighting only recorded the baseline (lastChangeAt
|
|
215
|
+
* is still 0 — i.e. no real output change has been observed).
|
|
216
|
+
*
|
|
217
|
+
* This is the AutonomousProgressHeartbeat's predicate #8 read (spec
|
|
218
|
+
* §Shared-snapshot dependency): the heartbeat shares THIS tracker (the one
|
|
219
|
+
* ActiveWorkSilenceSentinel ticks on its own 60s loop) and reads the value it
|
|
220
|
+
* already computed — it NEVER captures its own frame. Returns null fails-closed
|
|
221
|
+
* for the heartbeat (no emit).
|
|
222
|
+
*/
|
|
223
|
+
lastOutputAtFor(sessionName) {
|
|
224
|
+
const rec = this.last.get(sessionName);
|
|
225
|
+
if (!rec || rec.lastChangeAt <= 0)
|
|
226
|
+
return null;
|
|
227
|
+
return rec.lastChangeAt;
|
|
228
|
+
}
|
|
210
229
|
}
|
|
211
230
|
export function buildActiveWorkSilenceDeps(opts) {
|
|
212
231
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sentinelWiring.js","sourceRoot":"","sources":["../../src/monitoring/sentinelWiring.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAYH,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AA4BlE,MAAM,UAAU,mBAAmB,CAAC,IAInC;IACC,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,IAAI,KAAK,CAAC;IACxC,OAAO,KAAK,EAAE,IAAI,EAAE,EAAE;QACpB,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,oBAAoB,IAAI,CAAC,IAAI,YAAY,EAAE;gBACpE,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE;oBACP,cAAc,EAAE,kBAAkB;oBAClC,aAAa,EAAE,UAAU,IAAI,CAAC,SAAS,EAAE;iBAC1C;gBACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,QAAQ,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,CAAC;aAC7E,CAAC,CAAC;YACH,OAAO,IAAI,CAAC,MAAM,KAAK,GAAG,CAAC;QAC7B,CAAC;QAAC,MAAM,CAAC;YACP,wEAAwE;YACxE,0EAA0E;YAC1E,mEAAmE;YACnE,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,oBAAoB,GAAG,EAAE,CAAC;AAChC,MAAM,qBAAqB,GAAG,EAAE,CAAC;AACjC,MAAM,mBAAmB,GAAG,EAAE,CAAC;AAW/B,MAAM,UAAU,yBAAyB,CAAC,IAGzC;IACC,OAAO;QACL,eAAe,EAAE,CAAC,WAAW,EAAE,EAAE,CAC/B,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,WAAW,EAAE,oBAAoB,CAAC,IAAI,EAAE;QACtE,QAAQ,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE;YAC9B,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,WAAW,CAAC;gBAAE,OAAO,KAAK,CAAC;YAC7D,0EAA0E;YAC1E,uEAAuE;YACvE,uDAAuD;YACvD,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;QACrD,CAAC;QACD,QAAQ,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE;YACpC,MAAM,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;QACzC,CAAC;QACD,gBAAgB,EAAE,GAAG,EAAE,CACrB,IAAI,CAAC,QAAQ,CAAC,mBAAmB,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC;KAChE,CAAC;AACJ,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,qBAAqB,CAAC,IAQrC;IACC,OAAO;QACL,eAAe,EAAE,CAAC,WAAW,EAAE,EAAE,CAC/B,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,WAAW,EAAE,mBAAmB,CAAC,IAAI,EAAE;QACrE,SAAS,EAAE,KAAK,EAAE,WAAW,EAAiC,EAAE;YAC9D,uDAAuD;YACvD,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO;gBAAE,OAAO,aAAa,CAAC;YACrD,yDAAyD;YACzD,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM;gBAAE,OAAO,SAAS,CAAC;YAC/C,uCAAuC;YACvC,IAAI,CAAC;gBACH,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;gBAChD,OAAO,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC;YACrC,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,QAAQ,CAAC;YAClB,CAAC;QACH,CAAC;QACD,QAAQ,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE;YACpC,MAAM,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;QACzC,CAAC;QACD,gBAAgB,EAAE,GAAG,EAAE,CACrB,IAAI,CAAC,QAAQ,CAAC,mBAAmB,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC;KAChE,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,oBAAoB,CAClC,MAAc,EACd,SAAiC;IAEjC,IAAI,CAAC,MAAM;QAAE,OAAO,KAAK,CAAC;IAC1B,MAAM,GAAG,GAAG,iBAAiB,CAAC,SAAS,CAAC,CAAC;IACzC,OAAO,CACL,GAAG,CAAC,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC;QAClC,GAAG,CAAC,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC;QAClC,GAAG,CAAC,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,CAClC,CAAC;AACJ,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,kBAAkB,CAChC,MAAc,EACd,SAAiC;IAEjC,IAAI,CAAC,MAAM;QAAE,OAAO,KAAK,CAAC;IAC1B,MAAM,GAAG,GAAG,iBAAiB,CAAC,SAAS,CAAC,CAAC;IACzC,OAAO,CACL,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC;QAC7B,GAAG,CAAC,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC;QAClC,GAAG,CAAC,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,CAClC,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,OAAO,qBAAqB;IAIb;IACA;IAJF,IAAI,GAAG,IAAI,GAAG,EAAkD,CAAC;IAElF,YACmB,QAAgC,EAChC,MAAoB,IAAI,CAAC,GAAG;QAD5B,aAAQ,GAAR,QAAQ,CAAwB;QAChC,QAAG,GAAH,GAAG,CAAyB;IAC5C,CAAC;IAEJ,QAAQ;QACN,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACrB,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,mBAAmB,EAAE,CAAC;QACpD,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;QAC/B,MAAM,GAAG,GAA2B,EAAE,CAAC;QACvC,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;YACxB,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;YACxB,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,WAAW,EAAE,qBAAqB,CAAC,IAAI,EAAE,CAAC;YACvF,wEAAwE;YACxE,yEAAyE;YACzE,yEAAyE;YACzE,0EAA0E;YAC1E,8EAA8E;YAC9E,4EAA4E;YAC5E,4EAA4E;YAC5E,2EAA2E;YAC3E,+EAA+E;YAC/E,4EAA4E;YAC5E,6EAA6E;YAC7E,MAAM,IAAI,GAAG,SAAS,CAAC,mBAAmB,CAAC,MAAM,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;YACjE,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;YAC1C,IAAI,YAAoB,CAAC;YACzB,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,qEAAqE;gBACrE,oEAAoE;gBACpE,qEAAqE;gBACrE,sEAAsE;gBACtE,YAAY,GAAG,CAAC,CAAC;gBACjB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,WAAW,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,CAAC;YACvD,CAAC;iBAAM,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;gBAC9B,sEAAsE;gBACtE,mEAAmE;gBACnE,YAAY,GAAG,CAAC,CAAC;gBACjB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,WAAW,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,CAAC;YACvD,CAAC;iBAAM,CAAC;gBACN,wEAAwE;gBACxE,oEAAoE;gBACpE,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC;YACnC,CAAC;YACD,MAAM,MAAM,GAAG,oBAAoB,CAAC,MAAM,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC;YACzD,GAAG,CAAC,IAAI,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,WAAW,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC;QACxF,CAAC;QACD,kFAAkF;QAClF,KAAK,MAAM,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;YAC/C,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;gBAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC5C,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC;CACF;AAED,MAAM,UAAU,0BAA0B,CAAC,IAqB1C;IACC,OAAO;QACL,YAAY,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE;QAC3C,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE;YAC7B,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,WAAW,CAAC;gBAAE,OAAO,KAAK,CAAC;YAC7D,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;QACrD,CAAC;QACD,QAAQ,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE;YACpC,kEAAkE;YAClE,yEAAyE;YACzE,oEAAoE;YACpE,MAAM,OAAO,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC,WAAW,CAAC,CAAC;YACvD,IAAI,OAAO,IAAI,IAAI,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;gBAC3C,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC;gBACvE,IAAI,EAAE;oBAAE,OAAO;YACjB,CAAC;YACD,MAAM,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;QACzC,CAAC;QACD,SAAS,EAAE,IAAI,CAAC,SAAS;QACzB,YAAY,EAAE,IAAI,CAAC,YAAY;QAC/B,6EAA6E;QAC7E,2EAA2E;QAC3E,6DAA6D;QAC7D,oBAAoB,EAAE,IAAI,CAAC,YAAY;YACrC,CAAC,CAAC,CAAC,KAAK,EAAE,WAAW,EAAE,EAAE,CAAC,kBAAkB,CAAC,KAAK,EAAE,IAAI,CAAC,mBAAmB,EAAE,CAAC,WAAW,CAAC,CAAC;YAC5F,CAAC,CAAC,SAAS;QACb,kBAAkB,EAAE,IAAI,CAAC,kBAAkB;QAC3C,WAAW,EAAE,IAAI,CAAC,WAAW;KAC9B,CAAC;AACJ,CAAC;AAiBD;oDACoD;AACpD,MAAM,CAAC,MAAM,uBAAuB,GAClC,yFAAyF,CAAC;AA8B5F;;;;;;GAMG;AACH,MAAM,UAAU,0BAA0B,CAAC,CAA2B;IAIpE,OAAO;QACL,QAAQ,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE;YAC9B,IAAI,CAAC,CAAC,CAAC,cAAc,CAAC,WAAW,CAAC;gBAAE,OAAO,KAAK,CAAC;YACjD,uEAAuE;YACvE,kEAAkE;YAClE,qEAAqE;YACrE,0EAA0E;YAC1E,yEAAyE;YACzE,iEAAiE;YACjE,0EAA0E;YAC1E,MAAM,OAAO,GAAG,CAAC,CAAC,kBAAkB,CAAC,WAAW,CAAC,CAAC;YAClD,MAAM,EAAE,GAAG,CAAC,CAAC,mBAAmB,CAAC,WAAW,EAAE,uBAAuB,CAAC,CAAC;YACvE,CAAC,CAAC,cAAc,CACd,EAAE,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,sBAAsB,EAChD,WAAW,EACX,EAAE;gBACA,CAAC,CAAC,sDAAsD,OAAO,IAAI,IAAI,CAAC,CAAC,CAAC,WAAW,OAAO,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;gBACtG,CAAC,CAAC,mCAAmC,EACvC,CAAC,oBAAoB,CAAC,CACvB,CAAC;YACF,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,QAAQ,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE;YACpC,MAAM,OAAO,GAAG,CAAC,CAAC,kBAAkB,CAAC,WAAW,CAAC,CAAC;YAClD,IAAI,OAAO,IAAI,IAAI,EAAE,CAAC;gBACpB,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC,aAAa,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC;gBACnE,CAAC,CAAC,cAAc,CACd,EAAE,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,sBAAsB,EAChD,WAAW,EACX,EAAE,CAAC,CAAC,CAAC,mCAAmC,CAAC,CAAC,CAAC,uBAAuB,EAClE,CAAC,OAAO,CAAC,CACV,CAAC;gBACF,OAAO;YACT,CAAC;YACD,wEAAwE;YACxE,MAAM,UAAU,GAAG,CAAC,CAAC,kBAAkB,EAAE,CAAC;YAC1C,IAAI,UAAU,IAAI,IAAI,EAAE,CAAC;gBACvB,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC,aAAa,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC;gBACtE,CAAC,CAAC,cAAc,CACd,EAAE,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,sBAAsB,EAChD,WAAW,EACX,EAAE;oBACA,CAAC,CAAC,8DAA8D;oBAChE,CAAC,CAAC,0BAA0B,EAC9B,CAAC,OAAO,EAAE,UAAU,CAAC,CACtB,CAAC;gBACF,OAAO;YACT,CAAC;YACD,2EAA2E;YAC3E,CAAC,CAAC,cAAc,CACd,sBAAsB,EACtB,WAAW,EACX,mDAAmD,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,EACvE,CAAC,OAAO,EAAE,UAAU,EAAE,OAAO,CAAC,CAC/B,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC;AAED,sFAAsF;AACtF;;;;;;;;;GASG;AACH,MAAM,UAAU,mBAAmB,CACjC,MAAc,EACd,SAAkD;IAElD,IAAI,CAAC,MAAM;QAAE,OAAO,MAAM,CAAC;IAC3B,MAAM,GAAG,GAAG,iBAAiB,CAAC,SAAS,CAAC,CAAC;IACzC,4EAA4E;IAC5E,qEAAqE;IACrE,gFAAgF;IAChF,8EAA8E;IAC9E,+EAA+E;IAC/E,+CAA+C;IAC/C,MAAM,SAAS,GAAG,IAAI,MAAM,CAAC,GAAG,CAAC,iBAAiB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IACjE,OAAO,MAAM;SACV,KAAK,CAAC,IAAI,CAAC;SACX,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CACZ,IAAI;SACD,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,yBAAyB;SAC/C,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,2CAA2C;SAClE,OAAO,CAAC,kBAAkB,EAAE,EAAE,CAAC,CAAC,oBAAoB;SACpD,OAAO,CAAC,iBAAiB,EAAE,GAAG,CAAC,CAAC,kCAAkC;SAClE,OAAO,CAAC,iCAAiC,EAAE,EAAE,CAAC,CAAC,gBAAgB;SAC/D,OAAO,CAAC,sBAAsB,EAAE,EAAE,CAAC,CACvC;SACA,IAAI,CAAC,IAAI,CAAC,CAAC;AAChB,CAAC;AAED,SAAS,SAAS,CAAC,CAAS;IAC1B,IAAI,CAAC,GAAG,UAAU,CAAC;IACnB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAClC,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QACrB,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;IAC/B,CAAC;IACD,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AAChC,CAAC;AAED,SAAS,QAAQ,CAAC,WAAmB;IACnC,OAAO,WAAW;SACf,OAAO,CAAC,eAAe,EAAE,EAAE,CAAC;SAC5B,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC;SACvB,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;AAC/B,CAAC"}
|
|
1
|
+
{"version":3,"file":"sentinelWiring.js","sourceRoot":"","sources":["../../src/monitoring/sentinelWiring.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"templates.d.ts","sourceRoot":"","sources":["../../src/scaffold/templates.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AASH,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,aAAa,GAAG,MAAM,CAgG/D;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CA2E/F;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAiBvD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CA2B1D;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,OAAO,EACpB,WAAW,GAAE,OAAe,EAC5B,WAAW,GAAE,OAAe,GAC3B,MAAM,
|
|
1
|
+
{"version":3,"file":"templates.d.ts","sourceRoot":"","sources":["../../src/scaffold/templates.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AASH,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,aAAa,GAAG,MAAM,CAgG/D;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CA2E/F;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAiBvD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CA2B1D;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,OAAO,EACpB,WAAW,GAAE,OAAe,EAC5B,WAAW,GAAE,OAAe,GAC3B,MAAM,CAuhDR;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAClC,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,OAAO,EACpB,WAAW,GAAE,OAAe,GAC3B,MAAM,CA2TR"}
|
|
@@ -529,6 +529,9 @@ Every guard (monitoring sentinels, reapers, the scheduler, …) is graded by wha
|
|
|
529
529
|
- **Topic-operator binding is the THIRD PII store** (WS2.6): when enabled, the VERIFIED operator a topic was bound to on one machine is VISIBLE as advisory context on the others. THE LOAD-BEARING SAFETY RULE (Know Your Principal): a replicated topic-operator record is UNTRUSTED peer data — it is NEVER my authoritative answer to "who is my verified operator of this topic?". Only the LOCAL binding from an AUTHENTICATED sender (TopicOperatorStore.setOperator) is authoritative; a replicated record can NEVER establish or override an operator — it is rendered as quoted untrusted data that explicitly says so. Cross-machine identity is keyed on \`sha256(topicId + ":" + verified-uid)\`, NEVER a content-name. An unbind propagates a tombstone. Enable with \`multiMachine.stateSync.topicOperator\` (ships dark: \`enabled:false\`, \`dryRun:true\`). With user-registry + topic-operator, the WS2 memory family is COMPLETE (7 kinds; playbook deferred).
|
|
530
530
|
- **When to use** (PROACTIVE — these are the triggers): the user asks "why do I have two versions of preference X?" → read open conflicts and present them for resolution. The user says "roll back machine Y's data / forget what the other machine learned" → un-merge that origin. The user asks "is my relationship/contact data shared across machines / is it encrypted on the other machine?" → explain the at-rest honesty above (transit encrypted; at-rest plaintext on each machine). The user asks "do my learnings/lessons follow me across machines?" → yes when \`stateSync.learnings\` is on (the same lesson collapses by content fingerprint, never duplicates). The user asks "do my ingested sources / knowledge base follow me across machines?" → yes when \`stateSync.knowledge\` is on (the same source collapses by content fingerprint; only the catalog metadata syncs, not the file body). The user asks "do my action items / commitments follow me across machines?" → yes when \`stateSync.evolutionActions\` is on (the same action collapses by content fingerprint; a peer sees its real status so it does not redo completed work). The user asks "do my registered users follow me across machines?" → yes when \`stateSync.userRegistry\` is on (keyed on the channel set; but identity resolution of an inbound sender stays local-authoritative). The user asks "do you know who my verified operator is on the other machine?" → a replicated topic-operator record is advisory context ONLY; my authoritative operator is always the locally auth-bound one. Spec: \`docs/specs/multi-machine-replicated-store-foundation.md\` §7, \`docs/specs/ws23-relationships-userregistry-security.md\`.
|
|
531
531
|
|
|
532
|
+
**Cross-Machine Account Follow-Me (WS5.2 — seamless account/quota sharing)** — When I run on more than one machine, "log in once, the account works everywhere" is delivered the ToS-SAFE way: each machine RE-MINTS its OWN login (operator approves once per machine; Mechanism B — default), and NO Claude OAuth token is ever copied between machines (Anthropic's ToS forbids relocating a Claude login). Only a redacted, credential-free METADATA projection of each account (id, nickname, email, provider, framework, status, quota) replicates so a peer KNOWS an account's depth/quota — the login LOCATION (configHome) and every credential field are STRIPPED and never cross the wire. A cross-machine credential SHARE (Mechanism A, sealed-transport) is fully designed but REFUSED for Anthropic by default (per-provider allowlist, default empty). Authorization is operator-mandate-gated (deny-by-default; a peer can NEVER enroll an account onto itself via the mesh), the cross-machine mandate carries an asymmetric Ed25519 issuance signature (the local HMAC proof is machine-local), de-pairing ROTATES the recipient key so old sealed credentials die, and per-account spend is lease-sliced (sum-of-leases bound). Ships DARK on the fleet, LIVE on a development agent (dogfooding); gate: \`multiMachine.accountFollowMe\`. Spec: \`docs/specs/ws52-account-follow-me-security.md\`.
|
|
533
|
+
- **When to use** (PROACTIVE): the user asks "do I have to log my account in on every machine?" / "share my account across machines" → explain the re-mint-per-machine model (one approval per machine, then that machine serves from the shared pool's quota; no token copied). "is my login copied to my other machines?" → NO — only non-credential account metadata replicates; each machine holds its own grant.
|
|
534
|
+
|
|
532
535
|
**Relationships** — Track people I interact with.
|
|
533
536
|
- List: \`curl -H "Authorization: Bearer $AUTH" http://localhost:${port}/relationships\`
|
|
534
537
|
|
|
@@ -1545,6 +1548,13 @@ Two background notifiers used to post frequent, falsely-confident noise because
|
|
|
1545
1548
|
- **Silent-freeze watchdog** (ActiveWorkSilenceSentinel): before claiming a session is stuck, it re-captures the LIVE frame and corroborates — if the frame still shows an active-work indicator (spinner / "esc to interrupt"), a sub-agent is live, or it's a clean idle prompt, it stays SILENT. It speaks only when genuinely wedged, and even then hedges ("…hasn't changed in N min and a nudge didn't wake it — it may be stuck, or on a long task I can't see into. Want me to check?"). Threshold raised 15m→30m; a 90m frozen-indicator backstop still surfaces a real mid-tool hang. Tune/disable: \`monitoring.activeWorkSilenceSentinel.enabled\` (off), \`.silenceThresholdMs\` (default 30m), \`.activeWorkMaxFrozenIndicatorMs\` (default 90m).
|
|
1546
1549
|
- **Promise beacon** (the ⏳ heartbeats): the zero-information "still on it, no new output" filler is suppressed by default — it speaks only on genuine new progress, deadline pressure, a sparse once-per-60m liveness line, or a one-shot turn-finished close-out. Base cadence relaxed 10m→20m. Tune/disable: \`promiseBeacon.suppressUnchangedHeartbeats: false\` (restore the legacy every-tick heartbeat — the rollback lever), \`promiseBeacon.beaconLivenessIntervalMs\` (default 60m), \`promiseBeacon.turnFinishedCloseoutChecks\` (default 3).
|
|
1547
1550
|
- **Doc correction:** the trio's escalations are NOT gated by \`monitoring.sentinelTelegramEscalation\` (that gate governs a different path); they route through the tone-gated \`/attention\` surface and are controlled by each sentinel's own \`enabled\` flag (both default true). Effectiveness is measurable in \`logs/sentinel-events.jsonl\` and the per-feature LLM-metrics surface (feature keys \`active-work-silence\`, \`promise-beacon\`). Spec: \`docs/specs/HONEST-PROGRESS-MESSAGING-SPEC.md\`.
|
|
1551
|
+
|
|
1552
|
+
## Autonomous-run silence backstop (AutonomousProgressHeartbeat)
|
|
1553
|
+
|
|
1554
|
+
A proactive backstop that posts ONE purely-observational liveness line when an autonomous run has gone silent on you for a long stretch while its terminal output is still changing. **This is NOT the commitment-cadence "still on it" heartbeat that the honest-progress work removed** — it fires only on a LONG user-silence gate (≥25m) WITH corroborated recent output change (a liveness signal, NOT a progress claim), and the wording is observational ("I haven't posted here in a while — last observed activity was «…». Message me if you need me."), never an assertive "still working" / "still going" claim. It closes the *busy-but-silent-to-user* gap the other watchers miss: the silent-freeze watchdog stays quiet while output is moving (it's a stuck-detector), PresenceProxy needs an inbound message, and PromiseBeacon needs an open commitment — a long heads-down autonomous run with no commitment and no inbound message falls through all three. The real fix is still you sending your own milestones; this only catches a lapse.
|
|
1555
|
+
- **It can't spam you (three LOCAL brakes, NOT dedup):** a long user-silence gate that ANY outbound (including your own normal reply) resets; a per-topic emit-cooldown; and a widening per-run backoff (25→40→60→90m) with a hard cap (~6 lines per run). A 24h silent-but-working run yields a handful of hedged lines, never dozens. Output advancing proves only LIVENESS, never that work is progressing (a log/retry loop also advances output) — which is exactly why the wording is liveness-only.
|
|
1556
|
+
- **Signal-only:** it only ever ADDS a line — never blocks, delays, or rewrites your real messages. Every predicate fails CLOSED (no emit) on any uncertainty (can't read history, the shared snapshot is unavailable, the run is mid-move to another machine). The interpolated \`focus\` is scrubbed for credentials/secrets/paths (drop-to-generic on any match), length-clamped, and HTML-escaped before it's ever shown.
|
|
1557
|
+
- **Status:** \`curl -H "Authorization: Bearer $AUTH" http://localhost:4042/autonomous-heartbeat\` → \`{ enabled, dryRun, silenceThresholdMinutes, lastTickAt, topicsConsidered, lastEmits }\` (503 when dark). Ships dark on the fleet + \`dryRun: true\` on a dev agent (logs "would emit" on the SAME cooldown/budget as live). Tune/disable: \`monitoring.autonomousHeartbeat\` (\`dryRun\`, \`silenceThresholdMinutes\`, \`tickIntervalMs\`, \`maxHeartbeatsPerRun\`). Spec: \`docs/specs/autonomous-progress-heartbeat.md\`.
|
|
1548
1558
|
`;
|
|
1549
1559
|
if (hasTelegram) {
|
|
1550
1560
|
content += `
|