instar 1.3.396 → 1.3.398

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 (33) hide show
  1. package/dist/commands/server.d.ts.map +1 -1
  2. package/dist/commands/server.js +41 -2
  3. package/dist/commands/server.js.map +1 -1
  4. package/dist/core/MeshRpc.d.ts +3 -0
  5. package/dist/core/MeshRpc.d.ts.map +1 -1
  6. package/dist/core/MeshRpc.js +1 -0
  7. package/dist/core/MeshRpc.js.map +1 -1
  8. package/dist/core/types.d.ts +10 -0
  9. package/dist/core/types.d.ts.map +1 -1
  10. package/dist/core/types.js.map +1 -1
  11. package/dist/monitoring/SessionReaper.d.ts +4 -0
  12. package/dist/monitoring/SessionReaper.d.ts.map +1 -1
  13. package/dist/monitoring/SessionReaper.js +8 -1
  14. package/dist/monitoring/SessionReaper.js.map +1 -1
  15. package/dist/server/AgentServer.d.ts +9 -0
  16. package/dist/server/AgentServer.d.ts.map +1 -1
  17. package/dist/server/AgentServer.js +6 -0
  18. package/dist/server/AgentServer.js.map +1 -1
  19. package/dist/server/StreamTicketStore.d.ts +54 -0
  20. package/dist/server/StreamTicketStore.d.ts.map +1 -0
  21. package/dist/server/StreamTicketStore.js +147 -0
  22. package/dist/server/StreamTicketStore.js.map +1 -0
  23. package/dist/server/WebSocketManager.d.ts +19 -0
  24. package/dist/server/WebSocketManager.d.ts.map +1 -1
  25. package/dist/server/WebSocketManager.js +72 -2
  26. package/dist/server/WebSocketManager.js.map +1 -1
  27. package/package.json +1 -1
  28. package/src/data/builtin-manifest.json +3 -3
  29. package/src/data/state-coherence-registry.json +13 -1
  30. package/upgrades/1.3.397.md +43 -0
  31. package/upgrades/1.3.398.md +30 -0
  32. package/upgrades/side-effects/dashboard-stream-phase2a-serving.md +69 -0
  33. package/upgrades/side-effects/reaper-transcript-projectdir.md +46 -0
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/commands/server.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAaH,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAQ3D,OAAO,EAAE,eAAe,EAAiC,MAAM,iCAAiC,CAAC;AAuBjG,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAGvD,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAiG7D,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AA6JtD,UAAU,YAAY;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb;2DACuD;IACvD,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAs4BD,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,GAC/F,IAAI,CAyUN;AA2lBD,wBAAsB,WAAW,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAk1TtE;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;AAaH,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAQ3D,OAAO,EAAE,eAAe,EAAiC,MAAM,iCAAiC,CAAC;AAuBjG,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAGvD,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAiG7D,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AA6JtD,UAAU,YAAY;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb;2DACuD;IACvD,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AA04BD,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,GAC/F,IAAI,CAyUN;AA2lBD,wBAAsB,WAAW,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAm3TtE;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"}
@@ -337,6 +337,10 @@ let _resolvePeerUrls = null;
337
337
  let _topicPinStore = null;
338
338
  /** Cross-machine secret-sync (spec Phase 4): route-facing handle (push lever + read-only status). */
339
339
  let _secretSyncHandle = null;
340
+ /** Pool Dashboard Streaming (POOL-DASHBOARD-STREAM-SPEC §2.3): shared single-use
341
+ * ticket store — minted by the `pool-stream-ticket` mesh verb, consumed by the
342
+ * WebSocketManager's /pool-stream upgrade. Constructed in the mesh-setup block. */
343
+ let _streamTicketStore = null;
340
344
  /** Recognize + apply a "move/run this on <nickname>" relocation on inbound; returns handled=true when the message WAS a relocation command (so it must not also be dispatched). */
341
345
  let _tryNicknameRelocation = null;
342
346
  /** Per-topic framework override (claude-code | codex-cli). Populated from
@@ -9342,6 +9346,10 @@ export async function startServer(options) {
9342
9346
  listRunningSessions: () => sessionManager.listRunningSessions(),
9343
9347
  captureOutput: (s, n) => sessionManager.captureOutput(s, n) ?? '',
9344
9348
  frameworkForSession: (s) => sessionManager.frameworkForSession(s),
9349
+ // The agent's session-launch cwd — Claude Code encodes it into the transcript
9350
+ // path so the reaper's fallback probe() can resolve + verify idle. Without this
9351
+ // the probe used '' and every transcript read as unresolved (kept everything).
9352
+ transcriptProjectDir: () => config.projectDir,
9345
9353
  pressure: () => {
9346
9354
  const total = _os.totalmem();
9347
9355
  const freePct = total > 0 ? (_os.freemem() / total) * 100 : 100;
@@ -9544,7 +9552,11 @@ export async function startServer(options) {
9544
9552
  snapshot: (session) => {
9545
9553
  const framework = session.framework ?? sessionManager.frameworkForSession(session.tmuxSession) ?? 'claude-code';
9546
9554
  const sessionId = framework === 'claude-code' ? (session.claudeSessionId ?? '') : '';
9547
- const tp = probeTranscript({ framework, sessionId, projectDir: '' });
9555
+ // Real projectDir (the agent's session-launch cwd) so the transcript
9556
+ // resolves; '' would encode to an empty dir that never exists →
9557
+ // always-unresolved (the bug that made the reaper's idle-proof never work).
9558
+ // See SessionReaper.probe().
9559
+ const tp = probeTranscript({ framework, sessionId, projectDir: config.projectDir });
9548
9560
  // Tail hash: read the last progressFloorBytes so a heartbeat-byte append
9549
9561
  // (same tail) is NOT counted as a meaningful advance.
9550
9562
  let tailHash = null;
@@ -9870,6 +9882,20 @@ export async function startServer(options) {
9870
9882
  ?? (meshIdMgr?.hasIdentity() ? meshIdMgr.loadIdentity().machineId : null);
9871
9883
  if (meshIdMgr && meshSelfId) {
9872
9884
  const meshClockToleranceMs = config.multiMachine?.sessionPool?.meshRpcClockToleranceMs ?? 30000;
9885
+ // Pool Dashboard Streaming (§2.3): the shared single-use ticket store —
9886
+ // the `pool-stream-ticket` verb mints into it; the WS /pool-stream
9887
+ // upgrade consumes from it. Crypto-random tickets; persisted so a
9888
+ // captured ticket can't replay across a restart.
9889
+ {
9890
+ const stsMod = await import('../server/StreamTicketStore.js');
9891
+ const cryptoMod = await import('node:crypto');
9892
+ _streamTicketStore = new stsMod.StreamTicketStore({
9893
+ filePath: path.join(config.stateDir, 'state', 'stream-tickets.json'),
9894
+ now: () => Date.now(),
9895
+ mintId: () => cryptoMod.randomBytes(32).toString('hex'),
9896
+ logger: (m) => console.log(pc.dim(` ${m}`)),
9897
+ });
9898
+ }
9873
9899
  const seenMeshNonces = new Map(); // `${sender}:${nonce}` → ts, age-pruned
9874
9900
  const meshPruneMs = Math.max(meshClockToleranceMs * 4, 120_000);
9875
9901
  // SessionOwnership registry (§L3) — in-memory store (single-machine correct;
@@ -10119,6 +10145,19 @@ export async function startServer(options) {
10119
10145
  : undefined;
10120
10146
  return { ...base, journalAdvert, ...(commitmentsAdvert ? { commitmentsAdvert } : {}) };
10121
10147
  },
10148
+ // Pool Dashboard Streaming (§2.3): mint a single-use bearer ticket
10149
+ // for the authenticated peer so it may open a /pool-stream WS to
10150
+ // watch `session`. verifyEnvelope already proved the peer's identity;
10151
+ // the ticket is bound to that sender and consumed once on upgrade.
10152
+ 'pool-stream-ticket': (cmd, sender) => {
10153
+ const c = cmd;
10154
+ if (!_streamTicketStore)
10155
+ return { ok: false, reason: 'pool-stream disabled' };
10156
+ if (!c.session || typeof c.session !== 'string')
10157
+ return { ok: false, reason: 'session required' };
10158
+ const minted = _streamTicketStore.mint(sender);
10159
+ return { ok: true, ticket: minted.ticket, expiresAtMs: minted.expiresAtMs };
10160
+ },
10122
10161
  // COHERENCE-JOURNAL-SPEC §3.4 — always-registered journal-sync verb
10123
10162
  // (harmless when no peer sends): serve our OWN stream on `request`
10124
10163
  // (first-hop only), durably apply an inbound `batch`. The RBAC gate
@@ -11113,7 +11152,7 @@ export async function startServer(options) {
11113
11152
  catch (err) {
11114
11153
  console.log(pc.dim(` [session-pool] rollout gate not wired: ${err instanceof Error ? err.message : String(err)}`));
11115
11154
  }
11116
- 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, subscriptionPool, quotaPoller, 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, a2aDeliveryTracker: a2aDeliveryTracker ?? 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, forwardCommitmentMutate, 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 });
11155
+ 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, subscriptionPool, quotaPoller, 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, a2aDeliveryTracker: a2aDeliveryTracker ?? 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, forwardCommitmentMutate, sessionOwnershipRegistry, topicPinStore: _topicPinStore ?? undefined, streamTicketStore: _streamTicketStore ?? undefined, poolStreamAllowRemoteInput: config.dashboard?.poolStream?.allowRemoteInput ?? false, 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 });
11117
11156
  // Resolve the late-bound topic-operator getter (increment 2e): routing was
11118
11157
  // wired before the server existed; from here on inbound binds use the
11119
11158
  // server's own store instance.