instar 0.28.75 → 0.28.77
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/dashboard/index.html +306 -0
- package/dist/cli.js +5 -4
- package/dist/cli.js.map +1 -1
- package/dist/commands/discovery.d.ts.map +1 -1
- package/dist/commands/discovery.js +2 -1
- package/dist/commands/discovery.js.map +1 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +22 -2
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/job.d.ts.map +1 -1
- package/dist/commands/job.js +2 -1
- package/dist/commands/job.js.map +1 -1
- package/dist/commands/ledgerCleanup.d.ts.map +1 -1
- package/dist/commands/ledgerCleanup.js +2 -1
- package/dist/commands/ledgerCleanup.js.map +1 -1
- package/dist/commands/listener.d.ts.map +1 -1
- package/dist/commands/listener.js +7 -6
- package/dist/commands/listener.js.map +1 -1
- package/dist/commands/nuke.d.ts.map +1 -1
- package/dist/commands/nuke.js +11 -15
- package/dist/commands/nuke.js.map +1 -1
- package/dist/commands/server.d.ts.map +1 -1
- package/dist/commands/server.js +35 -3
- package/dist/commands/server.js.map +1 -1
- package/dist/commands/setup.d.ts.map +1 -1
- package/dist/commands/setup.js +11 -9
- package/dist/commands/setup.js.map +1 -1
- package/dist/commands/slack-cli.d.ts.map +1 -1
- package/dist/commands/slack-cli.js +5 -4
- package/dist/commands/slack-cli.js.map +1 -1
- package/dist/commands/whatsapp.d.ts.map +1 -1
- package/dist/commands/whatsapp.js +2 -1
- package/dist/commands/whatsapp.js.map +1 -1
- package/dist/commands/worktree.d.ts.map +1 -1
- package/dist/commands/worktree.js +2 -1
- package/dist/commands/worktree.js.map +1 -1
- package/dist/core/AgentConnector.d.ts.map +1 -1
- package/dist/core/AgentConnector.js +9 -7
- package/dist/core/AgentConnector.js.map +1 -1
- package/dist/core/AgentRegistry.d.ts.map +1 -1
- package/dist/core/AgentRegistry.js +3 -2
- package/dist/core/AgentRegistry.js.map +1 -1
- package/dist/core/AutoDispatcher.d.ts.map +1 -1
- package/dist/core/AutoDispatcher.js +2 -1
- package/dist/core/AutoDispatcher.js.map +1 -1
- package/dist/core/AutoUpdater.d.ts.map +1 -1
- package/dist/core/AutoUpdater.js +2 -1
- package/dist/core/AutoUpdater.js.map +1 -1
- package/dist/core/AutonomousEvolution.d.ts.map +1 -1
- package/dist/core/AutonomousEvolution.js +2 -1
- package/dist/core/AutonomousEvolution.js.map +1 -1
- package/dist/core/BackupManager.d.ts.map +1 -1
- package/dist/core/BackupManager.js +2 -1
- package/dist/core/BackupManager.js.map +1 -1
- package/dist/core/BranchManager.d.ts.map +1 -1
- package/dist/core/BranchManager.js +3 -2
- package/dist/core/BranchManager.js.map +1 -1
- package/dist/core/CaffeinateManager.d.ts.map +1 -1
- package/dist/core/CaffeinateManager.js +2 -1
- package/dist/core/CaffeinateManager.js.map +1 -1
- package/dist/core/DeferredDispatchTracker.d.ts.map +1 -1
- package/dist/core/DeferredDispatchTracker.js +2 -1
- package/dist/core/DeferredDispatchTracker.js.map +1 -1
- package/dist/core/DispatchManager.d.ts.map +1 -1
- package/dist/core/DispatchManager.js +3 -2
- package/dist/core/DispatchManager.js.map +1 -1
- package/dist/core/EvolutionManager.d.ts.map +1 -1
- package/dist/core/EvolutionManager.js +2 -1
- package/dist/core/EvolutionManager.js.map +1 -1
- package/dist/core/ExecutionJournal.d.ts.map +1 -1
- package/dist/core/ExecutionJournal.js +2 -1
- package/dist/core/ExecutionJournal.js.map +1 -1
- package/dist/core/FeedbackManager.d.ts.map +1 -1
- package/dist/core/FeedbackManager.js +2 -1
- package/dist/core/FeedbackManager.js.map +1 -1
- package/dist/core/FileClassifier.d.ts.map +1 -1
- package/dist/core/FileClassifier.js +8 -13
- package/dist/core/FileClassifier.js.map +1 -1
- package/dist/core/ForegroundRestartWatcher.d.ts.map +1 -1
- package/dist/core/ForegroundRestartWatcher.js +3 -2
- package/dist/core/ForegroundRestartWatcher.js.map +1 -1
- package/dist/core/GitStateManager.d.ts.map +1 -1
- package/dist/core/GitStateManager.js +3 -11
- package/dist/core/GitStateManager.js.map +1 -1
- package/dist/core/GitSync.d.ts.map +1 -1
- package/dist/core/GitSync.js +6 -3
- package/dist/core/GitSync.js.map +1 -1
- package/dist/core/GlobalInstallCleanup.d.ts.map +1 -1
- package/dist/core/GlobalInstallCleanup.js +3 -2
- package/dist/core/GlobalInstallCleanup.js.map +1 -1
- package/dist/core/GlobalSecretStore.d.ts.map +1 -1
- package/dist/core/GlobalSecretStore.js +3 -2
- package/dist/core/GlobalSecretStore.js.map +1 -1
- package/dist/core/HandoffManager.d.ts.map +1 -1
- package/dist/core/HandoffManager.js +5 -3
- package/dist/core/HandoffManager.js.map +1 -1
- package/dist/core/JargonDetector.d.ts +28 -0
- package/dist/core/JargonDetector.d.ts.map +1 -0
- package/dist/core/JargonDetector.js +59 -0
- package/dist/core/JargonDetector.js.map +1 -0
- package/dist/core/LedgerSessionRegistry.d.ts.map +1 -1
- package/dist/core/LedgerSessionRegistry.js +2 -1
- package/dist/core/LedgerSessionRegistry.js.map +1 -1
- package/dist/core/MachineIdentity.d.ts.map +1 -1
- package/dist/core/MachineIdentity.js +2 -1
- package/dist/core/MachineIdentity.js.map +1 -1
- package/dist/core/MessagingToneGate.d.ts +42 -5
- package/dist/core/MessagingToneGate.d.ts.map +1 -1
- package/dist/core/MessagingToneGate.js +40 -6
- package/dist/core/MessagingToneGate.js.map +1 -1
- package/dist/core/ParallelDevWiring.d.ts.map +1 -1
- package/dist/core/ParallelDevWiring.js +3 -5
- package/dist/core/ParallelDevWiring.js.map +1 -1
- package/dist/core/PostUpdateMigrator.d.ts +26 -0
- package/dist/core/PostUpdateMigrator.d.ts.map +1 -1
- package/dist/core/PostUpdateMigrator.js +249 -44
- package/dist/core/PostUpdateMigrator.js.map +1 -1
- package/dist/core/ProjectMapper.d.ts.map +1 -1
- package/dist/core/ProjectMapper.js +5 -9
- package/dist/core/ProjectMapper.js.map +1 -1
- package/dist/core/RelationshipManager.d.ts.map +1 -1
- package/dist/core/RelationshipManager.js +4 -3
- package/dist/core/RelationshipManager.js.map +1 -1
- package/dist/core/SafeFsExecutor.d.ts +41 -0
- package/dist/core/SafeFsExecutor.d.ts.map +1 -0
- package/dist/core/SafeFsExecutor.js +146 -0
- package/dist/core/SafeFsExecutor.js.map +1 -0
- package/dist/core/SafeGitExecutor.d.ts +145 -0
- package/dist/core/SafeGitExecutor.d.ts.map +1 -0
- package/dist/core/SafeGitExecutor.js +717 -0
- package/dist/core/SafeGitExecutor.js.map +1 -0
- package/dist/core/ScopeVerifier.d.ts.map +1 -1
- package/dist/core/ScopeVerifier.js +3 -5
- package/dist/core/ScopeVerifier.js.map +1 -1
- package/dist/core/SecretStore.d.ts.map +1 -1
- package/dist/core/SecretStore.js +2 -1
- package/dist/core/SecretStore.js.map +1 -1
- package/dist/core/SharedStateLedger.d.ts.map +1 -1
- package/dist/core/SharedStateLedger.js +2 -1
- package/dist/core/SharedStateLedger.js.map +1 -1
- package/dist/core/SoulManager.d.ts.map +1 -1
- package/dist/core/SoulManager.js +3 -2
- package/dist/core/SoulManager.js.map +1 -1
- package/dist/core/StateManager.d.ts.map +1 -1
- package/dist/core/StateManager.js +4 -3
- package/dist/core/StateManager.js.map +1 -1
- package/dist/core/SyncOrchestrator.d.ts.map +1 -1
- package/dist/core/SyncOrchestrator.js +6 -4
- package/dist/core/SyncOrchestrator.js.map +1 -1
- package/dist/core/UpdateChecker.d.ts.map +1 -1
- package/dist/core/UpdateChecker.js +3 -2
- package/dist/core/UpdateChecker.js.map +1 -1
- package/dist/core/UpgradeGuideProcessor.d.ts.map +1 -1
- package/dist/core/UpgradeGuideProcessor.js +3 -2
- package/dist/core/UpgradeGuideProcessor.js.map +1 -1
- package/dist/core/WorktreeManager.d.ts.map +1 -1
- package/dist/core/WorktreeManager.js +9 -7
- package/dist/core/WorktreeManager.js.map +1 -1
- package/dist/knowledge/KnowledgeManager.d.ts.map +1 -1
- package/dist/knowledge/KnowledgeManager.js +2 -1
- package/dist/knowledge/KnowledgeManager.js.map +1 -1
- package/dist/lifeline/ServerSupervisor.d.ts +28 -0
- package/dist/lifeline/ServerSupervisor.d.ts.map +1 -1
- package/dist/lifeline/ServerSupervisor.js +171 -59
- package/dist/lifeline/ServerSupervisor.js.map +1 -1
- package/dist/lifeline/TelegramLifeline.d.ts.map +1 -1
- package/dist/lifeline/TelegramLifeline.js +10 -3
- package/dist/lifeline/TelegramLifeline.js.map +1 -1
- package/dist/lifeline/detectLaunchdSupervised.d.ts +43 -0
- package/dist/lifeline/detectLaunchdSupervised.d.ts.map +1 -0
- package/dist/lifeline/detectLaunchdSupervised.js +106 -0
- package/dist/lifeline/detectLaunchdSupervised.js.map +1 -0
- package/dist/lifeline/droppedMessages.d.ts.map +1 -1
- package/dist/lifeline/droppedMessages.js +2 -1
- package/dist/lifeline/droppedMessages.js.map +1 -1
- package/dist/memory/EpisodicMemory.d.ts.map +1 -1
- package/dist/memory/EpisodicMemory.js +2 -1
- package/dist/memory/EpisodicMemory.js.map +1 -1
- package/dist/memory/TopicMemory.d.ts.map +1 -1
- package/dist/memory/TopicMemory.js +5 -4
- package/dist/memory/TopicMemory.js.map +1 -1
- package/dist/messaging/AgentTokenManager.d.ts.map +1 -1
- package/dist/messaging/AgentTokenManager.js +2 -1
- package/dist/messaging/AgentTokenManager.js.map +1 -1
- package/dist/messaging/DropPickup.d.ts.map +1 -1
- package/dist/messaging/DropPickup.js +2 -1
- package/dist/messaging/DropPickup.js.map +1 -1
- package/dist/messaging/GitSyncTransport.d.ts.map +1 -1
- package/dist/messaging/GitSyncTransport.js +4 -3
- package/dist/messaging/GitSyncTransport.js.map +1 -1
- package/dist/messaging/MessageStore.d.ts.map +1 -1
- package/dist/messaging/MessageStore.js +3 -2
- package/dist/messaging/MessageStore.js.map +1 -1
- package/dist/messaging/TelegramAdapter.d.ts.map +1 -1
- package/dist/messaging/TelegramAdapter.js +5 -4
- package/dist/messaging/TelegramAdapter.js.map +1 -1
- package/dist/messaging/backends/BaileysBackend.d.ts.map +1 -1
- package/dist/messaging/backends/BaileysBackend.js +3 -2
- package/dist/messaging/backends/BaileysBackend.js.map +1 -1
- package/dist/messaging/local-tone-check.d.ts +61 -0
- package/dist/messaging/local-tone-check.d.ts.map +1 -0
- package/dist/messaging/local-tone-check.js +78 -0
- package/dist/messaging/local-tone-check.js.map +1 -0
- package/dist/messaging/pending-relay-store.d.ts +153 -0
- package/dist/messaging/pending-relay-store.d.ts.map +1 -0
- package/dist/messaging/pending-relay-store.js +351 -0
- package/dist/messaging/pending-relay-store.js.map +1 -0
- package/dist/messaging/secret-patterns.d.ts +35 -0
- package/dist/messaging/secret-patterns.d.ts.map +1 -0
- package/dist/messaging/secret-patterns.js +70 -0
- package/dist/messaging/secret-patterns.js.map +1 -0
- package/dist/messaging/shared/EncryptedAuthStore.d.ts.map +1 -1
- package/dist/messaging/shared/EncryptedAuthStore.js +3 -2
- package/dist/messaging/shared/EncryptedAuthStore.js.map +1 -1
- package/dist/messaging/shared/MessageLogger.d.ts.map +1 -1
- package/dist/messaging/shared/MessageLogger.js +2 -1
- package/dist/messaging/shared/MessageLogger.js.map +1 -1
- package/dist/messaging/shared/PrivacyConsent.d.ts.map +1 -1
- package/dist/messaging/shared/PrivacyConsent.js +2 -1
- package/dist/messaging/shared/PrivacyConsent.js.map +1 -1
- package/dist/messaging/shared/SessionChannelRegistry.d.ts.map +1 -1
- package/dist/messaging/shared/SessionChannelRegistry.js +2 -1
- package/dist/messaging/shared/SessionChannelRegistry.js.map +1 -1
- package/dist/messaging/system-templates.d.ts +87 -0
- package/dist/messaging/system-templates.d.ts.map +1 -0
- package/dist/messaging/system-templates.js +236 -0
- package/dist/messaging/system-templates.js.map +1 -0
- package/dist/messaging/whoami-cache.d.ts +66 -0
- package/dist/messaging/whoami-cache.d.ts.map +1 -0
- package/dist/messaging/whoami-cache.js +149 -0
- package/dist/messaging/whoami-cache.js.map +1 -0
- package/dist/moltbridge/ProfileCompiler.d.ts.map +1 -1
- package/dist/moltbridge/ProfileCompiler.js +13 -4
- package/dist/moltbridge/ProfileCompiler.js.map +1 -1
- package/dist/monitoring/CommitmentTracker.d.ts.map +1 -1
- package/dist/monitoring/CommitmentTracker.js +2 -1
- package/dist/monitoring/CommitmentTracker.js.map +1 -1
- package/dist/monitoring/CredentialProvider.d.ts.map +1 -1
- package/dist/monitoring/CredentialProvider.js +2 -1
- package/dist/monitoring/CredentialProvider.js.map +1 -1
- package/dist/monitoring/DegradationReporter.d.ts +41 -0
- package/dist/monitoring/DegradationReporter.d.ts.map +1 -1
- package/dist/monitoring/DegradationReporter.js +96 -4
- package/dist/monitoring/DegradationReporter.js.map +1 -1
- package/dist/monitoring/HealthChecker.d.ts.map +1 -1
- package/dist/monitoring/HealthChecker.js +2 -1
- package/dist/monitoring/HealthChecker.js.map +1 -1
- package/dist/monitoring/HookEventReceiver.d.ts.map +1 -1
- package/dist/monitoring/HookEventReceiver.js +2 -1
- package/dist/monitoring/HookEventReceiver.js.map +1 -1
- package/dist/monitoring/InstructionsVerifier.d.ts.map +1 -1
- package/dist/monitoring/InstructionsVerifier.js +2 -1
- package/dist/monitoring/InstructionsVerifier.js.map +1 -1
- package/dist/monitoring/PresenceProxy.d.ts.map +1 -1
- package/dist/monitoring/PresenceProxy.js +5 -4
- package/dist/monitoring/PresenceProxy.js.map +1 -1
- package/dist/monitoring/QuotaTracker.d.ts.map +1 -1
- package/dist/monitoring/QuotaTracker.js +2 -1
- package/dist/monitoring/QuotaTracker.js.map +1 -1
- package/dist/monitoring/SessionMigrator.d.ts.map +1 -1
- package/dist/monitoring/SessionMigrator.js +2 -1
- package/dist/monitoring/SessionMigrator.js.map +1 -1
- package/dist/monitoring/SessionRecovery.d.ts.map +1 -1
- package/dist/monitoring/SessionRecovery.js +2 -1
- package/dist/monitoring/SessionRecovery.js.map +1 -1
- package/dist/monitoring/TelemetryAuth.d.ts.map +1 -1
- package/dist/monitoring/TelemetryAuth.js +3 -2
- package/dist/monitoring/TelemetryAuth.js.map +1 -1
- package/dist/monitoring/TokenLedger.d.ts +91 -0
- package/dist/monitoring/TokenLedger.d.ts.map +1 -0
- package/dist/monitoring/TokenLedger.js +426 -0
- package/dist/monitoring/TokenLedger.js.map +1 -0
- package/dist/monitoring/TokenLedgerPoller.d.ts +26 -0
- package/dist/monitoring/TokenLedgerPoller.d.ts.map +1 -0
- package/dist/monitoring/TokenLedgerPoller.js +44 -0
- package/dist/monitoring/TokenLedgerPoller.js.map +1 -0
- package/dist/monitoring/TriageOrchestrator.d.ts.map +1 -1
- package/dist/monitoring/TriageOrchestrator.js +3 -2
- package/dist/monitoring/TriageOrchestrator.js.map +1 -1
- package/dist/monitoring/WorktreeReaper.d.ts.map +1 -1
- package/dist/monitoring/WorktreeReaper.js +5 -4
- package/dist/monitoring/WorktreeReaper.js.map +1 -1
- package/dist/monitoring/delivery-failure-sentinel/recovery-policy.d.ts +83 -0
- package/dist/monitoring/delivery-failure-sentinel/recovery-policy.d.ts.map +1 -0
- package/dist/monitoring/delivery-failure-sentinel/recovery-policy.js +218 -0
- package/dist/monitoring/delivery-failure-sentinel/recovery-policy.js.map +1 -0
- package/dist/monitoring/delivery-failure-sentinel.d.ts +177 -0
- package/dist/monitoring/delivery-failure-sentinel.d.ts.map +1 -0
- package/dist/monitoring/delivery-failure-sentinel.js +598 -0
- package/dist/monitoring/delivery-failure-sentinel.js.map +1 -0
- package/dist/monitoring/probes/PlatformProbe.d.ts.map +1 -1
- package/dist/monitoring/probes/PlatformProbe.js +3 -2
- package/dist/monitoring/probes/PlatformProbe.js.map +1 -1
- package/dist/monitoring/templates-drift-verifier.d.ts +109 -0
- package/dist/monitoring/templates-drift-verifier.d.ts.map +1 -0
- package/dist/monitoring/templates-drift-verifier.js +324 -0
- package/dist/monitoring/templates-drift-verifier.js.map +1 -0
- package/dist/paste/PasteManager.d.ts.map +1 -1
- package/dist/paste/PasteManager.js +5 -4
- package/dist/paste/PasteManager.js.map +1 -1
- package/dist/publishing/PrivateViewer.d.ts.map +1 -1
- package/dist/publishing/PrivateViewer.js +2 -1
- package/dist/publishing/PrivateViewer.js.map +1 -1
- package/dist/scheduler/JobScheduler.d.ts.map +1 -1
- package/dist/scheduler/JobScheduler.js +2 -1
- package/dist/scheduler/JobScheduler.js.map +1 -1
- package/dist/server/AgentServer.d.ts +18 -0
- package/dist/server/AgentServer.d.ts.map +1 -1
- package/dist/server/AgentServer.js +186 -1
- package/dist/server/AgentServer.js.map +1 -1
- package/dist/server/WebSocketManager.d.ts +11 -0
- package/dist/server/WebSocketManager.d.ts.map +1 -1
- package/dist/server/WebSocketManager.js +28 -0
- package/dist/server/WebSocketManager.js.map +1 -1
- package/dist/server/boot-id.d.ts +58 -0
- package/dist/server/boot-id.d.ts.map +1 -0
- package/dist/server/boot-id.js +121 -0
- package/dist/server/boot-id.js.map +1 -0
- package/dist/server/middleware.d.ts +14 -1
- package/dist/server/middleware.d.ts.map +1 -1
- package/dist/server/middleware.js +81 -1
- package/dist/server/middleware.js.map +1 -1
- package/dist/server/routes.d.ts +69 -0
- package/dist/server/routes.d.ts.map +1 -1
- package/dist/server/routes.js +545 -16
- package/dist/server/routes.js.map +1 -1
- package/dist/threadline/AgentDiscovery.d.ts.map +1 -1
- package/dist/threadline/AgentDiscovery.js +2 -1
- package/dist/threadline/AgentDiscovery.js.map +1 -1
- package/dist/threadline/AgentTrustManager.d.ts.map +1 -1
- package/dist/threadline/AgentTrustManager.js +2 -1
- package/dist/threadline/AgentTrustManager.js.map +1 -1
- package/dist/threadline/CircuitBreaker.d.ts.map +1 -1
- package/dist/threadline/CircuitBreaker.js +2 -1
- package/dist/threadline/CircuitBreaker.js.map +1 -1
- package/dist/threadline/ComputeMeter.d.ts.map +1 -1
- package/dist/threadline/ComputeMeter.js +2 -1
- package/dist/threadline/ComputeMeter.js.map +1 -1
- package/dist/threadline/ContextThreadMap.d.ts.map +1 -1
- package/dist/threadline/ContextThreadMap.js +2 -1
- package/dist/threadline/ContextThreadMap.js.map +1 -1
- package/dist/threadline/HeartbeatWatchdog.d.ts +78 -0
- package/dist/threadline/HeartbeatWatchdog.d.ts.map +1 -0
- package/dist/threadline/HeartbeatWatchdog.js +212 -0
- package/dist/threadline/HeartbeatWatchdog.js.map +1 -0
- package/dist/threadline/HeartbeatWriter.d.ts +79 -0
- package/dist/threadline/HeartbeatWriter.d.ts.map +1 -0
- package/dist/threadline/HeartbeatWriter.js +109 -0
- package/dist/threadline/HeartbeatWriter.js.map +1 -0
- package/dist/threadline/InvitationManager.d.ts.map +1 -1
- package/dist/threadline/InvitationManager.js +2 -1
- package/dist/threadline/InvitationManager.js.map +1 -1
- package/dist/threadline/ListenerSessionManager.d.ts +24 -0
- package/dist/threadline/ListenerSessionManager.d.ts.map +1 -1
- package/dist/threadline/ListenerSessionManager.js +38 -0
- package/dist/threadline/ListenerSessionManager.js.map +1 -1
- package/dist/threadline/MCPAuth.d.ts.map +1 -1
- package/dist/threadline/MCPAuth.js +2 -1
- package/dist/threadline/MCPAuth.js.map +1 -1
- package/dist/threadline/PipeSessionSpawner.d.ts.map +1 -1
- package/dist/threadline/PipeSessionSpawner.js +3 -2
- package/dist/threadline/PipeSessionSpawner.js.map +1 -1
- package/dist/threadline/RateLimiter.d.ts.map +1 -1
- package/dist/threadline/RateLimiter.js +2 -1
- package/dist/threadline/RateLimiter.js.map +1 -1
- package/dist/threadline/RelaySpawnFailureHandler.d.ts +53 -0
- package/dist/threadline/RelaySpawnFailureHandler.d.ts.map +1 -0
- package/dist/threadline/RelaySpawnFailureHandler.js +73 -0
- package/dist/threadline/RelaySpawnFailureHandler.js.map +1 -0
- package/dist/threadline/SessionLifecycle.d.ts.map +1 -1
- package/dist/threadline/SessionLifecycle.js +2 -1
- package/dist/threadline/SessionLifecycle.js.map +1 -1
- package/dist/threadline/SpawnLedger.d.ts +94 -0
- package/dist/threadline/SpawnLedger.d.ts.map +1 -0
- package/dist/threadline/SpawnLedger.js +194 -0
- package/dist/threadline/SpawnLedger.js.map +1 -0
- package/dist/threadline/SpawnNonce.d.ts +49 -0
- package/dist/threadline/SpawnNonce.d.ts.map +1 -0
- package/dist/threadline/SpawnNonce.js +99 -0
- package/dist/threadline/SpawnNonce.js.map +1 -0
- package/dist/threadline/TelegramBridgeConfig.d.ts +79 -0
- package/dist/threadline/TelegramBridgeConfig.d.ts.map +1 -0
- package/dist/threadline/TelegramBridgeConfig.js +168 -0
- package/dist/threadline/TelegramBridgeConfig.js.map +1 -0
- package/dist/threadline/ThreadlineBootstrap.d.ts.map +1 -1
- package/dist/threadline/ThreadlineBootstrap.js +2 -1
- package/dist/threadline/ThreadlineBootstrap.js.map +1 -1
- package/dist/threadline/WakeSocketServer.d.ts.map +1 -1
- package/dist/threadline/WakeSocketServer.js +3 -2
- package/dist/threadline/WakeSocketServer.js.map +1 -1
- package/dist/threadline/listener-daemon.d.ts.map +1 -1
- package/dist/threadline/listener-daemon.js +3 -2
- package/dist/threadline/listener-daemon.js.map +1 -1
- package/dist/users/UserManager.d.ts.map +1 -1
- package/dist/users/UserManager.js +2 -1
- package/dist/users/UserManager.js.map +1 -1
- package/dist/users/UserOnboarding.d.ts.map +1 -1
- package/dist/users/UserOnboarding.js +2 -1
- package/dist/users/UserOnboarding.js.map +1 -1
- package/dist/utils/jsonl-rotation.d.ts.map +1 -1
- package/dist/utils/jsonl-rotation.js +2 -1
- package/dist/utils/jsonl-rotation.js.map +1 -1
- package/package.json +4 -2
- package/scripts/add-migration-marker.js +121 -0
- package/scripts/analyze-release.js +7 -6
- package/scripts/check-contract-evidence.js +27 -8
- package/scripts/destructive-command-shim.js +1 -0
- package/scripts/generate-builtin-manifest.cjs +1 -0
- package/scripts/lint-no-direct-destructive.js +617 -0
- package/scripts/lint-template-sha-history.ts +183 -0
- package/scripts/migrate-incident-2026-04-17.mjs +2 -1
- package/scripts/pre-push-gate.js +24 -0
- package/scripts/run-migration.js +500 -0
- package/scripts/test-bootstrap-relay.mjs +2 -1
- package/scripts/verify-deployed-templates.ts +87 -0
- package/scripts/worktree-commit-msg-hook.js +4 -0
- package/scripts/worktree-precommit-gate.js +1 -0
- package/src/data/builtin-manifest.json +139 -131
- package/src/templates/scripts/telegram-reply.sh +318 -13
- package/upgrades/0.28.76.md +67 -0
- package/upgrades/0.28.77.md +133 -0
- package/upgrades/side-effects/0.28.76.md +76 -0
- package/upgrades/side-effects/agent-health-alert-authority-routing.md +121 -0
- package/upgrades/side-effects/comprehensive-destructive-tool-containment-foundation.md +74 -0
- package/upgrades/side-effects/comprehensive-destructive-tool-containment-migration.md +82 -0
- package/upgrades/side-effects/deferral-detector-orphan-todo.md +101 -0
- package/upgrades/side-effects/lifeline-self-heal-hardening.md +151 -0
- package/upgrades/side-effects/relay-spawn-ghost-reply-phase1.md +139 -0
- package/upgrades/side-effects/telegram-delivery-robustness-layer-2.md +320 -0
- package/upgrades/side-effects/telegram-delivery-robustness-layer-3.md +202 -0
- package/upgrades/side-effects/telegram-delivery-robustness-layer-7.md +339 -0
- package/upgrades/side-effects/telegram-delivery-robustness.md +178 -0
- package/upgrades/side-effects/threadline-canonical-inbox-write.md +218 -0
- package/upgrades/side-effects/threadline-tg-bridge-settings-surface.md +208 -0
- package/upgrades/side-effects/token-ledger-phase1.md +123 -0
- package/upgrades/NEXT.md +0 -53
package/dashboard/index.html
CHANGED
|
@@ -2418,6 +2418,8 @@
|
|
|
2418
2418
|
<button class="tab" data-tab="pr-pipeline" onclick="switchTab('pr-pipeline')">PR Pipeline</button>
|
|
2419
2419
|
<button class="tab" data-tab="initiatives" onclick="switchTab('initiatives')">Initiatives <span class="tab-count" id="tabInitiativeCount">0</span></button>
|
|
2420
2420
|
<button class="tab" data-tab="commitments" onclick="switchTab('commitments')">Commitments <span class="tab-count" id="tabCommitmentCount">0</span></button>
|
|
2421
|
+
<button class="tab" data-tab="tokens" onclick="switchTab('tokens')">Tokens</button>
|
|
2422
|
+
<button class="tab" data-tab="threadline" onclick="switchTab('threadline')">Threadline</button>
|
|
2421
2423
|
</nav>
|
|
2422
2424
|
</div>
|
|
2423
2425
|
<div class="vital-signs" id="vitalSigns">
|
|
@@ -2846,6 +2848,110 @@
|
|
|
2846
2848
|
<div id="commitmentsList" style="display:flex;flex-direction:column;gap:12px"></div>
|
|
2847
2849
|
</div>
|
|
2848
2850
|
|
|
2851
|
+
<!-- Tokens Tab — read-only token-usage observability -->
|
|
2852
|
+
<div id="tokensPanel" style="display:none;flex-direction:column;padding:20px;gap:16px;overflow-y:auto">
|
|
2853
|
+
<div style="display:flex;justify-content:space-between;align-items:center">
|
|
2854
|
+
<h2 style="margin:0">Tokens</h2>
|
|
2855
|
+
<button onclick="loadTokens()" style="padding:6px 12px">Refresh</button>
|
|
2856
|
+
</div>
|
|
2857
|
+
<div style="font-size:12px;color:var(--text-dim);line-height:1.4">
|
|
2858
|
+
Token usage rolled up from Claude Code session transcripts. Last 24 hours unless noted.
|
|
2859
|
+
</div>
|
|
2860
|
+
|
|
2861
|
+
<!-- Summary card -->
|
|
2862
|
+
<div id="tokensSummaryCard" style="border:1px solid var(--border);border-radius:8px;padding:16px;display:flex;flex-direction:column;gap:8px">
|
|
2863
|
+
<div style="font-weight:600">Last 24h</div>
|
|
2864
|
+
<div id="tokensSummaryBody" style="display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:12px;font-size:13px">
|
|
2865
|
+
<div style="color:var(--text-dim)">Loading...</div>
|
|
2866
|
+
</div>
|
|
2867
|
+
</div>
|
|
2868
|
+
|
|
2869
|
+
<!-- Top sessions -->
|
|
2870
|
+
<div style="border:1px solid var(--border);border-radius:8px;padding:16px;display:flex;flex-direction:column;gap:8px">
|
|
2871
|
+
<div style="font-weight:600">Top Sessions</div>
|
|
2872
|
+
<div id="tokensSessionsBody" style="font-size:13px">
|
|
2873
|
+
<div style="color:var(--text-dim)">Loading...</div>
|
|
2874
|
+
</div>
|
|
2875
|
+
</div>
|
|
2876
|
+
|
|
2877
|
+
<!-- Orphans -->
|
|
2878
|
+
<div style="border:1px solid var(--border);border-radius:8px;padding:16px;display:flex;flex-direction:column;gap:8px">
|
|
2879
|
+
<div style="font-weight:600">Idle Sessions (> 30 min)</div>
|
|
2880
|
+
<div id="tokensOrphansBody" style="font-size:13px">
|
|
2881
|
+
<div style="color:var(--text-dim)">Loading...</div>
|
|
2882
|
+
</div>
|
|
2883
|
+
</div>
|
|
2884
|
+
</div>
|
|
2885
|
+
|
|
2886
|
+
<!-- Threadline Tab — agent-to-agent conversations + Telegram bridge settings -->
|
|
2887
|
+
<div id="threadlineTab" style="display:none;flex-direction:column;padding:20px;gap:16px;overflow-y:auto">
|
|
2888
|
+
<div style="display:flex;justify-content:space-between;align-items:center">
|
|
2889
|
+
<h2 style="margin:0">Threadline</h2>
|
|
2890
|
+
<button onclick="loadThreadlineBridgeConfig()" style="padding:6px 12px">Refresh</button>
|
|
2891
|
+
</div>
|
|
2892
|
+
<div style="font-size:12px;color:var(--text-dim);line-height:1.4">
|
|
2893
|
+
Threadline is your agent's secure channel to other AI agents. The Telegram bridge mirrors those conversations into per-thread Telegram topics so you can watch every exchange. Quiet by default — flip the master switch below to opt in.
|
|
2894
|
+
</div>
|
|
2895
|
+
|
|
2896
|
+
<!-- Bridge settings card -->
|
|
2897
|
+
<div id="tlBridgeCard" style="border:1px solid var(--border);border-radius:8px;padding:16px;display:flex;flex-direction:column;gap:14px">
|
|
2898
|
+
<div style="font-weight:600">Telegram bridge settings</div>
|
|
2899
|
+
<div id="tlBridgeStatus" style="font-size:12px;color:var(--text-dim)">Loading…</div>
|
|
2900
|
+
|
|
2901
|
+
<label style="display:flex;align-items:flex-start;gap:10px;font-size:13px">
|
|
2902
|
+
<input type="checkbox" id="tlBridgeEnabled" style="margin-top:3px" />
|
|
2903
|
+
<span>
|
|
2904
|
+
<strong>Bridge enabled (master switch)</strong>
|
|
2905
|
+
<div style="color:var(--text-dim);font-size:12px;margin-top:2px">When off, no threadline traffic reaches Telegram, regardless of the toggles below.</div>
|
|
2906
|
+
</span>
|
|
2907
|
+
</label>
|
|
2908
|
+
|
|
2909
|
+
<label style="display:flex;align-items:flex-start;gap:10px;font-size:13px">
|
|
2910
|
+
<input type="checkbox" id="tlBridgeAutoCreate" style="margin-top:3px" />
|
|
2911
|
+
<span>
|
|
2912
|
+
<strong>Auto-create Telegram topics for new threads</strong>
|
|
2913
|
+
<div style="color:var(--text-dim);font-size:12px;margin-top:2px">Default off. When off, a brand-new agent reaching out won't spawn a Telegram topic unless you've allow-listed them below.</div>
|
|
2914
|
+
</span>
|
|
2915
|
+
</label>
|
|
2916
|
+
|
|
2917
|
+
<label style="display:flex;align-items:flex-start;gap:10px;font-size:13px">
|
|
2918
|
+
<input type="checkbox" id="tlBridgeMirrorExisting" style="margin-top:3px" />
|
|
2919
|
+
<span>
|
|
2920
|
+
<strong>Mirror messages into existing topics</strong>
|
|
2921
|
+
<div style="color:var(--text-dim);font-size:12px;margin-top:2px">Default on. Once a Telegram topic exists for a thread, both inbound and outbound messages on that thread show up there.</div>
|
|
2922
|
+
</span>
|
|
2923
|
+
</label>
|
|
2924
|
+
|
|
2925
|
+
<div style="display:grid;grid-template-columns:1fr 1fr;gap:14px">
|
|
2926
|
+
<div>
|
|
2927
|
+
<div style="font-weight:600;font-size:13px;margin-bottom:6px">Allow-list</div>
|
|
2928
|
+
<div style="font-size:11px;color:var(--text-dim);margin-bottom:6px">Always auto-create topics for these remote agents (overrides "auto-create off").</div>
|
|
2929
|
+
<ul id="tlBridgeAllowList" style="list-style:none;padding:0;margin:0;font-size:13px;display:flex;flex-direction:column;gap:4px"></ul>
|
|
2930
|
+
<div style="display:flex;gap:6px;margin-top:8px">
|
|
2931
|
+
<input type="text" id="tlBridgeAllowInput" placeholder="agent fingerprint or name" style="flex:1;padding:6px 8px;font-size:12px" />
|
|
2932
|
+
<button onclick="tlBridgeAddListEntry('allowList', 'tlBridgeAllowInput')" style="padding:6px 10px;font-size:12px">Add</button>
|
|
2933
|
+
</div>
|
|
2934
|
+
</div>
|
|
2935
|
+
<div>
|
|
2936
|
+
<div style="font-weight:600;font-size:13px;margin-bottom:6px">Deny-list</div>
|
|
2937
|
+
<div style="font-size:11px;color:var(--text-dim);margin-bottom:6px">Never auto-create topics for these remote agents (overrides "auto-create on").</div>
|
|
2938
|
+
<ul id="tlBridgeDenyList" style="list-style:none;padding:0;margin:0;font-size:13px;display:flex;flex-direction:column;gap:4px"></ul>
|
|
2939
|
+
<div style="display:flex;gap:6px;margin-top:8px">
|
|
2940
|
+
<input type="text" id="tlBridgeDenyInput" placeholder="agent fingerprint or name" style="flex:1;padding:6px 8px;font-size:12px" />
|
|
2941
|
+
<button onclick="tlBridgeAddListEntry('denyList', 'tlBridgeDenyInput')" style="padding:6px 10px;font-size:12px">Add</button>
|
|
2942
|
+
</div>
|
|
2943
|
+
</div>
|
|
2944
|
+
</div>
|
|
2945
|
+
|
|
2946
|
+
<div id="tlBridgeError" style="color:var(--err, #c44);font-size:12px;display:none"></div>
|
|
2947
|
+
</div>
|
|
2948
|
+
|
|
2949
|
+
<!-- Future home of the conversation observability view (deliverable 4) -->
|
|
2950
|
+
<div style="border:1px dashed var(--border);border-radius:8px;padding:16px;font-size:12px;color:var(--text-dim);line-height:1.5">
|
|
2951
|
+
The conversation observability view — threads list, color-coded message stream, latency metrics, FTS search — lands here in a follow-up. The settings above ship now so the bridge stays quiet by default once it goes live.
|
|
2952
|
+
</div>
|
|
2953
|
+
</div>
|
|
2954
|
+
|
|
2849
2955
|
<!-- Health Tab (was Systems) -->
|
|
2850
2956
|
<div class="systems-container" id="systemsTab" style="display:none">
|
|
2851
2957
|
<div class="systems-main">
|
|
@@ -3892,6 +3998,18 @@
|
|
|
3892
3998
|
display: ['flex'],
|
|
3893
3999
|
onActivate: () => { if (typeof loadCommitments === 'function') loadCommitments(); },
|
|
3894
4000
|
},
|
|
4001
|
+
{
|
|
4002
|
+
id: 'tokens',
|
|
4003
|
+
panels: ['tokensPanel'],
|
|
4004
|
+
display: ['flex'],
|
|
4005
|
+
onActivate: () => { if (typeof loadTokens === 'function') loadTokens(); },
|
|
4006
|
+
},
|
|
4007
|
+
{
|
|
4008
|
+
id: 'threadline',
|
|
4009
|
+
panels: ['threadlineTab'],
|
|
4010
|
+
display: ['flex'],
|
|
4011
|
+
onActivate: () => { if (typeof loadThreadlineBridgeConfig === 'function') loadThreadlineBridgeConfig(); },
|
|
4012
|
+
},
|
|
3895
4013
|
{
|
|
3896
4014
|
id: 'secrets',
|
|
3897
4015
|
panels: ['secretsPanel'],
|
|
@@ -3997,6 +4115,194 @@
|
|
|
3997
4115
|
return resp.json();
|
|
3998
4116
|
}
|
|
3999
4117
|
|
|
4118
|
+
// ── Tokens Tab ──────────────────────────────────────────────────
|
|
4119
|
+
function fmtTokens(n) {
|
|
4120
|
+
if (n == null) return '0';
|
|
4121
|
+
if (n >= 1e9) return (n / 1e9).toFixed(2) + 'B';
|
|
4122
|
+
if (n >= 1e6) return (n / 1e6).toFixed(2) + 'M';
|
|
4123
|
+
if (n >= 1e3) return (n / 1e3).toFixed(1) + 'k';
|
|
4124
|
+
return String(n);
|
|
4125
|
+
}
|
|
4126
|
+
function fmtRelTime(ts) {
|
|
4127
|
+
if (!ts) return '—';
|
|
4128
|
+
const diff = Date.now() - ts;
|
|
4129
|
+
const min = Math.floor(diff / 60000);
|
|
4130
|
+
if (min < 1) return 'just now';
|
|
4131
|
+
if (min < 60) return min + 'm ago';
|
|
4132
|
+
const hr = Math.floor(min / 60);
|
|
4133
|
+
if (hr < 24) return hr + 'h ago';
|
|
4134
|
+
return Math.floor(hr / 24) + 'd ago';
|
|
4135
|
+
}
|
|
4136
|
+
function escapeHtml(s) {
|
|
4137
|
+
return String(s ?? '').replace(/[&<>"']/g, c => ({ '&':'&','<':'<','>':'>','"':'"',"'":''' }[c]));
|
|
4138
|
+
}
|
|
4139
|
+
async function loadTokens() {
|
|
4140
|
+
const summaryEl = document.getElementById('tokensSummaryBody');
|
|
4141
|
+
const sessionsEl = document.getElementById('tokensSessionsBody');
|
|
4142
|
+
const orphansEl = document.getElementById('tokensOrphansBody');
|
|
4143
|
+
try {
|
|
4144
|
+
const [summaryResp, sessionsResp, orphansResp] = await Promise.all([
|
|
4145
|
+
apiFetch('/tokens/summary'),
|
|
4146
|
+
apiFetch('/tokens/sessions?limit=10'),
|
|
4147
|
+
apiFetch('/tokens/orphans?idleMs=' + (30 * 60 * 1000)),
|
|
4148
|
+
]);
|
|
4149
|
+
const s = summaryResp.summary || {};
|
|
4150
|
+
summaryEl.innerHTML = `
|
|
4151
|
+
<div><div style="color:var(--text-dim)">Total tokens</div><div style="font-size:18px;font-weight:600">${fmtTokens(s.totalTokens)}</div></div>
|
|
4152
|
+
<div><div style="color:var(--text-dim)">Input</div><div>${fmtTokens(s.totalInput)}</div></div>
|
|
4153
|
+
<div><div style="color:var(--text-dim)">Output</div><div>${fmtTokens(s.totalOutput)}</div></div>
|
|
4154
|
+
<div><div style="color:var(--text-dim)">Cache read</div><div>${fmtTokens(s.totalCacheRead)}</div></div>
|
|
4155
|
+
<div><div style="color:var(--text-dim)">Cache create</div><div>${fmtTokens(s.totalCacheCreate)}</div></div>
|
|
4156
|
+
<div><div style="color:var(--text-dim)">Events</div><div>${fmtTokens(s.eventCount)}</div></div>
|
|
4157
|
+
<div><div style="color:var(--text-dim)">Sessions</div><div>${fmtTokens(s.sessionsActive)}</div></div>
|
|
4158
|
+
`;
|
|
4159
|
+
|
|
4160
|
+
const sessions = sessionsResp.sessions || [];
|
|
4161
|
+
if (sessions.length === 0) {
|
|
4162
|
+
sessionsEl.innerHTML = '<div style="color:var(--text-dim)">No sessions in window.</div>';
|
|
4163
|
+
} else {
|
|
4164
|
+
sessionsEl.innerHTML = `
|
|
4165
|
+
<table style="width:100%;border-collapse:collapse;font-size:13px">
|
|
4166
|
+
<thead><tr style="text-align:left;color:var(--text-dim)">
|
|
4167
|
+
<th style="padding:6px 8px">Session</th>
|
|
4168
|
+
<th style="padding:6px 8px">Project</th>
|
|
4169
|
+
<th style="padding:6px 8px;text-align:right">Tokens</th>
|
|
4170
|
+
<th style="padding:6px 8px;text-align:right">Events</th>
|
|
4171
|
+
<th style="padding:6px 8px">Last activity</th>
|
|
4172
|
+
</tr></thead>
|
|
4173
|
+
<tbody>
|
|
4174
|
+
${sessions.map(r => `
|
|
4175
|
+
<tr style="border-top:1px solid var(--border)">
|
|
4176
|
+
<td style="padding:6px 8px;font-family:monospace">${escapeHtml((r.sessionId || '').slice(0, 8))}</td>
|
|
4177
|
+
<td style="padding:6px 8px">${escapeHtml(r.projectPath || '—')}</td>
|
|
4178
|
+
<td style="padding:6px 8px;text-align:right">${fmtTokens(r.totalTokens)}</td>
|
|
4179
|
+
<td style="padding:6px 8px;text-align:right">${fmtTokens(r.eventCount)}</td>
|
|
4180
|
+
<td style="padding:6px 8px">${fmtRelTime(r.lastTs)}</td>
|
|
4181
|
+
</tr>
|
|
4182
|
+
`).join('')}
|
|
4183
|
+
</tbody>
|
|
4184
|
+
</table>
|
|
4185
|
+
`;
|
|
4186
|
+
}
|
|
4187
|
+
|
|
4188
|
+
const orphans = orphansResp.orphans || [];
|
|
4189
|
+
if (orphans.length === 0) {
|
|
4190
|
+
orphansEl.innerHTML = '<div style="color:var(--text-dim)">No idle sessions.</div>';
|
|
4191
|
+
} else {
|
|
4192
|
+
orphansEl.innerHTML = orphans.map(o => `
|
|
4193
|
+
<div style="padding:6px 0;border-top:1px solid var(--border);display:flex;justify-content:space-between;font-family:monospace;font-size:12px">
|
|
4194
|
+
<span>${escapeHtml((o.sessionId || '').slice(0, 12))}</span>
|
|
4195
|
+
<span style="color:var(--text-dim)">${escapeHtml(o.projectPath || '—')}</span>
|
|
4196
|
+
<span>${fmtRelTime(o.lastTs)}</span>
|
|
4197
|
+
</div>
|
|
4198
|
+
`).join('');
|
|
4199
|
+
}
|
|
4200
|
+
} catch (err) {
|
|
4201
|
+
const msg = `<div style="color:var(--red)">Error: ${escapeHtml(err.message || String(err))}</div>`;
|
|
4202
|
+
summaryEl.innerHTML = msg;
|
|
4203
|
+
sessionsEl.innerHTML = '';
|
|
4204
|
+
orphansEl.innerHTML = '';
|
|
4205
|
+
}
|
|
4206
|
+
}
|
|
4207
|
+
|
|
4208
|
+
// ── Threadline → Telegram bridge settings ──────────────────
|
|
4209
|
+
let tlBridgeSettings = null;
|
|
4210
|
+
let tlBridgeWiring = false;
|
|
4211
|
+
|
|
4212
|
+
async function loadThreadlineBridgeConfig() {
|
|
4213
|
+
const statusEl = document.getElementById('tlBridgeStatus');
|
|
4214
|
+
const errEl = document.getElementById('tlBridgeError');
|
|
4215
|
+
if (errEl) { errEl.style.display = 'none'; errEl.textContent = ''; }
|
|
4216
|
+
try {
|
|
4217
|
+
const resp = await apiFetch('/threadline/telegram-bridge/config');
|
|
4218
|
+
tlBridgeSettings = resp;
|
|
4219
|
+
renderThreadlineBridgeConfig();
|
|
4220
|
+
if (statusEl) statusEl.textContent = `Bridge is ${resp.enabled ? 'ENABLED' : 'OFF'} · auto-create ${resp.autoCreateTopics ? 'on' : 'off'} · mirror existing ${resp.mirrorExisting ? 'on' : 'off'}.`;
|
|
4221
|
+
} catch (err) {
|
|
4222
|
+
if (statusEl) statusEl.textContent = '';
|
|
4223
|
+
if (errEl) { errEl.style.display = 'block'; errEl.textContent = `Could not load bridge config: ${err.message || String(err)}`; }
|
|
4224
|
+
}
|
|
4225
|
+
}
|
|
4226
|
+
|
|
4227
|
+
function renderThreadlineBridgeConfig() {
|
|
4228
|
+
if (!tlBridgeSettings) return;
|
|
4229
|
+
tlBridgeWiring = true;
|
|
4230
|
+
try {
|
|
4231
|
+
document.getElementById('tlBridgeEnabled').checked = !!tlBridgeSettings.enabled;
|
|
4232
|
+
document.getElementById('tlBridgeAutoCreate').checked = !!tlBridgeSettings.autoCreateTopics;
|
|
4233
|
+
document.getElementById('tlBridgeMirrorExisting').checked = !!tlBridgeSettings.mirrorExisting;
|
|
4234
|
+
renderTlBridgeListEntries('allowList', 'tlBridgeAllowList', tlBridgeSettings.allowList || []);
|
|
4235
|
+
renderTlBridgeListEntries('denyList', 'tlBridgeDenyList', tlBridgeSettings.denyList || []);
|
|
4236
|
+
} finally {
|
|
4237
|
+
tlBridgeWiring = false;
|
|
4238
|
+
}
|
|
4239
|
+
}
|
|
4240
|
+
|
|
4241
|
+
function renderTlBridgeListEntries(field, listElId, entries) {
|
|
4242
|
+
const ul = document.getElementById(listElId);
|
|
4243
|
+
if (!ul) return;
|
|
4244
|
+
if (entries.length === 0) {
|
|
4245
|
+
ul.innerHTML = '<li style="color:var(--text-dim);font-size:12px;font-style:italic">(empty)</li>';
|
|
4246
|
+
return;
|
|
4247
|
+
}
|
|
4248
|
+
ul.innerHTML = entries.map(e => `
|
|
4249
|
+
<li style="display:flex;justify-content:space-between;align-items:center;padding:4px 8px;border:1px solid var(--border);border-radius:4px;font-family:monospace;font-size:12px">
|
|
4250
|
+
<span>${escapeHtml(e)}</span>
|
|
4251
|
+
<button onclick="tlBridgeRemoveListEntry('${field}', ${JSON.stringify(e).replace(/'/g, "\\'")})" style="padding:2px 8px;font-size:11px">remove</button>
|
|
4252
|
+
</li>
|
|
4253
|
+
`).join('');
|
|
4254
|
+
}
|
|
4255
|
+
|
|
4256
|
+
async function tlBridgePatchConfig(patch) {
|
|
4257
|
+
const errEl = document.getElementById('tlBridgeError');
|
|
4258
|
+
if (errEl) { errEl.style.display = 'none'; errEl.textContent = ''; }
|
|
4259
|
+
try {
|
|
4260
|
+
const resp = await apiFetch('/threadline/telegram-bridge/config', {
|
|
4261
|
+
method: 'PATCH',
|
|
4262
|
+
headers: { 'Content-Type': 'application/json' },
|
|
4263
|
+
body: JSON.stringify(patch),
|
|
4264
|
+
});
|
|
4265
|
+
tlBridgeSettings = resp;
|
|
4266
|
+
renderThreadlineBridgeConfig();
|
|
4267
|
+
const statusEl = document.getElementById('tlBridgeStatus');
|
|
4268
|
+
if (statusEl) statusEl.textContent = `Saved · bridge is ${resp.enabled ? 'ENABLED' : 'OFF'}.`;
|
|
4269
|
+
} catch (err) {
|
|
4270
|
+
if (errEl) { errEl.style.display = 'block'; errEl.textContent = `Update failed: ${err.message || String(err)}`; }
|
|
4271
|
+
// Reload to roll back the optimistic UI
|
|
4272
|
+
loadThreadlineBridgeConfig();
|
|
4273
|
+
}
|
|
4274
|
+
}
|
|
4275
|
+
|
|
4276
|
+
function tlBridgeAddListEntry(field, inputId) {
|
|
4277
|
+
const input = document.getElementById(inputId);
|
|
4278
|
+
const val = (input?.value || '').trim();
|
|
4279
|
+
if (!val) return;
|
|
4280
|
+
const current = (tlBridgeSettings?.[field] || []).slice();
|
|
4281
|
+
if (!current.includes(val)) current.push(val);
|
|
4282
|
+
tlBridgePatchConfig({ [field]: current });
|
|
4283
|
+
if (input) input.value = '';
|
|
4284
|
+
}
|
|
4285
|
+
|
|
4286
|
+
function tlBridgeRemoveListEntry(field, entry) {
|
|
4287
|
+
const current = (tlBridgeSettings?.[field] || []).filter(x => x !== entry);
|
|
4288
|
+
tlBridgePatchConfig({ [field]: current });
|
|
4289
|
+
}
|
|
4290
|
+
|
|
4291
|
+
// Wire up toggle change-handlers once the panel exists
|
|
4292
|
+
document.addEventListener('DOMContentLoaded', () => {
|
|
4293
|
+
const wire = (id, field) => {
|
|
4294
|
+
const el = document.getElementById(id);
|
|
4295
|
+
if (!el) return;
|
|
4296
|
+
el.addEventListener('change', () => {
|
|
4297
|
+
if (tlBridgeWiring) return;
|
|
4298
|
+
tlBridgePatchConfig({ [field]: el.checked });
|
|
4299
|
+
});
|
|
4300
|
+
};
|
|
4301
|
+
wire('tlBridgeEnabled', 'enabled');
|
|
4302
|
+
wire('tlBridgeAutoCreate', 'autoCreateTopics');
|
|
4303
|
+
wire('tlBridgeMirrorExisting', 'mirrorExisting');
|
|
4304
|
+
});
|
|
4305
|
+
|
|
4000
4306
|
async function loadFileTree() {
|
|
4001
4307
|
fileTreeLoaded = true;
|
|
4002
4308
|
const list = document.getElementById('fileTreeList');
|
package/dist/cli.js
CHANGED
|
@@ -21,6 +21,7 @@ import fs from 'node:fs';
|
|
|
21
21
|
import path from 'node:path';
|
|
22
22
|
import { Command } from 'commander';
|
|
23
23
|
import { initProject } from './commands/init.js';
|
|
24
|
+
import { SafeFsExecutor } from './core/SafeFsExecutor.js';
|
|
24
25
|
// setup.ts is imported dynamically — it depends on @inquirer/prompts which requires Node 20.12+
|
|
25
26
|
import { startServer, stopServer, restartServer } from './commands/server.js';
|
|
26
27
|
import { showStatus } from './commands/status.js';
|
|
@@ -83,7 +84,7 @@ async function addTelegram(opts) {
|
|
|
83
84
|
}
|
|
84
85
|
catch (err) {
|
|
85
86
|
try {
|
|
86
|
-
|
|
87
|
+
SafeFsExecutor.safeUnlinkSync(tmpPath, { operation: 'src/cli.ts:93' });
|
|
87
88
|
}
|
|
88
89
|
catch { /* ignore */ }
|
|
89
90
|
throw err;
|
|
@@ -135,7 +136,7 @@ async function addSentry(opts) {
|
|
|
135
136
|
}
|
|
136
137
|
catch (err) {
|
|
137
138
|
try {
|
|
138
|
-
|
|
139
|
+
SafeFsExecutor.safeUnlinkSync(tmpPath, { operation: 'src/cli.ts:148' });
|
|
139
140
|
}
|
|
140
141
|
catch { /* ignore */ }
|
|
141
142
|
throw err;
|
|
@@ -195,7 +196,7 @@ async function addEmail(opts) {
|
|
|
195
196
|
}
|
|
196
197
|
catch (err) {
|
|
197
198
|
try {
|
|
198
|
-
|
|
199
|
+
SafeFsExecutor.safeUnlinkSync(tmpPath, { operation: 'src/cli.ts:211' });
|
|
199
200
|
}
|
|
200
201
|
catch { /* ignore */ }
|
|
201
202
|
throw err;
|
|
@@ -238,7 +239,7 @@ async function addQuota(opts) {
|
|
|
238
239
|
}
|
|
239
240
|
catch (err) {
|
|
240
241
|
try {
|
|
241
|
-
|
|
242
|
+
SafeFsExecutor.safeUnlinkSync(tmpPath, { operation: 'src/cli.ts:257' });
|
|
242
243
|
}
|
|
243
244
|
catch { /* ignore */ }
|
|
244
245
|
throw err;
|