@wrongstack/webui 0.313.1 → 0.316.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/dist/assets/AgentRosterView-CESYPVXA.js +9 -0
- package/dist/assets/AnalyticsDashboard-zDBIqTxO.js +1 -0
- package/dist/assets/AudienceMemoryPanel-BnNJ0EhQ.js +3 -0
- package/dist/assets/ChangesView-CGwCocSR.js +1 -0
- package/dist/assets/ChimeraReviewsView-CFxZwJBI.js +1 -0
- package/dist/assets/ChronicleDashboard-DKiMK5nl.js +1 -0
- package/dist/assets/CodeEditor-CZcMPNTH.js +2 -0
- package/dist/assets/CodeMap-zPUlmh5G.js +1 -0
- package/dist/assets/ConfirmModal-CUGk-0lT.js +1 -0
- package/dist/assets/{CronJobsPanel-BzH_InFe.js → CronJobsPanel-C_wutCVP.js} +1 -1
- package/dist/assets/{DeadCodeScanPanel-Dj-5SAEE.js → DeadCodeScanPanel-DCCjg17Q.js} +2 -2
- package/dist/assets/{DebugDashboard-C-lpnxsJ.js → DebugDashboard-D-ogYAbO.js} +1 -1
- package/dist/assets/DesignGalleryView-CtlHZWOn.js +1 -0
- package/dist/assets/GoalView-Czksj2nD.js +1 -0
- package/dist/assets/KanbanView-C5_GD0qk.js +3 -0
- package/dist/assets/MailboxDetailView-2rWp3cTv.js +1 -0
- package/dist/assets/MemoryDrawer-D9Chtt6v.js +1 -0
- package/dist/assets/MemoryManager-Bj41s3KW.js +1 -0
- package/dist/assets/ModelPicker-vwrqLOL4.js +1 -0
- package/dist/assets/OfficeMapPanel-BfuePIGH.js +4 -0
- package/dist/assets/ProcessMonitor-CHPTCtyu.js +1 -0
- package/dist/assets/PromptJournalView-tOTjKpi8.js +1 -0
- package/dist/assets/QueuePanel-BIwoG-tG.js +1 -0
- package/dist/assets/RefreshDebugView-DesPEAAq.js +1 -0
- package/dist/assets/RequirementIntakeView-BonXC1a5.js +1 -0
- package/dist/assets/SageTabs-82lpgRh-.js +2 -0
- package/dist/assets/SddFlowGraph-CMedulJi.js +1 -0
- package/dist/assets/SddHub-D3Gm4Io2.js +2 -0
- package/dist/assets/SessionInspectView-BUs2B4mF.js +1 -0
- package/dist/assets/SessionList-DxQgJqgl.js +1 -0
- package/dist/assets/SessionsDashboard-JtwQf-N5.js +1 -0
- package/dist/assets/SetupScreen-XFBFjPbd.js +1 -0
- package/dist/assets/SkillDetailView-C_P_-783.js +3 -0
- package/dist/assets/{SpecsView-B9Aj1qpe.js → SpecsView-D6GqoZ2L.js} +1 -1
- package/dist/assets/TechStackView-BE4tdEYZ.js +2 -0
- package/dist/assets/TerminalPanel-BcizpYrZ.js +1 -0
- package/dist/assets/activity-B2_Vr2oD.js +10 -0
- package/dist/assets/activity-BF1idM4Y.js +10 -0
- package/dist/assets/activity-C-kOJZXC.js +10 -0
- package/dist/assets/activity-DPpMW8BU.js +10 -0
- package/dist/assets/activity-DYMBKGt0.js +10 -0
- package/dist/assets/activity-IxgYWPDt.js +10 -0
- package/dist/assets/activity-q85HXQNv.js +10 -0
- package/dist/assets/{button-Dhmop_yM.js → button-C_EYpeP-.js} +1 -1
- package/dist/assets/{chat-CR2B97dj.js → chat-B5a3cvps.js} +1 -1
- package/dist/assets/{chat-DResBrkV.js → chat-B60h8Cji.js} +1 -1
- package/dist/assets/{chat-BnkVCZ3Q.js → chat-BNWqeV-N.js} +1 -1
- package/dist/assets/chat-BlllxfpP.js +1 -0
- package/dist/assets/{chat-BfQBSiII.js → chat-BvKkSd09.js} +1 -1
- package/dist/assets/{chat-BPuAsrkF.js → chat-DTI7lNDx.js} +1 -1
- package/dist/assets/{chat-Di8o0wDz.js → chat-DlhXGxxi.js} +1 -1
- package/dist/assets/chat-store-x5w4ss_D.js +1 -0
- package/dist/assets/{codemap-activity-store-BWt_a7Gs.js → codemap-activity-store-ZCXcHlwd.js} +1 -1
- package/dist/assets/codemap-index-store-Cb5mn74P.js +1 -0
- package/dist/assets/{dialog-DPl7DolS.js → dialog-9eW9sG90.js} +1 -1
- package/dist/assets/{empty-state-IT10GzRA.js → empty-state-DJb_tw7Q.js} +1 -1
- package/dist/assets/i18n-DkMSw3tI.js +2 -0
- package/dist/assets/index-BSpLtv9S.css +1 -0
- package/dist/assets/index-CTyM4bm8.js +137 -0
- package/dist/assets/{input-C3rIQ26u.js → input-CsEvo8Oo.js} +1 -1
- package/dist/assets/{mailbox-store-DhAVkVJQ.js → mailbox-store-KHcrg_Fm.js} +1 -1
- package/dist/assets/{roster-ws-Ch6O90eT.js → roster-ws-CXnrEaEu.js} +1 -1
- package/dist/assets/settings-1o1gooaL.js +1 -0
- package/dist/assets/settings-BGvRM3vJ.js +1 -0
- package/dist/assets/{settings-BV1_j8_-.js → settings-BV8EFmpH.js} +1 -1
- package/dist/assets/settings-Ci_RMpCQ.js +1 -0
- package/dist/assets/settings-Cy_xp4Jt.js +1 -0
- package/dist/assets/settings-D-LlBmzO.js +1 -0
- package/dist/assets/settings-nWMBX3xS.js +1 -0
- package/dist/assets/{shared-BUXBOqyO.js → shared-sYlGVRJI.js} +1 -1
- package/dist/assets/stores-5ynEAenb.js +7 -0
- package/dist/assets/toasts-BsmyGP95.js +1 -0
- package/dist/assets/toasts-CgXHu8ZB.js +1 -0
- package/dist/assets/toasts-DZ6HdKgG.js +1 -0
- package/dist/assets/toasts-DizCJjAR.js +1 -0
- package/dist/assets/toasts-NC2MT4uN.js +1 -0
- package/dist/assets/toasts-bPl097de.js +1 -0
- package/dist/assets/toasts-tCVo15mP.js +1 -0
- package/dist/assets/ui-store-9b7zzi3V.js +1 -0
- package/dist/assets/useWebSocket-1kxFH7f8.js +27 -0
- package/dist/assets/utils-DIo8iytt.js +1 -0
- package/dist/assets/{vector-memory-panel-CBA4CK6N.js → vector-memory-panel-Dd3jXXYA.js} +1 -1
- package/dist/assets/{vendor-DZ9_OO6N.js → vendor-UFryhfbN.js} +30 -30
- package/dist/assets/view-navigation-ICwpL9qw.js +1 -0
- package/dist/assets/ws-client-Ccf_VLRQ.js +22 -0
- package/dist/components/AgentOfficeView/model.d.ts +4 -3
- package/dist/components/AgentRosterView.d.ts +8 -1
- package/dist/components/ChatInput/composer-button-bar.d.ts +6 -2
- package/dist/components/ChatInput/image-attachments.d.ts +2 -1
- package/dist/components/ChatInput/next-steps-helpers.d.ts +0 -16
- package/dist/components/ChatInput/refine-panel-host.d.ts +2 -2
- package/dist/components/ChatInput/session-effort-select.d.ts +16 -0
- package/dist/components/ChatInput/slash-commands.d.ts +2 -1
- package/dist/components/ChatInput/slash-routing.d.ts +8 -0
- package/dist/components/ChatInput/use-chat-input-mcp.d.ts +2 -1
- package/dist/components/ChatInput/use-paste-drop.d.ts +2 -1
- package/dist/components/ChatInput/use-refine-timeout.d.ts +2 -1
- package/dist/components/ChatInput/use-speech-recognition.d.ts +9 -0
- package/dist/components/ChatView/AgentTabs.d.ts +1 -1
- package/dist/components/ChatView/BrainDecisionCard.d.ts +9 -0
- package/dist/components/ChatView/ChatHeader.d.ts +3 -3
- package/dist/components/ChatView/ChatRowView.d.ts +3 -1
- package/dist/components/ChatView/ChimeraReportCard.d.ts +22 -0
- package/dist/components/ChatView/CouncilDecisionCard.d.ts +9 -0
- package/dist/components/ChatView/auto-collapse.d.ts +2 -1
- package/dist/components/ChatView/useChatViewState.d.ts +14 -28
- package/dist/components/ChatView/utils.d.ts +2 -1
- package/dist/components/ChimeraReviewsView.d.ts +2 -0
- package/dist/components/CodeMapActivityStreamPanel.d.ts +2 -1
- package/dist/components/CodeMapDirectoryTree.d.ts +2 -1
- package/dist/components/CodeMapLiveOverlay.d.ts +0 -3
- package/dist/components/CodeMapSelectedNodeSummary.d.ts +2 -1
- package/dist/components/CollabPanel.d.ts +2 -7
- package/dist/components/ConfirmModal.d.ts +6 -13
- package/dist/components/CronJobsPanel.d.ts +2 -1
- package/dist/components/CustomRosterPanel.d.ts +0 -1
- package/dist/components/DependencyGraph.d.ts +2 -1
- package/dist/components/FileActivityDrawer.d.ts +2 -2
- package/dist/components/FileExplorer/FileExplorerModals.d.ts +11 -6
- package/dist/components/FileExplorer/TreeRow.d.ts +2 -6
- package/dist/components/FileExplorer/tree-helpers.d.ts +7 -0
- package/dist/components/FleetPanel.d.ts +4 -13
- package/dist/components/InspectorPanel.d.ts +6 -1
- package/dist/components/KanbanBoardSidebar.d.ts +2 -1
- package/dist/components/KanbanBoardState.d.ts +1 -1
- package/dist/components/KanbanContractGraphView.d.ts +3 -2
- package/dist/components/KanbanQueueHealthBar.d.ts +2 -1
- package/dist/components/KanbanTaskActivityRecorder.d.ts +2 -1
- package/dist/components/MemoryManager/MemoryDetail.d.ts +2 -1
- package/dist/components/MemoryManager/MemoryEditor.d.ts +2 -1
- package/dist/components/MemoryManager/MemoryFilters.d.ts +2 -1
- package/dist/components/MemoryManager/MemoryList.d.ts +2 -1
- package/dist/components/MemoryManager/MemorySearchBreakdown.d.ts +2 -1
- package/dist/components/MemoryManager/ReviewQueue.d.ts +2 -1
- package/dist/components/MemoryManager/SageTabs.d.ts +2 -1
- package/dist/components/MemoryManager/shared.d.ts +0 -1
- package/dist/components/MessageBubble/FailedRunContinue.d.ts +12 -0
- package/dist/components/MessageBubble/utils.d.ts +6 -0
- package/dist/components/ModelPickDialog.d.ts +1 -1
- package/dist/components/ModelSelectDialog.d.ts +4 -3
- package/dist/components/NextStepsBar.d.ts +1 -6
- package/dist/components/NotificationMenu.d.ts +6 -0
- package/dist/components/OfficeMapCanvas/edges.d.ts +0 -6
- package/dist/components/OfficeMapCanvas/nodes.d.ts +0 -32
- package/dist/components/OfficeMapCanvas/use-recently-finished.d.ts +2 -1
- package/dist/components/OfficeMapCanvas/utils.d.ts +4 -10
- package/dist/components/ProcessMonitor.d.ts +2 -1
- package/dist/components/ProviderWaitingRoom.d.ts +8 -0
- package/dist/components/QueuePanel.d.ts +1 -1
- package/dist/components/QuickModelSwitcher.filter.d.ts +23 -7
- package/dist/components/RestoreTabsModal.d.ts +20 -0
- package/dist/components/SddFlowGraph.d.ts +3 -2
- package/dist/components/SessionTabBar/TabMap.d.ts +19 -0
- package/dist/components/SessionTabBar/summaries.d.ts +39 -0
- package/dist/components/SessionTabBar.d.ts +14 -0
- package/dist/components/SettingsPanel/ClearAllowlistDialog.d.ts +2 -1
- package/dist/components/SettingsPanel/ModelCatalogPicker.d.ts +2 -14
- package/dist/components/SettingsPanel/ModelEffortSelect.d.ts +12 -0
- package/dist/components/SettingsPanel/ModelListEditor.d.ts +2 -1
- package/dist/components/SettingsPanel/ModelSchemaEditor.d.ts +2 -1
- package/dist/components/SettingsPanel/ModelSection.d.ts +3 -1
- package/dist/components/SettingsPanel/ModelTiersSection.d.ts +7 -0
- package/dist/components/SettingsPanel/OAuthLoginSection.d.ts +2 -2
- package/dist/components/SettingsPanel/PluginToggleList.d.ts +3 -1
- package/dist/components/SettingsPanel/ProviderModelsPanel.d.ts +2 -1
- package/dist/components/SettingsPanel/ProviderModelsPanel.filter.d.ts +2 -1
- package/dist/components/SettingsPanel/ProviderSection.d.ts +2 -2
- package/dist/components/SettingsPanel/ToolsSection.d.ts +0 -10
- package/dist/components/SettingsPanel/brain-section-options.d.ts +3 -10
- package/dist/components/SettingsPanel/contracts.d.ts +5 -3
- package/dist/components/SettingsPanel/sync-settings-preference.d.ts +8 -0
- package/dist/components/SettingsPanel/undo-send-decision.d.ts +2 -1
- package/dist/components/SidePanel/ChangesPanel.d.ts +0 -6
- package/dist/components/SidePanel/DesignStudioPanel.d.ts +7 -0
- package/dist/components/SidePanel/SessionList.d.ts +6 -6
- package/dist/components/SystemPromptDialog.d.ts +18 -0
- package/dist/components/TaskActivityTimeline.d.ts +3 -3
- package/dist/components/TaskBoard.d.ts +1 -1
- package/dist/components/TaskCard.d.ts +2 -7
- package/dist/components/TaskExecutionAttempts.d.ts +2 -1
- package/dist/components/TaskIntelligencePanel.d.ts +1 -1
- package/dist/components/TaskRiskPanel.d.ts +4 -3
- package/dist/components/TechStackView/DependencyDetail.d.ts +2 -1
- package/dist/components/TechStackView/DependencyTable.d.ts +2 -1
- package/dist/components/TechStackView/FindingsPanel.d.ts +2 -1
- package/dist/components/TechStackView/TechStackToolbar.d.ts +2 -1
- package/dist/components/TechStackView/shared.d.ts +5 -5
- package/dist/components/Toaster.d.ts +3 -31
- package/dist/components/ToolStatsModal.d.ts +15 -0
- package/dist/components/UpdateBanner.d.ts +6 -4
- package/dist/components/WorkbenchTopbar.d.ts +1 -3
- package/dist/components/agent-roster-data.d.ts +1 -1
- package/dist/components/agents/AgentDetailSection.d.ts +2 -1
- package/dist/components/agents/AgentRosterCard.d.ts +2 -1
- package/dist/components/agents/FleetSummaryBar.d.ts +6 -3
- package/dist/components/codemap-model.d.ts +3 -2
- package/dist/components/ui/PickerCardList.d.ts +3 -2
- package/dist/components/ui/badge.d.ts +2 -2
- package/dist/components/ui/button.d.ts +2 -2
- package/dist/components/ui/concurrency-gauge.d.ts +2 -1
- package/dist/components/ui/dialog.d.ts +5 -5
- package/dist/components/ui/dropdown-menu.d.ts +8 -8
- package/dist/components/ui/event-timeline.d.ts +2 -1
- package/dist/components/ui/fleet-agent-row.d.ts +2 -7
- package/dist/components/ui/scroll-area.d.ts +2 -2
- package/dist/components/ui/sheet.d.ts +2 -2
- package/dist/components/ui/sparkline.d.ts +2 -1
- package/dist/components/vector-memory-panel/model.d.ts +2 -7
- package/dist/hooks/index.d.ts +1 -0
- package/dist/hooks/useDesktopBridge.d.ts +2 -1
- package/dist/hooks/useF5Resilience.d.ts +0 -14
- package/dist/hooks/useFleetPolling.d.ts +2 -1
- package/dist/hooks/useGlobalKeyboardShortcuts.d.ts +4 -1
- package/dist/hooks/useIntegrationStatus.d.ts +10 -0
- package/dist/hooks/useKanbanMeta.d.ts +4 -3
- package/dist/hooks/useLiveContextDebug.d.ts +4 -3
- package/dist/hooks/useMemoryForFile.d.ts +3 -2
- package/dist/hooks/usePagination.d.ts +2 -1
- package/dist/hooks/useProviderModels.d.ts +1 -0
- package/dist/hooks/useSessionSubscription.d.ts +15 -0
- package/dist/hooks/useViewport.d.ts +2 -3
- package/dist/hooks/useWebSocket.d.ts +6 -1
- package/dist/hooks/ws-handlers/chat-handlers.d.ts +22 -10
- package/dist/hooks/ws-handlers/coordinator-handlers.d.ts +7 -0
- package/dist/hooks/ws-handlers/files-mailbox-handlers.d.ts +1 -3
- package/dist/hooks/ws-handlers/misc-handlers.d.ts +22 -0
- package/dist/hooks/ws-handlers/session-context-handlers.d.ts +24 -2
- package/dist/hooks/ws-handlers/session-execution-handlers.d.ts +12 -0
- package/dist/hooks/ws-handlers/session-handlers.d.ts +3 -3
- package/dist/hooks/ws-handlers/session-replay-handlers.d.ts +31 -2
- package/dist/hooks/ws-handlers/techstack-handlers.d.ts +0 -3
- package/dist/index.html +30 -26
- package/dist/index.js +77572 -66789
- package/dist/lib/agent-office.d.ts +3 -3
- package/dist/lib/agent-session.d.ts +19 -0
- package/dist/lib/agent-status.d.ts +5 -4
- package/dist/lib/completion.d.ts +3 -2
- package/dist/lib/delegate-format.d.ts +33 -0
- package/dist/lib/favicon.d.ts +2 -1
- package/dist/lib/kanban-verification.d.ts +3 -2
- package/dist/lib/model-matrix-routes.d.ts +3 -3
- package/dist/lib/plugin-enablement.d.ts +1 -1
- package/dist/lib/reasoning-effort.d.ts +76 -0
- package/dist/lib/sdd-theme.d.ts +4 -3
- package/dist/lib/task-brief-preview.d.ts +5 -0
- package/dist/lib/terminal-dock.d.ts +0 -1
- package/dist/lib/view-navigation.d.ts +2 -2
- package/dist/lib/ws-client-actions.d.ts +1 -0
- package/dist/lib/ws-client-domain-methods.d.ts +45 -5
- package/dist/lib/ws-client-utils.d.ts +33 -0
- package/dist/lib/ws-client.d.ts +135 -6
- package/dist/manifest.json +17 -0
- package/dist/protocol-compatibility.d.ts +0 -10
- package/dist/stores/auto-submit-streak.d.ts +3 -1
- package/dist/stores/chat-lanes.d.ts +279 -0
- package/dist/stores/chat-retention.d.ts +2 -4
- package/dist/stores/chat-store-types.d.ts +1 -0
- package/dist/stores/chat-store.d.ts +46 -25
- package/dist/stores/chimera-hub-store.d.ts +140 -0
- package/dist/stores/chimera-reports-store.d.ts +45 -0
- package/dist/stores/codemap-activity-store.d.ts +4 -4
- package/dist/stores/context-editor-store.d.ts +4 -5
- package/dist/stores/coordinator-monitor-store.d.ts +3 -2
- package/dist/stores/council-log-store.d.ts +6 -20
- package/dist/stores/file-store.d.ts +32 -13
- package/dist/stores/fleet-store.d.ts +49 -5
- package/dist/stores/git-changes-store.d.ts +25 -1
- package/dist/stores/goal-run-store.d.ts +2 -2
- package/dist/stores/history-store.d.ts +11 -0
- package/dist/stores/index.d.ts +17 -9
- package/dist/stores/local-prefs.d.ts +87 -0
- package/dist/stores/mailbox-store.d.ts +2 -2
- package/dist/stores/memory-injector-store.d.ts +2 -2
- package/dist/stores/memory-lifecycle-store.d.ts +6 -2
- package/dist/stores/monitor-store.d.ts +3 -2
- package/dist/stores/notification-store.d.ts +141 -0
- package/dist/stores/provider-status-store.d.ts +19 -0
- package/dist/stores/restore-tabs-store.d.ts +29 -0
- package/dist/stores/resume-progress-store.d.ts +58 -0
- package/dist/stores/session-inspect-store.d.ts +1 -1
- package/dist/stores/session-lanes.d.ts +242 -0
- package/dist/stores/session-scoped-store.d.ts +56 -0
- package/dist/stores/session-store.d.ts +97 -154
- package/dist/stores/session-tab-store.d.ts +197 -0
- package/dist/stores/side-effect-store.d.ts +9 -1
- package/dist/stores/system-prompt-store.d.ts +48 -0
- package/dist/stores/tool-stats-store.d.ts +52 -0
- package/dist/stores/types.d.ts +81 -4
- package/dist/stores/ui-store.d.ts +113 -11
- package/dist/types/brain.d.ts +17 -16
- package/dist/types/chronicle.d.ts +3 -2
- package/dist/types/client-message.d.ts +139 -23
- package/dist/types/collab.d.ts +0 -2
- package/dist/types/protocol-core.d.ts +62 -6
- package/dist/types/server-message.d.ts +204 -3
- package/dist/types/skills-design.d.ts +2 -1
- package/package.json +11 -11
- package/dist/assets/AgentRosterView-p5iiedCA.js +0 -9
- package/dist/assets/AnalyticsDashboard-B0sbSAxw.js +0 -1
- package/dist/assets/AudienceMemoryPanel-DcDONq7t.js +0 -3
- package/dist/assets/ChangesView-CD3JR3qY.js +0 -1
- package/dist/assets/ChronicleDashboard-3tJUiU7K.js +0 -1
- package/dist/assets/CodeEditor-0RJa9mSq.js +0 -2
- package/dist/assets/CodeMap-BvqQN6MG.js +0 -1
- package/dist/assets/ConfirmModal-CRSE2t_c.js +0 -1
- package/dist/assets/DesignGalleryView-BKl6Ce71.js +0 -1
- package/dist/assets/GoalView-Db55m-Nq.js +0 -1
- package/dist/assets/KanbanView-BQ7duNsz.js +0 -3
- package/dist/assets/MailboxDetailView-CgHzqllF.js +0 -1
- package/dist/assets/MemoryDrawer-BNTsi4jl.js +0 -1
- package/dist/assets/MemoryManager-B4NAvfYx.js +0 -1
- package/dist/assets/ModelPicker-BtK3pwfC.js +0 -1
- package/dist/assets/OfficeMapPanel-Bk9q12hP.js +0 -4
- package/dist/assets/ProcessMonitor-BTndLGIV.js +0 -1
- package/dist/assets/PromptJournalView-DbwN6AWe.js +0 -1
- package/dist/assets/QueuePanel-Cb1mIIuO.js +0 -1
- package/dist/assets/RefreshDebugView-CzGncYqB.js +0 -1
- package/dist/assets/RequirementIntakeView-BgKJbUlD.js +0 -1
- package/dist/assets/SageTabs-mB6lxkdD.js +0 -2
- package/dist/assets/SddFlowGraph-C484p5L9.js +0 -1
- package/dist/assets/SddHub-DsD8ORZo.js +0 -2
- package/dist/assets/SessionInspectView-DtM6MBbL.js +0 -1
- package/dist/assets/SessionList-CCaEa3iW.js +0 -1
- package/dist/assets/SessionsDashboard-CxatSEv6.js +0 -1
- package/dist/assets/SetupScreen-CBkuOnoN.js +0 -1
- package/dist/assets/SkillDetailView-DKVIAnwb.js +0 -3
- package/dist/assets/TechStackView-B6WDU-tt.js +0 -2
- package/dist/assets/TerminalPanel-Dfkt3xtA.js +0 -1
- package/dist/assets/Toaster-CcgCyzaU.js +0 -1
- package/dist/assets/activity-BA8C9ueU.js +0 -9
- package/dist/assets/activity-BYnOci5N.js +0 -9
- package/dist/assets/activity-COQ9xSFu.js +0 -9
- package/dist/assets/activity-CuJqhGz7.js +0 -9
- package/dist/assets/activity-D3ZccGOh.js +0 -9
- package/dist/assets/activity-YMES6OPI.js +0 -9
- package/dist/assets/activity-zlMMaNE1.js +0 -9
- package/dist/assets/chat-CzaGXz_W.js +0 -1
- package/dist/assets/chat-store-BiEXyguk.js +0 -17
- package/dist/assets/codemap-index-store-CDhApwWQ.js +0 -1
- package/dist/assets/i18n-BeHaHx3x.js +0 -2
- package/dist/assets/index-B8J_xxU5.css +0 -1
- package/dist/assets/index-BLI23QVE.js +0 -134
- package/dist/assets/session-store-CKpAwNIm.js +0 -1
- package/dist/assets/settings-BNbqEBSr.js +0 -1
- package/dist/assets/settings-BsZgLIo2.js +0 -1
- package/dist/assets/settings-C3OnmFrY.js +0 -1
- package/dist/assets/settings-C3bNf1Bx.js +0 -1
- package/dist/assets/settings-C9FOpDBt.js +0 -1
- package/dist/assets/settings-oeXlO4HA.js +0 -1
- package/dist/assets/stores-BskP1BVl.js +0 -7
- package/dist/assets/toasts-BCDGDcyq.js +0 -1
- package/dist/assets/toasts-BwQJwYLe.js +0 -1
- package/dist/assets/toasts-CFzweRH5.js +0 -1
- package/dist/assets/toasts-DDYQsJV8.js +0 -1
- package/dist/assets/toasts-DOfXc7Rt.js +0 -1
- package/dist/assets/toasts-Dm12Nq8t.js +0 -1
- package/dist/assets/toasts-frBt6fvE.js +0 -1
- package/dist/assets/ui-store-3HoYrTu5.js +0 -1
- package/dist/assets/useWebSocket-6jp275vG.js +0 -29
- package/dist/assets/utils-BecmXwgG.js +0 -1
- package/dist/assets/view-navigation-C1UDTk5R.js +0 -1
- package/dist/assets/ws-client-C6jAU4nL.js +0 -1
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* session-tab-store.ts — The four slots, and the only place a tab is opened,
|
|
3
|
+
* switched or closed.
|
|
4
|
+
*
|
|
5
|
+
* The model, stated plainly:
|
|
6
|
+
*
|
|
7
|
+
* - There are exactly FOUR slots. Never more, never a fifth "just for now".
|
|
8
|
+
* - A slot holds AT MOST one session, and a session sits in AT MOST one slot.
|
|
9
|
+
* Both directions are enforced here; nothing else is allowed to bind them.
|
|
10
|
+
* - Switching slots moves a pointer. It does not park, copy, restore or clear
|
|
11
|
+
* anything, because every slot's state already lives in its own lane
|
|
12
|
+
* (`chat-lanes.ts`, `session-lanes.ts`) whether or not it is on screen.
|
|
13
|
+
* - Closing a slot disposes that lane. A closed tab keeps nothing alive.
|
|
14
|
+
*
|
|
15
|
+
* Think of the four slots as four layouts side by side. What makes them
|
|
16
|
+
* side-by-side rather than one surface with four costumes is that no slot can
|
|
17
|
+
* name another slot's state: the lane registries are keyed by session id and
|
|
18
|
+
* every writer must name the session it is writing to.
|
|
19
|
+
*/
|
|
20
|
+
import { chatLane } from './chat-lanes';
|
|
21
|
+
export declare const MAX_OPEN_TABS = 4;
|
|
22
|
+
export declare const TAB_STORAGE_KEY = "wrongstack.open_session_tabs";
|
|
23
|
+
export declare function readStoredTabs(): string[];
|
|
24
|
+
export declare function writeStoredTabs(tabs: string[]): void;
|
|
25
|
+
export interface OpenTabResult {
|
|
26
|
+
success: boolean;
|
|
27
|
+
reason: 'already_active' | 'switched' | 'opened_new_tab' | 'replaced_empty_tab' | 'tabs_full';
|
|
28
|
+
}
|
|
29
|
+
/** What the tab strip and the tab map render for one slot. */
|
|
30
|
+
export interface TabSummary {
|
|
31
|
+
slot: number;
|
|
32
|
+
sessionId: string;
|
|
33
|
+
isActive: boolean;
|
|
34
|
+
title: string;
|
|
35
|
+
provider: string;
|
|
36
|
+
model: string;
|
|
37
|
+
mode: string;
|
|
38
|
+
isRunning: boolean;
|
|
39
|
+
messageCount: number;
|
|
40
|
+
unread: number;
|
|
41
|
+
queued: number;
|
|
42
|
+
agentsRunning: number;
|
|
43
|
+
agentsTotal: number;
|
|
44
|
+
tokens: number;
|
|
45
|
+
cost: number;
|
|
46
|
+
contextPct: number;
|
|
47
|
+
needsAttention: boolean;
|
|
48
|
+
}
|
|
49
|
+
interface SessionTabState {
|
|
50
|
+
/** Slot order. Length is always <= MAX_OPEN_TABS. */
|
|
51
|
+
openTabIds: string[];
|
|
52
|
+
/** Transcript length each tab had when the user last looked at it. */
|
|
53
|
+
lastSeenCounts: Record<string, number>;
|
|
54
|
+
/** Tabs with a tool confirmation waiting. Set by the confirm handler. */
|
|
55
|
+
attention: Record<string, boolean>;
|
|
56
|
+
setOpenTabIds: (ids: string[]) => void;
|
|
57
|
+
openTab: (sessionId: string, options?: {
|
|
58
|
+
resumeSession?: (id: string) => void;
|
|
59
|
+
recycleReentry?: boolean;
|
|
60
|
+
}) => OpenTabResult;
|
|
61
|
+
closeTab: (sessionId: string) => void;
|
|
62
|
+
/**
|
|
63
|
+
* Close every open tab bound to one of `sessionIds` so the caller can ask
|
|
64
|
+
* the server to delete those records (a session a connection still
|
|
65
|
+
* declares is refused). Returns the subset that is safe to delete:
|
|
66
|
+
* sessions without a busy tab, minus the one tab kept so the strip never
|
|
67
|
+
* drops to zero.
|
|
68
|
+
*/
|
|
69
|
+
closeTabsForSessions: (sessionIds: string[]) => string[];
|
|
70
|
+
markSeen: (sessionId: string) => void;
|
|
71
|
+
setAttention: (sessionId: string, needsAttention: boolean) => void;
|
|
72
|
+
}
|
|
73
|
+
/** A tab is "busy" when its own run is live or it owns a running subagent. */
|
|
74
|
+
export declare function isTabBusy(sessionId: string): boolean;
|
|
75
|
+
/** Everything a busy-tab warning needs to say about one session, gathered in
|
|
76
|
+
* one place. The close dialog and the switch-away toast render the same
|
|
77
|
+
* `lines`, so the two warnings cannot drift apart or go vague. */
|
|
78
|
+
interface SessionActivityReport {
|
|
79
|
+
sessionId: string;
|
|
80
|
+
isBusy: boolean;
|
|
81
|
+
/** True when the tab holds nothing at all — no chat history, no agents
|
|
82
|
+
* (running or finished), no queued messages, no live run. Such a tab has
|
|
83
|
+
* nothing to lose and may close without asking. */
|
|
84
|
+
isEmpty: boolean;
|
|
85
|
+
leaderRunning: boolean;
|
|
86
|
+
runningAgents: Array<{
|
|
87
|
+
id: string;
|
|
88
|
+
name: string;
|
|
89
|
+
brief: string;
|
|
90
|
+
}>;
|
|
91
|
+
finishedAgents: number;
|
|
92
|
+
queuedMessages: number;
|
|
93
|
+
/** Pre-localized, factual inventory lines (no framing). */
|
|
94
|
+
lines: string[];
|
|
95
|
+
}
|
|
96
|
+
/** Complete inventory of what a session has in flight: its own run, every
|
|
97
|
+
* running subagent with a task preview, finished agents on record, queued
|
|
98
|
+
* messages. Reads the lane registries directly, like `isTabBusy`. */
|
|
99
|
+
export declare function describeSessionActivity(sessionId: string): SessionActivityReport;
|
|
100
|
+
/**
|
|
101
|
+
* Everything one slot owns, freed in one place.
|
|
102
|
+
*
|
|
103
|
+
* `closeTab` and `setOpenTabIds` both retire a tab, and they used to free
|
|
104
|
+
* different things: the lanes always, the preference overrides and
|
|
105
|
+
* auto-submit streak only on the explicit close. A tab dropped by the other
|
|
106
|
+
* path left state that the NEXT session to be handed that id silently
|
|
107
|
+
* inherited, which is the one thing the four-lane model exists to prevent.
|
|
108
|
+
* The boot-time lane/slot reconciler in `useF5Resilience` retires through this
|
|
109
|
+
* same path for the same reason. `restoreOpenTabsOnBoot` is the symmetric
|
|
110
|
+
* opposite: it REBINDS every persisted slot so a browser refresh leaves the
|
|
111
|
+
* user's tabs where they were, not as a half-empty welcome screen.
|
|
112
|
+
*/
|
|
113
|
+
export declare function releaseTab(sessionId: string): void;
|
|
114
|
+
/**
|
|
115
|
+
* Foreground picker for `restoreOpenTabsOnBoot`. Deterministic for tests.
|
|
116
|
+
*
|
|
117
|
+
* The persisted `openTabIds` order reflects the user's last tab strip;
|
|
118
|
+
* `lastVisitedAt` is per-tab and survives F5 inside `useSessionLanes`.
|
|
119
|
+
* Picking the most-recently-visited tab and falling back to the persisted
|
|
120
|
+
* order on a tie keeps the foreground where the user left it without
|
|
121
|
+
* inventing a new ordering rule. The `now` parameter is injected so the
|
|
122
|
+
* helper stays pure and testable.
|
|
123
|
+
*/
|
|
124
|
+
type RestorePickForeground = (candidates: string[], now: number) => string | null;
|
|
125
|
+
interface RestoreOpenTabsOptions {
|
|
126
|
+
/** Injected clock for tests. Defaults to `Date.now()`. */
|
|
127
|
+
now?: number;
|
|
128
|
+
/** Injected picker for tests. Defaults to `defaultPickForeground`. */
|
|
129
|
+
pickForeground?: RestorePickForeground;
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Promote the persisted slot list into active, foregrounded tabs at boot.
|
|
133
|
+
*
|
|
134
|
+
* The inverse of `releaseTab`: every id stored in
|
|
135
|
+
* `wrongstack.open_session_tabs` has its chat lane and session lane
|
|
136
|
+
* ensured, its per-session preferences bound, and its subagent focus and
|
|
137
|
+
* history rebinds wired up. The most-recently-visited id (or the first
|
|
138
|
+
* stored id on a tie) becomes the foreground, re-routing through
|
|
139
|
+
* `activate()` so URL sync, modal disposal, slash-overlay closing and
|
|
140
|
+
* history rebinding happen exactly the way they do when the user clicks
|
|
141
|
+
* the tab. Finally the open set is declared to the WS client so the
|
|
142
|
+
* server resumes broadcasts to all four lanes on the very first paint.
|
|
143
|
+
*
|
|
144
|
+
* Called once from `useF5Resilience` at app mount; safe to call again
|
|
145
|
+
* later but a no-op once the foreground has been set.
|
|
146
|
+
*/
|
|
147
|
+
/**
|
|
148
|
+
* Drop persisted tabs the SERVER is not holding, and return what survives.
|
|
149
|
+
*
|
|
150
|
+
* The tab strip lives in `localStorage`, so it outlives the process that
|
|
151
|
+
* created it. After a restart every id in it names a session this runtime has
|
|
152
|
+
* never heard of — and promoting them anyway is what made a fresh
|
|
153
|
+
* `wstack --webui` open wearing the previous run's tabs, front a conversation
|
|
154
|
+
* from days ago, and sit through a full journal resume (todo board included)
|
|
155
|
+
* before the user had typed a character.
|
|
156
|
+
*
|
|
157
|
+
* A dropped tab is not a deleted session: the transcript stays on disk and in
|
|
158
|
+
* History, where reopening it is an explicit act. This only says it is no
|
|
159
|
+
* longer *open*.
|
|
160
|
+
*
|
|
161
|
+
* `live` is the runtime's own list (`openSessionIds` on the boot frame). An
|
|
162
|
+
* empty or absent list means "trust nothing" and is treated as no tabs — the
|
|
163
|
+
* caller then seeds the strip with the session the server just announced.
|
|
164
|
+
*/
|
|
165
|
+
export declare function pruneTabsToLiveSessions(live: readonly string[]): string[];
|
|
166
|
+
/** Test seam — lets a suite re-arm the one-shot latch. */
|
|
167
|
+
export declare function resetBootRestoreLatchForTests(): void;
|
|
168
|
+
/**
|
|
169
|
+
* Reconcile the persisted tab strip with the server, then promote what is left.
|
|
170
|
+
*
|
|
171
|
+
* Runs once per page load, driven by whichever comes first:
|
|
172
|
+
*
|
|
173
|
+
* - the boot `session.start` frame, which carries `openSessionIds` — the
|
|
174
|
+
* sessions this runtime is actually holding. Stale slots are dropped, and if
|
|
175
|
+
* NOTHING survives the strip stays empty so the announced session becomes the
|
|
176
|
+
* single tab. That is the whole point: a fresh `wstack --webui` must open on
|
|
177
|
+
* an empty conversation, not on a tab strip from a previous run.
|
|
178
|
+
* - a fallback timer, for a server too old to send the field or a page that
|
|
179
|
+
* never connects. There the strip is restored unfiltered, which is the
|
|
180
|
+
* behaviour that existed before this reconciliation.
|
|
181
|
+
*
|
|
182
|
+
* `live === undefined` means "no answer", NOT "nothing is live" — the two must
|
|
183
|
+
* not collapse, or an old server would wipe the user's tabs on every open.
|
|
184
|
+
*/
|
|
185
|
+
export declare function restoreTabsAfterBoot(live: readonly string[] | undefined, options?: RestoreOpenTabsOptions): string[];
|
|
186
|
+
export declare function restoreOpenTabsOnBoot(options?: RestoreOpenTabsOptions): string[];
|
|
187
|
+
export declare const useSessionTabStore: import("zustand").UseBoundStore<import("zustand").StoreApi<SessionTabState>>;
|
|
188
|
+
/**
|
|
189
|
+
* Everything the tab strip and the tab map need about one slot, read straight
|
|
190
|
+
* from the lane registries. There is no separate per-tab mirror to drift.
|
|
191
|
+
*/
|
|
192
|
+
export declare function summarizeTab(sessionId: string, slot: number): TabSummary;
|
|
193
|
+
/** Which slot a session sits in, or -1. Enforces the one-session-one-tab rule
|
|
194
|
+
* at read time so callers cannot invent a second home for a session. */
|
|
195
|
+
export declare function slotOf(sessionId: string): number;
|
|
196
|
+
export { chatLane };
|
|
197
|
+
//# sourceMappingURL=session-tab-store.d.ts.map
|
|
@@ -13,6 +13,14 @@ interface SideEffectState {
|
|
|
13
13
|
setLoading: (loading: boolean) => void;
|
|
14
14
|
clear: () => void;
|
|
15
15
|
}
|
|
16
|
-
|
|
16
|
+
/**
|
|
17
|
+
* Side effects RECORDED BY ONE RUN — so, one conversation's.
|
|
18
|
+
*
|
|
19
|
+
* The list used to be global and the handler dropped anything that was not the
|
|
20
|
+
* tab in front, which meant a background tab's `side_effects.list` reply
|
|
21
|
+
* arrived and was thrown away: opening that tab showed an empty timeline for a
|
|
22
|
+
* run that had written files.
|
|
23
|
+
*/
|
|
24
|
+
export declare const useSideEffectStore: import("./session-scoped-store").SessionScopedStore<SideEffectState>;
|
|
17
25
|
export {};
|
|
18
26
|
//# sourceMappingURL=side-effect-store.d.ts.map
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import type { WSSystemPromptInfo } from '../types/server-message';
|
|
2
|
+
/**
|
|
3
|
+
* Identity-prompt size for this session: which variants exist, what each costs
|
|
4
|
+
* in tokens, which one is live, and whether the user has ever chosen.
|
|
5
|
+
*
|
|
6
|
+
* `chosen` drives the one behaviour that cannot be derived any other way: the
|
|
7
|
+
* first-run picker. The server materializes a default variant for every config,
|
|
8
|
+
* so `current === 'default'` says nothing about whether anyone picked it. The
|
|
9
|
+
* flag comes from the raw profile config file, where the key only exists once a
|
|
10
|
+
* selection has actually been made.
|
|
11
|
+
*
|
|
12
|
+
* `promptedThisSession` is local and deliberately not persisted: it stops the
|
|
13
|
+
* first-run picker from reopening on a reconnect or a re-render while still
|
|
14
|
+
* reopening on a genuinely new browser session, which is when the question is
|
|
15
|
+
* cheap to ask again.
|
|
16
|
+
*/
|
|
17
|
+
interface SystemPromptState {
|
|
18
|
+
info: WSSystemPromptInfo | null;
|
|
19
|
+
/**
|
|
20
|
+
* Live variant per tab. The catalogue (variants, token costs, `chosen`) is a
|
|
21
|
+
* project fact and is shared, but WHICH variant is live is a per-session
|
|
22
|
+
* preference: four tabs on one runtime each carry their own
|
|
23
|
+
* `systemPromptVariant`. Folding every `system_prompt.info` into one
|
|
24
|
+
* `info.current` made the picker show — and re-apply — a neighbour's choice.
|
|
25
|
+
*/
|
|
26
|
+
currentBySession: Record<string, WSSystemPromptInfo['current']>;
|
|
27
|
+
/** Open state of the picker, and what opened it. */
|
|
28
|
+
pickerOpen: boolean;
|
|
29
|
+
/** True when the picker was opened by the New Session flow (confirm starts one). */
|
|
30
|
+
pickerStartsSession: boolean;
|
|
31
|
+
promptedThisSession: boolean;
|
|
32
|
+
setInfo: (info: WSSystemPromptInfo, sessionId?: string | undefined) => void;
|
|
33
|
+
/** Forget a closed tab's variant so the map cannot outlive its lane. */
|
|
34
|
+
dropSession: (sessionId: string) => void;
|
|
35
|
+
openPicker: (opts?: {
|
|
36
|
+
startsSession?: boolean;
|
|
37
|
+
}) => void;
|
|
38
|
+
closePicker: () => void;
|
|
39
|
+
markPrompted: () => void;
|
|
40
|
+
}
|
|
41
|
+
export declare const useSystemPromptStore: import("zustand").UseBoundStore<import("zustand").StoreApi<SystemPromptState>>;
|
|
42
|
+
/**
|
|
43
|
+
* The variant live in a given tab, falling back to the last catalogue reply for
|
|
44
|
+
* hosts that answer unstamped.
|
|
45
|
+
*/
|
|
46
|
+
export declare function systemPromptCurrent(state: Pick<SystemPromptState, 'info' | 'currentBySession'>, sessionId: string | null | undefined): WSSystemPromptInfo['current'];
|
|
47
|
+
export {};
|
|
48
|
+
//# sourceMappingURL=system-prompt-store.d.ts.map
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/** Leader-initiated calls when the wire payload carried no `agentName`. */
|
|
2
|
+
export declare const LEADER_AGENT_KEY = "leader";
|
|
3
|
+
export interface ToolStatsBucket {
|
|
4
|
+
started: number;
|
|
5
|
+
ok: number;
|
|
6
|
+
failed: number;
|
|
7
|
+
totalMs: number;
|
|
8
|
+
}
|
|
9
|
+
export interface ToolStatsDelegation extends ToolStatsBucket {
|
|
10
|
+
/** Tool calls reported inside delegated subagent runs. */
|
|
11
|
+
toolCalls: number;
|
|
12
|
+
}
|
|
13
|
+
export interface ToolStatsSession {
|
|
14
|
+
sessionId: string;
|
|
15
|
+
firstActivityAt: number;
|
|
16
|
+
lastActivityAt: number;
|
|
17
|
+
/** Keyed by tool name. */
|
|
18
|
+
perTool: Record<string, ToolStatsBucket>;
|
|
19
|
+
/** Keyed by `LEADER_AGENT_KEY` or the `agentName` from the wire payload. */
|
|
20
|
+
perAgent: Record<string, ToolStatsBucket>;
|
|
21
|
+
delegations: ToolStatsDelegation;
|
|
22
|
+
}
|
|
23
|
+
interface ToolStatsState {
|
|
24
|
+
sessions: Record<string, ToolStatsSession>;
|
|
25
|
+
recordToolStarted: (sessionId: string, call: {
|
|
26
|
+
name: string;
|
|
27
|
+
agentName?: string | undefined;
|
|
28
|
+
}) => void;
|
|
29
|
+
recordToolExecuted: (sessionId: string, call: {
|
|
30
|
+
name: string;
|
|
31
|
+
ok: boolean;
|
|
32
|
+
durationMs?: number | undefined;
|
|
33
|
+
agentName?: string | undefined;
|
|
34
|
+
}) => void;
|
|
35
|
+
recordDelegateStarted: (sessionId: string, delegation: {
|
|
36
|
+
target: string;
|
|
37
|
+
}) => void;
|
|
38
|
+
recordDelegateCompleted: (sessionId: string, delegation: {
|
|
39
|
+
target: string;
|
|
40
|
+
ok: boolean;
|
|
41
|
+
toolCalls?: number | undefined;
|
|
42
|
+
}) => void;
|
|
43
|
+
resetSession: (sessionId: string) => void;
|
|
44
|
+
clearAll: () => void;
|
|
45
|
+
}
|
|
46
|
+
export declare const useToolStatsStore: import("zustand").UseBoundStore<import("zustand").StoreApi<ToolStatsState>>;
|
|
47
|
+
/** Completed-call success ratio for a bucket, or null when nothing completed. */
|
|
48
|
+
export declare function bucketSuccessRatio(bucket: ToolStatsBucket): number | null;
|
|
49
|
+
/** Calls started but not yet completed across a session (running right now). */
|
|
50
|
+
export declare function sessionInFlight(session: ToolStatsSession): number;
|
|
51
|
+
export {};
|
|
52
|
+
//# sourceMappingURL=tool-stats-store.d.ts.map
|
package/dist/stores/types.d.ts
CHANGED
|
@@ -1,7 +1,22 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
export
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
import type { Usage } from '@wrongstack/core/types';
|
|
2
|
+
export type CouncilVoteStatus = 'valid' | 'invalid' | 'failed' | 'cancelled';
|
|
3
|
+
/** One council seat's observable vote. No hidden chain-of-thought is retained. */
|
|
4
|
+
export interface CouncilSeatVote {
|
|
5
|
+
seatId: string;
|
|
6
|
+
persona: string;
|
|
7
|
+
status: CouncilVoteStatus | string;
|
|
8
|
+
/** The option this seat voted for, on an option-bearing question. */
|
|
9
|
+
optionId?: string | undefined;
|
|
10
|
+
/** Free-text stance / rationale; only present when trace content is full. */
|
|
11
|
+
stance?: string | undefined;
|
|
12
|
+
rationale?: string | undefined;
|
|
13
|
+
providerId?: string | undefined;
|
|
14
|
+
model?: string | undefined;
|
|
15
|
+
veto?: boolean | undefined;
|
|
16
|
+
weight?: number | undefined;
|
|
17
|
+
durationMs?: number | undefined;
|
|
18
|
+
error?: string | undefined;
|
|
19
|
+
at: number;
|
|
5
20
|
}
|
|
6
21
|
export interface ToolExecution {
|
|
7
22
|
id: string;
|
|
@@ -113,6 +128,67 @@ export interface ChatMessage {
|
|
|
113
128
|
auto?: boolean | undefined;
|
|
114
129
|
}>;
|
|
115
130
|
} | undefined;
|
|
131
|
+
/**
|
|
132
|
+
* Chimera review-report card payload — present when this system message
|
|
133
|
+
* renders as an actionable report card (ChimeraReportCard) instead of a
|
|
134
|
+
* plain notice bubble. The card carries the one-click "send the leader to
|
|
135
|
+
* work on this report" affordance; `actionedAt` flips once that prompt has
|
|
136
|
+
* been submitted so the button can never double-fire.
|
|
137
|
+
*/
|
|
138
|
+
chimeraReport?: {
|
|
139
|
+
reportId: string;
|
|
140
|
+
actionable: boolean;
|
|
141
|
+
actionedAt: number | null;
|
|
142
|
+
} | undefined;
|
|
143
|
+
/**
|
|
144
|
+
* Council multi-model consensus & decision payload — present when this
|
|
145
|
+
* message renders as a dedicated, visually styled CouncilDecisionCard with
|
|
146
|
+
* voting charts and seat breakdowns instead of a plain text bubble.
|
|
147
|
+
*/
|
|
148
|
+
councilDecision?: CouncilDecisionData | undefined;
|
|
149
|
+
/**
|
|
150
|
+
* Brain arbiter decision/intervention payload — present when this message
|
|
151
|
+
* renders as a dedicated, visually styled BrainDecisionCard with neural
|
|
152
|
+
* styling, risk level, and rationale instead of a plain text bubble.
|
|
153
|
+
*/
|
|
154
|
+
brainDecision?: BrainDecisionData | undefined;
|
|
155
|
+
}
|
|
156
|
+
export interface CouncilDecisionData {
|
|
157
|
+
requestId?: string | undefined;
|
|
158
|
+
phase?: 'voting' | 'resolved' | undefined;
|
|
159
|
+
startedAt?: number | undefined;
|
|
160
|
+
resolvedAt?: number | undefined;
|
|
161
|
+
status?: string | undefined;
|
|
162
|
+
resolution?: string | undefined;
|
|
163
|
+
optionId?: string | undefined;
|
|
164
|
+
question?: string | undefined;
|
|
165
|
+
reason?: string | undefined;
|
|
166
|
+
configuredSeatCount?: number | undefined;
|
|
167
|
+
validVoteCount?: number | undefined;
|
|
168
|
+
distinctTargetCount?: number | undefined;
|
|
169
|
+
judgeUsed?: boolean | undefined;
|
|
170
|
+
judgeModel?: string | undefined;
|
|
171
|
+
judgeRationale?: string | undefined;
|
|
172
|
+
totalTokens?: number | undefined;
|
|
173
|
+
durationMs?: number | undefined;
|
|
174
|
+
warnings?: string[] | undefined;
|
|
175
|
+
seats: CouncilSeatVote[];
|
|
176
|
+
}
|
|
177
|
+
export interface BrainDecisionData {
|
|
178
|
+
id?: string | undefined;
|
|
179
|
+
kind: 'answered' | 'denied' | 'ask_human' | 'intervention' | 'check' | 'direct' | string;
|
|
180
|
+
intervened?: boolean | undefined;
|
|
181
|
+
decisionType?: string | undefined;
|
|
182
|
+
optionId?: string | undefined;
|
|
183
|
+
question?: string | undefined;
|
|
184
|
+
text?: string | undefined;
|
|
185
|
+
reason?: string | undefined;
|
|
186
|
+
rationale?: string | undefined;
|
|
187
|
+
source?: string | undefined;
|
|
188
|
+
risk?: string | undefined;
|
|
189
|
+
tier?: string | undefined;
|
|
190
|
+
confidence?: number | undefined;
|
|
191
|
+
at?: number | undefined;
|
|
116
192
|
}
|
|
117
193
|
export interface SessionInfo {
|
|
118
194
|
id: string;
|
|
@@ -150,6 +226,7 @@ export type AgentTranscriptKind = 'text' | 'thinking' | 'tool_use' | 'tool_resul
|
|
|
150
226
|
export interface AgentTranscriptEntry {
|
|
151
227
|
id: string;
|
|
152
228
|
subagentId: string;
|
|
229
|
+
sessionId?: string | undefined;
|
|
153
230
|
agentName: string;
|
|
154
231
|
content: string;
|
|
155
232
|
kind: AgentTranscriptKind;
|
|
@@ -1,16 +1,15 @@
|
|
|
1
|
+
import type { ImageAttachment } from '../components/ChatInput/image-attachments.js';
|
|
1
2
|
import type { QueuedItem, QueueMode } from './chat-store';
|
|
2
3
|
import type { MailboxMessage } from './mailbox-store';
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
4
|
+
export type Activity = 'chat' | 'agents' | 'files' | 'changes' | 'mailbox' | 'skills' | 'design';
|
|
5
|
+
/** Map any persisted (possibly legacy) activity value onto the current set.
|
|
6
|
+
* 'worktrees' and 'officemap' were retired from the ActivityBar: worktree
|
|
7
|
+
* lanes now live as a tab inside the Changes panel, the fleet map as a tab
|
|
8
|
+
* inside the Agent Roster view. */
|
|
6
9
|
export declare function coerceActivity(value: unknown): Activity;
|
|
7
10
|
/** All valid currentView values. Kept in sync with the union on UIState. */
|
|
8
|
-
declare const VIEWS: readonly ['chat', 'settings', 'memory', 'roster', 'context', 'goal', 'kanban', 'sddhub', 'files', 'changes', 'sessions', 'session-inspect', 'setup', 'skill', '
|
|
11
|
+
declare const VIEWS: readonly ['chat', 'settings', 'memory', 'roster', 'context', 'goal', 'kanban', 'sddhub', 'files', 'changes', 'sessions', 'session-inspect', 'setup', 'skill', 'mailbox', 'debug', 'design-gallery', 'refresh-debug', 'analytics', 'codemap', 'techstack', 'chronicle', 'intake', 'deadcode', 'prompts', 'chimera'];
|
|
9
12
|
type View = (typeof VIEWS)[number];
|
|
10
|
-
/** Coerce an arbitrary value onto the current view union. Used by migrate
|
|
11
|
-
* when reading from localStorage so a stale value (e.g. 'context', a view
|
|
12
|
-
* removed in v3) lands on 'chat' rather than crashing the router. */
|
|
13
|
-
export declare function coerceView(value: unknown): View;
|
|
14
13
|
/** Single source of truth for the secondary panel width bounds. */
|
|
15
14
|
export declare const SIDEBAR_MIN_WIDTH = 240;
|
|
16
15
|
export declare const SIDEBAR_MAX_WIDTH = 560;
|
|
@@ -26,6 +25,62 @@ export type WorkDashboardTab = 'todos' | 'tasks' | 'plan';
|
|
|
26
25
|
* no observable surface at all.
|
|
27
26
|
*/
|
|
28
27
|
export type InspectorTab = 'fleet' | 'agents' | 'sideEffects' | 'council';
|
|
28
|
+
export type InspectorTarget = {
|
|
29
|
+
kind: 'fleet';
|
|
30
|
+
tab?: InspectorTab | undefined;
|
|
31
|
+
} | {
|
|
32
|
+
kind: 'agent';
|
|
33
|
+
agentId: string;
|
|
34
|
+
} | {
|
|
35
|
+
kind: 'sideEffects';
|
|
36
|
+
} | {
|
|
37
|
+
kind: 'council';
|
|
38
|
+
} | {
|
|
39
|
+
kind: 'task';
|
|
40
|
+
taskId: string;
|
|
41
|
+
boardId?: string | undefined;
|
|
42
|
+
title?: string | undefined;
|
|
43
|
+
};
|
|
44
|
+
interface SessionChromeState {
|
|
45
|
+
sidebarOpen: boolean;
|
|
46
|
+
activeActivity: Activity;
|
|
47
|
+
currentView: View;
|
|
48
|
+
inspectSessionId: string | null;
|
|
49
|
+
searchOpen: boolean;
|
|
50
|
+
searchQuery: string;
|
|
51
|
+
searchActiveMessageId: string | null;
|
|
52
|
+
scrollTarget: UIState['scrollTarget'];
|
|
53
|
+
modelSwitcherOpen: boolean;
|
|
54
|
+
promptLibraryOpen: boolean;
|
|
55
|
+
promptInsertRequest: string | null;
|
|
56
|
+
refinePanel: UIState['refinePanel'];
|
|
57
|
+
draftInput: string;
|
|
58
|
+
draftImages: ImageAttachment[];
|
|
59
|
+
processMonitorOpen: boolean;
|
|
60
|
+
queuePanelOpen: boolean;
|
|
61
|
+
cronJobsOpen: boolean;
|
|
62
|
+
sideContextBreakdownOpen: boolean;
|
|
63
|
+
terminalOpen: boolean;
|
|
64
|
+
dockSection: DockSection | null;
|
|
65
|
+
workDashboardTab: WorkDashboardTab;
|
|
66
|
+
inspectorOpen: boolean;
|
|
67
|
+
inspectorTab: InspectorTab;
|
|
68
|
+
inspectorTarget: InspectorTarget | null;
|
|
69
|
+
inspectorFocusedAgentId: string | null;
|
|
70
|
+
agentRosterActiveTab: 'live' | 'officemap' | 'catalog' | 'learning' | 'memory' | 'customize';
|
|
71
|
+
changesPanelTab: 'changes' | 'worktrees';
|
|
72
|
+
dockCustomizeOpen: boolean;
|
|
73
|
+
skillsState: UIState['skillsState'];
|
|
74
|
+
selectedMailMessage: MailboxMessage | null;
|
|
75
|
+
scrollPositions: Record<string, number>;
|
|
76
|
+
chatSwitcherOpen: boolean;
|
|
77
|
+
chatCheckpointOpen: boolean;
|
|
78
|
+
chatMemoryPanelOpen: boolean;
|
|
79
|
+
chatContextBreakdownOpen: boolean;
|
|
80
|
+
chatContextEditorOpen: boolean;
|
|
81
|
+
chatToolStatsOpen: boolean;
|
|
82
|
+
chatInputCollapsed: boolean;
|
|
83
|
+
}
|
|
29
84
|
interface UIState {
|
|
30
85
|
sidebarOpen: boolean;
|
|
31
86
|
/** Which activity icon is selected in the ActivityBar — controls secondary panel content. */
|
|
@@ -70,6 +125,10 @@ interface UIState {
|
|
|
70
125
|
dockSection: DockSection | null;
|
|
71
126
|
/** Active tab in the Work dock section. Mirrors TUI F5/F6 panel jumps. */
|
|
72
127
|
workDashboardTab: WorkDashboardTab;
|
|
128
|
+
/** Which session the global dock/work projection currently describes. */
|
|
129
|
+
chromeSessionId: string | null;
|
|
130
|
+
/** Per-session screen projection, parked when switching tabs. */
|
|
131
|
+
chromeBySession: Record<string, SessionChromeState>;
|
|
73
132
|
/** Dock chips the user has explicitly hidden via the customization menu.
|
|
74
133
|
* Empty = all chips visible (subject to each chip's own data condition).
|
|
75
134
|
* Mirrors the TUI's F12 status-line chip picker. */
|
|
@@ -84,6 +143,8 @@ interface UIState {
|
|
|
84
143
|
inspectorOpen: boolean;
|
|
85
144
|
/** Active tab inside the global right inspector drawer. */
|
|
86
145
|
inspectorTab: InspectorTab;
|
|
146
|
+
/** Target routing descriptor for the universal inspector drawer. */
|
|
147
|
+
inspectorTarget: InspectorTarget | null;
|
|
87
148
|
/** Agent ID to focus when opening the inspector on the agents tab. Cleared on read. */
|
|
88
149
|
inspectorFocusedAgentId: string | null;
|
|
89
150
|
/** Subagent whose full transcript currently replaces the main chat pane
|
|
@@ -91,6 +152,10 @@ interface UIState {
|
|
|
91
152
|
* persisted; ChatView auto-clears it when the focused agent leaves the
|
|
92
153
|
* fleet roster (removed, cleared, session stop). */
|
|
93
154
|
subagentChatFocusId: string | null;
|
|
155
|
+
/** Which session the flat `subagentChatFocusId` describes. */
|
|
156
|
+
subagentChatFocusSessionId: string | null;
|
|
157
|
+
/** Per-tab subagent focus, so switching tabs restores what each was showing. */
|
|
158
|
+
subagentChatFocusBySession: Record<string, string | null>;
|
|
94
159
|
/** Process Monitor overlay — triggered by /kill slash command. */
|
|
95
160
|
processMonitorOpen: boolean;
|
|
96
161
|
/** Queue Panel overlay — triggered by /queue slash command. */
|
|
@@ -103,6 +168,13 @@ interface UIState {
|
|
|
103
168
|
terminalOpen: boolean;
|
|
104
169
|
/** Monotonic signal consumed by TerminalPanel to create another PTY tab. */
|
|
105
170
|
terminalCreateNonce: number;
|
|
171
|
+
agentRosterActiveTab: 'live' | 'officemap' | 'catalog' | 'learning' | 'memory' | 'customize';
|
|
172
|
+
setAgentRosterActiveTab: (tab: 'live' | 'officemap' | 'catalog' | 'learning' | 'memory' | 'customize') => void;
|
|
173
|
+
/** Active tab inside the Changes side panel. Worktree lanes moved from the
|
|
174
|
+
* ActivityBar into this panel (kept in the store so shortcuts, slash
|
|
175
|
+
* commands and the desktop bridge can deep-link to the Worktrees tab). */
|
|
176
|
+
changesPanelTab: 'changes' | 'worktrees';
|
|
177
|
+
setChangesPanelTab: (tab: 'changes' | 'worktrees') => void;
|
|
106
178
|
/** Persisted Settings panel scroll position and active category tab so the user
|
|
107
179
|
* returns to the exact location after navigating away and back. */
|
|
108
180
|
settingsActiveTab: string;
|
|
@@ -131,6 +203,20 @@ interface UIState {
|
|
|
131
203
|
/** Context breakdown modal (triggered from side-panel session panel). */
|
|
132
204
|
sideContextBreakdownOpen: boolean;
|
|
133
205
|
setSideContextBreakdownOpen: (open: boolean) => void;
|
|
206
|
+
chatSwitcherOpen: boolean;
|
|
207
|
+
chatCheckpointOpen: boolean;
|
|
208
|
+
chatMemoryPanelOpen: boolean;
|
|
209
|
+
chatContextBreakdownOpen: boolean;
|
|
210
|
+
chatContextEditorOpen: boolean;
|
|
211
|
+
chatToolStatsOpen: boolean;
|
|
212
|
+
chatInputCollapsed: boolean;
|
|
213
|
+
setChatSwitcherOpen: (open: boolean) => void;
|
|
214
|
+
setChatCheckpointOpen: (open: boolean) => void;
|
|
215
|
+
setChatMemoryPanelOpen: (open: boolean) => void;
|
|
216
|
+
setChatContextBreakdownOpen: (open: boolean) => void;
|
|
217
|
+
setChatContextEditorOpen: (open: boolean) => void;
|
|
218
|
+
setChatToolStatsOpen: (open: boolean) => void;
|
|
219
|
+
setChatInputCollapsed: (collapsed: boolean) => void;
|
|
134
220
|
/** Skills panel breadcrumb state — persisted so history survives panel switches. */
|
|
135
221
|
skillsState: {
|
|
136
222
|
/** The skill currently shown in the detail pane. */
|
|
@@ -206,6 +292,17 @@ interface UIState {
|
|
|
206
292
|
* enqueue path can forward them (mirrors the error/no-op paths in
|
|
207
293
|
* misc-handlers that pass refImages to enqueue). */
|
|
208
294
|
images?: QueuedItem['images'];
|
|
295
|
+
/**
|
|
296
|
+
* The tab this refinement belongs to.
|
|
297
|
+
*
|
|
298
|
+
* The panel is a single global surface sitting above one shared composer,
|
|
299
|
+
* but the text in it was typed in ONE tab. Approving it — or letting the
|
|
300
|
+
* countdown expire — sends through the foreground facade, so with four
|
|
301
|
+
* tabs open an unstamped panel could deliver tab 1's prompt into tab 2's
|
|
302
|
+
* session, without the user touching anything. ChatInput takes the panel
|
|
303
|
+
* down when the foreground leaves the tab that opened it.
|
|
304
|
+
*/
|
|
305
|
+
sessionId?: string | undefined;
|
|
209
306
|
} | null;
|
|
210
307
|
/** Prompt library modal (browse/search/insert prompts) open state. */
|
|
211
308
|
promptLibraryOpen: boolean;
|
|
@@ -241,6 +338,7 @@ interface UIState {
|
|
|
241
338
|
setRefinePanel: (panel: UIState['refinePanel']) => void;
|
|
242
339
|
setDockSection: (section: DockSection | null) => void;
|
|
243
340
|
setWorkDashboardTab: (tab: WorkDashboardTab) => void;
|
|
341
|
+
bindSessionChrome: (sessionId: string | null) => void;
|
|
244
342
|
/** Click-a-chip semantics: same section again collapses the dock. */
|
|
245
343
|
toggleDockSection: (section: DockSection) => void;
|
|
246
344
|
/** Show/hide a dock chip from the customization menu. */
|
|
@@ -252,8 +350,12 @@ interface UIState {
|
|
|
252
350
|
setAgentsMonitorOpen: (open: boolean) => void;
|
|
253
351
|
setInspectorOpen: (open: boolean) => void;
|
|
254
352
|
setInspectorTab: (tab: InspectorTab) => void;
|
|
353
|
+
openInspectorTarget: (target: InspectorTarget) => void;
|
|
354
|
+
closeInspector: () => void;
|
|
255
355
|
setInspectorFocusedAgentId: (id: string | null) => void;
|
|
256
|
-
setSubagentChatFocus: (id: string | null) => void;
|
|
356
|
+
setSubagentChatFocus: (id: string | null, sessionId?: string | null) => void;
|
|
357
|
+
/** Forget a closed tab's subagent focus so a reused id cannot inherit it. */
|
|
358
|
+
forgetSession: (sessionId: string) => void;
|
|
257
359
|
toggleInspector: () => void;
|
|
258
360
|
}
|
|
259
361
|
export declare const useUIStore: import("zustand").UseBoundStore<Omit<import("zustand").StoreApi<UIState>, "persist" | "setState"> & {
|
|
@@ -309,7 +411,7 @@ export declare const useUIStore: import("zustand").UseBoundStore<Omit<import("zu
|
|
|
309
411
|
/** Number of installed skills with a newer ref available than knownRefs. */
|
|
310
412
|
updateAvailableCount: number;
|
|
311
413
|
};
|
|
312
|
-
currentView: "analytics" | "changes" | "chat" | "chronicle" | "codemap" | "context" | "deadcode" | "debug" | "design-gallery" | "files" | "goal" | "intake" | "kanban" | "mailbox" | "memory" | "
|
|
414
|
+
currentView: "analytics" | "changes" | "chat" | "chimera" | "chronicle" | "codemap" | "context" | "deadcode" | "debug" | "design-gallery" | "files" | "goal" | "intake" | "kanban" | "mailbox" | "memory" | "prompts" | "refresh-debug" | "roster" | "sddhub" | "session-inspect" | "sessions" | "settings" | "setup" | "skill" | "techstack";
|
|
313
415
|
dockSection: DockSection | null;
|
|
314
416
|
settingsActiveTab: string;
|
|
315
417
|
scrollPositions: Record<string, number>;
|
|
@@ -368,7 +470,7 @@ export declare const useUIStore: import("zustand").UseBoundStore<Omit<import("zu
|
|
|
368
470
|
/** Number of installed skills with a newer ref available than knownRefs. */
|
|
369
471
|
updateAvailableCount: number;
|
|
370
472
|
};
|
|
371
|
-
currentView: "analytics" | "changes" | "chat" | "chronicle" | "codemap" | "context" | "deadcode" | "debug" | "design-gallery" | "files" | "goal" | "intake" | "kanban" | "mailbox" | "memory" | "
|
|
473
|
+
currentView: "analytics" | "changes" | "chat" | "chimera" | "chronicle" | "codemap" | "context" | "deadcode" | "debug" | "design-gallery" | "files" | "goal" | "intake" | "kanban" | "mailbox" | "memory" | "prompts" | "refresh-debug" | "roster" | "sddhub" | "session-inspect" | "sessions" | "settings" | "setup" | "skill" | "techstack";
|
|
372
474
|
dockSection: DockSection | null;
|
|
373
475
|
settingsActiveTab: string;
|
|
374
476
|
scrollPositions: Record<string, number>;
|