@iflow-mcp/jkheadley-instar 0.26.2
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.
- package/.claude/hooks/free-text-guard.sh +117 -0
- package/.claude/settings.json +201 -0
- package/.claude/skills/autonomous/hooks/autonomous-stop-hook.sh +234 -0
- package/.claude/skills/autonomous/hooks/hooks.json +15 -0
- package/.claude/skills/autonomous/scripts/setup-autonomous.sh +166 -0
- package/.claude/skills/autonomous/skill.md +254 -0
- package/.claude/skills/secret-setup/skill.md +210 -0
- package/.claude/skills/setup-wizard/skill.md +2132 -0
- package/LICENSE +21 -0
- package/README.md +214 -0
- package/dashboard/favicon.png +0 -0
- package/dashboard/index.html +5740 -0
- package/dashboard/logo.png +0 -0
- package/dist/cli.d.ts +21 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +1782 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/backup.d.ts +16 -0
- package/dist/commands/backup.d.ts.map +1 -0
- package/dist/commands/backup.js +84 -0
- package/dist/commands/backup.js.map +1 -0
- package/dist/commands/discovery.d.ts +158 -0
- package/dist/commands/discovery.d.ts.map +1 -0
- package/dist/commands/discovery.js +532 -0
- package/dist/commands/discovery.js.map +1 -0
- package/dist/commands/git.d.ts +25 -0
- package/dist/commands/git.d.ts.map +1 -0
- package/dist/commands/git.js +152 -0
- package/dist/commands/git.js.map +1 -0
- package/dist/commands/init.d.ts +52 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +4211 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/intent.d.ts +30 -0
- package/dist/commands/intent.d.ts.map +1 -0
- package/dist/commands/intent.js +349 -0
- package/dist/commands/intent.js.map +1 -0
- package/dist/commands/job.d.ts +42 -0
- package/dist/commands/job.d.ts.map +1 -0
- package/dist/commands/job.js +202 -0
- package/dist/commands/job.js.map +1 -0
- package/dist/commands/knowledge.d.ts +25 -0
- package/dist/commands/knowledge.d.ts.map +1 -0
- package/dist/commands/knowledge.js +127 -0
- package/dist/commands/knowledge.js.map +1 -0
- package/dist/commands/machine.d.ts +53 -0
- package/dist/commands/machine.d.ts.map +1 -0
- package/dist/commands/machine.js +680 -0
- package/dist/commands/machine.js.map +1 -0
- package/dist/commands/memory.d.ts +24 -0
- package/dist/commands/memory.d.ts.map +1 -0
- package/dist/commands/memory.js +163 -0
- package/dist/commands/memory.js.map +1 -0
- package/dist/commands/nuke.d.ts +22 -0
- package/dist/commands/nuke.d.ts.map +1 -0
- package/dist/commands/nuke.js +216 -0
- package/dist/commands/nuke.js.map +1 -0
- package/dist/commands/org.d.ts +16 -0
- package/dist/commands/org.d.ts.map +1 -0
- package/dist/commands/org.js +69 -0
- package/dist/commands/org.js.map +1 -0
- package/dist/commands/playbook.d.ts +91 -0
- package/dist/commands/playbook.d.ts.map +1 -0
- package/dist/commands/playbook.js +1016 -0
- package/dist/commands/playbook.js.map +1 -0
- package/dist/commands/reflect.d.ts +52 -0
- package/dist/commands/reflect.d.ts.map +1 -0
- package/dist/commands/reflect.js +316 -0
- package/dist/commands/reflect.js.map +1 -0
- package/dist/commands/relationship.d.ts +17 -0
- package/dist/commands/relationship.d.ts.map +1 -0
- package/dist/commands/relationship.js +156 -0
- package/dist/commands/relationship.js.map +1 -0
- package/dist/commands/relay.d.ts +26 -0
- package/dist/commands/relay.d.ts.map +1 -0
- package/dist/commands/relay.js +121 -0
- package/dist/commands/relay.js.map +1 -0
- package/dist/commands/review.d.ts +18 -0
- package/dist/commands/review.d.ts.map +1 -0
- package/dist/commands/review.js +193 -0
- package/dist/commands/review.js.map +1 -0
- package/dist/commands/semantic.d.ts +37 -0
- package/dist/commands/semantic.d.ts.map +1 -0
- package/dist/commands/semantic.js +198 -0
- package/dist/commands/semantic.js.map +1 -0
- package/dist/commands/server.d.ts +37 -0
- package/dist/commands/server.d.ts.map +1 -0
- package/dist/commands/server.js +4875 -0
- package/dist/commands/server.js.map +1 -0
- package/dist/commands/setup.d.ts +63 -0
- package/dist/commands/setup.d.ts.map +1 -0
- package/dist/commands/setup.js +1235 -0
- package/dist/commands/setup.js.map +1 -0
- package/dist/commands/slack-cli.d.ts +16 -0
- package/dist/commands/slack-cli.d.ts.map +1 -0
- package/dist/commands/slack-cli.js +259 -0
- package/dist/commands/slack-cli.js.map +1 -0
- package/dist/commands/status.d.ts +11 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +120 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/commands/user.d.ts +17 -0
- package/dist/commands/user.d.ts.map +1 -0
- package/dist/commands/user.js +53 -0
- package/dist/commands/user.js.map +1 -0
- package/dist/commands/whatsapp.d.ts +31 -0
- package/dist/commands/whatsapp.d.ts.map +1 -0
- package/dist/commands/whatsapp.js +408 -0
- package/dist/commands/whatsapp.js.map +1 -0
- package/dist/config/ConfigDefaults.d.ts +40 -0
- package/dist/config/ConfigDefaults.d.ts.map +1 -0
- package/dist/config/ConfigDefaults.js +175 -0
- package/dist/config/ConfigDefaults.js.map +1 -0
- package/dist/config/LiveConfig.d.ts +97 -0
- package/dist/config/LiveConfig.d.ts.map +1 -0
- package/dist/config/LiveConfig.js +220 -0
- package/dist/config/LiveConfig.js.map +1 -0
- package/dist/core/AccessControl.d.ts +91 -0
- package/dist/core/AccessControl.d.ts.map +1 -0
- package/dist/core/AccessControl.js +184 -0
- package/dist/core/AccessControl.js.map +1 -0
- package/dist/core/AdaptationValidator.d.ts +44 -0
- package/dist/core/AdaptationValidator.d.ts.map +1 -0
- package/dist/core/AdaptationValidator.js +132 -0
- package/dist/core/AdaptationValidator.js.map +1 -0
- package/dist/core/AdaptiveTrust.d.ts +188 -0
- package/dist/core/AdaptiveTrust.d.ts.map +1 -0
- package/dist/core/AdaptiveTrust.js +354 -0
- package/dist/core/AdaptiveTrust.js.map +1 -0
- package/dist/core/AgentBus.d.ts +168 -0
- package/dist/core/AgentBus.d.ts.map +1 -0
- package/dist/core/AgentBus.js +369 -0
- package/dist/core/AgentBus.js.map +1 -0
- package/dist/core/AgentConnector.d.ts +76 -0
- package/dist/core/AgentConnector.d.ts.map +1 -0
- package/dist/core/AgentConnector.js +324 -0
- package/dist/core/AgentConnector.js.map +1 -0
- package/dist/core/AgentRegistry.d.ts +107 -0
- package/dist/core/AgentRegistry.d.ts.map +1 -0
- package/dist/core/AgentRegistry.js +569 -0
- package/dist/core/AgentRegistry.js.map +1 -0
- package/dist/core/AnthropicIntelligenceProvider.d.ts +24 -0
- package/dist/core/AnthropicIntelligenceProvider.d.ts.map +1 -0
- package/dist/core/AnthropicIntelligenceProvider.js +63 -0
- package/dist/core/AnthropicIntelligenceProvider.js.map +1 -0
- package/dist/core/AuditTrail.d.ts +207 -0
- package/dist/core/AuditTrail.d.ts.map +1 -0
- package/dist/core/AuditTrail.js +271 -0
- package/dist/core/AuditTrail.js.map +1 -0
- package/dist/core/AutoApprover.d.ts +63 -0
- package/dist/core/AutoApprover.d.ts.map +1 -0
- package/dist/core/AutoApprover.js +151 -0
- package/dist/core/AutoApprover.js.map +1 -0
- package/dist/core/AutoDispatcher.d.ts +170 -0
- package/dist/core/AutoDispatcher.d.ts.map +1 -0
- package/dist/core/AutoDispatcher.js +647 -0
- package/dist/core/AutoDispatcher.js.map +1 -0
- package/dist/core/AutoUpdater.d.ts +193 -0
- package/dist/core/AutoUpdater.d.ts.map +1 -0
- package/dist/core/AutoUpdater.js +648 -0
- package/dist/core/AutoUpdater.js.map +1 -0
- package/dist/core/AutonomousEvolution.d.ts +168 -0
- package/dist/core/AutonomousEvolution.d.ts.map +1 -0
- package/dist/core/AutonomousEvolution.js +384 -0
- package/dist/core/AutonomousEvolution.js.map +1 -0
- package/dist/core/AutonomyProfileManager.d.ts +108 -0
- package/dist/core/AutonomyProfileManager.d.ts.map +1 -0
- package/dist/core/AutonomyProfileManager.js +323 -0
- package/dist/core/AutonomyProfileManager.js.map +1 -0
- package/dist/core/AutonomySkill.d.ts +98 -0
- package/dist/core/AutonomySkill.d.ts.map +1 -0
- package/dist/core/AutonomySkill.js +497 -0
- package/dist/core/AutonomySkill.js.map +1 -0
- package/dist/core/BackupManager.d.ts +66 -0
- package/dist/core/BackupManager.d.ts.map +1 -0
- package/dist/core/BackupManager.js +266 -0
- package/dist/core/BackupManager.js.map +1 -0
- package/dist/core/BitwardenProvider.d.ts +85 -0
- package/dist/core/BitwardenProvider.d.ts.map +1 -0
- package/dist/core/BitwardenProvider.js +437 -0
- package/dist/core/BitwardenProvider.js.map +1 -0
- package/dist/core/BlockerLearningLoop.d.ts +99 -0
- package/dist/core/BlockerLearningLoop.d.ts.map +1 -0
- package/dist/core/BlockerLearningLoop.js +205 -0
- package/dist/core/BlockerLearningLoop.js.map +1 -0
- package/dist/core/BranchManager.d.ts +165 -0
- package/dist/core/BranchManager.d.ts.map +1 -0
- package/dist/core/BranchManager.js +413 -0
- package/dist/core/BranchManager.js.map +1 -0
- package/dist/core/CaffeinateManager.d.ts +50 -0
- package/dist/core/CaffeinateManager.d.ts.map +1 -0
- package/dist/core/CaffeinateManager.js +189 -0
- package/dist/core/CaffeinateManager.js.map +1 -0
- package/dist/core/CallbackRegistry.d.ts +67 -0
- package/dist/core/CallbackRegistry.d.ts.map +1 -0
- package/dist/core/CallbackRegistry.js +145 -0
- package/dist/core/CallbackRegistry.js.map +1 -0
- package/dist/core/CanonicalState.d.ts +132 -0
- package/dist/core/CanonicalState.d.ts.map +1 -0
- package/dist/core/CanonicalState.js +297 -0
- package/dist/core/CanonicalState.js.map +1 -0
- package/dist/core/CapabilityMapper.d.ts +192 -0
- package/dist/core/CapabilityMapper.d.ts.map +1 -0
- package/dist/core/CapabilityMapper.js +958 -0
- package/dist/core/CapabilityMapper.js.map +1 -0
- package/dist/core/CapabilityRegistryGenerator.d.ts +72 -0
- package/dist/core/CapabilityRegistryGenerator.d.ts.map +1 -0
- package/dist/core/CapabilityRegistryGenerator.js +310 -0
- package/dist/core/CapabilityRegistryGenerator.js.map +1 -0
- package/dist/core/ClaudeCliIntelligenceProvider.d.ts +21 -0
- package/dist/core/ClaudeCliIntelligenceProvider.d.ts.map +1 -0
- package/dist/core/ClaudeCliIntelligenceProvider.js +60 -0
- package/dist/core/ClaudeCliIntelligenceProvider.js.map +1 -0
- package/dist/core/CoherenceGate.d.ts +198 -0
- package/dist/core/CoherenceGate.d.ts.map +1 -0
- package/dist/core/CoherenceGate.js +986 -0
- package/dist/core/CoherenceGate.js.map +1 -0
- package/dist/core/CoherenceReviewer.d.ts +104 -0
- package/dist/core/CoherenceReviewer.d.ts.map +1 -0
- package/dist/core/CoherenceReviewer.js +185 -0
- package/dist/core/CoherenceReviewer.js.map +1 -0
- package/dist/core/Config.d.ts +32 -0
- package/dist/core/Config.d.ts.map +1 -0
- package/dist/core/Config.js +332 -0
- package/dist/core/Config.js.map +1 -0
- package/dist/core/ConflictNegotiator.d.ts +167 -0
- package/dist/core/ConflictNegotiator.d.ts.map +1 -0
- package/dist/core/ConflictNegotiator.js +280 -0
- package/dist/core/ConflictNegotiator.js.map +1 -0
- package/dist/core/ContextHierarchy.d.ts +102 -0
- package/dist/core/ContextHierarchy.d.ts.map +1 -0
- package/dist/core/ContextHierarchy.js +594 -0
- package/dist/core/ContextHierarchy.js.map +1 -0
- package/dist/core/ContextSnapshotBuilder.d.ts +80 -0
- package/dist/core/ContextSnapshotBuilder.d.ts.map +1 -0
- package/dist/core/ContextSnapshotBuilder.js +342 -0
- package/dist/core/ContextSnapshotBuilder.js.map +1 -0
- package/dist/core/ContextualEvaluator.d.ts +103 -0
- package/dist/core/ContextualEvaluator.d.ts.map +1 -0
- package/dist/core/ContextualEvaluator.js +389 -0
- package/dist/core/ContextualEvaluator.js.map +1 -0
- package/dist/core/ConvergenceChecker.d.ts +24 -0
- package/dist/core/ConvergenceChecker.d.ts.map +1 -0
- package/dist/core/ConvergenceChecker.js +113 -0
- package/dist/core/ConvergenceChecker.js.map +1 -0
- package/dist/core/CoordinationProtocol.d.ts +198 -0
- package/dist/core/CoordinationProtocol.d.ts.map +1 -0
- package/dist/core/CoordinationProtocol.js +363 -0
- package/dist/core/CoordinationProtocol.js.map +1 -0
- package/dist/core/CustomReviewerLoader.d.ts +45 -0
- package/dist/core/CustomReviewerLoader.d.ts.map +1 -0
- package/dist/core/CustomReviewerLoader.js +153 -0
- package/dist/core/CustomReviewerLoader.js.map +1 -0
- package/dist/core/DecisionJournal.d.ts +56 -0
- package/dist/core/DecisionJournal.d.ts.map +1 -0
- package/dist/core/DecisionJournal.js +132 -0
- package/dist/core/DecisionJournal.js.map +1 -0
- package/dist/core/DeferredDispatchTracker.d.ts +91 -0
- package/dist/core/DeferredDispatchTracker.d.ts.map +1 -0
- package/dist/core/DeferredDispatchTracker.js +213 -0
- package/dist/core/DeferredDispatchTracker.js.map +1 -0
- package/dist/core/DiscoveryEvaluator.d.ts +131 -0
- package/dist/core/DiscoveryEvaluator.d.ts.map +1 -0
- package/dist/core/DiscoveryEvaluator.js +377 -0
- package/dist/core/DiscoveryEvaluator.js.map +1 -0
- package/dist/core/DispatchDecisionJournal.d.ts +83 -0
- package/dist/core/DispatchDecisionJournal.d.ts.map +1 -0
- package/dist/core/DispatchDecisionJournal.js +181 -0
- package/dist/core/DispatchDecisionJournal.js.map +1 -0
- package/dist/core/DispatchExecutor.d.ts +127 -0
- package/dist/core/DispatchExecutor.d.ts.map +1 -0
- package/dist/core/DispatchExecutor.js +355 -0
- package/dist/core/DispatchExecutor.js.map +1 -0
- package/dist/core/DispatchManager.d.ts +200 -0
- package/dist/core/DispatchManager.d.ts.map +1 -0
- package/dist/core/DispatchManager.js +524 -0
- package/dist/core/DispatchManager.js.map +1 -0
- package/dist/core/DispatchScopeEnforcer.d.ts +57 -0
- package/dist/core/DispatchScopeEnforcer.d.ts.map +1 -0
- package/dist/core/DispatchScopeEnforcer.js +173 -0
- package/dist/core/DispatchScopeEnforcer.js.map +1 -0
- package/dist/core/DispatchVerifier.d.ts +76 -0
- package/dist/core/DispatchVerifier.d.ts.map +1 -0
- package/dist/core/DispatchVerifier.js +128 -0
- package/dist/core/DispatchVerifier.js.map +1 -0
- package/dist/core/EvolutionManager.d.ts +223 -0
- package/dist/core/EvolutionManager.d.ts.map +1 -0
- package/dist/core/EvolutionManager.js +630 -0
- package/dist/core/EvolutionManager.js.map +1 -0
- package/dist/core/ExecutionJournal.d.ts +101 -0
- package/dist/core/ExecutionJournal.d.ts.map +1 -0
- package/dist/core/ExecutionJournal.js +301 -0
- package/dist/core/ExecutionJournal.js.map +1 -0
- package/dist/core/ExternalOperationGate.d.ts +204 -0
- package/dist/core/ExternalOperationGate.d.ts.map +1 -0
- package/dist/core/ExternalOperationGate.js +413 -0
- package/dist/core/ExternalOperationGate.js.map +1 -0
- package/dist/core/FeatureDefinitions.d.ts +14 -0
- package/dist/core/FeatureDefinitions.d.ts.map +1 -0
- package/dist/core/FeatureDefinitions.js +374 -0
- package/dist/core/FeatureDefinitions.js.map +1 -0
- package/dist/core/FeatureRegistry.d.ts +337 -0
- package/dist/core/FeatureRegistry.d.ts.map +1 -0
- package/dist/core/FeatureRegistry.js +863 -0
- package/dist/core/FeatureRegistry.js.map +1 -0
- package/dist/core/FeedbackManager.d.ts +69 -0
- package/dist/core/FeedbackManager.d.ts.map +1 -0
- package/dist/core/FeedbackManager.js +284 -0
- package/dist/core/FeedbackManager.js.map +1 -0
- package/dist/core/FileClassifier.d.ts +74 -0
- package/dist/core/FileClassifier.d.ts.map +1 -0
- package/dist/core/FileClassifier.js +377 -0
- package/dist/core/FileClassifier.js.map +1 -0
- package/dist/core/ForegroundRestartWatcher.d.ts +55 -0
- package/dist/core/ForegroundRestartWatcher.d.ts.map +1 -0
- package/dist/core/ForegroundRestartWatcher.js +116 -0
- package/dist/core/ForegroundRestartWatcher.js.map +1 -0
- package/dist/core/GitStateManager.d.ts +78 -0
- package/dist/core/GitStateManager.d.ts.map +1 -0
- package/dist/core/GitStateManager.js +366 -0
- package/dist/core/GitStateManager.js.map +1 -0
- package/dist/core/GitSync.d.ts +199 -0
- package/dist/core/GitSync.d.ts.map +1 -0
- package/dist/core/GitSync.js +955 -0
- package/dist/core/GitSync.js.map +1 -0
- package/dist/core/GlobalInstallCleanup.d.ts +23 -0
- package/dist/core/GlobalInstallCleanup.d.ts.map +1 -0
- package/dist/core/GlobalInstallCleanup.js +130 -0
- package/dist/core/GlobalInstallCleanup.js.map +1 -0
- package/dist/core/GlobalSecretStore.d.ts +112 -0
- package/dist/core/GlobalSecretStore.d.ts.map +1 -0
- package/dist/core/GlobalSecretStore.js +396 -0
- package/dist/core/GlobalSecretStore.js.map +1 -0
- package/dist/core/HandoffManager.d.ts +163 -0
- package/dist/core/HandoffManager.d.ts.map +1 -0
- package/dist/core/HandoffManager.js +370 -0
- package/dist/core/HandoffManager.js.map +1 -0
- package/dist/core/HeartbeatManager.d.ts +120 -0
- package/dist/core/HeartbeatManager.d.ts.map +1 -0
- package/dist/core/HeartbeatManager.js +240 -0
- package/dist/core/HeartbeatManager.js.map +1 -0
- package/dist/core/InputGuard.d.ts +98 -0
- package/dist/core/InputGuard.d.ts.map +1 -0
- package/dist/core/InputGuard.js +316 -0
- package/dist/core/InputGuard.js.map +1 -0
- package/dist/core/IntentDriftDetector.d.ts +100 -0
- package/dist/core/IntentDriftDetector.d.ts.map +1 -0
- package/dist/core/IntentDriftDetector.js +325 -0
- package/dist/core/IntentDriftDetector.js.map +1 -0
- package/dist/core/JobReflector.d.ts +81 -0
- package/dist/core/JobReflector.d.ts.map +1 -0
- package/dist/core/JobReflector.js +244 -0
- package/dist/core/JobReflector.js.map +1 -0
- package/dist/core/LLMConflictResolver.d.ts +132 -0
- package/dist/core/LLMConflictResolver.d.ts.map +1 -0
- package/dist/core/LLMConflictResolver.js +372 -0
- package/dist/core/LLMConflictResolver.js.map +1 -0
- package/dist/core/LedgerAuth.d.ts +99 -0
- package/dist/core/LedgerAuth.d.ts.map +1 -0
- package/dist/core/LedgerAuth.js +215 -0
- package/dist/core/LedgerAuth.js.map +1 -0
- package/dist/core/MachineIdentity.d.ts +196 -0
- package/dist/core/MachineIdentity.d.ts.map +1 -0
- package/dist/core/MachineIdentity.js +476 -0
- package/dist/core/MachineIdentity.js.map +1 -0
- package/dist/core/MessageSentinel.d.ts +142 -0
- package/dist/core/MessageSentinel.d.ts.map +1 -0
- package/dist/core/MessageSentinel.js +426 -0
- package/dist/core/MessageSentinel.js.map +1 -0
- package/dist/core/MigrationProvenance.d.ts +62 -0
- package/dist/core/MigrationProvenance.d.ts.map +1 -0
- package/dist/core/MigrationProvenance.js +183 -0
- package/dist/core/MigrationProvenance.js.map +1 -0
- package/dist/core/MultiMachineCoordinator.d.ts +106 -0
- package/dist/core/MultiMachineCoordinator.d.ts.map +1 -0
- package/dist/core/MultiMachineCoordinator.js +311 -0
- package/dist/core/MultiMachineCoordinator.js.map +1 -0
- package/dist/core/NonceStore.d.ts +72 -0
- package/dist/core/NonceStore.d.ts.map +1 -0
- package/dist/core/NonceStore.js +163 -0
- package/dist/core/NonceStore.js.map +1 -0
- package/dist/core/OrgIntentManager.d.ts +58 -0
- package/dist/core/OrgIntentManager.d.ts.map +1 -0
- package/dist/core/OrgIntentManager.js +250 -0
- package/dist/core/OrgIntentManager.js.map +1 -0
- package/dist/core/OverlapGuard.d.ts +112 -0
- package/dist/core/OverlapGuard.d.ts.map +1 -0
- package/dist/core/OverlapGuard.js +241 -0
- package/dist/core/OverlapGuard.js.map +1 -0
- package/dist/core/PairingProtocol.d.ts +129 -0
- package/dist/core/PairingProtocol.d.ts.map +1 -0
- package/dist/core/PairingProtocol.js +265 -0
- package/dist/core/PairingProtocol.js.map +1 -0
- package/dist/core/PatternAnalyzer.d.ts +128 -0
- package/dist/core/PatternAnalyzer.d.ts.map +1 -0
- package/dist/core/PatternAnalyzer.js +388 -0
- package/dist/core/PatternAnalyzer.js.map +1 -0
- package/dist/core/PlatformActivityRegistry.d.ts +163 -0
- package/dist/core/PlatformActivityRegistry.d.ts.map +1 -0
- package/dist/core/PlatformActivityRegistry.js +307 -0
- package/dist/core/PlatformActivityRegistry.js.map +1 -0
- package/dist/core/PolicyEnforcementLayer.d.ts +63 -0
- package/dist/core/PolicyEnforcementLayer.d.ts.map +1 -0
- package/dist/core/PolicyEnforcementLayer.js +250 -0
- package/dist/core/PolicyEnforcementLayer.js.map +1 -0
- package/dist/core/PortRegistry.d.ts +9 -0
- package/dist/core/PortRegistry.d.ts.map +1 -0
- package/dist/core/PortRegistry.js +8 -0
- package/dist/core/PortRegistry.js.map +1 -0
- package/dist/core/PostUpdateMigrator.d.ts +170 -0
- package/dist/core/PostUpdateMigrator.d.ts.map +1 -0
- package/dist/core/PostUpdateMigrator.js +3674 -0
- package/dist/core/PostUpdateMigrator.js.map +1 -0
- package/dist/core/Prerequisites.d.ts +37 -0
- package/dist/core/Prerequisites.d.ts.map +1 -0
- package/dist/core/Prerequisites.js +272 -0
- package/dist/core/Prerequisites.js.map +1 -0
- package/dist/core/ProcessIntegrity.d.ts +90 -0
- package/dist/core/ProcessIntegrity.d.ts.map +1 -0
- package/dist/core/ProcessIntegrity.js +119 -0
- package/dist/core/ProcessIntegrity.js.map +1 -0
- package/dist/core/ProjectMapper.d.ts +97 -0
- package/dist/core/ProjectMapper.d.ts.map +1 -0
- package/dist/core/ProjectMapper.js +370 -0
- package/dist/core/ProjectMapper.js.map +1 -0
- package/dist/core/PromptGuard.d.ts +121 -0
- package/dist/core/PromptGuard.d.ts.map +1 -0
- package/dist/core/PromptGuard.js +259 -0
- package/dist/core/PromptGuard.js.map +1 -0
- package/dist/core/RecipientResolver.d.ts +54 -0
- package/dist/core/RecipientResolver.d.ts.map +1 -0
- package/dist/core/RecipientResolver.js +143 -0
- package/dist/core/RecipientResolver.js.map +1 -0
- package/dist/core/ReflectionConsolidator.d.ts +73 -0
- package/dist/core/ReflectionConsolidator.d.ts.map +1 -0
- package/dist/core/ReflectionConsolidator.js +202 -0
- package/dist/core/ReflectionConsolidator.js.map +1 -0
- package/dist/core/RelationshipManager.d.ts +146 -0
- package/dist/core/RelationshipManager.d.ts.map +1 -0
- package/dist/core/RelationshipManager.js +736 -0
- package/dist/core/RelationshipManager.js.map +1 -0
- package/dist/core/RelevanceFilter.d.ts +61 -0
- package/dist/core/RelevanceFilter.d.ts.map +1 -0
- package/dist/core/RelevanceFilter.js +160 -0
- package/dist/core/RelevanceFilter.js.map +1 -0
- package/dist/core/ResearchRateLimiter.d.ts +76 -0
- package/dist/core/ResearchRateLimiter.d.ts.map +1 -0
- package/dist/core/ResearchRateLimiter.js +168 -0
- package/dist/core/ResearchRateLimiter.js.map +1 -0
- package/dist/core/ResumeValidator.d.ts +58 -0
- package/dist/core/ResumeValidator.d.ts.map +1 -0
- package/dist/core/ResumeValidator.js +195 -0
- package/dist/core/ResumeValidator.js.map +1 -0
- package/dist/core/ScopeCoherenceTracker.d.ts +87 -0
- package/dist/core/ScopeCoherenceTracker.d.ts.map +1 -0
- package/dist/core/ScopeCoherenceTracker.js +226 -0
- package/dist/core/ScopeCoherenceTracker.js.map +1 -0
- package/dist/core/ScopeVerifier.d.ts +122 -0
- package/dist/core/ScopeVerifier.d.ts.map +1 -0
- package/dist/core/ScopeVerifier.js +350 -0
- package/dist/core/ScopeVerifier.js.map +1 -0
- package/dist/core/SecretManager.d.ts +120 -0
- package/dist/core/SecretManager.d.ts.map +1 -0
- package/dist/core/SecretManager.js +324 -0
- package/dist/core/SecretManager.js.map +1 -0
- package/dist/core/SecretMigrator.d.ts +39 -0
- package/dist/core/SecretMigrator.d.ts.map +1 -0
- package/dist/core/SecretMigrator.js +182 -0
- package/dist/core/SecretMigrator.js.map +1 -0
- package/dist/core/SecretRedactor.d.ts +121 -0
- package/dist/core/SecretRedactor.d.ts.map +1 -0
- package/dist/core/SecretRedactor.js +309 -0
- package/dist/core/SecretRedactor.js.map +1 -0
- package/dist/core/SecretStore.d.ts +104 -0
- package/dist/core/SecretStore.d.ts.map +1 -0
- package/dist/core/SecretStore.js +405 -0
- package/dist/core/SecretStore.js.map +1 -0
- package/dist/core/SecurityLog.d.ts +58 -0
- package/dist/core/SecurityLog.d.ts.map +1 -0
- package/dist/core/SecurityLog.js +123 -0
- package/dist/core/SecurityLog.js.map +1 -0
- package/dist/core/SendGateway.d.ts +77 -0
- package/dist/core/SendGateway.d.ts.map +1 -0
- package/dist/core/SendGateway.js +181 -0
- package/dist/core/SendGateway.js.map +1 -0
- package/dist/core/SessionManager.d.ts +304 -0
- package/dist/core/SessionManager.d.ts.map +1 -0
- package/dist/core/SessionManager.js +1402 -0
- package/dist/core/SessionManager.js.map +1 -0
- package/dist/core/SleepWakeDetector.d.ts +37 -0
- package/dist/core/SleepWakeDetector.d.ts.map +1 -0
- package/dist/core/SleepWakeDetector.js +59 -0
- package/dist/core/SleepWakeDetector.js.map +1 -0
- package/dist/core/SoulManager.d.ts +107 -0
- package/dist/core/SoulManager.d.ts.map +1 -0
- package/dist/core/SoulManager.js +574 -0
- package/dist/core/SoulManager.js.map +1 -0
- package/dist/core/StaleProcessGuard.d.ts +113 -0
- package/dist/core/StaleProcessGuard.d.ts.map +1 -0
- package/dist/core/StaleProcessGuard.js +134 -0
- package/dist/core/StaleProcessGuard.js.map +1 -0
- package/dist/core/StateManager.d.ts +56 -0
- package/dist/core/StateManager.d.ts.map +1 -0
- package/dist/core/StateManager.js +266 -0
- package/dist/core/StateManager.js.map +1 -0
- package/dist/core/StateWriteAuthority.d.ts +101 -0
- package/dist/core/StateWriteAuthority.d.ts.map +1 -0
- package/dist/core/StateWriteAuthority.js +169 -0
- package/dist/core/StateWriteAuthority.js.map +1 -0
- package/dist/core/SurfacingTemplates.d.ts +63 -0
- package/dist/core/SurfacingTemplates.d.ts.map +1 -0
- package/dist/core/SurfacingTemplates.js +138 -0
- package/dist/core/SurfacingTemplates.js.map +1 -0
- package/dist/core/SyncOrchestrator.d.ts +308 -0
- package/dist/core/SyncOrchestrator.d.ts.map +1 -0
- package/dist/core/SyncOrchestrator.js +925 -0
- package/dist/core/SyncOrchestrator.js.map +1 -0
- package/dist/core/TemporalCoherenceChecker.d.ts +140 -0
- package/dist/core/TemporalCoherenceChecker.d.ts.map +1 -0
- package/dist/core/TemporalCoherenceChecker.js +375 -0
- package/dist/core/TemporalCoherenceChecker.js.map +1 -0
- package/dist/core/TopicClassifier.d.ts +54 -0
- package/dist/core/TopicClassifier.d.ts.map +1 -0
- package/dist/core/TopicClassifier.js +144 -0
- package/dist/core/TopicClassifier.js.map +1 -0
- package/dist/core/TopicResumeMap.d.ts +76 -0
- package/dist/core/TopicResumeMap.d.ts.map +1 -0
- package/dist/core/TopicResumeMap.js +252 -0
- package/dist/core/TopicResumeMap.js.map +1 -0
- package/dist/core/TrustElevationTracker.d.ts +178 -0
- package/dist/core/TrustElevationTracker.d.ts.map +1 -0
- package/dist/core/TrustElevationTracker.js +343 -0
- package/dist/core/TrustElevationTracker.js.map +1 -0
- package/dist/core/TrustRecovery.d.ts +109 -0
- package/dist/core/TrustRecovery.d.ts.map +1 -0
- package/dist/core/TrustRecovery.js +190 -0
- package/dist/core/TrustRecovery.js.map +1 -0
- package/dist/core/UpdateChecker.d.ts +108 -0
- package/dist/core/UpdateChecker.d.ts.map +1 -0
- package/dist/core/UpdateChecker.js +593 -0
- package/dist/core/UpdateChecker.js.map +1 -0
- package/dist/core/UpdateGate.d.ts +102 -0
- package/dist/core/UpdateGate.d.ts.map +1 -0
- package/dist/core/UpdateGate.js +149 -0
- package/dist/core/UpdateGate.js.map +1 -0
- package/dist/core/UpgradeGuideProcessor.d.ts +105 -0
- package/dist/core/UpgradeGuideProcessor.d.ts.map +1 -0
- package/dist/core/UpgradeGuideProcessor.js +278 -0
- package/dist/core/UpgradeGuideProcessor.js.map +1 -0
- package/dist/core/UpgradeNotifyManager.d.ts +98 -0
- package/dist/core/UpgradeNotifyManager.d.ts.map +1 -0
- package/dist/core/UpgradeNotifyManager.js +205 -0
- package/dist/core/UpgradeNotifyManager.js.map +1 -0
- package/dist/core/WorkLedger.d.ts +144 -0
- package/dist/core/WorkLedger.d.ts.map +1 -0
- package/dist/core/WorkLedger.js +246 -0
- package/dist/core/WorkLedger.js.map +1 -0
- package/dist/core/models.d.ts +70 -0
- package/dist/core/models.d.ts.map +1 -0
- package/dist/core/models.js +110 -0
- package/dist/core/models.js.map +1 -0
- package/dist/core/reviewers/capability-accuracy.d.ts +13 -0
- package/dist/core/reviewers/capability-accuracy.d.ts.map +1 -0
- package/dist/core/reviewers/capability-accuracy.js +38 -0
- package/dist/core/reviewers/capability-accuracy.js.map +1 -0
- package/dist/core/reviewers/claim-provenance.d.ts +14 -0
- package/dist/core/reviewers/claim-provenance.d.ts.map +1 -0
- package/dist/core/reviewers/claim-provenance.js +50 -0
- package/dist/core/reviewers/claim-provenance.js.map +1 -0
- package/dist/core/reviewers/context-completeness.d.ts +13 -0
- package/dist/core/reviewers/context-completeness.d.ts.map +1 -0
- package/dist/core/reviewers/context-completeness.js +43 -0
- package/dist/core/reviewers/context-completeness.js.map +1 -0
- package/dist/core/reviewers/conversational-tone.d.ts +13 -0
- package/dist/core/reviewers/conversational-tone.d.ts.map +1 -0
- package/dist/core/reviewers/conversational-tone.js +55 -0
- package/dist/core/reviewers/conversational-tone.js.map +1 -0
- package/dist/core/reviewers/escalation-resolution.d.ts +56 -0
- package/dist/core/reviewers/escalation-resolution.d.ts.map +1 -0
- package/dist/core/reviewers/escalation-resolution.js +239 -0
- package/dist/core/reviewers/escalation-resolution.js.map +1 -0
- package/dist/core/reviewers/gate-reviewer.d.ts +26 -0
- package/dist/core/reviewers/gate-reviewer.d.ts.map +1 -0
- package/dist/core/reviewers/gate-reviewer.js +130 -0
- package/dist/core/reviewers/gate-reviewer.js.map +1 -0
- package/dist/core/reviewers/information-leakage.d.ts +21 -0
- package/dist/core/reviewers/information-leakage.d.ts.map +1 -0
- package/dist/core/reviewers/information-leakage.js +72 -0
- package/dist/core/reviewers/information-leakage.js.map +1 -0
- package/dist/core/reviewers/settling-detection.d.ts +13 -0
- package/dist/core/reviewers/settling-detection.d.ts.map +1 -0
- package/dist/core/reviewers/settling-detection.js +48 -0
- package/dist/core/reviewers/settling-detection.js.map +1 -0
- package/dist/core/reviewers/url-validity.d.ts +18 -0
- package/dist/core/reviewers/url-validity.d.ts.map +1 -0
- package/dist/core/reviewers/url-validity.js +60 -0
- package/dist/core/reviewers/url-validity.js.map +1 -0
- package/dist/core/reviewers/value-alignment.d.ts +14 -0
- package/dist/core/reviewers/value-alignment.d.ts.map +1 -0
- package/dist/core/reviewers/value-alignment.js +71 -0
- package/dist/core/reviewers/value-alignment.js.map +1 -0
- package/dist/core/types.d.ts +2159 -0
- package/dist/core/types.d.ts.map +1 -0
- package/dist/core/types.js +20 -0
- package/dist/core/types.js.map +1 -0
- package/dist/data/http-hook-templates.d.ts +53 -0
- package/dist/data/http-hook-templates.d.ts.map +1 -0
- package/dist/data/http-hook-templates.js +64 -0
- package/dist/data/http-hook-templates.js.map +1 -0
- package/dist/index.d.ts +263 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +164 -0
- package/dist/index.js.map +1 -0
- package/dist/knowledge/CoverageAuditor.d.ts +58 -0
- package/dist/knowledge/CoverageAuditor.d.ts.map +1 -0
- package/dist/knowledge/CoverageAuditor.js +153 -0
- package/dist/knowledge/CoverageAuditor.js.map +1 -0
- package/dist/knowledge/IntegrityManager.d.ts +46 -0
- package/dist/knowledge/IntegrityManager.d.ts.map +1 -0
- package/dist/knowledge/IntegrityManager.js +101 -0
- package/dist/knowledge/IntegrityManager.js.map +1 -0
- package/dist/knowledge/KnowledgeManager.d.ts +85 -0
- package/dist/knowledge/KnowledgeManager.d.ts.map +1 -0
- package/dist/knowledge/KnowledgeManager.js +194 -0
- package/dist/knowledge/KnowledgeManager.js.map +1 -0
- package/dist/knowledge/ProbeRegistry.d.ts +54 -0
- package/dist/knowledge/ProbeRegistry.d.ts.map +1 -0
- package/dist/knowledge/ProbeRegistry.js +119 -0
- package/dist/knowledge/ProbeRegistry.js.map +1 -0
- package/dist/knowledge/SelfKnowledgeTree.d.ts +108 -0
- package/dist/knowledge/SelfKnowledgeTree.d.ts.map +1 -0
- package/dist/knowledge/SelfKnowledgeTree.js +560 -0
- package/dist/knowledge/SelfKnowledgeTree.js.map +1 -0
- package/dist/knowledge/TreeGenerator.d.ts +57 -0
- package/dist/knowledge/TreeGenerator.d.ts.map +1 -0
- package/dist/knowledge/TreeGenerator.js +527 -0
- package/dist/knowledge/TreeGenerator.js.map +1 -0
- package/dist/knowledge/TreeSynthesis.d.ts +24 -0
- package/dist/knowledge/TreeSynthesis.d.ts.map +1 -0
- package/dist/knowledge/TreeSynthesis.js +61 -0
- package/dist/knowledge/TreeSynthesis.js.map +1 -0
- package/dist/knowledge/TreeTraversal.d.ts +93 -0
- package/dist/knowledge/TreeTraversal.d.ts.map +1 -0
- package/dist/knowledge/TreeTraversal.js +359 -0
- package/dist/knowledge/TreeTraversal.js.map +1 -0
- package/dist/knowledge/TreeTriage.d.ts +80 -0
- package/dist/knowledge/TreeTriage.d.ts.map +1 -0
- package/dist/knowledge/TreeTriage.js +413 -0
- package/dist/knowledge/TreeTriage.js.map +1 -0
- package/dist/knowledge/types.d.ts +183 -0
- package/dist/knowledge/types.d.ts.map +1 -0
- package/dist/knowledge/types.js +28 -0
- package/dist/knowledge/types.js.map +1 -0
- package/dist/lifeline/MessageQueue.d.ts +42 -0
- package/dist/lifeline/MessageQueue.d.ts.map +1 -0
- package/dist/lifeline/MessageQueue.js +63 -0
- package/dist/lifeline/MessageQueue.js.map +1 -0
- package/dist/lifeline/ServerSupervisor.d.ts +203 -0
- package/dist/lifeline/ServerSupervisor.d.ts.map +1 -0
- package/dist/lifeline/ServerSupervisor.js +1103 -0
- package/dist/lifeline/ServerSupervisor.js.map +1 -0
- package/dist/lifeline/SlackLifeline.d.ts +43 -0
- package/dist/lifeline/SlackLifeline.d.ts.map +1 -0
- package/dist/lifeline/SlackLifeline.js +227 -0
- package/dist/lifeline/SlackLifeline.js.map +1 -0
- package/dist/lifeline/TelegramLifeline.d.ts +180 -0
- package/dist/lifeline/TelegramLifeline.d.ts.map +1 -0
- package/dist/lifeline/TelegramLifeline.js +1533 -0
- package/dist/lifeline/TelegramLifeline.js.map +1 -0
- package/dist/memory/ActivityPartitioner.d.ts +67 -0
- package/dist/memory/ActivityPartitioner.d.ts.map +1 -0
- package/dist/memory/ActivityPartitioner.js +193 -0
- package/dist/memory/ActivityPartitioner.js.map +1 -0
- package/dist/memory/Chunker.d.ts +39 -0
- package/dist/memory/Chunker.d.ts.map +1 -0
- package/dist/memory/Chunker.js +154 -0
- package/dist/memory/Chunker.js.map +1 -0
- package/dist/memory/EmbeddingProvider.d.ts +82 -0
- package/dist/memory/EmbeddingProvider.d.ts.map +1 -0
- package/dist/memory/EmbeddingProvider.js +168 -0
- package/dist/memory/EmbeddingProvider.js.map +1 -0
- package/dist/memory/EpisodicMemory.d.ts +141 -0
- package/dist/memory/EpisodicMemory.d.ts.map +1 -0
- package/dist/memory/EpisodicMemory.js +303 -0
- package/dist/memory/EpisodicMemory.js.map +1 -0
- package/dist/memory/MemoryExporter.d.ts +82 -0
- package/dist/memory/MemoryExporter.d.ts.map +1 -0
- package/dist/memory/MemoryExporter.js +233 -0
- package/dist/memory/MemoryExporter.js.map +1 -0
- package/dist/memory/MemoryIndex.d.ts +76 -0
- package/dist/memory/MemoryIndex.d.ts.map +1 -0
- package/dist/memory/MemoryIndex.js +413 -0
- package/dist/memory/MemoryIndex.js.map +1 -0
- package/dist/memory/MemoryMigrator.d.ts +103 -0
- package/dist/memory/MemoryMigrator.d.ts.map +1 -0
- package/dist/memory/MemoryMigrator.js +510 -0
- package/dist/memory/MemoryMigrator.js.map +1 -0
- package/dist/memory/SemanticMemory.d.ts +255 -0
- package/dist/memory/SemanticMemory.d.ts.map +1 -0
- package/dist/memory/SemanticMemory.js +1130 -0
- package/dist/memory/SemanticMemory.js.map +1 -0
- package/dist/memory/TopicMemory.d.ts +227 -0
- package/dist/memory/TopicMemory.d.ts.map +1 -0
- package/dist/memory/TopicMemory.js +731 -0
- package/dist/memory/TopicMemory.js.map +1 -0
- package/dist/memory/TopicSummarizer.d.ts +69 -0
- package/dist/memory/TopicSummarizer.d.ts.map +1 -0
- package/dist/memory/TopicSummarizer.js +163 -0
- package/dist/memory/TopicSummarizer.js.map +1 -0
- package/dist/memory/VectorSearch.d.ts +80 -0
- package/dist/memory/VectorSearch.d.ts.map +1 -0
- package/dist/memory/VectorSearch.js +148 -0
- package/dist/memory/VectorSearch.js.map +1 -0
- package/dist/memory/WorkingMemoryAssembler.d.ts +122 -0
- package/dist/memory/WorkingMemoryAssembler.d.ts.map +1 -0
- package/dist/memory/WorkingMemoryAssembler.js +406 -0
- package/dist/memory/WorkingMemoryAssembler.js.map +1 -0
- package/dist/messaging/AdapterRegistry.d.ts +27 -0
- package/dist/messaging/AdapterRegistry.d.ts.map +1 -0
- package/dist/messaging/AdapterRegistry.js +40 -0
- package/dist/messaging/AdapterRegistry.js.map +1 -0
- package/dist/messaging/AgentTokenManager.d.ts +86 -0
- package/dist/messaging/AgentTokenManager.d.ts.map +1 -0
- package/dist/messaging/AgentTokenManager.js +213 -0
- package/dist/messaging/AgentTokenManager.js.map +1 -0
- package/dist/messaging/DeliveryRetryManager.d.ts +47 -0
- package/dist/messaging/DeliveryRetryManager.d.ts.map +1 -0
- package/dist/messaging/DeliveryRetryManager.js +201 -0
- package/dist/messaging/DeliveryRetryManager.js.map +1 -0
- package/dist/messaging/DropPickup.d.ts +37 -0
- package/dist/messaging/DropPickup.d.ts.map +1 -0
- package/dist/messaging/DropPickup.js +120 -0
- package/dist/messaging/DropPickup.js.map +1 -0
- package/dist/messaging/GitSyncTransport.d.ts +120 -0
- package/dist/messaging/GitSyncTransport.d.ts.map +1 -0
- package/dist/messaging/GitSyncTransport.js +296 -0
- package/dist/messaging/GitSyncTransport.js.map +1 -0
- package/dist/messaging/MessageDelivery.d.ts +27 -0
- package/dist/messaging/MessageDelivery.d.ts.map +1 -0
- package/dist/messaging/MessageDelivery.js +90 -0
- package/dist/messaging/MessageDelivery.js.map +1 -0
- package/dist/messaging/MessageFormatter.d.ts +30 -0
- package/dist/messaging/MessageFormatter.d.ts.map +1 -0
- package/dist/messaging/MessageFormatter.js +97 -0
- package/dist/messaging/MessageFormatter.js.map +1 -0
- package/dist/messaging/MessageRouter.d.ts +157 -0
- package/dist/messaging/MessageRouter.d.ts.map +1 -0
- package/dist/messaging/MessageRouter.js +657 -0
- package/dist/messaging/MessageRouter.js.map +1 -0
- package/dist/messaging/MessageStore.d.ts +52 -0
- package/dist/messaging/MessageStore.d.ts.map +1 -0
- package/dist/messaging/MessageStore.js +363 -0
- package/dist/messaging/MessageStore.js.map +1 -0
- package/dist/messaging/NotificationBatcher.d.ts +95 -0
- package/dist/messaging/NotificationBatcher.d.ts.map +1 -0
- package/dist/messaging/NotificationBatcher.js +253 -0
- package/dist/messaging/NotificationBatcher.js.map +1 -0
- package/dist/messaging/SessionSummarySentinel.d.ts +104 -0
- package/dist/messaging/SessionSummarySentinel.d.ts.map +1 -0
- package/dist/messaging/SessionSummarySentinel.js +386 -0
- package/dist/messaging/SessionSummarySentinel.js.map +1 -0
- package/dist/messaging/SpawnRequestManager.d.ts +88 -0
- package/dist/messaging/SpawnRequestManager.d.ts.map +1 -0
- package/dist/messaging/SpawnRequestManager.js +159 -0
- package/dist/messaging/SpawnRequestManager.js.map +1 -0
- package/dist/messaging/TelegramAdapter.d.ts +636 -0
- package/dist/messaging/TelegramAdapter.d.ts.map +1 -0
- package/dist/messaging/TelegramAdapter.js +3434 -0
- package/dist/messaging/TelegramAdapter.js.map +1 -0
- package/dist/messaging/TopicContentValidator.d.ts +81 -0
- package/dist/messaging/TopicContentValidator.d.ts.map +1 -0
- package/dist/messaging/TopicContentValidator.js +113 -0
- package/dist/messaging/TopicContentValidator.js.map +1 -0
- package/dist/messaging/WhatsAppAdapter.d.ts +224 -0
- package/dist/messaging/WhatsAppAdapter.d.ts.map +1 -0
- package/dist/messaging/WhatsAppAdapter.js +736 -0
- package/dist/messaging/WhatsAppAdapter.js.map +1 -0
- package/dist/messaging/backends/BaileysBackend.d.ts +74 -0
- package/dist/messaging/backends/BaileysBackend.d.ts.map +1 -0
- package/dist/messaging/backends/BaileysBackend.js +481 -0
- package/dist/messaging/backends/BaileysBackend.js.map +1 -0
- package/dist/messaging/backends/BusinessApiBackend.d.ts +173 -0
- package/dist/messaging/backends/BusinessApiBackend.d.ts.map +1 -0
- package/dist/messaging/backends/BusinessApiBackend.js +269 -0
- package/dist/messaging/backends/BusinessApiBackend.js.map +1 -0
- package/dist/messaging/backends/WhatsAppWebhookRoutes.d.ts +26 -0
- package/dist/messaging/backends/WhatsAppWebhookRoutes.d.ts.map +1 -0
- package/dist/messaging/backends/WhatsAppWebhookRoutes.js +50 -0
- package/dist/messaging/backends/WhatsAppWebhookRoutes.js.map +1 -0
- package/dist/messaging/shared/AuthGate.d.ts +102 -0
- package/dist/messaging/shared/AuthGate.d.ts.map +1 -0
- package/dist/messaging/shared/AuthGate.js +159 -0
- package/dist/messaging/shared/AuthGate.js.map +1 -0
- package/dist/messaging/shared/CommandRouter.d.ts +84 -0
- package/dist/messaging/shared/CommandRouter.d.ts.map +1 -0
- package/dist/messaging/shared/CommandRouter.js +145 -0
- package/dist/messaging/shared/CommandRouter.js.map +1 -0
- package/dist/messaging/shared/CrossPlatformAlerts.d.ts +67 -0
- package/dist/messaging/shared/CrossPlatformAlerts.d.ts.map +1 -0
- package/dist/messaging/shared/CrossPlatformAlerts.js +134 -0
- package/dist/messaging/shared/CrossPlatformAlerts.js.map +1 -0
- package/dist/messaging/shared/EncryptedAuthStore.d.ts +51 -0
- package/dist/messaging/shared/EncryptedAuthStore.d.ts.map +1 -0
- package/dist/messaging/shared/EncryptedAuthStore.js +194 -0
- package/dist/messaging/shared/EncryptedAuthStore.js.map +1 -0
- package/dist/messaging/shared/FeatureFlags.d.ts +21 -0
- package/dist/messaging/shared/FeatureFlags.d.ts.map +1 -0
- package/dist/messaging/shared/FeatureFlags.js +21 -0
- package/dist/messaging/shared/FeatureFlags.js.map +1 -0
- package/dist/messaging/shared/MessageBridge.d.ts +70 -0
- package/dist/messaging/shared/MessageBridge.d.ts.map +1 -0
- package/dist/messaging/shared/MessageBridge.js +178 -0
- package/dist/messaging/shared/MessageBridge.js.map +1 -0
- package/dist/messaging/shared/MessageLogger.d.ts +94 -0
- package/dist/messaging/shared/MessageLogger.d.ts.map +1 -0
- package/dist/messaging/shared/MessageLogger.js +173 -0
- package/dist/messaging/shared/MessageLogger.js.map +1 -0
- package/dist/messaging/shared/MessagingEventBus.d.ts +149 -0
- package/dist/messaging/shared/MessagingEventBus.d.ts.map +1 -0
- package/dist/messaging/shared/MessagingEventBus.js +111 -0
- package/dist/messaging/shared/MessagingEventBus.js.map +1 -0
- package/dist/messaging/shared/PhoneUtils.d.ts +44 -0
- package/dist/messaging/shared/PhoneUtils.d.ts.map +1 -0
- package/dist/messaging/shared/PhoneUtils.js +110 -0
- package/dist/messaging/shared/PhoneUtils.js.map +1 -0
- package/dist/messaging/shared/PrivacyConsent.d.ts +61 -0
- package/dist/messaging/shared/PrivacyConsent.d.ts.map +1 -0
- package/dist/messaging/shared/PrivacyConsent.js +132 -0
- package/dist/messaging/shared/PrivacyConsent.js.map +1 -0
- package/dist/messaging/shared/SessionChannelRegistry.d.ts +48 -0
- package/dist/messaging/shared/SessionChannelRegistry.d.ts.map +1 -0
- package/dist/messaging/shared/SessionChannelRegistry.js +144 -0
- package/dist/messaging/shared/SessionChannelRegistry.js.map +1 -0
- package/dist/messaging/shared/SmartChunker.d.ts +16 -0
- package/dist/messaging/shared/SmartChunker.d.ts.map +1 -0
- package/dist/messaging/shared/SmartChunker.js +100 -0
- package/dist/messaging/shared/SmartChunker.js.map +1 -0
- package/dist/messaging/shared/StallDetector.d.ts +85 -0
- package/dist/messaging/shared/StallDetector.d.ts.map +1 -0
- package/dist/messaging/shared/StallDetector.js +225 -0
- package/dist/messaging/shared/StallDetector.js.map +1 -0
- package/dist/messaging/shared/index.d.ts +22 -0
- package/dist/messaging/shared/index.d.ts.map +1 -0
- package/dist/messaging/shared/index.js +13 -0
- package/dist/messaging/shared/index.js.map +1 -0
- package/dist/messaging/slack/ChannelManager.d.ts +36 -0
- package/dist/messaging/slack/ChannelManager.d.ts.map +1 -0
- package/dist/messaging/slack/ChannelManager.js +100 -0
- package/dist/messaging/slack/ChannelManager.js.map +1 -0
- package/dist/messaging/slack/FileHandler.d.ts +30 -0
- package/dist/messaging/slack/FileHandler.d.ts.map +1 -0
- package/dist/messaging/slack/FileHandler.js +87 -0
- package/dist/messaging/slack/FileHandler.js.map +1 -0
- package/dist/messaging/slack/RingBuffer.d.ts +22 -0
- package/dist/messaging/slack/RingBuffer.d.ts.map +1 -0
- package/dist/messaging/slack/RingBuffer.js +48 -0
- package/dist/messaging/slack/RingBuffer.js.map +1 -0
- package/dist/messaging/slack/SlackAdapter.d.ts +283 -0
- package/dist/messaging/slack/SlackAdapter.d.ts.map +1 -0
- package/dist/messaging/slack/SlackAdapter.js +1524 -0
- package/dist/messaging/slack/SlackAdapter.js.map +1 -0
- package/dist/messaging/slack/SlackApiClient.d.ts +51 -0
- package/dist/messaging/slack/SlackApiClient.d.ts.map +1 -0
- package/dist/messaging/slack/SlackApiClient.js +94 -0
- package/dist/messaging/slack/SlackApiClient.js.map +1 -0
- package/dist/messaging/slack/SocketModeClient.d.ts +44 -0
- package/dist/messaging/slack/SocketModeClient.d.ts.map +1 -0
- package/dist/messaging/slack/SocketModeClient.js +209 -0
- package/dist/messaging/slack/SocketModeClient.js.map +1 -0
- package/dist/messaging/slack/index.d.ts +12 -0
- package/dist/messaging/slack/index.d.ts.map +1 -0
- package/dist/messaging/slack/index.js +15 -0
- package/dist/messaging/slack/index.js.map +1 -0
- package/dist/messaging/slack/sanitize.d.ts +39 -0
- package/dist/messaging/slack/sanitize.d.ts.map +1 -0
- package/dist/messaging/slack/sanitize.js +71 -0
- package/dist/messaging/slack/sanitize.js.map +1 -0
- package/dist/messaging/slack/types.d.ts +186 -0
- package/dist/messaging/slack/types.d.ts.map +1 -0
- package/dist/messaging/slack/types.js +54 -0
- package/dist/messaging/slack/types.js.map +1 -0
- package/dist/messaging/types.d.ts +400 -0
- package/dist/messaging/types.d.ts.map +1 -0
- package/dist/messaging/types.js +89 -0
- package/dist/messaging/types.js.map +1 -0
- package/dist/monitoring/AccountSwitcher.d.ts +61 -0
- package/dist/monitoring/AccountSwitcher.d.ts.map +1 -0
- package/dist/monitoring/AccountSwitcher.js +196 -0
- package/dist/monitoring/AccountSwitcher.js.map +1 -0
- package/dist/monitoring/CoherenceMonitor.d.ts +133 -0
- package/dist/monitoring/CoherenceMonitor.d.ts.map +1 -0
- package/dist/monitoring/CoherenceMonitor.js +550 -0
- package/dist/monitoring/CoherenceMonitor.js.map +1 -0
- package/dist/monitoring/CommitmentSentinel.d.ts +57 -0
- package/dist/monitoring/CommitmentSentinel.d.ts.map +1 -0
- package/dist/monitoring/CommitmentSentinel.js +251 -0
- package/dist/monitoring/CommitmentSentinel.js.map +1 -0
- package/dist/monitoring/CommitmentTracker.d.ts +186 -0
- package/dist/monitoring/CommitmentTracker.d.ts.map +1 -0
- package/dist/monitoring/CommitmentTracker.js +522 -0
- package/dist/monitoring/CommitmentTracker.js.map +1 -0
- package/dist/monitoring/CredentialProvider.d.ts +84 -0
- package/dist/monitoring/CredentialProvider.d.ts.map +1 -0
- package/dist/monitoring/CredentialProvider.js +196 -0
- package/dist/monitoring/CredentialProvider.js.map +1 -0
- package/dist/monitoring/DegradationReporter.d.ts +123 -0
- package/dist/monitoring/DegradationReporter.d.ts.map +1 -0
- package/dist/monitoring/DegradationReporter.js +241 -0
- package/dist/monitoring/DegradationReporter.js.map +1 -0
- package/dist/monitoring/FeedbackAnomalyDetector.d.ts +51 -0
- package/dist/monitoring/FeedbackAnomalyDetector.d.ts.map +1 -0
- package/dist/monitoring/FeedbackAnomalyDetector.js +120 -0
- package/dist/monitoring/FeedbackAnomalyDetector.js.map +1 -0
- package/dist/monitoring/HealthChecker.d.ts +45 -0
- package/dist/monitoring/HealthChecker.d.ts.map +1 -0
- package/dist/monitoring/HealthChecker.js +219 -0
- package/dist/monitoring/HealthChecker.js.map +1 -0
- package/dist/monitoring/HomeostasisMonitor.d.ts +102 -0
- package/dist/monitoring/HomeostasisMonitor.d.ts.map +1 -0
- package/dist/monitoring/HomeostasisMonitor.js +185 -0
- package/dist/monitoring/HomeostasisMonitor.js.map +1 -0
- package/dist/monitoring/HookEventReceiver.d.ts +132 -0
- package/dist/monitoring/HookEventReceiver.d.ts.map +1 -0
- package/dist/monitoring/HookEventReceiver.js +209 -0
- package/dist/monitoring/HookEventReceiver.js.map +1 -0
- package/dist/monitoring/InputClassifier.d.ts +68 -0
- package/dist/monitoring/InputClassifier.d.ts.map +1 -0
- package/dist/monitoring/InputClassifier.js +243 -0
- package/dist/monitoring/InputClassifier.js.map +1 -0
- package/dist/monitoring/InstructionsVerifier.d.ts +76 -0
- package/dist/monitoring/InstructionsVerifier.d.ts.map +1 -0
- package/dist/monitoring/InstructionsVerifier.js +116 -0
- package/dist/monitoring/InstructionsVerifier.js.map +1 -0
- package/dist/monitoring/MemoryPressureMonitor.d.ts +107 -0
- package/dist/monitoring/MemoryPressureMonitor.d.ts.map +1 -0
- package/dist/monitoring/MemoryPressureMonitor.js +329 -0
- package/dist/monitoring/MemoryPressureMonitor.js.map +1 -0
- package/dist/monitoring/OrphanProcessReaper.d.ts +125 -0
- package/dist/monitoring/OrphanProcessReaper.d.ts.map +1 -0
- package/dist/monitoring/OrphanProcessReaper.js +476 -0
- package/dist/monitoring/OrphanProcessReaper.js.map +1 -0
- package/dist/monitoring/PresenceProxy.d.ts +167 -0
- package/dist/monitoring/PresenceProxy.d.ts.map +1 -0
- package/dist/monitoring/PresenceProxy.js +972 -0
- package/dist/monitoring/PresenceProxy.js.map +1 -0
- package/dist/monitoring/PromptGate.d.ts +91 -0
- package/dist/monitoring/PromptGate.d.ts.map +1 -0
- package/dist/monitoring/PromptGate.js +411 -0
- package/dist/monitoring/PromptGate.js.map +1 -0
- package/dist/monitoring/QuotaCollector.d.ts +267 -0
- package/dist/monitoring/QuotaCollector.d.ts.map +1 -0
- package/dist/monitoring/QuotaCollector.js +790 -0
- package/dist/monitoring/QuotaCollector.js.map +1 -0
- package/dist/monitoring/QuotaExhaustionDetector.d.ts +21 -0
- package/dist/monitoring/QuotaExhaustionDetector.d.ts.map +1 -0
- package/dist/monitoring/QuotaExhaustionDetector.js +136 -0
- package/dist/monitoring/QuotaExhaustionDetector.js.map +1 -0
- package/dist/monitoring/QuotaManager.d.ts +191 -0
- package/dist/monitoring/QuotaManager.d.ts.map +1 -0
- package/dist/monitoring/QuotaManager.js +575 -0
- package/dist/monitoring/QuotaManager.js.map +1 -0
- package/dist/monitoring/QuotaNotifier.d.ts +38 -0
- package/dist/monitoring/QuotaNotifier.d.ts.map +1 -0
- package/dist/monitoring/QuotaNotifier.js +144 -0
- package/dist/monitoring/QuotaNotifier.js.map +1 -0
- package/dist/monitoring/QuotaTracker.d.ts +92 -0
- package/dist/monitoring/QuotaTracker.d.ts.map +1 -0
- package/dist/monitoring/QuotaTracker.js +239 -0
- package/dist/monitoring/QuotaTracker.js.map +1 -0
- package/dist/monitoring/ReflectionMetrics.d.ts +97 -0
- package/dist/monitoring/ReflectionMetrics.d.ts.map +1 -0
- package/dist/monitoring/ReflectionMetrics.js +170 -0
- package/dist/monitoring/ReflectionMetrics.js.map +1 -0
- package/dist/monitoring/SessionActivitySentinel.d.ts +95 -0
- package/dist/monitoring/SessionActivitySentinel.d.ts.map +1 -0
- package/dist/monitoring/SessionActivitySentinel.js +391 -0
- package/dist/monitoring/SessionActivitySentinel.js.map +1 -0
- package/dist/monitoring/SessionCredentialManager.d.ts +56 -0
- package/dist/monitoring/SessionCredentialManager.d.ts.map +1 -0
- package/dist/monitoring/SessionCredentialManager.js +91 -0
- package/dist/monitoring/SessionCredentialManager.js.map +1 -0
- package/dist/monitoring/SessionMigrator.d.ts +234 -0
- package/dist/monitoring/SessionMigrator.d.ts.map +1 -0
- package/dist/monitoring/SessionMigrator.js +604 -0
- package/dist/monitoring/SessionMigrator.js.map +1 -0
- package/dist/monitoring/SessionMonitor.d.ts +102 -0
- package/dist/monitoring/SessionMonitor.d.ts.map +1 -0
- package/dist/monitoring/SessionMonitor.js +238 -0
- package/dist/monitoring/SessionMonitor.js.map +1 -0
- package/dist/monitoring/SessionRecovery.d.ts +129 -0
- package/dist/monitoring/SessionRecovery.d.ts.map +1 -0
- package/dist/monitoring/SessionRecovery.js +496 -0
- package/dist/monitoring/SessionRecovery.js.map +1 -0
- package/dist/monitoring/SessionWatchdog.d.ts +138 -0
- package/dist/monitoring/SessionWatchdog.d.ts.map +1 -0
- package/dist/monitoring/SessionWatchdog.js +549 -0
- package/dist/monitoring/SessionWatchdog.js.map +1 -0
- package/dist/monitoring/StallTriageNurse.d.ts +96 -0
- package/dist/monitoring/StallTriageNurse.d.ts.map +1 -0
- package/dist/monitoring/StallTriageNurse.js +711 -0
- package/dist/monitoring/StallTriageNurse.js.map +1 -0
- package/dist/monitoring/StallTriageNurse.types.d.ts +124 -0
- package/dist/monitoring/StallTriageNurse.types.d.ts.map +1 -0
- package/dist/monitoring/StallTriageNurse.types.js +5 -0
- package/dist/monitoring/StallTriageNurse.types.js.map +1 -0
- package/dist/monitoring/SubagentTracker.d.ts +86 -0
- package/dist/monitoring/SubagentTracker.d.ts.map +1 -0
- package/dist/monitoring/SubagentTracker.js +199 -0
- package/dist/monitoring/SubagentTracker.js.map +1 -0
- package/dist/monitoring/SystemReviewer.d.ts +243 -0
- package/dist/monitoring/SystemReviewer.d.ts.map +1 -0
- package/dist/monitoring/SystemReviewer.js +697 -0
- package/dist/monitoring/SystemReviewer.js.map +1 -0
- package/dist/monitoring/TelemetryAuth.d.ts +64 -0
- package/dist/monitoring/TelemetryAuth.d.ts.map +1 -0
- package/dist/monitoring/TelemetryAuth.js +141 -0
- package/dist/monitoring/TelemetryAuth.js.map +1 -0
- package/dist/monitoring/TelemetryCollector.d.ts +95 -0
- package/dist/monitoring/TelemetryCollector.d.ts.map +1 -0
- package/dist/monitoring/TelemetryCollector.js +326 -0
- package/dist/monitoring/TelemetryCollector.js.map +1 -0
- package/dist/monitoring/TelemetryHeartbeat.d.ts +160 -0
- package/dist/monitoring/TelemetryHeartbeat.d.ts.map +1 -0
- package/dist/monitoring/TelemetryHeartbeat.js +450 -0
- package/dist/monitoring/TelemetryHeartbeat.js.map +1 -0
- package/dist/monitoring/TriageOrchestrator.d.ts +217 -0
- package/dist/monitoring/TriageOrchestrator.d.ts.map +1 -0
- package/dist/monitoring/TriageOrchestrator.js +801 -0
- package/dist/monitoring/TriageOrchestrator.js.map +1 -0
- package/dist/monitoring/WorktreeMonitor.d.ts +124 -0
- package/dist/monitoring/WorktreeMonitor.d.ts.map +1 -0
- package/dist/monitoring/WorktreeMonitor.js +379 -0
- package/dist/monitoring/WorktreeMonitor.js.map +1 -0
- package/dist/monitoring/crash-detector.d.ts +50 -0
- package/dist/monitoring/crash-detector.d.ts.map +1 -0
- package/dist/monitoring/crash-detector.js +224 -0
- package/dist/monitoring/crash-detector.js.map +1 -0
- package/dist/monitoring/jsonl-truncator.d.ts +44 -0
- package/dist/monitoring/jsonl-truncator.d.ts.map +1 -0
- package/dist/monitoring/jsonl-truncator.js +224 -0
- package/dist/monitoring/jsonl-truncator.js.map +1 -0
- package/dist/monitoring/probes/LifelineProbe.d.ts +38 -0
- package/dist/monitoring/probes/LifelineProbe.d.ts.map +1 -0
- package/dist/monitoring/probes/LifelineProbe.js +285 -0
- package/dist/monitoring/probes/LifelineProbe.js.map +1 -0
- package/dist/monitoring/probes/MessagingProbe.d.ts +23 -0
- package/dist/monitoring/probes/MessagingProbe.d.ts.map +1 -0
- package/dist/monitoring/probes/MessagingProbe.js +214 -0
- package/dist/monitoring/probes/MessagingProbe.js.map +1 -0
- package/dist/monitoring/probes/PlatformProbe.d.ts +15 -0
- package/dist/monitoring/probes/PlatformProbe.d.ts.map +1 -0
- package/dist/monitoring/probes/PlatformProbe.js +222 -0
- package/dist/monitoring/probes/PlatformProbe.js.map +1 -0
- package/dist/monitoring/probes/SchedulerProbe.d.ts +33 -0
- package/dist/monitoring/probes/SchedulerProbe.d.ts.map +1 -0
- package/dist/monitoring/probes/SchedulerProbe.js +196 -0
- package/dist/monitoring/probes/SchedulerProbe.js.map +1 -0
- package/dist/monitoring/probes/SessionProbe.d.ts +28 -0
- package/dist/monitoring/probes/SessionProbe.d.ts.map +1 -0
- package/dist/monitoring/probes/SessionProbe.js +234 -0
- package/dist/monitoring/probes/SessionProbe.js.map +1 -0
- package/dist/monitoring/stall-detector.d.ts +34 -0
- package/dist/monitoring/stall-detector.d.ts.map +1 -0
- package/dist/monitoring/stall-detector.js +151 -0
- package/dist/monitoring/stall-detector.js.map +1 -0
- package/dist/paste/PasteManager.d.ts +154 -0
- package/dist/paste/PasteManager.d.ts.map +1 -0
- package/dist/paste/PasteManager.js +524 -0
- package/dist/paste/PasteManager.js.map +1 -0
- package/dist/paste/TruncationDetector.d.ts +51 -0
- package/dist/paste/TruncationDetector.d.ts.map +1 -0
- package/dist/paste/TruncationDetector.js +220 -0
- package/dist/paste/TruncationDetector.js.map +1 -0
- package/dist/privacy/OutputPrivacyRouter.d.ts +65 -0
- package/dist/privacy/OutputPrivacyRouter.d.ts.map +1 -0
- package/dist/privacy/OutputPrivacyRouter.js +156 -0
- package/dist/privacy/OutputPrivacyRouter.js.map +1 -0
- package/dist/publishing/PrivateViewer.d.ts +63 -0
- package/dist/publishing/PrivateViewer.d.ts.map +1 -0
- package/dist/publishing/PrivateViewer.js +398 -0
- package/dist/publishing/PrivateViewer.js.map +1 -0
- package/dist/publishing/TelegraphService.d.ts +137 -0
- package/dist/publishing/TelegraphService.d.ts.map +1 -0
- package/dist/publishing/TelegraphService.js +410 -0
- package/dist/publishing/TelegraphService.js.map +1 -0
- package/dist/scaffold/bootstrap.d.ts +21 -0
- package/dist/scaffold/bootstrap.d.ts.map +1 -0
- package/dist/scaffold/bootstrap.js +125 -0
- package/dist/scaffold/bootstrap.js.map +1 -0
- package/dist/scaffold/templates.d.ts +47 -0
- package/dist/scaffold/templates.d.ts.map +1 -0
- package/dist/scaffold/templates.js +1506 -0
- package/dist/scaffold/templates.js.map +1 -0
- package/dist/scheduler/IntegrationGate.d.ts +81 -0
- package/dist/scheduler/IntegrationGate.d.ts.map +1 -0
- package/dist/scheduler/IntegrationGate.js +242 -0
- package/dist/scheduler/IntegrationGate.js.map +1 -0
- package/dist/scheduler/JobClaimManager.d.ts +137 -0
- package/dist/scheduler/JobClaimManager.d.ts.map +1 -0
- package/dist/scheduler/JobClaimManager.js +283 -0
- package/dist/scheduler/JobClaimManager.js.map +1 -0
- package/dist/scheduler/JobLoader.d.ts +28 -0
- package/dist/scheduler/JobLoader.d.ts.map +1 -0
- package/dist/scheduler/JobLoader.js +269 -0
- package/dist/scheduler/JobLoader.js.map +1 -0
- package/dist/scheduler/JobRunHistory.d.ts +180 -0
- package/dist/scheduler/JobRunHistory.d.ts.map +1 -0
- package/dist/scheduler/JobRunHistory.js +349 -0
- package/dist/scheduler/JobRunHistory.js.map +1 -0
- package/dist/scheduler/JobScheduler.d.ts +244 -0
- package/dist/scheduler/JobScheduler.d.ts.map +1 -0
- package/dist/scheduler/JobScheduler.js +1085 -0
- package/dist/scheduler/JobScheduler.js.map +1 -0
- package/dist/scheduler/SkipLedger.d.ts +65 -0
- package/dist/scheduler/SkipLedger.d.ts.map +1 -0
- package/dist/scheduler/SkipLedger.js +179 -0
- package/dist/scheduler/SkipLedger.js.map +1 -0
- package/dist/security/LLMSanitizer.d.ts +65 -0
- package/dist/security/LLMSanitizer.d.ts.map +1 -0
- package/dist/security/LLMSanitizer.js +153 -0
- package/dist/security/LLMSanitizer.js.map +1 -0
- package/dist/security/ManifestIntegrity.d.ts +72 -0
- package/dist/security/ManifestIntegrity.d.ts.map +1 -0
- package/dist/security/ManifestIntegrity.js +159 -0
- package/dist/security/ManifestIntegrity.js.map +1 -0
- package/dist/server/AgentServer.d.ts +134 -0
- package/dist/server/AgentServer.d.ts.map +1 -0
- package/dist/server/AgentServer.js +307 -0
- package/dist/server/AgentServer.js.map +1 -0
- package/dist/server/SecretDrop.d.ts +133 -0
- package/dist/server/SecretDrop.d.ts.map +1 -0
- package/dist/server/SecretDrop.js +473 -0
- package/dist/server/SecretDrop.js.map +1 -0
- package/dist/server/WebSocketManager.d.ts +80 -0
- package/dist/server/WebSocketManager.d.ts.map +1 -0
- package/dist/server/WebSocketManager.js +367 -0
- package/dist/server/WebSocketManager.js.map +1 -0
- package/dist/server/fileRoutes.d.ts +19 -0
- package/dist/server/fileRoutes.d.ts.map +1 -0
- package/dist/server/fileRoutes.js +578 -0
- package/dist/server/fileRoutes.js.map +1 -0
- package/dist/server/machineAuth.d.ts +87 -0
- package/dist/server/machineAuth.d.ts.map +1 -0
- package/dist/server/machineAuth.js +188 -0
- package/dist/server/machineAuth.js.map +1 -0
- package/dist/server/machineRoutes.d.ts +49 -0
- package/dist/server/machineRoutes.d.ts.map +1 -0
- package/dist/server/machineRoutes.js +305 -0
- package/dist/server/machineRoutes.js.map +1 -0
- package/dist/server/middleware.d.ts +32 -0
- package/dist/server/middleware.d.ts.map +1 -0
- package/dist/server/middleware.js +202 -0
- package/dist/server/middleware.js.map +1 -0
- package/dist/server/routes.d.ts +132 -0
- package/dist/server/routes.d.ts.map +1 -0
- package/dist/server/routes.js +8124 -0
- package/dist/server/routes.js.map +1 -0
- package/dist/threadline/A2AGateway.d.ts +184 -0
- package/dist/threadline/A2AGateway.d.ts.map +1 -0
- package/dist/threadline/A2AGateway.js +438 -0
- package/dist/threadline/A2AGateway.js.map +1 -0
- package/dist/threadline/AgentCard.d.ts +116 -0
- package/dist/threadline/AgentCard.d.ts.map +1 -0
- package/dist/threadline/AgentCard.js +212 -0
- package/dist/threadline/AgentCard.js.map +1 -0
- package/dist/threadline/AgentDiscovery.d.ts +156 -0
- package/dist/threadline/AgentDiscovery.d.ts.map +1 -0
- package/dist/threadline/AgentDiscovery.js +390 -0
- package/dist/threadline/AgentDiscovery.js.map +1 -0
- package/dist/threadline/AgentTrustManager.d.ts +190 -0
- package/dist/threadline/AgentTrustManager.d.ts.map +1 -0
- package/dist/threadline/AgentTrustManager.js +526 -0
- package/dist/threadline/AgentTrustManager.js.map +1 -0
- package/dist/threadline/ApprovalQueue.d.ts +71 -0
- package/dist/threadline/ApprovalQueue.d.ts.map +1 -0
- package/dist/threadline/ApprovalQueue.js +154 -0
- package/dist/threadline/ApprovalQueue.js.map +1 -0
- package/dist/threadline/AutonomyGate.d.ts +130 -0
- package/dist/threadline/AutonomyGate.d.ts.map +1 -0
- package/dist/threadline/AutonomyGate.js +267 -0
- package/dist/threadline/AutonomyGate.js.map +1 -0
- package/dist/threadline/CircuitBreaker.d.ts +89 -0
- package/dist/threadline/CircuitBreaker.d.ts.map +1 -0
- package/dist/threadline/CircuitBreaker.js +238 -0
- package/dist/threadline/CircuitBreaker.js.map +1 -0
- package/dist/threadline/ComputeMeter.d.ts +114 -0
- package/dist/threadline/ComputeMeter.d.ts.map +1 -0
- package/dist/threadline/ComputeMeter.js +350 -0
- package/dist/threadline/ComputeMeter.js.map +1 -0
- package/dist/threadline/ContentClassifier.d.ts +83 -0
- package/dist/threadline/ContentClassifier.d.ts.map +1 -0
- package/dist/threadline/ContentClassifier.js +201 -0
- package/dist/threadline/ContentClassifier.js.map +1 -0
- package/dist/threadline/ContextThreadMap.d.ts +103 -0
- package/dist/threadline/ContextThreadMap.d.ts.map +1 -0
- package/dist/threadline/ContextThreadMap.js +279 -0
- package/dist/threadline/ContextThreadMap.js.map +1 -0
- package/dist/threadline/DNSVerifier.d.ts +48 -0
- package/dist/threadline/DNSVerifier.d.ts.map +1 -0
- package/dist/threadline/DNSVerifier.js +138 -0
- package/dist/threadline/DNSVerifier.js.map +1 -0
- package/dist/threadline/DigestCollector.d.ts +70 -0
- package/dist/threadline/DigestCollector.d.ts.map +1 -0
- package/dist/threadline/DigestCollector.js +146 -0
- package/dist/threadline/DigestCollector.js.map +1 -0
- package/dist/threadline/HandshakeManager.d.ts +130 -0
- package/dist/threadline/HandshakeManager.d.ts.map +1 -0
- package/dist/threadline/HandshakeManager.js +402 -0
- package/dist/threadline/HandshakeManager.js.map +1 -0
- package/dist/threadline/InboundMessageGate.d.ts +80 -0
- package/dist/threadline/InboundMessageGate.d.ts.map +1 -0
- package/dist/threadline/InboundMessageGate.js +241 -0
- package/dist/threadline/InboundMessageGate.js.map +1 -0
- package/dist/threadline/InvitationManager.d.ts +91 -0
- package/dist/threadline/InvitationManager.d.ts.map +1 -0
- package/dist/threadline/InvitationManager.js +228 -0
- package/dist/threadline/InvitationManager.js.map +1 -0
- package/dist/threadline/ListenerSessionManager.d.ts +147 -0
- package/dist/threadline/ListenerSessionManager.d.ts.map +1 -0
- package/dist/threadline/ListenerSessionManager.js +326 -0
- package/dist/threadline/ListenerSessionManager.js.map +1 -0
- package/dist/threadline/MCPAuth.d.ts +98 -0
- package/dist/threadline/MCPAuth.d.ts.map +1 -0
- package/dist/threadline/MCPAuth.js +228 -0
- package/dist/threadline/MCPAuth.js.map +1 -0
- package/dist/threadline/OpenClawBridge.d.ts +143 -0
- package/dist/threadline/OpenClawBridge.d.ts.map +1 -0
- package/dist/threadline/OpenClawBridge.js +336 -0
- package/dist/threadline/OpenClawBridge.js.map +1 -0
- package/dist/threadline/OpenClawSkillManifest.d.ts +47 -0
- package/dist/threadline/OpenClawSkillManifest.d.ts.map +1 -0
- package/dist/threadline/OpenClawSkillManifest.js +148 -0
- package/dist/threadline/OpenClawSkillManifest.js.map +1 -0
- package/dist/threadline/RateLimiter.d.ts +105 -0
- package/dist/threadline/RateLimiter.d.ts.map +1 -0
- package/dist/threadline/RateLimiter.js +236 -0
- package/dist/threadline/RateLimiter.js.map +1 -0
- package/dist/threadline/RelayGroundingPreamble.d.ts +48 -0
- package/dist/threadline/RelayGroundingPreamble.d.ts.map +1 -0
- package/dist/threadline/RelayGroundingPreamble.js +68 -0
- package/dist/threadline/RelayGroundingPreamble.js.map +1 -0
- package/dist/threadline/SessionLifecycle.d.ts +136 -0
- package/dist/threadline/SessionLifecycle.d.ts.map +1 -0
- package/dist/threadline/SessionLifecycle.js +317 -0
- package/dist/threadline/SessionLifecycle.js.map +1 -0
- package/dist/threadline/ThreadResumeMap.d.ts +128 -0
- package/dist/threadline/ThreadResumeMap.d.ts.map +1 -0
- package/dist/threadline/ThreadResumeMap.js +324 -0
- package/dist/threadline/ThreadResumeMap.js.map +1 -0
- package/dist/threadline/ThreadlineBootstrap.d.ts +68 -0
- package/dist/threadline/ThreadlineBootstrap.d.ts.map +1 -0
- package/dist/threadline/ThreadlineBootstrap.js +293 -0
- package/dist/threadline/ThreadlineBootstrap.js.map +1 -0
- package/dist/threadline/ThreadlineCrypto.d.ts +53 -0
- package/dist/threadline/ThreadlineCrypto.d.ts.map +1 -0
- package/dist/threadline/ThreadlineCrypto.js +123 -0
- package/dist/threadline/ThreadlineCrypto.js.map +1 -0
- package/dist/threadline/ThreadlineEndpoints.d.ts +35 -0
- package/dist/threadline/ThreadlineEndpoints.d.ts.map +1 -0
- package/dist/threadline/ThreadlineEndpoints.js +313 -0
- package/dist/threadline/ThreadlineEndpoints.js.map +1 -0
- package/dist/threadline/ThreadlineMCPServer.d.ts +165 -0
- package/dist/threadline/ThreadlineMCPServer.d.ts.map +1 -0
- package/dist/threadline/ThreadlineMCPServer.js +885 -0
- package/dist/threadline/ThreadlineMCPServer.js.map +1 -0
- package/dist/threadline/ThreadlineRouter.d.ts +105 -0
- package/dist/threadline/ThreadlineRouter.d.ts.map +1 -0
- package/dist/threadline/ThreadlineRouter.js +323 -0
- package/dist/threadline/ThreadlineRouter.js.map +1 -0
- package/dist/threadline/TrustBootstrap.d.ts +92 -0
- package/dist/threadline/TrustBootstrap.d.ts.map +1 -0
- package/dist/threadline/TrustBootstrap.js +256 -0
- package/dist/threadline/TrustBootstrap.js.map +1 -0
- package/dist/threadline/adapters/AutoGenTool.d.ts +42 -0
- package/dist/threadline/adapters/AutoGenTool.d.ts.map +1 -0
- package/dist/threadline/adapters/AutoGenTool.js +145 -0
- package/dist/threadline/adapters/AutoGenTool.js.map +1 -0
- package/dist/threadline/adapters/CrewAITool.d.ts +31 -0
- package/dist/threadline/adapters/CrewAITool.d.ts.map +1 -0
- package/dist/threadline/adapters/CrewAITool.js +112 -0
- package/dist/threadline/adapters/CrewAITool.js.map +1 -0
- package/dist/threadline/adapters/LangGraphTool.d.ts +48 -0
- package/dist/threadline/adapters/LangGraphTool.d.ts.map +1 -0
- package/dist/threadline/adapters/LangGraphTool.js +153 -0
- package/dist/threadline/adapters/LangGraphTool.js.map +1 -0
- package/dist/threadline/adapters/RESTServer.d.ts +74 -0
- package/dist/threadline/adapters/RESTServer.d.ts.map +1 -0
- package/dist/threadline/adapters/RESTServer.js +291 -0
- package/dist/threadline/adapters/RESTServer.js.map +1 -0
- package/dist/threadline/adapters/index.d.ts +14 -0
- package/dist/threadline/adapters/index.d.ts.map +1 -0
- package/dist/threadline/adapters/index.js +10 -0
- package/dist/threadline/adapters/index.js.map +1 -0
- package/dist/threadline/client/IdentityManager.d.ts +40 -0
- package/dist/threadline/client/IdentityManager.d.ts.map +1 -0
- package/dist/threadline/client/IdentityManager.js +106 -0
- package/dist/threadline/client/IdentityManager.js.map +1 -0
- package/dist/threadline/client/MessageEncryptor.d.ts +63 -0
- package/dist/threadline/client/MessageEncryptor.d.ts.map +1 -0
- package/dist/threadline/client/MessageEncryptor.js +195 -0
- package/dist/threadline/client/MessageEncryptor.js.map +1 -0
- package/dist/threadline/client/RegistryRestClient.d.ts +46 -0
- package/dist/threadline/client/RegistryRestClient.d.ts.map +1 -0
- package/dist/threadline/client/RegistryRestClient.js +114 -0
- package/dist/threadline/client/RegistryRestClient.js.map +1 -0
- package/dist/threadline/client/RelayClient.d.ts +77 -0
- package/dist/threadline/client/RelayClient.d.ts.map +1 -0
- package/dist/threadline/client/RelayClient.js +249 -0
- package/dist/threadline/client/RelayClient.js.map +1 -0
- package/dist/threadline/client/ThreadlineClient.d.ts +117 -0
- package/dist/threadline/client/ThreadlineClient.d.ts.map +1 -0
- package/dist/threadline/client/ThreadlineClient.js +286 -0
- package/dist/threadline/client/ThreadlineClient.js.map +1 -0
- package/dist/threadline/client/index.d.ts +14 -0
- package/dist/threadline/client/index.d.ts.map +1 -0
- package/dist/threadline/client/index.js +9 -0
- package/dist/threadline/client/index.js.map +1 -0
- package/dist/threadline/index.d.ts +81 -0
- package/dist/threadline/index.d.ts.map +1 -0
- package/dist/threadline/index.js +57 -0
- package/dist/threadline/index.js.map +1 -0
- package/dist/threadline/mcp-stdio-entry.d.ts +24 -0
- package/dist/threadline/mcp-stdio-entry.d.ts.map +1 -0
- package/dist/threadline/mcp-stdio-entry.js +230 -0
- package/dist/threadline/mcp-stdio-entry.js.map +1 -0
- package/dist/threadline/relay/A2ABridge.d.ts +91 -0
- package/dist/threadline/relay/A2ABridge.d.ts.map +1 -0
- package/dist/threadline/relay/A2ABridge.js +457 -0
- package/dist/threadline/relay/A2ABridge.js.map +1 -0
- package/dist/threadline/relay/AbuseDetector.d.ts +131 -0
- package/dist/threadline/relay/AbuseDetector.d.ts.map +1 -0
- package/dist/threadline/relay/AbuseDetector.js +358 -0
- package/dist/threadline/relay/AbuseDetector.js.map +1 -0
- package/dist/threadline/relay/AdminServer.d.ts +55 -0
- package/dist/threadline/relay/AdminServer.d.ts.map +1 -0
- package/dist/threadline/relay/AdminServer.js +215 -0
- package/dist/threadline/relay/AdminServer.js.map +1 -0
- package/dist/threadline/relay/ConnectionManager.d.ts +86 -0
- package/dist/threadline/relay/ConnectionManager.d.ts.map +1 -0
- package/dist/threadline/relay/ConnectionManager.js +356 -0
- package/dist/threadline/relay/ConnectionManager.js.map +1 -0
- package/dist/threadline/relay/MessageRouter.d.ts +46 -0
- package/dist/threadline/relay/MessageRouter.d.ts.map +1 -0
- package/dist/threadline/relay/MessageRouter.js +138 -0
- package/dist/threadline/relay/MessageRouter.js.map +1 -0
- package/dist/threadline/relay/OfflineQueue.d.ts +87 -0
- package/dist/threadline/relay/OfflineQueue.d.ts.map +1 -0
- package/dist/threadline/relay/OfflineQueue.js +137 -0
- package/dist/threadline/relay/OfflineQueue.js.map +1 -0
- package/dist/threadline/relay/PresenceRegistry.d.ts +62 -0
- package/dist/threadline/relay/PresenceRegistry.d.ts.map +1 -0
- package/dist/threadline/relay/PresenceRegistry.js +148 -0
- package/dist/threadline/relay/PresenceRegistry.js.map +1 -0
- package/dist/threadline/relay/RegistryAuth.d.ts +45 -0
- package/dist/threadline/relay/RegistryAuth.d.ts.map +1 -0
- package/dist/threadline/relay/RegistryAuth.js +118 -0
- package/dist/threadline/relay/RegistryAuth.js.map +1 -0
- package/dist/threadline/relay/RegistryStore.d.ts +149 -0
- package/dist/threadline/relay/RegistryStore.d.ts.map +1 -0
- package/dist/threadline/relay/RegistryStore.js +542 -0
- package/dist/threadline/relay/RegistryStore.js.map +1 -0
- package/dist/threadline/relay/RelayMetrics.d.ts +62 -0
- package/dist/threadline/relay/RelayMetrics.d.ts.map +1 -0
- package/dist/threadline/relay/RelayMetrics.js +149 -0
- package/dist/threadline/relay/RelayMetrics.js.map +1 -0
- package/dist/threadline/relay/RelayRateLimiter.d.ts +58 -0
- package/dist/threadline/relay/RelayRateLimiter.d.ts.map +1 -0
- package/dist/threadline/relay/RelayRateLimiter.js +116 -0
- package/dist/threadline/relay/RelayRateLimiter.js.map +1 -0
- package/dist/threadline/relay/RelayServer.d.ts +94 -0
- package/dist/threadline/relay/RelayServer.d.ts.map +1 -0
- package/dist/threadline/relay/RelayServer.js +1049 -0
- package/dist/threadline/relay/RelayServer.js.map +1 -0
- package/dist/threadline/relay/index.d.ts +28 -0
- package/dist/threadline/relay/index.d.ts.map +1 -0
- package/dist/threadline/relay/index.js +17 -0
- package/dist/threadline/relay/index.js.map +1 -0
- package/dist/threadline/relay/types.d.ts +215 -0
- package/dist/threadline/relay/types.d.ts.map +1 -0
- package/dist/threadline/relay/types.js +21 -0
- package/dist/threadline/relay/types.js.map +1 -0
- package/dist/threadline/types.d.ts +39 -0
- package/dist/threadline/types.d.ts.map +1 -0
- package/dist/threadline/types.js +10 -0
- package/dist/threadline/types.js.map +1 -0
- package/dist/tunnel/TunnelManager.d.ts +113 -0
- package/dist/tunnel/TunnelManager.d.ts.map +1 -0
- package/dist/tunnel/TunnelManager.js +474 -0
- package/dist/tunnel/TunnelManager.js.map +1 -0
- package/dist/types/pipeline.d.ts +203 -0
- package/dist/types/pipeline.d.ts.map +1 -0
- package/dist/types/pipeline.js +152 -0
- package/dist/types/pipeline.js.map +1 -0
- package/dist/users/GdprCommands.d.ts +44 -0
- package/dist/users/GdprCommands.d.ts.map +1 -0
- package/dist/users/GdprCommands.js +153 -0
- package/dist/users/GdprCommands.js.map +1 -0
- package/dist/users/OnboardingGate.d.ts +107 -0
- package/dist/users/OnboardingGate.d.ts.map +1 -0
- package/dist/users/OnboardingGate.js +240 -0
- package/dist/users/OnboardingGate.js.map +1 -0
- package/dist/users/UserContextBuilder.d.ts +47 -0
- package/dist/users/UserContextBuilder.d.ts.map +1 -0
- package/dist/users/UserContextBuilder.js +174 -0
- package/dist/users/UserContextBuilder.js.map +1 -0
- package/dist/users/UserManager.d.ts +76 -0
- package/dist/users/UserManager.d.ts.map +1 -0
- package/dist/users/UserManager.js +213 -0
- package/dist/users/UserManager.js.map +1 -0
- package/dist/users/UserOnboarding.d.ts +145 -0
- package/dist/users/UserOnboarding.d.ts.map +1 -0
- package/dist/users/UserOnboarding.js +488 -0
- package/dist/users/UserOnboarding.js.map +1 -0
- package/dist/users/UserPropagator.d.ts +75 -0
- package/dist/users/UserPropagator.d.ts.map +1 -0
- package/dist/users/UserPropagator.js +145 -0
- package/dist/users/UserPropagator.js.map +1 -0
- package/dist/utils/jsonl-rotation.d.ts +27 -0
- package/dist/utils/jsonl-rotation.d.ts.map +1 -0
- package/dist/utils/jsonl-rotation.js +63 -0
- package/dist/utils/jsonl-rotation.js.map +1 -0
- package/dist/utils/privacy.d.ts +88 -0
- package/dist/utils/privacy.d.ts.map +1 -0
- package/dist/utils/privacy.js +182 -0
- package/dist/utils/privacy.js.map +1 -0
- package/dist/utils/sanitize.d.ts +81 -0
- package/dist/utils/sanitize.d.ts.map +1 -0
- package/dist/utils/sanitize.js +122 -0
- package/dist/utils/sanitize.js.map +1 -0
- package/package.json +1 -0
- package/playbook-scripts/atomic_write.py +133 -0
- package/playbook-scripts/bootstrap-manifest.json +92 -0
- package/playbook-scripts/playbook-annotate-context.py +239 -0
- package/playbook-scripts/playbook-assemble.py +385 -0
- package/playbook-scripts/playbook-dashboard.py +242 -0
- package/playbook-scripts/playbook-decay.py +377 -0
- package/playbook-scripts/playbook-dedup-job.py +252 -0
- package/playbook-scripts/playbook-dedup.py +341 -0
- package/playbook-scripts/playbook-delta-validator.py +576 -0
- package/playbook-scripts/playbook-dsar.py +291 -0
- package/playbook-scripts/playbook-eval-log.py +425 -0
- package/playbook-scripts/playbook-failsafe.py +513 -0
- package/playbook-scripts/playbook-feedback-quarantine.py +335 -0
- package/playbook-scripts/playbook-history.py +293 -0
- package/playbook-scripts/playbook-hmac.py +224 -0
- package/playbook-scripts/playbook-lifecycle.py +952 -0
- package/playbook-scripts/playbook-manifest.py +458 -0
- package/playbook-scripts/playbook-micro-eval.py +316 -0
- package/playbook-scripts/playbook-migrate-lessons.py +396 -0
- package/playbook-scripts/playbook-mount.py +393 -0
- package/playbook-scripts/playbook-offline-adapt.py +323 -0
- package/playbook-scripts/playbook-pii-screen.py +207 -0
- package/playbook-scripts/playbook-reflector.py +266 -0
- package/playbook-scripts/playbook-relevance.py +269 -0
- package/playbook-scripts/playbook-retirement.py +365 -0
- package/playbook-scripts/playbook-schema-validate.py +267 -0
- package/playbook-scripts/playbook-scratchpad.py +346 -0
- package/playbook-scripts/playbook-semantic-verify.py +280 -0
- package/playbook-scripts/playbook-spawn-contract.py +341 -0
- package/playbook-scripts/playbook-token-reestimate.py +248 -0
- package/playbook-scripts/playbook-verify.py +357 -0
- package/playbook-scripts/playbook_backend.py +249 -0
- package/playbook-scripts/playbook_paths.py +232 -0
- package/playbook-scripts/schemas/context-delta.schema.json +137 -0
- package/playbook-scripts/schemas/context-manifest.schema.json +200 -0
- package/playbook-scripts/schemas/playbook-config.schema.json +184 -0
- package/scripts/analyze-release.js +752 -0
- package/scripts/check-upgrade-guide.js +373 -0
- package/scripts/collect-metrics.py +248 -0
- package/scripts/demo-two-agents.mjs +187 -0
- package/scripts/fix-better-sqlite3.cjs +100 -0
- package/scripts/generate-builtin-manifest.cjs +440 -0
- package/scripts/pre-push-gate.js +177 -0
- package/scripts/relay-entrypoint.mjs +18 -0
- package/scripts/seed-registry.mjs +258 -0
- package/scripts/telemetry-worker/worker.js +776 -0
- package/scripts/telemetry-worker/wrangler.toml +7 -0
- package/scripts/test-bootstrap-relay.mjs +90 -0
- package/scripts/test-multi-agent-relay.mjs +395 -0
- package/scripts/test-relay-cloud.mjs +389 -0
- package/scripts/test-relay-live.mjs +550 -0
- package/src/data/builtin-manifest.json +1463 -0
- package/src/data/http-hook-templates.ts +81 -0
- package/src/templates/hooks/compaction-recovery.sh +371 -0
- package/src/templates/hooks/dangerous-command-guard.sh +100 -0
- package/src/templates/hooks/free-text-guard.sh +96 -0
- package/src/templates/hooks/grounding-before-messaging.sh +52 -0
- package/src/templates/hooks/session-start.sh +339 -0
- package/src/templates/hooks/settings-template.json +142 -0
- package/src/templates/hooks/slack-channel-context.sh +98 -0
- package/src/templates/hooks/telegram-topic-context.sh +117 -0
- package/src/templates/scripts/convergence-check.sh +99 -0
- package/src/templates/scripts/git-sync-gate.sh +89 -0
- package/src/templates/scripts/health-watchdog.sh +63 -0
- package/src/templates/scripts/serendipity-capture.sh +345 -0
- package/src/templates/scripts/slack-reply.sh +74 -0
- package/src/templates/scripts/smart-fetch.py +215 -0
- package/src/templates/scripts/telegram-reply.sh +67 -0
- package/src/templates/scripts/whatsapp-reply.sh +68 -0
- package/upgrades/0.10.0.md +254 -0
- package/upgrades/0.10.1.md +47 -0
- package/upgrades/0.10.2.md +26 -0
- package/upgrades/0.10.3.md +23 -0
- package/upgrades/0.10.4.md +26 -0
- package/upgrades/0.10.5.md +19 -0
- package/upgrades/0.10.6.md +35 -0
- package/upgrades/0.10.7.md +48 -0
- package/upgrades/0.10.8.md +53 -0
- package/upgrades/0.10.9.md +21 -0
- package/upgrades/0.11.0.md +146 -0
- package/upgrades/0.12.0.md +31 -0
- package/upgrades/0.12.1.md +21 -0
- package/upgrades/0.12.10.md +26 -0
- package/upgrades/0.12.11.md +23 -0
- package/upgrades/0.12.12.md +23 -0
- package/upgrades/0.12.13.md +19 -0
- package/upgrades/0.12.14.md +21 -0
- package/upgrades/0.12.15.md +26 -0
- package/upgrades/0.12.16.md +33 -0
- package/upgrades/0.12.17.md +38 -0
- package/upgrades/0.12.18.md +27 -0
- package/upgrades/0.12.19.md +31 -0
- package/upgrades/0.12.2.md +27 -0
- package/upgrades/0.12.20.md +24 -0
- package/upgrades/0.12.21.md +28 -0
- package/upgrades/0.12.22.md +23 -0
- package/upgrades/0.12.23.md +44 -0
- package/upgrades/0.12.24.md +24 -0
- package/upgrades/0.12.25.md +55 -0
- package/upgrades/0.12.26.md +31 -0
- package/upgrades/0.12.27.md +19 -0
- package/upgrades/0.12.28.md +19 -0
- package/upgrades/0.12.29.md +42 -0
- package/upgrades/0.12.3.md +22 -0
- package/upgrades/0.12.31.md +24 -0
- package/upgrades/0.12.32.md +34 -0
- package/upgrades/0.12.33.md +62 -0
- package/upgrades/0.12.34.md +59 -0
- package/upgrades/0.12.4.md +19 -0
- package/upgrades/0.12.5.md +31 -0
- package/upgrades/0.12.6.md +34 -0
- package/upgrades/0.12.7.md +24 -0
- package/upgrades/0.12.8.md +28 -0
- package/upgrades/0.12.9.md +30 -0
- package/upgrades/0.13.0.md +26 -0
- package/upgrades/0.14.0.md +75 -0
- package/upgrades/0.14.1.md +41 -0
- package/upgrades/0.15.0.md +59 -0
- package/upgrades/0.16.0.md +61 -0
- package/upgrades/0.17.0.md +88 -0
- package/upgrades/0.17.10.md +23 -0
- package/upgrades/0.17.11.md +25 -0
- package/upgrades/0.17.12.md +43 -0
- package/upgrades/0.17.13.md +24 -0
- package/upgrades/0.17.14.md +26 -0
- package/upgrades/0.17.2.md +42 -0
- package/upgrades/0.17.3.md +37 -0
- package/upgrades/0.17.4.md +27 -0
- package/upgrades/0.17.5.md +32 -0
- package/upgrades/0.17.6.md +32 -0
- package/upgrades/0.17.7.md +39 -0
- package/upgrades/0.17.8.md +34 -0
- package/upgrades/0.17.9.md +25 -0
- package/upgrades/0.18.1.md +34 -0
- package/upgrades/0.18.2.md +29 -0
- package/upgrades/0.18.3.md +26 -0
- package/upgrades/0.18.4.md +28 -0
- package/upgrades/0.18.5.md +25 -0
- package/upgrades/0.18.6.md +25 -0
- package/upgrades/0.18.7.md +30 -0
- package/upgrades/0.19.0.md +136 -0
- package/upgrades/0.19.1.md +27 -0
- package/upgrades/0.19.2.md +27 -0
- package/upgrades/0.19.3.md +32 -0
- package/upgrades/0.19.4.md +19 -0
- package/upgrades/0.19.6.md +17 -0
- package/upgrades/0.19.7.md +33 -0
- package/upgrades/0.20.0.md +54 -0
- package/upgrades/0.21.1.md +55 -0
- package/upgrades/0.21.2.md +48 -0
- package/upgrades/0.21.3.md +29 -0
- package/upgrades/0.21.4.md +33 -0
- package/upgrades/0.22.0.md +114 -0
- package/upgrades/0.23.0.md +81 -0
- package/upgrades/0.23.1.md +28 -0
- package/upgrades/0.23.10.md +19 -0
- package/upgrades/0.23.11.md +21 -0
- package/upgrades/0.23.12.md +30 -0
- package/upgrades/0.23.13.md +25 -0
- package/upgrades/0.23.14.md +23 -0
- package/upgrades/0.23.15.md +30 -0
- package/upgrades/0.23.16.md +21 -0
- package/upgrades/0.23.17.md +23 -0
- package/upgrades/0.23.18.md +41 -0
- package/upgrades/0.23.2.md +32 -0
- package/upgrades/0.23.4.md +21 -0
- package/upgrades/0.23.6.md +19 -0
- package/upgrades/0.23.7.md +33 -0
- package/upgrades/0.23.8.md +38 -0
- package/upgrades/0.23.9.md +35 -0
- package/upgrades/0.24.1.md +32 -0
- package/upgrades/0.24.10.md +23 -0
- package/upgrades/0.24.12.md +17 -0
- package/upgrades/0.24.13.md +16 -0
- package/upgrades/0.24.14.md +26 -0
- package/upgrades/0.24.15.md +49 -0
- package/upgrades/0.24.16.md +48 -0
- package/upgrades/0.24.17.md +40 -0
- package/upgrades/0.24.18-beta.0.md +35 -0
- package/upgrades/0.24.18.md +35 -0
- package/upgrades/0.24.19.md +21 -0
- package/upgrades/0.24.2.md +13 -0
- package/upgrades/0.24.20.md +45 -0
- package/upgrades/0.24.21.md +25 -0
- package/upgrades/0.24.22.md +35 -0
- package/upgrades/0.24.23.md +17 -0
- package/upgrades/0.24.24.md +15 -0
- package/upgrades/0.24.25.md +15 -0
- package/upgrades/0.24.26.md +15 -0
- package/upgrades/0.24.27.md +17 -0
- package/upgrades/0.24.28.md +35 -0
- package/upgrades/0.24.29.md +15 -0
- package/upgrades/0.24.30.md +40 -0
- package/upgrades/0.24.31.md +45 -0
- package/upgrades/0.24.32.md +19 -0
- package/upgrades/0.24.33.md +35 -0
- package/upgrades/0.24.34.md +29 -0
- package/upgrades/0.24.4.md +19 -0
- package/upgrades/0.24.5.md +20 -0
- package/upgrades/0.25.0.md +34 -0
- package/upgrades/0.25.1.md +24 -0
- package/upgrades/0.25.10.md +26 -0
- package/upgrades/0.25.2.md +23 -0
- package/upgrades/0.25.3.md +25 -0
- package/upgrades/0.25.4.md +24 -0
- package/upgrades/0.25.5.md +19 -0
- package/upgrades/0.25.6.md +35 -0
- package/upgrades/0.25.7.md +18 -0
- package/upgrades/0.25.8.md +24 -0
- package/upgrades/0.25.9.md +19 -0
- package/upgrades/0.26.0.md +23 -0
- package/upgrades/0.26.1.md +22 -0
- package/upgrades/0.26.2.md +15 -0
- package/upgrades/0.8.12.md +49 -0
- package/upgrades/0.8.13.md +38 -0
- package/upgrades/0.8.17.md +36 -0
- package/upgrades/0.8.22.md +43 -0
- package/upgrades/0.8.23.md +106 -0
- package/upgrades/0.9.1.md +91 -0
- package/upgrades/0.9.10.md +40 -0
- package/upgrades/0.9.11.md +77 -0
- package/upgrades/0.9.12.md +42 -0
- package/upgrades/0.9.13.md +55 -0
- package/upgrades/0.9.14.md +23 -0
- package/upgrades/0.9.15.md +106 -0
- package/upgrades/0.9.16.md +37 -0
- package/upgrades/0.9.17.md +15 -0
- package/upgrades/0.9.19.md +17 -0
- package/upgrades/0.9.20.md +24 -0
- package/upgrades/0.9.21.md +37 -0
- package/upgrades/0.9.22.md +41 -0
- package/upgrades/0.9.23.md +37 -0
- package/upgrades/0.9.24.md +46 -0
- package/upgrades/0.9.25.md +37 -0
- package/upgrades/0.9.28.md +20 -0
- package/upgrades/0.9.29.md +34 -0
- package/upgrades/0.9.32.md +30 -0
- package/upgrades/0.9.36.md +27 -0
- package/upgrades/0.9.8.md +125 -0
- package/upgrades/0.9.9.md +34 -0
- package/upgrades/NEXT.md +35 -0
|
@@ -0,0 +1,1103 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Server Supervisor — manages the full Instar server as a child process.
|
|
3
|
+
*
|
|
4
|
+
* Starts, monitors, and auto-restarts the server. Reports health status
|
|
5
|
+
* back to the lifeline so it can inform users via Telegram.
|
|
6
|
+
*
|
|
7
|
+
* The supervisor spawns the server in a tmux session (same as `instar server start`)
|
|
8
|
+
* and monitors it via health checks.
|
|
9
|
+
*
|
|
10
|
+
* RESTART ARCHITECTURE (v0.9.63):
|
|
11
|
+
* The server NEVER restarts itself. When the AutoUpdater installs an update,
|
|
12
|
+
* it writes a `restart-requested.json` flag. The supervisor detects this flag
|
|
13
|
+
* during its health check polling and performs a graceful restart. This eliminates
|
|
14
|
+
* the entire category of self-restart bugs (PATH mismatch, launchd confusion,
|
|
15
|
+
* binary resolution failures, restart loops).
|
|
16
|
+
*/
|
|
17
|
+
import crypto from 'node:crypto';
|
|
18
|
+
import { execFileSync, spawnSync } from 'node:child_process';
|
|
19
|
+
import { EventEmitter } from 'node:events';
|
|
20
|
+
import fs from 'node:fs';
|
|
21
|
+
import path from 'node:path';
|
|
22
|
+
import { detectTmuxPath } from '../core/Config.js';
|
|
23
|
+
import { SleepWakeDetector } from '../core/SleepWakeDetector.js';
|
|
24
|
+
/** Execute a shell command safely, returning stdout. */
|
|
25
|
+
function shellExec(cmd, timeout = 5000) {
|
|
26
|
+
const shell = process.env.SHELL || '/bin/zsh';
|
|
27
|
+
return spawnSync(shell, ['-c', cmd], { encoding: 'utf-8', timeout }).stdout ?? '';
|
|
28
|
+
}
|
|
29
|
+
export class ServerSupervisor extends EventEmitter {
|
|
30
|
+
projectDir;
|
|
31
|
+
projectName;
|
|
32
|
+
port;
|
|
33
|
+
tmuxPath;
|
|
34
|
+
serverSessionName;
|
|
35
|
+
healthCheckInterval = null;
|
|
36
|
+
lastHealthCheckAt = 0; // Wall-clock ms for sleep/wake detection
|
|
37
|
+
sleepWakeGapMs = 2 * 60_000; // Gap > 2 min between 10s intervals = machine was suspended
|
|
38
|
+
restartAttempts = 0;
|
|
39
|
+
maxRestartAttempts = 5;
|
|
40
|
+
restartBackoffMs = 5000;
|
|
41
|
+
isRunning = false;
|
|
42
|
+
lastHealthy = 0;
|
|
43
|
+
startupGraceMs = 180_000; // 3 minutes grace period — allows time for heavy init (Threadline, tunnel, agent discovery)
|
|
44
|
+
spawnedAt = 0;
|
|
45
|
+
retryCooldownMs = 5 * 60_000; // 5 minutes cooldown after max retries exhausted
|
|
46
|
+
maxRetriesExhaustedAt = 0;
|
|
47
|
+
consecutiveFailures = 0; // Hysteresis: require 2 consecutive failures before marking unhealthy
|
|
48
|
+
unhealthyThreshold = 2;
|
|
49
|
+
stateDir;
|
|
50
|
+
// Planned restart / maintenance wait — suppress alerts during expected downtime
|
|
51
|
+
maintenanceWaitStartedAt = 0;
|
|
52
|
+
maintenanceWaitMs = 5 * 60_000; // 5 minutes default (configurable via maintenanceWaitMinutes)
|
|
53
|
+
pendingUpdateVersion = null; // Version being applied — triggers lifeline self-restart on recovery
|
|
54
|
+
// Circuit breaker — give up after too many total failures, but retry periodically
|
|
55
|
+
totalFailures = 0;
|
|
56
|
+
totalFailureWindowStart = 0;
|
|
57
|
+
circuitBreakerThreshold = 20; // Total failures before tripping
|
|
58
|
+
circuitBreakerWindowMs = 60 * 60_000; // 1-hour window
|
|
59
|
+
circuitBroken = false;
|
|
60
|
+
circuitBreakerTrippedAt = 0;
|
|
61
|
+
circuitBreakerRetryCount = 0;
|
|
62
|
+
circuitBreakerRetryIntervalMs = 30 * 60_000; // 30 min between retries
|
|
63
|
+
maxCircuitBreakerRetries = 3; // Try 3 times at 30-min intervals before entering slow-retry
|
|
64
|
+
slowRetryIntervalMs = 2 * 60 * 60_000; // 2 hours between slow retries (never truly give up)
|
|
65
|
+
slowRetryStartedAt = 0; // When slow retry mode started
|
|
66
|
+
lastCrashOutput = ''; // Last captured crash output for diagnostics
|
|
67
|
+
doctorSessionSecret = null; // HMAC secret for doctor restart requests
|
|
68
|
+
sleepWakeDetector = null; // Detects short sleeps that gap-based detection misses
|
|
69
|
+
wakeTransitionUntil = 0; // Timestamp until which we're in a wake transition (lenient health checks)
|
|
70
|
+
wakeTransitionMs = 60_000; // 60 seconds of lenient health checking after wake
|
|
71
|
+
constructor(options) {
|
|
72
|
+
super();
|
|
73
|
+
this.projectDir = options.projectDir;
|
|
74
|
+
this.projectName = options.projectName;
|
|
75
|
+
this.port = options.port;
|
|
76
|
+
this.stateDir = options.stateDir ?? null;
|
|
77
|
+
this.tmuxPath = detectTmuxPath();
|
|
78
|
+
this.serverSessionName = `${this.projectName}-server`;
|
|
79
|
+
if (options.maintenanceWaitMinutes !== undefined) {
|
|
80
|
+
this.maintenanceWaitMs = options.maintenanceWaitMinutes * 60_000;
|
|
81
|
+
}
|
|
82
|
+
if (options.startupGraceSeconds !== undefined) {
|
|
83
|
+
this.startupGraceMs = options.startupGraceSeconds * 1000;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Start the server and begin monitoring.
|
|
88
|
+
*/
|
|
89
|
+
async start() {
|
|
90
|
+
if (!this.tmuxPath) {
|
|
91
|
+
console.error('[Supervisor] tmux not found');
|
|
92
|
+
return false;
|
|
93
|
+
}
|
|
94
|
+
// Check if already running
|
|
95
|
+
if (this.isServerSessionAlive()) {
|
|
96
|
+
console.log(`[Supervisor] Server already running in tmux session: ${this.serverSessionName}`);
|
|
97
|
+
this.isRunning = true;
|
|
98
|
+
this.lastHealthy = Date.now();
|
|
99
|
+
// Set spawnedAt so the startup grace period applies. Without this, a fresh
|
|
100
|
+
// Supervisor (e.g., after Lifeline self-restart for an update) has spawnedAt=0,
|
|
101
|
+
// which disables the grace check and can cause false serverDown alerts if the
|
|
102
|
+
// server responds slowly during the transition window.
|
|
103
|
+
this.spawnedAt = Date.now();
|
|
104
|
+
// Check for planned-exit-marker or restart-requested flag — if present,
|
|
105
|
+
// pre-set maintenance wait so handleUnhealthy() suppresses alerts.
|
|
106
|
+
if (this.stateDir) {
|
|
107
|
+
const markerPath = path.join(this.stateDir, 'state', 'planned-exit-marker.json');
|
|
108
|
+
const restartPath = path.join(this.stateDir, 'state', 'restart-requested.json');
|
|
109
|
+
try {
|
|
110
|
+
if (fs.existsSync(markerPath)) {
|
|
111
|
+
const data = JSON.parse(fs.readFileSync(markerPath, 'utf-8'));
|
|
112
|
+
const markerAge = Date.now() - (new Date(data.exitedAt).getTime() || Date.now());
|
|
113
|
+
if (markerAge < 10 * 60_000) {
|
|
114
|
+
console.log(`[Supervisor] Found planned-exit marker on start — entering maintenance wait`);
|
|
115
|
+
this.maintenanceWaitStartedAt = new Date(data.exitedAt).getTime() || Date.now();
|
|
116
|
+
this.pendingUpdateVersion = data.targetVersion ?? null;
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
else if (fs.existsSync(restartPath)) {
|
|
120
|
+
const data = JSON.parse(fs.readFileSync(restartPath, 'utf-8'));
|
|
121
|
+
if (data.plannedRestart && (!data.expiresAt || new Date(data.expiresAt).getTime() > Date.now())) {
|
|
122
|
+
console.log(`[Supervisor] Found restart-requested flag on start — entering maintenance wait`);
|
|
123
|
+
this.maintenanceWaitStartedAt = Date.now();
|
|
124
|
+
this.pendingUpdateVersion = data.targetVersion ?? null;
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
catch { /* best-effort marker check */ }
|
|
129
|
+
}
|
|
130
|
+
this.startHealthChecks();
|
|
131
|
+
return true;
|
|
132
|
+
}
|
|
133
|
+
return this.spawnServer();
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Stop the server and monitoring.
|
|
137
|
+
*/
|
|
138
|
+
async stop() {
|
|
139
|
+
this.stopHealthChecks();
|
|
140
|
+
if (this.tmuxPath && this.isServerSessionAlive()) {
|
|
141
|
+
try {
|
|
142
|
+
// Graceful: send C-c
|
|
143
|
+
execFileSync(this.tmuxPath, ['send-keys', '-t', `=${this.serverSessionName}:`, 'C-c'], {
|
|
144
|
+
stdio: 'ignore', timeout: 5000,
|
|
145
|
+
});
|
|
146
|
+
// Wait briefly for graceful shutdown
|
|
147
|
+
await new Promise(r => setTimeout(r, 3000));
|
|
148
|
+
// Force kill if still alive
|
|
149
|
+
if (this.isServerSessionAlive()) {
|
|
150
|
+
execFileSync(this.tmuxPath, ['kill-session', '-t', `=${this.serverSessionName}`], {
|
|
151
|
+
stdio: 'ignore',
|
|
152
|
+
});
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
catch { /* ignore */ }
|
|
156
|
+
}
|
|
157
|
+
this.isRunning = false;
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* Check if the server is currently healthy.
|
|
161
|
+
*/
|
|
162
|
+
get healthy() {
|
|
163
|
+
return this.isRunning && (Date.now() - this.lastHealthy) < 30_000;
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Get supervisor status.
|
|
167
|
+
*/
|
|
168
|
+
getStatus() {
|
|
169
|
+
const coolingDown = this.maxRetriesExhaustedAt > 0;
|
|
170
|
+
const cooldownRemainingMs = coolingDown
|
|
171
|
+
? Math.max(0, this.retryCooldownMs - (Date.now() - this.maxRetriesExhaustedAt))
|
|
172
|
+
: 0;
|
|
173
|
+
const inMaintenanceWait = this.maintenanceWaitStartedAt > 0;
|
|
174
|
+
const inWakeTransition = Date.now() < this.wakeTransitionUntil;
|
|
175
|
+
return {
|
|
176
|
+
running: this.isRunning,
|
|
177
|
+
healthy: this.healthy,
|
|
178
|
+
restartAttempts: this.restartAttempts,
|
|
179
|
+
lastHealthy: this.lastHealthy,
|
|
180
|
+
serverSession: this.serverSessionName,
|
|
181
|
+
coolingDown,
|
|
182
|
+
cooldownRemainingMs,
|
|
183
|
+
circuitBroken: this.circuitBroken,
|
|
184
|
+
totalFailures: this.totalFailures,
|
|
185
|
+
lastCrashOutput: this.lastCrashOutput,
|
|
186
|
+
circuitBreakerRetryCount: this.circuitBreakerRetryCount,
|
|
187
|
+
maxCircuitBreakerRetries: this.maxCircuitBreakerRetries,
|
|
188
|
+
inMaintenanceWait,
|
|
189
|
+
maintenanceWaitElapsedMs: inMaintenanceWait ? Date.now() - this.maintenanceWaitStartedAt : 0,
|
|
190
|
+
inWakeTransition,
|
|
191
|
+
wakeTransitionRemainingMs: inWakeTransition ? this.wakeTransitionUntil - Date.now() : 0,
|
|
192
|
+
};
|
|
193
|
+
}
|
|
194
|
+
/**
|
|
195
|
+
* Reset the circuit breaker — allows restart attempts to resume.
|
|
196
|
+
* Call this after fixing the underlying issue (e.g., via /lifeline restart).
|
|
197
|
+
*/
|
|
198
|
+
resetCircuitBreaker() {
|
|
199
|
+
this.circuitBroken = false;
|
|
200
|
+
this.circuitBreakerTrippedAt = 0;
|
|
201
|
+
this.circuitBreakerRetryCount = 0;
|
|
202
|
+
this.totalFailures = 0;
|
|
203
|
+
this.totalFailureWindowStart = 0;
|
|
204
|
+
this.restartAttempts = 0;
|
|
205
|
+
this.maxRetriesExhaustedAt = 0;
|
|
206
|
+
this.slowRetryStartedAt = 0;
|
|
207
|
+
this.wakeTransitionUntil = 0;
|
|
208
|
+
console.log('[Supervisor] Circuit breaker reset');
|
|
209
|
+
}
|
|
210
|
+
/**
|
|
211
|
+
* Set the HMAC secret for validating doctor session restart requests.
|
|
212
|
+
* Called by TelegramLifeline when a doctor session is spawned.
|
|
213
|
+
*/
|
|
214
|
+
setDoctorSessionSecret(secret) {
|
|
215
|
+
this.doctorSessionSecret = secret;
|
|
216
|
+
}
|
|
217
|
+
/**
|
|
218
|
+
* Gracefully restart the server: capture output, kill tmux session,
|
|
219
|
+
* clean up child processes, then spawn fresh.
|
|
220
|
+
*
|
|
221
|
+
* Used by: restart-request handling (auto-update), /lifeline restart command.
|
|
222
|
+
*/
|
|
223
|
+
async performGracefulRestart(reason) {
|
|
224
|
+
console.log(`[Supervisor] Graceful restart initiated: ${reason}`);
|
|
225
|
+
this.emit('serverRestarting', 0);
|
|
226
|
+
if (this.tmuxPath && this.isServerSessionAlive()) {
|
|
227
|
+
this.captureCrashOutput();
|
|
228
|
+
this.cleanupChildProcesses();
|
|
229
|
+
try {
|
|
230
|
+
// Send C-c for graceful shutdown
|
|
231
|
+
execFileSync(this.tmuxPath, ['send-keys', '-t', `=${this.serverSessionName}:`, 'C-c'], {
|
|
232
|
+
stdio: 'ignore', timeout: 5000,
|
|
233
|
+
});
|
|
234
|
+
await new Promise(r => setTimeout(r, 3000));
|
|
235
|
+
// Force kill if still alive
|
|
236
|
+
if (this.isServerSessionAlive()) {
|
|
237
|
+
execFileSync(this.tmuxPath, ['kill-session', '-t', `=${this.serverSessionName}`], {
|
|
238
|
+
stdio: 'ignore',
|
|
239
|
+
});
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
catch { /* ignore */ }
|
|
243
|
+
}
|
|
244
|
+
// Wait for port release
|
|
245
|
+
await new Promise(r => setTimeout(r, 2000));
|
|
246
|
+
// Spawn fresh server — uses the updated binary since spawnServer resolves
|
|
247
|
+
// cli.js relative to import.meta.url (the globally installed package)
|
|
248
|
+
this.restartAttempts = 0;
|
|
249
|
+
return this.spawnServer();
|
|
250
|
+
}
|
|
251
|
+
// ── Pre-spawn self-healing ──────────────────────────────────────
|
|
252
|
+
//
|
|
253
|
+
// Before starting the server, check prerequisites and fix common issues
|
|
254
|
+
// that would otherwise cause the server to crash immediately. This makes
|
|
255
|
+
// `/lifeline restart` actually useful for recovery — not just a blind retry.
|
|
256
|
+
/**
|
|
257
|
+
* Run preflight checks and attempt to fix broken prerequisites.
|
|
258
|
+
* Returns a summary of what was healed (empty string if nothing needed fixing).
|
|
259
|
+
*/
|
|
260
|
+
preflightSelfHeal() {
|
|
261
|
+
if (!this.stateDir)
|
|
262
|
+
return '';
|
|
263
|
+
const healed = [];
|
|
264
|
+
// 1. Shadow install — the most common failure mode.
|
|
265
|
+
// If the shadow install is missing or corrupt, the server can't start at all.
|
|
266
|
+
const shadowDir = path.join(this.stateDir, 'shadow-install');
|
|
267
|
+
const shadowCli = path.join(shadowDir, 'node_modules', 'instar', 'dist', 'cli.js');
|
|
268
|
+
if (!fs.existsSync(shadowCli)) {
|
|
269
|
+
console.log('[Supervisor] Preflight: shadow install missing — attempting reinstall');
|
|
270
|
+
try {
|
|
271
|
+
// Find a working npm binary
|
|
272
|
+
const npmPath = this.findNpmPath();
|
|
273
|
+
if (npmPath) {
|
|
274
|
+
const result = spawnSync(npmPath, ['install', 'instar', '--prefix', shadowDir], {
|
|
275
|
+
encoding: 'utf-8',
|
|
276
|
+
timeout: 60_000,
|
|
277
|
+
cwd: this.projectDir,
|
|
278
|
+
});
|
|
279
|
+
if (result.status === 0 && fs.existsSync(shadowCli)) {
|
|
280
|
+
healed.push('shadow install restored');
|
|
281
|
+
console.log('[Supervisor] Preflight: shadow install restored successfully');
|
|
282
|
+
}
|
|
283
|
+
else {
|
|
284
|
+
console.error(`[Supervisor] Preflight: npm install failed (exit ${result.status}): ${(result.stderr || '').slice(-200)}`);
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
else {
|
|
288
|
+
console.error('[Supervisor] Preflight: no npm binary found — cannot restore shadow install');
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
catch (err) {
|
|
292
|
+
console.error(`[Supervisor] Preflight: shadow install repair failed: ${err}`);
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
// 2. Node symlink — if broken, the launchd boot wrapper will fail on next restart.
|
|
296
|
+
const nodeSymlink = path.join(this.stateDir, 'bin', 'node');
|
|
297
|
+
try {
|
|
298
|
+
if (!fs.existsSync(nodeSymlink) || spawnSync(nodeSymlink, ['--version'], { timeout: 5000 }).status !== 0) {
|
|
299
|
+
console.log('[Supervisor] Preflight: node symlink missing or broken — attempting fix');
|
|
300
|
+
const nodePath = this.findNodePath();
|
|
301
|
+
if (nodePath) {
|
|
302
|
+
fs.mkdirSync(path.dirname(nodeSymlink), { recursive: true });
|
|
303
|
+
try {
|
|
304
|
+
fs.unlinkSync(nodeSymlink);
|
|
305
|
+
}
|
|
306
|
+
catch { /* may not exist */ }
|
|
307
|
+
fs.symlinkSync(nodePath, nodeSymlink);
|
|
308
|
+
healed.push('node symlink repaired');
|
|
309
|
+
console.log(`[Supervisor] Preflight: node symlink → ${nodePath}`);
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
catch (err) {
|
|
314
|
+
console.error(`[Supervisor] Preflight: node symlink check failed: ${err}`);
|
|
315
|
+
}
|
|
316
|
+
// 3. Stuck git rebase — prevents git-sync from working, blocks updates
|
|
317
|
+
try {
|
|
318
|
+
const gitStatus = spawnSync('git', ['status'], {
|
|
319
|
+
encoding: 'utf-8',
|
|
320
|
+
timeout: 5000,
|
|
321
|
+
cwd: this.projectDir,
|
|
322
|
+
});
|
|
323
|
+
const statusText = gitStatus.stdout || '';
|
|
324
|
+
if (statusText.includes('rebase in progress') || statusText.includes('interactive rebase in progress')) {
|
|
325
|
+
console.log('[Supervisor] Preflight: stuck git rebase detected — aborting');
|
|
326
|
+
const abortResult = spawnSync('git', ['rebase', '--abort'], {
|
|
327
|
+
encoding: 'utf-8',
|
|
328
|
+
timeout: 10_000,
|
|
329
|
+
cwd: this.projectDir,
|
|
330
|
+
});
|
|
331
|
+
if (abortResult.status === 0) {
|
|
332
|
+
healed.push('stuck git rebase aborted');
|
|
333
|
+
console.log('[Supervisor] Preflight: git rebase aborted successfully');
|
|
334
|
+
}
|
|
335
|
+
else {
|
|
336
|
+
console.error(`[Supervisor] Preflight: git rebase --abort failed: ${abortResult.stderr}`);
|
|
337
|
+
}
|
|
338
|
+
}
|
|
339
|
+
}
|
|
340
|
+
catch (err) {
|
|
341
|
+
console.error(`[Supervisor] Preflight: git state check failed: ${err}`);
|
|
342
|
+
}
|
|
343
|
+
// 4. Stale lifeline lock — can prevent the lifeline from restarting properly.
|
|
344
|
+
const lockFile = path.join(this.stateDir, 'state', 'lifeline.lock');
|
|
345
|
+
try {
|
|
346
|
+
if (fs.existsSync(lockFile)) {
|
|
347
|
+
const lockAge = Date.now() - fs.statSync(lockFile).mtimeMs;
|
|
348
|
+
if (lockAge > 10 * 60_000) { // 10 minutes
|
|
349
|
+
fs.unlinkSync(lockFile);
|
|
350
|
+
healed.push('stale lifeline lock removed');
|
|
351
|
+
console.log(`[Supervisor] Preflight: removed stale lifeline lock (${Math.round(lockAge / 60_000)}m old)`);
|
|
352
|
+
}
|
|
353
|
+
}
|
|
354
|
+
}
|
|
355
|
+
catch { /* ignore */ }
|
|
356
|
+
if (healed.length > 0) {
|
|
357
|
+
const summary = healed.join(', ');
|
|
358
|
+
console.log(`[Supervisor] Preflight self-heal: ${summary}`);
|
|
359
|
+
return summary;
|
|
360
|
+
}
|
|
361
|
+
return '';
|
|
362
|
+
}
|
|
363
|
+
/**
|
|
364
|
+
* Find a working npm binary. Checks common locations.
|
|
365
|
+
*/
|
|
366
|
+
findNpmPath() {
|
|
367
|
+
// Try the node that's running us — npm is usually a sibling
|
|
368
|
+
const currentNodeDir = path.dirname(process.execPath);
|
|
369
|
+
const siblingNpm = path.join(currentNodeDir, 'npm');
|
|
370
|
+
if (fs.existsSync(siblingNpm))
|
|
371
|
+
return siblingNpm;
|
|
372
|
+
// Common paths
|
|
373
|
+
for (const candidate of ['/opt/homebrew/bin/npm', '/usr/local/bin/npm']) {
|
|
374
|
+
if (fs.existsSync(candidate))
|
|
375
|
+
return candidate;
|
|
376
|
+
}
|
|
377
|
+
// Fall back to PATH lookup
|
|
378
|
+
try {
|
|
379
|
+
const which = spawnSync('which', ['npm'], { encoding: 'utf-8', timeout: 5000 });
|
|
380
|
+
if (which.status === 0 && which.stdout.trim())
|
|
381
|
+
return which.stdout.trim();
|
|
382
|
+
}
|
|
383
|
+
catch { /* ignore */ }
|
|
384
|
+
return null;
|
|
385
|
+
}
|
|
386
|
+
/**
|
|
387
|
+
* Find a working node binary. Checks common locations.
|
|
388
|
+
*/
|
|
389
|
+
findNodePath() {
|
|
390
|
+
// Current process is always valid
|
|
391
|
+
if (process.execPath)
|
|
392
|
+
return process.execPath;
|
|
393
|
+
for (const candidate of ['/opt/homebrew/bin/node', '/usr/local/bin/node']) {
|
|
394
|
+
if (fs.existsSync(candidate))
|
|
395
|
+
return candidate;
|
|
396
|
+
}
|
|
397
|
+
try {
|
|
398
|
+
const which = spawnSync('which', ['node'], { encoding: 'utf-8', timeout: 5000 });
|
|
399
|
+
if (which.status === 0 && which.stdout.trim())
|
|
400
|
+
return which.stdout.trim();
|
|
401
|
+
}
|
|
402
|
+
catch { /* ignore */ }
|
|
403
|
+
return null;
|
|
404
|
+
}
|
|
405
|
+
spawnServer() {
|
|
406
|
+
if (!this.tmuxPath)
|
|
407
|
+
return false;
|
|
408
|
+
// Run preflight self-heal before every spawn attempt
|
|
409
|
+
this.preflightSelfHeal();
|
|
410
|
+
try {
|
|
411
|
+
// Get the instar CLI path — resolution order:
|
|
412
|
+
// 1. Shadow install (agent's own managed version from AutoUpdater)
|
|
413
|
+
// 2. Current binary location (how the lifeline was started)
|
|
414
|
+
//
|
|
415
|
+
// Shadow install is the agent's private copy at {stateDir}/shadow-install/.
|
|
416
|
+
// The AutoUpdater installs updates there instead of globally, so each agent
|
|
417
|
+
// manages its own version independently.
|
|
418
|
+
let cliPath = new URL('../cli.js', import.meta.url).pathname;
|
|
419
|
+
// Check for shadow install first — this is the agent's own managed version
|
|
420
|
+
if (this.stateDir) {
|
|
421
|
+
const shadowCli = path.join(this.stateDir, 'shadow-install', 'node_modules', 'instar', 'dist', 'cli.js');
|
|
422
|
+
if (fs.existsSync(shadowCli)) {
|
|
423
|
+
console.log(`[Supervisor] Using shadow install: ${shadowCli}`);
|
|
424
|
+
cliPath = shadowCli;
|
|
425
|
+
}
|
|
426
|
+
}
|
|
427
|
+
// Stderr capture: tee to crash log file for fast-exit diagnostics
|
|
428
|
+
const crashLogDir = this.stateDir ? path.join(this.stateDir, 'logs') : '/tmp';
|
|
429
|
+
try {
|
|
430
|
+
fs.mkdirSync(crashLogDir, { recursive: true });
|
|
431
|
+
}
|
|
432
|
+
catch { /* ignore */ }
|
|
433
|
+
const crashLogPath = path.join(crashLogDir, 'server-stderr.log');
|
|
434
|
+
// --no-telegram: lifeline owns the Telegram connection, server should not poll
|
|
435
|
+
const quotedCli = cliPath.replace(/'/g, "'\\''");
|
|
436
|
+
const nodeCmd = `'node' '${quotedCli}' 'server' 'start' '--foreground' '--no-telegram' 2> >(tee '${crashLogPath}' >&2)`;
|
|
437
|
+
execFileSync(this.tmuxPath, [
|
|
438
|
+
'new-session', '-d',
|
|
439
|
+
'-s', this.serverSessionName,
|
|
440
|
+
'-c', this.projectDir,
|
|
441
|
+
`bash`, '-c', nodeCmd,
|
|
442
|
+
], { stdio: 'ignore' });
|
|
443
|
+
console.log(`[Supervisor] Server started in tmux session: ${this.serverSessionName}`);
|
|
444
|
+
this.isRunning = true;
|
|
445
|
+
this.spawnedAt = Date.now();
|
|
446
|
+
this.startHealthChecks();
|
|
447
|
+
return true;
|
|
448
|
+
}
|
|
449
|
+
catch (err) {
|
|
450
|
+
console.error(`[Supervisor] Failed to start server: ${err}`);
|
|
451
|
+
return false;
|
|
452
|
+
}
|
|
453
|
+
}
|
|
454
|
+
isServerSessionAlive() {
|
|
455
|
+
if (!this.tmuxPath)
|
|
456
|
+
return false;
|
|
457
|
+
try {
|
|
458
|
+
execFileSync(this.tmuxPath, ['has-session', '-t', `=${this.serverSessionName}`], {
|
|
459
|
+
stdio: 'ignore', timeout: 5000,
|
|
460
|
+
});
|
|
461
|
+
return true;
|
|
462
|
+
}
|
|
463
|
+
catch {
|
|
464
|
+
return false;
|
|
465
|
+
}
|
|
466
|
+
}
|
|
467
|
+
startHealthChecks() {
|
|
468
|
+
if (this.healthCheckInterval)
|
|
469
|
+
return;
|
|
470
|
+
// Start SleepWakeDetector to catch short sleeps (10-30s) that the gap-based
|
|
471
|
+
// detection below misses (its 2-minute threshold is too high for brief suspends).
|
|
472
|
+
// On wake, reset failure counters so stale pre-sleep failures don't cascade.
|
|
473
|
+
if (!this.sleepWakeDetector) {
|
|
474
|
+
// Use 15s drift threshold — low enough to catch real sleeps but high enough
|
|
475
|
+
// to avoid false positives from normal OS scheduling jitter (~5-10s on loaded systems)
|
|
476
|
+
// that still cause health check failures during the transition.
|
|
477
|
+
this.sleepWakeDetector = new SleepWakeDetector({ driftThresholdMs: 15_000 });
|
|
478
|
+
this.sleepWakeDetector.on('wake', (event) => {
|
|
479
|
+
console.log(`[Supervisor] SleepWakeDetector: wake after ~${event.sleepDurationSeconds}s. Resetting failure counters.`);
|
|
480
|
+
this.restartAttempts = 0;
|
|
481
|
+
this.maxRetriesExhaustedAt = 0;
|
|
482
|
+
this.consecutiveFailures = 0;
|
|
483
|
+
this.totalFailures = 0;
|
|
484
|
+
this.totalFailureWindowStart = 0;
|
|
485
|
+
this.spawnedAt = Date.now();
|
|
486
|
+
this.wakeTransitionUntil = Date.now() + this.wakeTransitionMs;
|
|
487
|
+
});
|
|
488
|
+
this.sleepWakeDetector.start();
|
|
489
|
+
}
|
|
490
|
+
this.healthCheckInterval = setInterval(async () => {
|
|
491
|
+
const now = Date.now();
|
|
492
|
+
// Sleep/wake detection: if the gap between health checks is much larger than
|
|
493
|
+
// the poll interval, the machine was likely suspended (e.g., lid close after
|
|
494
|
+
// an auto-update restart). Reset failure counters so brief wake cycles don't
|
|
495
|
+
// exhaust restart attempts before the machine is fully awake.
|
|
496
|
+
if (this.lastHealthCheckAt > 0 && (now - this.lastHealthCheckAt) > this.sleepWakeGapMs) {
|
|
497
|
+
const gapSec = Math.round((now - this.lastHealthCheckAt) / 1000);
|
|
498
|
+
console.log(`[Supervisor] Sleep/wake detected (${gapSec}s gap). Resetting failure counters.`);
|
|
499
|
+
this.restartAttempts = 0;
|
|
500
|
+
this.maxRetriesExhaustedAt = 0;
|
|
501
|
+
this.consecutiveFailures = 0;
|
|
502
|
+
this.totalFailures = 0;
|
|
503
|
+
this.totalFailureWindowStart = 0;
|
|
504
|
+
// Give the server the full startup grace period from wake time
|
|
505
|
+
this.spawnedAt = now;
|
|
506
|
+
this.wakeTransitionUntil = now + this.wakeTransitionMs;
|
|
507
|
+
}
|
|
508
|
+
this.lastHealthCheckAt = now;
|
|
509
|
+
// During startup grace period: probe health optimistically but don't act on failures.
|
|
510
|
+
// This allows `lastHealthy` to update as soon as the server is responsive, so
|
|
511
|
+
// TelegramLifeline can forward messages immediately instead of queuing them for
|
|
512
|
+
// the entire grace period. Failures are ignored — the server is still booting.
|
|
513
|
+
if (this.spawnedAt > 0 && (now - this.spawnedAt) < this.startupGraceMs) {
|
|
514
|
+
this.checkRestartRequest();
|
|
515
|
+
// Optimistic health probe — update lastHealthy on success, ignore failures
|
|
516
|
+
try {
|
|
517
|
+
const alive = await this.checkHealth();
|
|
518
|
+
if (alive) {
|
|
519
|
+
this.lastHealthy = Date.now();
|
|
520
|
+
if (!this.isRunning) {
|
|
521
|
+
this.isRunning = true;
|
|
522
|
+
this.emit('serverUp');
|
|
523
|
+
}
|
|
524
|
+
}
|
|
525
|
+
}
|
|
526
|
+
catch { /* expected during boot — ignore */ }
|
|
527
|
+
return;
|
|
528
|
+
}
|
|
529
|
+
try {
|
|
530
|
+
const healthy = await this.checkHealth();
|
|
531
|
+
if (healthy) {
|
|
532
|
+
if (!this.isRunning) {
|
|
533
|
+
if (this.maintenanceWaitStartedAt > 0) {
|
|
534
|
+
// Recovering from planned restart — quiet recovery, no notification
|
|
535
|
+
const elapsedMs = Date.now() - this.maintenanceWaitStartedAt;
|
|
536
|
+
console.log(`[Supervisor] Server recovered after planned restart (${Math.round(elapsedMs / 1000)}s downtime)`);
|
|
537
|
+
this.maintenanceWaitStartedAt = 0;
|
|
538
|
+
this.clearPlannedExitMarker();
|
|
539
|
+
// Still replay queued messages (important!) but skip serverDown notification
|
|
540
|
+
this.emit('serverUp');
|
|
541
|
+
// Signal the lifeline to self-restart so it picks up new code
|
|
542
|
+
if (this.pendingUpdateVersion) {
|
|
543
|
+
console.log(`[Supervisor] Update to v${this.pendingUpdateVersion} applied — signaling lifeline self-restart`);
|
|
544
|
+
this.emit('updateApplied', this.pendingUpdateVersion);
|
|
545
|
+
this.pendingUpdateVersion = null;
|
|
546
|
+
}
|
|
547
|
+
}
|
|
548
|
+
else {
|
|
549
|
+
this.emit('serverUp');
|
|
550
|
+
}
|
|
551
|
+
}
|
|
552
|
+
this.isRunning = true;
|
|
553
|
+
this.lastHealthy = Date.now();
|
|
554
|
+
this.restartAttempts = 0;
|
|
555
|
+
this.consecutiveFailures = 0;
|
|
556
|
+
// If circuit breaker was tripped and we recovered, reset it
|
|
557
|
+
if (this.circuitBroken) {
|
|
558
|
+
console.log('[Supervisor] Server recovered after circuit breaker — resetting');
|
|
559
|
+
this.resetCircuitBreaker();
|
|
560
|
+
}
|
|
561
|
+
}
|
|
562
|
+
else {
|
|
563
|
+
this.consecutiveFailures++;
|
|
564
|
+
if (this.consecutiveFailures >= this.unhealthyThreshold) {
|
|
565
|
+
// During wake transitions, don't kill a server that's still alive — it's
|
|
566
|
+
// likely just slow to respond while the system recovers (disk I/O, network
|
|
567
|
+
// reconfig, SQLite WAL replay). Only act if the server process is actually dead.
|
|
568
|
+
if (Date.now() < this.wakeTransitionUntil && this.isServerSessionAlive()) {
|
|
569
|
+
console.log(`[Supervisor] Health check failed during wake transition but server session is alive — waiting (${Math.round((this.wakeTransitionUntil - Date.now()) / 1000)}s remaining)`);
|
|
570
|
+
this.consecutiveFailures = 0; // Reset so we don't immediately re-trigger
|
|
571
|
+
}
|
|
572
|
+
else {
|
|
573
|
+
this.handleUnhealthy();
|
|
574
|
+
}
|
|
575
|
+
}
|
|
576
|
+
}
|
|
577
|
+
}
|
|
578
|
+
catch {
|
|
579
|
+
this.consecutiveFailures++;
|
|
580
|
+
if (this.consecutiveFailures >= this.unhealthyThreshold) {
|
|
581
|
+
if (Date.now() < this.wakeTransitionUntil && this.isServerSessionAlive()) {
|
|
582
|
+
console.log(`[Supervisor] Health check failed during wake transition but server session is alive — waiting (${Math.round((this.wakeTransitionUntil - Date.now()) / 1000)}s remaining)`);
|
|
583
|
+
this.consecutiveFailures = 0;
|
|
584
|
+
}
|
|
585
|
+
else {
|
|
586
|
+
this.handleUnhealthy();
|
|
587
|
+
}
|
|
588
|
+
}
|
|
589
|
+
}
|
|
590
|
+
// Check for restart requests from the server (e.g., auto-updater)
|
|
591
|
+
this.checkRestartRequest();
|
|
592
|
+
// Check for debug restart requests from doctor sessions
|
|
593
|
+
this.checkDebugRestartRequest();
|
|
594
|
+
}, 10_000); // Check every 10 seconds
|
|
595
|
+
}
|
|
596
|
+
stopHealthChecks() {
|
|
597
|
+
if (this.healthCheckInterval) {
|
|
598
|
+
clearInterval(this.healthCheckInterval);
|
|
599
|
+
this.healthCheckInterval = null;
|
|
600
|
+
}
|
|
601
|
+
if (this.sleepWakeDetector) {
|
|
602
|
+
this.sleepWakeDetector.stop();
|
|
603
|
+
this.sleepWakeDetector = null;
|
|
604
|
+
}
|
|
605
|
+
}
|
|
606
|
+
async checkHealth() {
|
|
607
|
+
try {
|
|
608
|
+
const controller = new AbortController();
|
|
609
|
+
const timer = setTimeout(() => controller.abort(), 5000);
|
|
610
|
+
try {
|
|
611
|
+
const response = await fetch(`http://127.0.0.1:${this.port}/health`, {
|
|
612
|
+
signal: controller.signal,
|
|
613
|
+
});
|
|
614
|
+
return response.ok;
|
|
615
|
+
}
|
|
616
|
+
finally {
|
|
617
|
+
clearTimeout(timer);
|
|
618
|
+
}
|
|
619
|
+
}
|
|
620
|
+
catch {
|
|
621
|
+
return false;
|
|
622
|
+
}
|
|
623
|
+
}
|
|
624
|
+
// ── Restart request handling ──────────────────────────────────────
|
|
625
|
+
/**
|
|
626
|
+
* Check if the server (AutoUpdater) has requested a restart.
|
|
627
|
+
* Called during the health check loop. If a valid request exists,
|
|
628
|
+
* initiate a graceful restart of the server tmux session.
|
|
629
|
+
*/
|
|
630
|
+
checkRestartRequest() {
|
|
631
|
+
if (!this.stateDir)
|
|
632
|
+
return;
|
|
633
|
+
const flagPath = path.join(this.stateDir, 'state', 'restart-requested.json');
|
|
634
|
+
try {
|
|
635
|
+
if (!fs.existsSync(flagPath))
|
|
636
|
+
return;
|
|
637
|
+
const data = JSON.parse(fs.readFileSync(flagPath, 'utf-8'));
|
|
638
|
+
// Check TTL
|
|
639
|
+
if (data.expiresAt && new Date(data.expiresAt).getTime() < Date.now()) {
|
|
640
|
+
try {
|
|
641
|
+
fs.unlinkSync(flagPath);
|
|
642
|
+
}
|
|
643
|
+
catch { /* ignore */ }
|
|
644
|
+
console.log('[Supervisor] Expired restart request — ignoring');
|
|
645
|
+
return;
|
|
646
|
+
}
|
|
647
|
+
console.log(`[Supervisor] Restart requested by ${data.requestedBy} for v${data.targetVersion}`);
|
|
648
|
+
// RESTART LOOP DETECTION: If we've already restarted for this version,
|
|
649
|
+
// the binary isn't actually updating (npx cache mismatch). Don't loop.
|
|
650
|
+
const restartCountFile = path.join(this.stateDir, 'state', 'restart-version-count.json');
|
|
651
|
+
let restartCount = 0;
|
|
652
|
+
try {
|
|
653
|
+
if (fs.existsSync(restartCountFile)) {
|
|
654
|
+
const countData = JSON.parse(fs.readFileSync(restartCountFile, 'utf-8'));
|
|
655
|
+
if (countData.targetVersion === data.targetVersion) {
|
|
656
|
+
restartCount = (countData.count ?? 0);
|
|
657
|
+
}
|
|
658
|
+
}
|
|
659
|
+
}
|
|
660
|
+
catch { /* fresh count */ }
|
|
661
|
+
if (restartCount >= 2) {
|
|
662
|
+
console.log(`[Supervisor] Restart loop detected — already restarted ${restartCount}x for v${data.targetVersion}. Skipping.`);
|
|
663
|
+
try {
|
|
664
|
+
fs.unlinkSync(flagPath);
|
|
665
|
+
}
|
|
666
|
+
catch { /* ignore */ }
|
|
667
|
+
// Clean up the count file so it doesn't block future real updates
|
|
668
|
+
try {
|
|
669
|
+
fs.unlinkSync(restartCountFile);
|
|
670
|
+
}
|
|
671
|
+
catch { /* ignore */ }
|
|
672
|
+
return;
|
|
673
|
+
}
|
|
674
|
+
// Increment restart count for this version
|
|
675
|
+
try {
|
|
676
|
+
const stateSubdir = path.join(this.stateDir, 'state');
|
|
677
|
+
fs.mkdirSync(stateSubdir, { recursive: true });
|
|
678
|
+
fs.writeFileSync(restartCountFile, JSON.stringify({
|
|
679
|
+
targetVersion: data.targetVersion,
|
|
680
|
+
count: restartCount + 1,
|
|
681
|
+
lastRestartAt: new Date().toISOString(),
|
|
682
|
+
}));
|
|
683
|
+
}
|
|
684
|
+
catch { /* best-effort */ }
|
|
685
|
+
// Enter maintenance wait if this is a planned restart (suppress serverDown alerts)
|
|
686
|
+
if (data.plannedRestart) {
|
|
687
|
+
this.maintenanceWaitStartedAt = Date.now();
|
|
688
|
+
this.pendingUpdateVersion = data.targetVersion ?? null;
|
|
689
|
+
console.log(`[Supervisor] Planned restart — entering maintenance wait (${Math.round(this.maintenanceWaitMs / 60_000)}m window)`);
|
|
690
|
+
}
|
|
691
|
+
// Clear the flag BEFORE restarting to prevent re-triggering
|
|
692
|
+
try {
|
|
693
|
+
fs.unlinkSync(flagPath);
|
|
694
|
+
}
|
|
695
|
+
catch { /* ignore */ }
|
|
696
|
+
// Also clean up legacy flag if present
|
|
697
|
+
this.clearLegacyRestartFlag();
|
|
698
|
+
// Clean up any planned-exit marker from ForegroundRestartWatcher
|
|
699
|
+
this.clearPlannedExitMarker();
|
|
700
|
+
// Initiate graceful restart
|
|
701
|
+
this.performGracefulRestart(`update to v${data.targetVersion}`);
|
|
702
|
+
}
|
|
703
|
+
catch {
|
|
704
|
+
// Malformed flag — clean up
|
|
705
|
+
try {
|
|
706
|
+
fs.unlinkSync(flagPath);
|
|
707
|
+
}
|
|
708
|
+
catch { /* ignore */ }
|
|
709
|
+
}
|
|
710
|
+
}
|
|
711
|
+
// ── Debug restart request handling (doctor session) ─────────────
|
|
712
|
+
/**
|
|
713
|
+
* Check if a doctor session has requested a restart via HMAC-signed file.
|
|
714
|
+
* Called during the health check loop alongside checkRestartRequest().
|
|
715
|
+
*/
|
|
716
|
+
checkDebugRestartRequest() {
|
|
717
|
+
if (!this.stateDir)
|
|
718
|
+
return;
|
|
719
|
+
const requestPath = path.join(this.stateDir, 'debug-restart-request.json');
|
|
720
|
+
try {
|
|
721
|
+
if (!fs.existsSync(requestPath))
|
|
722
|
+
return;
|
|
723
|
+
const raw = fs.readFileSync(requestPath, 'utf-8');
|
|
724
|
+
fs.unlinkSync(requestPath); // consume the request immediately
|
|
725
|
+
const request = JSON.parse(raw);
|
|
726
|
+
// TTL check — reject requests older than 30 minutes
|
|
727
|
+
const requestAge = Date.now() - new Date(request.requestedAt).getTime();
|
|
728
|
+
if (requestAge > 30 * 60_000) {
|
|
729
|
+
console.log(`[Supervisor] Stale debug restart request (${Math.round(requestAge / 60_000)}m old) — discarded`);
|
|
730
|
+
return;
|
|
731
|
+
}
|
|
732
|
+
// HMAC validation
|
|
733
|
+
if (!this.validateRestartHmac(request)) {
|
|
734
|
+
console.warn(`[Supervisor] Invalid HMAC on debug restart request — rejected`);
|
|
735
|
+
return;
|
|
736
|
+
}
|
|
737
|
+
// Sanitize fixDescription before display (self-reported, untrusted)
|
|
738
|
+
const safeDescription = (request.fixDescription || 'no description')
|
|
739
|
+
.replace(/[<>&"']/g, '') // strip HTML-like chars
|
|
740
|
+
.slice(0, 200); // cap length
|
|
741
|
+
console.log(`[Supervisor] Debug session fix (self-reported): ${safeDescription}`);
|
|
742
|
+
// Check if server already recovered
|
|
743
|
+
if (this.healthy) {
|
|
744
|
+
console.log(`[Supervisor] Server already healthy — skipping restart, noting fix`);
|
|
745
|
+
this.emit('debugRestartSkipped', { fixDescription: safeDescription, reason: 'server_already_healthy' });
|
|
746
|
+
return;
|
|
747
|
+
}
|
|
748
|
+
this.emit('debugRestartRequested', { fixDescription: safeDescription, requestedBy: request.requestedBy || 'doctor-session' });
|
|
749
|
+
// Reset circuit breaker and restart
|
|
750
|
+
this.resetCircuitBreaker();
|
|
751
|
+
this.stop().then(() => this.start());
|
|
752
|
+
}
|
|
753
|
+
catch (err) {
|
|
754
|
+
console.error(`[Supervisor] Error processing debug restart request: ${err}`);
|
|
755
|
+
}
|
|
756
|
+
}
|
|
757
|
+
/**
|
|
758
|
+
* Validate HMAC on a debug restart request using the doctor session secret.
|
|
759
|
+
*/
|
|
760
|
+
validateRestartHmac(request) {
|
|
761
|
+
if (!this.doctorSessionSecret || !request.hmac || !request.requestedAt)
|
|
762
|
+
return false;
|
|
763
|
+
try {
|
|
764
|
+
const expectedPayload = request.requestedAt + (request.fixDescription || '');
|
|
765
|
+
const expectedHmac = crypto
|
|
766
|
+
.createHmac('sha256', this.doctorSessionSecret)
|
|
767
|
+
.update(expectedPayload)
|
|
768
|
+
.digest('hex');
|
|
769
|
+
// Use timing-safe comparison to prevent timing attacks
|
|
770
|
+
const hmacBuf = Buffer.from(request.hmac, 'hex');
|
|
771
|
+
const expectedBuf = Buffer.from(expectedHmac, 'hex');
|
|
772
|
+
if (hmacBuf.length !== expectedBuf.length)
|
|
773
|
+
return false;
|
|
774
|
+
return crypto.timingSafeEqual(hmacBuf, expectedBuf);
|
|
775
|
+
}
|
|
776
|
+
catch {
|
|
777
|
+
return false;
|
|
778
|
+
}
|
|
779
|
+
}
|
|
780
|
+
// ── Unhealthy handling ──────────────────────────────────────────
|
|
781
|
+
handleUnhealthy() {
|
|
782
|
+
// Circuit breaker — periodic retry instead of permanent death
|
|
783
|
+
if (this.circuitBroken) {
|
|
784
|
+
// Phase 1: Fast retries (every 30 min, 3x)
|
|
785
|
+
if (this.circuitBreakerRetryCount < this.maxCircuitBreakerRetries) {
|
|
786
|
+
const elapsed = Date.now() - this.circuitBreakerTrippedAt;
|
|
787
|
+
const nextRetryAt = this.circuitBreakerRetryIntervalMs * (this.circuitBreakerRetryCount + 1);
|
|
788
|
+
if (elapsed >= nextRetryAt) {
|
|
789
|
+
this.circuitBreakerRetryCount++;
|
|
790
|
+
console.log(`[Supervisor] Circuit breaker retry ${this.circuitBreakerRetryCount}/${this.maxCircuitBreakerRetries}`);
|
|
791
|
+
this.emit('serverRestarting', this.circuitBreakerRetryCount);
|
|
792
|
+
// Kill existing session if alive
|
|
793
|
+
if (this.tmuxPath && this.isServerSessionAlive()) {
|
|
794
|
+
this.captureCrashOutput();
|
|
795
|
+
this.cleanupChildProcesses();
|
|
796
|
+
try {
|
|
797
|
+
execFileSync(this.tmuxPath, ['kill-session', '-t', `=${this.serverSessionName}`], {
|
|
798
|
+
stdio: 'ignore',
|
|
799
|
+
});
|
|
800
|
+
}
|
|
801
|
+
catch { /* ignore */ }
|
|
802
|
+
}
|
|
803
|
+
this.spawnServer();
|
|
804
|
+
}
|
|
805
|
+
return;
|
|
806
|
+
}
|
|
807
|
+
// Phase 2: Slow retry — never truly give up. Transient issues (Node version change,
|
|
808
|
+
// disk full, port conflict) often resolve themselves. Try every 2 hours forever.
|
|
809
|
+
if (this.slowRetryStartedAt === 0) {
|
|
810
|
+
this.slowRetryStartedAt = Date.now();
|
|
811
|
+
console.log(`[Supervisor] Circuit breaker fast retries exhausted. Entering slow-retry mode (every ${this.slowRetryIntervalMs / 3600_000}h). Use /lifeline reset for immediate retry.`);
|
|
812
|
+
}
|
|
813
|
+
const slowElapsed = Date.now() - (this.slowRetryStartedAt + this.slowRetryIntervalMs * Math.floor((Date.now() - this.slowRetryStartedAt) / this.slowRetryIntervalMs));
|
|
814
|
+
if (slowElapsed < 60_000) { // Within 60s of a 2-hour boundary (wider window to avoid missed retries)
|
|
815
|
+
console.log(`[Supervisor] Slow retry attempt (${Math.round((Date.now() - this.slowRetryStartedAt) / 3600_000)}h since circuit breaker exhaustion)`);
|
|
816
|
+
// Kill existing session if alive
|
|
817
|
+
if (this.tmuxPath && this.isServerSessionAlive()) {
|
|
818
|
+
this.captureCrashOutput();
|
|
819
|
+
this.cleanupChildProcesses();
|
|
820
|
+
try {
|
|
821
|
+
execFileSync(this.tmuxPath, ['kill-session', '-t', `=${this.serverSessionName}`], {
|
|
822
|
+
stdio: 'ignore',
|
|
823
|
+
});
|
|
824
|
+
}
|
|
825
|
+
catch { /* ignore */ }
|
|
826
|
+
}
|
|
827
|
+
this.spawnServer();
|
|
828
|
+
}
|
|
829
|
+
return;
|
|
830
|
+
}
|
|
831
|
+
// Check for legacy planned restart flag (backward compatibility with old AutoUpdater)
|
|
832
|
+
if (this.isLegacyPlannedRestart()) {
|
|
833
|
+
if (!this.isServerSessionAlive()) {
|
|
834
|
+
console.log('[Supervisor] Legacy planned restart detected — server session dead. Respawning.');
|
|
835
|
+
this.clearLegacyRestartFlag();
|
|
836
|
+
this.consecutiveFailures = 0;
|
|
837
|
+
this.spawnServer();
|
|
838
|
+
return;
|
|
839
|
+
}
|
|
840
|
+
console.log('[Supervisor] Health check failed but legacy update-restart flag is active — suppressing alert');
|
|
841
|
+
this.consecutiveFailures = 0;
|
|
842
|
+
this.spawnedAt = Date.now();
|
|
843
|
+
return;
|
|
844
|
+
}
|
|
845
|
+
// Check for planned restart (new AutoUpdater with plannedRestart: true, or
|
|
846
|
+
// ForegroundRestartWatcher exit marker). Suppress serverDown during the
|
|
847
|
+
// maintenance wait window — this is expected downtime, not a crash.
|
|
848
|
+
if (this.isPendingPlannedRestart()) {
|
|
849
|
+
if (!this.isServerSessionAlive()) {
|
|
850
|
+
console.log('[Supervisor] Planned restart in progress — server session dead. Respawning.');
|
|
851
|
+
this.consecutiveFailures = 0;
|
|
852
|
+
this.spawnServer();
|
|
853
|
+
return;
|
|
854
|
+
}
|
|
855
|
+
console.log('[Supervisor] Health check failed during planned restart — suppressing alert');
|
|
856
|
+
this.consecutiveFailures = 0;
|
|
857
|
+
return;
|
|
858
|
+
}
|
|
859
|
+
if (this.isRunning) {
|
|
860
|
+
this.isRunning = false;
|
|
861
|
+
this.emit('serverDown', 'Health check failed');
|
|
862
|
+
}
|
|
863
|
+
this.consecutiveFailures = 0; // Reset after triggering action
|
|
864
|
+
// After max retries exhausted, wait for cooldown before trying again.
|
|
865
|
+
// IMPORTANT: Check cooldown BEFORE incrementing totalFailures. Otherwise, passive health check
|
|
866
|
+
// failures during cooldown accumulate and trip the circuit breaker, escalating a recoverable
|
|
867
|
+
// 5-min cooldown into a 30-min circuit breaker stall. Only actual restart failures should
|
|
868
|
+
// count toward the circuit breaker threshold.
|
|
869
|
+
if (this.restartAttempts >= this.maxRestartAttempts) {
|
|
870
|
+
if (this.maxRetriesExhaustedAt === 0) {
|
|
871
|
+
this.maxRetriesExhaustedAt = Date.now();
|
|
872
|
+
console.error(`[Supervisor] Max restart attempts (${this.maxRestartAttempts}) reached. Cooling down for ${this.retryCooldownMs / 1000}s before retrying.`);
|
|
873
|
+
}
|
|
874
|
+
if ((Date.now() - this.maxRetriesExhaustedAt) >= this.retryCooldownMs) {
|
|
875
|
+
console.log(`[Supervisor] Cooldown elapsed. Resetting restart counter.`);
|
|
876
|
+
this.restartAttempts = 0;
|
|
877
|
+
this.maxRetriesExhaustedAt = 0;
|
|
878
|
+
}
|
|
879
|
+
else {
|
|
880
|
+
return; // Still cooling down — skip totalFailures increment
|
|
881
|
+
}
|
|
882
|
+
}
|
|
883
|
+
// Track total failures for circuit breaker (only incremented for active failure handling, not passive cooldown)
|
|
884
|
+
const now = Date.now();
|
|
885
|
+
if (this.totalFailureWindowStart === 0 || (now - this.totalFailureWindowStart) > this.circuitBreakerWindowMs) {
|
|
886
|
+
// Reset window
|
|
887
|
+
this.totalFailureWindowStart = now;
|
|
888
|
+
this.totalFailures = 0;
|
|
889
|
+
}
|
|
890
|
+
this.totalFailures++;
|
|
891
|
+
// Circuit breaker: too many total failures in the window → trip (but with periodic retry)
|
|
892
|
+
if (this.totalFailures >= this.circuitBreakerThreshold) {
|
|
893
|
+
this.circuitBroken = true;
|
|
894
|
+
this.circuitBreakerTrippedAt = Date.now();
|
|
895
|
+
this.circuitBreakerRetryCount = 0;
|
|
896
|
+
console.error(`[Supervisor] CIRCUIT BREAKER: ${this.totalFailures} failures in ${Math.round(this.circuitBreakerWindowMs / 60000)}m window. Will retry every ${this.circuitBreakerRetryIntervalMs / 60000}m (${this.maxCircuitBreakerRetries}x).`);
|
|
897
|
+
console.error(`[Supervisor] Last crash output:\n${this.lastCrashOutput}`);
|
|
898
|
+
this.emit('circuitBroken', this.totalFailures, this.lastCrashOutput);
|
|
899
|
+
return;
|
|
900
|
+
}
|
|
901
|
+
// Auto-restart with backoff
|
|
902
|
+
this.restartAttempts++;
|
|
903
|
+
const delay = this.restartBackoffMs * Math.pow(2, this.restartAttempts - 1);
|
|
904
|
+
console.log(`[Supervisor] Server unhealthy. Restart attempt ${this.restartAttempts}/${this.maxRestartAttempts} in ${delay}ms`);
|
|
905
|
+
this.emit('serverRestarting', this.restartAttempts);
|
|
906
|
+
setTimeout(() => {
|
|
907
|
+
// Capture crash output BEFORE killing the tmux session
|
|
908
|
+
if (this.tmuxPath && this.isServerSessionAlive()) {
|
|
909
|
+
this.captureCrashOutput();
|
|
910
|
+
this.cleanupChildProcesses();
|
|
911
|
+
try {
|
|
912
|
+
execFileSync(this.tmuxPath, ['kill-session', '-t', `=${this.serverSessionName}`], {
|
|
913
|
+
stdio: 'ignore',
|
|
914
|
+
});
|
|
915
|
+
}
|
|
916
|
+
catch { /* ignore */ }
|
|
917
|
+
}
|
|
918
|
+
this.spawnServer();
|
|
919
|
+
}, delay);
|
|
920
|
+
}
|
|
921
|
+
// ── Crash diagnostics ──────────────────────────────────────────
|
|
922
|
+
/**
|
|
923
|
+
* Capture crash output from multiple sources:
|
|
924
|
+
* 1. tmux pane capture (last 50 lines of terminal output)
|
|
925
|
+
* 2. stderr crash log file (tee'd from server process)
|
|
926
|
+
*/
|
|
927
|
+
captureCrashOutput() {
|
|
928
|
+
// Try tmux pane capture first
|
|
929
|
+
if (this.tmuxPath) {
|
|
930
|
+
try {
|
|
931
|
+
const output = execFileSync(this.tmuxPath, [
|
|
932
|
+
'capture-pane', '-t', `=${this.serverSessionName}:`, '-p', '-S', '-50',
|
|
933
|
+
], { encoding: 'utf-8', timeout: 5000 });
|
|
934
|
+
if (output.trim()) {
|
|
935
|
+
this.lastCrashOutput = output.trim();
|
|
936
|
+
console.log(`[Supervisor] Crash output from tmux:\n${this.lastCrashOutput.slice(-500)}`);
|
|
937
|
+
return;
|
|
938
|
+
}
|
|
939
|
+
}
|
|
940
|
+
catch { // @silent-fallback-ok — capture may fail if session already dead
|
|
941
|
+
}
|
|
942
|
+
}
|
|
943
|
+
// Fallback: read the stderr crash log
|
|
944
|
+
if (this.stateDir) {
|
|
945
|
+
const crashLogPath = path.join(this.stateDir, 'logs', 'server-stderr.log');
|
|
946
|
+
try {
|
|
947
|
+
if (fs.existsSync(crashLogPath)) {
|
|
948
|
+
const content = fs.readFileSync(crashLogPath, 'utf-8');
|
|
949
|
+
const last500 = content.slice(-500).trim();
|
|
950
|
+
if (last500) {
|
|
951
|
+
this.lastCrashOutput = last500;
|
|
952
|
+
console.log(`[Supervisor] Crash output from stderr log:\n${last500}`);
|
|
953
|
+
}
|
|
954
|
+
}
|
|
955
|
+
}
|
|
956
|
+
catch { /* ignore */ }
|
|
957
|
+
}
|
|
958
|
+
}
|
|
959
|
+
/**
|
|
960
|
+
* Kill child processes (cloudflared, etc.) that were spawned by the server
|
|
961
|
+
* but will become orphans when the tmux session is killed.
|
|
962
|
+
*/
|
|
963
|
+
cleanupChildProcesses() {
|
|
964
|
+
if (!this.tmuxPath)
|
|
965
|
+
return;
|
|
966
|
+
try {
|
|
967
|
+
const panePid = execFileSync(this.tmuxPath, [
|
|
968
|
+
'list-panes', '-t', `=${this.serverSessionName}`, '-F', '#{pane_pid}',
|
|
969
|
+
], { encoding: 'utf-8', timeout: 5000 }).trim().split('\n')[0];
|
|
970
|
+
if (!panePid)
|
|
971
|
+
return;
|
|
972
|
+
const descendants = shellExec(`pgrep -P ${panePid} 2>/dev/null; pgrep -g ${panePid} 2>/dev/null`).trim().split('\n').filter(Boolean).map(Number).filter(n => !isNaN(n));
|
|
973
|
+
const unique = [...new Set(descendants)].filter(pid => pid !== parseInt(panePid));
|
|
974
|
+
if (unique.length > 0) {
|
|
975
|
+
console.log(`[Supervisor] Cleaning up ${unique.length} child process(es) before restart: ${unique.join(', ')}`);
|
|
976
|
+
for (const pid of unique) {
|
|
977
|
+
try {
|
|
978
|
+
process.kill(pid, 'SIGTERM');
|
|
979
|
+
}
|
|
980
|
+
catch { /* already dead */ }
|
|
981
|
+
}
|
|
982
|
+
setTimeout(() => {
|
|
983
|
+
for (const pid of unique) {
|
|
984
|
+
try {
|
|
985
|
+
process.kill(pid, 0);
|
|
986
|
+
process.kill(pid, 'SIGKILL');
|
|
987
|
+
}
|
|
988
|
+
catch { /* dead */ }
|
|
989
|
+
}
|
|
990
|
+
}, 3000);
|
|
991
|
+
}
|
|
992
|
+
}
|
|
993
|
+
catch { // @silent-fallback-ok — cleanup is best-effort
|
|
994
|
+
}
|
|
995
|
+
}
|
|
996
|
+
// ── Legacy flag handling (backward compatibility) ──────────────
|
|
997
|
+
/**
|
|
998
|
+
* Check for the legacy update-restart.json flag (written by old AutoUpdater versions).
|
|
999
|
+
* New versions write restart-requested.json instead, handled by checkRestartRequest().
|
|
1000
|
+
*/
|
|
1001
|
+
isLegacyPlannedRestart() {
|
|
1002
|
+
if (!this.stateDir)
|
|
1003
|
+
return false;
|
|
1004
|
+
const flagPath = path.join(this.stateDir, 'state', 'update-restart.json');
|
|
1005
|
+
try {
|
|
1006
|
+
if (!fs.existsSync(flagPath))
|
|
1007
|
+
return false;
|
|
1008
|
+
const data = JSON.parse(fs.readFileSync(flagPath, 'utf-8'));
|
|
1009
|
+
if (data.expiresAt && new Date(data.expiresAt).getTime() < Date.now()) {
|
|
1010
|
+
try {
|
|
1011
|
+
fs.unlinkSync(flagPath);
|
|
1012
|
+
}
|
|
1013
|
+
catch { /* ignore */ }
|
|
1014
|
+
return false;
|
|
1015
|
+
}
|
|
1016
|
+
return true;
|
|
1017
|
+
}
|
|
1018
|
+
catch {
|
|
1019
|
+
return false;
|
|
1020
|
+
}
|
|
1021
|
+
}
|
|
1022
|
+
clearLegacyRestartFlag() {
|
|
1023
|
+
if (!this.stateDir)
|
|
1024
|
+
return;
|
|
1025
|
+
const flagPath = path.join(this.stateDir, 'state', 'update-restart.json');
|
|
1026
|
+
try {
|
|
1027
|
+
if (fs.existsSync(flagPath)) {
|
|
1028
|
+
fs.unlinkSync(flagPath);
|
|
1029
|
+
console.log('[Supervisor] Cleared legacy update-restart flag');
|
|
1030
|
+
}
|
|
1031
|
+
}
|
|
1032
|
+
catch { /* ignore */ }
|
|
1033
|
+
}
|
|
1034
|
+
// ── Planned restart detection ──────────────────────────────
|
|
1035
|
+
/**
|
|
1036
|
+
* Check if a planned restart is in progress.
|
|
1037
|
+
*
|
|
1038
|
+
* Two sources of truth (covers both race scenarios):
|
|
1039
|
+
* 1. Internal state: set by checkRestartRequest() when it sees plannedRestart: true
|
|
1040
|
+
* 2. Planned-exit marker: written by ForegroundRestartWatcher before process.exit()
|
|
1041
|
+
* when it consumed the restart-requested.json before us
|
|
1042
|
+
*
|
|
1043
|
+
* Auto-expires after maintenanceWaitMs (default 5 min). If the server doesn't
|
|
1044
|
+
* come back within the window, fall back to normal alerting.
|
|
1045
|
+
*/
|
|
1046
|
+
isPendingPlannedRestart() {
|
|
1047
|
+
// Source 1: Internal state (supervisor saw the flag directly)
|
|
1048
|
+
if (this.maintenanceWaitStartedAt > 0) {
|
|
1049
|
+
const elapsed = Date.now() - this.maintenanceWaitStartedAt;
|
|
1050
|
+
if (elapsed > this.maintenanceWaitMs) {
|
|
1051
|
+
console.warn(`[Supervisor] Maintenance wait expired after ${Math.round(elapsed / 1000)}s — falling back to normal alerting`);
|
|
1052
|
+
this.maintenanceWaitStartedAt = 0;
|
|
1053
|
+
return false;
|
|
1054
|
+
}
|
|
1055
|
+
return true;
|
|
1056
|
+
}
|
|
1057
|
+
// Source 2: Planned-exit marker (ForegroundRestartWatcher consumed the flag first)
|
|
1058
|
+
if (!this.stateDir)
|
|
1059
|
+
return false;
|
|
1060
|
+
const markerPath = path.join(this.stateDir, 'state', 'planned-exit-marker.json');
|
|
1061
|
+
try {
|
|
1062
|
+
if (!fs.existsSync(markerPath))
|
|
1063
|
+
return false;
|
|
1064
|
+
const data = JSON.parse(fs.readFileSync(markerPath, 'utf-8'));
|
|
1065
|
+
// TTL check: marker expires after 10 minutes. If the server hasn't recovered
|
|
1066
|
+
// by then, the marker is stale and should not keep suppressing alerts or
|
|
1067
|
+
// triggering maintenance-mode respawns indefinitely.
|
|
1068
|
+
const markerAge = Date.now() - (new Date(data.exitedAt).getTime() || Date.now());
|
|
1069
|
+
const markerTtlMs = 10 * 60_000; // 10 minutes
|
|
1070
|
+
if (markerAge > markerTtlMs) {
|
|
1071
|
+
console.warn(`[Supervisor] Planned-exit marker expired (${Math.round(markerAge / 60_000)}m old) — clearing and falling back to normal alerting`);
|
|
1072
|
+
try {
|
|
1073
|
+
fs.unlinkSync(markerPath);
|
|
1074
|
+
}
|
|
1075
|
+
catch { /* ignore */ }
|
|
1076
|
+
return false;
|
|
1077
|
+
}
|
|
1078
|
+
// Marker exists and is fresh — enter maintenance wait mode
|
|
1079
|
+
console.log(`[Supervisor] Found planned-exit marker (target: v${data.targetVersion}) — entering maintenance wait`);
|
|
1080
|
+
this.maintenanceWaitStartedAt = new Date(data.exitedAt).getTime() || Date.now();
|
|
1081
|
+
this.pendingUpdateVersion = data.targetVersion ?? null;
|
|
1082
|
+
return true;
|
|
1083
|
+
}
|
|
1084
|
+
catch {
|
|
1085
|
+
return false;
|
|
1086
|
+
}
|
|
1087
|
+
}
|
|
1088
|
+
/**
|
|
1089
|
+
* Clean up the planned-exit marker written by ForegroundRestartWatcher.
|
|
1090
|
+
*/
|
|
1091
|
+
clearPlannedExitMarker() {
|
|
1092
|
+
if (!this.stateDir)
|
|
1093
|
+
return;
|
|
1094
|
+
const markerPath = path.join(this.stateDir, 'state', 'planned-exit-marker.json');
|
|
1095
|
+
try {
|
|
1096
|
+
if (fs.existsSync(markerPath)) {
|
|
1097
|
+
fs.unlinkSync(markerPath);
|
|
1098
|
+
}
|
|
1099
|
+
}
|
|
1100
|
+
catch { /* ignore */ }
|
|
1101
|
+
}
|
|
1102
|
+
}
|
|
1103
|
+
//# sourceMappingURL=ServerSupervisor.js.map
|