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.
Files changed (38) hide show
  1. package/dist/commands/server.d.ts.map +1 -1
  2. package/dist/commands/server.js +83 -2
  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 +11 -0
  6. package/dist/config/ConfigDefaults.js.map +1 -1
  7. package/dist/core/CommitmentsSync.d.ts +144 -0
  8. package/dist/core/CommitmentsSync.d.ts.map +1 -0
  9. package/dist/core/CommitmentsSync.js +293 -0
  10. package/dist/core/CommitmentsSync.js.map +1 -0
  11. package/dist/core/MeshRpc.d.ts +6 -0
  12. package/dist/core/MeshRpc.d.ts.map +1 -1
  13. package/dist/core/MeshRpc.js +1 -0
  14. package/dist/core/MeshRpc.js.map +1 -1
  15. package/dist/core/PeerPresencePuller.d.ts +19 -0
  16. package/dist/core/PeerPresencePuller.d.ts.map +1 -1
  17. package/dist/core/PeerPresencePuller.js +7 -0
  18. package/dist/core/PeerPresencePuller.js.map +1 -1
  19. package/dist/core/types.d.ts +13 -0
  20. package/dist/core/types.d.ts.map +1 -1
  21. package/dist/core/types.js.map +1 -1
  22. package/dist/monitoring/CommitmentTracker.d.ts +40 -0
  23. package/dist/monitoring/CommitmentTracker.d.ts.map +1 -1
  24. package/dist/monitoring/CommitmentTracker.js +95 -4
  25. package/dist/monitoring/CommitmentTracker.js.map +1 -1
  26. package/dist/server/AgentServer.d.ts +3 -0
  27. package/dist/server/AgentServer.d.ts.map +1 -1
  28. package/dist/server/AgentServer.js +1 -0
  29. package/dist/server/AgentServer.js.map +1 -1
  30. package/dist/server/routes.d.ts +4 -0
  31. package/dist/server/routes.d.ts.map +1 -1
  32. package/dist/server/routes.js +20 -1
  33. package/dist/server/routes.js.map +1 -1
  34. package/package.json +1 -1
  35. package/src/data/builtin-manifest.json +47 -47
  36. package/src/data/state-coherence-registry.json +13 -1
  37. package/upgrades/1.3.368.md +52 -0
  38. 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,CAo6StE;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"}
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"}
@@ -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
- return { ...base, journalAdvert };
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