@wrongstack/webui 1.0.19 → 1.0.26

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 (259) hide show
  1. package/dist/assets/AgentRosterView-udJ14GYq.js +12 -0
  2. package/dist/assets/{AnalyticsDashboard-DmQd0E0V.js → AnalyticsDashboard-DwF-0cUA.js} +1 -1
  3. package/dist/assets/AudienceMemoryPanel-DpBGeZv_.js +3 -0
  4. package/dist/assets/ChangesView-BfM0T_aS.js +3 -0
  5. package/dist/assets/ChimeraReviewsView-Q_5C4DU1.js +1 -0
  6. package/dist/assets/ChronicleDashboard-D6LnZzhy.js +1 -0
  7. package/dist/assets/CodeEditor-DonrWH9u.js +2 -0
  8. package/dist/assets/CodeMap-Dxtc378S.js +1 -0
  9. package/dist/assets/{CronJobsPanel-TcZy_W2t.js → CronJobsPanel-Cn2PQO_p.js} +1 -1
  10. package/dist/assets/{DeadCodeScanPanel-BOD2JEyf.js → DeadCodeScanPanel-Mc5py-kJ.js} +1 -1
  11. package/dist/assets/{DebugDashboard-DFPNPzQ_.js → DebugDashboard-D0LRcT4J.js} +1 -1
  12. package/dist/assets/{DesignGalleryView-BXABwAji.js → DesignGalleryView-DAD-wRUc.js} +1 -1
  13. package/dist/assets/GoalView-CqeSw0tK.js +1 -0
  14. package/dist/assets/KanbanView-V-bkFftp.js +3 -0
  15. package/dist/assets/{MailboxDetailView-QyNmt1Gv.js → MailboxDetailView-CTEjap3r.js} +1 -1
  16. package/dist/assets/{MemoryDrawer-BZsyD1dh.js → MemoryDrawer-RCduY0FV.js} +1 -1
  17. package/dist/assets/MemoryManager-B-p6-Bic.js +1 -0
  18. package/dist/assets/{ProcessMonitor-Bz0jZvHJ.js → ProcessMonitor-B9tpPo4r.js} +1 -1
  19. package/dist/assets/PromptJournalView-DVNqlac9.js +1 -0
  20. package/dist/assets/ProviderTestView-mmfpnAbZ.js +1 -0
  21. package/dist/assets/QueuePanel-BB9qozjm.js +1 -0
  22. package/dist/assets/{RefreshDebugView-_XPrBDq3.js → RefreshDebugView-CCCWzq29.js} +1 -1
  23. package/dist/assets/{RepositoryHistoryView-Wlnvi5r1.js → RepositoryHistoryView-RQVRkkUU.js} +2 -2
  24. package/dist/assets/RequirementIntakeView-D_JRhgzW.js +1 -0
  25. package/dist/assets/{SageTabs-qrBn3VQr.js → SageTabs--k2hQTvl.js} +2 -2
  26. package/dist/assets/SddFlowGraph-DKrrRXKy.js +1 -0
  27. package/dist/assets/SddHub-B5XO56oY.js +2 -0
  28. package/dist/assets/{SessionInspectView-CuRk2DS0.js → SessionInspectView-j3VJwXNi.js} +1 -1
  29. package/dist/assets/SessionList-CCVHBseu.js +1 -0
  30. package/dist/assets/{SessionsDashboard-CSkm28Bx.js → SessionsDashboard-DsM7sXQw.js} +1 -1
  31. package/dist/assets/SetupScreen-DeuR8Y8S.js +1 -0
  32. package/dist/assets/SkillDetailView-BeZyGIpW.js +3 -0
  33. package/dist/assets/TechStackView-CpSMRQE0.js +2 -0
  34. package/dist/assets/TerminalPanel-BVJ5w-5R.js +1 -0
  35. package/dist/assets/activity-BS2aW_NN.js +10 -0
  36. package/dist/assets/activity-CR2KFruY.js +10 -0
  37. package/dist/assets/activity-Cd0qM2Hx.js +10 -0
  38. package/dist/assets/activity-DyXRoY2s.js +10 -0
  39. package/dist/assets/activity-bBAOetvE.js +10 -0
  40. package/dist/assets/activity-fI3Jy_jD.js +10 -0
  41. package/dist/assets/activity-t6fUmVjo.js +10 -0
  42. package/dist/assets/{button-BbeB5Qm8.js → button-UuKTnoM-.js} +1 -1
  43. package/dist/assets/chat-9GLubejR.js +1 -0
  44. package/dist/assets/chat-B50ssTLh.js +1 -0
  45. package/dist/assets/chat-CDioiM1L.js +1 -0
  46. package/dist/assets/chat-Cll_3gXD.js +1 -0
  47. package/dist/assets/chat-Cqhc6jQa.js +1 -0
  48. package/dist/assets/chat-DN1MggWt.js +1 -0
  49. package/dist/assets/chat-fyvZyUZM.js +1 -0
  50. package/dist/assets/chat-store-uzGtJfDz.js +1 -0
  51. package/dist/assets/{codemap-activity-store-Ha7XbGgq.js → codemap-activity-store-WjfEZe4_.js} +1 -1
  52. package/dist/assets/common-Bjl7V12m.js +1 -0
  53. package/dist/assets/common-BtyQBZBN.js +1 -0
  54. package/dist/assets/common-D0QL7rwb.js +1 -0
  55. package/dist/assets/common-DJRPtYAt.js +1 -0
  56. package/dist/assets/common-DPPTV3yw.js +1 -0
  57. package/dist/assets/common-DvjdaRhB.js +1 -0
  58. package/dist/assets/common-opV6EoLd.js +1 -0
  59. package/dist/assets/config-store-P5_updTQ.js +21 -0
  60. package/dist/assets/{dialog-b-Ai37sa.js → dialog-BDUaV5gY.js} +1 -1
  61. package/dist/assets/{empty-state-pfuS5znr.js → empty-state-BzoEa04Q.js} +1 -1
  62. package/dist/assets/{fonts-DRGbd-AM.js → fonts-C303yVU_.js} +2 -2
  63. package/dist/assets/i18n-t7rIS4DB.js +3 -0
  64. package/dist/assets/index-B4ELbNoz.js +181 -0
  65. package/dist/assets/index-qdrakcnP.css +1 -0
  66. package/dist/assets/{input-BA6D2L3K.js → input-DMnC2O7-.js} +1 -1
  67. package/dist/assets/{mailbox-store-ZQO_Rv6E.js → mailbox-store-DyOOYbni.js} +1 -1
  68. package/dist/assets/roster-ws-szSqUkqP.js +1 -0
  69. package/dist/assets/settings-BMHZcBqe.js +1 -0
  70. package/dist/assets/settings-BQ5J8WXE.js +1 -0
  71. package/dist/assets/settings-BfNJfO4z.js +1 -0
  72. package/dist/assets/settings-ClDQ01ie.js +1 -0
  73. package/dist/assets/settings-DD31lC4f.js +1 -0
  74. package/dist/assets/settings-Da3EIcna.js +1 -0
  75. package/dist/assets/settings-Dl_QM2QZ.js +1 -0
  76. package/dist/assets/{shared-BFJvAYzX.js → shared-CLNEiW00.js} +1 -1
  77. package/dist/assets/stores-Cx52UOxM.js +7 -0
  78. package/dist/assets/toasts-3tM1krOo.js +1 -0
  79. package/dist/assets/toasts-BrHW33qA.js +1 -0
  80. package/dist/assets/toasts-Buww129h.js +1 -0
  81. package/dist/assets/toasts-CSN9Fy47.js +1 -0
  82. package/dist/assets/toasts-DOoYxbHd.js +1 -0
  83. package/dist/assets/toasts-DkDnbhs_.js +1 -0
  84. package/dist/assets/toasts-Jo4VH13n.js +1 -0
  85. package/dist/assets/ui-store-DI0iusYZ.js +1 -0
  86. package/dist/assets/{utils-CKsqCaP8.js → utils-B21Devim.js} +1 -1
  87. package/dist/assets/{vector-memory-panel-YWv6xcza.js → vector-memory-panel-DnX-ODHC.js} +1 -1
  88. package/dist/assets/{vendor-V3ydTHqN.js → vendor-BfBvt432.js} +28 -28
  89. package/dist/assets/{view-navigation-DTs4cSQ6.js → view-navigation-Cvrp_uJm.js} +1 -1
  90. package/dist/components/BrowserLivePane.d.ts +2 -0
  91. package/dist/components/ChangesView.d.ts +3 -1
  92. package/dist/components/ChatInput/chat-input-bars.d.ts +1 -1
  93. package/dist/components/ChatInput/image-attachments.d.ts +19 -2
  94. package/dist/components/ChatInput/skill-mention-picker.d.ts +10 -0
  95. package/dist/components/ChatInput/slash-routing.d.ts +18 -0
  96. package/dist/components/ChatInput/use-paste-drop.d.ts +3 -0
  97. package/dist/components/ChatInput/use-prompt-queue-view.d.ts +13 -0
  98. package/dist/components/ChatView/BackgroundShellStrip.d.ts +16 -0
  99. package/dist/components/ChatView/TerminalStrip.d.ts +8 -0
  100. package/dist/components/CodeMap.d.ts +0 -12
  101. package/dist/components/CustomRosterPanel.d.ts +0 -1
  102. package/dist/components/GoalPanel.d.ts +2 -1
  103. package/dist/components/ImageDiffView.d.ts +12 -0
  104. package/dist/components/KanbanTaskExecution.d.ts +64 -0
  105. package/dist/components/KanbanTaskInspector.d.ts +1 -1
  106. package/dist/components/MessageBubble/AttachmentGallery.d.ts +1 -1
  107. package/dist/components/MessageBubble/GeneratedImagePreview.d.ts +10 -0
  108. package/dist/components/OfficeMapCanvas.d.ts +0 -7
  109. package/dist/components/SessionTabBar/summaries.d.ts +4 -0
  110. package/dist/components/SettingsPanel/BrainSection.d.ts +1 -1
  111. package/dist/components/SettingsPanel/JevSection.d.ts +4 -0
  112. package/dist/components/SettingsPanel/LimitsSection.d.ts +7 -0
  113. package/dist/components/SettingsPanel/MCPSection.d.ts +1 -37
  114. package/dist/components/SettingsPanel/MCPServerCards.d.ts +67 -0
  115. package/dist/components/SettingsPanel/MCPServerDialog.d.ts +11 -0
  116. package/dist/components/SettingsPanel/OAuthLoginSection.d.ts +2 -0
  117. package/dist/components/SettingsPanel/PreferenceControls.d.ts +8 -0
  118. package/dist/components/SettingsPanel/ProviderSavedProfiles.d.ts +50 -0
  119. package/dist/components/SettingsPanel/ProviderSection.d.ts +2 -79
  120. package/dist/components/SettingsPanel/SettingsNavigation.d.ts +12 -0
  121. package/dist/components/SettingsPanel/brain-section-options.d.ts +2 -3
  122. package/dist/components/SettingsPanel/contracts.d.ts +1 -0
  123. package/dist/components/SettingsPanel/official-servers.d.ts +1 -0
  124. package/dist/components/SettingsPanel/provider-section-types.d.ts +79 -0
  125. package/dist/components/SettingsPanel/use-brain-section.d.ts +28 -0
  126. package/dist/components/SidePanel/SessionList.d.ts +1 -34
  127. package/dist/components/SidePanel/session-history.d.ts +61 -0
  128. package/dist/components/SkillDetailView.d.ts +1 -1
  129. package/dist/components/SystemPromptPresetEditor.d.ts +9 -0
  130. package/dist/components/TerminalPanel.d.ts +8 -1
  131. package/dist/components/WorkspaceDock.d.ts +2 -2
  132. package/dist/components/chronicle-event-detail.d.ts +51 -0
  133. package/dist/components/context-dashboard-sections.d.ts +79 -0
  134. package/dist/components/review/ReviewDiff.d.ts +21 -0
  135. package/dist/components/review/ReviewTray.d.ts +15 -0
  136. package/dist/components/review/review-diff-model.d.ts +31 -0
  137. package/dist/components/use-code-map-flow.d.ts +25 -0
  138. package/dist/components/use-office-map-canvas.d.ts +42 -0
  139. package/dist/components/use-office-map-topology.d.ts +31 -0
  140. package/dist/components/use-skill-detail.d.ts +177 -0
  141. package/dist/components/vector-memory-panel/model.d.ts +9 -0
  142. package/dist/hooks/use-live-browser.d.ts +7 -0
  143. package/dist/hooks/useProviderModels.d.ts +2 -0
  144. package/dist/hooks/useWebSocket.d.ts +4 -5
  145. package/dist/hooks/ws-handlers/brain-handlers.d.ts +18 -0
  146. package/dist/hooks/ws-handlers/goal-handlers.d.ts +9 -0
  147. package/dist/hooks/ws-handlers/misc-handlers.d.ts +2 -21
  148. package/dist/hooks/ws-handlers/prompt-queue-handlers.d.ts +18 -0
  149. package/dist/index.css +3013 -3013
  150. package/dist/index.html +19 -19
  151. package/dist/index.js +98758 -91674
  152. package/dist/lib/auth-operation.d.ts +5 -0
  153. package/dist/lib/compact-file-tree.d.ts +30 -0
  154. package/dist/lib/project-image.d.ts +26 -0
  155. package/dist/lib/provider-warm.d.ts +3 -0
  156. package/dist/lib/sdd-theme.d.ts +2 -2
  157. package/dist/lib/ws-client-actions.d.ts +2 -0
  158. package/dist/lib/ws-client-domain-methods.d.ts +1 -1
  159. package/dist/lib/ws-client-session-methods.d.ts +3 -1
  160. package/dist/lib/ws-client.d.ts +3 -3
  161. package/dist/stores/chat-lane-data.d.ts +153 -0
  162. package/dist/stores/chat-lanes.d.ts +3 -174
  163. package/dist/stores/chat-queue-helpers.d.ts +9 -0
  164. package/dist/stores/chat-store-types.d.ts +3 -0
  165. package/dist/stores/chat-store.d.ts +1 -1
  166. package/dist/stores/context-editor-store.d.ts +1 -1
  167. package/dist/stores/council-log-store.d.ts +4 -0
  168. package/dist/stores/fleet-transcript.d.ts +14 -0
  169. package/dist/stores/git-changes-store.d.ts +3 -0
  170. package/dist/stores/goal-run-store.d.ts +8 -0
  171. package/dist/stores/goal-state-store.d.ts +3 -0
  172. package/dist/stores/goal-store.d.ts +9 -11
  173. package/dist/stores/local-prefs-defaults.d.ts +340 -0
  174. package/dist/stores/local-prefs.d.ts +2 -318
  175. package/dist/stores/notification-store.d.ts +9 -0
  176. package/dist/stores/review-store.d.ts +54 -0
  177. package/dist/stores/session-activity.d.ts +33 -0
  178. package/dist/stores/session-tab-store.d.ts +1 -46
  179. package/dist/stores/terminal-strip-store.d.ts +26 -0
  180. package/dist/stores/ui-store-chrome.d.ts +1 -1
  181. package/dist/stores/ui-store-persist.d.ts +2 -2
  182. package/dist/stores/ui-store-types.d.ts +4 -4
  183. package/dist/stores/ui-store.d.ts +5 -5
  184. package/dist/types/brain.d.ts +4 -2
  185. package/dist/types/client-message.d.ts +132 -11
  186. package/dist/types/jev.d.ts +62 -0
  187. package/dist/types/prompt-queue.d.ts +55 -0
  188. package/dist/types/protocol-core.d.ts +4 -216
  189. package/dist/types/runtime.d.ts +6 -39
  190. package/dist/types/server-message-files.d.ts +22 -0
  191. package/dist/types/server-message-mcp.d.ts +30 -0
  192. package/dist/types/server-message-system.d.ts +114 -0
  193. package/dist/types/server-message.d.ts +4 -3
  194. package/dist/types/system.d.ts +4 -24
  195. package/package.json +11 -10
  196. package/dist/assets/AgentRosterView-D4TuVXe8.js +0 -12
  197. package/dist/assets/AudienceMemoryPanel-DHJM4rf1.js +0 -3
  198. package/dist/assets/ChangesView-CZ-nCe26.js +0 -1
  199. package/dist/assets/ChimeraReviewsView-CNeRLesP.js +0 -1
  200. package/dist/assets/ChronicleDashboard-CYELq7EO.js +0 -1
  201. package/dist/assets/CodeEditor-CLscjkIR.js +0 -2
  202. package/dist/assets/CodeMap-CdVy9Q7V.js +0 -1
  203. package/dist/assets/GoalView-Cepqrg9l.js +0 -1
  204. package/dist/assets/KanbanView-FSePkLch.js +0 -3
  205. package/dist/assets/MemoryManager-IHmhWn4P.js +0 -1
  206. package/dist/assets/PromptJournalView-Ct8cLcGU.js +0 -1
  207. package/dist/assets/ProviderTestView-Dy3k2bVu.js +0 -1
  208. package/dist/assets/QueuePanel-oVkTB68Q.js +0 -1
  209. package/dist/assets/RequirementIntakeView-Cj5arGFF.js +0 -1
  210. package/dist/assets/SddFlowGraph-DS8R2zEj.js +0 -1
  211. package/dist/assets/SddHub-C8pHQYSM.js +0 -2
  212. package/dist/assets/SessionList-BgRb1Mp4.js +0 -1
  213. package/dist/assets/SetupScreen-CNcJ_9O9.js +0 -1
  214. package/dist/assets/SkillDetailView-Bc9owpaX.js +0 -3
  215. package/dist/assets/TechStackView-BHiGCRBT.js +0 -2
  216. package/dist/assets/TerminalPanel-7VeXK8LB.js +0 -1
  217. package/dist/assets/activity-1wlPY6yi.js +0 -10
  218. package/dist/assets/activity-BVbAv0x7.js +0 -10
  219. package/dist/assets/activity-BmJTU8kX.js +0 -10
  220. package/dist/assets/activity-By_aWEsY.js +0 -10
  221. package/dist/assets/activity-Cps_29WN.js +0 -10
  222. package/dist/assets/activity-Du_fOnvF.js +0 -10
  223. package/dist/assets/activity-p_2o4eC6.js +0 -10
  224. package/dist/assets/chat-6dE2AJNN.js +0 -1
  225. package/dist/assets/chat-B3AJmhGD.js +0 -1
  226. package/dist/assets/chat-BHsbpaVt.js +0 -1
  227. package/dist/assets/chat-BITJe8-v.js +0 -1
  228. package/dist/assets/chat-U-Jjb8_k.js +0 -1
  229. package/dist/assets/chat-_Xp5fDnj.js +0 -1
  230. package/dist/assets/chat-mSbSzPl5.js +0 -1
  231. package/dist/assets/chat-store-C-PKlsCR.js +0 -1
  232. package/dist/assets/common-BXosnbIt.js +0 -1
  233. package/dist/assets/common-CzfPgMjC.js +0 -1
  234. package/dist/assets/common-DDDPz7Dv.js +0 -1
  235. package/dist/assets/common-DYx9oSoC.js +0 -1
  236. package/dist/assets/common-DZ-05t4z.js +0 -1
  237. package/dist/assets/common-MjX8fcng.js +0 -1
  238. package/dist/assets/common-ipsuLC3n.js +0 -1
  239. package/dist/assets/config-store-xSv1mChc.js +0 -21
  240. package/dist/assets/i18n--QdD6NCn.js +0 -3
  241. package/dist/assets/index-DiX5j910.css +0 -1
  242. package/dist/assets/index-FWwLmwjx.js +0 -177
  243. package/dist/assets/roster-ws-CxKDc-ET.js +0 -1
  244. package/dist/assets/settings-B5Jy-ObI.js +0 -1
  245. package/dist/assets/settings-BXTJJ4n-.js +0 -1
  246. package/dist/assets/settings-BcXAVecM.js +0 -1
  247. package/dist/assets/settings-ByPfZHGm.js +0 -1
  248. package/dist/assets/settings-CCe4iHcn.js +0 -1
  249. package/dist/assets/settings-D2GLiaDO.js +0 -1
  250. package/dist/assets/settings-gB9nKL3f.js +0 -1
  251. package/dist/assets/stores-2kakt8j9.js +0 -7
  252. package/dist/assets/toasts-BsmyGP95.js +0 -1
  253. package/dist/assets/toasts-CgXHu8ZB.js +0 -1
  254. package/dist/assets/toasts-DZ6HdKgG.js +0 -1
  255. package/dist/assets/toasts-DizCJjAR.js +0 -1
  256. package/dist/assets/toasts-NC2MT4uN.js +0 -1
  257. package/dist/assets/toasts-bPl097de.js +0 -1
  258. package/dist/assets/toasts-tCVo15mP.js +0 -1
  259. package/dist/assets/ui-store-DC3mkswy.js +0 -1
@@ -1,321 +1,5 @@
1
- import type { FleetChatVerbosity } from '@wrongstack/core/types';
2
- /**
3
- * Local preference store — persisted in localStorage.
4
- * Mirrors the TUI's SettingsPicker fields that don't require
5
- * a live WS server connection. The server can still override
6
- * these via WS events when connected.
7
- */
8
- export interface LocalPrefs {
9
- /** Allow delegated and autonomous subagents in this session. */
10
- subagentsAllowed: boolean;
11
- /** Server-derived lock: true after the first user message. */
12
- subagentsPolicyLocked: boolean;
13
- /** Autonomy mode */
14
- autonomy: 'off' | 'suggest' | 'auto' | 'eternal' | 'eternal-parallel';
15
- /** Auto-proceed delay in ms */
16
- autonomyDelayMs: number;
17
- /** Stop auto-proceed after N iterations (0 = unlimited). */
18
- autoProceedMaxIterations: number;
19
- /** YOLO mode — bypass tool confirmations */
20
- yolo: boolean;
21
- /**
22
- * Which kinds of damage still prompt while YOLO is on, keyed by
23
- * `DestructiveKind`. A missing key means "still asks" — the fail-closed
24
- * reading — so an older client that omits a newer kind cannot un-gate it.
25
- *
26
- * Machine-level, NOT session-scoped: unlike `yolo` (a per-tab mode), this
27
- * answers what the agent may destroy unattended anywhere.
28
- */
29
- yoloConfirm: Record<string, boolean>;
30
- /** Maximum agent iterations per run */
31
- maxIterations: number;
32
- /** Chime on run completion */
33
- chime: boolean;
34
- /** Confirm before exit (Ctrl+C) */
35
- confirmExit: boolean;
36
- /** Fleet-chat verbosity (off | full) */
37
- fleetChatVerbosity: FleetChatVerbosity;
38
- /** Predict next steps after turn completes */
39
- nextPrediction: boolean;
40
- /**
41
- * Register the leader's agent-callable `nextsteps` tool alongside the
42
- * `<nextsteps>` block it can already write. Persisted to
43
- * `tools.nextsteps.enabled`; the tool registry is built at boot, so the
44
- * change takes effect in the next session.
45
- */
46
- nextStepsTool: boolean;
47
- /** Global fallback model chain (entries: `model` or `provider/model`). */
48
- fallbackModels: string[];
49
- /** Named fallback chains selectable by setmodel/model routing. */
50
- fallbackProfiles: Record<string, string[]>;
51
- /** User-curated model references prioritized by pickers and smart fallbacks. */
52
- favoriteModels: string[];
53
- /** Provider-qualified models intentionally hidden from selection and fallback routing. */
54
- disabledModels: string[];
55
- /** Restrict auto-derived fallback chains to favorite models. */
56
- favoriteModelsOnly: boolean;
57
- /**
58
- * Session-scoped subagent model lanes. Each live subagent holds one lane, so
59
- * a fan-out runs on as many different provider/model pairs as there are
60
- * pinned lanes. `lock` decides whether a lane outranks the provider/model the
61
- * leader passed to `spawn_subagent` / `delegate`. Never written to
62
- * config.json — the server journals it with the session.
63
- */
64
- subagentModelPlan: {
65
- enabled: boolean;
66
- lock: boolean;
67
- /** Run every plain subagent on the session's own model; outranks the lanes. */
68
- followSessionModel?: boolean;
69
- slots: Array<{
70
- provider?: string;
71
- model?: string;
72
- tier?: string;
73
- fallbackProfile?: string;
74
- label?: string;
75
- }>;
76
- roles?: Record<string, {
77
- provider?: string;
78
- model?: string;
79
- tier?: string;
80
- fallbackProfile?: string;
81
- }>;
82
- };
83
- /** Per-role/phase/default model routing matrix. */
84
- modelMatrix: Record<string, {
85
- provider?: string;
86
- model?: string;
87
- fallbackProfile?: string;
88
- modelRuntime?: {
89
- reasoning?: {
90
- mode?: 'auto' | 'on' | 'off';
91
- effort?: string;
92
- preserve?: boolean;
93
- };
94
- cache?: {
95
- ttl?: '5m' | '1h';
96
- };
97
- parameters?: Record<string, unknown>;
98
- };
99
- }>;
100
- /**
101
- * Deterministic cost tiers. A level binds a fallback profile, a spend budget
102
- * and runtime overrides under one name; `routing` maps a role/phase/`*` to a
103
- * level; `leader` governs how much authority the leader has over its own tier.
104
- */
105
- modelTiers: {
106
- enabled?: boolean;
107
- default?: string;
108
- levels?: Record<string, {
109
- fallbackProfile?: string;
110
- provider?: string;
111
- model?: string;
112
- maxCostUsd?: number;
113
- maxIterations?: number;
114
- maxToolCalls?: number;
115
- maxTokens?: number;
116
- timeoutMs?: number;
117
- description?: string;
118
- modelRuntime?: {
119
- reasoning?: {
120
- mode?: 'auto' | 'on' | 'off';
121
- effort?: string;
122
- preserve?: boolean;
123
- };
124
- cache?: {
125
- ttl?: '5m' | '1h';
126
- };
127
- };
128
- }>;
129
- routing?: Record<string, string>;
130
- leader?: {
131
- mode?: 'off' | 'propose' | 'auto';
132
- dwellTurns?: number;
133
- minSavingsUsd?: number;
134
- maxContextFillForSwitch?: number;
135
- maxTier?: string;
136
- };
137
- };
138
- /** Auto-derive a fallback chain from keyed providers when the list is empty. */
139
- fallbackAuto: boolean;
140
- /** Recurring provider/model blackout windows for autonomous routing. */
141
- modelAvailabilitySchedule: import('@wrongstack/core/models').ModelBlackoutRule[];
142
- featureMcp: boolean;
143
- featurePlugins: boolean;
144
- featureMemory: boolean;
145
- featureSkills: boolean;
146
- featureModelsRegistry: boolean;
147
- indexOnStart: boolean;
148
- /** Per-plugin enabled/disabled state. Keys are plugin names (e.g. "wstack-chimera"). */
149
- pluginsEnabled: Record<string, boolean>;
150
- contextAutoCompact: boolean;
151
- /** Compactor strategy — matches core's config.context.strategy. */
152
- contextStrategy: 'hybrid' | 'intelligent' | 'selective';
153
- /** Context window mode — matches core's config.context.mode. */
154
- contextMode: 'balanced' | 'frugal' | 'deep';
155
- /** Token-saving mode — matches core's config.features.tokenSavingMode. */
156
- tokenSavingTier: 'auto' | 'off' | 'minimal' | 'light' | 'medium' | 'aggressive';
157
- /** Max concurrent subagents */
158
- maxConcurrent: number;
159
- /** Terminal title animation */
160
- titleAnimation: boolean;
161
- logLevel: 'debug' | 'info' | 'warn' | 'error';
162
- /** Session audit detail — matches core's config.session.auditLevel. */
163
- auditLevel: 'minimal' | 'standard' | 'full';
164
- enhanceEnabled: boolean;
165
- enhanceDelayMs: number;
166
- /** Pre-refine grace countdown (ms) before the refiner call starts. */
167
- enhanceCountdownMs: number;
168
- enhanceLanguage: 'original' | 'english';
169
- /** Provider id for goal refinement (`/goal set`). Empty = use session provider. */
170
- refinerProvider: string;
171
- /** Model id for goal refinement. Empty = use session model. */
172
- refinerModel: string;
173
- /** Named fallback profile for goal refinement. Empty = use refinerProvider+refinerModel or session defaults. */
174
- refinerFallbackProfile: string;
175
- /** TUI status-chip word (e.g. "thinking", "vibing"). */
176
- thinkingWord: string;
177
- /** TUI statusline density. */
178
- statuslineMode: 'minimum' | 'detailed' | 'no-color';
179
- /** TUI working-chip animation style. */
180
- animationStyle: 'rainbow' | 'wave' | 'pulse' | 'dots' | 'breathe' | 'static' | 'cycle';
181
- /** Show completed thinking/logic blocks in chat history */
182
- showThinkingLogs: boolean;
183
- /** Group consecutive tool calls into collapsible chips */
184
- groupToolCalls: boolean;
185
- /** Auto-collapse the chat input under the history when a session with
186
- * messages loads (opt-in; off by default). When off, the input always
187
- * starts expanded. Independent of the manual collapse/expand buttons. */
188
- autoCollapseInput: boolean;
189
- /** Show model reasoning/thinking blocks inline in the chat */
190
- showModelReasoning: boolean;
191
- /** Agent swarm panel placement: bottom, sidebar, or off */
192
- showAgentSwarmPanel: 'bottom' | 'sidebar' | 'off';
193
- /** Allow tools to access paths outside the project root (inverse of fsAccess). */
194
- allowOutsideProjectRoot: boolean;
195
- reasoningMode: 'auto' | 'on' | 'off';
196
- reasoningEffort: string;
197
- reasoningPreserve: boolean;
198
- cacheTtl: 'default' | '5m' | '1h';
199
- /** Process circuit breaker — gates bash/exec after repeated failures. */
200
- breakerEnabled: boolean;
201
- /** Auto kill/reset delay (ms) when the breaker trips. 0 = manual recovery. */
202
- breakerAutoKillResetMs: number;
203
- /** File-tool access scope. 'project' confines file tools to the project root (restart to apply). */
204
- fsAccess: 'unrestricted' | 'project';
205
- /** Raw SSE hex-dump to the server's stderr for provider debugging. */
206
- debugStream: boolean;
207
- hqEnabled: boolean;
208
- hqUrl: string;
209
- hqToken: string;
210
- hqRawContent: boolean;
211
- /** Plugin configured with a bot token (gates the whole section). */
212
- tgConfigured: boolean;
213
- tgSessionEnd: boolean;
214
- tgDelegate: boolean;
215
- /** Long-tool threshold in ms. 0 = disabled. */
216
- tgLongToolMs: number;
217
- /**
218
- * Display-only UI language (BCP-47 code, e.g. `en`, `pt-BR`).
219
- * Synced through prefs.update into shared Config.uiLocale so browser WebUI,
220
- * desktop-hosted WebUI, and the desktop shell follow the same choice.
221
- * Distinct from `enhanceLanguage` (a prompt-refinement pref).
222
- */
223
- uiLocale: string;
224
- /** How Chimera review findings are handled. */
225
- chimeraAutoFix: 'off' | 'ask' | 'auto';
226
- /** When true, the read tool includes codebase-index symbols in its output.
227
- * Mirrors TUI field 42 (`readSymbols`) persisted as
228
- * `autonomy.readAdvancedMode`. */
229
- readSymbols: boolean;
230
- /** When true, SAGE memory-inject blocks are surfaced in tool results.
231
- * Mirrors TUI field 43 (`showSageMemoryInject`). */
232
- showSageMemoryInject: boolean;
233
- /** Minimum relation strength for SAGE memory injection. Mirrors TUI field
234
- * 44 (`sageMemoryInjectThreshold`) persisted as
235
- * `Sage.inject.relationFloor`. */
236
- sageMemoryInjectThreshold: number;
237
- /** Pre-refine grace countdown in SECONDS (TUI field 41). 0 = skip the
238
- * countdown and run the refiner immediately. Presets:
239
- * 0, 2, 3, 5, 8, 10. Distinct from `enhanceCountdownMs` (a TUI-internal
240
- * ms value used by the simpleui RefinePanel animation). */
241
- preRefineSeconds: number;
242
- /** Minimum number of files before the multi-file diff summary footer
243
- * renders above the per-file blocks. 0 disables the footer. Mirrors TUI
244
- * field 21 (`multiDiffSummaryThreshold`). */
245
- multiDiffSummaryThreshold: number;
246
- /** Master enable for `wstack-chimera`. Defaults to true (matches plugin: `cfg.enabled !== false`). */
247
- chimeraEnabled: boolean;
248
- /** Override provider id for the review subagent. Empty = use session provider. */
249
- chimeraProvider: string;
250
- /** Override model id for the review subagent. Empty = use session model. */
251
- chimeraModel: string;
252
- /** Maximum number of files considered per review (default 15). */
253
- chimeraMaxFiles: number;
254
- /** Master enable for `wstack-auto-review`. Defaults to false (matches plugin: `cfg.enabled === true`). */
255
- autoReviewEnabled: boolean;
256
- /** Override provider id for the review subagent. Empty = resolve via fallbackProfile/effective chain. */
257
- autoReviewProvider: string;
258
- /** Override model id for the review subagent. Empty = resolve via fallbackProfile/effective chain. */
259
- autoReviewModel: string;
260
- /** Named fallback profile (from `config.fallbackProfiles`) used to derive provider/model + fallback chain. */
261
- autoReviewFallbackProfile: string;
262
- /** Starting-model policy for the selected auto-review profile. */
263
- autoReviewModelSelection: 'round-robin' | 'random';
264
- /** Explicit fallback chain (derived when no fallbackProfile is set, surfaced for visibility). */
265
- autoReviewFallbackModels: string[];
266
- /** Debounce window in ms — wait for quiet before firing review (default 15000). */
267
- autoReviewDebounceMs: number;
268
- /** Max files per review batch (default 15). */
269
- autoReviewMaxFilesPerBatch: number;
270
- /** Max concurrent in-flight reviews (default 2). */
271
- autoReviewMaxConcurrentReviews: number;
272
- /** Cascade severity threshold: when a review finds findings at or above this level, spawn follow-up agents. */
273
- autoReviewCascadeOn: 'off' | 'critical' | 'high';
274
- /**
275
- * Master switch. When true AND the daemon at `wrongProxyUrl` is
276
- * reachable, every provider's base URL flows through
277
- * `${wrongProxyUrl}/proxy/<host><path>`. Excluded providers
278
- * (openai-codex) flow through unchanged.
279
- */
280
- wrongProxyEnabled: boolean;
281
- /**
282
- * Where the local proxy daemon listens. Default `http://localhost:3444`.
283
- * User-editable via WebUI `IntegrationsSection` and TUI SettingsPicker.
284
- * Periodic probe targets `<wrongProxyUrl>/api/health`; 2xx → active.
285
- */
286
- wrongProxyUrl: string;
287
- /** Master toggle for global keyboard shortcuts. Defaults to false. */
288
- keyboardShortcuts: boolean;
289
- /**
290
- * Per-session overrides for the keys in `SESSION_SCOPED_PREF_KEYS`.
291
- *
292
- * The flat fields above are the EFFECTIVE view of the tab in front, so
293
- * existing readers (`useLocalPrefs((s) => s.autonomy)`) keep working and
294
- * automatically describe the right tab. This map is what makes them
295
- * per-tab rather than one value the four tabs fight over.
296
- */
297
- bySession: Record<string, Partial<LocalPrefs>>;
298
- /**
299
- * What a NEWLY opened tab inherits for the session-scoped keys — the last
300
- * value the user chose, mirroring the server, which persists the same keys
301
- * to config as the default a new tab starts from.
302
- */
303
- sessionDefaults: Partial<LocalPrefs>;
304
- /** Which session the flat fields currently describe. */
305
- activeSessionId: string | null;
306
- set: (patch: Partial<LocalPrefs>) => void;
307
- /** Point the flat fields at a tab, materialising its overrides. */
308
- bindSession: (sessionId: string | null) => void;
309
- /**
310
- * Apply a server-sent patch. `sessionId` names the tab it belongs to; a
311
- * patch for a BACKGROUND tab updates that tab's override and leaves the
312
- * fields the UI is rendering alone.
313
- */
314
- applyRemote: (patch: Partial<LocalPrefs>, sessionId?: string | undefined) => void;
315
- /** Forget a closed tab's overrides. */
316
- forgetSession: (sessionId: string) => void;
317
- reset: () => void;
318
- }
1
+ import { type LocalPrefs } from './local-prefs-defaults.js';
2
+ export type { LocalPrefs } from './local-prefs-defaults.js';
319
3
  /**
320
4
  * Preferences that belong to ONE session rather than to the browser.
321
5
  *
@@ -1,5 +1,7 @@
1
1
  export type NotificationVariant = 'success' | 'error' | 'warn' | 'info';
2
+ export type NotificationFilter = 'important' | 'all' | NotificationVariant;
2
3
  export type ToastVariant = NotificationVariant;
4
+ export declare function matchesNotificationFilter(notification: Pick<AppNotification, 'variant'>, filter: NotificationFilter): boolean;
3
5
  export interface NotificationAction {
4
6
  label: string;
5
7
  onClick: () => void;
@@ -28,6 +30,9 @@ export interface NotificationStoreState {
28
30
  notifications: AppNotification[];
29
31
  /** Ephemeral toasts currently rendered on screen */
30
32
  toasts: ToastEntry[];
33
+ /** Shared by desktop and mobile notification menus. */
34
+ filter: NotificationFilter;
35
+ setFilter: (filter: NotificationFilter) => void;
31
36
  /** Push a new toast + notification */
32
37
  push: (entry: {
33
38
  message: string;
@@ -51,6 +56,7 @@ export declare const useNotificationStore: import("zustand").UseBoundStore<Omit<
51
56
  setState(state: NotificationStoreState | ((state: NotificationStoreState) => NotificationStoreState), replace: true): unknown;
52
57
  persist: {
53
58
  setOptions: (options: Partial<import("zustand/middleware").PersistOptions<NotificationStoreState, {
59
+ filter: NotificationFilter;
54
60
  notifications: {
55
61
  id: string;
56
62
  message: string;
@@ -70,6 +76,7 @@ export declare const useNotificationStore: import("zustand").UseBoundStore<Omit<
70
76
  onHydrate: (fn: (state: NotificationStoreState) => void) => () => void;
71
77
  onFinishHydration: (fn: (state: NotificationStoreState) => void) => () => void;
72
78
  getOptions: () => Partial<import("zustand/middleware").PersistOptions<NotificationStoreState, {
79
+ filter: NotificationFilter;
73
80
  notifications: {
74
81
  id: string;
75
82
  message: string;
@@ -104,6 +111,7 @@ export declare const useToastStore: import("zustand").UseBoundStore<Omit<import(
104
111
  setState(state: NotificationStoreState | ((state: NotificationStoreState) => NotificationStoreState), replace: true): unknown;
105
112
  persist: {
106
113
  setOptions: (options: Partial<import("zustand/middleware").PersistOptions<NotificationStoreState, {
114
+ filter: NotificationFilter;
107
115
  notifications: {
108
116
  id: string;
109
117
  message: string;
@@ -123,6 +131,7 @@ export declare const useToastStore: import("zustand").UseBoundStore<Omit<import(
123
131
  onHydrate: (fn: (state: NotificationStoreState) => void) => () => void;
124
132
  onFinishHydration: (fn: (state: NotificationStoreState) => void) => () => void;
125
133
  getOptions: () => Partial<import("zustand/middleware").PersistOptions<NotificationStoreState, {
134
+ filter: NotificationFilter;
126
135
  notifications: {
127
136
  id: string;
128
137
  message: string;
@@ -0,0 +1,54 @@
1
+ /**
2
+ * A line comment left on the working-tree diff in the Changes view. Comments
3
+ * are project-scoped (`scope` = project root): the diff is the repository's,
4
+ * not a chat session's, so switching tabs keeps them and switching projects
5
+ * hides them.
6
+ */
7
+ export interface ReviewComment {
8
+ id: string;
9
+ scope: string;
10
+ /** Repo-relative path, as the Changes panel lists it. */
11
+ path: string;
12
+ /** `new` for added/context lines, `old` for removed lines. */
13
+ side: 'old' | 'new';
14
+ /** 1-based line number on `side`. */
15
+ line: number;
16
+ /** The line's text when the comment was written — quoted in the review. */
17
+ lineText: string;
18
+ body: string;
19
+ createdAt: number;
20
+ }
21
+ interface ReviewState {
22
+ comments: ReviewComment[];
23
+ add: (comment: Omit<ReviewComment, 'id' | 'createdAt'>) => ReviewComment | null;
24
+ update: (id: string, body: string) => void;
25
+ remove: (id: string) => void;
26
+ /** Drop every comment in `scope` (after the review went to the composer). */
27
+ clearScope: (scope: string) => void;
28
+ }
29
+ export declare const useReviewStore: import("zustand").UseBoundStore<Omit<import("zustand").StoreApi<ReviewState>, "persist" | "setState"> & {
30
+ setState(partial: Partial<ReviewState> | ReviewState | ((state: ReviewState) => Partial<ReviewState> | ReviewState), replace?: false | undefined): unknown;
31
+ setState(state: ReviewState | ((state: ReviewState) => ReviewState), replace: true): unknown;
32
+ persist: {
33
+ setOptions: (options: Partial<import("zustand/middleware").PersistOptions<ReviewState, {
34
+ comments: ReviewComment[];
35
+ }, unknown>>) => void;
36
+ clearStorage: () => void;
37
+ rehydrate: () => Promise<void> | void;
38
+ hasHydrated: () => boolean;
39
+ onHydrate: (fn: (state: ReviewState) => void) => () => void;
40
+ onFinishHydration: (fn: (state: ReviewState) => void) => () => void;
41
+ getOptions: () => Partial<import("zustand/middleware").PersistOptions<ReviewState, {
42
+ comments: ReviewComment[];
43
+ }, unknown>>;
44
+ };
45
+ }>;
46
+ /** Comments in `scope`, ordered by file then line — the order the review reads in. */
47
+ export declare function scopedComments(comments: readonly ReviewComment[], scope: string): ReviewComment[];
48
+ /**
49
+ * The review as one message the agent can act on: each comment names its file
50
+ * and line, quotes the line it was written against, then the comment.
51
+ */
52
+ export declare function formatReviewMessage(comments: readonly ReviewComment[]): string;
53
+ export {};
54
+ //# sourceMappingURL=review-store.d.ts.map
@@ -0,0 +1,33 @@
1
+ /** A tab is "busy" when its own run is live or it owns a running subagent. */
2
+ export declare function isTabBusy(sessionId: string): boolean;
3
+ /** Everything a busy-tab warning needs to say about one session, gathered in
4
+ * one place. The close dialog and the switch-away toast render the same
5
+ * `lines`, so the two warnings cannot drift apart or go vague. */
6
+ export interface SessionActivityReport {
7
+ sessionId: string;
8
+ isBusy: boolean;
9
+ /** True when the tab holds nothing at all — no chat history, no agents
10
+ * (running or finished), no queued messages, no live run. Such a tab has
11
+ * nothing to lose and may close without asking. */
12
+ isEmpty: boolean;
13
+ leaderRunning: boolean;
14
+ runningAgents: Array<{
15
+ id: string;
16
+ name: string;
17
+ brief: string;
18
+ }>;
19
+ finishedAgents: number;
20
+ queuedMessages: number;
21
+ /** Pre-localized, factual inventory lines (no framing). */
22
+ lines: string[];
23
+ }
24
+ /** Complete inventory of what a session has in flight: its own run, every
25
+ * running subagent with a task preview, finished agents on record, queued
26
+ * messages. Reads the lane registries directly, like `isTabBusy`. */
27
+ export declare function describeSessionActivity(sessionId: string): SessionActivityReport;
28
+ /** Thorough, non-blocking notice fired when the foreground moves OFF a busy
29
+ * tab: the tab keeps running in its slot, and the user sees exactly what
30
+ * stays behind. Switching back is always one click, so this must inform,
31
+ * not block. */
32
+ export declare function notifyBusyTabLeftBehind(sessionId: string): void;
33
+ //# sourceMappingURL=session-activity.d.ts.map
@@ -1,22 +1,4 @@
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
- */
1
+ export { describeSessionActivity, isTabBusy } from './session-activity.js';
20
2
  import { chatLane } from './chat-lanes';
21
3
  export declare const MAX_OPEN_TABS = 4;
22
4
  export declare const TAB_STORAGE_KEY = "wrongstack.open_session_tabs";
@@ -78,33 +60,6 @@ interface SessionTabState {
78
60
  markSeen: (sessionId: string) => void;
79
61
  setAttention: (sessionId: string, needsAttention: boolean) => void;
80
62
  }
81
- /** A tab is "busy" when its own run is live or it owns a running subagent. */
82
- export declare function isTabBusy(sessionId: string): boolean;
83
- /** Everything a busy-tab warning needs to say about one session, gathered in
84
- * one place. The close dialog and the switch-away toast render the same
85
- * `lines`, so the two warnings cannot drift apart or go vague. */
86
- interface SessionActivityReport {
87
- sessionId: string;
88
- isBusy: boolean;
89
- /** True when the tab holds nothing at all — no chat history, no agents
90
- * (running or finished), no queued messages, no live run. Such a tab has
91
- * nothing to lose and may close without asking. */
92
- isEmpty: boolean;
93
- leaderRunning: boolean;
94
- runningAgents: Array<{
95
- id: string;
96
- name: string;
97
- brief: string;
98
- }>;
99
- finishedAgents: number;
100
- queuedMessages: number;
101
- /** Pre-localized, factual inventory lines (no framing). */
102
- lines: string[];
103
- }
104
- /** Complete inventory of what a session has in flight: its own run, every
105
- * running subagent with a task preview, finished agents on record, queued
106
- * messages. Reads the lane registries directly, like `isTabBusy`. */
107
- export declare function describeSessionActivity(sessionId: string): SessionActivityReport;
108
63
  /**
109
64
  * Everything one slot owns, freed in one place.
110
65
  *
@@ -0,0 +1,26 @@
1
+ /** Lines kept for the strip's peek. */
2
+ export declare const TERMINAL_PEEK_LINES = 12;
3
+ export interface TerminalSummary {
4
+ id: string;
5
+ name: string;
6
+ status: 'starting' | 'running' | 'exited';
7
+ exitCode?: number | undefined;
8
+ lastOutputAt: number;
9
+ tail: string[];
10
+ }
11
+ interface TerminalStripState {
12
+ terminals: TerminalSummary[];
13
+ /** A terminal the strip asked the dock to bring to the front. */
14
+ focusRequest: {
15
+ id: string;
16
+ nonce: number;
17
+ } | null;
18
+ syncTabs(tabs: ReadonlyArray<Pick<TerminalSummary, 'id' | 'name' | 'status' | 'exitCode'>>): void;
19
+ appendOutput(id: string, lines: string[], at: number): void;
20
+ requestFocus(id: string): void;
21
+ clear(): void;
22
+ }
23
+ export declare const useTerminalStripStore: import("zustand").UseBoundStore<import("zustand").StoreApi<TerminalStripState>>;
24
+ export declare function noteTerminalOutput(id: string, data: string): void;
25
+ export {};
26
+ //# sourceMappingURL=terminal-strip-store.d.ts.map
@@ -1,4 +1,4 @@
1
- import type { UIState, SessionChromeState } from "./ui-store-types.js";
1
+ import type { SessionChromeState, UIState } from './ui-store-types.js';
2
2
  export declare function isDesktopShellStorageContext(): boolean;
3
3
  export declare function homeNavigationStatePatch(options?: {
4
4
  sidebarOpen?: boolean | undefined;
@@ -1,4 +1,4 @@
1
- import type { PersistOptions } from "zustand/middleware";
2
- import type { UIState } from "./ui-store-types.js";
1
+ import type { PersistOptions } from 'zustand/middleware';
2
+ import type { UIState } from './ui-store-types.js';
3
3
  export declare const uiPersistOptions: PersistOptions<UIState, Partial<UIState>>;
4
4
  //# sourceMappingURL=ui-store-persist.d.ts.map
@@ -26,16 +26,16 @@ export type View = (typeof VIEWS)[number];
26
26
  * when reading from localStorage so a stale value (e.g. 'context', a view
27
27
  * removed in v3) lands on 'chat' rather than crashing the router. */
28
28
  export declare function coerceView(value: unknown): View;
29
- export declare const DOCK_SECTIONS: readonly ['goal', 'goal-state', 'fleet', 'work', 'worktrees', 'collab'];
29
+ export declare const DOCK_SECTIONS: readonly ['goal', 'goal-state', 'fleet', 'work', 'worktrees', 'collab', 'browser'];
30
30
  export declare function coerceDockSection(value: unknown): DockSection | null;
31
- export declare const SETTINGS_TABS: readonly ['general', 'fonts', 'provider', 'connection', 'agent', 'execution', 'fallbacks', 'routing', 'fleet', 'integrations', 'chimera', 'context', 'logs', 'security', 'display'];
31
+ export declare const SETTINGS_TABS: readonly ['general', 'fonts', 'provider', 'jev', 'connection', 'agent', 'execution', 'fallbacks', 'routing', 'fleet', 'integrations', 'chimera', 'context', 'logs', 'security', 'display'];
32
32
  export declare function coerceSettingsTab(value: unknown): string;
33
33
  /** Single source of truth for the secondary panel width bounds. */
34
34
  export declare const SIDEBAR_MIN_WIDTH = 240;
35
35
  export declare const SIDEBAR_MAX_WIDTH = 560;
36
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';
37
+ /** Sections of the WorkspaceDock in the Session side panel. */
38
+ export type DockSection = 'goal' | 'goal-state' | 'fleet' | 'work' | 'worktrees' | 'collab' | 'browser';
39
39
  export type WorkDashboardTab = 'todos' | 'tasks' | 'plan';
40
40
  /**
41
41
  * User-customized ActivityBar icon order (panels + views). Null = default
@@ -1,8 +1,8 @@
1
- export type { Activity, View, DockSection, WorkDashboardTab, InspectorTab, InspectorTarget, SessionChromeState, UIState, } from "./ui-store-types.js";
2
- export { ACTIVITIES, coerceActivity, VIEWS, coerceView, DOCK_SECTIONS, coerceDockSection, SETTINGS_TABS, coerceSettingsTab, SIDEBAR_MIN_WIDTH, SIDEBAR_MAX_WIDTH, SIDEBAR_DEFAULT_WIDTH, } from "./ui-store-types.js";
3
- export { isDesktopShellStorageContext, homeNavigationStatePatch, defaultSkillsState, defaultSessionChrome, readSessionChrome, parkChrome, } from "./ui-store-chrome.js";
4
- export { uiPersistOptions } from "./ui-store-persist.js";
5
- import type { UIState } from "./ui-store-types.js";
1
+ export { ACTIVITIES, DOCK_SECTIONS, SETTINGS_TABS, SIDEBAR_DEFAULT_WIDTH, SIDEBAR_MAX_WIDTH, SIDEBAR_MIN_WIDTH, VIEWS, coerceActivity, coerceDockSection, coerceSettingsTab, coerceView, } from './ui-store-types.js';
2
+ export type { Activity, DockSection, InspectorTab, InspectorTarget, SessionChromeState, UIState, View, WorkDashboardTab, } from './ui-store-types.js';
3
+ export { defaultSessionChrome, defaultSkillsState, homeNavigationStatePatch, isDesktopShellStorageContext, parkChrome, readSessionChrome, } from './ui-store-chrome.js';
4
+ export { uiPersistOptions } from './ui-store-persist.js';
5
+ import type { UIState } from './ui-store-types.js';
6
6
  export declare const useUIStore: import("zustand").UseBoundStore<Omit<import("zustand").StoreApi<UIState>, "persist" | "setState"> & {
7
7
  setState(partial: Partial<UIState> | UIState | ((state: UIState) => Partial<UIState> | UIState), replace?: false | undefined): unknown;
8
8
  setState(state: UIState | ((state: UIState) => UIState), replace: true): unknown;
@@ -65,14 +65,16 @@ interface BrainHeuristicsPatchWire {
65
65
  }
66
66
  /** Effective single-LLM tier quality gate. */
67
67
  interface BrainLlmWire {
68
- maxTokens: number;
68
+ /** Absent = the model's own output ceiling. */
69
+ maxTokens?: number | undefined;
69
70
  rejectUncertain: boolean;
70
71
  minConfidence: number;
71
72
  denyIsTerminal: 'never' | 'when-decided' | 'always';
72
73
  }
73
74
  /** Writable single-LLM tier quality gate. */
74
75
  interface BrainLlmPatchWire {
75
- maxTokens?: number | undefined;
76
+ /** `null` clears the cap back to the model's own ceiling. */
77
+ maxTokens?: number | null | undefined;
76
78
  rejectUncertain?: boolean | undefined;
77
79
  minConfidence?: number | undefined;
78
80
  denyIsTerminal?: 'never' | 'when-decided' | 'always' | undefined;