@wrongstack/webui 1.0.24 → 1.0.27

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 (239) hide show
  1. package/dist/assets/AgentRosterView-BJ-1SQOm.js +12 -0
  2. package/dist/assets/{AnalyticsDashboard-DgqJODVI.js → AnalyticsDashboard-FYrD8BFQ.js} +1 -1
  3. package/dist/assets/AudienceMemoryPanel-BghMZicW.js +3 -0
  4. package/dist/assets/ChangesView-B3uQtZGR.js +3 -0
  5. package/dist/assets/ChimeraReviewsView-CBRbTHGM.js +1 -0
  6. package/dist/assets/ChronicleDashboard-B1E-_u64.js +1 -0
  7. package/dist/assets/CodeEditor-CbcWuMGV.js +2 -0
  8. package/dist/assets/CodeMap-WOfveRTG.js +1 -0
  9. package/dist/assets/{CronJobsPanel-GTK038V9.js → CronJobsPanel-DOFA5WVq.js} +1 -1
  10. package/dist/assets/{DeadCodeScanPanel-DX4OEuyp.js → DeadCodeScanPanel-4ToPZX7e.js} +1 -1
  11. package/dist/assets/{DebugDashboard-CKp3sa_k.js → DebugDashboard-DAsNHSpG.js} +1 -1
  12. package/dist/assets/{DesignGalleryView-DVUTYaP6.js → DesignGalleryView-Dd5YnKhs.js} +1 -1
  13. package/dist/assets/GoalView-BaDGAXuQ.js +1 -0
  14. package/dist/assets/KanbanView-CG8bVhpR.js +3 -0
  15. package/dist/assets/{MailboxDetailView-CylnzTVc.js → MailboxDetailView-COxz-eEJ.js} +1 -1
  16. package/dist/assets/{MemoryDrawer-DJ0Y98Z8.js → MemoryDrawer-4lDXuHCi.js} +1 -1
  17. package/dist/assets/MemoryManager-DQlnpch1.js +1 -0
  18. package/dist/assets/{ProcessMonitor-BnQ3vJtn.js → ProcessMonitor-BUjfYqG3.js} +1 -1
  19. package/dist/assets/PromptJournalView-o2dmPrwg.js +1 -0
  20. package/dist/assets/ProviderTestView-5wNbI46L.js +1 -0
  21. package/dist/assets/QueuePanel-DP9D99DX.js +1 -0
  22. package/dist/assets/{RefreshDebugView-s6MyGpPq.js → RefreshDebugView-CB7_a_TI.js} +1 -1
  23. package/dist/assets/{RepositoryHistoryView-CWi_Zo3F.js → RepositoryHistoryView-C_zpYLY6.js} +2 -2
  24. package/dist/assets/RequirementIntakeView-CahKEHJn.js +1 -0
  25. package/dist/assets/{SageTabs-D6eTg3ix.js → SageTabs-5Z2PR11S.js} +2 -2
  26. package/dist/assets/{SddFlowGraph-B-ptkFX6.js → SddFlowGraph-DSoWnlIt.js} +1 -1
  27. package/dist/assets/SddHub-0q2EpwYz.js +2 -0
  28. package/dist/assets/{SessionInspectView-NSpj5WEN.js → SessionInspectView-CbDFR_tP.js} +1 -1
  29. package/dist/assets/SessionList-DhQK7JnP.js +1 -0
  30. package/dist/assets/{SessionsDashboard-mF4PzdKY.js → SessionsDashboard-DNLDczSd.js} +1 -1
  31. package/dist/assets/SetupScreen-C-hpHQQ9.js +1 -0
  32. package/dist/assets/{SkillDetailView-B9BFyB1i.js → SkillDetailView-Bir-Kdm4.js} +3 -3
  33. package/dist/assets/TechStackView-CJ3Abnwg.js +2 -0
  34. package/dist/assets/TerminalPanel-8WHNTeQK.js +1 -0
  35. package/dist/assets/activity-B9WjS_Cz.js +10 -0
  36. package/dist/assets/activity-BB7AHL0U.js +10 -0
  37. package/dist/assets/activity-Bd0XmdqX.js +10 -0
  38. package/dist/assets/activity-BvmJte2K.js +10 -0
  39. package/dist/assets/activity-DOEbDWqw.js +10 -0
  40. package/dist/assets/activity-beTxIN7V.js +10 -0
  41. package/dist/assets/activity-t-0KDhv5.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-BMwP_sS0.js +1 -0
  51. package/dist/assets/{codemap-activity-store-Ha7XbGgq.js → codemap-activity-store-WjfEZe4_.js} +1 -1
  52. package/dist/assets/{common-DvjdaRhB.js → common-2kj0c3pG.js} +1 -1
  53. package/dist/assets/{common-D0QL7rwb.js → common-BAvh8XBp.js} +1 -1
  54. package/dist/assets/{common-opV6EoLd.js → common-CKwGvEQD.js} +1 -1
  55. package/dist/assets/{common-DJRPtYAt.js → common-CUd7l34J.js} +1 -1
  56. package/dist/assets/{common-BtyQBZBN.js → common-DmS4Wp1i.js} +1 -1
  57. package/dist/assets/common-PC103akE.js +1 -0
  58. package/dist/assets/{common-Bjl7V12m.js → common-zatZ4s-Z.js} +1 -1
  59. package/dist/assets/config-store-Cb4iyhGv.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-CzTjKT4L.js +3 -0
  64. package/dist/assets/index-Ci22AODp.js +182 -0
  65. package/dist/assets/index-DfU9PQg8.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-Cv_PHlEV.js → roster-ws-D-DCMdrg.js} +1 -1
  69. package/dist/assets/settings-7W0ofid0.js +1 -0
  70. package/dist/assets/settings-BAArGYGW.js +1 -0
  71. package/dist/assets/settings-Btyr_M2v.js +1 -0
  72. package/dist/assets/settings-BwL_DVmc.js +1 -0
  73. package/dist/assets/settings-C7ybAkyi.js +1 -0
  74. package/dist/assets/settings-CgtL8eYb.js +1 -0
  75. package/dist/assets/settings-D57Fd8Z8.js +1 -0
  76. package/dist/assets/{shared-BFJvAYzX.js → shared-CLNEiW00.js} +1 -1
  77. package/dist/assets/stores-Svlibwo5.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-CpIPxhZp.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/slash-routing.d.ts +18 -0
  95. package/dist/components/ChatInput/use-paste-drop.d.ts +3 -0
  96. package/dist/components/ChatInput/use-prompt-queue-view.d.ts +13 -0
  97. package/dist/components/ChatView/BackgroundShellStrip.d.ts +16 -0
  98. package/dist/components/ChatView/TerminalStrip.d.ts +8 -0
  99. package/dist/components/CodeMap.d.ts +0 -12
  100. package/dist/components/GoalPanel.d.ts +2 -1
  101. package/dist/components/ImageDiffView.d.ts +12 -0
  102. package/dist/components/KanbanTaskExecution.d.ts +64 -0
  103. package/dist/components/KanbanTaskInspector.d.ts +1 -1
  104. package/dist/components/MessageBubble/AttachmentGallery.d.ts +1 -1
  105. package/dist/components/MessageBubble/FailedRunContinue.d.ts +7 -3
  106. package/dist/components/MessageBubble/GeneratedImagePreview.d.ts +10 -0
  107. package/dist/components/SessionTabBar/summaries.d.ts +4 -0
  108. package/dist/components/SettingsPanel/LimitsSection.d.ts +7 -0
  109. package/dist/components/SettingsPanel/MCPSection.d.ts +1 -37
  110. package/dist/components/SettingsPanel/MCPServerCards.d.ts +67 -0
  111. package/dist/components/SettingsPanel/MCPServerDialog.d.ts +11 -0
  112. package/dist/components/SettingsPanel/PreferenceControls.d.ts +8 -0
  113. package/dist/components/SettingsPanel/ProviderSavedProfiles.d.ts +50 -0
  114. package/dist/components/SettingsPanel/ProviderSection.d.ts +2 -79
  115. package/dist/components/SettingsPanel/SettingsNavigation.d.ts +12 -0
  116. package/dist/components/SettingsPanel/brain-section-options.d.ts +1 -2
  117. package/dist/components/SettingsPanel/provider-section-types.d.ts +79 -0
  118. package/dist/components/SidePanel/SessionList.d.ts +1 -34
  119. package/dist/components/SidePanel/session-history.d.ts +61 -0
  120. package/dist/components/SystemPromptPresetEditor.d.ts +9 -0
  121. package/dist/components/TechStackView/AnalyzeControls.d.ts +25 -0
  122. package/dist/components/TechStackView/RemediationTab.d.ts +20 -0
  123. package/dist/components/TechStackView/TrendsTab.d.ts +17 -0
  124. package/dist/components/TerminalPanel.d.ts +8 -1
  125. package/dist/components/WorkspaceDock.d.ts +2 -2
  126. package/dist/components/review/ReviewDiff.d.ts +21 -0
  127. package/dist/components/review/ReviewTray.d.ts +15 -0
  128. package/dist/components/review/review-diff-model.d.ts +31 -0
  129. package/dist/components/use-code-map-flow.d.ts +25 -0
  130. package/dist/components/use-office-map-canvas.d.ts +1 -1
  131. package/dist/components/use-office-map-topology.d.ts +31 -0
  132. package/dist/hooks/use-live-browser.d.ts +7 -0
  133. package/dist/hooks/useWebSocket.d.ts +1 -2
  134. package/dist/hooks/ws-handlers/chat-handlers.d.ts +12 -0
  135. package/dist/hooks/ws-handlers/goal-handlers.d.ts +2 -0
  136. package/dist/hooks/ws-handlers/mcp-status-handlers.d.ts +6 -0
  137. package/dist/hooks/ws-handlers/prompt-queue-handlers.d.ts +18 -0
  138. package/dist/hooks/ws-handlers/techstack-handlers.d.ts +7 -0
  139. package/dist/index.css +3013 -3013
  140. package/dist/index.html +19 -19
  141. package/dist/index.js +53010 -47407
  142. package/dist/lib/compact-file-tree.d.ts +30 -0
  143. package/dist/lib/project-image.d.ts +26 -0
  144. package/dist/lib/provider-warm.d.ts +3 -0
  145. package/dist/lib/ws-client-session-methods.d.ts +2 -0
  146. package/dist/lib/ws-client.d.ts +3 -0
  147. package/dist/stores/chat-lane-data.d.ts +153 -0
  148. package/dist/stores/chat-lanes.d.ts +3 -174
  149. package/dist/stores/chat-queue-helpers.d.ts +9 -0
  150. package/dist/stores/chat-store-types.d.ts +3 -0
  151. package/dist/stores/chat-store.d.ts +1 -1
  152. package/dist/stores/context-editor-store.d.ts +1 -1
  153. package/dist/stores/fleet-transcript.d.ts +14 -0
  154. package/dist/stores/git-changes-store.d.ts +3 -0
  155. package/dist/stores/goal-run-store.d.ts +8 -0
  156. package/dist/stores/goal-state-store.d.ts +3 -0
  157. package/dist/stores/goal-store.d.ts +9 -11
  158. package/dist/stores/index.d.ts +1 -1
  159. package/dist/stores/local-prefs-defaults.d.ts +341 -0
  160. package/dist/stores/local-prefs.d.ts +2 -318
  161. package/dist/stores/notification-store.d.ts +9 -0
  162. package/dist/stores/provider-quota-store.d.ts +5 -0
  163. package/dist/stores/review-store.d.ts +54 -0
  164. package/dist/stores/session-activity.d.ts +33 -0
  165. package/dist/stores/session-tab-store.d.ts +1 -46
  166. package/dist/stores/techstack-store.d.ts +140 -1
  167. package/dist/stores/terminal-strip-store.d.ts +26 -0
  168. package/dist/stores/types.d.ts +5 -0
  169. package/dist/stores/ui-store-chrome.d.ts +1 -1
  170. package/dist/stores/ui-store-persist.d.ts +2 -2
  171. package/dist/stores/ui-store-types.d.ts +3 -3
  172. package/dist/stores/ui-store.d.ts +5 -5
  173. package/dist/types/brain.d.ts +4 -2
  174. package/dist/types/client-message.d.ts +122 -14
  175. package/dist/types/jev.d.ts +2 -0
  176. package/dist/types/prompt-queue.d.ts +55 -0
  177. package/dist/types/protocol-core.d.ts +4 -216
  178. package/dist/types/runtime.d.ts +3 -38
  179. package/dist/types/server-message-files.d.ts +22 -0
  180. package/dist/types/server-message-mcp.d.ts +32 -0
  181. package/dist/types/server-message-system.d.ts +121 -0
  182. package/dist/types/server-message.d.ts +4 -3
  183. package/dist/types/system.d.ts +2 -24
  184. package/package.json +11 -9
  185. package/dist/assets/AgentRosterView-Dq8Xa0WK.js +0 -12
  186. package/dist/assets/AudienceMemoryPanel-BVGdDVTT.js +0 -3
  187. package/dist/assets/ChangesView-BVyLENBb.js +0 -1
  188. package/dist/assets/ChimeraReviewsView-CTuxzgTC.js +0 -1
  189. package/dist/assets/ChronicleDashboard-BRP7D6RZ.js +0 -1
  190. package/dist/assets/CodeEditor-k3z3M0NG.js +0 -2
  191. package/dist/assets/CodeMap-CvHNQZEF.js +0 -1
  192. package/dist/assets/GoalView-D8G8e8YG.js +0 -1
  193. package/dist/assets/KanbanView-BMXGDqGo.js +0 -3
  194. package/dist/assets/MemoryManager-DfcsYPUB.js +0 -1
  195. package/dist/assets/PromptJournalView-D7k8Yh5a.js +0 -1
  196. package/dist/assets/ProviderTestView-DSd6kkWT.js +0 -1
  197. package/dist/assets/QueuePanel-79KiyZWD.js +0 -1
  198. package/dist/assets/RequirementIntakeView-D_Ea20fx.js +0 -1
  199. package/dist/assets/SddHub-CSVfLGpr.js +0 -2
  200. package/dist/assets/SessionList-BYRCs1AK.js +0 -1
  201. package/dist/assets/SetupScreen-BUZeJSZi.js +0 -1
  202. package/dist/assets/TechStackView-CXJilX0M.js +0 -2
  203. package/dist/assets/TerminalPanel-CAXevSAa.js +0 -1
  204. package/dist/assets/activity-B3wutYIE.js +0 -10
  205. package/dist/assets/activity-Be03cc7g.js +0 -10
  206. package/dist/assets/activity-CiYZ3y4e.js +0 -10
  207. package/dist/assets/activity-CmIA2MhR.js +0 -10
  208. package/dist/assets/activity-Cp5GhldB.js +0 -10
  209. package/dist/assets/activity-DFCf7l5d.js +0 -10
  210. package/dist/assets/activity-EbNUY7Ci.js +0 -10
  211. package/dist/assets/chat-6dE2AJNN.js +0 -1
  212. package/dist/assets/chat-B3AJmhGD.js +0 -1
  213. package/dist/assets/chat-BHsbpaVt.js +0 -1
  214. package/dist/assets/chat-BITJe8-v.js +0 -1
  215. package/dist/assets/chat-U-Jjb8_k.js +0 -1
  216. package/dist/assets/chat-_Xp5fDnj.js +0 -1
  217. package/dist/assets/chat-mSbSzPl5.js +0 -1
  218. package/dist/assets/chat-store-C7InoWAO.js +0 -1
  219. package/dist/assets/common-DPPTV3yw.js +0 -1
  220. package/dist/assets/config-store-BbL0WxLE.js +0 -21
  221. package/dist/assets/i18n-Dv97urcO.js +0 -3
  222. package/dist/assets/index-CON0Nbm4.css +0 -1
  223. package/dist/assets/index-DX6tHUzs.js +0 -177
  224. package/dist/assets/settings-BCvuzOJ6.js +0 -1
  225. package/dist/assets/settings-DMPKd-4K.js +0 -1
  226. package/dist/assets/settings-DxQ2452f.js +0 -1
  227. package/dist/assets/settings-Dz3StaVx.js +0 -1
  228. package/dist/assets/settings-EBW1mlXc.js +0 -1
  229. package/dist/assets/settings-Er2LHp9d.js +0 -1
  230. package/dist/assets/settings-EzznCDaX.js +0 -1
  231. package/dist/assets/stores-DXn5tdr7.js +0 -7
  232. package/dist/assets/toasts-BsmyGP95.js +0 -1
  233. package/dist/assets/toasts-CgXHu8ZB.js +0 -1
  234. package/dist/assets/toasts-DZ6HdKgG.js +0 -1
  235. package/dist/assets/toasts-DizCJjAR.js +0 -1
  236. package/dist/assets/toasts-NC2MT4uN.js +0 -1
  237. package/dist/assets/toasts-bPl097de.js +0 -1
  238. package/dist/assets/toasts-tCVo15mP.js +0 -1
  239. package/dist/assets/ui-store-DxDwFHNK.js +0 -1
@@ -0,0 +1,341 @@
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
+ * User-chosen limits (`Config.limits`). Every field is optional; an unset
102
+ * field means no limit — the model, catalog or provider decides.
103
+ */
104
+ limits: {
105
+ responseOutputTokens?: number;
106
+ toolOutputPreviewBytes?: number;
107
+ fetchBytes?: number;
108
+ projectInstructionsChars?: number;
109
+ memoryInjectChars?: number;
110
+ historyMessages?: number;
111
+ subagentResultChars?: number;
112
+ subagentDefaultBudget?: {
113
+ maxIterations?: number;
114
+ maxToolCalls?: number;
115
+ timeoutMs?: number;
116
+ };
117
+ };
118
+ /**
119
+ * Deterministic cost tiers. A level binds a fallback profile, a spend budget
120
+ * and runtime overrides under one name; `routing` maps a role/phase/`*` to a
121
+ * level; `leader` governs how much authority the leader has over its own tier.
122
+ */
123
+ modelTiers: {
124
+ enabled?: boolean;
125
+ default?: string;
126
+ levels?: Record<string, {
127
+ fallbackProfile?: string;
128
+ provider?: string;
129
+ model?: string;
130
+ maxCostUsd?: number;
131
+ maxIterations?: number;
132
+ maxToolCalls?: number;
133
+ maxTokens?: number;
134
+ timeoutMs?: number;
135
+ description?: string;
136
+ modelRuntime?: {
137
+ reasoning?: {
138
+ mode?: 'auto' | 'on' | 'off';
139
+ effort?: string;
140
+ preserve?: boolean;
141
+ };
142
+ cache?: {
143
+ ttl?: '5m' | '1h';
144
+ };
145
+ };
146
+ }>;
147
+ routing?: Record<string, string>;
148
+ leader?: {
149
+ mode?: 'off' | 'propose' | 'auto';
150
+ dwellTurns?: number;
151
+ minSavingsUsd?: number;
152
+ maxContextFillForSwitch?: number;
153
+ maxTier?: string;
154
+ };
155
+ };
156
+ /** Auto-derive a fallback chain from keyed providers when the list is empty. */
157
+ fallbackAuto: boolean;
158
+ /** Recurring provider/model blackout windows for autonomous routing. */
159
+ modelAvailabilitySchedule: import('@wrongstack/core/models').ModelBlackoutRule[];
160
+ featureMcp: boolean;
161
+ featurePlugins: boolean;
162
+ featureMemory: boolean;
163
+ featureSkills: boolean;
164
+ featureModelsRegistry: boolean;
165
+ featureToolCoach: boolean;
166
+ indexOnStart: boolean;
167
+ /** Per-plugin enabled/disabled state. Keys are plugin names (e.g. "wstack-chimera"). */
168
+ pluginsEnabled: Record<string, boolean>;
169
+ contextAutoCompact: boolean;
170
+ /** Compactor strategy — matches core's config.context.strategy. */
171
+ contextStrategy: 'hybrid' | 'intelligent' | 'selective';
172
+ /** Context window mode — matches core's config.context.mode. */
173
+ contextMode: 'balanced' | 'frugal' | 'deep';
174
+ /** Token-saving mode — matches core's config.features.tokenSavingMode. */
175
+ tokenSavingTier: 'auto' | 'off' | 'minimal' | 'light' | 'medium' | 'aggressive';
176
+ /** Max concurrent subagents */
177
+ maxConcurrent: number;
178
+ /** Terminal title animation */
179
+ titleAnimation: boolean;
180
+ logLevel: 'debug' | 'info' | 'warn' | 'error';
181
+ /** Session audit detail — matches core's config.session.auditLevel. */
182
+ auditLevel: 'minimal' | 'standard' | 'full';
183
+ enhanceEnabled: boolean;
184
+ enhanceDelayMs: number;
185
+ /** Pre-refine grace countdown (ms) before the refiner call starts. */
186
+ enhanceCountdownMs: number;
187
+ enhanceLanguage: 'original' | 'english';
188
+ /** Provider id for goal refinement (`/goal set`). Empty = use session provider. */
189
+ refinerProvider: string;
190
+ /** Model id for goal refinement. Empty = use session model. */
191
+ refinerModel: string;
192
+ /** Named fallback profile for goal refinement. Empty = use refinerProvider+refinerModel or session defaults. */
193
+ refinerFallbackProfile: string;
194
+ /** TUI status-chip word (e.g. "thinking", "vibing"). */
195
+ thinkingWord: string;
196
+ /** TUI statusline density. */
197
+ statuslineMode: 'minimum' | 'detailed' | 'no-color';
198
+ /** TUI working-chip animation style. */
199
+ animationStyle: 'rainbow' | 'wave' | 'pulse' | 'dots' | 'breathe' | 'static' | 'cycle';
200
+ /** Show completed thinking/logic blocks in chat history */
201
+ showThinkingLogs: boolean;
202
+ /** Group consecutive tool calls into collapsible chips */
203
+ groupToolCalls: boolean;
204
+ /** Auto-collapse the chat input under the history when a session with
205
+ * messages loads (opt-in; off by default). When off, the input always
206
+ * starts expanded. Independent of the manual collapse/expand buttons. */
207
+ autoCollapseInput: boolean;
208
+ /** Show model reasoning/thinking blocks inline in the chat */
209
+ showModelReasoning: boolean;
210
+ /** Agent swarm panel placement: bottom, sidebar, or off */
211
+ showAgentSwarmPanel: 'bottom' | 'sidebar' | 'off';
212
+ /** Allow tools to access paths outside the project root (inverse of fsAccess). */
213
+ allowOutsideProjectRoot: boolean;
214
+ reasoningMode: 'auto' | 'on' | 'off';
215
+ reasoningEffort: string;
216
+ reasoningPreserve: boolean;
217
+ cacheTtl: 'default' | '5m' | '1h';
218
+ /** Process circuit breaker — gates bash/exec after repeated failures. */
219
+ breakerEnabled: boolean;
220
+ /** Auto kill/reset delay (ms) when the breaker trips. 0 = manual recovery. */
221
+ breakerAutoKillResetMs: number;
222
+ /** File-tool access scope. 'project' confines file tools to the project root (restart to apply). */
223
+ fsAccess: 'unrestricted' | 'project';
224
+ /** Raw SSE hex-dump to the server's stderr for provider debugging. */
225
+ debugStream: boolean;
226
+ hqEnabled: boolean;
227
+ hqUrl: string;
228
+ hqToken: string;
229
+ hqRawContent: boolean;
230
+ /** Plugin configured with a bot token (gates the whole section). */
231
+ tgConfigured: boolean;
232
+ tgSessionEnd: boolean;
233
+ tgDelegate: boolean;
234
+ /** Long-tool threshold in ms. 0 = disabled. */
235
+ tgLongToolMs: number;
236
+ /**
237
+ * Display-only UI language (BCP-47 code, e.g. `en`, `pt-BR`).
238
+ * Synced through prefs.update into shared Config.uiLocale so browser WebUI,
239
+ * desktop-hosted WebUI, and the desktop shell follow the same choice.
240
+ * Distinct from `enhanceLanguage` (a prompt-refinement pref).
241
+ */
242
+ uiLocale: string;
243
+ /** How Chimera review findings are handled. */
244
+ chimeraAutoFix: 'off' | 'ask' | 'auto';
245
+ /** When true, the read tool includes codebase-index symbols in its output.
246
+ * Mirrors TUI field 42 (`readSymbols`) persisted as
247
+ * `autonomy.readAdvancedMode`. */
248
+ readSymbols: boolean;
249
+ /** When true, SAGE memory-inject blocks are surfaced in tool results.
250
+ * Mirrors TUI field 43 (`showSageMemoryInject`). */
251
+ showSageMemoryInject: boolean;
252
+ /** Minimum relation strength for SAGE memory injection. Mirrors TUI field
253
+ * 44 (`sageMemoryInjectThreshold`) persisted as
254
+ * `Sage.inject.relationFloor`. */
255
+ sageMemoryInjectThreshold: number;
256
+ /** Pre-refine grace countdown in SECONDS (TUI field 41). 0 = skip the
257
+ * countdown and run the refiner immediately. Presets:
258
+ * 0, 2, 3, 5, 8, 10. Distinct from `enhanceCountdownMs` (a TUI-internal
259
+ * ms value used by the simpleui RefinePanel animation). */
260
+ preRefineSeconds: number;
261
+ /** Minimum number of files before the multi-file diff summary footer
262
+ * renders above the per-file blocks. 0 disables the footer. Mirrors TUI
263
+ * field 21 (`multiDiffSummaryThreshold`). */
264
+ multiDiffSummaryThreshold: number;
265
+ /** Master enable for `wstack-chimera`. Defaults to true (matches plugin: `cfg.enabled !== false`). */
266
+ chimeraEnabled: boolean;
267
+ /** Override provider id for the review subagent. Empty = use session provider. */
268
+ chimeraProvider: string;
269
+ /** Override model id for the review subagent. Empty = use session model. */
270
+ chimeraModel: string;
271
+ /** Maximum number of files considered per review (default 15). */
272
+ chimeraMaxFiles: number;
273
+ /** Master enable for `wstack-auto-review`. Defaults to true (matches plugin: `cfg.enabled !== false`). */
274
+ autoReviewEnabled: boolean;
275
+ /** Override provider id for the review subagent. Empty = resolve via fallbackProfile/effective chain. */
276
+ autoReviewProvider: string;
277
+ /** Override model id for the review subagent. Empty = resolve via fallbackProfile/effective chain. */
278
+ autoReviewModel: string;
279
+ /** Named fallback profile (from `config.fallbackProfiles`) used to derive provider/model + fallback chain. */
280
+ autoReviewFallbackProfile: string;
281
+ /** Starting-model policy for the selected auto-review profile. */
282
+ autoReviewModelSelection: 'round-robin' | 'random';
283
+ /** Explicit fallback chain (derived when no fallbackProfile is set, surfaced for visibility). */
284
+ autoReviewFallbackModels: string[];
285
+ /** Debounce window in ms — wait for quiet before firing review (default 15000). */
286
+ autoReviewDebounceMs: number;
287
+ /** Max files per review batch (default 15). */
288
+ autoReviewMaxFilesPerBatch: number;
289
+ /** Max concurrent in-flight reviews (default 2). */
290
+ autoReviewMaxConcurrentReviews: number;
291
+ /** Cascade severity threshold: when a review finds findings at or above this level, spawn follow-up agents. */
292
+ autoReviewCascadeOn: 'off' | 'critical' | 'high';
293
+ /**
294
+ * Master switch. When true AND the daemon at `wrongProxyUrl` is
295
+ * reachable, every provider's base URL flows through
296
+ * `${wrongProxyUrl}/proxy/<host><path>`. Excluded providers
297
+ * (openai-codex) flow through unchanged.
298
+ */
299
+ wrongProxyEnabled: boolean;
300
+ /**
301
+ * Where the local proxy daemon listens. Default `http://localhost:3444`.
302
+ * User-editable via WebUI `IntegrationsSection` and TUI SettingsPicker.
303
+ * Periodic probe targets `<wrongProxyUrl>/api/health`; 2xx → active.
304
+ */
305
+ wrongProxyUrl: string;
306
+ /** Master toggle for global keyboard shortcuts. Defaults to false. */
307
+ keyboardShortcuts: boolean;
308
+ /**
309
+ * Per-session overrides for the keys in `SESSION_SCOPED_PREF_KEYS`.
310
+ *
311
+ * The flat fields above are the EFFECTIVE view of the tab in front, so
312
+ * existing readers (`useLocalPrefs((s) => s.autonomy)`) keep working and
313
+ * automatically describe the right tab. This map is what makes them
314
+ * per-tab rather than one value the four tabs fight over.
315
+ */
316
+ bySession: Record<string, Partial<LocalPrefs>>;
317
+ /**
318
+ * What a NEWLY opened tab inherits for the session-scoped keys — the last
319
+ * value the user chose, mirroring the server, which persists the same keys
320
+ * to config as the default a new tab starts from.
321
+ */
322
+ sessionDefaults: Partial<LocalPrefs>;
323
+ /** Which session the flat fields currently describe. */
324
+ activeSessionId: string | null;
325
+ set: (patch: Partial<LocalPrefs>) => void;
326
+ /** Point the flat fields at a tab, materialising its overrides. */
327
+ bindSession: (sessionId: string | null) => void;
328
+ /**
329
+ * Apply a server-sent patch. `sessionId` names the tab it belongs to; a
330
+ * patch for a BACKGROUND tab updates that tab's override and leaves the
331
+ * fields the UI is rendering alone.
332
+ */
333
+ applyRemote: (patch: Partial<LocalPrefs>, sessionId?: string | undefined) => void;
334
+ /** Forget a closed tab's overrides. */
335
+ forgetSession: (sessionId: string) => void;
336
+ reset: () => void;
337
+ }
338
+ /** The data half of the store — everything except the action methods. */
339
+ export type LocalPrefsData = Omit<LocalPrefs, 'set' | 'reset' | 'bindSession' | 'applyRemote' | 'forgetSession'>;
340
+ export declare const DEFAULTS: LocalPrefsData;
341
+ //# sourceMappingURL=local-prefs-defaults.d.ts.map
@@ -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
  *