instar 0.28.76 → 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 -8
- package/dist/cli.js.map +1 -1
- package/dist/commands/discovery.d.ts.map +1 -1
- package/dist/commands/discovery.js +2 -2
- package/dist/commands/discovery.js.map +1 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +22 -4
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/job.d.ts.map +1 -1
- package/dist/commands/job.js +2 -2
- package/dist/commands/job.js.map +1 -1
- package/dist/commands/ledgerCleanup.d.ts.map +1 -1
- package/dist/commands/ledgerCleanup.js +2 -2
- package/dist/commands/ledgerCleanup.js.map +1 -1
- package/dist/commands/listener.d.ts.map +1 -1
- package/dist/commands/listener.js +7 -12
- package/dist/commands/listener.js.map +1 -1
- package/dist/commands/nuke.d.ts.map +1 -1
- package/dist/commands/nuke.js +11 -21
- package/dist/commands/nuke.js.map +1 -1
- package/dist/commands/server.d.ts.map +1 -1
- package/dist/commands/server.js +35 -5
- package/dist/commands/server.js.map +1 -1
- package/dist/commands/setup.d.ts.map +1 -1
- package/dist/commands/setup.js +11 -15
- 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 -8
- package/dist/commands/slack-cli.js.map +1 -1
- package/dist/commands/whatsapp.d.ts.map +1 -1
- package/dist/commands/whatsapp.js +2 -2
- package/dist/commands/whatsapp.js.map +1 -1
- package/dist/commands/worktree.d.ts.map +1 -1
- package/dist/commands/worktree.js +2 -2
- package/dist/commands/worktree.js.map +1 -1
- package/dist/core/AgentConnector.d.ts.map +1 -1
- package/dist/core/AgentConnector.js +9 -10
- package/dist/core/AgentConnector.js.map +1 -1
- package/dist/core/AgentRegistry.d.ts.map +1 -1
- package/dist/core/AgentRegistry.js +3 -4
- package/dist/core/AgentRegistry.js.map +1 -1
- package/dist/core/AutoDispatcher.d.ts.map +1 -1
- package/dist/core/AutoDispatcher.js +2 -2
- package/dist/core/AutoDispatcher.js.map +1 -1
- package/dist/core/AutoUpdater.d.ts.map +1 -1
- package/dist/core/AutoUpdater.js +2 -2
- package/dist/core/AutoUpdater.js.map +1 -1
- package/dist/core/AutonomousEvolution.d.ts.map +1 -1
- package/dist/core/AutonomousEvolution.js +2 -2
- package/dist/core/AutonomousEvolution.js.map +1 -1
- package/dist/core/BackupManager.d.ts.map +1 -1
- package/dist/core/BackupManager.js +2 -2
- package/dist/core/BackupManager.js.map +1 -1
- package/dist/core/BranchManager.d.ts.map +1 -1
- package/dist/core/BranchManager.js +3 -3
- package/dist/core/BranchManager.js.map +1 -1
- package/dist/core/CaffeinateManager.d.ts.map +1 -1
- package/dist/core/CaffeinateManager.js +2 -2
- package/dist/core/CaffeinateManager.js.map +1 -1
- package/dist/core/DeferredDispatchTracker.d.ts.map +1 -1
- package/dist/core/DeferredDispatchTracker.js +2 -2
- package/dist/core/DeferredDispatchTracker.js.map +1 -1
- package/dist/core/DispatchManager.d.ts.map +1 -1
- package/dist/core/DispatchManager.js +3 -4
- package/dist/core/DispatchManager.js.map +1 -1
- package/dist/core/EvolutionManager.d.ts.map +1 -1
- package/dist/core/EvolutionManager.js +2 -2
- package/dist/core/EvolutionManager.js.map +1 -1
- package/dist/core/ExecutionJournal.d.ts.map +1 -1
- package/dist/core/ExecutionJournal.js +2 -2
- package/dist/core/ExecutionJournal.js.map +1 -1
- package/dist/core/FeedbackManager.d.ts.map +1 -1
- package/dist/core/FeedbackManager.js +2 -2
- package/dist/core/FeedbackManager.js.map +1 -1
- package/dist/core/FileClassifier.d.ts.map +1 -1
- package/dist/core/FileClassifier.js +8 -17
- package/dist/core/FileClassifier.js.map +1 -1
- package/dist/core/ForegroundRestartWatcher.d.ts.map +1 -1
- package/dist/core/ForegroundRestartWatcher.js +3 -4
- package/dist/core/ForegroundRestartWatcher.js.map +1 -1
- package/dist/core/GitStateManager.d.ts.map +1 -1
- package/dist/core/GitStateManager.js +3 -12
- package/dist/core/GitStateManager.js.map +1 -1
- package/dist/core/GitSync.d.ts.map +1 -1
- package/dist/core/GitSync.js +6 -6
- package/dist/core/GitSync.js.map +1 -1
- package/dist/core/GlobalInstallCleanup.d.ts.map +1 -1
- package/dist/core/GlobalInstallCleanup.js +3 -4
- package/dist/core/GlobalInstallCleanup.js.map +1 -1
- package/dist/core/GlobalSecretStore.d.ts.map +1 -1
- package/dist/core/GlobalSecretStore.js +3 -4
- package/dist/core/GlobalSecretStore.js.map +1 -1
- package/dist/core/HandoffManager.d.ts.map +1 -1
- package/dist/core/HandoffManager.js +5 -5
- 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 -2
- package/dist/core/LedgerSessionRegistry.js.map +1 -1
- package/dist/core/MachineIdentity.d.ts.map +1 -1
- package/dist/core/MachineIdentity.js +2 -2
- 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 -6
- 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 -46
- package/dist/core/PostUpdateMigrator.js.map +1 -1
- package/dist/core/ProjectMapper.d.ts.map +1 -1
- package/dist/core/ProjectMapper.js +5 -11
- package/dist/core/ProjectMapper.js.map +1 -1
- package/dist/core/RelationshipManager.d.ts.map +1 -1
- package/dist/core/RelationshipManager.js +4 -5
- package/dist/core/RelationshipManager.js.map +1 -1
- package/dist/core/SafeGitExecutor.d.ts +11 -5
- package/dist/core/SafeGitExecutor.d.ts.map +1 -1
- package/dist/core/SafeGitExecutor.js +87 -1
- package/dist/core/SafeGitExecutor.js.map +1 -1
- package/dist/core/ScopeVerifier.d.ts.map +1 -1
- package/dist/core/ScopeVerifier.js +3 -6
- package/dist/core/ScopeVerifier.js.map +1 -1
- package/dist/core/SecretStore.d.ts.map +1 -1
- package/dist/core/SecretStore.js +2 -2
- package/dist/core/SecretStore.js.map +1 -1
- package/dist/core/SharedStateLedger.d.ts.map +1 -1
- package/dist/core/SharedStateLedger.js +2 -2
- package/dist/core/SharedStateLedger.js.map +1 -1
- package/dist/core/SoulManager.d.ts.map +1 -1
- package/dist/core/SoulManager.js +3 -4
- package/dist/core/SoulManager.js.map +1 -1
- package/dist/core/StateManager.d.ts.map +1 -1
- package/dist/core/StateManager.js +4 -6
- package/dist/core/StateManager.js.map +1 -1
- package/dist/core/SyncOrchestrator.d.ts.map +1 -1
- package/dist/core/SyncOrchestrator.js +6 -7
- package/dist/core/SyncOrchestrator.js.map +1 -1
- package/dist/core/UpdateChecker.d.ts.map +1 -1
- package/dist/core/UpdateChecker.js +3 -4
- package/dist/core/UpdateChecker.js.map +1 -1
- package/dist/core/UpgradeGuideProcessor.d.ts.map +1 -1
- package/dist/core/UpgradeGuideProcessor.js +3 -4
- package/dist/core/UpgradeGuideProcessor.js.map +1 -1
- package/dist/core/WorktreeManager.d.ts.map +1 -1
- package/dist/core/WorktreeManager.js +9 -14
- package/dist/core/WorktreeManager.js.map +1 -1
- package/dist/knowledge/KnowledgeManager.d.ts.map +1 -1
- package/dist/knowledge/KnowledgeManager.js +2 -2
- 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 -73
- package/dist/lifeline/ServerSupervisor.js.map +1 -1
- package/dist/lifeline/TelegramLifeline.d.ts.map +1 -1
- package/dist/lifeline/TelegramLifeline.js +10 -4
- 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 -2
- package/dist/lifeline/droppedMessages.js.map +1 -1
- package/dist/memory/EpisodicMemory.d.ts.map +1 -1
- package/dist/memory/EpisodicMemory.js +2 -2
- package/dist/memory/EpisodicMemory.js.map +1 -1
- package/dist/memory/TopicMemory.d.ts.map +1 -1
- package/dist/memory/TopicMemory.js +5 -8
- package/dist/memory/TopicMemory.js.map +1 -1
- package/dist/messaging/AgentTokenManager.d.ts.map +1 -1
- package/dist/messaging/AgentTokenManager.js +2 -2
- package/dist/messaging/AgentTokenManager.js.map +1 -1
- package/dist/messaging/DropPickup.d.ts.map +1 -1
- package/dist/messaging/DropPickup.js +2 -2
- package/dist/messaging/DropPickup.js.map +1 -1
- package/dist/messaging/GitSyncTransport.d.ts.map +1 -1
- package/dist/messaging/GitSyncTransport.js +4 -6
- package/dist/messaging/GitSyncTransport.js.map +1 -1
- package/dist/messaging/MessageStore.d.ts.map +1 -1
- package/dist/messaging/MessageStore.js +3 -4
- package/dist/messaging/MessageStore.js.map +1 -1
- package/dist/messaging/TelegramAdapter.d.ts.map +1 -1
- package/dist/messaging/TelegramAdapter.js +5 -8
- 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 -4
- 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 -4
- 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 -2
- 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 -2
- 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 -2
- 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 -7
- package/dist/moltbridge/ProfileCompiler.js.map +1 -1
- package/dist/monitoring/CommitmentTracker.d.ts.map +1 -1
- package/dist/monitoring/CommitmentTracker.js +2 -2
- package/dist/monitoring/CommitmentTracker.js.map +1 -1
- package/dist/monitoring/CredentialProvider.d.ts.map +1 -1
- package/dist/monitoring/CredentialProvider.js +2 -2
- 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 -2
- package/dist/monitoring/HealthChecker.js.map +1 -1
- package/dist/monitoring/HookEventReceiver.d.ts.map +1 -1
- package/dist/monitoring/HookEventReceiver.js +2 -2
- package/dist/monitoring/HookEventReceiver.js.map +1 -1
- package/dist/monitoring/InstructionsVerifier.d.ts.map +1 -1
- package/dist/monitoring/InstructionsVerifier.js +2 -2
- package/dist/monitoring/InstructionsVerifier.js.map +1 -1
- package/dist/monitoring/PresenceProxy.d.ts.map +1 -1
- package/dist/monitoring/PresenceProxy.js +5 -8
- package/dist/monitoring/PresenceProxy.js.map +1 -1
- package/dist/monitoring/QuotaTracker.d.ts.map +1 -1
- package/dist/monitoring/QuotaTracker.js +2 -2
- package/dist/monitoring/QuotaTracker.js.map +1 -1
- package/dist/monitoring/SessionMigrator.d.ts.map +1 -1
- package/dist/monitoring/SessionMigrator.js +2 -2
- package/dist/monitoring/SessionMigrator.js.map +1 -1
- package/dist/monitoring/SessionRecovery.d.ts.map +1 -1
- package/dist/monitoring/SessionRecovery.js +2 -2
- package/dist/monitoring/SessionRecovery.js.map +1 -1
- package/dist/monitoring/TelemetryAuth.d.ts.map +1 -1
- package/dist/monitoring/TelemetryAuth.js +3 -4
- 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 -4
- package/dist/monitoring/TriageOrchestrator.js.map +1 -1
- package/dist/monitoring/WorktreeReaper.d.ts.map +1 -1
- package/dist/monitoring/WorktreeReaper.js +5 -7
- 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 -4
- 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 -8
- package/dist/paste/PasteManager.js.map +1 -1
- package/dist/publishing/PrivateViewer.d.ts.map +1 -1
- package/dist/publishing/PrivateViewer.js +2 -2
- package/dist/publishing/PrivateViewer.js.map +1 -1
- package/dist/scheduler/JobScheduler.d.ts.map +1 -1
- package/dist/scheduler/JobScheduler.js +2 -2
- 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 +528 -11
- package/dist/server/routes.js.map +1 -1
- package/dist/threadline/AgentDiscovery.d.ts.map +1 -1
- package/dist/threadline/AgentDiscovery.js +2 -2
- package/dist/threadline/AgentDiscovery.js.map +1 -1
- package/dist/threadline/AgentTrustManager.d.ts.map +1 -1
- package/dist/threadline/AgentTrustManager.js +2 -2
- package/dist/threadline/AgentTrustManager.js.map +1 -1
- package/dist/threadline/CircuitBreaker.d.ts.map +1 -1
- package/dist/threadline/CircuitBreaker.js +2 -2
- package/dist/threadline/CircuitBreaker.js.map +1 -1
- package/dist/threadline/ComputeMeter.d.ts.map +1 -1
- package/dist/threadline/ComputeMeter.js +2 -2
- package/dist/threadline/ComputeMeter.js.map +1 -1
- package/dist/threadline/ContextThreadMap.d.ts.map +1 -1
- package/dist/threadline/ContextThreadMap.js +2 -2
- 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 -2
- 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 -2
- package/dist/threadline/MCPAuth.js.map +1 -1
- package/dist/threadline/PipeSessionSpawner.d.ts.map +1 -1
- package/dist/threadline/PipeSessionSpawner.js +3 -4
- package/dist/threadline/PipeSessionSpawner.js.map +1 -1
- package/dist/threadline/RateLimiter.d.ts.map +1 -1
- package/dist/threadline/RateLimiter.js +2 -2
- 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 -2
- 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 -2
- package/dist/threadline/ThreadlineBootstrap.js.map +1 -1
- package/dist/threadline/WakeSocketServer.d.ts.map +1 -1
- package/dist/threadline/WakeSocketServer.js +3 -4
- 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 -4
- package/dist/threadline/listener-daemon.js.map +1 -1
- package/dist/users/UserManager.d.ts.map +1 -1
- package/dist/users/UserManager.js +2 -2
- package/dist/users/UserManager.js.map +1 -1
- package/dist/users/UserOnboarding.d.ts.map +1 -1
- package/dist/users/UserOnboarding.js +2 -2
- 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 -2
- package/dist/utils/jsonl-rotation.js.map +1 -1
- package/package.json +1 -1
- package/scripts/analyze-release.js +7 -12
- package/scripts/check-contract-evidence.js +27 -10
- package/scripts/fix-better-sqlite3.cjs +0 -2
- package/scripts/instar-dev-precommit.js +0 -2
- package/scripts/lint-no-direct-destructive.js +24 -4
- package/scripts/lint-template-sha-history.ts +183 -0
- package/scripts/migrate-incident-2026-04-17.mjs +2 -2
- package/scripts/run-migration.js +500 -0
- package/scripts/test-bootstrap-relay.mjs +2 -2
- package/scripts/verify-deployed-templates.ts +87 -0
- package/src/data/builtin-manifest.json +140 -132
- package/src/templates/scripts/git-sync-gate.sh +0 -4
- package/src/templates/scripts/telegram-reply.sh +318 -13
- package/upgrades/0.28.77.md +133 -0
- package/upgrades/side-effects/agent-health-alert-authority-routing.md +121 -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/upgrades/side-effects/{telegram-lifeline-version-missing-info.md → 0.28.76.md} +0 -0
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';
|
|
@@ -82,9 +83,8 @@ async function addTelegram(opts) {
|
|
|
82
83
|
fs.renameSync(tmpPath, configPath);
|
|
83
84
|
}
|
|
84
85
|
catch (err) {
|
|
85
|
-
// safe-git-allow: incremental-migration
|
|
86
86
|
try {
|
|
87
|
-
|
|
87
|
+
SafeFsExecutor.safeUnlinkSync(tmpPath, { operation: 'src/cli.ts:93' });
|
|
88
88
|
}
|
|
89
89
|
catch { /* ignore */ }
|
|
90
90
|
throw err;
|
|
@@ -135,9 +135,8 @@ async function addSentry(opts) {
|
|
|
135
135
|
fs.renameSync(tmpPath, configPath);
|
|
136
136
|
}
|
|
137
137
|
catch (err) {
|
|
138
|
-
// safe-git-allow: incremental-migration
|
|
139
138
|
try {
|
|
140
|
-
|
|
139
|
+
SafeFsExecutor.safeUnlinkSync(tmpPath, { operation: 'src/cli.ts:148' });
|
|
141
140
|
}
|
|
142
141
|
catch { /* ignore */ }
|
|
143
142
|
throw err;
|
|
@@ -196,9 +195,8 @@ async function addEmail(opts) {
|
|
|
196
195
|
fs.renameSync(tmpPath, configPath);
|
|
197
196
|
}
|
|
198
197
|
catch (err) {
|
|
199
|
-
// safe-git-allow: incremental-migration
|
|
200
198
|
try {
|
|
201
|
-
|
|
199
|
+
SafeFsExecutor.safeUnlinkSync(tmpPath, { operation: 'src/cli.ts:211' });
|
|
202
200
|
}
|
|
203
201
|
catch { /* ignore */ }
|
|
204
202
|
throw err;
|
|
@@ -240,9 +238,8 @@ async function addQuota(opts) {
|
|
|
240
238
|
fs.renameSync(tmpPath, configPath);
|
|
241
239
|
}
|
|
242
240
|
catch (err) {
|
|
243
|
-
// safe-git-allow: incremental-migration
|
|
244
241
|
try {
|
|
245
|
-
|
|
242
|
+
SafeFsExecutor.safeUnlinkSync(tmpPath, { operation: 'src/cli.ts:257' });
|
|
246
243
|
}
|
|
247
244
|
catch { /* ignore */ }
|
|
248
245
|
throw err;
|