@wrongstack/webui 0.299.0 → 0.301.0
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.
- package/dist/assets/AgentRosterView-BV6ysoGs.js +9 -0
- package/dist/assets/{AnalyticsDashboard-D58kSekC.js → AnalyticsDashboard-UWNP8zjE.js} +1 -1
- package/dist/assets/AudienceMemoryPanel-DwDKbvSA.js +3 -0
- package/dist/assets/ChangesView-DuVlGWkD.js +1 -0
- package/dist/assets/ChronicleDashboard-cs16n708.js +1 -0
- package/dist/assets/CodeEditor-sr50ljZN.js +1 -0
- package/dist/assets/CodeMap-CtK-C8gK.js +1 -0
- package/dist/assets/ConfirmModal-ndS17YwF.js +1 -0
- package/dist/assets/CronJobsPanel-Dovomns5.js +1 -0
- package/dist/assets/DeadCodeScanPanel-DjR4LLMs.js +2 -0
- package/dist/assets/DebugDashboard-jK1yp3qS.js +1 -0
- package/dist/assets/DesignGalleryView-CqXlEUzE.js +1 -0
- package/dist/assets/GoalView-CGNLrnA4.js +1 -0
- package/dist/assets/KanbanView--tAf_K7N.js +3 -0
- package/dist/assets/{MailboxDetailView-ZcKcOEAe.js → MailboxDetailView-0TBzZTdN.js} +1 -1
- package/dist/assets/MemoryManager-CDK_MO8A.js +1 -0
- package/dist/assets/{ModelPicker-DvNLZzkm.js → ModelPicker-BbBZuQwR.js} +1 -1
- package/dist/assets/OfficeMapPanel-68sVzHRD.js +4 -0
- package/dist/assets/OfficeMapPanel-D6yTfGIT.css +1 -0
- package/dist/assets/{ProcessMonitor-2nSk6sXA.js → ProcessMonitor-gFwiF8gX.js} +1 -1
- package/dist/assets/{QueuePanel-4KBBWFxj.js → QueuePanel-Cx-isRGl.js} +1 -1
- package/dist/assets/{RefreshDebugView-D3XnE53y.js → RefreshDebugView-C9tdu6Ld.js} +1 -1
- package/dist/assets/RequirementIntakeView-cPEw-RpV.js +1 -0
- package/dist/assets/SageTabs-BbK6VFO0.js +2 -0
- package/dist/assets/SddHub-NKvDRECi.js +2 -0
- package/dist/assets/SessionInspectView-DPG5qWhj.js +1 -0
- package/dist/assets/SessionList-ncl-20X_.js +1 -0
- package/dist/assets/SessionsDashboard-D23UVLr4.js +1 -0
- package/dist/assets/SetupScreen-D3XQ8MGk.js +1 -0
- package/dist/assets/{SkillDetailView-D7EQ2XtV.js → SkillDetailView-DDPhVFet.js} +1 -1
- package/dist/assets/SpecsView-afIS0QpX.js +1 -0
- package/dist/assets/TechStackView-kQ2OGxxw.js +1 -0
- package/dist/assets/{TerminalPanel-BL9ZPGJt.js → TerminalPanel-GcJWeldW.js} +1 -1
- package/dist/assets/{Toaster-CJI70aa-.js → Toaster-CgQA9256.js} +1 -1
- package/dist/assets/activity-B-cvKIfT.js +9 -0
- package/dist/assets/activity-Ba3aMzvo.js +9 -0
- package/dist/assets/activity-CRTVZ5A4.js +9 -0
- package/dist/assets/activity-DsSuflRW.js +9 -0
- package/dist/assets/activity-DxDRJ8kN.js +9 -0
- package/dist/assets/activity-VI776bUZ.js +9 -0
- package/dist/assets/activity-nVmsmqAI.js +9 -0
- package/dist/assets/chat-BPuAsrkF.js +1 -0
- package/dist/assets/chat-BfQBSiII.js +1 -0
- package/dist/assets/chat-BnkVCZ3Q.js +1 -0
- package/dist/assets/chat-CR2B97dj.js +1 -0
- package/dist/assets/chat-CdiY7G6Z.js +1 -0
- package/dist/assets/chat-DResBrkV.js +1 -0
- package/dist/assets/chat-Di8o0wDz.js +1 -0
- package/dist/assets/chat-store-DbxFVDwi.js +17 -0
- package/dist/assets/{common-DMM-xyW3.js → common-BXJbu5Y-.js} +1 -1
- package/dist/assets/{common-C9ikgX7d.js → common-BiNu_WzQ.js} +1 -1
- package/dist/assets/common-COVxQ0FV.js +1 -0
- package/dist/assets/{common-D29Zdkxb.js → common-Ch7JihXD.js} +1 -1
- package/dist/assets/{common-DoUBSHRY.js → common-DPaTeTls.js} +1 -1
- package/dist/assets/{common-vdwxzODB.js → common-DdGpRh8j.js} +1 -1
- package/dist/assets/{common-C5hY-d_0.js → common-pI6fYZW3.js} +1 -1
- package/dist/assets/i18n-COgumVF5.js +2 -0
- package/dist/assets/index-CtpViiZy.js +132 -0
- package/dist/assets/index-fIsq43fR.css +1 -0
- package/dist/assets/mailbox-store-C1mzoSqJ.js +1 -0
- package/dist/assets/{progress-ring-61A-xUEl.js → progress-ring-D_48qsBl.js} +1 -1
- package/dist/assets/{roster-ws-Dfg_187V.js → roster-ws-Da57e_sI.js} +1 -1
- package/dist/assets/session-store-Df7_hhe9.js +1 -0
- package/dist/assets/settings-Bb7_utQE.js +1 -0
- package/dist/assets/settings-Bd8zMwvC.js +1 -0
- package/dist/assets/settings-DdFgBMAw.js +1 -0
- package/dist/assets/settings-De6sXIFO.js +1 -0
- package/dist/assets/settings-E8SKMLxq.js +1 -0
- package/dist/assets/settings-zIY9-ivF.js +1 -0
- package/dist/assets/settings-zKBcRjqE.js +1 -0
- package/dist/assets/stores-ChEnUmic.js +7 -0
- package/dist/assets/ui-store-CE4-TlwB.js +1 -0
- package/dist/assets/useWebSocket-_gk4MRJz.js +29 -0
- package/dist/assets/{view-navigation-DxfiZrXS.js → view-navigation-DIDEcp4V.js} +1 -1
- package/dist/assets/ws-client-TTMa0XaT.js +1 -0
- package/dist/components/AgentCard.d.ts +21 -0
- package/dist/components/AgentsPage.d.ts +0 -3
- package/dist/components/AutonomyPicker.d.ts +1 -1
- package/dist/components/ChatInput/refine-panel-host.d.ts +2 -2
- package/dist/components/ChatView/auto-collapse.d.ts +42 -0
- package/dist/components/ConfirmModal.d.ts +7 -2
- package/dist/components/FallbackModal.d.ts +2 -0
- package/dist/components/KanbanBoardState.d.ts +1 -1
- package/dist/components/KanbanVerificationDashboard.d.ts +0 -6
- package/dist/components/SettingsPanel/PluginToggleList.d.ts +11 -3
- package/dist/components/SettingsPanel/ShadowSection.d.ts +18 -1
- package/dist/components/SettingsPanel/brain-section-options.d.ts +27 -55
- package/dist/components/TaskCard.d.ts +0 -1
- package/dist/components/TaskRiskPanel.d.ts +10 -3
- package/dist/components/TechStackView/shared.d.ts +11 -6
- package/dist/components/ThemeProvider.d.ts +6 -1
- package/dist/components/agent-roster-data.d.ts +2 -1
- package/dist/components/index.d.ts +0 -1
- package/dist/hooks/useWebSocket.d.ts +10 -2
- package/dist/hooks/ws-handlers/files-mailbox-handlers.d.ts +1 -0
- package/dist/hooks/ws-handlers/misc-handlers.d.ts +13 -0
- package/dist/hooks/ws-handlers/session-handlers.d.ts +1 -0
- package/dist/index.css +62 -0
- package/dist/index.html +18 -17
- package/dist/index.js +26640 -12728
- package/dist/lib/file-icons.d.ts +3 -3
- package/dist/lib/kanban-board-active.d.ts +19 -0
- package/dist/lib/palettes.d.ts +37 -0
- package/dist/lib/plugin-enablement.d.ts +1 -1
- package/dist/lib/ws-client.d.ts +24 -4
- package/dist/providers.json +7 -7
- package/dist/stores/config-store.d.ts +9 -1
- package/dist/stores/context-editor-store.d.ts +9 -1
- package/dist/stores/fallback-store.d.ts +30 -0
- package/dist/stores/fleet-store.d.ts +14 -1
- package/dist/stores/index.d.ts +2 -0
- package/dist/stores/local-prefs.d.ts +13 -0
- package/dist/stores/mailbox-store.d.ts +2 -0
- package/dist/stores/session-store.d.ts +9 -1
- package/dist/stores/ui-store.d.ts +2 -0
- package/dist/types/brain.d.ts +2 -0
- package/dist/types/client-message.d.ts +19 -2
- package/dist/types/protocol-core.d.ts +21 -0
- package/dist/types/runtime.d.ts +22 -0
- package/dist/types/server-message.d.ts +15 -4
- package/package.json +9 -9
- package/dist/assets/AgentRosterView-BqojERFR.js +0 -11
- package/dist/assets/AudienceMemoryPanel-Cc1UkbDl.js +0 -3
- package/dist/assets/ChangesView-BKU80ANq.js +0 -1
- package/dist/assets/ChronicleDashboard-CvCS1Dj1.js +0 -1
- package/dist/assets/CodeEditor-BHZQhx_8.js +0 -1
- package/dist/assets/CodeMap-qllGEFLB.js +0 -1
- package/dist/assets/CronJobsPanel-DD5mhZ4Q.js +0 -1
- package/dist/assets/DeadCodeScanPanel-PB-c8et_.js +0 -2
- package/dist/assets/DebugDashboard-Q8QiVflQ.js +0 -1
- package/dist/assets/DesignGalleryView-CGOtWO7s.js +0 -1
- package/dist/assets/GoalView-Dlk42vW7.js +0 -1
- package/dist/assets/KanbanView-DIP6kKmU.js +0 -3
- package/dist/assets/MemoryManager-B7620q_K.js +0 -1
- package/dist/assets/OfficeMapPanel-BFIF-EMt.css +0 -1
- package/dist/assets/OfficeMapPanel-DKJNTtOZ.js +0 -4
- package/dist/assets/RequirementIntakeView-BMxlf8bt.js +0 -1
- package/dist/assets/SageTabs-g1hO2hJ0.js +0 -2
- package/dist/assets/SddHub-Kv_TbTgT.js +0 -2
- package/dist/assets/SessionInspectView-PnKTvyvP.js +0 -1
- package/dist/assets/SessionList-BeinIC-h.js +0 -1
- package/dist/assets/SessionsDashboard-DEG_BylE.js +0 -1
- package/dist/assets/SetupScreen-DxJwZ1OZ.js +0 -1
- package/dist/assets/SpecsView-Fm7pYYcj.js +0 -1
- package/dist/assets/TechStackView-Bo_UenRF.js +0 -1
- package/dist/assets/activity-BCgOEWgR.js +0 -5
- package/dist/assets/activity-BQ0zqkw2.js +0 -5
- package/dist/assets/activity-CAovbq3e.js +0 -5
- package/dist/assets/activity-CFQyCvgu.js +0 -5
- package/dist/assets/activity-CdQf7zRK.js +0 -5
- package/dist/assets/activity-DACvyn2-.js +0 -5
- package/dist/assets/activity-DOwYydU-.js +0 -5
- package/dist/assets/chat-CRmMDzCb.js +0 -1
- package/dist/assets/chat-CwnuX7tG.js +0 -1
- package/dist/assets/chat-DLn1hY01.js +0 -1
- package/dist/assets/chat-DSEq1Bdz.js +0 -1
- package/dist/assets/chat-DxLD17ER.js +0 -1
- package/dist/assets/chat-DzPxYALH.js +0 -1
- package/dist/assets/chat-OunddzYy.js +0 -1
- package/dist/assets/chat-store-CtOyUCdF.js +0 -17
- package/dist/assets/common-BfVFjVhf.js +0 -1
- package/dist/assets/i18n-B0hsnanh.js +0 -2
- package/dist/assets/index-DHdO0CRE.js +0 -132
- package/dist/assets/index-DKrFQ76m.css +0 -1
- package/dist/assets/mailbox-store-D8TvJsuk.js +0 -1
- package/dist/assets/session-store-b2KGFwkX.js +0 -1
- package/dist/assets/settings-B5xal2R3.js +0 -1
- package/dist/assets/settings-BHtFy8EG.js +0 -1
- package/dist/assets/settings-Bss5hBla.js +0 -1
- package/dist/assets/settings-BzrLCVRP.js +0 -1
- package/dist/assets/settings-C7RdvmLZ.js +0 -1
- package/dist/assets/settings-Dd94HoV6.js +0 -1
- package/dist/assets/settings-Dm9THFe8.js +0 -1
- package/dist/assets/stores-BptlyD_v.js +0 -7
- package/dist/assets/ui-store-BsBnjO3w.js +0 -1
- package/dist/assets/useWebSocket-Bc4S0N4r.js +0 -29
- package/dist/assets/ws-client-DqFoX4jJ.js +0 -1
- package/dist/components/AgentsMonitor.d.ts +0 -26
- package/dist/components/FleetMonitor.d.ts +0 -21
- package/dist/lib/accent-colors.d.ts +0 -136
package/dist/lib/file-icons.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Returns a Tailwind text
|
|
3
|
-
*
|
|
4
|
-
*
|
|
2
|
+
* Returns a semantic Tailwind text-color class for a file extension.
|
|
3
|
+
* The classes resolve through WebUI theme tokens so file icons adapt to
|
|
4
|
+
* light/dark mode and the selected product palette.
|
|
5
5
|
*/
|
|
6
6
|
export declare function fileIconColor(name: string, isDirectory: boolean): string;
|
|
7
7
|
export declare function fileIcon(name: string): React.ComponentType<{
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { KanbanBoardSummary } from '@wrongstack/kanban';
|
|
2
|
+
/**
|
|
3
|
+
* The single client-side answer to "is this board attached to a live
|
|
4
|
+
* session?": a board is active when EITHER a presence entry is live OR one
|
|
5
|
+
* of its `session:<id>` tags names a session the client currently knows to
|
|
6
|
+
* be running. Callers that cannot know the live session ids (e.g. the
|
|
7
|
+
* kanban store computing fallback totals outside React) pass an empty
|
|
8
|
+
* list — that degrades to the presence-only half of the predicate instead
|
|
9
|
+
* of forking a second, narrower definition.
|
|
10
|
+
*
|
|
11
|
+
* The server-side twin lives in
|
|
12
|
+
* `packages/webui-server/src/server/kanban-route-pagination.ts`
|
|
13
|
+
* (`isActive` inside `paginateKanbanBoards`) and must keep the same shape:
|
|
14
|
+
* the server's `activeTotal`/`orphanedTotal` land in the same store fields
|
|
15
|
+
* these fallbacks feed, so a definition drift between the two shows up as
|
|
16
|
+
* a section heading disagreeing with the list rendered under it.
|
|
17
|
+
*/
|
|
18
|
+
export declare function isKanbanBoardActive(board: Pick<KanbanBoardSummary, 'presence' | 'tags'>, activeSessionIds: readonly string[]): boolean;
|
|
19
|
+
//# sourceMappingURL=kanban-board-active.d.ts.map
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Color palette registry — the WebUI's "main color" system.
|
|
3
|
+
*
|
|
4
|
+
* Users can pick a palette on top of the light/dark theme toggle. The actual
|
|
5
|
+
* token values live in `index.css` as `:root[data-palette="…"]` /
|
|
6
|
+
* `.dark[data-palette="…"]` blocks (rendering is driven by `hsl(var(--token))`),
|
|
7
|
+
* so this module only describes the palettes for the picker UI: id, i18n
|
|
8
|
+
* label, and the two swatch colors that preview the palette's two brand
|
|
9
|
+
* signals. `applyPalette` toggles the `data-palette` attribute on `<html>`.
|
|
10
|
+
*
|
|
11
|
+
* To add a palette: add a CSS token block in `index.css`, an entry here (in
|
|
12
|
+
* the same order), and an i18n label key in all 7 locale files. The default
|
|
13
|
+
* "signal" palette needs no CSS block — it is the base token set.
|
|
14
|
+
*/
|
|
15
|
+
export type PaletteId = 'signal' | 'emerald-gold' | 'blue-navy' | 'purple-pink' | 'cyan-teal' | 'rose-copper' | 'indigo-amber';
|
|
16
|
+
export interface PaletteDefinition {
|
|
17
|
+
id: PaletteId;
|
|
18
|
+
/** i18n key for the palette name, e.g. 'settings:general.paletteEmeraldGold'. */
|
|
19
|
+
labelKey: string;
|
|
20
|
+
/** CSS color for the main (primary) swatch stripe — dark-mode value so it reads on both themes. */
|
|
21
|
+
swatch: string;
|
|
22
|
+
/** CSS color for the secondary (brand) swatch stripe. */
|
|
23
|
+
swatchSecondary: string;
|
|
24
|
+
}
|
|
25
|
+
export declare const DEFAULT_PALETTE: PaletteId;
|
|
26
|
+
/** localStorage key for the persisted palette — shared by ThemeProvider and the config store's merge. */
|
|
27
|
+
export declare const PALETTE_STORAGE_KEY = "wrongstack-palette";
|
|
28
|
+
export declare const PALETTES: readonly PaletteDefinition[];
|
|
29
|
+
export declare function isPaletteId(value: unknown): value is PaletteId;
|
|
30
|
+
export declare function getPalette(value: unknown): PaletteDefinition;
|
|
31
|
+
/** Guarded read of a persisted palette id; invalid/missing/blocked storage
|
|
32
|
+
* falls back to `fallback`. Shared by ThemeProvider (initial state) and the
|
|
33
|
+
* config store's `merge` so the two persistence layers agree. */
|
|
34
|
+
export declare function readStoredPalette(storageKey: string, fallback: PaletteId): PaletteId;
|
|
35
|
+
/** Apply a palette to <html> by setting `data-palette`; removes it for the default. */
|
|
36
|
+
export declare function applyPalette(root: HTMLElement, palette: PaletteId): void;
|
|
37
|
+
//# sourceMappingURL=palettes.d.ts.map
|
|
@@ -26,7 +26,7 @@ export interface ResolvedPluginState {
|
|
|
26
26
|
* behaviour. The local override map may be missing, in which case only
|
|
27
27
|
* the canonical config is consulted.
|
|
28
28
|
*/
|
|
29
|
-
export declare function
|
|
29
|
+
export declare function resolvePluginToggleStates(configuredPlugins: readonly PluginEntry[] | undefined, localOverrides: Readonly<Record<string, boolean>> | undefined): ResolvedPluginState[];
|
|
30
30
|
/**
|
|
31
31
|
* Convenience accessor for callers that only need one plugin's resolved
|
|
32
32
|
* state. Returns `undefined` if the plugin is not configured at all
|
package/dist/lib/ws-client.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { WSClientMessage, WSModelSwitchResult, WSServerMessage, WSUserMessageImage } from '../types';
|
|
2
2
|
import type { ProviderCustomModelWire } from '../types/client-message';
|
|
3
|
-
import type { ContextEditorMessage } from '../types/runtime';
|
|
3
|
+
import type { ContextEditorMessage, ContextEditorRemoval } from '../types/runtime';
|
|
4
4
|
import { type WsClientActionMethods } from './ws-client-actions';
|
|
5
5
|
import type { WSSendOptions } from './ws-client-contracts';
|
|
6
6
|
import { type EventHandler, type WsStatus } from './ws-client-utils';
|
|
@@ -75,6 +75,23 @@ declare class WrongStackWebSocketClientBase {
|
|
|
75
75
|
private attemptReconnect;
|
|
76
76
|
/** Force an immediate reconnect attempt, bypassing the backoff timer. */
|
|
77
77
|
retryNow(): void;
|
|
78
|
+
/**
|
|
79
|
+
* Drain the offline queue onto a freshly-opened socket.
|
|
80
|
+
*
|
|
81
|
+
* Two hazards, both fatal before this guard:
|
|
82
|
+
*
|
|
83
|
+
* 1. `send()` calls `this.ws.send(...)` unguarded. The socket can race
|
|
84
|
+
* OPEN → CLOSING between the readyState check and the actual write (a
|
|
85
|
+
* normal server restart does it), which throws `InvalidStateError`. This
|
|
86
|
+
* runs from `onopen` BEFORE `resolve()`, so the throw skipped the
|
|
87
|
+
* resolve, the connect promise never settled, `.finally()` never cleared
|
|
88
|
+
* `connectPromise`, and every later `connect()` — including
|
|
89
|
+
* `attemptReconnect` and `retryNow` — returned that dead promise. The tab
|
|
90
|
+
* was offline for good with the banner stuck on "reconnecting".
|
|
91
|
+
* 2. If the socket is not OPEN, `send()` re-queues the message it was handed
|
|
92
|
+
* while this loop keeps shifting — an infinite loop on the main thread.
|
|
93
|
+
* Draining into a local array first makes the loop finite by construction.
|
|
94
|
+
*/
|
|
78
95
|
private flushMessageQueue;
|
|
79
96
|
private handleMessage;
|
|
80
97
|
private emit;
|
|
@@ -96,7 +113,10 @@ declare class WrongStackWebSocketClientBase {
|
|
|
96
113
|
type: K;
|
|
97
114
|
}>) => void): void;
|
|
98
115
|
off(eventType: string, handler: EventHandler): void;
|
|
99
|
-
sendMessage(content: string, images?: WSUserMessageImage[]): string;
|
|
116
|
+
sendMessage(content: string, images?: WSUserMessageImage[], freshContext?: boolean): string;
|
|
117
|
+
adviseTopic(prompt: string, timeoutMs?: number): Promise<Extract<WSServerMessage, {
|
|
118
|
+
type: 'topic.advice_result';
|
|
119
|
+
}>['payload']>;
|
|
100
120
|
/** Send a mailbox message of the given type (btw, steer, note, etc.)
|
|
101
121
|
* to a target agent/role. Returns the requestId for response tracking. */
|
|
102
122
|
sendMailboxMessage(opts: WSMailboxSendOptions): string;
|
|
@@ -154,8 +174,8 @@ declare class WrongStackWebSocketClientBase {
|
|
|
154
174
|
compactContext(aggressive?: boolean): void;
|
|
155
175
|
repairContext(): void;
|
|
156
176
|
openContextEditor(): void;
|
|
157
|
-
validateContextEditor(baseRevision: string, messages: ContextEditorMessage[], allowRepair: boolean): void;
|
|
158
|
-
applyContextEditor(baseRevision: string, messages: ContextEditorMessage[], allowRepair: boolean): void;
|
|
177
|
+
validateContextEditor(baseRevision: string, messages: ContextEditorMessage[], removals: ContextEditorRemoval[], allowRepair: boolean): void;
|
|
178
|
+
applyContextEditor(baseRevision: string, messages: ContextEditorMessage[], removals: ContextEditorRemoval[], allowRepair: boolean): void;
|
|
159
179
|
debugContext(options?: WSSendOptions): void;
|
|
160
180
|
listContextModes(): void;
|
|
161
181
|
switchContextMode(id: string): void;
|
package/dist/providers.json
CHANGED
|
@@ -45,14 +45,14 @@
|
|
|
45
45
|
}
|
|
46
46
|
},
|
|
47
47
|
{
|
|
48
|
-
"id": "
|
|
49
|
-
"name": "
|
|
48
|
+
"id": "ai-gateway",
|
|
49
|
+
"name": "Vercel AI Gateway",
|
|
50
50
|
"family": "openai-compatible",
|
|
51
|
-
"description": "
|
|
52
|
-
"icon": "
|
|
53
|
-
"color": "from-
|
|
54
|
-
"keyPlaceholder": "
|
|
55
|
-
"docsUrl": "https://
|
|
51
|
+
"description": "Every model behind one key — routed by Vercel AI Gateway",
|
|
52
|
+
"icon": "▲",
|
|
53
|
+
"color": "from-primary/12 to-primary/5 border-primary/30 hover:border-primary/50",
|
|
54
|
+
"keyPlaceholder": "vck_...",
|
|
55
|
+
"docsUrl": "https://vercel.com/docs/ai-gateway"
|
|
56
56
|
},
|
|
57
57
|
{
|
|
58
58
|
"id": "openrouter",
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { type PaletteId } from '@/lib/palettes';
|
|
1
2
|
export interface ConfigState {
|
|
2
3
|
provider: string;
|
|
3
4
|
model: string;
|
|
@@ -21,6 +22,10 @@ export interface ConfigState {
|
|
|
21
22
|
lastError?: string | undefined;
|
|
22
23
|
};
|
|
23
24
|
theme: 'light' | 'dark' | 'system';
|
|
25
|
+
/** Selected color palette id — see `lib/palettes.ts` + `index.css` token
|
|
26
|
+
* blocks. Mirrors the ThemeProvider's `wrongstack-palette` localStorage
|
|
27
|
+
* entry so the choice survives reloads and cross-surface config reads. */
|
|
28
|
+
palette: PaletteId;
|
|
24
29
|
autoConnect: boolean;
|
|
25
30
|
/** Play a soft synthesized chime when run.result lands with status=done.
|
|
26
31
|
* Off by default — opt-in via the Command Palette. Persisted so the
|
|
@@ -29,8 +34,9 @@ export interface ConfigState {
|
|
|
29
34
|
soundOnComplete: boolean;
|
|
30
35
|
setProvider: (provider: string) => void;
|
|
31
36
|
setModel: (model: string) => void;
|
|
32
|
-
setConfig: (config: Partial<Omit<ConfigState, 'setProvider' | 'setModel' | 'setConfig' | 'setTheme'>>) => void;
|
|
37
|
+
setConfig: (config: Partial<Omit<ConfigState, 'setProvider' | 'setModel' | 'setConfig' | 'setTheme' | 'setPalette'>>) => void;
|
|
33
38
|
setTheme: (theme: 'light' | 'dark' | 'system') => void;
|
|
39
|
+
setPalette: (palette: PaletteId) => void;
|
|
34
40
|
setWsConnected: (connected: boolean) => void;
|
|
35
41
|
setWsStatus: (s: ConfigState['wsStatus']) => void;
|
|
36
42
|
setSoundOnComplete: (on: boolean) => void;
|
|
@@ -44,6 +50,7 @@ export declare const useConfigStore: import("zustand").UseBoundStore<Omit<import
|
|
|
44
50
|
model: string;
|
|
45
51
|
baseUrl: string | undefined;
|
|
46
52
|
theme: "dark" | "light" | "system";
|
|
53
|
+
palette: PaletteId;
|
|
47
54
|
autoConnect: boolean;
|
|
48
55
|
soundOnComplete: boolean;
|
|
49
56
|
}, unknown>>) => void;
|
|
@@ -57,6 +64,7 @@ export declare const useConfigStore: import("zustand").UseBoundStore<Omit<import
|
|
|
57
64
|
model: string;
|
|
58
65
|
baseUrl: string | undefined;
|
|
59
66
|
theme: "dark" | "light" | "system";
|
|
67
|
+
palette: PaletteId;
|
|
60
68
|
autoConnect: boolean;
|
|
61
69
|
soundOnComplete: boolean;
|
|
62
70
|
}, unknown>>;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { ContextEditorMessage, ContextEditorMetrics, ContextEditorRepairPreview, ContextEditorValidationError, ContextEditorWarning, ContextEditorConflict, ContextEditorDiagnostics } from '@/types/runtime';
|
|
1
|
+
import type { ContextEditorMessage, ContextEditorMetrics, ContextEditorRemoval, ContextEditorRepairPreview, ContextEditorValidationError, ContextEditorWarning, ContextEditorConflict, ContextEditorDiagnostics } from '@/types/runtime';
|
|
2
2
|
export type ContextEditorPhase = 'closed' | 'loading_snapshot' | 'clean_snapshot' | 'dirty' | 'validating' | 'validated' | 'invalid' | 'conflicted' | 'applying' | 'applied_success' | 'apply_failed';
|
|
3
3
|
interface ReadonlyContext {
|
|
4
4
|
systemPromptTokens: number;
|
|
@@ -14,6 +14,7 @@ interface MessageBreakdownEntry {
|
|
|
14
14
|
preview: string;
|
|
15
15
|
blockCount: number | null;
|
|
16
16
|
warnings: ContextEditorWarning[];
|
|
17
|
+
pairedAssistantIndices: number[];
|
|
17
18
|
}
|
|
18
19
|
interface ValidationResult {
|
|
19
20
|
ok: boolean;
|
|
@@ -44,6 +45,9 @@ export interface ContextEditorState {
|
|
|
44
45
|
messageBreakdown: MessageBreakdownEntry[];
|
|
45
46
|
diagnostics: ContextEditorDiagnostics | null;
|
|
46
47
|
removeMessages: Set<number>;
|
|
48
|
+
/** Messages selected directly by the user, excluding required assistant pairing. */
|
|
49
|
+
explicitRemoveMessages: Set<number>;
|
|
50
|
+
removeRanges: ContextEditorRemoval[];
|
|
47
51
|
validation: ValidationResult | null;
|
|
48
52
|
appliedResult: AppliedResult | null;
|
|
49
53
|
errorMessage: string | null;
|
|
@@ -59,7 +63,10 @@ export interface ContextEditorActions {
|
|
|
59
63
|
diagnostics: ContextEditorDiagnostics;
|
|
60
64
|
}) => void;
|
|
61
65
|
toggleRemoveMessage: (index: number) => void;
|
|
66
|
+
markRangeForRemoval: (removal: ContextEditorRemoval) => void;
|
|
62
67
|
clearRemovals: () => void;
|
|
68
|
+
beginValidation: () => void;
|
|
69
|
+
beginApply: () => void;
|
|
63
70
|
setValidation: (result: ValidationResult) => void;
|
|
64
71
|
setApplied: (result: AppliedResult) => void;
|
|
65
72
|
setError: (message: string | null) => void;
|
|
@@ -68,6 +75,7 @@ export interface ContextEditorActions {
|
|
|
68
75
|
getProposedMessages: () => ContextEditorMessage[];
|
|
69
76
|
}
|
|
70
77
|
export type ContextEditorStore = ContextEditorState & ContextEditorActions;
|
|
78
|
+
export declare function findPairedAssistantIndices(messages: readonly ContextEditorMessage[], userIndex: number): number[];
|
|
71
79
|
export declare const useContextEditorStore: import("zustand").UseBoundStore<import("zustand").StoreApi<ContextEditorStore>>;
|
|
72
80
|
export {};
|
|
73
81
|
//# sourceMappingURL=context-editor-store.d.ts.map
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
export interface FallbackCandidate {
|
|
2
|
+
providerId: string;
|
|
3
|
+
model: string;
|
|
4
|
+
}
|
|
5
|
+
export interface FallbackPendingState {
|
|
6
|
+
requestId: string;
|
|
7
|
+
from: {
|
|
8
|
+
providerId: string;
|
|
9
|
+
model: string;
|
|
10
|
+
};
|
|
11
|
+
status: number;
|
|
12
|
+
candidates: FallbackCandidate[];
|
|
13
|
+
autoSwitchSeconds: number;
|
|
14
|
+
timestamp: number;
|
|
15
|
+
}
|
|
16
|
+
interface FallbackStore {
|
|
17
|
+
pending: FallbackPendingState | null;
|
|
18
|
+
selected: number;
|
|
19
|
+
/** Set the pending state from a WS event. */
|
|
20
|
+
setPending: (state: FallbackPendingState) => void;
|
|
21
|
+
/** Clear the pending state (switch happened or dismissed). */
|
|
22
|
+
clear: () => void;
|
|
23
|
+
/** Move the selection index (wraps). */
|
|
24
|
+
move: (delta: number) => void;
|
|
25
|
+
/** Set selection to a specific index. */
|
|
26
|
+
setSelected: (index: number) => void;
|
|
27
|
+
}
|
|
28
|
+
export declare const useFallbackStore: import("zustand").UseBoundStore<import("zustand").StoreApi<FallbackStore>>;
|
|
29
|
+
export {};
|
|
30
|
+
//# sourceMappingURL=fallback-store.d.ts.map
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { AgentTranscriptEntry, FleetTimelineEvent,
|
|
1
|
+
import type { AgentTranscriptEntry, FleetTimelineEvent, SubagentEvent, SubagentView } from './types.js';
|
|
2
2
|
export declare const EMPTY_AGENT_TRANSCRIPT: AgentTranscriptEntry[];
|
|
3
3
|
interface FleetState {
|
|
4
4
|
agents: Map<string, SubagentView>;
|
|
@@ -10,6 +10,13 @@ interface FleetState {
|
|
|
10
10
|
/** Current / max concurrency from server. */
|
|
11
11
|
fleetConcurrency: number;
|
|
12
12
|
fleetConcurrencyMax: number;
|
|
13
|
+
/** Lifetime spawn budget from server (issue #323). Undefined until first budget frame. */
|
|
14
|
+
fleetMaxSpawns: number | undefined;
|
|
15
|
+
fleetUsedSpawns: number | undefined;
|
|
16
|
+
fleetRemainingSpawns: number | undefined;
|
|
17
|
+
fleetBudgetSource: string | undefined;
|
|
18
|
+
fleetCheckpointMaxSpawns: number | undefined;
|
|
19
|
+
fleetCeilingMismatch: boolean;
|
|
13
20
|
/** Last 20 fleet events for the Fleet Monitor timeline. */
|
|
14
21
|
eventTimeline: FleetTimelineEvent[];
|
|
15
22
|
/** Agent conversation timeline entries (agent.timeline.message + agent.status_changed). */
|
|
@@ -38,6 +45,12 @@ export interface FleetSummary {
|
|
|
38
45
|
tokensOut: number;
|
|
39
46
|
concurrency: number;
|
|
40
47
|
concurrencyMax: number;
|
|
48
|
+
maxSpawns?: number | undefined;
|
|
49
|
+
usedSpawns?: number | undefined;
|
|
50
|
+
remainingSpawns?: number | undefined;
|
|
51
|
+
budgetSource?: string | undefined;
|
|
52
|
+
ceilingMismatch?: boolean | undefined;
|
|
53
|
+
checkpointMaxSpawns?: number | undefined;
|
|
41
54
|
}
|
|
42
55
|
/** Shallow comparison for zustand selector equality checks.
|
|
43
56
|
* Compares own enumerable string-keyed properties by reference.
|
package/dist/stores/index.d.ts
CHANGED
|
@@ -29,6 +29,8 @@ export type { ClientCounts, CurrentSessionStats, MailActivity } from './monitor-
|
|
|
29
29
|
export { useMonitorStore } from './monitor-store.js';
|
|
30
30
|
export { type BackgroundStyle, useOfficeMapStore } from './office-map-store.js';
|
|
31
31
|
export { type ProviderHealthEntry, type ProviderHealthState, useProviderStatusStore, } from './provider-status-store.js';
|
|
32
|
+
export { useFallbackStore } from './fallback-store.js';
|
|
33
|
+
export type { FallbackCandidate, FallbackPendingState } from './fallback-store.js';
|
|
32
34
|
export { type SddBoardFeedEntry, type SddBoardSnapshotUI, type SddBoardStatus, type SddBoardSummary, type SddLifecycleResultUI, useSddBoardStore, } from './sdd-board-store.js';
|
|
33
35
|
export { type SddWizardPhase, type SddWizardSnapshot, useSddWizardStore, } from './sdd-wizard-store.js';
|
|
34
36
|
export { useSessionStore } from './session-store.js';
|
|
@@ -24,6 +24,13 @@ export interface LocalPrefs {
|
|
|
24
24
|
fleetChatVerbosity: FleetChatVerbosity;
|
|
25
25
|
/** Predict next steps after turn completes */
|
|
26
26
|
nextPrediction: boolean;
|
|
27
|
+
/**
|
|
28
|
+
* Register the leader's agent-callable `nextsteps` tool alongside the
|
|
29
|
+
* `<nextsteps>` block it can already write. Persisted to
|
|
30
|
+
* `tools.nextsteps.enabled`; the tool registry is built at boot, so the
|
|
31
|
+
* change takes effect in the next session.
|
|
32
|
+
*/
|
|
33
|
+
nextStepsTool: boolean;
|
|
27
34
|
/** Global fallback model chain (entries: `model` or `provider/model`). */
|
|
28
35
|
fallbackModels: string[];
|
|
29
36
|
/** Named fallback chains selectable by setmodel/model routing. */
|
|
@@ -96,6 +103,10 @@ export interface LocalPrefs {
|
|
|
96
103
|
showThinkingLogs: boolean;
|
|
97
104
|
/** Group consecutive tool calls into collapsible chips */
|
|
98
105
|
groupToolCalls: boolean;
|
|
106
|
+
/** Auto-collapse the chat input under the history when a session with
|
|
107
|
+
* messages loads (opt-in; off by default). When off, the input always
|
|
108
|
+
* starts expanded. Independent of the manual collapse/expand buttons. */
|
|
109
|
+
autoCollapseInput: boolean;
|
|
99
110
|
/** Show model reasoning/thinking blocks inline in the chat */
|
|
100
111
|
showModelReasoning: boolean;
|
|
101
112
|
/** Agent swarm panel placement: bottom, sidebar, or off */
|
|
@@ -169,6 +180,8 @@ export interface LocalPrefs {
|
|
|
169
180
|
autoReviewModel: string;
|
|
170
181
|
/** Named fallback profile (from `config.fallbackProfiles`) used to derive provider/model + fallback chain. */
|
|
171
182
|
autoReviewFallbackProfile: string;
|
|
183
|
+
/** Starting-model policy for the selected auto-review profile. */
|
|
184
|
+
autoReviewModelSelection: 'round-robin' | 'random';
|
|
172
185
|
/** Explicit fallback chain (derived when no fallbackProfile is set, surfaced for visibility). */
|
|
173
186
|
autoReviewFallbackModels: string[];
|
|
174
187
|
/** Debounce window in ms — wait for quiet before firing review (default 15000). */
|
|
@@ -71,6 +71,8 @@ interface MailboxState {
|
|
|
71
71
|
setMessages: (messages: MailboxMessage[]) => void;
|
|
72
72
|
setAgents: (agents: MailboxAgent[]) => void;
|
|
73
73
|
setLastCompaction: (result: MailboxCompactionResult | null) => void;
|
|
74
|
+
/** Drop one agent by id (mailbox.agent_deregistered push). */
|
|
75
|
+
removeAgent: (agentId: string) => void;
|
|
74
76
|
}
|
|
75
77
|
export declare const useMailboxStore: import("zustand").UseBoundStore<import("zustand").StoreApi<MailboxState>>;
|
|
76
78
|
/** Incomplete messages where no agent has acted yet (readByCount === 0).
|
|
@@ -8,8 +8,15 @@ interface SessionState {
|
|
|
8
8
|
lastInputTokens: number;
|
|
9
9
|
cost: number;
|
|
10
10
|
startTime: number | null;
|
|
11
|
-
/**
|
|
11
|
+
/** Active effective context window. 0 = unknown. */
|
|
12
12
|
maxContext: number;
|
|
13
|
+
/** Live provider-reported decrease, shown until the session/model changes. */
|
|
14
|
+
contextLimitWarning: {
|
|
15
|
+
previousMaxContext: number;
|
|
16
|
+
maxContext: number;
|
|
17
|
+
providerId: string;
|
|
18
|
+
modelId: string;
|
|
19
|
+
} | null;
|
|
13
20
|
/** USD per 1M tokens — used to compute cost deltas on every provider.response. */
|
|
14
21
|
inputCost: number;
|
|
15
22
|
outputCost: number;
|
|
@@ -92,6 +99,7 @@ interface SessionState {
|
|
|
92
99
|
max: number;
|
|
93
100
|
} | null) => void;
|
|
94
101
|
setContextUsage: (tokens: number, maxContext?: number | undefined) => void;
|
|
102
|
+
setContextLimitWarning: (warning: SessionState['contextLimitWarning']) => void;
|
|
95
103
|
setModes: (modes: Array<{
|
|
96
104
|
id: string;
|
|
97
105
|
name: string;
|
|
@@ -181,6 +181,8 @@ interface UIState {
|
|
|
181
181
|
fallbackRef?: string | undefined;
|
|
182
182
|
/** True once the automatic timeout retry has been spent (so we don't loop). */
|
|
183
183
|
retried?: boolean | undefined;
|
|
184
|
+
/** Apply a model-context boundary atomically when the approved prompt is sent. */
|
|
185
|
+
freshContext?: boolean | undefined;
|
|
184
186
|
/** Provider id of the model running the refinement (e.g. "openai"). */
|
|
185
187
|
provider?: string | undefined;
|
|
186
188
|
/** Model name running the refinement (e.g. "gpt-4o"). */
|
package/dist/types/brain.d.ts
CHANGED
|
@@ -164,6 +164,7 @@ export interface BrainConfigWire {
|
|
|
164
164
|
perCallTimeoutMs?: number | undefined;
|
|
165
165
|
maxConcurrency?: number | undefined;
|
|
166
166
|
distinctness: 'none' | 'model' | 'provider';
|
|
167
|
+
voterMaxTokens?: number | undefined;
|
|
167
168
|
judgeMaxTokens?: number | undefined;
|
|
168
169
|
seats: BrainCouncilSeatWire[];
|
|
169
170
|
};
|
|
@@ -231,6 +232,7 @@ export interface BrainConfigPatchWire {
|
|
|
231
232
|
perCallTimeoutMs?: number | null | undefined;
|
|
232
233
|
maxConcurrency?: number | null | undefined;
|
|
233
234
|
distinctness?: 'none' | 'model' | 'provider' | null | undefined;
|
|
235
|
+
voterMaxTokens?: number | null | undefined;
|
|
234
236
|
judgeMaxTokens?: number | null | undefined;
|
|
235
237
|
seats?: BrainCouncilSeatWire[] | null | undefined;
|
|
236
238
|
} | null | undefined;
|
|
@@ -2,7 +2,7 @@ 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
4
|
import type { SessionScopedPayload, WSUserMessage } from './protocol-core.js';
|
|
5
|
-
import type { ContextEditorMessage, WSModelSwitch, WSToolConfirmResult } from './runtime.js';
|
|
5
|
+
import type { ContextEditorMessage, ContextEditorRemoval, WSModelSwitch, WSToolConfirmResult } from './runtime.js';
|
|
6
6
|
import type { SageAnchor, SageScope, SageStatus, WSMemorySageForFileRequest } from './sage.js';
|
|
7
7
|
import type { OAuthKind, WSCompletionRequest } from './system.js';
|
|
8
8
|
/** Metadata persisted by the custom-provider model editor in provider add/update messages. */
|
|
@@ -25,7 +25,13 @@ export interface ProviderCustomModelWire {
|
|
|
25
25
|
*/
|
|
26
26
|
modelsDev?: Record<string, unknown> | undefined;
|
|
27
27
|
}
|
|
28
|
-
export type WSClientMessageCore = WSUserMessage |
|
|
28
|
+
export type WSClientMessageCore = WSUserMessage | {
|
|
29
|
+
type: 'topic.advice';
|
|
30
|
+
payload: SessionScopedPayload & {
|
|
31
|
+
requestId: string;
|
|
32
|
+
prompt: string;
|
|
33
|
+
};
|
|
34
|
+
} | WSToolConfirmResult | {
|
|
29
35
|
type: 'side_effects.list';
|
|
30
36
|
payload?: Record<string, never>;
|
|
31
37
|
} | {
|
|
@@ -370,6 +376,7 @@ export type WSClientMessageCore = WSUserMessage | WSToolConfirmResult | {
|
|
|
370
376
|
payload: SessionScopedPayload & {
|
|
371
377
|
baseRevision: string;
|
|
372
378
|
messages: ContextEditorMessage[];
|
|
379
|
+
removals: ContextEditorRemoval[];
|
|
373
380
|
allowRepair: boolean;
|
|
374
381
|
};
|
|
375
382
|
} | {
|
|
@@ -377,6 +384,7 @@ export type WSClientMessageCore = WSUserMessage | WSToolConfirmResult | {
|
|
|
377
384
|
payload: SessionScopedPayload & {
|
|
378
385
|
baseRevision: string;
|
|
379
386
|
messages: ContextEditorMessage[];
|
|
387
|
+
removals: ContextEditorRemoval[];
|
|
380
388
|
allowRepair: boolean;
|
|
381
389
|
};
|
|
382
390
|
} | {
|
|
@@ -1190,6 +1198,15 @@ export type WSClientMessageCore = WSUserMessage | WSToolConfirmResult | {
|
|
|
1190
1198
|
payload: {
|
|
1191
1199
|
template: string;
|
|
1192
1200
|
};
|
|
1201
|
+
} | {
|
|
1202
|
+
type: 'model.fallback_choice';
|
|
1203
|
+
payload: {
|
|
1204
|
+
requestId: string;
|
|
1205
|
+
providerId?: string | undefined;
|
|
1206
|
+
model?: string | undefined;
|
|
1207
|
+
/** When true, auto-switch to the next candidate (countdown expired or Esc). */
|
|
1208
|
+
autoSwitch?: boolean | undefined;
|
|
1209
|
+
};
|
|
1193
1210
|
} | {
|
|
1194
1211
|
type: 'webui.shutdown';
|
|
1195
1212
|
};
|
|
@@ -60,6 +60,8 @@ export interface WSUserMessage {
|
|
|
60
60
|
content: string;
|
|
61
61
|
timestamp: number;
|
|
62
62
|
stateExpiresAt?: number | undefined;
|
|
63
|
+
/** Atomically replace only the provider-bound conversation before this run. */
|
|
64
|
+
freshContext?: boolean | undefined;
|
|
63
65
|
/** Images attached in the composer (paste / drop / file picker). The
|
|
64
66
|
* server converts these to canonical ImageBlocks ahead of the text. */
|
|
65
67
|
images?: WSUserMessageImage[];
|
|
@@ -238,6 +240,25 @@ export interface WSProviderFallback {
|
|
|
238
240
|
};
|
|
239
241
|
status: number;
|
|
240
242
|
providerSwitched: boolean;
|
|
243
|
+
/** Gate correlation id — present when a fallback gate mediated the switch. */
|
|
244
|
+
requestId?: string | undefined;
|
|
245
|
+
};
|
|
246
|
+
}
|
|
247
|
+
export interface WSProviderFallbackPending {
|
|
248
|
+
type: 'provider.fallback_pending';
|
|
249
|
+
payload: SessionScopedPayload & {
|
|
250
|
+
from: {
|
|
251
|
+
providerId: string;
|
|
252
|
+
model: string;
|
|
253
|
+
};
|
|
254
|
+
status: number;
|
|
255
|
+
candidates: Array<{
|
|
256
|
+
providerId: string;
|
|
257
|
+
model: string;
|
|
258
|
+
}>;
|
|
259
|
+
autoSwitchSeconds: number;
|
|
260
|
+
requestId: string;
|
|
261
|
+
timestamp: number;
|
|
241
262
|
};
|
|
242
263
|
}
|
|
243
264
|
export interface WSProviderStatusChanged {
|
package/dist/types/runtime.d.ts
CHANGED
|
@@ -113,6 +113,13 @@ export interface ContextEditorMessage {
|
|
|
113
113
|
content: string | ContextEditorContentBlock[];
|
|
114
114
|
ts?: string | undefined;
|
|
115
115
|
}
|
|
116
|
+
/** A whole-message removal, or a character range in string/text-block content. blockIndex only identifies a text block; it is not a whole-block deletion. */
|
|
117
|
+
export interface ContextEditorRemoval {
|
|
118
|
+
messageIndex: number;
|
|
119
|
+
blockIndex?: number | undefined;
|
|
120
|
+
start?: number | undefined;
|
|
121
|
+
end?: number | undefined;
|
|
122
|
+
}
|
|
116
123
|
export interface ContextEditorMetrics {
|
|
117
124
|
messages: number;
|
|
118
125
|
blocks: number;
|
|
@@ -168,6 +175,7 @@ export interface WSContextEditorSnapshot {
|
|
|
168
175
|
preview: string;
|
|
169
176
|
blockCount: number | null;
|
|
170
177
|
warnings: ContextEditorWarning[];
|
|
178
|
+
pairedAssistantIndices: number[];
|
|
171
179
|
}>;
|
|
172
180
|
diagnostics: ContextEditorDiagnostics;
|
|
173
181
|
};
|
|
@@ -278,12 +286,26 @@ export interface WSContextPct {
|
|
|
278
286
|
maxContext: number;
|
|
279
287
|
};
|
|
280
288
|
}
|
|
289
|
+
export interface WSTopicAdviceResult {
|
|
290
|
+
type: 'topic.advice_result';
|
|
291
|
+
payload: SessionScopedPayload & {
|
|
292
|
+
requestId: string;
|
|
293
|
+
suggestNewContext: boolean;
|
|
294
|
+
confidence: number;
|
|
295
|
+
reason: string;
|
|
296
|
+
nextTopic?: string | undefined;
|
|
297
|
+
source: 'explicit' | 'model' | 'cache' | 'local';
|
|
298
|
+
};
|
|
299
|
+
}
|
|
281
300
|
export interface WSContextMaxContext {
|
|
282
301
|
type: 'ctx.max_context';
|
|
283
302
|
payload: SessionScopedPayload & {
|
|
284
303
|
providerId: string;
|
|
285
304
|
modelId: string;
|
|
286
305
|
maxContext: number;
|
|
306
|
+
previousMaxContext?: number | undefined;
|
|
307
|
+
source?: 'configured' | 'provider' | 'provider_overflow' | undefined;
|
|
308
|
+
decreased?: boolean | undefined;
|
|
287
309
|
};
|
|
288
310
|
}
|
|
289
311
|
export interface WSTokenThreshold {
|
|
@@ -3,12 +3,12 @@ import type { ChronicleFacet, ChronicleFacetValue, ChronicleGraphResult, Chronic
|
|
|
3
3
|
import type { WSCollabAnnotationAdded, WSCollabAnnotationResolved, WSCollabEvent, WSCollabInjectionGranted, WSCollabParticipantJoined, WSCollabParticipantLeft, WSCollabPauseGranted, WSCollabPauseReleased, WSCollabState } from './collab.js';
|
|
4
4
|
import type { ConnectionsHealthReport, ServiceActionResult } from './connections.js';
|
|
5
5
|
import type { WSAgentStatusChanged, WSAgentTimelineMessage, WSEternalIteration, WSGoalAssessResult, WSGoalLifecycle, WSGoalList, WSGoalProgress, WSGoalState, WSKanbanResult, WSKanbanTaskActivity, WSModesList, WSWorktreeCleanupResult, WSWorktreeDiffResult, WSWorktreeEvent, WSWorktreeMergeResult, WSWorktreeOrphans, WSWorktreeState } from './goal-kanban-worktree.js';
|
|
6
|
-
import type { SessionScopedPayload, WSCodeMapToolExecuted, WSCodeMapToolStarted, WSIterationCompleted, WSIterationLimitReached, WSIterationStarted, WSProviderActiveBlocked, WSProviderError, WSProviderFallback, WSProviderResponse, WSProviderRetry, WSProviderStatusChanged, WSProviderStatusSnapshot, WSProviderStreamError, WSRunResult, WSSessionEnd, WSSessionStart, WSTextDelta, WSThinkingDelta, WSToolExecuted, WSToolProgress, WSToolUseStart } from './protocol-core.js';
|
|
7
|
-
import type { WSCompactionFailed, WSContextCompacted, WSContextDebug, WSContextEditorApplied, WSContextEditorSnapshot, WSContextEditorValidation, WSContextMaxContext, WSContextModeChanged, WSContextModesList, WSContextPct, WSContextRepaired, WSDelegateCompleted, WSDelegateStarted, WSError, WSMemoryList, WSSessionStats, WSTokenCostEstimateUnavailable, WSTokenThreshold, WSToolConfirmNeeded, WSToolLoopDetected, WSToolsList, WSTrustPersisted } from './runtime.js';
|
|
6
|
+
import type { SessionScopedPayload, WSCodeMapToolExecuted, WSCodeMapToolStarted, WSIterationCompleted, WSIterationLimitReached, WSIterationStarted, WSProviderActiveBlocked, WSProviderError, WSProviderFallback, WSProviderFallbackPending, WSProviderResponse, WSProviderRetry, WSProviderStatusChanged, WSProviderStatusSnapshot, WSProviderStreamError, WSRunResult, WSSessionEnd, WSSessionStart, WSTextDelta, WSThinkingDelta, WSToolExecuted, WSToolProgress, WSToolUseStart } from './protocol-core.js';
|
|
7
|
+
import type { WSCompactionFailed, WSContextCompacted, WSContextDebug, WSContextEditorApplied, WSContextEditorSnapshot, WSContextEditorValidation, WSContextMaxContext, WSContextModeChanged, WSContextModesList, WSContextPct, WSContextRepaired, WSDelegateCompleted, WSDelegateStarted, WSError, WSMemoryList, WSSessionStats, WSTokenCostEstimateUnavailable, WSTokenThreshold, WSToolConfirmNeeded, WSToolLoopDetected, WSToolsList, WSTopicAdviceResult, WSTrustPersisted } from './runtime.js';
|
|
8
8
|
import type { WSMemorySageBackfillRecoverable, WSMemorySageCandidateResolve, WSMemorySageDelete, WSMemorySageForFile, WSMemorySageGet, WSMemorySageGraph, WSMemorySageList, WSMemorySageListPage, WSMemorySageRecover, WSMemorySageRemember, WSMemorySageUpdate } from './sage.js';
|
|
9
9
|
import type { WSDesignList, WSDesignMaterialize, WSDesignSet, WSDesignState, WSDesignSwap, WSDesignTune, WSDesignUse, WSDesignVerify, WSSkillContent, WSSkillsCreated, WSSkillsEdited, WSSkillsExported, WSSkillsInstalled, WSSkillsList, WSSkillsUninstalled, WSSkillsUpdated } from './skills-design.js';
|
|
10
|
-
import type { WSAuthOAuthStatus, WSCatalogModelSearchResult, WSCompletionResult, WSDiagGet, WSFilesList, WSKeyOperationResult, WSModelSwitchResult, WSProviderCatalog, WSProviderModels, WSProviderProbe, WSSavedProviders,
|
|
11
|
-
export type WSServerMessage = WSSessionStart | WSSessionEnd | WSTextDelta | WSThinkingDelta | WSToolUseStart | WSToolProgress | WSToolExecuted | WSCodeMapToolStarted | WSCodeMapToolExecuted | WSIterationStarted | WSIterationCompleted | WSIterationLimitReached | WSProviderResponse | WSProviderRetry | WSProviderError | WSProviderFallback | WSProviderStatusChanged | WSProviderStatusSnapshot | WSProviderActiveBlocked | WSProviderStreamError | WSRunResult | WSSessionStats | WSError | WSToolConfirmNeeded | WSTrustPersisted | WSToolLoopDetected | WSDelegateStarted | WSDelegateCompleted | WSContextDebug | WSContextCompacted | WSCompactionFailed | WSContextRepaired | WSContextEditorSnapshot | WSContextEditorValidation | WSContextEditorApplied | WSContextPct | WSContextMaxContext | WSTokenThreshold | WSTokenCostEstimateUnavailable | WSContextModesList | WSContextModeChanged | WSToolsList | WSMemoryList | WSMemorySageList | WSMemorySageListPage | WSMemorySageGet | WSMemorySageGraph | WSMemorySageUpdate | WSMemorySageRemember | WSMemorySageDelete | WSMemorySageRecover | WSMemorySageCandidateResolve | WSMemorySageBackfillRecoverable | WSMemorySageForFile | WSSkillsList | WSSkillContent | WSDesignList | WSDesignUse | WSDesignState | WSDesignSet | WSDesignTune | WSDesignSwap | WSDesignMaterialize | WSDesignVerify | WSSkillsInstalled | WSSkillsUninstalled | WSSkillsUpdated | WSSkillsCreated | WSSkillsEdited | WSSkillsExported | WSDiagGet | WSStatsGet | {
|
|
10
|
+
import type { WSAuthOAuthStatus, WSCatalogModelSearchResult, WSCompletionResult, WSDiagGet, WSFilesList, WSKeyOperationResult, WSModelSwitchResult, WSProviderCatalog, WSProviderModels, WSProviderProbe, WSSavedProviders, WSSessionInspect, WSSessionsList, WSSideEffects, WSStatsGet, WSTodosCleared, WSTodosUpdated } from './system.js';
|
|
11
|
+
export type WSServerMessage = WSSessionStart | WSSessionEnd | WSTextDelta | WSThinkingDelta | WSToolUseStart | WSToolProgress | WSToolExecuted | WSCodeMapToolStarted | WSCodeMapToolExecuted | WSIterationStarted | WSIterationCompleted | WSIterationLimitReached | WSProviderResponse | WSProviderRetry | WSProviderError | WSProviderFallback | WSProviderFallbackPending | WSProviderStatusChanged | WSProviderStatusSnapshot | WSProviderActiveBlocked | WSProviderStreamError | WSRunResult | WSSessionStats | WSError | WSToolConfirmNeeded | WSTrustPersisted | WSToolLoopDetected | WSDelegateStarted | WSDelegateCompleted | WSContextDebug | WSContextCompacted | WSCompactionFailed | WSContextRepaired | WSContextEditorSnapshot | WSContextEditorValidation | WSContextEditorApplied | WSContextPct | WSTopicAdviceResult | WSContextMaxContext | WSTokenThreshold | WSTokenCostEstimateUnavailable | WSContextModesList | WSContextModeChanged | WSToolsList | WSMemoryList | WSMemorySageList | WSMemorySageListPage | WSMemorySageGet | WSMemorySageGraph | WSMemorySageUpdate | WSMemorySageRemember | WSMemorySageDelete | WSMemorySageRecover | WSMemorySageCandidateResolve | WSMemorySageBackfillRecoverable | WSMemorySageForFile | WSSkillsList | WSSkillContent | WSDesignList | WSDesignUse | WSDesignState | WSDesignSet | WSDesignTune | WSDesignSwap | WSDesignMaterialize | WSDesignVerify | WSSkillsInstalled | WSSkillsUninstalled | WSSkillsUpdated | WSSkillsCreated | WSSkillsEdited | WSSkillsExported | WSDiagGet | WSStatsGet | {
|
|
12
12
|
type: 'connections.health_result';
|
|
13
13
|
payload: ConnectionsHealthReport;
|
|
14
14
|
} | {
|
|
@@ -246,6 +246,9 @@ export type WSServerMessage = WSSessionStart | WSSessionEnd | WSTextDelta | WSTh
|
|
|
246
246
|
} | {
|
|
247
247
|
type: 'mailbox.agent_registered';
|
|
248
248
|
payload: Record<string, unknown>;
|
|
249
|
+
} | {
|
|
250
|
+
type: 'mailbox.agent_deregistered';
|
|
251
|
+
payload: Record<string, unknown>;
|
|
249
252
|
} | {
|
|
250
253
|
type: 'mailbox.messages';
|
|
251
254
|
payload: {
|
|
@@ -520,6 +523,14 @@ export type WSServerMessage = WSSessionStart | WSSessionEnd | WSTextDelta | WSTh
|
|
|
520
523
|
payload: SessionScopedPayload & {
|
|
521
524
|
fleetConcurrency: number;
|
|
522
525
|
fleetConcurrencyMax: number;
|
|
526
|
+
maxSpawns?: number;
|
|
527
|
+
usedSpawns?: number;
|
|
528
|
+
remainingSpawns?: number;
|
|
529
|
+
maxSpawnsSource?: string;
|
|
530
|
+
maxConcurrentSource?: string;
|
|
531
|
+
effectiveSource?: string;
|
|
532
|
+
checkpointMaxSpawns?: number;
|
|
533
|
+
ceilingMismatch?: boolean;
|
|
523
534
|
};
|
|
524
535
|
} | {
|
|
525
536
|
type: 'budget.threshold_reached';
|