instar 1.3.367 → 1.3.368
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 +83 -2
- package/dist/commands/server.js.map +1 -1
- package/dist/config/ConfigDefaults.d.ts.map +1 -1
- package/dist/config/ConfigDefaults.js +11 -0
- package/dist/config/ConfigDefaults.js.map +1 -1
- package/dist/core/CommitmentsSync.d.ts +144 -0
- package/dist/core/CommitmentsSync.d.ts.map +1 -0
- package/dist/core/CommitmentsSync.js +293 -0
- package/dist/core/CommitmentsSync.js.map +1 -0
- package/dist/core/MeshRpc.d.ts +6 -0
- package/dist/core/MeshRpc.d.ts.map +1 -1
- package/dist/core/MeshRpc.js +1 -0
- package/dist/core/MeshRpc.js.map +1 -1
- package/dist/core/PeerPresencePuller.d.ts +19 -0
- package/dist/core/PeerPresencePuller.d.ts.map +1 -1
- package/dist/core/PeerPresencePuller.js +7 -0
- package/dist/core/PeerPresencePuller.js.map +1 -1
- package/dist/core/types.d.ts +13 -0
- package/dist/core/types.d.ts.map +1 -1
- package/dist/core/types.js.map +1 -1
- package/dist/monitoring/CommitmentTracker.d.ts +40 -0
- package/dist/monitoring/CommitmentTracker.d.ts.map +1 -1
- package/dist/monitoring/CommitmentTracker.js +95 -4
- package/dist/monitoring/CommitmentTracker.js.map +1 -1
- package/dist/server/AgentServer.d.ts +3 -0
- package/dist/server/AgentServer.d.ts.map +1 -1
- package/dist/server/AgentServer.js +1 -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 +20 -1
- package/dist/server/routes.js.map +1 -1
- package/package.json +1 -1
- package/src/data/builtin-manifest.json +47 -47
- package/src/data/state-coherence-registry.json +13 -1
- package/upgrades/1.3.368.md +52 -0
- package/upgrades/side-effects/commitments-sync-p15a.md +93 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/commands/server.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AA6SH,UAAU,YAAY;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb;2DACuD;IACvD,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAuxDD,wBAAsB,WAAW,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/commands/server.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AA6SH,UAAU,YAAY;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb;2DACuD;IACvD,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAuxDD,wBAAsB,WAAW,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAk/StE;AAED,wBAAsB,UAAU,CAAC,OAAO,EAAE;IAAE,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAsDzE;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,aAAa,CAAC,OAAO,EAAE;IAAE,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAuD5E"}
|
package/dist/commands/server.js
CHANGED
|
@@ -2363,6 +2363,10 @@ export async function startServer(options) {
|
|
|
2363
2363
|
// the mesh client) can reference it lazily; constructed in the mesh-wiring
|
|
2364
2364
|
// block ONLY under the same explicit replication gate.
|
|
2365
2365
|
let workingSetPullCoordinator;
|
|
2366
|
+
// Commitments-coherence receive side (COMMITMENTS-COHERENCE-SPEC §3.2) —
|
|
2367
|
+
// same explicit replication gate; undefined = dark (verb answers
|
|
2368
|
+
// 'disabled', merge layer returns own rows only).
|
|
2369
|
+
let commitmentReplicaStore;
|
|
2366
2370
|
{
|
|
2367
2371
|
const cjCfg = config.multiMachine?.coherenceJournal;
|
|
2368
2372
|
const cjEnabled = cjCfg?.enabled ?? !!config.developmentAgent;
|
|
@@ -6350,6 +6354,9 @@ export async function startServer(options) {
|
|
|
6350
6354
|
const commitmentTracker = new CommitmentTracker({
|
|
6351
6355
|
stateDir: config.stateDir,
|
|
6352
6356
|
liveConfig,
|
|
6357
|
+
// P1.5 §3.1: the creator stamp — (originMachineId, id) is the
|
|
6358
|
+
// cross-machine identity (ids are per-machine sequential counters).
|
|
6359
|
+
...(cjOwnMachineId ? { originMachineId: cjOwnMachineId } : {}),
|
|
6353
6360
|
onViolation: (commitment, detail) => {
|
|
6354
6361
|
notify('IMMEDIATE', 'commitment', `You asked me to "${commitment.userRequest}" but it looks like that setting reverted. ${detail}`);
|
|
6355
6362
|
},
|
|
@@ -9893,7 +9900,13 @@ export async function startServer(options) {
|
|
|
9893
9900
|
const journalAdvert = coherenceJournal
|
|
9894
9901
|
? { [cjOwnMachineId ?? meshSelfId]: coherenceJournal.getOwnAdvert() }
|
|
9895
9902
|
: {};
|
|
9896
|
-
|
|
9903
|
+
// COMMITMENTS-COHERENCE-SPEC §3.2: the commitments advert —
|
|
9904
|
+
// answered from MEMORY (never a disk read on the presence
|
|
9905
|
+
// tick). Omitted while the layer is dark; old peers ignore it.
|
|
9906
|
+
const commitmentsAdvert = commitmentReplicaStore
|
|
9907
|
+
? commitmentTracker.getReplicationAdvert() ?? undefined
|
|
9908
|
+
: undefined;
|
|
9909
|
+
return { ...base, journalAdvert, ...(commitmentsAdvert ? { commitmentsAdvert } : {}) };
|
|
9897
9910
|
},
|
|
9898
9911
|
// COHERENCE-JOURNAL-SPEC §3.4 — always-registered journal-sync verb
|
|
9899
9912
|
// (harmless when no peer sends): serve our OWN stream on `request`
|
|
@@ -9929,6 +9942,26 @@ export async function startServer(options) {
|
|
|
9929
9942
|
return { ok: false, reason: 'working-set disabled' };
|
|
9930
9943
|
return workingSetPullServer.handle(cmd);
|
|
9931
9944
|
},
|
|
9945
|
+
// COMMITMENTS-COHERENCE-SPEC §3.2 — serve OWN commitment records
|
|
9946
|
+
// as seq-windowed delta pages. Registered always (lockstep with
|
|
9947
|
+
// the union+RBAC edits); answers 'disabled' until the replication
|
|
9948
|
+
// gate constructs the layer AND the tracker advertises.
|
|
9949
|
+
'commitments-sync': async (cmd) => {
|
|
9950
|
+
const c = cmd;
|
|
9951
|
+
if (!commitmentReplicaStore || !commitmentTracker)
|
|
9952
|
+
return { ok: false, reason: 'commitments-sync disabled' };
|
|
9953
|
+
const advert = commitmentTracker.getReplicationAdvert();
|
|
9954
|
+
if (!advert)
|
|
9955
|
+
return { ok: false, reason: 'commitments-sync disabled' };
|
|
9956
|
+
const syncMod = await import('../core/CommitmentsSync.js');
|
|
9957
|
+
const wsCfgC = config.multiMachine?.coherenceJournal?.commitments;
|
|
9958
|
+
return syncMod.buildCommitmentsSyncPage(c.request, {
|
|
9959
|
+
ownMachineId: cjOwnMachineId ?? meshSelfId,
|
|
9960
|
+
records: commitmentTracker.getAll(),
|
|
9961
|
+
advert,
|
|
9962
|
+
syncPageBytes: wsCfgC?.syncPageBytes,
|
|
9963
|
+
});
|
|
9964
|
+
},
|
|
9932
9965
|
place: ownAction,
|
|
9933
9966
|
claim: ownAction,
|
|
9934
9967
|
transfer: ownAction,
|
|
@@ -10151,6 +10184,21 @@ export async function startServer(options) {
|
|
|
10151
10184
|
if (typeof wsGuardTimer.unref === 'function')
|
|
10152
10185
|
wsGuardTimer.unref();
|
|
10153
10186
|
console.log(pc.dim(' [working-set] pull coordinator wired (trigger + reflex + drain + sweep + visibility guard)'));
|
|
10187
|
+
// ── Commitments-coherence receive side (P1.5a §3.2) ──
|
|
10188
|
+
// Same explicit replication gate. The puller drive below pulls
|
|
10189
|
+
// delta pages whenever a peer's advert is ahead of our cursor.
|
|
10190
|
+
try {
|
|
10191
|
+
const csMod = await import('../core/CommitmentsSync.js');
|
|
10192
|
+
commitmentReplicaStore = new csMod.CommitmentReplicaStore({
|
|
10193
|
+
stateDir: config.stateDir,
|
|
10194
|
+
logger: (m) => console.log(pc.dim(` [commitments-sync] ${m}`)),
|
|
10195
|
+
});
|
|
10196
|
+
console.log(pc.dim(' [commitments-sync] replica store wired (serve + receive + advert)'));
|
|
10197
|
+
}
|
|
10198
|
+
catch (e) { /* @silent-fallback-ok: commitments-sync construction failure degrades to local-only commitments — never blocks boot (COMMITMENTS-COHERENCE-SPEC §4) */
|
|
10199
|
+
commitmentReplicaStore = undefined;
|
|
10200
|
+
console.log(pc.dim(` [commitments-sync] not constructed: ${e instanceof Error ? e.message : String(e)}`));
|
|
10201
|
+
}
|
|
10154
10202
|
}
|
|
10155
10203
|
catch (e) { /* @silent-fallback-ok: working-set pull wiring failure degrades to serve-only (the verb still answers); never blocks server boot (WORKING-SET-HANDOFF-SPEC §4) */
|
|
10156
10204
|
workingSetPullCoordinator = undefined;
|
|
@@ -10411,6 +10459,39 @@ export async function startServer(options) {
|
|
|
10411
10459
|
},
|
|
10412
10460
|
// REPLICATION-GATED: present only when replication.enabled === true.
|
|
10413
10461
|
..._journalDeltaDeps,
|
|
10462
|
+
// COMMITMENTS-COHERENCE-SPEC §3.2 — pull delta pages when the
|
|
10463
|
+
// peer's advert is ahead of our replica cursor; bounded pages per
|
|
10464
|
+
// tick (the remainder rides the next pass). No-op while dark.
|
|
10465
|
+
driveCommitmentsSync: async (machineId, url, advert) => {
|
|
10466
|
+
if (!commitmentReplicaStore)
|
|
10467
|
+
return;
|
|
10468
|
+
const cursor = commitmentReplicaStore.cursorFor(machineId);
|
|
10469
|
+
const upToDate = cursor.incarnation === advert.incarnation && cursor.sinceSeq >= advert.replicationSeq;
|
|
10470
|
+
if (upToDate)
|
|
10471
|
+
return;
|
|
10472
|
+
const csCfg = config.multiMachine?.coherenceJournal?.commitments;
|
|
10473
|
+
const maxPages = csCfg?.maxSyncPagesPerTick ?? 4;
|
|
10474
|
+
let since = cursor.incarnation === advert.incarnation ? cursor.sinceSeq : 0;
|
|
10475
|
+
let inc = cursor.incarnation;
|
|
10476
|
+
for (let i = 0; i < maxPages; i++) {
|
|
10477
|
+
const res = await meshClient.send({ machineId, url }, { type: 'commitments-sync', request: { sinceSeq: since, ...(inc ? { incarnation: inc } : {}) } }, 0);
|
|
10478
|
+
if (!res.ok || !res.result || typeof res.result !== 'object')
|
|
10479
|
+
return;
|
|
10480
|
+
const page = res.result;
|
|
10481
|
+
if (!page.incarnation)
|
|
10482
|
+
return; // 'disabled' answer shape
|
|
10483
|
+
commitmentReplicaStore.applyPage(machineId, page);
|
|
10484
|
+
if (page.incarnationChanged) {
|
|
10485
|
+
inc = page.incarnation;
|
|
10486
|
+
since = 0;
|
|
10487
|
+
continue;
|
|
10488
|
+
}
|
|
10489
|
+
since = page.nextSinceSeq;
|
|
10490
|
+
inc = page.incarnation;
|
|
10491
|
+
if (page.done)
|
|
10492
|
+
return;
|
|
10493
|
+
}
|
|
10494
|
+
},
|
|
10414
10495
|
});
|
|
10415
10496
|
void peerPresencePuller.pullOnce();
|
|
10416
10497
|
const peerPresenceTimer = setInterval(() => { void peerPresencePuller.pullOnce(); }, 30_000);
|
|
@@ -10651,7 +10732,7 @@ export async function startServer(options) {
|
|
|
10651
10732
|
catch (err) {
|
|
10652
10733
|
console.log(pc.dim(` [session-pool] rollout gate not wired: ${err instanceof Error ? err.message : String(err)}`));
|
|
10653
10734
|
}
|
|
10654
|
-
const server = new AgentServer({ config, sessionManager, state, scheduler, telegram, relationships, feedback, feedbackAnomalyDetector, dispatches, updateChecker, autoUpdater, autoDispatcher, quotaTracker, quotaManager, publisher, viewer, tunnel, evolution, watchdog, topicMemory, triageNurse, projectMapper, coherenceGate: scopeVerifier, contextHierarchy, canonicalState, operationGate, sentinel, adaptiveTrust, memoryMonitor, orphanReaper, coherenceMonitor, commitmentTracker, semanticMemory, activitySentinel, rateLimitSentinel, releaseReadinessSentinel: releaseReadinessSentinel ?? undefined, messageRouter, summarySentinel, spawnManager, systemReviewer, capabilityMapper, selfKnowledgeTree, coverageAuditor, topicResumeMap: _topicResumeMap ?? undefined, sessionRefresh: _sessionRefresh ?? undefined, autonomyManager, trustElevationTracker, autonomousEvolution, coordinator: coordinator.enabled ? coordinator : undefined, localSigningKeyPem, leaseTransport, onLeasePullRequest: () => leaseCoordinatorRef?.currentLease() ?? null, liveTailReceiver, handoffWireTransport, onHandoffBegin, onHandoffInitiate: handoffInitiate, handoffInProgress: handoffSentinelInProgress, messageLedger, currentInboundByTopic, replyMarkerTransport, onReplyMarker: messageLedger ? (marker) => { const m = marker; messageLedger.applyRemoteReplyMarker(m.dedupeKey, { platform: m.platform, replyIdempotencyKey: m.replyIdempotencyKey, epoch: m.epoch, topic: m.topic ?? null }); } : undefined, whatsapp: whatsappAdapter, slack: slackAdapter, imessage: imessageAdapter, whatsappBusinessBackend, messageBridge, hookEventReceiver, worktreeMonitor, subagentTracker, instructionsVerifier, handshakeManager: threadlineHandshake, threadlineRouter, conversationStore, warrantsReplyGate, collaborationSurfacer, threadResumeMap, topicLinkageHandler: topicLinkageHandler ?? undefined, threadlineRelayClient, threadlineReplyWaiters, listenerManager: listenerManager ?? undefined, responseReviewGate, messagingToneGate, outboundDedupGate, telemetryHeartbeat, pasteManager, featureRegistry, discoveryEvaluator, completionEvaluator, unifiedTrust, liveConfig, sharedStateLedger, ledgerSessionRegistry, worktreeManager, oidcEnrolledRepos: parallelDevConfig?.oidcEnrolledRepos, initiativeTracker, projectRoundRunner, projectDriftChecker, machineHeartbeat, machinePoolRegistry, meshRpcDispatcher, workingSetPullCoordinator, sessionOwnershipRegistry, topicPinStore: _topicPinStore ?? undefined, secretSync: _secretSyncHandle ?? undefined, meshSelfId: _meshSelfId ?? undefined, resolveRouterUrl: _resolveRouterUrl ?? undefined, resolvePeerUrls: _resolvePeerUrls ?? undefined, sessionPoolE2EResultStore, proxyCoordinator, topicIntentStore, topicIntentArcCheck, usherSignalStore, intelligence: sharedIntelligence ?? undefined, telegramBridgeConfig, telegramBridge: telegramBridge ?? undefined, threadlineObservability, briefDeps, workingMemory, taskFlowRegistry, threadlineFlowBridge, sessionReaper, agentWorktreeReaper, mcpProcessReaper, geminiLoopRunner, sleepController, agentActivityState, reapLog, sleepWakeDetector, unjustifiedStopGate, stopGateDb, stopNotifier });
|
|
10735
|
+
const server = new AgentServer({ config, sessionManager, state, scheduler, telegram, relationships, feedback, feedbackAnomalyDetector, dispatches, updateChecker, autoUpdater, autoDispatcher, quotaTracker, quotaManager, publisher, viewer, tunnel, evolution, watchdog, topicMemory, triageNurse, projectMapper, coherenceGate: scopeVerifier, contextHierarchy, canonicalState, operationGate, sentinel, adaptiveTrust, memoryMonitor, orphanReaper, coherenceMonitor, commitmentTracker, semanticMemory, activitySentinel, rateLimitSentinel, releaseReadinessSentinel: releaseReadinessSentinel ?? undefined, messageRouter, summarySentinel, spawnManager, systemReviewer, capabilityMapper, selfKnowledgeTree, coverageAuditor, topicResumeMap: _topicResumeMap ?? undefined, sessionRefresh: _sessionRefresh ?? undefined, autonomyManager, trustElevationTracker, autonomousEvolution, coordinator: coordinator.enabled ? coordinator : undefined, localSigningKeyPem, leaseTransport, onLeasePullRequest: () => leaseCoordinatorRef?.currentLease() ?? null, liveTailReceiver, handoffWireTransport, onHandoffBegin, onHandoffInitiate: handoffInitiate, handoffInProgress: handoffSentinelInProgress, messageLedger, currentInboundByTopic, replyMarkerTransport, onReplyMarker: messageLedger ? (marker) => { const m = marker; messageLedger.applyRemoteReplyMarker(m.dedupeKey, { platform: m.platform, replyIdempotencyKey: m.replyIdempotencyKey, epoch: m.epoch, topic: m.topic ?? null }); } : undefined, whatsapp: whatsappAdapter, slack: slackAdapter, imessage: imessageAdapter, whatsappBusinessBackend, messageBridge, hookEventReceiver, worktreeMonitor, subagentTracker, instructionsVerifier, handshakeManager: threadlineHandshake, threadlineRouter, conversationStore, warrantsReplyGate, collaborationSurfacer, threadResumeMap, topicLinkageHandler: topicLinkageHandler ?? undefined, threadlineRelayClient, threadlineReplyWaiters, listenerManager: listenerManager ?? undefined, responseReviewGate, messagingToneGate, outboundDedupGate, telemetryHeartbeat, pasteManager, featureRegistry, discoveryEvaluator, completionEvaluator, unifiedTrust, liveConfig, sharedStateLedger, ledgerSessionRegistry, worktreeManager, oidcEnrolledRepos: parallelDevConfig?.oidcEnrolledRepos, initiativeTracker, projectRoundRunner, projectDriftChecker, machineHeartbeat, machinePoolRegistry, meshRpcDispatcher, workingSetPullCoordinator, commitmentReplicaStore, sessionOwnershipRegistry, topicPinStore: _topicPinStore ?? undefined, secretSync: _secretSyncHandle ?? undefined, meshSelfId: _meshSelfId ?? undefined, resolveRouterUrl: _resolveRouterUrl ?? undefined, resolvePeerUrls: _resolvePeerUrls ?? undefined, sessionPoolE2EResultStore, proxyCoordinator, topicIntentStore, topicIntentArcCheck, usherSignalStore, intelligence: sharedIntelligence ?? undefined, telegramBridgeConfig, telegramBridge: telegramBridge ?? undefined, threadlineObservability, briefDeps, workingMemory, taskFlowRegistry, threadlineFlowBridge, sessionReaper, agentWorktreeReaper, mcpProcessReaper, geminiLoopRunner, sleepController, agentActivityState, reapLog, sleepWakeDetector, unjustifiedStopGate, stopGateDb, stopNotifier });
|
|
10655
10736
|
// Boot-recovery (tunnel-failure-resilience spec Part 6): if the agent
|
|
10656
10737
|
// died mid-relay-episode, the persisted tunnel.json carries
|
|
10657
10738
|
// rotationPending=true. Rotate the dashboard PIN + authToken BEFORE
|