@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.
Files changed (362) hide show
  1. package/dist/assets/AgentRosterView-CESYPVXA.js +9 -0
  2. package/dist/assets/AnalyticsDashboard-zDBIqTxO.js +1 -0
  3. package/dist/assets/AudienceMemoryPanel-BnNJ0EhQ.js +3 -0
  4. package/dist/assets/ChangesView-CGwCocSR.js +1 -0
  5. package/dist/assets/ChimeraReviewsView-CFxZwJBI.js +1 -0
  6. package/dist/assets/ChronicleDashboard-DKiMK5nl.js +1 -0
  7. package/dist/assets/CodeEditor-CZcMPNTH.js +2 -0
  8. package/dist/assets/CodeMap-zPUlmh5G.js +1 -0
  9. package/dist/assets/ConfirmModal-CUGk-0lT.js +1 -0
  10. package/dist/assets/{CronJobsPanel-BzH_InFe.js → CronJobsPanel-C_wutCVP.js} +1 -1
  11. package/dist/assets/{DeadCodeScanPanel-Dj-5SAEE.js → DeadCodeScanPanel-DCCjg17Q.js} +2 -2
  12. package/dist/assets/{DebugDashboard-C-lpnxsJ.js → DebugDashboard-D-ogYAbO.js} +1 -1
  13. package/dist/assets/DesignGalleryView-CtlHZWOn.js +1 -0
  14. package/dist/assets/GoalView-Czksj2nD.js +1 -0
  15. package/dist/assets/KanbanView-C5_GD0qk.js +3 -0
  16. package/dist/assets/MailboxDetailView-2rWp3cTv.js +1 -0
  17. package/dist/assets/MemoryDrawer-D9Chtt6v.js +1 -0
  18. package/dist/assets/MemoryManager-Bj41s3KW.js +1 -0
  19. package/dist/assets/ModelPicker-vwrqLOL4.js +1 -0
  20. package/dist/assets/OfficeMapPanel-BfuePIGH.js +4 -0
  21. package/dist/assets/ProcessMonitor-CHPTCtyu.js +1 -0
  22. package/dist/assets/PromptJournalView-tOTjKpi8.js +1 -0
  23. package/dist/assets/QueuePanel-BIwoG-tG.js +1 -0
  24. package/dist/assets/RefreshDebugView-DesPEAAq.js +1 -0
  25. package/dist/assets/RequirementIntakeView-BonXC1a5.js +1 -0
  26. package/dist/assets/SageTabs-82lpgRh-.js +2 -0
  27. package/dist/assets/SddFlowGraph-CMedulJi.js +1 -0
  28. package/dist/assets/SddHub-D3Gm4Io2.js +2 -0
  29. package/dist/assets/SessionInspectView-BUs2B4mF.js +1 -0
  30. package/dist/assets/SessionList-DxQgJqgl.js +1 -0
  31. package/dist/assets/SessionsDashboard-JtwQf-N5.js +1 -0
  32. package/dist/assets/SetupScreen-XFBFjPbd.js +1 -0
  33. package/dist/assets/SkillDetailView-C_P_-783.js +3 -0
  34. package/dist/assets/{SpecsView-B9Aj1qpe.js → SpecsView-D6GqoZ2L.js} +1 -1
  35. package/dist/assets/TechStackView-BE4tdEYZ.js +2 -0
  36. package/dist/assets/TerminalPanel-BcizpYrZ.js +1 -0
  37. package/dist/assets/activity-B2_Vr2oD.js +10 -0
  38. package/dist/assets/activity-BF1idM4Y.js +10 -0
  39. package/dist/assets/activity-C-kOJZXC.js +10 -0
  40. package/dist/assets/activity-DPpMW8BU.js +10 -0
  41. package/dist/assets/activity-DYMBKGt0.js +10 -0
  42. package/dist/assets/activity-IxgYWPDt.js +10 -0
  43. package/dist/assets/activity-q85HXQNv.js +10 -0
  44. package/dist/assets/{button-Dhmop_yM.js → button-C_EYpeP-.js} +1 -1
  45. package/dist/assets/{chat-CR2B97dj.js → chat-B5a3cvps.js} +1 -1
  46. package/dist/assets/{chat-DResBrkV.js → chat-B60h8Cji.js} +1 -1
  47. package/dist/assets/{chat-BnkVCZ3Q.js → chat-BNWqeV-N.js} +1 -1
  48. package/dist/assets/chat-BlllxfpP.js +1 -0
  49. package/dist/assets/{chat-BfQBSiII.js → chat-BvKkSd09.js} +1 -1
  50. package/dist/assets/{chat-BPuAsrkF.js → chat-DTI7lNDx.js} +1 -1
  51. package/dist/assets/{chat-Di8o0wDz.js → chat-DlhXGxxi.js} +1 -1
  52. package/dist/assets/chat-store-x5w4ss_D.js +1 -0
  53. package/dist/assets/{codemap-activity-store-BWt_a7Gs.js → codemap-activity-store-ZCXcHlwd.js} +1 -1
  54. package/dist/assets/codemap-index-store-Cb5mn74P.js +1 -0
  55. package/dist/assets/{dialog-DPl7DolS.js → dialog-9eW9sG90.js} +1 -1
  56. package/dist/assets/{empty-state-IT10GzRA.js → empty-state-DJb_tw7Q.js} +1 -1
  57. package/dist/assets/i18n-DkMSw3tI.js +2 -0
  58. package/dist/assets/index-BSpLtv9S.css +1 -0
  59. package/dist/assets/index-CTyM4bm8.js +137 -0
  60. package/dist/assets/{input-C3rIQ26u.js → input-CsEvo8Oo.js} +1 -1
  61. package/dist/assets/{mailbox-store-DhAVkVJQ.js → mailbox-store-KHcrg_Fm.js} +1 -1
  62. package/dist/assets/{roster-ws-Ch6O90eT.js → roster-ws-CXnrEaEu.js} +1 -1
  63. package/dist/assets/settings-1o1gooaL.js +1 -0
  64. package/dist/assets/settings-BGvRM3vJ.js +1 -0
  65. package/dist/assets/{settings-BV1_j8_-.js → settings-BV8EFmpH.js} +1 -1
  66. package/dist/assets/settings-Ci_RMpCQ.js +1 -0
  67. package/dist/assets/settings-Cy_xp4Jt.js +1 -0
  68. package/dist/assets/settings-D-LlBmzO.js +1 -0
  69. package/dist/assets/settings-nWMBX3xS.js +1 -0
  70. package/dist/assets/{shared-BUXBOqyO.js → shared-sYlGVRJI.js} +1 -1
  71. package/dist/assets/stores-5ynEAenb.js +7 -0
  72. package/dist/assets/toasts-BsmyGP95.js +1 -0
  73. package/dist/assets/toasts-CgXHu8ZB.js +1 -0
  74. package/dist/assets/toasts-DZ6HdKgG.js +1 -0
  75. package/dist/assets/toasts-DizCJjAR.js +1 -0
  76. package/dist/assets/toasts-NC2MT4uN.js +1 -0
  77. package/dist/assets/toasts-bPl097de.js +1 -0
  78. package/dist/assets/toasts-tCVo15mP.js +1 -0
  79. package/dist/assets/ui-store-9b7zzi3V.js +1 -0
  80. package/dist/assets/useWebSocket-1kxFH7f8.js +27 -0
  81. package/dist/assets/utils-DIo8iytt.js +1 -0
  82. package/dist/assets/{vector-memory-panel-CBA4CK6N.js → vector-memory-panel-Dd3jXXYA.js} +1 -1
  83. package/dist/assets/{vendor-DZ9_OO6N.js → vendor-UFryhfbN.js} +30 -30
  84. package/dist/assets/view-navigation-ICwpL9qw.js +1 -0
  85. package/dist/assets/ws-client-Ccf_VLRQ.js +22 -0
  86. package/dist/components/AgentOfficeView/model.d.ts +4 -3
  87. package/dist/components/AgentRosterView.d.ts +8 -1
  88. package/dist/components/ChatInput/composer-button-bar.d.ts +6 -2
  89. package/dist/components/ChatInput/image-attachments.d.ts +2 -1
  90. package/dist/components/ChatInput/next-steps-helpers.d.ts +0 -16
  91. package/dist/components/ChatInput/refine-panel-host.d.ts +2 -2
  92. package/dist/components/ChatInput/session-effort-select.d.ts +16 -0
  93. package/dist/components/ChatInput/slash-commands.d.ts +2 -1
  94. package/dist/components/ChatInput/slash-routing.d.ts +8 -0
  95. package/dist/components/ChatInput/use-chat-input-mcp.d.ts +2 -1
  96. package/dist/components/ChatInput/use-paste-drop.d.ts +2 -1
  97. package/dist/components/ChatInput/use-refine-timeout.d.ts +2 -1
  98. package/dist/components/ChatInput/use-speech-recognition.d.ts +9 -0
  99. package/dist/components/ChatView/AgentTabs.d.ts +1 -1
  100. package/dist/components/ChatView/BrainDecisionCard.d.ts +9 -0
  101. package/dist/components/ChatView/ChatHeader.d.ts +3 -3
  102. package/dist/components/ChatView/ChatRowView.d.ts +3 -1
  103. package/dist/components/ChatView/ChimeraReportCard.d.ts +22 -0
  104. package/dist/components/ChatView/CouncilDecisionCard.d.ts +9 -0
  105. package/dist/components/ChatView/auto-collapse.d.ts +2 -1
  106. package/dist/components/ChatView/useChatViewState.d.ts +14 -28
  107. package/dist/components/ChatView/utils.d.ts +2 -1
  108. package/dist/components/ChimeraReviewsView.d.ts +2 -0
  109. package/dist/components/CodeMapActivityStreamPanel.d.ts +2 -1
  110. package/dist/components/CodeMapDirectoryTree.d.ts +2 -1
  111. package/dist/components/CodeMapLiveOverlay.d.ts +0 -3
  112. package/dist/components/CodeMapSelectedNodeSummary.d.ts +2 -1
  113. package/dist/components/CollabPanel.d.ts +2 -7
  114. package/dist/components/ConfirmModal.d.ts +6 -13
  115. package/dist/components/CronJobsPanel.d.ts +2 -1
  116. package/dist/components/CustomRosterPanel.d.ts +0 -1
  117. package/dist/components/DependencyGraph.d.ts +2 -1
  118. package/dist/components/FileActivityDrawer.d.ts +2 -2
  119. package/dist/components/FileExplorer/FileExplorerModals.d.ts +11 -6
  120. package/dist/components/FileExplorer/TreeRow.d.ts +2 -6
  121. package/dist/components/FileExplorer/tree-helpers.d.ts +7 -0
  122. package/dist/components/FleetPanel.d.ts +4 -13
  123. package/dist/components/InspectorPanel.d.ts +6 -1
  124. package/dist/components/KanbanBoardSidebar.d.ts +2 -1
  125. package/dist/components/KanbanBoardState.d.ts +1 -1
  126. package/dist/components/KanbanContractGraphView.d.ts +3 -2
  127. package/dist/components/KanbanQueueHealthBar.d.ts +2 -1
  128. package/dist/components/KanbanTaskActivityRecorder.d.ts +2 -1
  129. package/dist/components/MemoryManager/MemoryDetail.d.ts +2 -1
  130. package/dist/components/MemoryManager/MemoryEditor.d.ts +2 -1
  131. package/dist/components/MemoryManager/MemoryFilters.d.ts +2 -1
  132. package/dist/components/MemoryManager/MemoryList.d.ts +2 -1
  133. package/dist/components/MemoryManager/MemorySearchBreakdown.d.ts +2 -1
  134. package/dist/components/MemoryManager/ReviewQueue.d.ts +2 -1
  135. package/dist/components/MemoryManager/SageTabs.d.ts +2 -1
  136. package/dist/components/MemoryManager/shared.d.ts +0 -1
  137. package/dist/components/MessageBubble/FailedRunContinue.d.ts +12 -0
  138. package/dist/components/MessageBubble/utils.d.ts +6 -0
  139. package/dist/components/ModelPickDialog.d.ts +1 -1
  140. package/dist/components/ModelSelectDialog.d.ts +4 -3
  141. package/dist/components/NextStepsBar.d.ts +1 -6
  142. package/dist/components/NotificationMenu.d.ts +6 -0
  143. package/dist/components/OfficeMapCanvas/edges.d.ts +0 -6
  144. package/dist/components/OfficeMapCanvas/nodes.d.ts +0 -32
  145. package/dist/components/OfficeMapCanvas/use-recently-finished.d.ts +2 -1
  146. package/dist/components/OfficeMapCanvas/utils.d.ts +4 -10
  147. package/dist/components/ProcessMonitor.d.ts +2 -1
  148. package/dist/components/ProviderWaitingRoom.d.ts +8 -0
  149. package/dist/components/QueuePanel.d.ts +1 -1
  150. package/dist/components/QuickModelSwitcher.filter.d.ts +23 -7
  151. package/dist/components/RestoreTabsModal.d.ts +20 -0
  152. package/dist/components/SddFlowGraph.d.ts +3 -2
  153. package/dist/components/SessionTabBar/TabMap.d.ts +19 -0
  154. package/dist/components/SessionTabBar/summaries.d.ts +39 -0
  155. package/dist/components/SessionTabBar.d.ts +14 -0
  156. package/dist/components/SettingsPanel/ClearAllowlistDialog.d.ts +2 -1
  157. package/dist/components/SettingsPanel/ModelCatalogPicker.d.ts +2 -14
  158. package/dist/components/SettingsPanel/ModelEffortSelect.d.ts +12 -0
  159. package/dist/components/SettingsPanel/ModelListEditor.d.ts +2 -1
  160. package/dist/components/SettingsPanel/ModelSchemaEditor.d.ts +2 -1
  161. package/dist/components/SettingsPanel/ModelSection.d.ts +3 -1
  162. package/dist/components/SettingsPanel/ModelTiersSection.d.ts +7 -0
  163. package/dist/components/SettingsPanel/OAuthLoginSection.d.ts +2 -2
  164. package/dist/components/SettingsPanel/PluginToggleList.d.ts +3 -1
  165. package/dist/components/SettingsPanel/ProviderModelsPanel.d.ts +2 -1
  166. package/dist/components/SettingsPanel/ProviderModelsPanel.filter.d.ts +2 -1
  167. package/dist/components/SettingsPanel/ProviderSection.d.ts +2 -2
  168. package/dist/components/SettingsPanel/ToolsSection.d.ts +0 -10
  169. package/dist/components/SettingsPanel/brain-section-options.d.ts +3 -10
  170. package/dist/components/SettingsPanel/contracts.d.ts +5 -3
  171. package/dist/components/SettingsPanel/sync-settings-preference.d.ts +8 -0
  172. package/dist/components/SettingsPanel/undo-send-decision.d.ts +2 -1
  173. package/dist/components/SidePanel/ChangesPanel.d.ts +0 -6
  174. package/dist/components/SidePanel/DesignStudioPanel.d.ts +7 -0
  175. package/dist/components/SidePanel/SessionList.d.ts +6 -6
  176. package/dist/components/SystemPromptDialog.d.ts +18 -0
  177. package/dist/components/TaskActivityTimeline.d.ts +3 -3
  178. package/dist/components/TaskBoard.d.ts +1 -1
  179. package/dist/components/TaskCard.d.ts +2 -7
  180. package/dist/components/TaskExecutionAttempts.d.ts +2 -1
  181. package/dist/components/TaskIntelligencePanel.d.ts +1 -1
  182. package/dist/components/TaskRiskPanel.d.ts +4 -3
  183. package/dist/components/TechStackView/DependencyDetail.d.ts +2 -1
  184. package/dist/components/TechStackView/DependencyTable.d.ts +2 -1
  185. package/dist/components/TechStackView/FindingsPanel.d.ts +2 -1
  186. package/dist/components/TechStackView/TechStackToolbar.d.ts +2 -1
  187. package/dist/components/TechStackView/shared.d.ts +5 -5
  188. package/dist/components/Toaster.d.ts +3 -31
  189. package/dist/components/ToolStatsModal.d.ts +15 -0
  190. package/dist/components/UpdateBanner.d.ts +6 -4
  191. package/dist/components/WorkbenchTopbar.d.ts +1 -3
  192. package/dist/components/agent-roster-data.d.ts +1 -1
  193. package/dist/components/agents/AgentDetailSection.d.ts +2 -1
  194. package/dist/components/agents/AgentRosterCard.d.ts +2 -1
  195. package/dist/components/agents/FleetSummaryBar.d.ts +6 -3
  196. package/dist/components/codemap-model.d.ts +3 -2
  197. package/dist/components/ui/PickerCardList.d.ts +3 -2
  198. package/dist/components/ui/badge.d.ts +2 -2
  199. package/dist/components/ui/button.d.ts +2 -2
  200. package/dist/components/ui/concurrency-gauge.d.ts +2 -1
  201. package/dist/components/ui/dialog.d.ts +5 -5
  202. package/dist/components/ui/dropdown-menu.d.ts +8 -8
  203. package/dist/components/ui/event-timeline.d.ts +2 -1
  204. package/dist/components/ui/fleet-agent-row.d.ts +2 -7
  205. package/dist/components/ui/scroll-area.d.ts +2 -2
  206. package/dist/components/ui/sheet.d.ts +2 -2
  207. package/dist/components/ui/sparkline.d.ts +2 -1
  208. package/dist/components/vector-memory-panel/model.d.ts +2 -7
  209. package/dist/hooks/index.d.ts +1 -0
  210. package/dist/hooks/useDesktopBridge.d.ts +2 -1
  211. package/dist/hooks/useF5Resilience.d.ts +0 -14
  212. package/dist/hooks/useFleetPolling.d.ts +2 -1
  213. package/dist/hooks/useGlobalKeyboardShortcuts.d.ts +4 -1
  214. package/dist/hooks/useIntegrationStatus.d.ts +10 -0
  215. package/dist/hooks/useKanbanMeta.d.ts +4 -3
  216. package/dist/hooks/useLiveContextDebug.d.ts +4 -3
  217. package/dist/hooks/useMemoryForFile.d.ts +3 -2
  218. package/dist/hooks/usePagination.d.ts +2 -1
  219. package/dist/hooks/useProviderModels.d.ts +1 -0
  220. package/dist/hooks/useSessionSubscription.d.ts +15 -0
  221. package/dist/hooks/useViewport.d.ts +2 -3
  222. package/dist/hooks/useWebSocket.d.ts +6 -1
  223. package/dist/hooks/ws-handlers/chat-handlers.d.ts +22 -10
  224. package/dist/hooks/ws-handlers/coordinator-handlers.d.ts +7 -0
  225. package/dist/hooks/ws-handlers/files-mailbox-handlers.d.ts +1 -3
  226. package/dist/hooks/ws-handlers/misc-handlers.d.ts +22 -0
  227. package/dist/hooks/ws-handlers/session-context-handlers.d.ts +24 -2
  228. package/dist/hooks/ws-handlers/session-execution-handlers.d.ts +12 -0
  229. package/dist/hooks/ws-handlers/session-handlers.d.ts +3 -3
  230. package/dist/hooks/ws-handlers/session-replay-handlers.d.ts +31 -2
  231. package/dist/hooks/ws-handlers/techstack-handlers.d.ts +0 -3
  232. package/dist/index.html +30 -26
  233. package/dist/index.js +77572 -66789
  234. package/dist/lib/agent-office.d.ts +3 -3
  235. package/dist/lib/agent-session.d.ts +19 -0
  236. package/dist/lib/agent-status.d.ts +5 -4
  237. package/dist/lib/completion.d.ts +3 -2
  238. package/dist/lib/delegate-format.d.ts +33 -0
  239. package/dist/lib/favicon.d.ts +2 -1
  240. package/dist/lib/kanban-verification.d.ts +3 -2
  241. package/dist/lib/model-matrix-routes.d.ts +3 -3
  242. package/dist/lib/plugin-enablement.d.ts +1 -1
  243. package/dist/lib/reasoning-effort.d.ts +76 -0
  244. package/dist/lib/sdd-theme.d.ts +4 -3
  245. package/dist/lib/task-brief-preview.d.ts +5 -0
  246. package/dist/lib/terminal-dock.d.ts +0 -1
  247. package/dist/lib/view-navigation.d.ts +2 -2
  248. package/dist/lib/ws-client-actions.d.ts +1 -0
  249. package/dist/lib/ws-client-domain-methods.d.ts +45 -5
  250. package/dist/lib/ws-client-utils.d.ts +33 -0
  251. package/dist/lib/ws-client.d.ts +135 -6
  252. package/dist/manifest.json +17 -0
  253. package/dist/protocol-compatibility.d.ts +0 -10
  254. package/dist/stores/auto-submit-streak.d.ts +3 -1
  255. package/dist/stores/chat-lanes.d.ts +279 -0
  256. package/dist/stores/chat-retention.d.ts +2 -4
  257. package/dist/stores/chat-store-types.d.ts +1 -0
  258. package/dist/stores/chat-store.d.ts +46 -25
  259. package/dist/stores/chimera-hub-store.d.ts +140 -0
  260. package/dist/stores/chimera-reports-store.d.ts +45 -0
  261. package/dist/stores/codemap-activity-store.d.ts +4 -4
  262. package/dist/stores/context-editor-store.d.ts +4 -5
  263. package/dist/stores/coordinator-monitor-store.d.ts +3 -2
  264. package/dist/stores/council-log-store.d.ts +6 -20
  265. package/dist/stores/file-store.d.ts +32 -13
  266. package/dist/stores/fleet-store.d.ts +49 -5
  267. package/dist/stores/git-changes-store.d.ts +25 -1
  268. package/dist/stores/goal-run-store.d.ts +2 -2
  269. package/dist/stores/history-store.d.ts +11 -0
  270. package/dist/stores/index.d.ts +17 -9
  271. package/dist/stores/local-prefs.d.ts +87 -0
  272. package/dist/stores/mailbox-store.d.ts +2 -2
  273. package/dist/stores/memory-injector-store.d.ts +2 -2
  274. package/dist/stores/memory-lifecycle-store.d.ts +6 -2
  275. package/dist/stores/monitor-store.d.ts +3 -2
  276. package/dist/stores/notification-store.d.ts +141 -0
  277. package/dist/stores/provider-status-store.d.ts +19 -0
  278. package/dist/stores/restore-tabs-store.d.ts +29 -0
  279. package/dist/stores/resume-progress-store.d.ts +58 -0
  280. package/dist/stores/session-inspect-store.d.ts +1 -1
  281. package/dist/stores/session-lanes.d.ts +242 -0
  282. package/dist/stores/session-scoped-store.d.ts +56 -0
  283. package/dist/stores/session-store.d.ts +97 -154
  284. package/dist/stores/session-tab-store.d.ts +197 -0
  285. package/dist/stores/side-effect-store.d.ts +9 -1
  286. package/dist/stores/system-prompt-store.d.ts +48 -0
  287. package/dist/stores/tool-stats-store.d.ts +52 -0
  288. package/dist/stores/types.d.ts +81 -4
  289. package/dist/stores/ui-store.d.ts +113 -11
  290. package/dist/types/brain.d.ts +17 -16
  291. package/dist/types/chronicle.d.ts +3 -2
  292. package/dist/types/client-message.d.ts +139 -23
  293. package/dist/types/collab.d.ts +0 -2
  294. package/dist/types/protocol-core.d.ts +62 -6
  295. package/dist/types/server-message.d.ts +204 -3
  296. package/dist/types/skills-design.d.ts +2 -1
  297. package/package.json +11 -11
  298. package/dist/assets/AgentRosterView-p5iiedCA.js +0 -9
  299. package/dist/assets/AnalyticsDashboard-B0sbSAxw.js +0 -1
  300. package/dist/assets/AudienceMemoryPanel-DcDONq7t.js +0 -3
  301. package/dist/assets/ChangesView-CD3JR3qY.js +0 -1
  302. package/dist/assets/ChronicleDashboard-3tJUiU7K.js +0 -1
  303. package/dist/assets/CodeEditor-0RJa9mSq.js +0 -2
  304. package/dist/assets/CodeMap-BvqQN6MG.js +0 -1
  305. package/dist/assets/ConfirmModal-CRSE2t_c.js +0 -1
  306. package/dist/assets/DesignGalleryView-BKl6Ce71.js +0 -1
  307. package/dist/assets/GoalView-Db55m-Nq.js +0 -1
  308. package/dist/assets/KanbanView-BQ7duNsz.js +0 -3
  309. package/dist/assets/MailboxDetailView-CgHzqllF.js +0 -1
  310. package/dist/assets/MemoryDrawer-BNTsi4jl.js +0 -1
  311. package/dist/assets/MemoryManager-B4NAvfYx.js +0 -1
  312. package/dist/assets/ModelPicker-BtK3pwfC.js +0 -1
  313. package/dist/assets/OfficeMapPanel-Bk9q12hP.js +0 -4
  314. package/dist/assets/ProcessMonitor-BTndLGIV.js +0 -1
  315. package/dist/assets/PromptJournalView-DbwN6AWe.js +0 -1
  316. package/dist/assets/QueuePanel-Cb1mIIuO.js +0 -1
  317. package/dist/assets/RefreshDebugView-CzGncYqB.js +0 -1
  318. package/dist/assets/RequirementIntakeView-BgKJbUlD.js +0 -1
  319. package/dist/assets/SageTabs-mB6lxkdD.js +0 -2
  320. package/dist/assets/SddFlowGraph-C484p5L9.js +0 -1
  321. package/dist/assets/SddHub-DsD8ORZo.js +0 -2
  322. package/dist/assets/SessionInspectView-DtM6MBbL.js +0 -1
  323. package/dist/assets/SessionList-CCaEa3iW.js +0 -1
  324. package/dist/assets/SessionsDashboard-CxatSEv6.js +0 -1
  325. package/dist/assets/SetupScreen-CBkuOnoN.js +0 -1
  326. package/dist/assets/SkillDetailView-DKVIAnwb.js +0 -3
  327. package/dist/assets/TechStackView-B6WDU-tt.js +0 -2
  328. package/dist/assets/TerminalPanel-Dfkt3xtA.js +0 -1
  329. package/dist/assets/Toaster-CcgCyzaU.js +0 -1
  330. package/dist/assets/activity-BA8C9ueU.js +0 -9
  331. package/dist/assets/activity-BYnOci5N.js +0 -9
  332. package/dist/assets/activity-COQ9xSFu.js +0 -9
  333. package/dist/assets/activity-CuJqhGz7.js +0 -9
  334. package/dist/assets/activity-D3ZccGOh.js +0 -9
  335. package/dist/assets/activity-YMES6OPI.js +0 -9
  336. package/dist/assets/activity-zlMMaNE1.js +0 -9
  337. package/dist/assets/chat-CzaGXz_W.js +0 -1
  338. package/dist/assets/chat-store-BiEXyguk.js +0 -17
  339. package/dist/assets/codemap-index-store-CDhApwWQ.js +0 -1
  340. package/dist/assets/i18n-BeHaHx3x.js +0 -2
  341. package/dist/assets/index-B8J_xxU5.css +0 -1
  342. package/dist/assets/index-BLI23QVE.js +0 -134
  343. package/dist/assets/session-store-CKpAwNIm.js +0 -1
  344. package/dist/assets/settings-BNbqEBSr.js +0 -1
  345. package/dist/assets/settings-BsZgLIo2.js +0 -1
  346. package/dist/assets/settings-C3OnmFrY.js +0 -1
  347. package/dist/assets/settings-C3bNf1Bx.js +0 -1
  348. package/dist/assets/settings-C9FOpDBt.js +0 -1
  349. package/dist/assets/settings-oeXlO4HA.js +0 -1
  350. package/dist/assets/stores-BskP1BVl.js +0 -7
  351. package/dist/assets/toasts-BCDGDcyq.js +0 -1
  352. package/dist/assets/toasts-BwQJwYLe.js +0 -1
  353. package/dist/assets/toasts-CFzweRH5.js +0 -1
  354. package/dist/assets/toasts-DDYQsJV8.js +0 -1
  355. package/dist/assets/toasts-DOfXc7Rt.js +0 -1
  356. package/dist/assets/toasts-Dm12Nq8t.js +0 -1
  357. package/dist/assets/toasts-frBt6fvE.js +0 -1
  358. package/dist/assets/ui-store-3HoYrTu5.js +0 -1
  359. package/dist/assets/useWebSocket-6jp275vG.js +0 -29
  360. package/dist/assets/utils-BecmXwgG.js +0 -1
  361. package/dist/assets/view-navigation-C1UDTk5R.js +0 -1
  362. 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
- export declare const useSideEffectStore: import("zustand").UseBoundStore<import("zustand").StoreApi<SideEffectState>>;
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
@@ -1,7 +1,22 @@
1
- import type { ContentBlock, Usage } from '@wrongstack/core/types';
2
- export interface MessageContent {
3
- role: 'user' | 'assistant' | 'system' | 'tool';
4
- content: string | ContentBlock[];
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
- import type { ImageAttachment } from '../components/ChatInput/image-attachments.js';
4
- export type Activity = 'chat' | 'agents' | 'files' | 'changes' | 'mailbox' | 'skills' | 'design' | 'worktrees' | 'officemap';
5
- /** Map any persisted (possibly legacy) activity value onto the current set. */
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', 'officemap', 'mailbox', 'debug', 'design-gallery', 'refresh-debug', 'analytics', 'codemap', 'techstack', 'chronicle', 'intake', 'deadcode', 'prompts'];
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" | "officemap" | "prompts" | "refresh-debug" | "roster" | "sddhub" | "session-inspect" | "sessions" | "settings" | "setup" | "skill" | "techstack";
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" | "officemap" | "prompts" | "refresh-debug" | "roster" | "sddhub" | "session-inspect" | "sessions" | "settings" | "setup" | "skill" | "techstack";
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>;