@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
@@ -14,8 +14,7 @@ export declare function councilPersonaOptions(catalog: BrainConfigWire['personaC
14
14
  export declare const DECISION_TIMEOUTS: BrainOption[];
15
15
  export declare const HUMAN_TIMEOUTS: BrainOption[];
16
16
  export declare const FRACTIONS: BrainOption[];
17
- /** Effective-valued numbers: the snapshot always carries a resolved number, so
18
- * the default is a LABELLED concrete option rather than a `default` sentinel. */
17
+ /** `default` = no cap: the model's own output ceiling. */
19
18
  export declare const LLM_MAX_TOKENS: BrainOption[];
20
19
  export declare const MIN_CONFIDENCE: BrainOption[];
21
20
  export declare const DECISION_LOG_SIZES: BrainOption[];
@@ -0,0 +1,79 @@
1
+ import type { WrongStackWebSocketClient } from '@/lib/ws-client';
2
+ export interface CatalogProvider {
3
+ id: string;
4
+ name: string;
5
+ family: string;
6
+ apiBase?: string | undefined;
7
+ envVars: string[];
8
+ modelCount: number;
9
+ hasApiKey: boolean;
10
+ }
11
+ export interface SavedProvider {
12
+ id: string;
13
+ type?: string | undefined;
14
+ family?: string | undefined;
15
+ baseUrl?: string | undefined;
16
+ /** Saved model allowlist, in the order the user pinned them. */
17
+ models?: string[] | undefined;
18
+ /** Per-model metadata (display name, output limits, capability overrides). */
19
+ customModels?: Record<string, {
20
+ name?: string | undefined;
21
+ maxOutput?: number | undefined;
22
+ capabilities?: {
23
+ maxContext?: number | undefined;
24
+ tools?: boolean | undefined;
25
+ vision?: boolean | undefined;
26
+ reasoning?: boolean | undefined;
27
+ streaming?: boolean | undefined;
28
+ jsonMode?: boolean | undefined;
29
+ } | undefined;
30
+ }> | undefined;
31
+ /** First entry of `models`, surfaced for the panel's "Using" line. */
32
+ pickedModelId?: string | undefined;
33
+ apiKeys: Array<{
34
+ label: string;
35
+ maskedKey: string;
36
+ isActive: boolean;
37
+ createdAt: string;
38
+ }>;
39
+ }
40
+ export type ProviderTab = 'catalog' | 'saved';
41
+ export interface ProviderSectionProps {
42
+ /** Currently selected provider id. */
43
+ activeProvider: string;
44
+ /** Catalog providers list. */
45
+ catalogProviders: CatalogProvider[];
46
+ /** Loading flag. */
47
+ isLoadingCatalog: boolean;
48
+ /** Saved providers list. */
49
+ savedProviders: SavedProvider[];
50
+ /** Loading flag. */
51
+ isLoadingSaved: boolean;
52
+ /** Which sub-tab is active. */
53
+ providerTab: ProviderTab;
54
+ setProviderTab: (v: ProviderTab) => void;
55
+ /** Called when a catalog provider is selected. */
56
+ onSelectProvider: (id: string) => void;
57
+ /** Called to add an API key. */
58
+ onAddKey: (providerId: string, label: string, value: string) => Promise<boolean> | void;
59
+ /** Called to delete an API key. */
60
+ onDeleteKey: (providerId: string, label: string) => Promise<boolean> | void;
61
+ /** Called to set a key as active. */
62
+ onSetActiveKey: (providerId: string, label: string) => Promise<boolean> | void;
63
+ /** Called to add a custom provider. */
64
+ onAddProvider: (id: string, family: string, baseUrl?: string | undefined, apiKey?: string, models?: string[] | undefined, customModels?: Record<string, {
65
+ name?: string | undefined;
66
+ maxOutput?: number | undefined;
67
+ capabilities?: Record<string, unknown> | undefined;
68
+ }> | undefined, providerType?: string | undefined) => Promise<boolean> | void;
69
+ /** Called to remove a saved provider. */
70
+ onRemoveProvider: (providerId: string) => Promise<boolean> | void;
71
+ /** Called when a saved provider model is picked. */
72
+ onPickProviderModel: (providerId: string, modelId: string) => void;
73
+ /** WebSocket client used for saved-provider model probing/clearing. */
74
+ ws: WrongStackWebSocketClient;
75
+ /** Search filter text. */
76
+ catalogQuery: string;
77
+ setCatalogQuery: (v: string) => void;
78
+ }
79
+ //# sourceMappingURL=provider-section-types.d.ts.map
@@ -1,7 +1,6 @@
1
1
  import type { useWebSocket } from '@/hooks/useWebSocket';
2
2
  import type { SessionHistoryEntry } from '@/stores';
3
- type HistoryFilter = 'all' | 'favorites' | 'active' | 'completed' | 'issues';
4
- type HistorySort = 'recent' | 'tokens' | 'activity';
3
+ export { filterAndSortSessions, formatCompactNumber, formatRelative, formatSessionDuration, getEmptySessionIds, getSessionHistoryStats, groupSessionHistory, splitSessionHistoryColumns, } from './session-history.js';
5
4
  type HistoryListVariant = 'sidebar' | 'workspace';
6
5
  interface SessionListProps {
7
6
  historyQuery: string;
@@ -16,37 +15,5 @@ interface SessionListProps {
16
15
  renameSession: ReturnType<typeof useWebSocket>['renameSession'];
17
16
  variant?: HistoryListVariant | undefined;
18
17
  }
19
- interface HistoryViewOptions {
20
- query: string;
21
- filter: HistoryFilter;
22
- sort: HistorySort;
23
- favoriteIds: readonly string[];
24
- }
25
- interface SessionHistoryGroup {
26
- label: 'favorites' | 'today' | 'yesterday' | 'thisWeek' | 'earlier';
27
- rows: SessionHistoryEntry[];
28
- favorite?: boolean | undefined;
29
- }
30
- interface SessionHistoryStats {
31
- sessions: number;
32
- active: number;
33
- tokens: number;
34
- tools: number;
35
- files: number;
36
- errors: number;
37
- }
38
- export declare const formatRelative: (iso: string) => string;
39
- export declare function formatSessionDuration(entry: SessionHistoryEntry): string;
40
- export declare function formatCompactNumber(value: number): string;
41
- /** Pure function: returns empty non-active sessions that are safe to offer for cleanup. */
42
- export declare function getEmptySessionIds(entries: Array<{
43
- id: string;
44
- tokenTotal: number;
45
- isCurrent: boolean;
46
- }>, protectedIds?: Iterable<string>): string[];
47
- export declare function filterAndSortSessions(entries: readonly SessionHistoryEntry[], options: HistoryViewOptions): SessionHistoryEntry[];
48
- export declare function groupSessionHistory(entries: readonly SessionHistoryEntry[], favoriteIds: readonly string[], now?: number): SessionHistoryGroup[];
49
- export declare function getSessionHistoryStats(entries: readonly SessionHistoryEntry[]): SessionHistoryStats;
50
18
  export declare function SessionList({ historyQuery, setHistoryQuery, historyEntries, historyLoading, historyError, wsConnected, listSessions, resumeSession, deleteSession, renameSession, variant, }: SessionListProps): import("react").JSX.Element;
51
- export {};
52
19
  //# sourceMappingURL=SessionList.d.ts.map
@@ -0,0 +1,61 @@
1
+ import { Activity } from 'lucide-react';
2
+ import type { SessionHistoryEntry } from '@/stores';
3
+ export type HistoryFilter = 'all' | 'favorites' | 'active' | 'completed' | 'issues';
4
+ export type HistorySort = 'recent' | 'tokens' | 'activity';
5
+ export interface HistoryViewOptions {
6
+ query: string;
7
+ filter: HistoryFilter;
8
+ sort: HistorySort;
9
+ favoriteIds: readonly string[];
10
+ }
11
+ export interface SessionHistoryGroup {
12
+ label: 'favorites' | 'today' | 'yesterday' | 'thisWeek' | 'earlier';
13
+ rows: SessionHistoryEntry[];
14
+ favorite?: boolean | undefined;
15
+ }
16
+ export interface SessionHistoryStats {
17
+ sessions: number;
18
+ active: number;
19
+ tokens: number;
20
+ tools: number;
21
+ files: number;
22
+ errors: number;
23
+ }
24
+ export declare const timestamp: (iso: string | undefined) => number;
25
+ export declare const activityScore: (entry: SessionHistoryEntry) => number;
26
+ export declare const formatRelative: (iso: string) => string;
27
+ export declare const sessionActivityAt: (entry: SessionHistoryEntry) => string;
28
+ export declare function formatSessionDuration(entry: SessionHistoryEntry): string;
29
+ export declare function formatCompactNumber(value: number): string;
30
+ /** Pure function: returns empty non-active sessions that are safe to offer for cleanup. */
31
+ export declare function getEmptySessionIds(entries: Array<{
32
+ id: string;
33
+ tokenTotal: number;
34
+ isCurrent: boolean;
35
+ }>, protectedIds?: Iterable<string>): string[];
36
+ export declare function filterAndSortSessions(entries: readonly SessionHistoryEntry[], options: HistoryViewOptions): SessionHistoryEntry[];
37
+ export declare function groupSessionHistory(entries: readonly SessionHistoryEntry[], favoriteIds: readonly string[], now?: number): SessionHistoryGroup[];
38
+ export interface SessionHistoryColumns {
39
+ left: SessionHistoryGroup[];
40
+ right: SessionHistoryGroup[];
41
+ }
42
+ /**
43
+ * Balance a page of time-ordered groups across the workspace page's two
44
+ * columns: rows fill the left column down to the midpoint, then continue
45
+ * down the right, so each column reads chronologically and neither towers
46
+ * over an empty sibling. A group straddling the midpoint is sliced at it —
47
+ * that keeps the page one continuous timeline even when a single bucket
48
+ * (e.g. "Today") dominates, which is the common case on early pages.
49
+ */
50
+ export declare function splitSessionHistoryColumns(groups: readonly SessionHistoryGroup[]): SessionHistoryColumns;
51
+ export declare function getSessionHistoryStats(entries: readonly SessionHistoryEntry[]): SessionHistoryStats;
52
+ export declare function outcomeMeta(entry: SessionHistoryEntry): {
53
+ icon: typeof Activity;
54
+ label: 'active' | 'completed' | 'error' | 'timeout' | 'aborted' | 'saved';
55
+ defaultLabel: string;
56
+ className: string;
57
+ };
58
+ export declare function HistoryStats({ stats }: {
59
+ stats: SessionHistoryStats;
60
+ }): import("react").JSX.Element;
61
+ //# sourceMappingURL=session-history.d.ts.map
@@ -0,0 +1,9 @@
1
+ type Variant = 'lite' | 'default' | 'pro';
2
+ /** Profile-wide prompt copies. The runtime still owns tool and environment layers. */
3
+ export declare function SystemPromptPresetEditor({ currentVariant, onBusyChange, onDirtyChange, }: {
4
+ currentVariant: Variant;
5
+ onBusyChange?: (busy: boolean) => void;
6
+ onDirtyChange?: (dirty: boolean) => void;
7
+ }): import("react").JSX.Element;
8
+ export {};
9
+ //# sourceMappingURL=SystemPromptPresetEditor.d.ts.map
@@ -0,0 +1,25 @@
1
+ /**
2
+ * TechStackView — analyze controls.
3
+ *
4
+ * The control bar the user picks depth (Inventory / +Advisories / +AI) and
5
+ * the model id for the next analyze run, before they click "Analyze with AI".
6
+ *
7
+ * The depth/model choices live on the store (`selectedDepth` / `selectedModel`)
8
+ * so a refresh keeps them and so the same controls work in both the empty
9
+ * "no snapshot" state and the populated state.
10
+ *
11
+ * `availableModels` is lazy-loaded via `GET /api/techstack/models`; until the
12
+ * response lands, the model picker is disabled with a hint that no provider
13
+ * is wired yet.
14
+ */
15
+ interface AnalyzeControlsProps {
16
+ /** Disabled while a job is in flight. */
17
+ readonly busy: boolean;
18
+ /** Kick off an `analyze` run with the current depth/model selection. */
19
+ readonly onAnalyze: () => void;
20
+ /** Kick off an `inventory`-only run regardless of the depth selector. */
21
+ readonly onInventory: () => void;
22
+ }
23
+ export declare function AnalyzeControls({ busy, onAnalyze, onInventory }: AnalyzeControlsProps): import("react").JSX.Element;
24
+ export {};
25
+ //# sourceMappingURL=AnalyzeControls.d.ts.map
@@ -0,0 +1,20 @@
1
+ /**
2
+ * TechStackView — Remediation tab.
3
+ *
4
+ * Fetches the upgrade plan from `GET /api/techstack/remediation` (which also
5
+ * returns the dry-run `preview` already executed server-side as `dryRun: true`)
6
+ * and renders per-item cards:
7
+ *
8
+ * - **Executable ecosystems** (npm, python, rust, go, php, dotnet): the card
9
+ * has an "Apply" button. Applying calls `POST /api/techstack/remediation/apply`
10
+ * with the selected item ids — that endpoint goes through the WebUI server's
11
+ * permission-gated `language_package` bridge, the same trust boundary the
12
+ * existing remediation-apply handler already enforces.
13
+ * - **Manual ecosystems** (ruby, dart, maven, gradle, swift, elixir, c/cpp):
14
+ * the card shows the suggested shell command and a "Copy" button instead.
15
+ *
16
+ * Dry-run is always safe to invoke: `applyPlan()` defaults to `dryRun: true`
17
+ * (r28 truthfulness) and the server's `preview` is a dry-run by definition.
18
+ */
19
+ export declare function RemediationTab(): import("react").JSX.Element;
20
+ //# sourceMappingURL=RemediationTab.d.ts.map
@@ -0,0 +1,17 @@
1
+ /**
2
+ * TechStackView — Trends tab.
3
+ *
4
+ * Renders the cross-snapshot trend report from `GET /api/techstack/trends`:
5
+ *
6
+ * - The dependency/outdated/vulnerable curve over the last N snapshots
7
+ * (small SVG line chart, no charting library — three series, hand-drawn
8
+ * so the file stays dependency-free).
9
+ * - The top-flickering dependencies: which packages changed versions the
10
+ * most across snapshots, with the locked-version age.
11
+ *
12
+ * The page is intentionally read-only here: the heavy lifting
13
+ * (`TrendStore.analyze`) lives server-side, the handler ships a serialized
14
+ * payload, and the tab renders it.
15
+ */
16
+ export declare function TrendsTab(): import("react").JSX.Element;
17
+ //# sourceMappingURL=TrendsTab.d.ts.map
@@ -4,9 +4,16 @@ import '@xterm/xterm/css/xterm.css';
4
4
  * sessions (see server/terminal-ws-handler.ts). It now manages multiple PTYs
5
5
  * per project WebUI connection through tabs while keeping the dock itself in
6
6
  * the normal flex layout, so the main app remains scrollable.
7
+ *
8
+ * Hiding the dock (`hidden`) keeps its terminals running; the composer strip
9
+ * shows them meanwhile. Closing the last one, or all, disposes the dock.
7
10
  */
8
- export declare function TerminalPanel({ desktopShell, onClose, }: {
11
+ export declare function TerminalPanel({ desktopShell, hidden, onClose, onDispose, }: {
9
12
  desktopShell?: boolean | undefined;
13
+ hidden?: boolean | undefined;
14
+ /** Hide the dock; its terminals keep running. */
10
15
  onClose: () => void;
16
+ /** Every terminal is closed: the dock can go. */
17
+ onDispose: () => void;
11
18
  }): import("react").JSX.Element;
12
19
  //# sourceMappingURL=TerminalPanel.d.ts.map
@@ -1,7 +1,7 @@
1
1
  /**
2
- * WorkspaceDock — the strip between the chat header and the transcript.
2
+ * WorkspaceDock — session workspace controls in the left Session panel.
3
3
  *
4
- * The dock itself stays compact above chat. Selecting Goal, Fleet, Work,
4
+ * The dock itself stays compact. Selecting Goal, Fleet, Work,
5
5
  * Worktrees, or Collab opens its content in WorkspaceDockInspector on the
6
6
  * right, so the transcript never loses vertical space.
7
7
  *
@@ -0,0 +1,21 @@
1
+ /**
2
+ * ReviewDiff — the Changes view's unified diff with line comments.
3
+ *
4
+ * Same row model and look as DiffView (shared `computeLineDiff`), plus a
5
+ * line-number gutter and a per-line "+" that opens an inline comment editor.
6
+ * Comments live in the project-scoped review store; a comment whose line no
7
+ * longer reads the same is listed above the diff as outdated instead of being
8
+ * pinned to whatever text now occupies that line number.
9
+ */
10
+ import { type ReviewComment } from '@/stores/review-store';
11
+ export declare function CommentCard({ comment, outdated, }: {
12
+ comment: ReviewComment;
13
+ outdated?: boolean | undefined;
14
+ }): import("react").JSX.Element;
15
+ export declare const ReviewDiff: import("react").MemoExoticComponent<({ path, scope, oldText, newText, }: {
16
+ path: string;
17
+ scope: string;
18
+ oldText: string;
19
+ newText: string;
20
+ }) => import("react").JSX.Element>;
21
+ //# sourceMappingURL=ReviewDiff.d.ts.map
@@ -0,0 +1,15 @@
1
+ /**
2
+ * ReviewTray — every review comment in the project, grouped by file, with the
3
+ * two ways out: send the whole review to the chat composer as one message, or
4
+ * discard it.
5
+ *
6
+ * "Send to chat" inserts into the composer rather than submitting, so the
7
+ * user picks how it goes out (a normal send when idle; queue or `btw` while a
8
+ * run is going) through the composer's existing send-mode handling.
9
+ */
10
+ export declare function useScopedReviewComments(scope: string): import("@/stores/review-store").ReviewComment[];
11
+ export declare function ReviewTray({ scope, onOpenFile, }: {
12
+ scope: string;
13
+ onOpenFile: (path: string) => void;
14
+ }): import("react").JSX.Element;
15
+ //# sourceMappingURL=ReviewTray.d.ts.map
@@ -0,0 +1,31 @@
1
+ /**
2
+ * The pure model behind ReviewDiff: line numbers for diff rows, where a
3
+ * comment anchors, and which comments still sit on the line they were
4
+ * written against.
5
+ */
6
+ import type { DiffRow } from '@wrongstack/tools/tool-diff';
7
+ import type { ReviewComment } from '@/stores/review-store';
8
+ export interface NumberedDiffRow extends DiffRow {
9
+ oldLine?: number | undefined;
10
+ newLine?: number | undefined;
11
+ }
12
+ /**
13
+ * Attach 1-based line numbers: context lines advance both sides, removals the
14
+ * old side, additions the new side.
15
+ */
16
+ export declare function numberDiffRows(rows: readonly DiffRow[]): NumberedDiffRow[];
17
+ /** Where a comment on this row anchors: removed lines on the old side, the rest on the new. */
18
+ export declare function anchorFor(row: NumberedDiffRow): {
19
+ side: 'old' | 'new';
20
+ line: number;
21
+ } | null;
22
+ export declare const anchorKey: (side: 'old' | 'new', line: number) => string;
23
+ /**
24
+ * Split a file's comments into those still sitting on an identical line
25
+ * (keyed by anchor) and those whose line changed underneath them.
26
+ */
27
+ export declare function placeComments(rows: readonly NumberedDiffRow[], comments: readonly ReviewComment[]): {
28
+ byAnchor: Map<string, ReviewComment[]>;
29
+ outdated: ReviewComment[];
30
+ };
31
+ //# sourceMappingURL=review-diff-model.d.ts.map
@@ -0,0 +1,25 @@
1
+ import '@xyflow/react/dist/style.css';
2
+ export declare function useCodeMapFlow({ positionedNodes, deferredActiveOperations, deferredPulseActivities, selectedId, connected, incomingCounts, outgoingCounts, handleSelectNode, handleOpenNode, setHistoryFile, setFlowNodes, canvasGraph, deferredRecentActivities, setAgentTrailCount, setFlowEdges, fitSignature, lastFlowStructuralKey, flowRebuildTimer, lastFitSignature, fitView, activityFlowKey, }: {
3
+ positionedNodes: ReturnType<typeof import('./codemap-model.js').layoutGraph>;
4
+ deferredActiveOperations: import('../stores/codemap-activity-store.js').FileActivity[];
5
+ deferredPulseActivities: import('../stores/codemap-activity-store.js').FileActivity[];
6
+ selectedId: string | null;
7
+ connected: Set<string>;
8
+ incomingCounts: Map<string, number>;
9
+ outgoingCounts: Map<string, number>;
10
+ handleSelectNode: (node: import('./codemap-model.js').GraphNodeData) => void;
11
+ handleOpenNode: (node: import('./codemap-model.js').GraphNodeData) => void;
12
+ setHistoryFile: React.Dispatch<React.SetStateAction<string | null>>;
13
+ setFlowNodes: React.Dispatch<React.SetStateAction<import('@xyflow/react').Node[]>>;
14
+ canvasGraph: import('./codemap-model.js').CodeMapGraphResponse;
15
+ deferredRecentActivities: import('../stores/codemap-activity-store.js').FileActivity[];
16
+ setAgentTrailCount: React.Dispatch<React.SetStateAction<number>>;
17
+ setFlowEdges: React.Dispatch<React.SetStateAction<import('@xyflow/react').Edge[]>>;
18
+ fitSignature: string;
19
+ lastFlowStructuralKey: React.RefObject<string>;
20
+ flowRebuildTimer: React.RefObject<number | null>;
21
+ lastFitSignature: React.RefObject<string>;
22
+ fitView: import('@xyflow/react').FitView<import('@xyflow/react').Node>;
23
+ activityFlowKey: string;
24
+ }): void;
25
+ //# sourceMappingURL=use-code-map-flow.d.ts.map
@@ -1,6 +1,6 @@
1
1
  import { type Connection, type Edge, type Node } from '@xyflow/react';
2
2
  import '@xyflow/react/dist/style.css';
3
- import { type OfficeNodeData } from './OfficeMapCanvas/utils.js';
3
+ import type { OfficeNodeData } from './OfficeMapCanvas/utils.js';
4
4
  export declare function useOfficeMapCanvas(): {
5
5
  canvasRef: import("react").RefObject<HTMLDivElement | null>;
6
6
  showHud: boolean;
@@ -0,0 +1,31 @@
1
+ import type { TFunction } from 'i18next';
2
+ import '@xyflow/react/dist/style.css';
3
+ export declare function useOfficeMapTopology({ clients, canvasSize, mailboxMessages, t, leaderId, fleetAgents, prevAgentStatsRef, activeNodesRef, ACTIVE_MS, vizActivityRef, edgeIntensitiesRef, layoutPosRef, setNodes, setEdges, prevNodeSigRef, fitView, session, }: {
4
+ clients: import('./OfficeMapCanvas/resolve.js').ResolvedClient[];
5
+ canvasSize: {
6
+ width: number;
7
+ height: number;
8
+ };
9
+ mailboxMessages: import('../stores/mailbox-store.js').MailboxMessage[];
10
+ t: TFunction<'translation', undefined>;
11
+ leaderId: string | undefined;
12
+ fleetAgents: Map<string, import('../stores/types.js').SubagentView>;
13
+ prevAgentStatsRef: React.RefObject<Map<string, {
14
+ toolCalls: number;
15
+ iteration: number;
16
+ }>>;
17
+ activeNodesRef: React.RefObject<Map<string, number>>;
18
+ ACTIVE_MS: 4000;
19
+ vizActivityRef: React.RefObject<Map<string, number>>;
20
+ edgeIntensitiesRef: React.RefObject<Map<string, number>>;
21
+ layoutPosRef: React.RefObject<Map<string, {
22
+ x: number;
23
+ y: number;
24
+ }>>;
25
+ setNodes: React.Dispatch<React.SetStateAction<import('@xyflow/react').Node<import('./OfficeMapCanvas/utils.js').OfficeNodeData>[]>>;
26
+ setEdges: React.Dispatch<React.SetStateAction<import('@xyflow/react').Edge[]>>;
27
+ prevNodeSigRef: React.RefObject<string>;
28
+ fitView: import('@xyflow/react').FitView<import('@xyflow/react').Node>;
29
+ session: import('../stores/types.js').SessionInfo | null;
30
+ }): void;
31
+ //# sourceMappingURL=use-office-map-topology.d.ts.map
@@ -0,0 +1,7 @@
1
+ export interface LiveBrowserSession {
2
+ id: string;
3
+ url: string;
4
+ title: string;
5
+ }
6
+ export declare function useLiveBrowserSessions(): LiveBrowserSession[];
7
+ //# sourceMappingURL=use-live-browser.d.ts.map
@@ -21,7 +21,7 @@ export declare function useWebSocketBootstrap(): void;
21
21
  export declare function useWebSocket(): {
22
22
  client: WrongStackWebSocketClient;
23
23
  sendMessage: (content: string, images?: import('@/types').WSUserMessageImage[], freshContext?: boolean) => string | null;
24
- adviseTopic: (prompt: string) => Promise<import("@/types").SessionScopedPayload & {
24
+ adviseTopic: (prompt: string) => Promise<import("@wrongstack/webui-protocol").SessionScopedPayload & {
25
25
  requestId: string;
26
26
  suggestNewContext: boolean;
27
27
  confidence: number;
@@ -131,7 +131,6 @@ export declare function useWebSocket(): {
131
131
  }) => void;
132
132
  deleteContextMode: (id: string) => void;
133
133
  repairContext: () => void;
134
- toggleGoalAutonomous: (autonomous: boolean) => void;
135
134
  startGoal: (title: string, phases?: unknown[] | undefined, autonomous?: boolean) => void;
136
135
  pauseGoal: () => void;
137
136
  resumeGoal: () => void;
@@ -1,5 +1,17 @@
1
1
  import type { WSServerMessage } from '@/types';
2
2
  export declare const chatHandlerMap: Partial<Record<string, (msg: WSServerMessage) => void>>;
3
+ /**
4
+ * A run a provider killed after its own retries, on a failure a later attempt
5
+ * usually gets through: a `PROVIDER_*` code the provider marked recoverable
6
+ * (rate limit, overload, 5xx, dropped connection). The only run failure the
7
+ * Continue countdown may auto-fire for. A recoverable non-provider failure is
8
+ * not one — a context overflow would overflow again, and the loop guard or
9
+ * iteration limit stopped the run on purpose.
10
+ */
11
+ export declare function isAutoContinuableRunError(error: {
12
+ code?: string | undefined;
13
+ recoverable?: boolean | undefined;
14
+ } | undefined): boolean;
3
15
  /** Forget a retired lane's run bookkeeping. */
4
16
  export declare function forgetLaneRunState(sessionId: string): void;
5
17
  export declare function handleIterationStarted(msg: WSServerMessage): void;
@@ -4,4 +4,6 @@ export declare function handleGoalProgress(msg: WSServerMessage): void;
4
4
  export declare function handleGoalLifecycle(msg: WSServerMessage): void;
5
5
  export declare function handleGoalList(msg: WSServerMessage): void;
6
6
  export declare function handleGoalUpdated(msg: WSServerMessage): void;
7
+ export declare function handleGoalRefining(msg: WSServerMessage): void;
8
+ export declare function handleGoalStateError(msg: WSServerMessage): void;
7
9
  //# sourceMappingURL=goal-handlers.d.ts.map
@@ -0,0 +1,6 @@
1
+ import type { WSServerMessage } from '@/types';
2
+ export declare function handleMcpServerDisconnected(msg: WSServerMessage): void;
3
+ export declare function handleMcpServerUp(msg: WSServerMessage): void;
4
+ /** Test seam: forget which servers were reported down. */
5
+ export declare function _resetMcpStatusHandlersForTests(): void;
6
+ //# sourceMappingURL=mcp-status-handlers.d.ts.map
@@ -0,0 +1,18 @@
1
+ import type { WSServerMessage } from '@/types';
2
+ export declare function removeServerQueuedPrompt(sessionId: string, id: string): void;
3
+ export declare function clearServerQueue(sessionId: string): void;
4
+ /**
5
+ * Ask for a session's queue when the session starts on this connection — the
6
+ * moment the capability is known. Opening the session is also the server's cue
7
+ * to run whatever a previous host left queued.
8
+ */
9
+ export declare function requestPromptQueue(msg: WSServerMessage): void;
10
+ declare function handleQueueState(msg: WSServerMessage): void;
11
+ /** A queued prompt started its turn: it becomes the user's message in the transcript. */
12
+ declare function handleQueueDrained(msg: WSServerMessage): void;
13
+ export declare const promptQueueHandlerMap: {
14
+ 'queue.state': typeof handleQueueState;
15
+ 'queue.drained': typeof handleQueueDrained;
16
+ };
17
+ export {};
18
+ //# sourceMappingURL=prompt-queue-handlers.d.ts.map
@@ -6,5 +6,12 @@ export declare function handleTechStackSnapshotUpdated(msg: WSServerMessage): vo
6
6
  export declare function handleTechStackReportReady(msg: WSServerMessage): void;
7
7
  export declare function handleTechStackJobFailed(msg: WSServerMessage): void;
8
8
  export declare function handleTechStackJobCancelled(msg: WSServerMessage): void;
9
+ /**
10
+ * `techstack.research.partial` — the server forwards dependency-scoped
11
+ * research progress (not cluster-level updates) as a streaming event.
12
+ * Valid partials update the store's deep-dive progress; general job progress
13
+ * continues to arrive separately on `techstack.job.progress`.
14
+ */
15
+ export declare function handleTechStackResearchPartial(msg: WSServerMessage): void;
9
16
  export declare const techStackHandlerMap: Partial<Record<WSServerMessage['type'], (msg: WSServerMessage) => void>>;
10
17
  //# sourceMappingURL=techstack-handlers.d.ts.map