@wrongstack/webui 1.0.24 → 1.0.26

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (219) hide show
  1. package/dist/assets/AgentRosterView-udJ14GYq.js +12 -0
  2. package/dist/assets/{AnalyticsDashboard-DgqJODVI.js → AnalyticsDashboard-DwF-0cUA.js} +1 -1
  3. package/dist/assets/AudienceMemoryPanel-DpBGeZv_.js +3 -0
  4. package/dist/assets/ChangesView-BfM0T_aS.js +3 -0
  5. package/dist/assets/ChimeraReviewsView-Q_5C4DU1.js +1 -0
  6. package/dist/assets/ChronicleDashboard-D6LnZzhy.js +1 -0
  7. package/dist/assets/CodeEditor-DonrWH9u.js +2 -0
  8. package/dist/assets/CodeMap-Dxtc378S.js +1 -0
  9. package/dist/assets/{CronJobsPanel-GTK038V9.js → CronJobsPanel-Cn2PQO_p.js} +1 -1
  10. package/dist/assets/{DeadCodeScanPanel-DX4OEuyp.js → DeadCodeScanPanel-Mc5py-kJ.js} +1 -1
  11. package/dist/assets/{DebugDashboard-CKp3sa_k.js → DebugDashboard-D0LRcT4J.js} +1 -1
  12. package/dist/assets/{DesignGalleryView-DVUTYaP6.js → DesignGalleryView-DAD-wRUc.js} +1 -1
  13. package/dist/assets/GoalView-CqeSw0tK.js +1 -0
  14. package/dist/assets/KanbanView-V-bkFftp.js +3 -0
  15. package/dist/assets/{MailboxDetailView-CylnzTVc.js → MailboxDetailView-CTEjap3r.js} +1 -1
  16. package/dist/assets/{MemoryDrawer-DJ0Y98Z8.js → MemoryDrawer-RCduY0FV.js} +1 -1
  17. package/dist/assets/MemoryManager-B-p6-Bic.js +1 -0
  18. package/dist/assets/{ProcessMonitor-BnQ3vJtn.js → ProcessMonitor-B9tpPo4r.js} +1 -1
  19. package/dist/assets/PromptJournalView-DVNqlac9.js +1 -0
  20. package/dist/assets/ProviderTestView-mmfpnAbZ.js +1 -0
  21. package/dist/assets/QueuePanel-BB9qozjm.js +1 -0
  22. package/dist/assets/{RefreshDebugView-s6MyGpPq.js → RefreshDebugView-CCCWzq29.js} +1 -1
  23. package/dist/assets/{RepositoryHistoryView-CWi_Zo3F.js → RepositoryHistoryView-RQVRkkUU.js} +2 -2
  24. package/dist/assets/RequirementIntakeView-D_JRhgzW.js +1 -0
  25. package/dist/assets/{SageTabs-D6eTg3ix.js → SageTabs--k2hQTvl.js} +2 -2
  26. package/dist/assets/{SddFlowGraph-B-ptkFX6.js → SddFlowGraph-DKrrRXKy.js} +1 -1
  27. package/dist/assets/SddHub-B5XO56oY.js +2 -0
  28. package/dist/assets/{SessionInspectView-NSpj5WEN.js → SessionInspectView-j3VJwXNi.js} +1 -1
  29. package/dist/assets/SessionList-CCVHBseu.js +1 -0
  30. package/dist/assets/{SessionsDashboard-mF4PzdKY.js → SessionsDashboard-DsM7sXQw.js} +1 -1
  31. package/dist/assets/SetupScreen-DeuR8Y8S.js +1 -0
  32. package/dist/assets/{SkillDetailView-B9BFyB1i.js → SkillDetailView-BeZyGIpW.js} +3 -3
  33. package/dist/assets/TechStackView-CpSMRQE0.js +2 -0
  34. package/dist/assets/TerminalPanel-BVJ5w-5R.js +1 -0
  35. package/dist/assets/activity-BS2aW_NN.js +10 -0
  36. package/dist/assets/activity-CR2KFruY.js +10 -0
  37. package/dist/assets/activity-Cd0qM2Hx.js +10 -0
  38. package/dist/assets/activity-DyXRoY2s.js +10 -0
  39. package/dist/assets/activity-bBAOetvE.js +10 -0
  40. package/dist/assets/activity-fI3Jy_jD.js +10 -0
  41. package/dist/assets/activity-t6fUmVjo.js +10 -0
  42. package/dist/assets/{button-BbeB5Qm8.js → button-UuKTnoM-.js} +1 -1
  43. package/dist/assets/chat-9GLubejR.js +1 -0
  44. package/dist/assets/chat-B50ssTLh.js +1 -0
  45. package/dist/assets/chat-CDioiM1L.js +1 -0
  46. package/dist/assets/chat-Cll_3gXD.js +1 -0
  47. package/dist/assets/chat-Cqhc6jQa.js +1 -0
  48. package/dist/assets/chat-DN1MggWt.js +1 -0
  49. package/dist/assets/chat-fyvZyUZM.js +1 -0
  50. package/dist/assets/chat-store-uzGtJfDz.js +1 -0
  51. package/dist/assets/{codemap-activity-store-Ha7XbGgq.js → codemap-activity-store-WjfEZe4_.js} +1 -1
  52. package/dist/assets/config-store-P5_updTQ.js +21 -0
  53. package/dist/assets/{dialog-b-Ai37sa.js → dialog-BDUaV5gY.js} +1 -1
  54. package/dist/assets/{empty-state-pfuS5znr.js → empty-state-BzoEa04Q.js} +1 -1
  55. package/dist/assets/{fonts-DRGbd-AM.js → fonts-C303yVU_.js} +2 -2
  56. package/dist/assets/i18n-t7rIS4DB.js +3 -0
  57. package/dist/assets/index-B4ELbNoz.js +181 -0
  58. package/dist/assets/index-qdrakcnP.css +1 -0
  59. package/dist/assets/{input-BA6D2L3K.js → input-DMnC2O7-.js} +1 -1
  60. package/dist/assets/{mailbox-store-ZQO_Rv6E.js → mailbox-store-DyOOYbni.js} +1 -1
  61. package/dist/assets/{roster-ws-Cv_PHlEV.js → roster-ws-szSqUkqP.js} +1 -1
  62. package/dist/assets/settings-BMHZcBqe.js +1 -0
  63. package/dist/assets/settings-BQ5J8WXE.js +1 -0
  64. package/dist/assets/settings-BfNJfO4z.js +1 -0
  65. package/dist/assets/settings-ClDQ01ie.js +1 -0
  66. package/dist/assets/settings-DD31lC4f.js +1 -0
  67. package/dist/assets/settings-Da3EIcna.js +1 -0
  68. package/dist/assets/settings-Dl_QM2QZ.js +1 -0
  69. package/dist/assets/{shared-BFJvAYzX.js → shared-CLNEiW00.js} +1 -1
  70. package/dist/assets/stores-Cx52UOxM.js +7 -0
  71. package/dist/assets/toasts-3tM1krOo.js +1 -0
  72. package/dist/assets/toasts-BrHW33qA.js +1 -0
  73. package/dist/assets/toasts-Buww129h.js +1 -0
  74. package/dist/assets/toasts-CSN9Fy47.js +1 -0
  75. package/dist/assets/toasts-DOoYxbHd.js +1 -0
  76. package/dist/assets/toasts-DkDnbhs_.js +1 -0
  77. package/dist/assets/toasts-Jo4VH13n.js +1 -0
  78. package/dist/assets/ui-store-DI0iusYZ.js +1 -0
  79. package/dist/assets/{utils-CKsqCaP8.js → utils-B21Devim.js} +1 -1
  80. package/dist/assets/{vector-memory-panel-YWv6xcza.js → vector-memory-panel-DnX-ODHC.js} +1 -1
  81. package/dist/assets/{vendor-V3ydTHqN.js → vendor-BfBvt432.js} +28 -28
  82. package/dist/assets/{view-navigation-CpIPxhZp.js → view-navigation-Cvrp_uJm.js} +1 -1
  83. package/dist/components/BrowserLivePane.d.ts +2 -0
  84. package/dist/components/ChangesView.d.ts +3 -1
  85. package/dist/components/ChatInput/chat-input-bars.d.ts +1 -1
  86. package/dist/components/ChatInput/image-attachments.d.ts +19 -2
  87. package/dist/components/ChatInput/slash-routing.d.ts +18 -0
  88. package/dist/components/ChatInput/use-paste-drop.d.ts +3 -0
  89. package/dist/components/ChatInput/use-prompt-queue-view.d.ts +13 -0
  90. package/dist/components/ChatView/BackgroundShellStrip.d.ts +16 -0
  91. package/dist/components/ChatView/TerminalStrip.d.ts +8 -0
  92. package/dist/components/CodeMap.d.ts +0 -12
  93. package/dist/components/GoalPanel.d.ts +2 -1
  94. package/dist/components/ImageDiffView.d.ts +12 -0
  95. package/dist/components/KanbanTaskExecution.d.ts +64 -0
  96. package/dist/components/KanbanTaskInspector.d.ts +1 -1
  97. package/dist/components/MessageBubble/AttachmentGallery.d.ts +1 -1
  98. package/dist/components/MessageBubble/GeneratedImagePreview.d.ts +10 -0
  99. package/dist/components/SessionTabBar/summaries.d.ts +4 -0
  100. package/dist/components/SettingsPanel/LimitsSection.d.ts +7 -0
  101. package/dist/components/SettingsPanel/MCPSection.d.ts +1 -37
  102. package/dist/components/SettingsPanel/MCPServerCards.d.ts +67 -0
  103. package/dist/components/SettingsPanel/MCPServerDialog.d.ts +11 -0
  104. package/dist/components/SettingsPanel/PreferenceControls.d.ts +8 -0
  105. package/dist/components/SettingsPanel/ProviderSavedProfiles.d.ts +50 -0
  106. package/dist/components/SettingsPanel/ProviderSection.d.ts +2 -79
  107. package/dist/components/SettingsPanel/SettingsNavigation.d.ts +12 -0
  108. package/dist/components/SettingsPanel/brain-section-options.d.ts +1 -2
  109. package/dist/components/SettingsPanel/provider-section-types.d.ts +79 -0
  110. package/dist/components/SidePanel/SessionList.d.ts +1 -34
  111. package/dist/components/SidePanel/session-history.d.ts +61 -0
  112. package/dist/components/SystemPromptPresetEditor.d.ts +9 -0
  113. package/dist/components/TerminalPanel.d.ts +8 -1
  114. package/dist/components/WorkspaceDock.d.ts +2 -2
  115. package/dist/components/review/ReviewDiff.d.ts +21 -0
  116. package/dist/components/review/ReviewTray.d.ts +15 -0
  117. package/dist/components/review/review-diff-model.d.ts +31 -0
  118. package/dist/components/use-code-map-flow.d.ts +25 -0
  119. package/dist/components/use-office-map-canvas.d.ts +1 -1
  120. package/dist/components/use-office-map-topology.d.ts +31 -0
  121. package/dist/hooks/use-live-browser.d.ts +7 -0
  122. package/dist/hooks/useWebSocket.d.ts +1 -2
  123. package/dist/hooks/ws-handlers/goal-handlers.d.ts +2 -0
  124. package/dist/hooks/ws-handlers/prompt-queue-handlers.d.ts +18 -0
  125. package/dist/index.css +3013 -3013
  126. package/dist/index.html +18 -18
  127. package/dist/index.js +97375 -92924
  128. package/dist/lib/compact-file-tree.d.ts +30 -0
  129. package/dist/lib/project-image.d.ts +26 -0
  130. package/dist/lib/provider-warm.d.ts +3 -0
  131. package/dist/lib/ws-client-session-methods.d.ts +2 -0
  132. package/dist/lib/ws-client.d.ts +3 -0
  133. package/dist/stores/chat-lane-data.d.ts +153 -0
  134. package/dist/stores/chat-lanes.d.ts +3 -174
  135. package/dist/stores/chat-queue-helpers.d.ts +9 -0
  136. package/dist/stores/chat-store-types.d.ts +3 -0
  137. package/dist/stores/chat-store.d.ts +1 -1
  138. package/dist/stores/context-editor-store.d.ts +1 -1
  139. package/dist/stores/fleet-transcript.d.ts +14 -0
  140. package/dist/stores/git-changes-store.d.ts +3 -0
  141. package/dist/stores/goal-run-store.d.ts +8 -0
  142. package/dist/stores/goal-state-store.d.ts +3 -0
  143. package/dist/stores/goal-store.d.ts +9 -11
  144. package/dist/stores/local-prefs-defaults.d.ts +340 -0
  145. package/dist/stores/local-prefs.d.ts +2 -318
  146. package/dist/stores/notification-store.d.ts +9 -0
  147. package/dist/stores/review-store.d.ts +54 -0
  148. package/dist/stores/session-activity.d.ts +33 -0
  149. package/dist/stores/session-tab-store.d.ts +1 -46
  150. package/dist/stores/terminal-strip-store.d.ts +26 -0
  151. package/dist/stores/ui-store-chrome.d.ts +1 -1
  152. package/dist/stores/ui-store-persist.d.ts +2 -2
  153. package/dist/stores/ui-store-types.d.ts +3 -3
  154. package/dist/stores/ui-store.d.ts +5 -5
  155. package/dist/types/brain.d.ts +4 -2
  156. package/dist/types/client-message.d.ts +119 -11
  157. package/dist/types/prompt-queue.d.ts +55 -0
  158. package/dist/types/protocol-core.d.ts +4 -216
  159. package/dist/types/runtime.d.ts +3 -38
  160. package/dist/types/server-message-files.d.ts +22 -0
  161. package/dist/types/server-message-mcp.d.ts +30 -0
  162. package/dist/types/server-message-system.d.ts +110 -0
  163. package/dist/types/server-message.d.ts +4 -3
  164. package/dist/types/system.d.ts +2 -24
  165. package/package.json +10 -9
  166. package/dist/assets/AgentRosterView-Dq8Xa0WK.js +0 -12
  167. package/dist/assets/AudienceMemoryPanel-BVGdDVTT.js +0 -3
  168. package/dist/assets/ChangesView-BVyLENBb.js +0 -1
  169. package/dist/assets/ChimeraReviewsView-CTuxzgTC.js +0 -1
  170. package/dist/assets/ChronicleDashboard-BRP7D6RZ.js +0 -1
  171. package/dist/assets/CodeEditor-k3z3M0NG.js +0 -2
  172. package/dist/assets/CodeMap-CvHNQZEF.js +0 -1
  173. package/dist/assets/GoalView-D8G8e8YG.js +0 -1
  174. package/dist/assets/KanbanView-BMXGDqGo.js +0 -3
  175. package/dist/assets/MemoryManager-DfcsYPUB.js +0 -1
  176. package/dist/assets/PromptJournalView-D7k8Yh5a.js +0 -1
  177. package/dist/assets/ProviderTestView-DSd6kkWT.js +0 -1
  178. package/dist/assets/QueuePanel-79KiyZWD.js +0 -1
  179. package/dist/assets/RequirementIntakeView-D_Ea20fx.js +0 -1
  180. package/dist/assets/SddHub-CSVfLGpr.js +0 -2
  181. package/dist/assets/SessionList-BYRCs1AK.js +0 -1
  182. package/dist/assets/SetupScreen-BUZeJSZi.js +0 -1
  183. package/dist/assets/TechStackView-CXJilX0M.js +0 -2
  184. package/dist/assets/TerminalPanel-CAXevSAa.js +0 -1
  185. package/dist/assets/activity-B3wutYIE.js +0 -10
  186. package/dist/assets/activity-Be03cc7g.js +0 -10
  187. package/dist/assets/activity-CiYZ3y4e.js +0 -10
  188. package/dist/assets/activity-CmIA2MhR.js +0 -10
  189. package/dist/assets/activity-Cp5GhldB.js +0 -10
  190. package/dist/assets/activity-DFCf7l5d.js +0 -10
  191. package/dist/assets/activity-EbNUY7Ci.js +0 -10
  192. package/dist/assets/chat-6dE2AJNN.js +0 -1
  193. package/dist/assets/chat-B3AJmhGD.js +0 -1
  194. package/dist/assets/chat-BHsbpaVt.js +0 -1
  195. package/dist/assets/chat-BITJe8-v.js +0 -1
  196. package/dist/assets/chat-U-Jjb8_k.js +0 -1
  197. package/dist/assets/chat-_Xp5fDnj.js +0 -1
  198. package/dist/assets/chat-mSbSzPl5.js +0 -1
  199. package/dist/assets/chat-store-C7InoWAO.js +0 -1
  200. package/dist/assets/config-store-BbL0WxLE.js +0 -21
  201. package/dist/assets/i18n-Dv97urcO.js +0 -3
  202. package/dist/assets/index-CON0Nbm4.css +0 -1
  203. package/dist/assets/index-DX6tHUzs.js +0 -177
  204. package/dist/assets/settings-BCvuzOJ6.js +0 -1
  205. package/dist/assets/settings-DMPKd-4K.js +0 -1
  206. package/dist/assets/settings-DxQ2452f.js +0 -1
  207. package/dist/assets/settings-Dz3StaVx.js +0 -1
  208. package/dist/assets/settings-EBW1mlXc.js +0 -1
  209. package/dist/assets/settings-Er2LHp9d.js +0 -1
  210. package/dist/assets/settings-EzznCDaX.js +0 -1
  211. package/dist/assets/stores-DXn5tdr7.js +0 -7
  212. package/dist/assets/toasts-BsmyGP95.js +0 -1
  213. package/dist/assets/toasts-CgXHu8ZB.js +0 -1
  214. package/dist/assets/toasts-DZ6HdKgG.js +0 -1
  215. package/dist/assets/toasts-DizCJjAR.js +0 -1
  216. package/dist/assets/toasts-NC2MT4uN.js +0 -1
  217. package/dist/assets/toasts-bPl097de.js +0 -1
  218. package/dist/assets/toasts-tCVo15mP.js +0 -1
  219. 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;
@@ -0,0 +1,54 @@
1
+ /**
2
+ * A line comment left on the working-tree diff in the Changes view. Comments
3
+ * are project-scoped (`scope` = project root): the diff is the repository's,
4
+ * not a chat session's, so switching tabs keeps them and switching projects
5
+ * hides them.
6
+ */
7
+ export interface ReviewComment {
8
+ id: string;
9
+ scope: string;
10
+ /** Repo-relative path, as the Changes panel lists it. */
11
+ path: string;
12
+ /** `new` for added/context lines, `old` for removed lines. */
13
+ side: 'old' | 'new';
14
+ /** 1-based line number on `side`. */
15
+ line: number;
16
+ /** The line's text when the comment was written — quoted in the review. */
17
+ lineText: string;
18
+ body: string;
19
+ createdAt: number;
20
+ }
21
+ interface ReviewState {
22
+ comments: ReviewComment[];
23
+ add: (comment: Omit<ReviewComment, 'id' | 'createdAt'>) => ReviewComment | null;
24
+ update: (id: string, body: string) => void;
25
+ remove: (id: string) => void;
26
+ /** Drop every comment in `scope` (after the review went to the composer). */
27
+ clearScope: (scope: string) => void;
28
+ }
29
+ export declare const useReviewStore: import("zustand").UseBoundStore<Omit<import("zustand").StoreApi<ReviewState>, "persist" | "setState"> & {
30
+ setState(partial: Partial<ReviewState> | ReviewState | ((state: ReviewState) => Partial<ReviewState> | ReviewState), replace?: false | undefined): unknown;
31
+ setState(state: ReviewState | ((state: ReviewState) => ReviewState), replace: true): unknown;
32
+ persist: {
33
+ setOptions: (options: Partial<import("zustand/middleware").PersistOptions<ReviewState, {
34
+ comments: ReviewComment[];
35
+ }, unknown>>) => void;
36
+ clearStorage: () => void;
37
+ rehydrate: () => Promise<void> | void;
38
+ hasHydrated: () => boolean;
39
+ onHydrate: (fn: (state: ReviewState) => void) => () => void;
40
+ onFinishHydration: (fn: (state: ReviewState) => void) => () => void;
41
+ getOptions: () => Partial<import("zustand/middleware").PersistOptions<ReviewState, {
42
+ comments: ReviewComment[];
43
+ }, unknown>>;
44
+ };
45
+ }>;
46
+ /** Comments in `scope`, ordered by file then line — the order the review reads in. */
47
+ export declare function scopedComments(comments: readonly ReviewComment[], scope: string): ReviewComment[];
48
+ /**
49
+ * The review as one message the agent can act on: each comment names its file
50
+ * and line, quotes the line it was written against, then the comment.
51
+ */
52
+ export declare function formatReviewMessage(comments: readonly ReviewComment[]): string;
53
+ export {};
54
+ //# sourceMappingURL=review-store.d.ts.map
@@ -0,0 +1,33 @@
1
+ /** A tab is "busy" when its own run is live or it owns a running subagent. */
2
+ export declare function isTabBusy(sessionId: string): boolean;
3
+ /** Everything a busy-tab warning needs to say about one session, gathered in
4
+ * one place. The close dialog and the switch-away toast render the same
5
+ * `lines`, so the two warnings cannot drift apart or go vague. */
6
+ export interface SessionActivityReport {
7
+ sessionId: string;
8
+ isBusy: boolean;
9
+ /** True when the tab holds nothing at all — no chat history, no agents
10
+ * (running or finished), no queued messages, no live run. Such a tab has
11
+ * nothing to lose and may close without asking. */
12
+ isEmpty: boolean;
13
+ leaderRunning: boolean;
14
+ runningAgents: Array<{
15
+ id: string;
16
+ name: string;
17
+ brief: string;
18
+ }>;
19
+ finishedAgents: number;
20
+ queuedMessages: number;
21
+ /** Pre-localized, factual inventory lines (no framing). */
22
+ lines: string[];
23
+ }
24
+ /** Complete inventory of what a session has in flight: its own run, every
25
+ * running subagent with a task preview, finished agents on record, queued
26
+ * messages. Reads the lane registries directly, like `isTabBusy`. */
27
+ export declare function describeSessionActivity(sessionId: string): SessionActivityReport;
28
+ /** Thorough, non-blocking notice fired when the foreground moves OFF a busy
29
+ * tab: the tab keeps running in its slot, and the user sees exactly what
30
+ * stays behind. Switching back is always one click, so this must inform,
31
+ * not block. */
32
+ export declare function notifyBusyTabLeftBehind(sessionId: string): void;
33
+ //# sourceMappingURL=session-activity.d.ts.map
@@ -1,22 +1,4 @@
1
- /**
2
- * session-tab-store.ts — The four slots, and the only place a tab is opened,
3
- * switched or closed.
4
- *
5
- * The model, stated plainly:
6
- *
7
- * - There are exactly FOUR slots. Never more, never a fifth "just for now".
8
- * - A slot holds AT MOST one session, and a session sits in AT MOST one slot.
9
- * Both directions are enforced here; nothing else is allowed to bind them.
10
- * - Switching slots moves a pointer. It does not park, copy, restore or clear
11
- * anything, because every slot's state already lives in its own lane
12
- * (`chat-lanes.ts`, `session-lanes.ts`) whether or not it is on screen.
13
- * - Closing a slot disposes that lane. A closed tab keeps nothing alive.
14
- *
15
- * Think of the four slots as four layouts side by side. What makes them
16
- * side-by-side rather than one surface with four costumes is that no slot can
17
- * name another slot's state: the lane registries are keyed by session id and
18
- * every writer must name the session it is writing to.
19
- */
1
+ export { describeSessionActivity, isTabBusy } from './session-activity.js';
20
2
  import { chatLane } from './chat-lanes';
21
3
  export declare const MAX_OPEN_TABS = 4;
22
4
  export declare const TAB_STORAGE_KEY = "wrongstack.open_session_tabs";
@@ -78,33 +60,6 @@ interface SessionTabState {
78
60
  markSeen: (sessionId: string) => void;
79
61
  setAttention: (sessionId: string, needsAttention: boolean) => void;
80
62
  }
81
- /** A tab is "busy" when its own run is live or it owns a running subagent. */
82
- export declare function isTabBusy(sessionId: string): boolean;
83
- /** Everything a busy-tab warning needs to say about one session, gathered in
84
- * one place. The close dialog and the switch-away toast render the same
85
- * `lines`, so the two warnings cannot drift apart or go vague. */
86
- interface SessionActivityReport {
87
- sessionId: string;
88
- isBusy: boolean;
89
- /** True when the tab holds nothing at all — no chat history, no agents
90
- * (running or finished), no queued messages, no live run. Such a tab has
91
- * nothing to lose and may close without asking. */
92
- isEmpty: boolean;
93
- leaderRunning: boolean;
94
- runningAgents: Array<{
95
- id: string;
96
- name: string;
97
- brief: string;
98
- }>;
99
- finishedAgents: number;
100
- queuedMessages: number;
101
- /** Pre-localized, factual inventory lines (no framing). */
102
- lines: string[];
103
- }
104
- /** Complete inventory of what a session has in flight: its own run, every
105
- * running subagent with a task preview, finished agents on record, queued
106
- * messages. Reads the lane registries directly, like `isTabBusy`. */
107
- export declare function describeSessionActivity(sessionId: string): SessionActivityReport;
108
63
  /**
109
64
  * Everything one slot owns, freed in one place.
110
65
  *
@@ -0,0 +1,26 @@
1
+ /** Lines kept for the strip's peek. */
2
+ export declare const TERMINAL_PEEK_LINES = 12;
3
+ export interface TerminalSummary {
4
+ id: string;
5
+ name: string;
6
+ status: 'starting' | 'running' | 'exited';
7
+ exitCode?: number | undefined;
8
+ lastOutputAt: number;
9
+ tail: string[];
10
+ }
11
+ interface TerminalStripState {
12
+ terminals: TerminalSummary[];
13
+ /** A terminal the strip asked the dock to bring to the front. */
14
+ focusRequest: {
15
+ id: string;
16
+ nonce: number;
17
+ } | null;
18
+ syncTabs(tabs: ReadonlyArray<Pick<TerminalSummary, 'id' | 'name' | 'status' | 'exitCode'>>): void;
19
+ appendOutput(id: string, lines: string[], at: number): void;
20
+ requestFocus(id: string): void;
21
+ clear(): void;
22
+ }
23
+ export declare const useTerminalStripStore: import("zustand").UseBoundStore<import("zustand").StoreApi<TerminalStripState>>;
24
+ export declare function noteTerminalOutput(id: string, data: string): void;
25
+ export {};
26
+ //# sourceMappingURL=terminal-strip-store.d.ts.map
@@ -1,4 +1,4 @@
1
- import type { UIState, SessionChromeState } from "./ui-store-types.js";
1
+ import type { SessionChromeState, UIState } from './ui-store-types.js';
2
2
  export declare function isDesktopShellStorageContext(): boolean;
3
3
  export declare function homeNavigationStatePatch(options?: {
4
4
  sidebarOpen?: boolean | undefined;
@@ -1,4 +1,4 @@
1
- import type { PersistOptions } from "zustand/middleware";
2
- import type { UIState } from "./ui-store-types.js";
1
+ import type { PersistOptions } from 'zustand/middleware';
2
+ import type { UIState } from './ui-store-types.js';
3
3
  export declare const uiPersistOptions: PersistOptions<UIState, Partial<UIState>>;
4
4
  //# sourceMappingURL=ui-store-persist.d.ts.map
@@ -26,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;
@@ -1,6 +1,7 @@
1
1
  import type { BrainConfigPatchWire } from './brain.js';
2
2
  import type { ChronicleFacet, ChronicleMetricsView, ChronicleQuery } from './chronicle.js';
3
3
  import type { WSCollabAnnotate, WSCollabGrantControl, WSCollabInjectTool, WSCollabJoin, WSCollabLeave, WSCollabRequestPause, WSCollabResolve, WSCollabResume } from './collab.js';
4
+ import type { WSPromptQueueClientMessage } from './prompt-queue.js';
4
5
  import type { SessionScopedPayload, WSUserMessage } from './protocol-core.js';
5
6
  import type { ContextEditorMessage, ContextEditorRemoval, WSModelSwitch, WSToolConfirmResult, WSUserInputSubmit } from './runtime.js';
6
7
  import type { SageAnchor, SageScope, SageStatus, WSMemorySageForFileRequest } from './sage.js';
@@ -25,7 +26,12 @@ export interface ProviderCustomModelWire {
25
26
  */
26
27
  modelsDev?: Record<string, unknown> | undefined;
27
28
  }
28
- export type WSClientMessageCore = WSUserMessage | {
29
+ export type WSClientMessageCore = WSUserMessage | WSPromptQueueClientMessage
30
+ /** The user is typing; open the provider connection (`session.provider-warm`). */
31
+ | {
32
+ type: 'composer.warm';
33
+ payload: SessionScopedPayload;
34
+ } | {
29
35
  type: 'topic.advice';
30
36
  payload: SessionScopedPayload & {
31
37
  requestId: string;
@@ -100,7 +106,9 @@ export type WSClientMessageCore = WSUserMessage | {
100
106
  payload: Record<string, never>;
101
107
  } | {
102
108
  type: 'goal.resume';
103
- payload: Record<string, never>;
109
+ payload: {
110
+ graphId?: string | undefined;
111
+ };
104
112
  } | {
105
113
  type: 'goal.stop';
106
114
  payload: Record<string, never>;
@@ -113,9 +121,6 @@ export type WSClientMessageCore = WSUserMessage | {
113
121
  } | {
114
122
  type: 'goal.status';
115
123
  payload?: Record<string, never>;
116
- } | {
117
- type: 'goal.state';
118
- payload?: Record<string, never>;
119
124
  } | {
120
125
  type: 'goal.save';
121
126
  payload?: Record<string, never>;
@@ -125,12 +130,9 @@ export type WSClientMessageCore = WSUserMessage | {
125
130
  } | {
126
131
  type: 'goal.load';
127
132
  payload: {
128
- graphId: string;
129
- };
130
- } | {
131
- type: 'goal.toggleAutonomous';
132
- payload: {
133
- autonomous?: boolean | undefined;
133
+ graphId?: string | undefined;
134
+ query?: string | undefined;
135
+ resume?: boolean | undefined;
134
136
  };
135
137
  } | {
136
138
  type: 'goal.selectPhase';
@@ -444,6 +446,13 @@ export type WSClientMessageCore = WSUserMessage | {
444
446
  * what a live lane already has.
445
447
  */
446
448
  replayFor?: string[];
449
+ /**
450
+ * Reconnect catch-up: the last numbered frame (`seq`) this page applied
451
+ * per tab, valid for the server process that issued `eventEpoch`. The
452
+ * server sends back the frames after it, then `session.frames_resumed`.
453
+ */
454
+ cursors?: Record<string, number>;
455
+ eventEpoch?: string;
447
456
  } & SessionScopedPayload;
448
457
  } | {
449
458
  type: 'context.clear';
@@ -939,6 +948,11 @@ export type WSClientMessageCore = WSUserMessage | {
939
948
  payload: {
940
949
  filePath: string;
941
950
  } & SessionScopedPayload;
951
+ } | {
952
+ type: 'files.image';
953
+ payload: {
954
+ filePath: string;
955
+ } & SessionScopedPayload;
942
956
  } | {
943
957
  type: 'files.skeleton';
944
958
  payload: {
@@ -1022,6 +1036,23 @@ export type WSClientMessageCore = WSUserMessage | {
1022
1036
  } | {
1023
1037
  type: 'process.list';
1024
1038
  payload?: SessionScopedPayload;
1039
+ } | {
1040
+ type: 'process.output';
1041
+ payload: {
1042
+ pid: number;
1043
+ lines?: number;
1044
+ } & SessionScopedPayload;
1045
+ } | {
1046
+ type: 'browser.live.list';
1047
+ payload?: SessionScopedPayload;
1048
+ } | {
1049
+ type: 'browser.live.watch';
1050
+ payload: {
1051
+ id: string;
1052
+ } & SessionScopedPayload;
1053
+ } | {
1054
+ type: 'browser.live.unwatch';
1055
+ payload?: SessionScopedPayload;
1025
1056
  } | {
1026
1057
  type: 'process.kill';
1027
1058
  payload: {
@@ -1086,6 +1117,23 @@ export type WSClientMessageCore = WSUserMessage | {
1086
1117
  type: 'goal.get';
1087
1118
  } | {
1088
1119
  type: 'goal-state.get';
1120
+ } | {
1121
+ type: 'goal-state.set';
1122
+ payload: {
1123
+ goal: string;
1124
+ } & SessionScopedPayload;
1125
+ } | {
1126
+ type: 'goal-state.refine';
1127
+ payload?: SessionScopedPayload;
1128
+ } | {
1129
+ type: 'goal-state.pause';
1130
+ payload?: Record<string, never>;
1131
+ } | {
1132
+ type: 'goal-state.resume';
1133
+ payload?: Record<string, never>;
1134
+ } | {
1135
+ type: 'goal-state.clear';
1136
+ payload?: Record<string, never>;
1089
1137
  } | {
1090
1138
  type: 'autonomy.switch';
1091
1139
  payload: {
@@ -1100,6 +1148,49 @@ export type WSClientMessageCore = WSUserMessage | {
1100
1148
  } | {
1101
1149
  type: 'system_prompt.get';
1102
1150
  payload?: SessionScopedPayload;
1151
+ } | {
1152
+ type: 'system_prompt.presets.get';
1153
+ payload?: SessionScopedPayload;
1154
+ } | {
1155
+ type: 'system_prompt.presets.create';
1156
+ payload: {
1157
+ name: string;
1158
+ baseVariant: 'lite' | 'default' | 'pro';
1159
+ };
1160
+ } | {
1161
+ type: 'system_prompt.presets.save';
1162
+ payload: {
1163
+ id: string;
1164
+ revision: number;
1165
+ name: string;
1166
+ text: string;
1167
+ reviewedCurrentSource?: boolean;
1168
+ };
1169
+ } | {
1170
+ type: 'system_prompt.presets.activate';
1171
+ payload: {
1172
+ baseVariant: 'lite' | 'default' | 'pro';
1173
+ id?: string;
1174
+ sessionId?: string;
1175
+ scope: 'profile' | 'project';
1176
+ };
1177
+ } | {
1178
+ type: 'system_prompt.presets.delete';
1179
+ payload: {
1180
+ id: string;
1181
+ };
1182
+ } | {
1183
+ type: 'system_prompt.presets.validate';
1184
+ payload: {
1185
+ text: string;
1186
+ };
1187
+ } | {
1188
+ type: 'system_prompt.presets.preview';
1189
+ payload: {
1190
+ text: string;
1191
+ sessionId?: string;
1192
+ requestId: number;
1193
+ };
1103
1194
  } | {
1104
1195
  type: 'projects.list';
1105
1196
  } | {
@@ -1392,6 +1483,23 @@ export type WSClientMessageCore = WSUserMessage | {
1392
1483
  prompt: string;
1393
1484
  arguments?: Record<string, string>;
1394
1485
  };
1486
+ } | {
1487
+ type: 'mcp.auth.status';
1488
+ payload: {
1489
+ name: string;
1490
+ };
1491
+ } | {
1492
+ type: 'mcp.auth.login';
1493
+ payload: {
1494
+ name: string;
1495
+ clientId?: string;
1496
+ scopes?: string[];
1497
+ };
1498
+ } | {
1499
+ type: 'mcp.auth.logout';
1500
+ payload: {
1501
+ name: string;
1502
+ };
1395
1503
  } | {
1396
1504
  type: 'terminal.create';
1397
1505
  payload: {
@@ -0,0 +1,55 @@
1
+ import type { SessionScopedPayload, WSUserMessageImage } from './protocol-core.js';
2
+ /**
3
+ * The host-owned prompt queue (`session.prompt-queue` capability): prompts
4
+ * queued for a session live on the server, which runs them one after another
5
+ * as the session's turns end — whether or not this page is still open.
6
+ */
7
+ /** One queued prompt as the server lists it (image bytes stay on the server). */
8
+ export interface WSQueuedPromptView {
9
+ id: string;
10
+ text: string;
11
+ addedAt: number;
12
+ imageCount: number;
13
+ }
14
+ export type WSPromptQueueClientMessage = {
15
+ type: 'queue.add';
16
+ payload: SessionScopedPayload & {
17
+ text: string;
18
+ images?: WSUserMessageImage[] | undefined;
19
+ };
20
+ } | {
21
+ type: 'queue.remove';
22
+ payload: SessionScopedPayload & {
23
+ id: string;
24
+ };
25
+ } | {
26
+ type: 'queue.clear';
27
+ payload?: SessionScopedPayload;
28
+ } | {
29
+ type: 'queue.get';
30
+ payload?: SessionScopedPayload;
31
+ };
32
+ /** The session's whole queue, after every change. */
33
+ export interface WSQueueState {
34
+ type: 'queue.state';
35
+ payload: SessionScopedPayload & {
36
+ items: WSQueuedPromptView[];
37
+ };
38
+ }
39
+ /** A queued prompt just started its turn: render it as the user's message. */
40
+ export interface WSQueueDrained {
41
+ type: 'queue.drained';
42
+ payload: SessionScopedPayload & {
43
+ item: {
44
+ id: string;
45
+ text: string;
46
+ addedAt: number;
47
+ images?: Array<{
48
+ data: string;
49
+ mediaType?: string | undefined;
50
+ name?: string | undefined;
51
+ }>;
52
+ };
53
+ };
54
+ }
55
+ //# sourceMappingURL=prompt-queue.d.ts.map