@wrongstack/webui 0.319.1 → 1.0.1

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 (207) hide show
  1. package/dist/assets/AgentRosterView-BXURTwLP.js +12 -0
  2. package/dist/assets/AnalyticsDashboard-yAGcObTd.js +1 -0
  3. package/dist/assets/AudienceMemoryPanel-BwtB_jYJ.js +3 -0
  4. package/dist/assets/ChangesView-BgC27G9n.js +1 -0
  5. package/dist/assets/ChimeraReviewsView-BZ3kmsEA.js +1 -0
  6. package/dist/assets/ChronicleDashboard-DVor6J-y.js +1 -0
  7. package/dist/assets/CodeEditor-Dk2WJQks.js +2 -0
  8. package/dist/assets/CodeMap-CjWRQ37U.js +1 -0
  9. package/dist/assets/ConfirmModal-C_KAUjBK.js +1 -0
  10. package/dist/assets/CronJobsPanel-CGq8lhRJ.js +1 -0
  11. package/dist/assets/{DeadCodeScanPanel-DooqnEMF.js → DeadCodeScanPanel-CcPRcYm0.js} +1 -1
  12. package/dist/assets/DebugDashboard-B-aDaDrO.js +1 -0
  13. package/dist/assets/DesignGalleryView-Ex3zW5ci.js +1 -0
  14. package/dist/assets/GoalView-CBDc5nCD.js +1 -0
  15. package/dist/assets/KanbanView-azjPGLmM.js +3 -0
  16. package/dist/assets/MailboxDetailView-BXW9zqle.js +1 -0
  17. package/dist/assets/MemoryDrawer-CyN_6CRo.js +1 -0
  18. package/dist/assets/MemoryManager-BLu0rLEm.js +1 -0
  19. package/dist/assets/ModelPicker-CXQR8UbH.js +1 -0
  20. package/dist/assets/ProcessMonitor-CBIQkbLx.js +1 -0
  21. package/dist/assets/PromptJournalView-C6O40uTv.js +1 -0
  22. package/dist/assets/QueuePanel-CutrvgTH.js +1 -0
  23. package/dist/assets/RefreshDebugView-DDFD26EI.js +1 -0
  24. package/dist/assets/RequirementIntakeView-BpFyFOlB.js +1 -0
  25. package/dist/assets/SageTabs-Cx299O-q.js +2 -0
  26. package/dist/assets/SddFlowGraph-CJjawf9r.js +1 -0
  27. package/dist/assets/SddHub-CmSlkvkM.js +2 -0
  28. package/dist/assets/SessionInspectView-CtrlRlJu.js +1 -0
  29. package/dist/assets/SessionList-BWoK6Ro5.js +1 -0
  30. package/dist/assets/SessionsDashboard-7C6Fj9pK.js +1 -0
  31. package/dist/assets/SetupScreen-IzaqHJ_O.js +1 -0
  32. package/dist/assets/SkillDetailView-C5nOcysX.js +3 -0
  33. package/dist/assets/TechStackView-DkNjeYPK.js +2 -0
  34. package/dist/assets/TerminalPanel-CTr-KAnH.js +1 -0
  35. package/dist/assets/{activity-C7dkJqBU.js → activity-87Kr1xrI.js} +2 -2
  36. package/dist/assets/{activity-D1rp3dH9.js → activity-CCW2-qSA.js} +2 -2
  37. package/dist/assets/activity-CXLMCm4J.js +10 -0
  38. package/dist/assets/{activity-BU6MNvBJ.js → activity-CmzV075e.js} +2 -2
  39. package/dist/assets/{activity-C_18AaRY.js → activity-D2D6_ljD.js} +2 -2
  40. package/dist/assets/{activity-CpnSsE22.js → activity-Dt348P4m.js} +2 -2
  41. package/dist/assets/{activity-hTPcI4q1.js → activity-FxWZooaS.js} +2 -2
  42. package/dist/assets/button-rqi3MczV.js +1 -0
  43. package/dist/assets/chat-store-BbBGSliF.js +1 -0
  44. package/dist/assets/{codemap-activity-store-Br4b57a0.js → codemap-activity-store-CWi-Yd9Z.js} +1 -1
  45. package/dist/assets/codemap-index-store-3M7F08K_.js +1 -0
  46. package/dist/assets/dialog-xJxaQi60.js +1 -0
  47. package/dist/assets/empty-state-BxilAuC3.js +1 -0
  48. package/dist/assets/i18n-tRUjoMoU.js +2 -0
  49. package/dist/assets/index-BnpuNJ9u.js +144 -0
  50. package/dist/assets/input-ClZR-odw.js +1 -0
  51. package/dist/assets/{mailbox-store-B9DIvRgo.js → mailbox-store-yydAVjyj.js} +1 -1
  52. package/dist/assets/{markdown-Kp5uSgOw.js → markdown-BP6Z3HKc.js} +24 -24
  53. package/dist/assets/{monaco-BCqJp2xW.js → monaco-_kWjHrlo.js} +204 -204
  54. package/dist/assets/{monaco-theme-CR1QvFi2.js → monaco-theme-Dmx6JuoU.js} +1 -1
  55. package/dist/assets/react-core-BNmTiJ-I.js +9 -0
  56. package/dist/assets/{roster-ws-BQUI8QuW.js → roster-ws-B4xVrXos.js} +1 -1
  57. package/dist/assets/{settings-BGvRM3vJ.js → settings-B1vpPbTt.js} +1 -1
  58. package/dist/assets/{settings-D-LlBmzO.js → settings-BZnHCnGT.js} +1 -1
  59. package/dist/assets/{settings-1o1gooaL.js → settings-BcB2BIE2.js} +1 -1
  60. package/dist/assets/{settings-Cy_xp4Jt.js → settings-D9AQ5wLT2.js} +1 -1
  61. package/dist/assets/{settings-BV8EFmpH.js → settings-DiVpBZQ2.js} +1 -1
  62. package/dist/assets/{settings-nWMBX3xS.js → settings-DwbEJvxt.js} +1 -1
  63. package/dist/assets/settings-WuyKla3E.js +1 -0
  64. package/dist/assets/setup-B-xPcuTH.js +1 -0
  65. package/dist/assets/setup-B9oerXTs.js +1 -0
  66. package/dist/assets/setup-BWlr07i_.js +1 -0
  67. package/dist/assets/setup-CQ4-lz5u.js +1 -0
  68. package/dist/assets/setup-Cmq_aIjv.js +1 -0
  69. package/dist/assets/setup-DK5JTuqw.js +1 -0
  70. package/dist/assets/setup-qooXjj4V.js +1 -0
  71. package/dist/assets/shared-D8dubdNH.js +1 -0
  72. package/dist/assets/stores-B7GcARdp.js +7 -0
  73. package/dist/assets/ui-store-CLXDcLPI.js +1 -0
  74. package/dist/assets/useWebSocket-L5s7ggJm.js +27 -0
  75. package/dist/assets/{utils-DQ9Exx8j.js → utils-BpBOwXlT.js} +1 -1
  76. package/dist/assets/vector-memory-panel-BwPPCCbh.js +1 -0
  77. package/dist/assets/{vendor-BMdWcCR4.css → vendor-BShi5_Dg.css} +1 -1
  78. package/dist/assets/vendor-BshlG0z-.js +125 -0
  79. package/dist/assets/view-navigation-CvWJeGMc.js +1 -0
  80. package/dist/assets/vite-preload-Czpn1I53.js +1 -0
  81. package/dist/assets/ws-client-BR51gfnV.js +22 -0
  82. package/dist/assets/xyflow-BNn76cbK.js +7 -0
  83. package/dist/assets/xyflow-DLioOiRN.css +1 -0
  84. package/dist/components/AgentOfficeView/AgentLane.d.ts +10 -0
  85. package/dist/components/AgentOfficeView/BreakRoom.d.ts +10 -0
  86. package/dist/components/AgentOfficeView/ClientOfficeHeader.d.ts +6 -0
  87. package/dist/components/AgentOfficeView/OfficeBriefing.d.ts +8 -0
  88. package/dist/components/AgentOfficeView/parcels.d.ts +27 -0
  89. package/dist/components/AgentOfficeView.d.ts +2 -10
  90. package/dist/components/ChatInput/chat-input-bars.d.ts +30 -0
  91. package/dist/components/ChatInput/session-draft.d.ts +46 -0
  92. package/dist/components/ChatInput/use-chat-keydown.d.ts +21 -0
  93. package/dist/components/ChatInput/use-chat-submit.d.ts +40 -0
  94. package/dist/components/ChatInput/use-paste-drop.d.ts +1 -1
  95. package/dist/components/ChatInput.d.ts +3 -3
  96. package/dist/components/FileActivityDrawer/ContextTab.d.ts +21 -0
  97. package/dist/components/FileActivityDrawer/LogsTab.d.ts +13 -0
  98. package/dist/components/FileActivityDrawer/OverviewTab.d.ts +14 -0
  99. package/dist/components/FileActivityDrawer/SkeletonTab.d.ts +5 -0
  100. package/dist/components/FileActivityDrawer/types.d.ts +58 -0
  101. package/dist/components/FileActivityDrawer.d.ts +1 -40
  102. package/dist/components/MainViewSlot.d.ts +16 -0
  103. package/dist/components/MemoryManager/DeleteMemoryDialog.d.ts +3 -2
  104. package/dist/components/SettingsPanel/brain-section-options.d.ts +6 -0
  105. package/dist/components/ViewRouter.d.ts +12 -4
  106. package/dist/components/view-registry.d.ts +73 -0
  107. package/dist/hooks/useServerMessage.d.ts +71 -0
  108. package/dist/hooks/ws-handlers/session-context-handlers.d.ts +20 -0
  109. package/dist/index.css +788 -788
  110. package/dist/index.html +25 -25
  111. package/dist/index.js +81203 -80204
  112. package/dist/lib/platform.d.ts +40 -0
  113. package/dist/lib/view-navigation.d.ts +27 -2
  114. package/dist/lib/ws-client-auth.d.ts +17 -0
  115. package/dist/lib/ws-client-connection.d.ts +26 -0
  116. package/dist/lib/ws-client-contracts.d.ts +10 -0
  117. package/dist/lib/ws-client-echo.d.ts +46 -0
  118. package/dist/lib/ws-client-queue.d.ts +18 -0
  119. package/dist/lib/ws-client-session-methods.d.ts +54 -0
  120. package/dist/lib/ws-client-swap.d.ts +53 -0
  121. package/dist/lib/ws-client.d.ts +40 -71
  122. package/dist/stores/context-editor-store.d.ts +1 -1
  123. package/dist/stores/council-log-store.d.ts +6 -0
  124. package/dist/stores/session-tab-store.d.ts +8 -0
  125. package/dist/stores/types.d.ts +10 -1
  126. package/dist/stores/ui-store-chrome.d.ts +12 -0
  127. package/dist/stores/ui-store-persist.d.ts +4 -0
  128. package/dist/stores/ui-store-types.d.ts +379 -0
  129. package/dist/stores/ui-store.d.ts +7 -467
  130. package/dist/stores/viz-graph-helpers.d.ts +18 -0
  131. package/dist/stores/viz-pipeline.d.ts +7 -0
  132. package/dist/stores/viz-store.d.ts +3 -123
  133. package/dist/stores/viz-types.d.ts +124 -0
  134. package/dist/types/brain.d.ts +3 -0
  135. package/dist/types/client-message.d.ts +8 -0
  136. package/dist/types/runtime.d.ts +7 -0
  137. package/dist/types/sage.d.ts +7 -0
  138. package/dist/types/server-message-chimera.d.ts +161 -0
  139. package/dist/types/server-message-files.d.ts +195 -0
  140. package/dist/types/server-message-fleet.d.ts +148 -0
  141. package/dist/types/server-message-mcp.d.ts +199 -0
  142. package/dist/types/server-message-system.d.ts +399 -0
  143. package/dist/types/server-message.d.ts +12 -1098
  144. package/dist/types/skills-design.d.ts +7 -0
  145. package/dist/types/system.d.ts +16 -0
  146. package/package.json +9 -9
  147. package/dist/assets/AgentRosterView-VIctzKMy.js +0 -9
  148. package/dist/assets/AnalyticsDashboard-Dr67MeEY.js +0 -1
  149. package/dist/assets/AudienceMemoryPanel-DoaZfrjf.js +0 -3
  150. package/dist/assets/ChangesView-s7Mn7iE2.js +0 -1
  151. package/dist/assets/ChimeraReviewsView-Cverzv0b.js +0 -1
  152. package/dist/assets/ChronicleDashboard-CzqPfaPc.js +0 -1
  153. package/dist/assets/CodeEditor-DXQoTSH5.js +0 -2
  154. package/dist/assets/CodeMap-D34FOPgR.js +0 -1
  155. package/dist/assets/ConfirmModal-B6BGiiN8.js +0 -1
  156. package/dist/assets/CronJobsPanel-CenxuaN9.js +0 -1
  157. package/dist/assets/DebugDashboard-DWaUg6e1.js +0 -1
  158. package/dist/assets/DesignGalleryView-BKtjn4px.js +0 -1
  159. package/dist/assets/GoalView-BZ62_vF-.js +0 -1
  160. package/dist/assets/KanbanView-DsWnTpxr.js +0 -3
  161. package/dist/assets/MailboxDetailView-DS1P9DRT.js +0 -1
  162. package/dist/assets/MemoryDrawer-BJEY1v4P.js +0 -1
  163. package/dist/assets/MemoryManager-D-kuyTQe.js +0 -1
  164. package/dist/assets/ModelPicker-CLs0qQgg.js +0 -1
  165. package/dist/assets/OfficeMapPanel-BqoCcniD.js +0 -4
  166. package/dist/assets/ProcessMonitor-CHNNqCk9.js +0 -1
  167. package/dist/assets/PromptJournalView-Biu4DknM.js +0 -1
  168. package/dist/assets/QueuePanel-CzTXq6j4.js +0 -1
  169. package/dist/assets/RefreshDebugView-d9iU3sFX.js +0 -1
  170. package/dist/assets/RequirementIntakeView-BVyF2zXR.js +0 -1
  171. package/dist/assets/SageTabs-YASyEFo6.js +0 -2
  172. package/dist/assets/SddFlowGraph-Bj_Aqq5B.js +0 -1
  173. package/dist/assets/SddHub-rmGGEYZe.js +0 -2
  174. package/dist/assets/SessionInspectView-iaKkGAAM.js +0 -1
  175. package/dist/assets/SessionList-vmAS2Fg5.js +0 -1
  176. package/dist/assets/SessionsDashboard-x3iyhrGl.js +0 -1
  177. package/dist/assets/SetupScreen-huPJT0Bv.js +0 -1
  178. package/dist/assets/SkillDetailView-BcD9z7zG.js +0 -3
  179. package/dist/assets/SpecsView-ok8HZ8ws.js +0 -1
  180. package/dist/assets/TechStackView-DmMtwb4l.js +0 -2
  181. package/dist/assets/TerminalPanel-cbM6oQWQ.js +0 -1
  182. package/dist/assets/activity-CtTKsSX6.js +0 -10
  183. package/dist/assets/button-DNyYztcH.js +0 -1
  184. package/dist/assets/chat-store-oW_-zcJP.js +0 -1
  185. package/dist/assets/codemap-index-store-tSmlp7Uz.js +0 -1
  186. package/dist/assets/dialog-BTHxOi5z.js +0 -1
  187. package/dist/assets/empty-state-DBQN80mK.js +0 -1
  188. package/dist/assets/i18n-D06uU1PM.js +0 -2
  189. package/dist/assets/index-BQ7PJ-sA.js +0 -144
  190. package/dist/assets/input-CTGeYzNe.js +0 -1
  191. package/dist/assets/settings-Ci_RMpCQ.js +0 -1
  192. package/dist/assets/setup-B0D9CK3-.js +0 -1
  193. package/dist/assets/setup-B58YVaGU.js +0 -1
  194. package/dist/assets/setup-C2H9Uv0Q.js +0 -1
  195. package/dist/assets/setup-CzM4dkkU.js +0 -1
  196. package/dist/assets/setup-Di56FlHP.js +0 -1
  197. package/dist/assets/setup-Dwt58Mpz.js +0 -1
  198. package/dist/assets/setup-DznVdlJy.js +0 -1
  199. package/dist/assets/shared-CLfD85oZ.js +0 -1
  200. package/dist/assets/stores-C7Vvce-6.js +0 -7
  201. package/dist/assets/ui-store-Dm7ujR9u.js +0 -1
  202. package/dist/assets/useWebSocket-9lfOsI_r.js +0 -27
  203. package/dist/assets/vector-memory-panel-B4bQhdHe.js +0 -1
  204. package/dist/assets/vendor-enc0q-Va.js +0 -139
  205. package/dist/assets/view-navigation-wOKaM_Rf.js +0 -1
  206. package/dist/assets/ws-client-DtTZLD8e.js +0 -22
  207. /package/dist/assets/{OfficeMapPanel-Ce7myLNH.css → AgentRosterView-Ce7myLNH.css} +0 -0
@@ -0,0 +1,379 @@
1
+ import type { ImageAttachment } from '../components/ChatInput/image-attachments.js';
2
+ import type { QueuedItem, QueueMode } from './chat-store';
3
+ import type { MailboxMessage } from './mailbox-store';
4
+ export type Activity = 'chat' | 'agents' | 'files' | 'changes' | 'mailbox' | 'skills' | 'design';
5
+ export declare const ACTIVITIES: readonly Activity[];
6
+ /** Map any persisted (possibly legacy) activity value onto the current set.
7
+ * 'worktrees' and 'officemap' were retired from the ActivityBar: worktree
8
+ * lanes now live as a tab inside the Changes panel, the fleet map as a tab
9
+ * inside the Agent Roster view. */
10
+ export declare function coerceActivity(value: unknown): Activity;
11
+ /**
12
+ * All valid `currentView` values — the SINGLE source of truth.
13
+ *
14
+ * `lib/view-navigation.ts` used to carry its own `AppView` union, assembled by
15
+ * hand from three subsets. The two lists drifted: `deadcode` was in this array
16
+ * and had a `ViewRouter` branch, a backend, and labels in all seven locales,
17
+ * but was missing from `AppView`, so no navigation helper could reach it and
18
+ * the whole panel was unreachable. `AppView` is now derived from this array and
19
+ * an exhaustiveness assertion pins every entry to exactly one navigation
20
+ * bucket, which makes that class of drift a compile error.
21
+ * See docs/audit/webui-full-review-2026-09-03.md B-02.
22
+ */
23
+ export 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'];
24
+ export type View = (typeof VIEWS)[number];
25
+ /** Coerce an arbitrary value onto the current view union. Used by migrate
26
+ * when reading from localStorage so a stale value (e.g. 'context', a view
27
+ * removed in v3) lands on 'chat' rather than crashing the router. */
28
+ export declare function coerceView(value: unknown): View;
29
+ export declare const DOCK_SECTIONS: readonly ['goal', 'goal-state', 'fleet', 'work', 'worktrees', 'collab'];
30
+ export declare function coerceDockSection(value: unknown): DockSection | null;
31
+ export declare const SETTINGS_TABS: readonly ['general', 'provider', 'connection', 'agent', 'execution', 'fallbacks', 'routing', 'fleet', 'integrations', 'chimera', 'context', 'logs', 'security', 'display'];
32
+ export declare function coerceSettingsTab(value: unknown): string;
33
+ /** Single source of truth for the secondary panel width bounds. */
34
+ export declare const SIDEBAR_MIN_WIDTH = 240;
35
+ export declare const SIDEBAR_MAX_WIDTH = 560;
36
+ export declare const SIDEBAR_DEFAULT_WIDTH = 304;
37
+ /** Sections of the WorkspaceDock strip above the chat transcript. */
38
+ export type DockSection = 'goal' | 'goal-state' | 'fleet' | 'work' | 'worktrees' | 'collab';
39
+ export type WorkDashboardTab = 'todos' | 'tasks' | 'plan';
40
+ /**
41
+ * Tabs of the global right inspector drawer.
42
+ *
43
+ * `council` is the live Brain council panel log — the most expensive Brain
44
+ * tier (one provider call per seat) and, until it got a tab, the only one with
45
+ * no observable surface at all.
46
+ */
47
+ export type InspectorTab = 'fleet' | 'agents' | 'sideEffects' | 'council';
48
+ export type InspectorTarget = {
49
+ kind: 'fleet';
50
+ tab?: InspectorTab | undefined;
51
+ } | {
52
+ kind: 'agent';
53
+ agentId: string;
54
+ } | {
55
+ kind: 'sideEffects';
56
+ } | {
57
+ kind: 'council';
58
+ } | {
59
+ kind: 'task';
60
+ taskId: string;
61
+ boardId?: string | undefined;
62
+ title?: string | undefined;
63
+ };
64
+ export interface SessionChromeState {
65
+ sidebarOpen: boolean;
66
+ activeActivity: Activity;
67
+ currentView: View;
68
+ inspectSessionId: string | null;
69
+ searchOpen: boolean;
70
+ searchQuery: string;
71
+ searchActiveMessageId: string | null;
72
+ scrollTarget: UIState['scrollTarget'];
73
+ modelSwitcherOpen: boolean;
74
+ promptLibraryOpen: boolean;
75
+ promptInsertRequest: string | null;
76
+ refinePanel: UIState['refinePanel'];
77
+ draftInput: string;
78
+ draftImages: ImageAttachment[];
79
+ processMonitorOpen: boolean;
80
+ queuePanelOpen: boolean;
81
+ cronJobsOpen: boolean;
82
+ sideContextBreakdownOpen: boolean;
83
+ terminalOpen: boolean;
84
+ dockSection: DockSection | null;
85
+ workDashboardTab: WorkDashboardTab;
86
+ inspectorOpen: boolean;
87
+ inspectorTab: InspectorTab;
88
+ inspectorTarget: InspectorTarget | null;
89
+ inspectorFocusedAgentId: string | null;
90
+ agentRosterActiveTab: 'live' | 'officemap' | 'catalog' | 'learning' | 'memory' | 'customize';
91
+ changesPanelTab: 'changes' | 'worktrees';
92
+ dockCustomizeOpen: boolean;
93
+ skillsState: UIState['skillsState'];
94
+ selectedMailMessage: MailboxMessage | null;
95
+ scrollPositions: Record<string, number>;
96
+ chatSwitcherOpen: boolean;
97
+ chatCheckpointOpen: boolean;
98
+ chatMemoryPanelOpen: boolean;
99
+ chatContextBreakdownOpen: boolean;
100
+ chatContextEditorOpen: boolean;
101
+ chatToolStatsOpen: boolean;
102
+ chatInputCollapsed: boolean;
103
+ }
104
+ export interface UIState {
105
+ sidebarOpen: boolean;
106
+ /** Which activity icon is selected in the ActivityBar — controls secondary panel content. */
107
+ activeActivity: Activity;
108
+ settingsOpen: boolean;
109
+ currentView: View;
110
+ showConfirmDialog: boolean;
111
+ confirmInfo: {
112
+ id: string;
113
+ toolName: string;
114
+ input: unknown;
115
+ suggestedPattern: string;
116
+ decisionSource?: string | undefined;
117
+ riskTier?: 'safe' | 'standard' | 'destructive' | undefined;
118
+ boundaryReason?: string | undefined;
119
+ } | null;
120
+ paletteOpen: boolean;
121
+ shortcutsOpen: boolean;
122
+ searchOpen: boolean;
123
+ searchQuery: string;
124
+ searchActiveMessageId: string | null;
125
+ /** Imperative "scroll the virtualized chat list to this message" request.
126
+ * The chat list is virtualized, so an off-screen message has no DOM node to
127
+ * scrollIntoView — SearchOverlay sets this and ChatView consumes it by
128
+ * mapping the id to a VList row index and calling scrollToIndex. The nonce
129
+ * lets the same id be re-requested (e.g. Enter on the same hit). */
130
+ scrollTarget: {
131
+ id: string;
132
+ nonce: number;
133
+ } | null;
134
+ promptHistory: string[];
135
+ sidebarWidth: number;
136
+ pinnedIds: string[];
137
+ compactMode: boolean;
138
+ modelSwitcherOpen: boolean;
139
+ favoriteSessionIds: string[];
140
+ sessionNicknames: Record<string, string>;
141
+ fileExplorerWidth: number;
142
+ /** When true, free-text prompts are run through the prompt refiner before sending. */
143
+ refineEnabled: boolean;
144
+ /** WorkspaceDock section shown in the right inspector. Null = no dock detail open. */
145
+ dockSection: DockSection | null;
146
+ /** Active tab in the Work dock section. Mirrors TUI F5/F6 panel jumps. */
147
+ workDashboardTab: WorkDashboardTab;
148
+ /** Which session the global dock/work projection currently describes. */
149
+ chromeSessionId: string | null;
150
+ /** Per-session screen projection, parked when switching tabs. */
151
+ chromeBySession: Record<string, SessionChromeState>;
152
+ /** Dock chips the user has explicitly hidden via the customization menu.
153
+ * Empty = all chips visible (subject to each chip's own data condition).
154
+ * Mirrors the TUI's F12 status-line chip picker. */
155
+ hiddenChips: DockSection[];
156
+ /** Controlled open state for the dock chip customization menu. */
157
+ dockCustomizeOpen: boolean;
158
+ /** @deprecated Compatibility field; Fleet now opens in the global inspector. */
159
+ fleetMonitorOpen: boolean;
160
+ /** @deprecated Compatibility field; Agents now opens in the global inspector. */
161
+ agentsMonitorOpen: boolean;
162
+ /** Global right inspector drawer open (non-modal overlay on desktop). */
163
+ inspectorOpen: boolean;
164
+ /** Active tab inside the global right inspector drawer. */
165
+ inspectorTab: InspectorTab;
166
+ /** Target routing descriptor for the universal inspector drawer. */
167
+ inspectorTarget: InspectorTarget | null;
168
+ /** Agent ID to focus when opening the inspector on the agents tab. Cleared on read. */
169
+ inspectorFocusedAgentId: string | null;
170
+ /** Subagent whose full transcript currently replaces the main chat pane
171
+ * (agent tabs above the transcript). Null = leader chat. Transient — never
172
+ * persisted; ChatView auto-clears it when the focused agent leaves the
173
+ * fleet roster (removed, cleared, session stop). */
174
+ subagentChatFocusId: string | null;
175
+ /** Which session the flat `subagentChatFocusId` describes. */
176
+ subagentChatFocusSessionId: string | null;
177
+ /** Process Monitor overlay — triggered by /kill slash command. */
178
+ processMonitorOpen: boolean;
179
+ /** Queue Panel overlay — triggered by /queue slash command. */
180
+ queuePanelOpen: boolean;
181
+ /** Cron Jobs overlay — triggered by /cron slash command. */
182
+ cronJobsOpen: boolean;
183
+ /** Session ID currently being inspected (session-inspect view). */
184
+ inspectSessionId: string | null;
185
+ /** Integrated terminal bottom-dock — toggled by Ctrl+` or /terminal. */
186
+ terminalOpen: boolean;
187
+ /** Monotonic signal consumed by TerminalPanel to create another PTY tab. */
188
+ terminalCreateNonce: number;
189
+ agentRosterActiveTab: 'live' | 'officemap' | 'catalog' | 'learning' | 'memory' | 'customize';
190
+ setAgentRosterActiveTab: (tab: 'live' | 'officemap' | 'catalog' | 'learning' | 'memory' | 'customize') => void;
191
+ /** Active tab inside the Changes side panel. Worktree lanes moved from the
192
+ * ActivityBar into this panel (kept in the store so shortcuts, slash
193
+ * commands and the desktop bridge can deep-link to the Worktrees tab). */
194
+ changesPanelTab: 'changes' | 'worktrees';
195
+ setChangesPanelTab: (tab: 'changes' | 'worktrees') => void;
196
+ /** Persisted Settings panel scroll position and active category tab so the user
197
+ * returns to the exact location after navigating away and back. */
198
+ settingsActiveTab: string;
199
+ /** Generic per-view scroll positions — keyed by view name, restored on remount. */
200
+ scrollPositions: Record<string, number>;
201
+ /** In-memory chat input draft — survives view navigation (e.g. Settings → Chat) but
202
+ * is intentionally NOT persisted to localStorage, so it does not reappear on a
203
+ * fresh page load or when starting a new session. */
204
+ draftInput: string;
205
+ /** Pending image attachments mirroring the input draft (see draftInput):
206
+ * survives view navigation into a subagent transcript, never persisted,
207
+ * cleared on submit via clearPendingImages → setDraftImages([]). */
208
+ draftImages: ImageAttachment[];
209
+ setDraftInput: (text: string) => void;
210
+ setDraftImages: (images: ImageAttachment[]) => void;
211
+ setProcessMonitorOpen: (open: boolean) => void;
212
+ setQueuePanelOpen: (open: boolean) => void;
213
+ setCronJobsOpen: (open: boolean) => void;
214
+ setInspectSession: (id: string) => void;
215
+ clearInspectSession: () => void;
216
+ setTerminalOpen: (open: boolean) => void;
217
+ toggleTerminal: () => void;
218
+ requestTerminalCreate: () => void;
219
+ setSettingsActiveTab: (tab: string) => void;
220
+ setScrollPosition: (view: string, scrollTop: number) => void;
221
+ /** Context breakdown modal (triggered from side-panel session panel). */
222
+ sideContextBreakdownOpen: boolean;
223
+ setSideContextBreakdownOpen: (open: boolean) => void;
224
+ chatSwitcherOpen: boolean;
225
+ chatCheckpointOpen: boolean;
226
+ chatMemoryPanelOpen: boolean;
227
+ chatContextBreakdownOpen: boolean;
228
+ chatContextEditorOpen: boolean;
229
+ chatToolStatsOpen: boolean;
230
+ chatInputCollapsed: boolean;
231
+ setChatSwitcherOpen: (open: boolean) => void;
232
+ setChatCheckpointOpen: (open: boolean) => void;
233
+ setChatMemoryPanelOpen: (open: boolean) => void;
234
+ setChatContextBreakdownOpen: (open: boolean) => void;
235
+ setChatContextEditorOpen: (open: boolean) => void;
236
+ setChatToolStatsOpen: (open: boolean) => void;
237
+ setChatInputCollapsed: (collapsed: boolean) => void;
238
+ /** Skills panel breadcrumb state — persisted so history survives panel switches. */
239
+ skillsState: {
240
+ /** The skill currently shown in the detail pane. */
241
+ selectedSkill: {
242
+ name: string;
243
+ description: string;
244
+ version: string;
245
+ source: string;
246
+ sourceUrl: string;
247
+ ref: string;
248
+ path: string;
249
+ trigger: string;
250
+ scope: string[];
251
+ } | null;
252
+ /** Ordered history of skills navigated to via related links. */
253
+ navHistory: {
254
+ name: string;
255
+ description: string;
256
+ version: string;
257
+ source: string;
258
+ sourceUrl: string;
259
+ ref: string;
260
+ path: string;
261
+ trigger: string;
262
+ scope: string[];
263
+ }[];
264
+ /** Current position in navHistory. */
265
+ historyIndex: number;
266
+ /** Whether the detail pane is open (controls list highlight vs. detail view). */
267
+ detailOpen: boolean;
268
+ /** Last known commit refs per skill name — compared against live refs to detect updates. */
269
+ knownRefs: Record<string, string>;
270
+ /** Number of installed skills with a newer ref available than knownRefs. */
271
+ updateAvailableCount: number;
272
+ };
273
+ setSkillsState: (state: UIState['skillsState']) => void;
274
+ /** The mailbox message currently shown in the main-area detail view. */
275
+ selectedMailMessage: MailboxMessage | null;
276
+ setSelectedMailMessage: (msg: MailboxMessage | null) => void;
277
+ /** Active prompt-refinement panel. Set while RefinePanel is shown. Null when no refinement is pending. */
278
+ refinePanel: {
279
+ original: string;
280
+ refined: string;
281
+ english: string;
282
+ resolve: (decision: 'refined' | 'english' | 'original' | 'edit') => void;
283
+ /**
284
+ * Lifecycle of the refine round-trip:
285
+ * - 'countdown': 3-2-1 grace period before refining starts; user can
286
+ * send the original as-is to skip refinement entirely.
287
+ * - 'refining': request in flight (first attempt or an extended retry);
288
+ * - 'ready': a usable refinement arrived (comparison UI shown);
289
+ * - 'failed': the attempt failed and the recovery UI is shown.
290
+ * Absent → treated as 'refining' (back-compat with the placeholder check).
291
+ */
292
+ status?: 'countdown' | 'refining' | 'ready' | 'failed' | undefined;
293
+ /** Human-readable failure reason (status === 'failed'). */
294
+ error?: string | undefined;
295
+ /** Machine-readable failure class driving the recovery options. */
296
+ errorKind?: 'timeout' | 'empty' | 'provider_error' | undefined;
297
+ /** One-key "retry with another model" offer (provider/model), if the server resolved one. */
298
+ fallbackRef?: string | undefined;
299
+ /** True once the automatic timeout retry has been spent (so we don't loop). */
300
+ retried?: boolean | undefined;
301
+ /** Apply a model-context boundary atomically when the approved prompt is sent. */
302
+ freshContext?: boolean | undefined;
303
+ /** Provider id of the model running the refinement (e.g. "openai"). */
304
+ provider?: string | undefined;
305
+ /** Model name running the refinement (e.g. "gpt-4o"). */
306
+ model?: string | undefined;
307
+ /** Submit behavior to preserve across the refinement approval round-trip. */
308
+ mode?: QueueMode | undefined;
309
+ /** Image attachments from the original submit, preserved so the approval
310
+ * enqueue path can forward them (mirrors the error/no-op paths in
311
+ * misc-handlers that pass refImages to enqueue). */
312
+ images?: QueuedItem['images'];
313
+ /**
314
+ * The tab this refinement belongs to.
315
+ *
316
+ * The panel is a single global surface sitting above one shared composer,
317
+ * but the text in it was typed in ONE tab. Approving it — or letting the
318
+ * countdown expire — sends through the foreground facade, so with four
319
+ * tabs open an unstamped panel could deliver tab 1's prompt into tab 2's
320
+ * session, without the user touching anything. ChatInput takes the panel
321
+ * down when the foreground leaves the tab that opened it.
322
+ */
323
+ sessionId?: string | undefined;
324
+ } | null;
325
+ /** Prompt library modal (browse/search/insert prompts) open state. */
326
+ promptLibraryOpen: boolean;
327
+ setPromptLibraryOpen: (open: boolean) => void;
328
+ /** Text the prompt library wants pushed into the chat input. ChatInput consumes + clears it. */
329
+ promptInsertRequest: string | null;
330
+ requestPromptInsert: (text: string) => void;
331
+ clearPromptInsert: () => void;
332
+ /** Select an activity. If clicking the already-active icon, closes the sidebar. */
333
+ selectActivity: (activity: Activity) => void;
334
+ toggleSidebar: () => void;
335
+ setSidebarOpen: (open: boolean) => void;
336
+ setSettingsOpen: (open: boolean) => void;
337
+ setCurrentView: (view: UIState['currentView']) => void;
338
+ showConfirm: (info: UIState['confirmInfo']) => void;
339
+ hideConfirm: () => void;
340
+ setPaletteOpen: (open: boolean) => void;
341
+ setShortcutsOpen: (open: boolean) => void;
342
+ setSearchOpen: (open: boolean) => void;
343
+ setSearchQuery: (q: string) => void;
344
+ setSearchActiveMessageId: (id: string | null) => void;
345
+ requestScrollToMessage: (id: string) => void;
346
+ pushPrompt: (text: string) => void;
347
+ setSidebarWidth: (px: number) => void;
348
+ togglePin: (id: string) => void;
349
+ unpinAll: () => void;
350
+ toggleCompactMode: () => void;
351
+ setModelSwitcherOpen: (open: boolean) => void;
352
+ toggleFavoriteSession: (id: string) => void;
353
+ setSessionNickname: (id: string, nickname: string) => void;
354
+ setFileExplorerWidth: (px: number) => void;
355
+ toggleRefineEnabled: () => void;
356
+ setRefinePanel: (panel: UIState['refinePanel']) => void;
357
+ setDockSection: (section: DockSection | null) => void;
358
+ setWorkDashboardTab: (tab: WorkDashboardTab) => void;
359
+ bindSessionChrome: (sessionId: string | null) => void;
360
+ /** Click-a-chip semantics: same section again collapses the dock. */
361
+ toggleDockSection: (section: DockSection) => void;
362
+ /** Show/hide a dock chip from the customization menu. */
363
+ toggleChipHidden: (section: DockSection) => void;
364
+ /** Make a dock chip visible without toggling it off when it is already visible. */
365
+ showDockChip: (section: DockSection) => void;
366
+ setDockCustomizeOpen: (open: boolean) => void;
367
+ setFleetMonitorOpen: (open: boolean) => void;
368
+ setAgentsMonitorOpen: (open: boolean) => void;
369
+ setInspectorOpen: (open: boolean) => void;
370
+ setInspectorTab: (tab: InspectorTab) => void;
371
+ openInspectorTarget: (target: InspectorTarget) => void;
372
+ closeInspector: () => void;
373
+ setInspectorFocusedAgentId: (id: string | null) => void;
374
+ setSubagentChatFocus: (id: string | null, sessionId?: string | null) => void;
375
+ /** Forget a closed tab's subagent focus so a reused id cannot inherit it. */
376
+ forgetSession: (sessionId: string) => void;
377
+ toggleInspector: () => void;
378
+ }
379
+ //# sourceMappingURL=ui-store-types.d.ts.map