instar 1.3.521 → 1.3.523

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 (54) hide show
  1. package/dist/commands/server.d.ts.map +1 -1
  2. package/dist/commands/server.js +100 -1
  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 +16 -1
  6. package/dist/config/ConfigDefaults.js.map +1 -1
  7. package/dist/core/MeshRpc.d.ts +5 -0
  8. package/dist/core/MeshRpc.d.ts.map +1 -1
  9. package/dist/core/MeshRpc.js +8 -0
  10. package/dist/core/MeshRpc.js.map +1 -1
  11. package/dist/core/StoreSnapshot.d.ts +455 -0
  12. package/dist/core/StoreSnapshot.d.ts.map +1 -0
  13. package/dist/core/StoreSnapshot.js +786 -0
  14. package/dist/core/StoreSnapshot.js.map +1 -0
  15. package/dist/core/devGatedFeatures.d.ts.map +1 -1
  16. package/dist/core/devGatedFeatures.js +6 -0
  17. package/dist/core/devGatedFeatures.js.map +1 -1
  18. package/dist/core/stateSyncConfig.js +1 -1
  19. package/dist/core/stateSyncConfig.js.map +1 -1
  20. package/dist/core/storeSnapshotBuild.worker.d.ts +2 -0
  21. package/dist/core/storeSnapshotBuild.worker.d.ts.map +1 -0
  22. package/dist/core/storeSnapshotBuild.worker.js +32 -0
  23. package/dist/core/storeSnapshotBuild.worker.js.map +1 -0
  24. package/dist/core/types.d.ts +17 -0
  25. package/dist/core/types.d.ts.map +1 -1
  26. package/dist/core/types.js.map +1 -1
  27. package/dist/monitoring/OrphanedWorkSentinel.d.ts +148 -0
  28. package/dist/monitoring/OrphanedWorkSentinel.d.ts.map +1 -0
  29. package/dist/monitoring/OrphanedWorkSentinel.js +177 -0
  30. package/dist/monitoring/OrphanedWorkSentinel.js.map +1 -0
  31. package/dist/monitoring/guardManifest.d.ts.map +1 -1
  32. package/dist/monitoring/guardManifest.js +14 -0
  33. package/dist/monitoring/guardManifest.js.map +1 -1
  34. package/dist/monitoring/orphanedWorkGit.d.ts +30 -0
  35. package/dist/monitoring/orphanedWorkGit.d.ts.map +1 -0
  36. package/dist/monitoring/orphanedWorkGit.js +124 -0
  37. package/dist/monitoring/orphanedWorkGit.js.map +1 -0
  38. package/dist/server/AgentServer.d.ts +3 -0
  39. package/dist/server/AgentServer.d.ts.map +1 -1
  40. package/dist/server/AgentServer.js +1 -0
  41. package/dist/server/AgentServer.js.map +1 -1
  42. package/dist/server/CapabilityIndex.d.ts.map +1 -1
  43. package/dist/server/CapabilityIndex.js +1 -0
  44. package/dist/server/CapabilityIndex.js.map +1 -1
  45. package/dist/server/routes.d.ts +3 -0
  46. package/dist/server/routes.d.ts.map +1 -1
  47. package/dist/server/routes.js +11 -0
  48. package/dist/server/routes.js.map +1 -1
  49. package/package.json +1 -1
  50. package/src/data/builtin-manifest.json +47 -47
  51. package/upgrades/1.3.522.md +25 -0
  52. package/upgrades/1.3.523.md +31 -0
  53. package/upgrades/side-effects/hlc-step3-snapshot-tail.md +133 -0
  54. package/upgrades/side-effects/orphaned-work-sentinel.md +40 -0
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/commands/server.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAgCH,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAS3D,OAAO,EAAE,eAAe,EAAiC,MAAM,iCAAiC,CAAC;AAuBjG,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAGvD,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AA8G7D,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAsBtD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,yBAAyB,CACvC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EACf,gBAAgB,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAC1C,OAAO,CAUT;AAyID,UAAU,YAAY;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb;2DACuD;IACvD,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAm1CD,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,eAAe,EACzB,cAAc,EAAE,cAAc,EAC9B,YAAY,CAAC,EAAE,YAAY,EAC3B,WAAW,CAAC,EAAE,WAAW,EACzB,WAAW,CAAC,EAAE,WAAW,EACzB,iBAAiB,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,EAGvE,UAAU,CAAC,EAAE,MAAM,OAAO,8BAA8B,EAAE,WAAW,GAAG,IAAI,EAK5E,qBAAqB,CAAC,EAAE,MAAM,OAAO,gCAAgC,EAAE,kBAAkB,GAAG,IAAI,EAKhG,mBAAmB,CAAC,EAAE,MAAM,MAAM,GAAG,IAAI,GAAG,SAAS,GACpD,IAAI,CA8eN;AA2lBD,wBAAsB,WAAW,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CA6yZtE;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;AAgCH,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAS3D,OAAO,EAAE,eAAe,EAAiC,MAAM,iCAAiC,CAAC;AAuBjG,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAGvD,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AA+G7D,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAsBtD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,yBAAyB,CACvC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EACf,gBAAgB,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAC1C,OAAO,CAUT;AAyID,UAAU,YAAY;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb;2DACuD;IACvD,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAm1CD,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,eAAe,EACzB,cAAc,EAAE,cAAc,EAC9B,YAAY,CAAC,EAAE,YAAY,EAC3B,WAAW,CAAC,EAAE,WAAW,EACzB,WAAW,CAAC,EAAE,WAAW,EACzB,iBAAiB,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,EAGvE,UAAU,CAAC,EAAE,MAAM,OAAO,8BAA8B,EAAE,WAAW,GAAG,IAAI,EAK5E,qBAAqB,CAAC,EAAE,MAAM,OAAO,gCAAgC,EAAE,kBAAkB,GAAG,IAAI,EAKhG,mBAAmB,CAAC,EAAE,MAAM,MAAM,GAAG,IAAI,GAAG,SAAS,GACpD,IAAI,CA8eN;AA2lBD,wBAAsB,WAAW,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAm5ZtE;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"}
@@ -87,6 +87,7 @@ import { wireRegistrySync } from '../core/wireRegistrySync.js';
87
87
  import { assertSeamlessnessInvariants } from '../core/seamlessnessConfig.js';
88
88
  import { assertStateSyncInvariants } from '../core/stateSyncConfig.js';
89
89
  import { ReplicatedKindRegistry, checkPoolFlagCoherence } from '../core/ReplicatedRecordEnvelope.js';
90
+ import { SnapshotCache, SnapshotRebuildBreaker, StoreSnapshotEngine } from '../core/StoreSnapshot.js';
90
91
  import { FencedLease } from '../core/FencedLease.js';
91
92
  import { GitLeaseStore } from '../core/GitLeaseStore.js';
92
93
  import { LocalLeaseStore } from '../core/LocalLeaseStore.js';
@@ -3293,6 +3294,35 @@ export async function startServer(options) {
3293
3294
  // registry the advert is `{}` (non-participant for every store): the correct
3294
3295
  // single-machine / no-store-yet behavior (a strict no-op).
3295
3296
  const replicatedKindRegistry = new ReplicatedKindRegistry();
3297
+ // Snapshot-then-tail engine (Component 4 / build-order step 3,
3298
+ // multi-machine-replicated-store-foundation §6). The cache (FIXED ceiling,
3299
+ // §8.2 — NOT pool-scaled), the per-peer rebuild breaker (§6.3), and the engine
3300
+ // are constructed here so the substrate is WIRED + dependency-injectable from
3301
+ // the first PR (machinery presence, testable — never a null/no-op). With the
3302
+ // registry EMPTY (no concrete store yet) the engine has no contributing kinds
3303
+ // to load, so a snapshot request finds no entries and the holder declines —
3304
+ // the correct single-machine / no-store-yet behavior (a strict no-op). The
3305
+ // heavy whole-store materialization runs OFF the event loop in
3306
+ // storeSnapshotBuild.worker.js (instar#1069). The first concrete store (WS2.1)
3307
+ // supplies the own-entry loader for its kind(s) onto this same engine.
3308
+ const snapshotCache = new SnapshotCache({
3309
+ maxCachedSnapshots: stateSync.maxCachedSnapshots,
3310
+ maxCacheBytes: stateSync.maxCacheBytes,
3311
+ });
3312
+ const snapshotRebuildBreaker = new SnapshotRebuildBreaker({ now: () => Date.now() });
3313
+ const storeSnapshotEngine = new StoreSnapshotEngine({
3314
+ cache: snapshotCache,
3315
+ breaker: snapshotRebuildBreaker,
3316
+ seams: {
3317
+ // Step-3 substrate: no concrete store kind is registered yet, so there are
3318
+ // no contributing own-streams to load. A consumer PR (WS2.1) replaces this
3319
+ // with a loader that reads the CoherenceJournal own streams for its kind(s).
3320
+ loadOwnEntries: () => ({}),
3321
+ now: () => Date.now(),
3322
+ },
3323
+ maxSnapshotBytes: stateSync.maxCacheBytes,
3324
+ });
3325
+ void storeSnapshotEngine; // consumed by the state-snapshot mesh handler below + the store PRs (WS2.1+)
3296
3326
  const selfStateSyncReceive = () => {
3297
3327
  const out = {};
3298
3328
  const stores = config.multiMachine?.stateSync;
@@ -11649,6 +11679,49 @@ export async function startServer(options) {
11649
11679
  ? ' AgentWorktreeReaper enabled (stale-worktree reclaim — LIVE)'
11650
11680
  : ' AgentWorktreeReaper enabled (stale-worktree reclaim — dry-run, report only)'));
11651
11681
  }
11682
+ // ── OrphanedWorkSentinel (the silent-uncommitted-death backstop) ──────────
11683
+ // Detects agent worktrees with uncommitted work whose owning session is dead
11684
+ // + settled, records them durably, and raises ONE deduped agent-health notice
11685
+ // — the case the PromiseBeacon escalation ladder can't see (nothing registered
11686
+ // for the code itself). developmentAgent dark-feature gate: LIVE on a dev
11687
+ // agent, DARK on the fleet. Signal-only; start() no-ops when disabled.
11688
+ // GET /orphaned-work.
11689
+ const _orphanedWorkEnabled = resolveDevAgentGate(config.monitoring?.orphanedWorkSentinel?.enabled, config);
11690
+ let orphanedWorkSentinel;
11691
+ try {
11692
+ const { OrphanedWorkSentinel } = await import('../monitoring/OrphanedWorkSentinel.js');
11693
+ const { makeOrphanedWorkSentinelDeps } = await import('../monitoring/orphanedWorkGit.js');
11694
+ orphanedWorkSentinel = new OrphanedWorkSentinel(makeOrphanedWorkSentinelDeps({
11695
+ instarRepo: config.projectDir,
11696
+ worktreesDir: _agentWorktreesDir,
11697
+ stateDir: path.join(config.stateDir, 'state'),
11698
+ raiseAttention: telegram
11699
+ ? (event) => {
11700
+ const slug = event.path.split('/').filter(Boolean).pop() ?? 'worktree';
11701
+ void telegram.createAttentionItem({
11702
+ id: `orphaned-work:${slug}:${event.workSig}`,
11703
+ title: `Stranded work in worktree "${slug}"`,
11704
+ summary: 'A build/session died with uncommitted changes — revive the worktree to finish, or discard.',
11705
+ description: `Worktree ${event.path} (branch ${event.branch ?? 'detached'}) has uncommitted changes ` +
11706
+ `but its owning session is gone. The work is still on disk` +
11707
+ `${event.preserved ? ' and a preservation patch was written' : ''}. ` +
11708
+ `Open the worktree to finish + commit, or discard if no longer needed.`,
11709
+ category: 'agent-health',
11710
+ priority: 'NORMAL',
11711
+ sourceContext: `orphaned-work:${slug}`,
11712
+ });
11713
+ }
11714
+ : () => { },
11715
+ now: () => Date.now(),
11716
+ }), { ...config.monitoring?.orphanedWorkSentinel, enabled: _orphanedWorkEnabled });
11717
+ orphanedWorkSentinel.start();
11718
+ if (_orphanedWorkEnabled) {
11719
+ console.log(pc.green(' OrphanedWorkSentinel enabled (silent-uncommitted-death backstop — signal-only)'));
11720
+ }
11721
+ }
11722
+ catch (e) {
11723
+ console.error(' OrphanedWorkSentinel wiring failed (non-fatal):', e instanceof Error ? e.message : String(e));
11724
+ }
11652
11725
  // ── McpProcessReaper (RESPONSIBLE-RESOURCE-USAGE — MCP-leak fix, Option B) ──
11653
11726
  // Reaps leaked MCP-server children (playwright-mcp / mcp-remote / instar
11654
11727
  // stdio) whose owning session is dead/stale or fully orphaned. Killing a
@@ -13004,6 +13077,32 @@ export async function startServer(options) {
13004
13077
  syncPageBytes: wsCfgP?.syncPageBytes,
13005
13078
  });
13006
13079
  },
13080
+ // Single-origin store-snapshot pull (multi-machine-replicated-store-
13081
+ // foundation §6.1/§6.3). The HOLDER serves a single-origin snapshot of
13082
+ // a store it AUTHORED — origin === THIS machine (the authenticated
13083
+ // recipient), so the §6.1 anti-forgery invariant holds end-to-end. The
13084
+ // build runs OFF the event loop in a worker (instar#1069); a flapping
13085
+ // peer is served the cached snapshot (breaker-gated, §6.3). In the
13086
+ // Step-3 substrate the registry is EMPTY, so loadOwnEntries returns no
13087
+ // contributing kinds and serveSnapshot answers 'no-entries' — the
13088
+ // holder declines and the caller falls back to a from-genesis tail
13089
+ // (the legacy behavior). A consumer PR (WS2.1) supplies the own-entry
13090
+ // loader for its kind(s), at which point this same handler serves real
13091
+ // data. `sender` is the recovering peer (for the breaker key); the
13092
+ // origin served is ALWAYS this machine (meshSelfId), never a value the
13093
+ // peer supplies — single-origin is structural, not trusted.
13094
+ 'state-snapshot': async (cmd, sender) => {
13095
+ const c = cmd;
13096
+ const store = c.request?.store;
13097
+ if (typeof store !== 'string' || !store)
13098
+ return { ok: false, reason: 'store required' };
13099
+ // Single-origin: we only ever serve OUR OWN authored records, so the
13100
+ // origin is this machine — never a peer-supplied field.
13101
+ const result = await storeSnapshotEngine.serveSnapshot(sender, meshSelfId, store);
13102
+ if (!result.ok)
13103
+ return { ok: false, reason: result.reason };
13104
+ return { ok: true, snapshot: result.snapshot, source: result.source, truncated: result.truncated };
13105
+ },
13007
13106
  place: ownAction,
13008
13107
  claim: ownAction,
13009
13108
  transfer: ownAction,
@@ -14536,7 +14635,7 @@ export async function startServer(options) {
14536
14635
  carrier: _topicProfileCarrier,
14537
14636
  }
14538
14637
  : null;
14539
- 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, cartographer: cartographer ?? undefined, coherenceGate: scopeVerifier, contextHierarchy, canonicalState, operationGate, sentinel, adaptiveTrust, memoryMonitor, orphanReaper, coherenceMonitor, commitmentTracker, subscriptionPool, quotaPoller, quotaAwareScheduler: _quotaAwareScheduler ?? undefined, proactiveSwapMonitor: _proactiveSwapMonitor ?? undefined, inUseAccountResolver, enrollmentWizard, semanticMemory, activitySentinel, rateLimitSentinel, releaseReadinessSentinel: releaseReadinessSentinel ?? undefined, greenPrAutoMerger: greenPrAutoMerger ?? undefined, guardLatchStore: guardLatchStore ?? undefined, messageRouter, summarySentinel, spawnManager, systemReviewer, capabilityMapper, selfKnowledgeTree, coverageAuditor, topicResumeMap: _topicResumeMap ?? undefined, topicProfile: _topicProfileCtx ?? 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, threadLog, threadMessageRecorder, warrantsReplyGate, collaborationSurfacer, threadResumeMap, topicLinkageHandler: topicLinkageHandler ?? undefined, threadlineRelayClient, threadlineReplyWaiters, listenerManager: listenerManager ?? undefined, a2aDeliveryTracker: a2aDeliveryTracker ?? undefined, responseReviewGate, messagingToneGate, outboundDedupGate, telemetryHeartbeat, pasteManager, featureRegistry, discoveryEvaluator, completionEvaluator, unifiedTrust, liveConfig, sharedStateLedger, ledgerSessionRegistry, worktreeManager, oidcEnrolledRepos: parallelDevConfig?.oidcEnrolledRepos, initiativeTracker, projectRoundRunner, projectDriftChecker, machineHeartbeat, machinePoolRegistry, getInboundQueue: () => _inboundQueue, meshRpcDispatcher, workingSetPullCoordinator, commitmentReplicaStore, preferenceReplicaStore, forwardCommitmentMutate, sessionOwnershipRegistry, topicPinStore: _topicPinStore ?? undefined, streamTicketStore: _streamTicketStore ?? undefined, poolStreamAllowRemoteInput: config.dashboard?.poolStream?.allowRemoteInput ?? false, poolStreamConnector: _poolStreamConnector ?? undefined, secretSync: _secretSyncHandle ?? undefined, meshSelfId: _meshSelfId ?? undefined, resolveRouterUrl: _resolveRouterUrl ?? undefined, resolvePeerUrls: _resolvePeerUrls ?? undefined, guardRegistry, listPoolMachines: _listPoolMachines ?? undefined, poolLink: _poolLink ?? 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, resumeQueue, resumeDrainer, operatorStopRecorder: recordOperatorStop, sleepWakeDetector, unjustifiedStopGate, stopGateDb, stopNotifier }); // Resolve the late-bound topic-operator getter (increment 2e): routing was
14638
+ 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, cartographer: cartographer ?? undefined, coherenceGate: scopeVerifier, contextHierarchy, canonicalState, operationGate, sentinel, adaptiveTrust, memoryMonitor, orphanReaper, coherenceMonitor, commitmentTracker, subscriptionPool, quotaPoller, quotaAwareScheduler: _quotaAwareScheduler ?? undefined, proactiveSwapMonitor: _proactiveSwapMonitor ?? undefined, inUseAccountResolver, enrollmentWizard, semanticMemory, activitySentinel, rateLimitSentinel, releaseReadinessSentinel: releaseReadinessSentinel ?? undefined, greenPrAutoMerger: greenPrAutoMerger ?? undefined, guardLatchStore: guardLatchStore ?? undefined, messageRouter, summarySentinel, spawnManager, systemReviewer, capabilityMapper, selfKnowledgeTree, coverageAuditor, topicResumeMap: _topicResumeMap ?? undefined, topicProfile: _topicProfileCtx ?? 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, threadLog, threadMessageRecorder, warrantsReplyGate, collaborationSurfacer, threadResumeMap, topicLinkageHandler: topicLinkageHandler ?? undefined, threadlineRelayClient, threadlineReplyWaiters, listenerManager: listenerManager ?? undefined, a2aDeliveryTracker: a2aDeliveryTracker ?? undefined, responseReviewGate, messagingToneGate, outboundDedupGate, telemetryHeartbeat, pasteManager, featureRegistry, discoveryEvaluator, completionEvaluator, unifiedTrust, liveConfig, sharedStateLedger, ledgerSessionRegistry, worktreeManager, oidcEnrolledRepos: parallelDevConfig?.oidcEnrolledRepos, initiativeTracker, projectRoundRunner, projectDriftChecker, machineHeartbeat, machinePoolRegistry, getInboundQueue: () => _inboundQueue, meshRpcDispatcher, workingSetPullCoordinator, commitmentReplicaStore, preferenceReplicaStore, forwardCommitmentMutate, sessionOwnershipRegistry, topicPinStore: _topicPinStore ?? undefined, streamTicketStore: _streamTicketStore ?? undefined, poolStreamAllowRemoteInput: config.dashboard?.poolStream?.allowRemoteInput ?? false, poolStreamConnector: _poolStreamConnector ?? undefined, secretSync: _secretSyncHandle ?? undefined, meshSelfId: _meshSelfId ?? undefined, resolveRouterUrl: _resolveRouterUrl ?? undefined, resolvePeerUrls: _resolvePeerUrls ?? undefined, guardRegistry, listPoolMachines: _listPoolMachines ?? undefined, poolLink: _poolLink ?? undefined, sessionPoolE2EResultStore, proxyCoordinator, topicIntentStore, topicIntentArcCheck, usherSignalStore, intelligence: sharedIntelligence ?? undefined, telegramBridgeConfig, telegramBridge: telegramBridge ?? undefined, threadlineObservability, briefDeps, workingMemory, taskFlowRegistry, threadlineFlowBridge, sessionReaper, agentWorktreeReaper, orphanedWorkSentinel, mcpProcessReaper, geminiLoopRunner, sleepController, agentActivityState, reapLog, resumeQueue, resumeDrainer, operatorStopRecorder: recordOperatorStop, sleepWakeDetector, unjustifiedStopGate, stopGateDb, stopNotifier }); // Resolve the late-bound topic-operator getter (increment 2e): routing was
14540
14639
  // wired before the server existed; from here on inbound binds use the
14541
14640
  // server's own store instance.
14542
14641
  _agentServerRef = server;