instar 1.2.32 → 1.2.34

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 (53) hide show
  1. package/dist/commands/server.d.ts.map +1 -1
  2. package/dist/commands/server.js +72 -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 +6 -0
  6. package/dist/config/ConfigDefaults.js.map +1 -1
  7. package/dist/core/MessagingToneGate.d.ts.map +1 -1
  8. package/dist/core/MessagingToneGate.js +30 -1
  9. package/dist/core/MessagingToneGate.js.map +1 -1
  10. package/dist/core/SessionManager.d.ts +7 -0
  11. package/dist/core/SessionManager.d.ts.map +1 -1
  12. package/dist/core/SessionManager.js +23 -0
  13. package/dist/core/SessionManager.js.map +1 -1
  14. package/dist/core/types.d.ts +30 -0
  15. package/dist/core/types.d.ts.map +1 -1
  16. package/dist/core/types.js.map +1 -1
  17. package/dist/monitoring/CompactionSentinel.d.ts +9 -0
  18. package/dist/monitoring/CompactionSentinel.d.ts.map +1 -1
  19. package/dist/monitoring/CompactionSentinel.js +9 -0
  20. package/dist/monitoring/CompactionSentinel.js.map +1 -1
  21. package/dist/monitoring/PresenceProxy.d.ts +9 -0
  22. package/dist/monitoring/PresenceProxy.d.ts.map +1 -1
  23. package/dist/monitoring/PresenceProxy.js +9 -0
  24. package/dist/monitoring/PresenceProxy.js.map +1 -1
  25. package/dist/monitoring/RateLimitSentinel.d.ts +140 -0
  26. package/dist/monitoring/RateLimitSentinel.d.ts.map +1 -0
  27. package/dist/monitoring/RateLimitSentinel.js +308 -0
  28. package/dist/monitoring/RateLimitSentinel.js.map +1 -0
  29. package/dist/monitoring/SessionWatchdog.d.ts +11 -0
  30. package/dist/monitoring/SessionWatchdog.d.ts.map +1 -1
  31. package/dist/monitoring/SessionWatchdog.js +47 -0
  32. package/dist/monitoring/SessionWatchdog.js.map +1 -1
  33. package/dist/monitoring/rateLimitDetection.d.ts +45 -0
  34. package/dist/monitoring/rateLimitDetection.d.ts.map +1 -0
  35. package/dist/monitoring/rateLimitDetection.js +71 -0
  36. package/dist/monitoring/rateLimitDetection.js.map +1 -0
  37. package/dist/server/AgentServer.d.ts +1 -0
  38. package/dist/server/AgentServer.d.ts.map +1 -1
  39. package/dist/server/AgentServer.js +1 -0
  40. package/dist/server/AgentServer.js.map +1 -1
  41. package/dist/server/CapabilityIndex.d.ts.map +1 -1
  42. package/dist/server/CapabilityIndex.js +1 -0
  43. package/dist/server/CapabilityIndex.js.map +1 -1
  44. package/dist/server/routes.d.ts +1 -0
  45. package/dist/server/routes.d.ts.map +1 -1
  46. package/dist/server/routes.js +24 -0
  47. package/dist/server/routes.js.map +1 -1
  48. package/package.json +1 -1
  49. package/src/data/builtin-manifest.json +48 -48
  50. package/upgrades/1.2.33.md +57 -0
  51. package/upgrades/1.2.34.md +84 -0
  52. package/upgrades/side-effects/context-death-stop-hook.md +100 -0
  53. package/upgrades/side-effects/rate-limit-internal-prefix.md +41 -0
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/commands/server.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAkQH,UAAU,YAAY;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb;2DACuD;IACvD,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAiqDD,wBAAsB,WAAW,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CA++KtE;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;AAkQH,UAAU,YAAY;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb;2DACuD;IACvD,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAiqDD,wBAAsB,WAAW,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAyjLtE;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"}
@@ -4581,7 +4581,68 @@ export async function startServer(options) {
4581
4581
  },
4582
4582
  // Defaults are production-sensible; override here only if needed.
4583
4583
  {});
4584
- sessionManager.setActiveRecoveryChecker(session => compactionSentinel.isRecoveryActive(session.tmuxSession));
4584
+ // ── RateLimitSentinel ─────────────────────────────────────────────
4585
+ // Rides out Anthropic's server-side capacity throttle ("Server is
4586
+ // temporarily limiting requests · not your usage limit") with
4587
+ // backoff-before-nudge + user check-ins, instead of the single immediate
4588
+ // nudge (quota burn) → silence the session used to fall into. See
4589
+ // docs/specs/rate-limit-sentinel.md.
4590
+ const { RateLimitSentinel } = await import('../monitoring/RateLimitSentinel.js');
4591
+ const getClaudeSessionIdForName = (sessionName) => sessionManager.listRunningSessions().find(s => s.tmuxSession === sessionName)?.claudeSessionId;
4592
+ // Neutral "continue" nudge — NOT the compaction-resume payload (which would
4593
+ // falsely tell the agent its memory was reset). Topic-tagged so InputGuard
4594
+ // accepts it.
4595
+ const rateLimitResume = async (sessionName) => {
4596
+ if (!sessionManager.isSessionAlive(sessionName))
4597
+ return false;
4598
+ const topicId = telegram?.getTopicForSession(sessionName);
4599
+ if (topicId == null)
4600
+ return false;
4601
+ const tagged = `[telegram:${topicId}] The temporary server throttle should have cleared — please continue where you left off.`;
4602
+ return sessionManager.injectMessage(sessionName, tagged);
4603
+ };
4604
+ // Route a user-facing notice for the session's topic (Telegram).
4605
+ const rateLimitNotify = async (sessionName, text) => {
4606
+ const topicId = telegram?.getTopicForSession(sessionName);
4607
+ if (topicId == null)
4608
+ return;
4609
+ const resp = await fetch(`http://localhost:${config.port}/telegram/reply/${topicId}`, {
4610
+ method: 'POST',
4611
+ headers: { 'Content-Type': 'application/json', 'Authorization': `Bearer ${config.authToken}` },
4612
+ body: JSON.stringify({ text }),
4613
+ });
4614
+ if (!resp.ok)
4615
+ throw new Error(`rate-limit notify failed: ${resp.status}`);
4616
+ };
4617
+ const rlsCfg = config.monitoring?.rateLimitSentinel ?? { enabled: true };
4618
+ const rateLimitSentinel = new RateLimitSentinel({
4619
+ resumeFn: rateLimitResume,
4620
+ notifyFn: rateLimitNotify,
4621
+ projectDir: config.projectDir,
4622
+ getClaudeSessionId: getClaudeSessionIdForName,
4623
+ }, rlsCfg);
4624
+ // Zombie-kill veto: compose BOTH sentinels (editing the single-predicate
4625
+ // checker — a second setActiveRecoveryChecker call would drop the
4626
+ // compaction veto).
4627
+ sessionManager.setActiveRecoveryChecker(session => compactionSentinel.isRecoveryActive(session.tmuxSession) ||
4628
+ rateLimitSentinel.isRecoveryActive(session.tmuxSession));
4629
+ // Bidirectional deferral — neither sentinel injects into a pane the other
4630
+ // already owns.
4631
+ rateLimitSentinel.setDeferIf(s => compactionSentinel.isRecoveryActive(s));
4632
+ compactionSentinel.setDeferIf(s => rateLimitSentinel.isRecoveryActive(s));
4633
+ // Triggers: watchdog poll + SessionManager idle-error emit. Both deduped by
4634
+ // the sentinel.
4635
+ if (watchdog) {
4636
+ watchdog.on('rate-limited', (sessionName) => {
4637
+ rateLimitSentinel.report(sessionName, 'watchdog-poll');
4638
+ });
4639
+ }
4640
+ sessionManager.on('rateLimitedAtIdle', (sessionName) => {
4641
+ rateLimitSentinel.report(sessionName, 'idle-error');
4642
+ });
4643
+ if (rlsCfg.enabled !== false) {
4644
+ console.log(pc.green(' RateLimitSentinel enabled (server-throttle backoff + check-ins)'));
4645
+ }
4585
4646
  console.log(pc.green(' CompactionSentinel enabled (verified recovery lifecycle)'));
4586
4647
  // Trigger 1: PreCompact hook event — report to sentinel.
4587
4648
  hookEventReceiver.on('PreCompact', () => {
@@ -5018,6 +5079,15 @@ export async function startServer(options) {
5018
5079
  // BUILD-STALL-VISIBILITY-SPEC Fix 2 — suppress generic standby when
5019
5080
  // a /build heartbeat landed recently on this topic.
5020
5081
  hasRecentBuildHeartbeat: (topicId, windowMs) => proxyCoordinator.hasRecentBuildHeartbeat(topicId, windowMs),
5082
+ // Suppress ALL tiers while the RateLimitSentinel owns the voice for
5083
+ // this topic's session (server-throttle recovery).
5084
+ hasActiveRateLimitRecovery: (topicId) => {
5085
+ const slackChId = slackProxyChannelMap.get(topicId);
5086
+ const sessionName = (slackChId && _slackAdapter)
5087
+ ? _slackAdapter.getSessionForChannel(slackChId)
5088
+ : telegram.getSessionForTopic(topicId);
5089
+ return sessionName ? rateLimitSentinel.isRecoveryActive(sessionName) : false;
5090
+ },
5021
5091
  // Shared LLM queue (interactive lane) — cross-monitor concurrency
5022
5092
  // and daily-spend-cap with PromiseBeacon.
5023
5093
  sharedLlmQueue,
@@ -6612,7 +6682,7 @@ export async function startServer(options) {
6612
6682
  },
6613
6683
  });
6614
6684
  }
6615
- 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, messageRouter, summarySentinel, spawnManager, systemReviewer, capabilityMapper, selfKnowledgeTree, coverageAuditor, topicResumeMap: _topicResumeMap ?? undefined, sessionRefresh: _sessionRefresh ?? undefined, autonomyManager, trustElevationTracker, autonomousEvolution, coordinator: coordinator.enabled ? coordinator : undefined, localSigningKeyPem, whatsapp: whatsappAdapter, slack: slackAdapter, imessage: imessageAdapter, whatsappBusinessBackend, messageBridge, hookEventReceiver, worktreeMonitor, subagentTracker, instructionsVerifier, handshakeManager: threadlineHandshake, threadlineRouter, threadResumeMap, topicLinkageHandler: topicLinkageHandler ?? undefined, threadlineRelayClient, threadlineReplyWaiters, listenerManager: listenerManager ?? undefined, responseReviewGate, messagingToneGate, outboundDedupGate, telemetryHeartbeat, pasteManager, featureRegistry, discoveryEvaluator, unifiedTrust, liveConfig, sharedStateLedger, ledgerSessionRegistry, worktreeManager, oidcEnrolledRepos: parallelDevConfig?.oidcEnrolledRepos, initiativeTracker, projectRoundRunner, projectDriftChecker, machineHeartbeat, proxyCoordinator, telegramBridgeConfig, telegramBridge: telegramBridge ?? undefined, threadlineObservability, workingMemory, taskFlowRegistry, threadlineFlowBridge });
6685
+ 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, messageRouter, summarySentinel, spawnManager, systemReviewer, capabilityMapper, selfKnowledgeTree, coverageAuditor, topicResumeMap: _topicResumeMap ?? undefined, sessionRefresh: _sessionRefresh ?? undefined, autonomyManager, trustElevationTracker, autonomousEvolution, coordinator: coordinator.enabled ? coordinator : undefined, localSigningKeyPem, whatsapp: whatsappAdapter, slack: slackAdapter, imessage: imessageAdapter, whatsappBusinessBackend, messageBridge, hookEventReceiver, worktreeMonitor, subagentTracker, instructionsVerifier, handshakeManager: threadlineHandshake, threadlineRouter, threadResumeMap, topicLinkageHandler: topicLinkageHandler ?? undefined, threadlineRelayClient, threadlineReplyWaiters, listenerManager: listenerManager ?? undefined, responseReviewGate, messagingToneGate, outboundDedupGate, telemetryHeartbeat, pasteManager, featureRegistry, discoveryEvaluator, unifiedTrust, liveConfig, sharedStateLedger, ledgerSessionRegistry, worktreeManager, oidcEnrolledRepos: parallelDevConfig?.oidcEnrolledRepos, initiativeTracker, projectRoundRunner, projectDriftChecker, machineHeartbeat, proxyCoordinator, telegramBridgeConfig, telegramBridge: telegramBridge ?? undefined, threadlineObservability, workingMemory, taskFlowRegistry, threadlineFlowBridge });
6616
6686
  await server.start();
6617
6687
  void taskFlowSweeper;
6618
6688
  void taskFlowDueWaker;