@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
@@ -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;
@@ -24,6 +24,11 @@ export interface QuotaWindow {
24
24
  windowMinutes?: number | undefined;
25
25
  /** Absolute reset time in epoch **seconds**. */
26
26
  resetsAt?: number | undefined;
27
+ /**
28
+ * When the last hour's pace fills the window (epoch **seconds**). Set by the
29
+ * server only when that lands before `resetsAt`.
30
+ */
31
+ exhaustsAt?: number | undefined;
27
32
  }
28
33
  export interface QuotaCredits {
29
34
  hasCredits: boolean;
@@ -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
  *
@@ -1,6 +1,12 @@
1
1
  export type TechStackCoverage = 'full' | 'partial' | 'unsupported';
2
2
  export type TechStackJobKind = 'inventory' | 'analyze';
3
3
  export type TechStackJobStatus = 'idle' | 'queued' | 'discovering' | 'inventorying' | 'enriching' | 'researching' | 'synthesizing' | 'completed' | 'failed' | 'cancelled';
4
+ /**
5
+ * Pipeline depth the user picked for the next `analyze` run.
6
+ * Mirrors `AnalyzeDepth` on the engine; defaults to `'full'` for parity with
7
+ * the pre-feature one-click Analyze button.
8
+ */
9
+ export type TechStackAnalyzeDepth = 'inventory' | 'enrich' | 'full';
4
10
  export interface TechStackEvidence {
5
11
  readonly kind: string;
6
12
  readonly source: string;
@@ -62,6 +68,96 @@ export interface TechStackFinding {
62
68
  readonly breakingRisk?: string | undefined;
63
69
  readonly evidence: readonly TechStackEvidence[];
64
70
  }
71
+ /**
72
+ * One item in a remediation upgrade plan.
73
+ *
74
+ * Mirrors `UpgradePlanItem` server-side (`packages/techstack/src/remediation.ts`).
75
+ * `executable` is true when the engine can drive the change through the
76
+ * permission-gated `language_package` tool — false for ecosystems that need
77
+ * a manual command (ruby, dart, maven, gradle, swift, elixir, c/cpp). The UI
78
+ * uses this to render an "Apply" button vs. a "Copy command" card.
79
+ */
80
+ export interface TechStackUpgradePlanItem {
81
+ readonly dependencyName: string;
82
+ readonly ecosystem: string;
83
+ readonly workspaceId: string;
84
+ readonly currentVersion?: string | undefined;
85
+ readonly targetVersion?: string | undefined;
86
+ readonly action: TechStackFindingAction;
87
+ readonly severity: TechStackFindingSeverity;
88
+ readonly rationale: string;
89
+ readonly breakingRisk?: string | undefined;
90
+ readonly suggestedCommand?: string | undefined;
91
+ readonly executable: boolean;
92
+ }
93
+ export interface TechStackUpgradePlan {
94
+ readonly snapshotId: string;
95
+ readonly generatedAt: string;
96
+ readonly warning: string;
97
+ readonly summary: {
98
+ readonly total: number;
99
+ readonly patch: number;
100
+ readonly minor: number;
101
+ readonly major: number;
102
+ readonly replace: number;
103
+ readonly remove: number;
104
+ readonly investigate: number;
105
+ };
106
+ readonly items: readonly TechStackUpgradePlanItem[];
107
+ }
108
+ export interface TechStackApplyPlanResult {
109
+ readonly dryRun: boolean;
110
+ readonly items: ReadonlyArray<{
111
+ readonly dependencyName: string;
112
+ readonly status: 'planned' | 'skipped' | 'applied' | 'failed';
113
+ readonly detail?: string | undefined;
114
+ }>;
115
+ }
116
+ /**
117
+ * Single point on the cross-snapshot trend curve.
118
+ *
119
+ * Server-side: `TrendReport` in `packages/techstack/src/trend.ts`. The full
120
+ * report is heavier than what the page needs day-to-day, so the WebUI view
121
+ * uses the lightweight shape surfaced by `GET /api/techstack/trends`.
122
+ */
123
+ export interface TechStackTrendPoint {
124
+ readonly snapshotId: string;
125
+ readonly createdAt: string;
126
+ readonly dependencies: number;
127
+ readonly outdated: number;
128
+ readonly vulnerable: number;
129
+ }
130
+ export interface TechStackTrendReport {
131
+ readonly snapshots: number;
132
+ readonly vulnerabilityHalfLifeMs?: number | undefined;
133
+ readonly points: readonly TechStackTrendPoint[];
134
+ readonly dependencies: ReadonlyArray<{
135
+ readonly key: string;
136
+ readonly name: string;
137
+ readonly ecosystem: string;
138
+ readonly currentVersion?: string | undefined;
139
+ readonly lockedVersionAgeMs: number;
140
+ readonly versionChanges: number;
141
+ }>;
142
+ }
143
+ /**
144
+ * Lightweight description of the LLM available for AI-assisted runs.
145
+ * Mirrors the `GET /api/techstack/models` response. When `available` is false
146
+ * the model picker is disabled — there is no point letting the user pick a
147
+ * model when none can answer.
148
+ */
149
+ export interface TechStackModelInfo {
150
+ readonly available: boolean;
151
+ readonly provider: string | null;
152
+ readonly model: string | null;
153
+ readonly candidates: ReadonlyArray<{
154
+ readonly id: string;
155
+ }>;
156
+ readonly capabilities: {
157
+ readonly structuredOutput: boolean;
158
+ readonly jsonMode: boolean;
159
+ };
160
+ }
65
161
  export interface TechStackSnapshot {
66
162
  readonly id: string;
67
163
  readonly projectId: string;
@@ -85,6 +181,10 @@ export interface TechStackJobView {
85
181
  readonly status: TechStackJobStatus;
86
182
  readonly progress: TechStackProgress | null;
87
183
  readonly error: string | null;
184
+ /** Pipeline depth the job will run / is running. */
185
+ readonly depth?: TechStackAnalyzeDepth;
186
+ /** Model id the user picked for the LLM research stage. */
187
+ readonly model?: string;
88
188
  }
89
189
  interface TechStackState {
90
190
  snapshot: TechStackSnapshot | null;
@@ -94,15 +194,54 @@ interface TechStackState {
94
194
  activeJob: TechStackJobView | null;
95
195
  lastWorkspaceId: string | null;
96
196
  reportId: string | null;
197
+ /** Next analyze options. Persisted in-memory so a refresh keeps them. */
198
+ selectedDepth: TechStackAnalyzeDepth;
199
+ selectedModel: string | null;
200
+ /** `null` until the user opens the TechStack page (the page lazy-loads the list). */
201
+ availableModels: TechStackModelInfo | null;
202
+ /** Plan from `GET /api/techstack/remediation`. `null` when not yet fetched. */
203
+ remediationPlan: TechStackUpgradePlan | null;
204
+ remediationPreview: TechStackApplyPlanResult | null;
205
+ remediationLoading: boolean;
206
+ remediationError: string | null;
207
+ /** Cross-snapshot trend report. `null` when not yet fetched. */
208
+ trend: TechStackTrendReport | null;
209
+ trendLoading: boolean;
210
+ trendError: string | null;
211
+ /** Streaming deep-dive partials, keyed by dependency id. */
212
+ deepDivePartial: {
213
+ dependencyId: string;
214
+ status: 'researching';
215
+ completed: number;
216
+ total: number;
217
+ } | null;
97
218
  setSnapshot: (snapshot: TechStackSnapshot | null, stale?: boolean) => void;
98
219
  setLoading: (loading: boolean) => void;
99
220
  setError: (error: string | null) => void;
100
- jobStarted: (jobId: string, kind: TechStackJobKind) => void;
221
+ jobStarted: (jobId: string, kind: TechStackJobKind, options?: {
222
+ depth?: TechStackAnalyzeDepth;
223
+ model?: string;
224
+ }) => void;
101
225
  jobProgress: (jobId: string, progress: TechStackProgress) => void;
102
226
  jobFailed: (jobId: string, error: string) => void;
103
227
  jobCancelled: (jobId: string) => void;
104
228
  workspaceCompleted: (workspaceId: string) => void;
105
229
  reportReady: (reportId: string) => void;
230
+ setSelectedDepth: (depth: TechStackAnalyzeDepth) => void;
231
+ setSelectedModel: (model: string | null) => void;
232
+ setAvailableModels: (models: TechStackModelInfo) => void;
233
+ setRemediation: (plan: TechStackUpgradePlan, preview: TechStackApplyPlanResult) => void;
234
+ setRemediationLoading: (loading: boolean) => void;
235
+ setRemediationError: (error: string | null) => void;
236
+ setTrend: (trend: TechStackTrendReport) => void;
237
+ setTrendLoading: (loading: boolean) => void;
238
+ setTrendError: (error: string | null) => void;
239
+ setDeepDivePartial: (partial: {
240
+ dependencyId: string;
241
+ status: 'researching';
242
+ completed: number;
243
+ total: number;
244
+ } | null) => void;
106
245
  clear: () => void;
107
246
  }
108
247
  export declare const useTechStackStore: import("zustand").UseBoundStore<import("zustand").StoreApi<TechStackState>>;
@@ -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
@@ -95,6 +95,11 @@ export interface ChatMessage {
95
95
  * most recent start and would leave earlier ones stuck on "Running...". */
96
96
  toolUseId?: string | undefined;
97
97
  isError?: boolean | undefined;
98
+ /** Set on the error bubble of a run a provider killed on a retryable
99
+ * failure (overload, dropped connection, 5xx): the one error the Continue
100
+ * countdown may auto-fire for, in `auto` autonomy. Every other error —
101
+ * loop guard, iteration limit, auth, bad request — keeps a manual button. */
102
+ autoContinue?: boolean | undefined;
98
103
  timestamp: number;
99
104
  usage?: Usage | undefined;
100
105
  streaming?: boolean | undefined;
@@ -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,7 +26,7 @@ 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
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;
@@ -34,8 +34,8 @@ export declare function coerceSettingsTab(value: unknown): string;
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;