instar 0.28.76 → 0.28.78

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 (448) hide show
  1. package/dashboard/index.html +486 -0
  2. package/dist/cli.js +5 -8
  3. package/dist/cli.js.map +1 -1
  4. package/dist/commands/discovery.d.ts.map +1 -1
  5. package/dist/commands/discovery.js +2 -2
  6. package/dist/commands/discovery.js.map +1 -1
  7. package/dist/commands/init.d.ts.map +1 -1
  8. package/dist/commands/init.js +22 -4
  9. package/dist/commands/init.js.map +1 -1
  10. package/dist/commands/job.d.ts.map +1 -1
  11. package/dist/commands/job.js +2 -2
  12. package/dist/commands/job.js.map +1 -1
  13. package/dist/commands/ledgerCleanup.d.ts.map +1 -1
  14. package/dist/commands/ledgerCleanup.js +2 -2
  15. package/dist/commands/ledgerCleanup.js.map +1 -1
  16. package/dist/commands/listener.d.ts.map +1 -1
  17. package/dist/commands/listener.js +7 -12
  18. package/dist/commands/listener.js.map +1 -1
  19. package/dist/commands/nuke.d.ts.map +1 -1
  20. package/dist/commands/nuke.js +11 -21
  21. package/dist/commands/nuke.js.map +1 -1
  22. package/dist/commands/server.d.ts.map +1 -1
  23. package/dist/commands/server.js +79 -5
  24. package/dist/commands/server.js.map +1 -1
  25. package/dist/commands/setup.d.ts.map +1 -1
  26. package/dist/commands/setup.js +11 -15
  27. package/dist/commands/setup.js.map +1 -1
  28. package/dist/commands/slack-cli.d.ts.map +1 -1
  29. package/dist/commands/slack-cli.js +5 -8
  30. package/dist/commands/slack-cli.js.map +1 -1
  31. package/dist/commands/whatsapp.d.ts.map +1 -1
  32. package/dist/commands/whatsapp.js +2 -2
  33. package/dist/commands/whatsapp.js.map +1 -1
  34. package/dist/commands/worktree.d.ts.map +1 -1
  35. package/dist/commands/worktree.js +2 -2
  36. package/dist/commands/worktree.js.map +1 -1
  37. package/dist/core/AgentConnector.d.ts.map +1 -1
  38. package/dist/core/AgentConnector.js +9 -10
  39. package/dist/core/AgentConnector.js.map +1 -1
  40. package/dist/core/AgentRegistry.d.ts.map +1 -1
  41. package/dist/core/AgentRegistry.js +3 -4
  42. package/dist/core/AgentRegistry.js.map +1 -1
  43. package/dist/core/AutoDispatcher.d.ts.map +1 -1
  44. package/dist/core/AutoDispatcher.js +2 -2
  45. package/dist/core/AutoDispatcher.js.map +1 -1
  46. package/dist/core/AutoUpdater.d.ts.map +1 -1
  47. package/dist/core/AutoUpdater.js +2 -2
  48. package/dist/core/AutoUpdater.js.map +1 -1
  49. package/dist/core/AutonomousEvolution.d.ts.map +1 -1
  50. package/dist/core/AutonomousEvolution.js +2 -2
  51. package/dist/core/AutonomousEvolution.js.map +1 -1
  52. package/dist/core/BackupManager.d.ts.map +1 -1
  53. package/dist/core/BackupManager.js +2 -2
  54. package/dist/core/BackupManager.js.map +1 -1
  55. package/dist/core/BranchManager.d.ts.map +1 -1
  56. package/dist/core/BranchManager.js +3 -3
  57. package/dist/core/BranchManager.js.map +1 -1
  58. package/dist/core/CaffeinateManager.d.ts.map +1 -1
  59. package/dist/core/CaffeinateManager.js +2 -2
  60. package/dist/core/CaffeinateManager.js.map +1 -1
  61. package/dist/core/DeferredDispatchTracker.d.ts.map +1 -1
  62. package/dist/core/DeferredDispatchTracker.js +2 -2
  63. package/dist/core/DeferredDispatchTracker.js.map +1 -1
  64. package/dist/core/DispatchManager.d.ts.map +1 -1
  65. package/dist/core/DispatchManager.js +3 -4
  66. package/dist/core/DispatchManager.js.map +1 -1
  67. package/dist/core/EvolutionManager.d.ts.map +1 -1
  68. package/dist/core/EvolutionManager.js +2 -2
  69. package/dist/core/EvolutionManager.js.map +1 -1
  70. package/dist/core/ExecutionJournal.d.ts.map +1 -1
  71. package/dist/core/ExecutionJournal.js +2 -2
  72. package/dist/core/ExecutionJournal.js.map +1 -1
  73. package/dist/core/FeedbackManager.d.ts.map +1 -1
  74. package/dist/core/FeedbackManager.js +2 -2
  75. package/dist/core/FeedbackManager.js.map +1 -1
  76. package/dist/core/FileClassifier.d.ts.map +1 -1
  77. package/dist/core/FileClassifier.js +8 -17
  78. package/dist/core/FileClassifier.js.map +1 -1
  79. package/dist/core/ForegroundRestartWatcher.d.ts.map +1 -1
  80. package/dist/core/ForegroundRestartWatcher.js +3 -4
  81. package/dist/core/ForegroundRestartWatcher.js.map +1 -1
  82. package/dist/core/GitStateManager.d.ts.map +1 -1
  83. package/dist/core/GitStateManager.js +3 -12
  84. package/dist/core/GitStateManager.js.map +1 -1
  85. package/dist/core/GitSync.d.ts.map +1 -1
  86. package/dist/core/GitSync.js +6 -6
  87. package/dist/core/GitSync.js.map +1 -1
  88. package/dist/core/GlobalInstallCleanup.d.ts.map +1 -1
  89. package/dist/core/GlobalInstallCleanup.js +3 -4
  90. package/dist/core/GlobalInstallCleanup.js.map +1 -1
  91. package/dist/core/GlobalSecretStore.d.ts.map +1 -1
  92. package/dist/core/GlobalSecretStore.js +3 -4
  93. package/dist/core/GlobalSecretStore.js.map +1 -1
  94. package/dist/core/HandoffManager.d.ts.map +1 -1
  95. package/dist/core/HandoffManager.js +5 -5
  96. package/dist/core/HandoffManager.js.map +1 -1
  97. package/dist/core/JargonDetector.d.ts +28 -0
  98. package/dist/core/JargonDetector.d.ts.map +1 -0
  99. package/dist/core/JargonDetector.js +59 -0
  100. package/dist/core/JargonDetector.js.map +1 -0
  101. package/dist/core/LedgerSessionRegistry.d.ts.map +1 -1
  102. package/dist/core/LedgerSessionRegistry.js +2 -2
  103. package/dist/core/LedgerSessionRegistry.js.map +1 -1
  104. package/dist/core/MachineIdentity.d.ts.map +1 -1
  105. package/dist/core/MachineIdentity.js +2 -2
  106. package/dist/core/MachineIdentity.js.map +1 -1
  107. package/dist/core/MessagingToneGate.d.ts +42 -5
  108. package/dist/core/MessagingToneGate.d.ts.map +1 -1
  109. package/dist/core/MessagingToneGate.js +40 -6
  110. package/dist/core/MessagingToneGate.js.map +1 -1
  111. package/dist/core/ParallelDevWiring.d.ts.map +1 -1
  112. package/dist/core/ParallelDevWiring.js +3 -6
  113. package/dist/core/ParallelDevWiring.js.map +1 -1
  114. package/dist/core/PostUpdateMigrator.d.ts +26 -0
  115. package/dist/core/PostUpdateMigrator.d.ts.map +1 -1
  116. package/dist/core/PostUpdateMigrator.js +249 -46
  117. package/dist/core/PostUpdateMigrator.js.map +1 -1
  118. package/dist/core/ProjectMapper.d.ts.map +1 -1
  119. package/dist/core/ProjectMapper.js +5 -11
  120. package/dist/core/ProjectMapper.js.map +1 -1
  121. package/dist/core/RelationshipManager.d.ts.map +1 -1
  122. package/dist/core/RelationshipManager.js +4 -5
  123. package/dist/core/RelationshipManager.js.map +1 -1
  124. package/dist/core/SafeGitExecutor.d.ts +11 -5
  125. package/dist/core/SafeGitExecutor.d.ts.map +1 -1
  126. package/dist/core/SafeGitExecutor.js +87 -1
  127. package/dist/core/SafeGitExecutor.js.map +1 -1
  128. package/dist/core/ScopeVerifier.d.ts.map +1 -1
  129. package/dist/core/ScopeVerifier.js +3 -6
  130. package/dist/core/ScopeVerifier.js.map +1 -1
  131. package/dist/core/SecretStore.d.ts.map +1 -1
  132. package/dist/core/SecretStore.js +2 -2
  133. package/dist/core/SecretStore.js.map +1 -1
  134. package/dist/core/SharedStateLedger.d.ts.map +1 -1
  135. package/dist/core/SharedStateLedger.js +2 -2
  136. package/dist/core/SharedStateLedger.js.map +1 -1
  137. package/dist/core/SoulManager.d.ts.map +1 -1
  138. package/dist/core/SoulManager.js +3 -4
  139. package/dist/core/SoulManager.js.map +1 -1
  140. package/dist/core/StateManager.d.ts.map +1 -1
  141. package/dist/core/StateManager.js +4 -6
  142. package/dist/core/StateManager.js.map +1 -1
  143. package/dist/core/SyncOrchestrator.d.ts.map +1 -1
  144. package/dist/core/SyncOrchestrator.js +6 -7
  145. package/dist/core/SyncOrchestrator.js.map +1 -1
  146. package/dist/core/UpdateChecker.d.ts.map +1 -1
  147. package/dist/core/UpdateChecker.js +3 -4
  148. package/dist/core/UpdateChecker.js.map +1 -1
  149. package/dist/core/UpgradeGuideProcessor.d.ts.map +1 -1
  150. package/dist/core/UpgradeGuideProcessor.js +3 -4
  151. package/dist/core/UpgradeGuideProcessor.js.map +1 -1
  152. package/dist/core/WorktreeManager.d.ts.map +1 -1
  153. package/dist/core/WorktreeManager.js +9 -14
  154. package/dist/core/WorktreeManager.js.map +1 -1
  155. package/dist/knowledge/KnowledgeManager.d.ts.map +1 -1
  156. package/dist/knowledge/KnowledgeManager.js +2 -2
  157. package/dist/knowledge/KnowledgeManager.js.map +1 -1
  158. package/dist/lifeline/ServerSupervisor.d.ts +28 -0
  159. package/dist/lifeline/ServerSupervisor.d.ts.map +1 -1
  160. package/dist/lifeline/ServerSupervisor.js +171 -73
  161. package/dist/lifeline/ServerSupervisor.js.map +1 -1
  162. package/dist/lifeline/TelegramLifeline.d.ts.map +1 -1
  163. package/dist/lifeline/TelegramLifeline.js +10 -4
  164. package/dist/lifeline/TelegramLifeline.js.map +1 -1
  165. package/dist/lifeline/detectLaunchdSupervised.d.ts +43 -0
  166. package/dist/lifeline/detectLaunchdSupervised.d.ts.map +1 -0
  167. package/dist/lifeline/detectLaunchdSupervised.js +106 -0
  168. package/dist/lifeline/detectLaunchdSupervised.js.map +1 -0
  169. package/dist/lifeline/droppedMessages.d.ts.map +1 -1
  170. package/dist/lifeline/droppedMessages.js +2 -2
  171. package/dist/lifeline/droppedMessages.js.map +1 -1
  172. package/dist/memory/EpisodicMemory.d.ts.map +1 -1
  173. package/dist/memory/EpisodicMemory.js +2 -2
  174. package/dist/memory/EpisodicMemory.js.map +1 -1
  175. package/dist/memory/TopicMemory.d.ts.map +1 -1
  176. package/dist/memory/TopicMemory.js +5 -8
  177. package/dist/memory/TopicMemory.js.map +1 -1
  178. package/dist/messaging/AgentTokenManager.d.ts.map +1 -1
  179. package/dist/messaging/AgentTokenManager.js +2 -2
  180. package/dist/messaging/AgentTokenManager.js.map +1 -1
  181. package/dist/messaging/DropPickup.d.ts.map +1 -1
  182. package/dist/messaging/DropPickup.js +2 -2
  183. package/dist/messaging/DropPickup.js.map +1 -1
  184. package/dist/messaging/GitSyncTransport.d.ts.map +1 -1
  185. package/dist/messaging/GitSyncTransport.js +4 -6
  186. package/dist/messaging/GitSyncTransport.js.map +1 -1
  187. package/dist/messaging/MessageStore.d.ts.map +1 -1
  188. package/dist/messaging/MessageStore.js +3 -4
  189. package/dist/messaging/MessageStore.js.map +1 -1
  190. package/dist/messaging/TelegramAdapter.d.ts.map +1 -1
  191. package/dist/messaging/TelegramAdapter.js +5 -8
  192. package/dist/messaging/TelegramAdapter.js.map +1 -1
  193. package/dist/messaging/backends/BaileysBackend.d.ts.map +1 -1
  194. package/dist/messaging/backends/BaileysBackend.js +3 -4
  195. package/dist/messaging/backends/BaileysBackend.js.map +1 -1
  196. package/dist/messaging/local-tone-check.d.ts +61 -0
  197. package/dist/messaging/local-tone-check.d.ts.map +1 -0
  198. package/dist/messaging/local-tone-check.js +78 -0
  199. package/dist/messaging/local-tone-check.js.map +1 -0
  200. package/dist/messaging/pending-relay-store.d.ts +153 -0
  201. package/dist/messaging/pending-relay-store.d.ts.map +1 -0
  202. package/dist/messaging/pending-relay-store.js +351 -0
  203. package/dist/messaging/pending-relay-store.js.map +1 -0
  204. package/dist/messaging/secret-patterns.d.ts +35 -0
  205. package/dist/messaging/secret-patterns.d.ts.map +1 -0
  206. package/dist/messaging/secret-patterns.js +70 -0
  207. package/dist/messaging/secret-patterns.js.map +1 -0
  208. package/dist/messaging/shared/EncryptedAuthStore.d.ts.map +1 -1
  209. package/dist/messaging/shared/EncryptedAuthStore.js +3 -4
  210. package/dist/messaging/shared/EncryptedAuthStore.js.map +1 -1
  211. package/dist/messaging/shared/MessageLogger.d.ts.map +1 -1
  212. package/dist/messaging/shared/MessageLogger.js +2 -2
  213. package/dist/messaging/shared/MessageLogger.js.map +1 -1
  214. package/dist/messaging/shared/PrivacyConsent.d.ts.map +1 -1
  215. package/dist/messaging/shared/PrivacyConsent.js +2 -2
  216. package/dist/messaging/shared/PrivacyConsent.js.map +1 -1
  217. package/dist/messaging/shared/SessionChannelRegistry.d.ts.map +1 -1
  218. package/dist/messaging/shared/SessionChannelRegistry.js +2 -2
  219. package/dist/messaging/shared/SessionChannelRegistry.js.map +1 -1
  220. package/dist/messaging/system-templates.d.ts +87 -0
  221. package/dist/messaging/system-templates.d.ts.map +1 -0
  222. package/dist/messaging/system-templates.js +236 -0
  223. package/dist/messaging/system-templates.js.map +1 -0
  224. package/dist/messaging/whoami-cache.d.ts +66 -0
  225. package/dist/messaging/whoami-cache.d.ts.map +1 -0
  226. package/dist/messaging/whoami-cache.js +149 -0
  227. package/dist/messaging/whoami-cache.js.map +1 -0
  228. package/dist/moltbridge/ProfileCompiler.d.ts.map +1 -1
  229. package/dist/moltbridge/ProfileCompiler.js +13 -7
  230. package/dist/moltbridge/ProfileCompiler.js.map +1 -1
  231. package/dist/monitoring/CommitmentTracker.d.ts.map +1 -1
  232. package/dist/monitoring/CommitmentTracker.js +2 -2
  233. package/dist/monitoring/CommitmentTracker.js.map +1 -1
  234. package/dist/monitoring/CredentialProvider.d.ts.map +1 -1
  235. package/dist/monitoring/CredentialProvider.js +2 -2
  236. package/dist/monitoring/CredentialProvider.js.map +1 -1
  237. package/dist/monitoring/DegradationReporter.d.ts +41 -0
  238. package/dist/monitoring/DegradationReporter.d.ts.map +1 -1
  239. package/dist/monitoring/DegradationReporter.js +96 -4
  240. package/dist/monitoring/DegradationReporter.js.map +1 -1
  241. package/dist/monitoring/HealthChecker.d.ts.map +1 -1
  242. package/dist/monitoring/HealthChecker.js +2 -2
  243. package/dist/monitoring/HealthChecker.js.map +1 -1
  244. package/dist/monitoring/HookEventReceiver.d.ts.map +1 -1
  245. package/dist/monitoring/HookEventReceiver.js +2 -2
  246. package/dist/monitoring/HookEventReceiver.js.map +1 -1
  247. package/dist/monitoring/InstructionsVerifier.d.ts.map +1 -1
  248. package/dist/monitoring/InstructionsVerifier.js +2 -2
  249. package/dist/monitoring/InstructionsVerifier.js.map +1 -1
  250. package/dist/monitoring/PresenceProxy.d.ts.map +1 -1
  251. package/dist/monitoring/PresenceProxy.js +5 -8
  252. package/dist/monitoring/PresenceProxy.js.map +1 -1
  253. package/dist/monitoring/QuotaTracker.d.ts.map +1 -1
  254. package/dist/monitoring/QuotaTracker.js +2 -2
  255. package/dist/monitoring/QuotaTracker.js.map +1 -1
  256. package/dist/monitoring/SessionMigrator.d.ts.map +1 -1
  257. package/dist/monitoring/SessionMigrator.js +2 -2
  258. package/dist/monitoring/SessionMigrator.js.map +1 -1
  259. package/dist/monitoring/SessionRecovery.d.ts.map +1 -1
  260. package/dist/monitoring/SessionRecovery.js +2 -2
  261. package/dist/monitoring/SessionRecovery.js.map +1 -1
  262. package/dist/monitoring/TelemetryAuth.d.ts.map +1 -1
  263. package/dist/monitoring/TelemetryAuth.js +3 -4
  264. package/dist/monitoring/TelemetryAuth.js.map +1 -1
  265. package/dist/monitoring/TokenLedger.d.ts +130 -0
  266. package/dist/monitoring/TokenLedger.d.ts.map +1 -0
  267. package/dist/monitoring/TokenLedger.js +523 -0
  268. package/dist/monitoring/TokenLedger.js.map +1 -0
  269. package/dist/monitoring/TokenLedgerPoller.d.ts +26 -0
  270. package/dist/monitoring/TokenLedgerPoller.d.ts.map +1 -0
  271. package/dist/monitoring/TokenLedgerPoller.js +44 -0
  272. package/dist/monitoring/TokenLedgerPoller.js.map +1 -0
  273. package/dist/monitoring/TriageOrchestrator.d.ts.map +1 -1
  274. package/dist/monitoring/TriageOrchestrator.js +3 -4
  275. package/dist/monitoring/TriageOrchestrator.js.map +1 -1
  276. package/dist/monitoring/WorktreeReaper.d.ts.map +1 -1
  277. package/dist/monitoring/WorktreeReaper.js +5 -7
  278. package/dist/monitoring/WorktreeReaper.js.map +1 -1
  279. package/dist/monitoring/delivery-failure-sentinel/recovery-policy.d.ts +83 -0
  280. package/dist/monitoring/delivery-failure-sentinel/recovery-policy.d.ts.map +1 -0
  281. package/dist/monitoring/delivery-failure-sentinel/recovery-policy.js +218 -0
  282. package/dist/monitoring/delivery-failure-sentinel/recovery-policy.js.map +1 -0
  283. package/dist/monitoring/delivery-failure-sentinel.d.ts +177 -0
  284. package/dist/monitoring/delivery-failure-sentinel.d.ts.map +1 -0
  285. package/dist/monitoring/delivery-failure-sentinel.js +598 -0
  286. package/dist/monitoring/delivery-failure-sentinel.js.map +1 -0
  287. package/dist/monitoring/probes/PlatformProbe.d.ts.map +1 -1
  288. package/dist/monitoring/probes/PlatformProbe.js +3 -4
  289. package/dist/monitoring/probes/PlatformProbe.js.map +1 -1
  290. package/dist/monitoring/templates-drift-verifier.d.ts +109 -0
  291. package/dist/monitoring/templates-drift-verifier.d.ts.map +1 -0
  292. package/dist/monitoring/templates-drift-verifier.js +324 -0
  293. package/dist/monitoring/templates-drift-verifier.js.map +1 -0
  294. package/dist/paste/PasteManager.d.ts.map +1 -1
  295. package/dist/paste/PasteManager.js +5 -8
  296. package/dist/paste/PasteManager.js.map +1 -1
  297. package/dist/publishing/PrivateViewer.d.ts.map +1 -1
  298. package/dist/publishing/PrivateViewer.js +2 -2
  299. package/dist/publishing/PrivateViewer.js.map +1 -1
  300. package/dist/scheduler/JobScheduler.d.ts.map +1 -1
  301. package/dist/scheduler/JobScheduler.js +2 -2
  302. package/dist/scheduler/JobScheduler.js.map +1 -1
  303. package/dist/server/AgentServer.d.ts +22 -0
  304. package/dist/server/AgentServer.d.ts.map +1 -1
  305. package/dist/server/AgentServer.js +199 -1
  306. package/dist/server/AgentServer.js.map +1 -1
  307. package/dist/server/WebSocketManager.d.ts +11 -0
  308. package/dist/server/WebSocketManager.d.ts.map +1 -1
  309. package/dist/server/WebSocketManager.js +28 -0
  310. package/dist/server/WebSocketManager.js.map +1 -1
  311. package/dist/server/boot-id.d.ts +58 -0
  312. package/dist/server/boot-id.d.ts.map +1 -0
  313. package/dist/server/boot-id.js +121 -0
  314. package/dist/server/boot-id.js.map +1 -0
  315. package/dist/server/middleware.d.ts +14 -1
  316. package/dist/server/middleware.d.ts.map +1 -1
  317. package/dist/server/middleware.js +81 -1
  318. package/dist/server/middleware.js.map +1 -1
  319. package/dist/server/routes.d.ts +76 -0
  320. package/dist/server/routes.d.ts.map +1 -1
  321. package/dist/server/routes.js +626 -11
  322. package/dist/server/routes.js.map +1 -1
  323. package/dist/threadline/AgentDiscovery.d.ts.map +1 -1
  324. package/dist/threadline/AgentDiscovery.js +2 -2
  325. package/dist/threadline/AgentDiscovery.js.map +1 -1
  326. package/dist/threadline/AgentTrustManager.d.ts.map +1 -1
  327. package/dist/threadline/AgentTrustManager.js +2 -2
  328. package/dist/threadline/AgentTrustManager.js.map +1 -1
  329. package/dist/threadline/BackfillCore.d.ts +70 -0
  330. package/dist/threadline/BackfillCore.d.ts.map +1 -0
  331. package/dist/threadline/BackfillCore.js +117 -0
  332. package/dist/threadline/BackfillCore.js.map +1 -0
  333. package/dist/threadline/CircuitBreaker.d.ts.map +1 -1
  334. package/dist/threadline/CircuitBreaker.js +2 -2
  335. package/dist/threadline/CircuitBreaker.js.map +1 -1
  336. package/dist/threadline/ComputeMeter.d.ts.map +1 -1
  337. package/dist/threadline/ComputeMeter.js +2 -2
  338. package/dist/threadline/ComputeMeter.js.map +1 -1
  339. package/dist/threadline/ContextThreadMap.d.ts.map +1 -1
  340. package/dist/threadline/ContextThreadMap.js +2 -2
  341. package/dist/threadline/ContextThreadMap.js.map +1 -1
  342. package/dist/threadline/HeartbeatWatchdog.d.ts +78 -0
  343. package/dist/threadline/HeartbeatWatchdog.d.ts.map +1 -0
  344. package/dist/threadline/HeartbeatWatchdog.js +212 -0
  345. package/dist/threadline/HeartbeatWatchdog.js.map +1 -0
  346. package/dist/threadline/HeartbeatWriter.d.ts +79 -0
  347. package/dist/threadline/HeartbeatWriter.d.ts.map +1 -0
  348. package/dist/threadline/HeartbeatWriter.js +109 -0
  349. package/dist/threadline/HeartbeatWriter.js.map +1 -0
  350. package/dist/threadline/InvitationManager.d.ts.map +1 -1
  351. package/dist/threadline/InvitationManager.js +2 -2
  352. package/dist/threadline/InvitationManager.js.map +1 -1
  353. package/dist/threadline/ListenerSessionManager.d.ts +59 -0
  354. package/dist/threadline/ListenerSessionManager.d.ts.map +1 -1
  355. package/dist/threadline/ListenerSessionManager.js +79 -0
  356. package/dist/threadline/ListenerSessionManager.js.map +1 -1
  357. package/dist/threadline/MCPAuth.d.ts.map +1 -1
  358. package/dist/threadline/MCPAuth.js +2 -2
  359. package/dist/threadline/MCPAuth.js.map +1 -1
  360. package/dist/threadline/PipeSessionSpawner.d.ts.map +1 -1
  361. package/dist/threadline/PipeSessionSpawner.js +3 -4
  362. package/dist/threadline/PipeSessionSpawner.js.map +1 -1
  363. package/dist/threadline/RateLimiter.d.ts.map +1 -1
  364. package/dist/threadline/RateLimiter.js +2 -2
  365. package/dist/threadline/RateLimiter.js.map +1 -1
  366. package/dist/threadline/RelaySpawnFailureHandler.d.ts +53 -0
  367. package/dist/threadline/RelaySpawnFailureHandler.d.ts.map +1 -0
  368. package/dist/threadline/RelaySpawnFailureHandler.js +73 -0
  369. package/dist/threadline/RelaySpawnFailureHandler.js.map +1 -0
  370. package/dist/threadline/SessionLifecycle.d.ts.map +1 -1
  371. package/dist/threadline/SessionLifecycle.js +2 -2
  372. package/dist/threadline/SessionLifecycle.js.map +1 -1
  373. package/dist/threadline/SpawnLedger.d.ts +94 -0
  374. package/dist/threadline/SpawnLedger.d.ts.map +1 -0
  375. package/dist/threadline/SpawnLedger.js +194 -0
  376. package/dist/threadline/SpawnLedger.js.map +1 -0
  377. package/dist/threadline/SpawnNonce.d.ts +49 -0
  378. package/dist/threadline/SpawnNonce.d.ts.map +1 -0
  379. package/dist/threadline/SpawnNonce.js +99 -0
  380. package/dist/threadline/SpawnNonce.js.map +1 -0
  381. package/dist/threadline/TelegramBridge.d.ts +140 -0
  382. package/dist/threadline/TelegramBridge.d.ts.map +1 -0
  383. package/dist/threadline/TelegramBridge.js +224 -0
  384. package/dist/threadline/TelegramBridge.js.map +1 -0
  385. package/dist/threadline/TelegramBridgeConfig.d.ts +79 -0
  386. package/dist/threadline/TelegramBridgeConfig.d.ts.map +1 -0
  387. package/dist/threadline/TelegramBridgeConfig.js +168 -0
  388. package/dist/threadline/TelegramBridgeConfig.js.map +1 -0
  389. package/dist/threadline/ThreadlineBootstrap.d.ts.map +1 -1
  390. package/dist/threadline/ThreadlineBootstrap.js +2 -2
  391. package/dist/threadline/ThreadlineBootstrap.js.map +1 -1
  392. package/dist/threadline/ThreadlineMCPServer.d.ts.map +1 -1
  393. package/dist/threadline/ThreadlineMCPServer.js +5 -0
  394. package/dist/threadline/ThreadlineMCPServer.js.map +1 -1
  395. package/dist/threadline/ThreadlineObservability.d.ts +95 -0
  396. package/dist/threadline/ThreadlineObservability.d.ts.map +1 -0
  397. package/dist/threadline/ThreadlineObservability.js +310 -0
  398. package/dist/threadline/ThreadlineObservability.js.map +1 -0
  399. package/dist/threadline/WakeSocketServer.d.ts.map +1 -1
  400. package/dist/threadline/WakeSocketServer.js +3 -4
  401. package/dist/threadline/WakeSocketServer.js.map +1 -1
  402. package/dist/threadline/listener-daemon.d.ts.map +1 -1
  403. package/dist/threadline/listener-daemon.js +3 -4
  404. package/dist/threadline/listener-daemon.js.map +1 -1
  405. package/dist/users/UserManager.d.ts.map +1 -1
  406. package/dist/users/UserManager.js +2 -2
  407. package/dist/users/UserManager.js.map +1 -1
  408. package/dist/users/UserOnboarding.d.ts.map +1 -1
  409. package/dist/users/UserOnboarding.js +2 -2
  410. package/dist/users/UserOnboarding.js.map +1 -1
  411. package/dist/utils/jsonl-rotation.d.ts.map +1 -1
  412. package/dist/utils/jsonl-rotation.js +2 -2
  413. package/dist/utils/jsonl-rotation.js.map +1 -1
  414. package/package.json +1 -1
  415. package/scripts/analyze-release.js +7 -12
  416. package/scripts/check-contract-evidence.js +27 -10
  417. package/scripts/fix-better-sqlite3.cjs +0 -2
  418. package/scripts/instar-dev-precommit.js +0 -2
  419. package/scripts/lint-no-direct-destructive.js +24 -4
  420. package/scripts/lint-template-sha-history.ts +183 -0
  421. package/scripts/migrate-incident-2026-04-17.mjs +2 -2
  422. package/scripts/run-migration.js +500 -0
  423. package/scripts/test-bootstrap-relay.mjs +2 -2
  424. package/scripts/threadline-bridge-backfill.mjs +379 -0
  425. package/scripts/verify-deployed-templates.ts +87 -0
  426. package/src/data/builtin-manifest.json +140 -132
  427. package/src/templates/scripts/git-sync-gate.sh +0 -4
  428. package/src/templates/scripts/telegram-reply.sh +318 -13
  429. package/upgrades/0.28.77.md +133 -0
  430. package/upgrades/0.28.78.md +90 -0
  431. package/upgrades/side-effects/agent-health-alert-authority-routing.md +121 -0
  432. package/upgrades/side-effects/comprehensive-destructive-tool-containment-migration.md +82 -0
  433. package/upgrades/side-effects/deferral-detector-orphan-todo.md +101 -0
  434. package/upgrades/side-effects/lifeline-self-heal-hardening.md +151 -0
  435. package/upgrades/side-effects/relay-spawn-ghost-reply-phase1.md +139 -0
  436. package/upgrades/side-effects/telegram-delivery-robustness-layer-2.md +320 -0
  437. package/upgrades/side-effects/telegram-delivery-robustness-layer-3.md +202 -0
  438. package/upgrades/side-effects/telegram-delivery-robustness-layer-7.md +339 -0
  439. package/upgrades/side-effects/telegram-delivery-robustness.md +178 -0
  440. package/upgrades/side-effects/threadline-bridge-backfill.md +203 -0
  441. package/upgrades/side-effects/threadline-canonical-inbox-write.md +218 -0
  442. package/upgrades/side-effects/threadline-observability-tab.md +206 -0
  443. package/upgrades/side-effects/threadline-tg-bridge-module.md +196 -0
  444. package/upgrades/side-effects/threadline-tg-bridge-settings-surface.md +208 -0
  445. package/upgrades/side-effects/token-ledger-bounded-scan.md +230 -0
  446. package/upgrades/side-effects/token-ledger-phase1.md +123 -0
  447. package/upgrades/NEXT.md +0 -53
  448. /package/upgrades/side-effects/{telegram-lifeline-version-missing-info.md → 0.28.76.md} +0 -0
@@ -0,0 +1,598 @@
1
+ /**
2
+ * DeliveryFailureSentinel — Layer 3 of telegram-delivery-robustness.
3
+ *
4
+ * Spec: docs/specs/telegram-delivery-robustness.md § 4 Layer 3.
5
+ *
6
+ * Reads the SQLite queue created by Layer 2 (`pending-relay-store`),
7
+ * runs the recovery state machine, and is feature-flag-gated default-OFF.
8
+ *
9
+ * State machine (per row):
10
+ *
11
+ * queued ──claim──► claimed ──/whoami──► (mismatch → retry)
12
+ * │
13
+ * └──tone-gate──► (422 → delivered-tone-gated)
14
+ * │
15
+ * └──/telegram/reply──► (200 → delivered-recovered
16
+ * 408 → delivered-ambiguous
17
+ * 5xx/conn-refused → retry)
18
+ * │
19
+ * └──ttl/attempts exhausted ──► escalated
20
+ *
21
+ * The sentinel never overrides the tone-gate authority (§5 signal-vs-
22
+ * authority compliance). On 422 it finalizes the entry as
23
+ * `delivered-tone-gated` and emits the fixed-template meta-notice on the
24
+ * original topic.
25
+ *
26
+ * Lifecycle: `start()` registers the watchdog tick + (when wsManager is
27
+ * provided) an SSE handler for `delivery_failed` events. `stop()` clears
28
+ * timers and detaches from the event stream. `tick()` is exposed for
29
+ * tests so the recovery loop can be driven without waiting for the
30
+ * 5-minute backstop interval.
31
+ *
32
+ * **Default-OFF.** The constructor enforces nothing; the AgentServer
33
+ * gates instantiation on `config.monitoring.deliveryFailureSentinel.enabled`.
34
+ * Layer 1 + Layer 2 ship unconditionally; Layer 3 is opt-in until the
35
+ * canary criteria in spec § 3i are met.
36
+ */
37
+ import { EventEmitter } from 'node:events';
38
+ import http from 'node:http';
39
+ import { createHash } from 'node:crypto';
40
+ import { promises as fsp } from 'node:fs';
41
+ import path from 'node:path';
42
+ import { evaluatePolicy, reasonToCategory } from './delivery-failure-sentinel/recovery-policy.js';
43
+ import { WhoamiCache } from '../messaging/whoami-cache.js';
44
+ import { checkToneLocally } from '../messaging/local-tone-check.js';
45
+ import { TEMPLATES, renderEscalation, renderStampedeDigest, renderRecoveredMarker, verifyTemplateIntegrity, } from '../messaging/system-templates.js';
46
+ import { redact } from '../messaging/secret-patterns.js';
47
+ import { DegradationReporter } from './DegradationReporter.js';
48
+ const DEFAULTS = {
49
+ watchdogIntervalMs: 5 * 60 * 1000,
50
+ leaseDurationMs: 90 * 1000,
51
+ perTopicRateMs: 30 * 1000,
52
+ maxConcurrent: 4,
53
+ stampedeThreshold: 5,
54
+ circuitBreakerCount: 5,
55
+ circuitBreakerWindowMs: 60 * 60 * 1000,
56
+ restorePurgeAgeMs: 5 * 60 * 1000,
57
+ };
58
+ export class DeliveryFailureSentinel extends EventEmitter {
59
+ cfg;
60
+ deps;
61
+ watchdog = null;
62
+ unsubscribe = null;
63
+ running = false;
64
+ suspended = false;
65
+ escalationFailures = []; // ms timestamps
66
+ inFlight = 0;
67
+ lastTopicDelivery = new Map(); // topic → last delivered ms
68
+ /** Templates verified at start(). False disables escalation path. */
69
+ templatesValid = true;
70
+ /** Restored on first start(); used to keep restore-purge a one-shot. */
71
+ restorePurged = false;
72
+ constructor(deps, config = {}) {
73
+ super();
74
+ this.cfg = {
75
+ watchdogIntervalMs: config.watchdogIntervalMs ?? DEFAULTS.watchdogIntervalMs,
76
+ leaseDurationMs: config.leaseDurationMs ?? DEFAULTS.leaseDurationMs,
77
+ perTopicRateMs: config.perTopicRateMs ?? DEFAULTS.perTopicRateMs,
78
+ maxConcurrent: config.maxConcurrent ?? DEFAULTS.maxConcurrent,
79
+ stampedeThreshold: config.stampedeThreshold ?? DEFAULTS.stampedeThreshold,
80
+ circuitBreakerCount: config.circuitBreakerCount ?? DEFAULTS.circuitBreakerCount,
81
+ circuitBreakerWindowMs: config.circuitBreakerWindowMs ?? DEFAULTS.circuitBreakerWindowMs,
82
+ restorePurgeAgeMs: config.restorePurgeAgeMs ?? DEFAULTS.restorePurgeAgeMs,
83
+ };
84
+ this.deps = {
85
+ store: deps.store,
86
+ configPath: deps.configPath,
87
+ readConfig: deps.readConfig,
88
+ bootId: deps.bootId,
89
+ toneGate: deps.toneGate,
90
+ subscribeFailureEvents: deps.subscribeFailureEvents,
91
+ now: deps.now ?? (() => Date.now()),
92
+ postReply: deps.postReply ?? defaultPostReply,
93
+ whoamiCache: deps.whoamiCache ?? new WhoamiCache(),
94
+ };
95
+ }
96
+ /**
97
+ * Start the sentinel. Verifies template integrity, performs a one-shot
98
+ * restore-purge of stale rows, registers the SSE listener (if available),
99
+ * and arms the watchdog tick. Idempotent — calling start() while running
100
+ * is a no-op.
101
+ */
102
+ async start() {
103
+ if (this.running)
104
+ return;
105
+ this.running = true;
106
+ // Template integrity check (spec §3f). If templates have been
107
+ // tampered with, disable the escalation path but keep the recovery
108
+ // mainline running — pure 200 deliveries are safe even without
109
+ // templates.
110
+ const integrity = verifyTemplateIntegrity();
111
+ if (!integrity.ok) {
112
+ this.templatesValid = false;
113
+ try {
114
+ DegradationReporter.getInstance().report({
115
+ feature: 'template-integrity-failed',
116
+ primary: 'compiled-in system templates with build-time SHA-256',
117
+ fallback: 'sentinel disables escalation path; recovery mainline still works',
118
+ reason: `templates failed boot integrity check: ${integrity.mismatched.join(', ')}`,
119
+ impact: 'Escalation messages and tone-gate-rejection notices are not sent until templates are restored.',
120
+ });
121
+ }
122
+ catch {
123
+ // best-effort
124
+ }
125
+ }
126
+ if (!this.restorePurged) {
127
+ try {
128
+ this.purgeStaleRows();
129
+ }
130
+ catch (err) {
131
+ console.warn('[delivery-sentinel] restore-purge raised:', err);
132
+ }
133
+ this.restorePurged = true;
134
+ }
135
+ if (this.deps.subscribeFailureEvents) {
136
+ this.unsubscribe = this.deps.subscribeFailureEvents((event) => {
137
+ // Best-effort: kick a tick when a delivery_failed event arrives.
138
+ // We don't await; the tick runs async and emits its own events.
139
+ this.tick().catch((err) => {
140
+ console.warn('[delivery-sentinel] event-driven tick failed:', err);
141
+ });
142
+ });
143
+ }
144
+ this.watchdog = setInterval(() => {
145
+ this.tick().catch((err) => {
146
+ console.warn('[delivery-sentinel] watchdog tick failed:', err);
147
+ });
148
+ }, this.cfg.watchdogIntervalMs);
149
+ // Don't keep the process alive just for this timer.
150
+ if (typeof this.watchdog.unref === 'function') {
151
+ this.watchdog.unref();
152
+ }
153
+ this.emit('sentinel:started');
154
+ }
155
+ /** Stop the sentinel, clearing the watchdog and detaching listeners. */
156
+ async stop() {
157
+ if (!this.running)
158
+ return;
159
+ this.running = false;
160
+ if (this.watchdog) {
161
+ clearInterval(this.watchdog);
162
+ this.watchdog = null;
163
+ }
164
+ if (this.unsubscribe) {
165
+ try {
166
+ this.unsubscribe();
167
+ }
168
+ catch {
169
+ // best-effort
170
+ }
171
+ this.unsubscribe = null;
172
+ }
173
+ this.emit('sentinel:stopped');
174
+ }
175
+ /** True iff the sentinel's circuit breaker is currently tripped. */
176
+ isSuspended() {
177
+ return this.suspended;
178
+ }
179
+ /**
180
+ * Run one recovery tick. Public so tests can drive recovery without
181
+ * waiting for the watchdog interval.
182
+ *
183
+ * Returns aggregate counters useful for assertions.
184
+ */
185
+ async tick() {
186
+ if (!this.running) {
187
+ return { processed: 0, recovered: 0, escalated: 0 };
188
+ }
189
+ if (this.suspended) {
190
+ this.maybeResume();
191
+ if (this.suspended) {
192
+ return { processed: 0, recovered: 0, escalated: 0 };
193
+ }
194
+ }
195
+ const counters = { processed: 0, recovered: 0, escalated: 0 };
196
+ // Pull rows that are ready (queued, or claimed-but-stale).
197
+ const candidates = this.selectClaimable();
198
+ if (candidates.length === 0) {
199
+ this.emit('sentinel:tick-complete', counters);
200
+ return counters;
201
+ }
202
+ // Stampede summarization (spec §3c). When a single topic has more
203
+ // than N entries, pick the most recent and drop the rest with a
204
+ // single digest message.
205
+ const grouped = groupByTopic(candidates);
206
+ const toProcess = [];
207
+ for (const [topicId, rows] of grouped.entries()) {
208
+ if (rows.length > this.cfg.stampedeThreshold) {
209
+ await this.handleStampede(topicId, rows);
210
+ toProcess.push(rows[rows.length - 1]); // most recent
211
+ continue;
212
+ }
213
+ // Per-topic rate cap: ≤1 delivery per topic per perTopicRateMs.
214
+ // Drop all but the oldest queued row for this topic on this tick.
215
+ const last = this.lastTopicDelivery.get(topicId) ?? 0;
216
+ if (this.deps.now() - last < this.cfg.perTopicRateMs) {
217
+ continue; // skip this topic this tick
218
+ }
219
+ // Otherwise process all rows on this topic up to maxConcurrent
220
+ // total — most-recent first per stampede semantics.
221
+ toProcess.push(rows[rows.length - 1]);
222
+ // Also queue the older ones for next tick — they'll be re-selected
223
+ // because we don't transition them on this pass.
224
+ }
225
+ for (const row of toProcess) {
226
+ if (this.inFlight >= this.cfg.maxConcurrent)
227
+ break;
228
+ counters.processed += 1;
229
+ this.inFlight += 1;
230
+ try {
231
+ const outcome = await this.processRow(row);
232
+ if (outcome === 'recovered')
233
+ counters.recovered += 1;
234
+ if (outcome === 'escalated')
235
+ counters.escalated += 1;
236
+ }
237
+ finally {
238
+ this.inFlight -= 1;
239
+ }
240
+ }
241
+ this.emit('sentinel:tick-complete', counters);
242
+ return counters;
243
+ }
244
+ // ── Internals ──────────────────────────────────────────────────────
245
+ selectClaimable() {
246
+ const nowIso = new Date(this.deps.now()).toISOString();
247
+ try {
248
+ const rows = this.deps.store.selectClaimable(nowIso, 100);
249
+ // Filter claimed rows whose lease has not expired AND whose bootId matches
250
+ // (otherwise reclaimable).
251
+ return rows.filter((row) => {
252
+ if (row.state !== 'claimed')
253
+ return true;
254
+ return this.isLeaseStale(row);
255
+ });
256
+ }
257
+ catch (err) {
258
+ console.warn('[delivery-sentinel] selectClaimable raised:', err);
259
+ return [];
260
+ }
261
+ }
262
+ isLeaseStale(row) {
263
+ if (!row.claimed_by)
264
+ return true;
265
+ // Format: "<bootId>:<pid>:<leaseUntilIso>"
266
+ const parts = row.claimed_by.split(':');
267
+ if (parts.length < 3)
268
+ return true;
269
+ const [bootId, , leaseUntilIso] = [parts[0], parts[1], parts.slice(2).join(':')];
270
+ if (bootId !== this.deps.bootId)
271
+ return true;
272
+ const lease = Date.parse(leaseUntilIso);
273
+ if (Number.isNaN(lease))
274
+ return true;
275
+ return lease < this.deps.now();
276
+ }
277
+ async processRow(row) {
278
+ // Claim the row — write the lease.
279
+ const leaseUntil = new Date(this.deps.now() + this.cfg.leaseDurationMs).toISOString();
280
+ const claimedBy = `${this.deps.bootId}:${process.pid}:${leaseUntil}`;
281
+ const claimed = this.deps.store.transition(row.delivery_id, 'claimed', { claimed_by: claimedBy });
282
+ if (!claimed) {
283
+ // Lost the race — another instance grabbed it (shared worktree case).
284
+ return 'retry';
285
+ }
286
+ // Re-resolve config — operator may have rotated port/token since enqueue.
287
+ const cfg = this.deps.readConfig();
288
+ // Verify identity via /whoami before any send.
289
+ let whoami;
290
+ try {
291
+ whoami = await this.deps.whoamiCache.get(cfg.port, cfg.authToken, this.deps.configPath, cfg.agentId);
292
+ }
293
+ catch (err) {
294
+ // Network / auth failure → schedule next retry.
295
+ return this.handlePolicyDecision(row, evaluatePolicy({
296
+ httpCode: 0,
297
+ responseBody: err instanceof Error ? err.message.slice(0, 256) : null,
298
+ attempts: row.attempts,
299
+ timeSinceFirstMs: this.deps.now() - Date.parse(row.attempted_at),
300
+ now: this.deps.now,
301
+ }));
302
+ }
303
+ if (whoami.agentId !== cfg.agentId) {
304
+ return this.handlePolicyDecision(row, evaluatePolicy({
305
+ httpCode: 403,
306
+ responseBody: JSON.stringify({ error: 'agent_id_mismatch' }),
307
+ attempts: row.attempts,
308
+ timeSinceFirstMs: this.deps.now() - Date.parse(row.attempted_at),
309
+ now: this.deps.now,
310
+ }));
311
+ }
312
+ // Re-tone-gate the queued text. Apply redaction first so secrets in
313
+ // the queued body never reach the tone gate provider (defense-in-
314
+ // depth — they shouldn't be there in the first place, but we don't
315
+ // want to amplify a leak by sending it to a third-party LLM).
316
+ const text = redact(row.text.toString('utf-8'));
317
+ const toneResult = await checkToneLocally(this.deps.toneGate, text, {
318
+ channel: 'telegram',
319
+ });
320
+ if (!toneResult.passed) {
321
+ return this.finalizeToneGated(row, toneResult.rule);
322
+ }
323
+ // POST /telegram/reply with the delivery-id header for server-side dedup.
324
+ let resp;
325
+ try {
326
+ resp = await this.deps.postReply(cfg.port, cfg.authToken, cfg.agentId, row.topic_id, text, row.delivery_id);
327
+ }
328
+ catch (err) {
329
+ return this.handlePolicyDecision(row, evaluatePolicy({
330
+ httpCode: 0,
331
+ responseBody: err instanceof Error ? err.message.slice(0, 256) : null,
332
+ attempts: row.attempts + 1,
333
+ timeSinceFirstMs: this.deps.now() - Date.parse(row.attempted_at),
334
+ now: this.deps.now,
335
+ }));
336
+ }
337
+ const decision = evaluatePolicy({
338
+ httpCode: resp.status,
339
+ responseBody: resp.body.slice(0, 1024),
340
+ attempts: row.attempts + 1,
341
+ timeSinceFirstMs: this.deps.now() - Date.parse(row.attempted_at),
342
+ now: this.deps.now,
343
+ });
344
+ if (decision.action === 'finalize-success') {
345
+ // Update last-delivery time for per-topic rate cap.
346
+ this.lastTopicDelivery.set(row.topic_id, this.deps.now());
347
+ this.deps.store.transition(row.delivery_id, 'delivered-recovered', {
348
+ attempts: row.attempts + 1,
349
+ http_code: resp.status,
350
+ error_body: null,
351
+ });
352
+ this.emit('sentinel:recovered', { delivery_id: row.delivery_id, topic_id: row.topic_id });
353
+ // Fire-and-forget recovered-marker follow-up (~2s later, gated on 200).
354
+ const shortId = row.delivery_id.slice(0, 8);
355
+ setTimeout(() => {
356
+ const marker = renderRecoveredMarker(shortId);
357
+ // System-template send — bypass tone gate via header. Failure
358
+ // is logged and dropped (spec §3e), never queued.
359
+ this.deps.postReply(cfg.port, cfg.authToken, cfg.agentId, row.topic_id, marker, row.delivery_id, true)
360
+ .catch((err) => {
361
+ console.warn(`[delivery-sentinel] recovered-marker send failed for ${shortId}:`, err);
362
+ });
363
+ }, 2000).unref();
364
+ return 'recovered';
365
+ }
366
+ return this.handlePolicyDecision(row, decision, resp.status);
367
+ }
368
+ async finalizeToneGated(row, rule) {
369
+ this.deps.store.transition(row.delivery_id, 'delivered-tone-gated', {
370
+ attempts: row.attempts + 1,
371
+ });
372
+ this.emit('sentinel:tone-gated', { delivery_id: row.delivery_id, topic_id: row.topic_id, rule });
373
+ // Send the tone-gate-rejection meta-notice on the original topic.
374
+ if (this.templatesValid) {
375
+ try {
376
+ const cfg = this.deps.readConfig();
377
+ await this.deps.postReply(cfg.port, cfg.authToken, cfg.agentId, row.topic_id, TEMPLATES.toneGateRejection, row.delivery_id, true);
378
+ }
379
+ catch (err) {
380
+ console.warn('[delivery-sentinel] tone-gate-rejection notice send failed:', err);
381
+ }
382
+ }
383
+ return 'tone-gated';
384
+ }
385
+ async handlePolicyDecision(row, decision, httpCode) {
386
+ switch (decision.action) {
387
+ case 'finalize-success':
388
+ // Handled inline in processRow.
389
+ return 'recovered';
390
+ case 'finalize-tone-gated':
391
+ return this.finalizeToneGated(row);
392
+ case 'finalize-ambiguous':
393
+ this.deps.store.transition(row.delivery_id, 'delivered-ambiguous', {
394
+ attempts: row.attempts + 1,
395
+ http_code: httpCode ?? null,
396
+ });
397
+ return 'ambiguous';
398
+ case 'retry':
399
+ this.deps.store.transition(row.delivery_id, 'queued', {
400
+ attempts: row.attempts + 1,
401
+ next_attempt_at: decision.nextAttemptAt ?? null,
402
+ claimed_by: null,
403
+ http_code: httpCode ?? null,
404
+ });
405
+ return 'retry';
406
+ case 'escalate':
407
+ return this.escalate(row, decision);
408
+ }
409
+ }
410
+ async escalate(row, decision) {
411
+ const category = reasonToCategory(decision.reason);
412
+ this.deps.store.transition(row.delivery_id, 'escalated', {
413
+ attempts: row.attempts + 1,
414
+ });
415
+ this.emit('sentinel:escalated', { delivery_id: row.delivery_id, topic_id: row.topic_id, category });
416
+ if (!this.templatesValid) {
417
+ this.recordEscalationFailure();
418
+ return 'escalated';
419
+ }
420
+ const duration = humanDuration(this.deps.now() - Date.parse(row.attempted_at));
421
+ const shortId = row.delivery_id.slice(0, 8);
422
+ const body = renderEscalation({ duration, category, shortId });
423
+ const cfg = this.deps.readConfig();
424
+ let topicSent = false;
425
+ for (let attempt = 0; attempt < 2 && !topicSent; attempt++) {
426
+ try {
427
+ const r = await this.deps.postReply(cfg.port, cfg.authToken, cfg.agentId, row.topic_id, body, row.delivery_id, true);
428
+ if (r.status >= 200 && r.status < 300)
429
+ topicSent = true;
430
+ }
431
+ catch {
432
+ // try once more
433
+ }
434
+ }
435
+ if (!topicSent) {
436
+ this.recordEscalationFailure();
437
+ }
438
+ else {
439
+ // Successful escalation — don't count as a failure.
440
+ this.escalationFailures = [];
441
+ }
442
+ return 'escalated';
443
+ }
444
+ recordEscalationFailure() {
445
+ const now = this.deps.now();
446
+ this.escalationFailures.push(now);
447
+ // Keep only failures within the window.
448
+ const cutoff = now - this.cfg.circuitBreakerWindowMs;
449
+ this.escalationFailures = this.escalationFailures.filter((t) => t >= cutoff);
450
+ if (this.escalationFailures.length >= this.cfg.circuitBreakerCount && !this.suspended) {
451
+ this.suspended = true;
452
+ try {
453
+ DegradationReporter.getInstance().report({
454
+ feature: 'delivery-sentinel-suspended',
455
+ primary: 'autonomous recovery via /telegram/reply',
456
+ fallback: 'queue continues to grow; no retries until config rotates or operator resumes',
457
+ reason: `circuit breaker tripped after ${this.escalationFailures.length} consecutive escalation failures within ${Math.round(this.cfg.circuitBreakerWindowMs / 60_000)}m`,
458
+ impact: 'Recovery is paused. Operator may rotate config (auth-relevant fields: port, authToken, agentId) or run `instar sentinel resume` to attempt unsuspend.',
459
+ });
460
+ }
461
+ catch {
462
+ // best-effort
463
+ }
464
+ this.emit('sentinel:circuit-breaker-tripped', { consecutiveFailures: this.escalationFailures.length });
465
+ this.lastConfigHash = this.computeConfigAuthHash();
466
+ }
467
+ }
468
+ lastConfigHash = null;
469
+ maybeResume() {
470
+ // Resume if the auth-relevant config fields have changed since
471
+ // suspension. mtime-based detection is forbidden by spec §3f
472
+ // (forgeable, bumped by unrelated jobs); we hash port + token + agentId.
473
+ const current = this.computeConfigAuthHash();
474
+ if (this.lastConfigHash !== null && current !== this.lastConfigHash) {
475
+ this.suspended = false;
476
+ this.escalationFailures = [];
477
+ this.emit('sentinel:circuit-breaker-resumed');
478
+ }
479
+ }
480
+ computeConfigAuthHash() {
481
+ try {
482
+ const cfg = this.deps.readConfig();
483
+ return createHash('sha256')
484
+ .update(`${cfg.port}\0${cfg.authToken}\0${cfg.agentId}`)
485
+ .digest('hex');
486
+ }
487
+ catch {
488
+ return '';
489
+ }
490
+ }
491
+ /** Manual resume — used by `instar sentinel resume` CLI handler. */
492
+ resume() {
493
+ this.suspended = false;
494
+ this.escalationFailures = [];
495
+ this.emit('sentinel:circuit-breaker-resumed');
496
+ }
497
+ async handleStampede(topicId, rows) {
498
+ const last = this.lastTopicDelivery.get(topicId) ?? 0;
499
+ if (this.deps.now() - last < this.cfg.perTopicRateMs)
500
+ return;
501
+ if (!this.templatesValid)
502
+ return;
503
+ const cfg = this.deps.readConfig();
504
+ const digest = renderStampedeDigest(rows.length);
505
+ try {
506
+ await this.deps.postReply(cfg.port, cfg.authToken, cfg.agentId, topicId, digest, rows[rows.length - 1].delivery_id, true);
507
+ this.lastTopicDelivery.set(topicId, this.deps.now());
508
+ }
509
+ catch (err) {
510
+ console.warn('[delivery-sentinel] stampede digest send failed:', err);
511
+ }
512
+ // Drop all but the latest with `delivered-ambiguous` (we don't know
513
+ // if duplicate would have landed; dropping is intentional).
514
+ for (let i = 0; i < rows.length - 1; i++) {
515
+ this.deps.store.transition(rows[i].delivery_id, 'delivered-ambiguous', {});
516
+ }
517
+ }
518
+ purgeStaleRows() {
519
+ const cutoff = new Date(this.deps.now() - this.cfg.restorePurgeAgeMs).toISOString();
520
+ try {
521
+ const deleted = this.deps.store.purgeStaleClaimable(cutoff);
522
+ if (deleted > 0) {
523
+ console.log(`[delivery-sentinel] restore-purged ${deleted} stale rows (older than ${this.cfg.restorePurgeAgeMs}ms)`);
524
+ }
525
+ }
526
+ catch (err) {
527
+ console.warn('[delivery-sentinel] purgeStaleRows raised:', err);
528
+ }
529
+ }
530
+ }
531
+ // ── Helpers ──────────────────────────────────────────────────────────
532
+ function groupByTopic(rows) {
533
+ const out = new Map();
534
+ for (const row of rows) {
535
+ const list = out.get(row.topic_id);
536
+ if (list)
537
+ list.push(row);
538
+ else
539
+ out.set(row.topic_id, [row]);
540
+ }
541
+ // Sort each topic's list by attempted_at ascending so [0] is oldest,
542
+ // [length-1] is newest (matches spec §3c "most recent").
543
+ for (const list of out.values()) {
544
+ list.sort((a, b) => a.attempted_at.localeCompare(b.attempted_at));
545
+ }
546
+ return out;
547
+ }
548
+ function humanDuration(ms) {
549
+ if (ms < 60_000)
550
+ return '<1m';
551
+ const minutes = Math.floor(ms / 60_000);
552
+ if (minutes < 60)
553
+ return `${minutes}m`;
554
+ const hours = Math.floor(minutes / 60);
555
+ const remMinutes = minutes % 60;
556
+ return `${hours}h ${remMinutes}m`;
557
+ }
558
+ async function defaultPostReply(port, token, agentId, topicId, text, deliveryId, isSystem = false) {
559
+ return new Promise((resolve, reject) => {
560
+ const payload = JSON.stringify({ text });
561
+ const headers = {
562
+ 'Content-Type': 'application/json',
563
+ 'Content-Length': String(Buffer.byteLength(payload, 'utf-8')),
564
+ Authorization: `Bearer ${token}`,
565
+ 'X-Instar-AgentId': agentId,
566
+ 'X-Instar-DeliveryId': deliveryId,
567
+ };
568
+ if (isSystem)
569
+ headers['X-Instar-System'] = 'true';
570
+ const req = http.request({
571
+ host: '127.0.0.1',
572
+ port,
573
+ path: `/telegram/reply/${topicId}`,
574
+ method: 'POST',
575
+ headers,
576
+ timeout: 30_000,
577
+ }, (res) => {
578
+ const chunks = [];
579
+ res.on('data', (c) => chunks.push(c));
580
+ res.on('end', () => {
581
+ resolve({
582
+ status: res.statusCode ?? 0,
583
+ body: Buffer.concat(chunks).toString('utf-8'),
584
+ });
585
+ });
586
+ });
587
+ req.on('error', reject);
588
+ req.on('timeout', () => {
589
+ req.destroy(new Error('telegram-reply request timed out'));
590
+ });
591
+ req.write(payload);
592
+ req.end();
593
+ });
594
+ }
595
+ // Suppress unused warnings for path/fsp imports kept for future use.
596
+ void path;
597
+ void fsp;
598
+ //# sourceMappingURL=delivery-failure-sentinel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delivery-failure-sentinel.js","sourceRoot":"","sources":["../../src/monitoring/delivery-failure-sentinel.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"PlatformProbe.d.ts","sourceRoot":"","sources":["../../../src/monitoring/probes/PlatformProbe.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAMH,OAAO,KAAK,EAAE,KAAK,EAAe,MAAM,sBAAsB,CAAC;AAE/D,MAAM,WAAW,iBAAiB;IAChC,yCAAyC;IACzC,QAAQ,EAAE,MAAM,CAAC;CAClB;AA2FD,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,iBAAiB,GAAG,KAAK,EAAE,CAmIrE"}
1
+ {"version":3,"file":"PlatformProbe.d.ts","sourceRoot":"","sources":["../../../src/monitoring/probes/PlatformProbe.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAMH,OAAO,KAAK,EAAE,KAAK,EAAe,MAAM,sBAAsB,CAAC;AAG/D,MAAM,WAAW,iBAAiB;IAChC,yCAAyC;IACzC,QAAQ,EAAE,MAAM,CAAC;CAClB;AAyFD,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,iBAAiB,GAAG,KAAK,EAAE,CAmIrE"}
@@ -10,6 +10,7 @@ import os from 'node:os';
10
10
  import fs from 'node:fs';
11
11
  import path from 'node:path';
12
12
  import { execSync } from 'node:child_process';
13
+ import { SafeFsExecutor } from '../../core/SafeFsExecutor.js';
13
14
  /**
14
15
  * Test whether a command run inside a tmux session can access
15
16
  * TCC-protected directories without triggering a permission popup.
@@ -51,9 +52,8 @@ function testTmuxFdaAccess(tmuxPath) {
51
52
  }
52
53
  const output = fs.readFileSync(tmpFile, 'utf-8');
53
54
  // Clean up temp file
54
- // safe-git-allow: incremental-migration
55
55
  try {
56
- fs.unlinkSync(tmpFile);
56
+ SafeFsExecutor.safeUnlinkSync(tmpFile, { operation: 'src/monitoring/probes/PlatformProbe.ts:68' });
57
57
  }
58
58
  catch { /* ok */ }
59
59
  // Parse exit code from output
@@ -77,9 +77,8 @@ function testTmuxFdaAccess(tmuxPath) {
77
77
  execSync(`${tmuxPath} kill-session -t ${testSessionName} 2>/dev/null`, { timeout: 3000 });
78
78
  }
79
79
  catch { /* ok */ }
80
- // safe-git-allow: incremental-migration
81
80
  try {
82
- fs.unlinkSync(tmpFile);
81
+ SafeFsExecutor.safeUnlinkSync(tmpFile, { operation: 'src/monitoring/probes/PlatformProbe.ts:91' });
83
82
  }
84
83
  catch { /* ok */ }
85
84
  return { hasAccess: true, error: `Probe failed: ${err instanceof Error ? err.message : String(err)}` };