@schlessera/brain-ui-react 0.19.0 → 0.21.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/components/activity/activity-page.d.ts.map +1 -1
- package/dist/components/activity/activity-page.js +90 -16
- package/dist/components/activity/activity-page.js.map +1 -1
- package/dist/components/activity/digest-card.d.ts.map +1 -1
- package/dist/components/activity/digest-card.js +5 -1
- package/dist/components/activity/digest-card.js.map +1 -1
- package/dist/components/activity/push-toggle.d.ts.map +1 -1
- package/dist/components/activity/push-toggle.js +39 -0
- package/dist/components/activity/push-toggle.js.map +1 -1
- package/dist/components/activity/span-bits.d.ts +76 -1
- package/dist/components/activity/span-bits.d.ts.map +1 -1
- package/dist/components/activity/span-bits.js +141 -4
- package/dist/components/activity/span-bits.js.map +1 -1
- package/dist/components/chat/subagent-view.js +8 -4
- package/dist/components/chat/subagent-view.js.map +1 -1
- package/dist/components/settings/models-tab.d.ts +15 -0
- package/dist/components/settings/models-tab.d.ts.map +1 -1
- package/dist/components/settings/models-tab.js +100 -21
- package/dist/components/settings/models-tab.js.map +1 -1
- package/dist/lib/api-client.d.ts +29 -2
- package/dist/lib/api-client.d.ts.map +1 -1
- package/dist/lib/api-client.js +14 -1
- package/dist/lib/api-client.js.map +1 -1
- package/dist/stores/activity-store.d.ts +25 -0
- package/dist/stores/activity-store.d.ts.map +1 -1
- package/dist/stores/activity-store.js +82 -0
- package/dist/stores/activity-store.js.map +1 -1
- package/dist/styles.css +1 -1
- package/package.json +2 -2
- package/src/components/activity/activity-page.tsx +307 -32
- package/src/components/activity/digest-card.tsx +5 -1
- package/src/components/activity/push-toggle.tsx +29 -0
- package/src/components/activity/span-bits.tsx +184 -4
- package/src/components/chat/subagent-view.tsx +33 -23
- package/src/components/settings/models-tab.tsx +135 -21
- package/src/lib/api-client.ts +38 -2
- package/src/stores/activity-store.ts +82 -0
|
@@ -1,7 +1,10 @@
|
|
|
1
|
-
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
-
import {
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useEffect } from "react";
|
|
3
|
+
import { useShallow } from "zustand/react/shallow";
|
|
4
|
+
import { isFailureOutcome, SPAN_TOOL_NAME_PREFIX } from "@schlessera/brain-ui-sdk/protocol";
|
|
5
|
+
import { useActivityStore, payloadEventsFor, loadSpanPayloads, } from "../../stores/activity-store.js";
|
|
3
6
|
import { cn } from "../../lib/utils.js";
|
|
4
|
-
import { getToolLabel } from "../chat/tool-views.js";
|
|
7
|
+
import { getToolLabel, formatTokenCount } from "../chat/tool-views.js";
|
|
5
8
|
/**
|
|
6
9
|
* THE status dot for activity spans — one outcome→color mapping so every
|
|
7
10
|
* surface (timeline rows, drill-in, activity index) agrees on what a color
|
|
@@ -32,7 +35,141 @@ export function spanToolLabel(span) {
|
|
|
32
35
|
return "Turn";
|
|
33
36
|
if (span.kind === "cron")
|
|
34
37
|
return span.jobName ?? span.name;
|
|
35
|
-
return getToolLabel(span.name.
|
|
38
|
+
return getToolLabel(span.name.startsWith(SPAN_TOOL_NAME_PREFIX)
|
|
39
|
+
? span.name.slice(SPAN_TOOL_NAME_PREFIX.length)
|
|
40
|
+
: span.name);
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* The recorded input/output of one tool span, expanded under its row — the
|
|
44
|
+
* ONE payload renderer shared by the subagent drill-in and the run detail.
|
|
45
|
+
* Mounted only while expanded (collapsed rows never subscribe). A span with
|
|
46
|
+
* no payload events (recorded before capture shipped) states so instead of
|
|
47
|
+
* offering an empty block (AE7); a payload clipped at persist time carries
|
|
48
|
+
* the wire `truncated` flag, rendered as a hint line under the block.
|
|
49
|
+
*/
|
|
50
|
+
export function SpanPayload({ spanId }) {
|
|
51
|
+
const events = useActivityStore(useShallow((s) => payloadEventsFor(s, spanId)));
|
|
52
|
+
// History fetches skip payload bodies (they exist for duration badges);
|
|
53
|
+
// the first expand of a finished run backfills them over REST. A no-op for
|
|
54
|
+
// live runs (payloads ride the WS deltas) and once per run thereafter.
|
|
55
|
+
useEffect(() => {
|
|
56
|
+
if (events.length === 0)
|
|
57
|
+
void loadSpanPayloads(spanId);
|
|
58
|
+
}, [spanId, events.length]);
|
|
59
|
+
if (events.length === 0) {
|
|
60
|
+
return (_jsx("p", { className: "px-2 py-1 text-[11px] text-muted-foreground/60", children: "No payload recorded for this run." }));
|
|
61
|
+
}
|
|
62
|
+
return (_jsx("div", { className: "space-y-1.5 px-2 py-1", children: events.map((event) => (_jsx(SpanEventBlock, { event: event }, `${event.spanId}:${event.eventIndex}`))) }));
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Display label for a span event type. Known types get prose; an unknown one
|
|
66
|
+
* (a span-sink producer is free to invent them) prints its own type rather
|
|
67
|
+
* than being mislabelled as output.
|
|
68
|
+
*/
|
|
69
|
+
export function eventTypeLabel(eventType) {
|
|
70
|
+
if (eventType === "tool_input")
|
|
71
|
+
return "Input";
|
|
72
|
+
if (eventType === "tool_output")
|
|
73
|
+
return "Output";
|
|
74
|
+
if (eventType.startsWith("transcript_"))
|
|
75
|
+
return `Transcript · ${eventType.slice("transcript_".length)}`;
|
|
76
|
+
if (eventType === "job_output")
|
|
77
|
+
return "Job output";
|
|
78
|
+
return eventType.replace(/_/g, " ");
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* ONE labelled block per recorded event — the shared renderer behind the tool
|
|
82
|
+
* payload expander and the run detail's narrative stream, so every event type
|
|
83
|
+
* lands somewhere visible instead of only the two the expander knows.
|
|
84
|
+
*/
|
|
85
|
+
export function SpanEventBlock({ event }) {
|
|
86
|
+
const text = typeof event.payload === "string" ? event.payload : JSON.stringify(event.payload, null, 2);
|
|
87
|
+
return (_jsxs("div", { children: [_jsx("div", { className: "mb-0.5 text-[10px] uppercase text-muted-foreground/60", children: eventTypeLabel(event.eventType) }), _jsx("pre", { className: "max-h-56 overflow-auto whitespace-pre-wrap break-words rounded-md bg-background/60 p-2 font-[family-name:var(--font-mono)] text-[11px] leading-relaxed text-muted-foreground", children: text }), event.truncated && (_jsx("p", { className: "mt-0.5 text-[10px] italic text-muted-foreground/60", children: "\u2026 truncated" }))] }));
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* A span's own token/model line, or null when the backend recorded no usage
|
|
91
|
+
* for it (every tool span, and any cron root without a span-sink producer).
|
|
92
|
+
* Cache reads are named separately: they are the cheap half of the bill and
|
|
93
|
+
* folding them into "in" would misstate what the run actually consumed.
|
|
94
|
+
*/
|
|
95
|
+
export function formatSpanUsage(span) {
|
|
96
|
+
const usage = span.usage;
|
|
97
|
+
if (!usage)
|
|
98
|
+
return null;
|
|
99
|
+
const parts = [];
|
|
100
|
+
if (usage.model)
|
|
101
|
+
parts.push(usage.model);
|
|
102
|
+
if (usage.inputTokens)
|
|
103
|
+
parts.push(`${formatTokenCount(usage.inputTokens)} in`);
|
|
104
|
+
if (usage.outputTokens)
|
|
105
|
+
parts.push(`${formatTokenCount(usage.outputTokens)} out`);
|
|
106
|
+
if (usage.cacheReadTokens)
|
|
107
|
+
parts.push(`${formatTokenCount(usage.cacheReadTokens)} cached`);
|
|
108
|
+
if (usage.cacheCreationTokens)
|
|
109
|
+
parts.push(`${formatTokenCount(usage.cacheCreationTokens)} cache write`);
|
|
110
|
+
return parts.length > 0 ? parts.join(" · ") : null;
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* THE effective-cost glyph — one three-state rule so no surface ever renders
|
|
114
|
+
* an unknown cost as $0.00 (AE3): absent/NULL is "—" (we don't know), 0 is
|
|
115
|
+
* "subbed" when the run was subscription-billed and "free" otherwise (a
|
|
116
|
+
* genuinely zero-rate model, e.g. an OpenRouter free tier), positive is
|
|
117
|
+
* dollars, "~"-prefixed when computed from estimated rates. Sub-cent costs
|
|
118
|
+
* floor at "<$0.01" rather than rounding down to a zero look-alike.
|
|
119
|
+
*
|
|
120
|
+
* The zero split matters: a seat plan absorbing the run and a model that
|
|
121
|
+
* costs nothing are both $0 additive, but only one of them stays $0 once the
|
|
122
|
+
* subscription is cancelled.
|
|
123
|
+
*/
|
|
124
|
+
export function formatEffectiveCost(costUsd, estimate, billingMode) {
|
|
125
|
+
if (costUsd === null || costUsd === undefined)
|
|
126
|
+
return "—";
|
|
127
|
+
if (costUsd === 0)
|
|
128
|
+
return billingMode === "subscription" ? "subbed" : "free";
|
|
129
|
+
const amount = costUsd < 0.005 ? "<$0.01" : `$${costUsd.toFixed(2)}`;
|
|
130
|
+
return estimate ? `~${amount}` : amount;
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* An aggregate's effective-cost sum. Sums exclude unknown-cost runs, so a
|
|
134
|
+
* nonzero `unpricedRuns` makes the number a floor ("≥ $X"), never a total.
|
|
135
|
+
* A known sub-cent sum floors at "<$0.01" like the per-run glyph — only an
|
|
136
|
+
* exact 0 (genuinely nothing to add up) renders "$0.00" (AE3).
|
|
137
|
+
*/
|
|
138
|
+
export function formatAggregateCost(effectiveUsd, unpricedRuns) {
|
|
139
|
+
const amount = effectiveUsd > 0 && effectiveUsd < 0.005 ? "<$0.01" : `$${effectiveUsd.toFixed(2)}`;
|
|
140
|
+
return unpricedRuns > 0 ? `≥ ${amount}` : amount;
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* A run row's cost text, three-way on `effectiveCostUsd`: ABSENT means a
|
|
144
|
+
* pre-pricing server never sent the field — fall back to the original
|
|
145
|
+
* list-cost rendering (a positive `costUsd`, else nothing) instead of
|
|
146
|
+
* claiming unknown; explicit null means THIS server computed "unknown" and
|
|
147
|
+
* renders the em dash; a number goes through `formatEffectiveCost` (AE3).
|
|
148
|
+
*/
|
|
149
|
+
export function runCostText(run) {
|
|
150
|
+
if (run.effectiveCostUsd === undefined) {
|
|
151
|
+
return run.costUsd !== null && run.costUsd > 0 ? `$${run.costUsd.toFixed(2)}` : null;
|
|
152
|
+
}
|
|
153
|
+
return formatEffectiveCost(run.effectiveCostUsd, run.pricingEstimate, run.billingMode);
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* The digest card's cost clause (no leading separator), effective-only, or
|
|
157
|
+
* null for "say nothing". A digest persisted before pricing shipped carries
|
|
158
|
+
* neither new field and keeps its old list-cost clause.
|
|
159
|
+
*/
|
|
160
|
+
export function digestCostClause(digest) {
|
|
161
|
+
if (digest.effectiveCostUsd === undefined) {
|
|
162
|
+
return digest.costUsd > 0 ? `$${digest.costUsd.toFixed(2)} spent` : null;
|
|
163
|
+
}
|
|
164
|
+
const unpriced = digest.unpricedRuns ?? 0;
|
|
165
|
+
const qualifier = unpriced > 0 ? ` (${unpriced} unpriced)` : "";
|
|
166
|
+
if (digest.effectiveCostUsd > 0) {
|
|
167
|
+
return `${formatAggregateCost(digest.effectiveCostUsd, unpriced)} spent${qualifier}`;
|
|
168
|
+
}
|
|
169
|
+
// Known-zero spend: nothing to add up, but the unknowns still get named.
|
|
170
|
+
if (unpriced > 0)
|
|
171
|
+
return `${unpriced} unpriced`;
|
|
172
|
+
return "free";
|
|
36
173
|
}
|
|
37
174
|
/** The "9+" unread-count bubble shared by the rail and the tab bar. Hidden at 0. */
|
|
38
175
|
export function CountBadge({ count, className }) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"span-bits.js","sourceRoot":"","sources":["../../../src/components/activity/span-bits.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;
|
|
1
|
+
{"version":3,"file":"span-bits.js","sourceRoot":"","sources":["../../../src/components/activity/span-bits.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import { useMemo } from "react";
|
|
3
|
-
import { ArrowLeft, Bot, Check, X } from "lucide-react";
|
|
2
|
+
import { useMemo, useState } from "react";
|
|
3
|
+
import { ArrowLeft, Bot, Check, ChevronRight, X } from "lucide-react";
|
|
4
4
|
import { motion } from "framer-motion";
|
|
5
5
|
import { useShallow } from "zustand/react/shallow";
|
|
6
6
|
import { isFailureOutcome } from "@schlessera/brain-ui-sdk/protocol";
|
|
@@ -9,7 +9,7 @@ import { useUIStore } from "../../stores/ui-store.js";
|
|
|
9
9
|
import { useChatStore, activeChat } from "../../stores/chat-store.js";
|
|
10
10
|
import { cn } from "../../lib/utils.js";
|
|
11
11
|
import { getToolLabel, formatDuration } from "./tool-views.js";
|
|
12
|
-
import { SpanStatusDot, spanToolLabel } from "../activity/span-bits.js";
|
|
12
|
+
import { SpanPayload, SpanStatusDot, spanToolLabel } from "../activity/span-bits.js";
|
|
13
13
|
/**
|
|
14
14
|
* Drill-in view of one subagent: the span tree under its Agent tool call,
|
|
15
15
|
* transcript excerpts interleaved by time, live while the subagent runs.
|
|
@@ -53,12 +53,16 @@ function BackButton({ onClick }) {
|
|
|
53
53
|
return (_jsx("button", { type: "button", onClick: onClick, className: "rounded-md p-1.5 text-muted-foreground transition-colors hover:bg-surface-raised hover:text-foreground", "aria-label": "Back", children: _jsx(ArrowLeft, { className: "h-4 w-4" }) }));
|
|
54
54
|
}
|
|
55
55
|
function SpanRow({ span, onOpen }) {
|
|
56
|
+
// Tool rows expand to their recorded payload (AE7); a pre-feature span
|
|
57
|
+
// expands to the no-payload notice, so the affordance stays uniform.
|
|
58
|
+
const [expanded, setExpanded] = useState(false);
|
|
56
59
|
const running = span.outcome === undefined;
|
|
57
60
|
const failed = isFailureOutcome(span.outcome);
|
|
61
|
+
const expandable = !onOpen && span.kind === "tool";
|
|
58
62
|
const duration = span.endedAt !== undefined
|
|
59
63
|
? formatDuration(span.endedAt - (span.waitUntil ?? span.startedAt))
|
|
60
64
|
: null;
|
|
61
|
-
return (_jsxs(motion.div, { initial: { opacity: 0, y: 2 }, animate: { opacity: 1, y: 0 }, className: cn("flex items-center gap-2 rounded-md px-2 py-1.5 text-xs", failed ? "text-destructive/80" : "text-muted-foreground", onOpen && "cursor-pointer hover:text-foreground"), onClick: onOpen, children: [_jsx(SpanStatusDot, { span: span, className: "h-2 w-2" }), _jsx("span", { className: "font-[family-name:var(--font-mono)] font-medium", children: spanToolLabel(span) }), span.outcome && span.outcome !== "success" && (_jsx("span", { className: "text-[10px] uppercase", children: span.outcome })), _jsx("span", { className: "ml-auto font-[family-name:var(--font-mono)] text-[10px] text-muted-foreground/50", children: duration ?? (running ? "…" : "") })] }));
|
|
65
|
+
return (_jsxs(motion.div, { initial: { opacity: 0, y: 2 }, animate: { opacity: 1, y: 0 }, children: [_jsxs("div", { className: cn("flex items-center gap-2 rounded-md px-2 py-1.5 text-xs", failed ? "text-destructive/80" : "text-muted-foreground", (onOpen || expandable) && "cursor-pointer hover:text-foreground"), onClick: onOpen ?? (expandable ? () => setExpanded((v) => !v) : undefined), children: [_jsx(SpanStatusDot, { span: span, className: "h-2 w-2" }), _jsx("span", { className: "font-[family-name:var(--font-mono)] font-medium", children: spanToolLabel(span) }), span.outcome && span.outcome !== "success" && (_jsx("span", { className: "text-[10px] uppercase", children: span.outcome })), _jsx("span", { className: "ml-auto font-[family-name:var(--font-mono)] text-[10px] text-muted-foreground/50", children: duration ?? (running ? "…" : "") }), expandable && (_jsx(ChevronRight, { className: cn("h-3 w-3 shrink-0 transition-transform", expanded && "rotate-90") }))] }), expanded && _jsx(SpanPayload, { spanId: span.spanId })] }));
|
|
62
66
|
}
|
|
63
67
|
function TranscriptRow({ event }) {
|
|
64
68
|
const text = typeof event.payload === "string" ? event.payload : JSON.stringify(event.payload);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"subagent-view.js","sourceRoot":"","sources":["../../../src/components/chat/subagent-view.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"subagent-view.js","sourceRoot":"","sources":["../../../src/components/chat/subagent-view.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { BillingMode, ModelCatalogEntry } from "@schlessera/brain-ui-sdk/protocol";
|
|
1
2
|
/**
|
|
2
3
|
* The model picker's contents, and which of them to show.
|
|
3
4
|
*
|
|
@@ -8,4 +9,18 @@
|
|
|
8
9
|
export declare function ModelsTab({ active }: {
|
|
9
10
|
active: boolean;
|
|
10
11
|
}): import("react").JSX.Element;
|
|
12
|
+
/**
|
|
13
|
+
* Request-ordering guard for optimistic commits: `begin()` claims a token
|
|
14
|
+
* and returns a predicate that holds only while no later request has begun.
|
|
15
|
+
* An older in-flight request must never write over a newer edit's state.
|
|
16
|
+
*/
|
|
17
|
+
export declare function createRequestGate(): {
|
|
18
|
+
begin: () => () => boolean;
|
|
19
|
+
};
|
|
20
|
+
/**
|
|
21
|
+
* The billing-override record PUT after changing one profile: every other
|
|
22
|
+
* profile keeps its stored override, the changed one is set — or, for "auto",
|
|
23
|
+
* REMOVED, never stored as a redundant explicit value.
|
|
24
|
+
*/
|
|
25
|
+
export declare function nextBillingOverrides(models: ModelCatalogEntry[], id: string, next: BillingMode | "auto"): Record<string, BillingMode>;
|
|
11
26
|
//# sourceMappingURL=models-tab.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"models-tab.d.ts","sourceRoot":"","sources":["../../../src/components/settings/models-tab.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"models-tab.d.ts","sourceRoot":"","sources":["../../../src/components/settings/models-tab.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,WAAW,EACX,iBAAiB,EAElB,MAAM,mCAAmC,CAAC;AAK3C;;;;;;GAMG;AACH,wBAAgB,SAAS,CAAC,EAAE,MAAM,EAAE,EAAE;IAAE,MAAM,EAAE,OAAO,CAAA;CAAE,+BAyMxD;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,IAAI;IAAE,KAAK,EAAE,MAAM,MAAM,OAAO,CAAA;CAAE,CAQlE;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,iBAAiB,EAAE,EAC3B,EAAE,EAAE,MAAM,EACV,IAAI,EAAE,WAAW,GAAG,MAAM,GACzB,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAO7B"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import { useEffect, useState } from "react";
|
|
2
|
+
import { useEffect, useRef, useState } from "react";
|
|
3
3
|
import { Eye, EyeOff, Loader2, RefreshCw } from "lucide-react";
|
|
4
4
|
import { api } from "../../lib/api-client.js";
|
|
5
5
|
import { useProviderStore } from "../../stores/provider-store.js";
|
|
@@ -17,6 +17,9 @@ export function ModelsTab({ active }) {
|
|
|
17
17
|
const [refreshing, setRefreshing] = useState(false);
|
|
18
18
|
const [error, setError] = useState(null);
|
|
19
19
|
const loadProviders = useProviderStore((s) => s.loadProviders);
|
|
20
|
+
const commitGate = useRef(createRequestGate());
|
|
21
|
+
/** Serializes full-record PUTs — see commitCatalog. */
|
|
22
|
+
const commitQueue = useRef(Promise.resolve());
|
|
20
23
|
useEffect(() => {
|
|
21
24
|
if (!active)
|
|
22
25
|
return;
|
|
@@ -42,31 +45,74 @@ export function ModelsTab({ active }) {
|
|
|
42
45
|
cancelled = true;
|
|
43
46
|
};
|
|
44
47
|
}, [active]);
|
|
48
|
+
/**
|
|
49
|
+
* Optimistic-update skeleton shared by the hidden toggle and the billing
|
|
50
|
+
* select: the change is the user's own click, so reflect it immediately,
|
|
51
|
+
* commit, then reload the composer picker's own roster copy (fetched once
|
|
52
|
+
* on mount, it would otherwise lag until a page reload). A failed write
|
|
53
|
+
* rolls back and surfaces the error.
|
|
54
|
+
*
|
|
55
|
+
* Ordered through `createRequestGate`: two rows edited within one
|
|
56
|
+
* round-trip interleave, and without the guard the FIRST response (or its
|
|
57
|
+
* failure rollback) lands last and silently overwrites the newer edit. A
|
|
58
|
+
* superseded response/rollback is dropped — the newer request's payload
|
|
59
|
+
* was built on top of this one's optimistic state, so it already carries
|
|
60
|
+
* this change (and its own catch surfaces any error that still matters).
|
|
61
|
+
*/
|
|
62
|
+
async function commitCatalog(optimistic, commit) {
|
|
63
|
+
const isCurrent = commitGate.current.begin();
|
|
64
|
+
const previous = catalog;
|
|
65
|
+
setCatalog(optimistic);
|
|
66
|
+
setError(null);
|
|
67
|
+
// The gate drops superseded RESPONSES; this queue serializes the WRITES.
|
|
68
|
+
// Both matter: the server stores full records, so two concurrent PUTs
|
|
69
|
+
// could land older-last and silently clobber the newer record server-side
|
|
70
|
+
// even while the client looked right. Each commit waits for the previous
|
|
71
|
+
// one to settle; payloads are built on optimistic state, so the newest
|
|
72
|
+
// write already carries every earlier edit.
|
|
73
|
+
const run = commitQueue.current.then(async () => {
|
|
74
|
+
try {
|
|
75
|
+
const confirmed = await commit();
|
|
76
|
+
if (isCurrent())
|
|
77
|
+
setCatalog(confirmed);
|
|
78
|
+
void loadProviders();
|
|
79
|
+
}
|
|
80
|
+
catch (err) {
|
|
81
|
+
if (isCurrent()) {
|
|
82
|
+
setCatalog(previous);
|
|
83
|
+
setError(err instanceof Error ? err.message : "Could not save");
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
});
|
|
87
|
+
commitQueue.current = run;
|
|
88
|
+
await run;
|
|
89
|
+
}
|
|
45
90
|
async function toggleHidden(entry) {
|
|
46
91
|
if (!catalog)
|
|
47
92
|
return;
|
|
48
|
-
const previous = catalog;
|
|
49
93
|
const hidden = catalog.models
|
|
50
94
|
.filter((model) => model.id === entry.id ? !entry.hidden : model.hidden)
|
|
51
95
|
.map((model) => model.id);
|
|
52
|
-
|
|
53
|
-
// and roll back if the write fails.
|
|
54
|
-
setCatalog({
|
|
96
|
+
await commitCatalog({
|
|
55
97
|
...catalog,
|
|
56
98
|
models: catalog.models.map((model) => model.id === entry.id ? { ...model, hidden: !model.hidden } : model),
|
|
57
|
-
});
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
99
|
+
}, () => api.setHiddenModels(hidden));
|
|
100
|
+
}
|
|
101
|
+
async function changeBilling(entry, next) {
|
|
102
|
+
if (!catalog)
|
|
103
|
+
return;
|
|
104
|
+
// What "auto" resolves to is only known server-side, so switching back to
|
|
105
|
+
// auto keeps the current resolved mode until the confirmed catalog
|
|
106
|
+
// corrects it a beat later.
|
|
107
|
+
await commitCatalog({
|
|
108
|
+
...catalog,
|
|
109
|
+
models: catalog.models.map((model) => {
|
|
110
|
+
if (model.id !== entry.id)
|
|
111
|
+
return model;
|
|
112
|
+
const { billingOverride: _cleared, ...base } = model;
|
|
113
|
+
return next === "auto" ? base : { ...base, billingOverride: next, billingMode: next };
|
|
114
|
+
}),
|
|
115
|
+
}, () => api.setBillingOverrides(nextBillingOverrides(catalog.models, entry.id, next)));
|
|
70
116
|
}
|
|
71
117
|
async function onRefresh() {
|
|
72
118
|
if (refreshing)
|
|
@@ -87,11 +133,44 @@ export function ModelsTab({ active }) {
|
|
|
87
133
|
}
|
|
88
134
|
}
|
|
89
135
|
const visibleCount = catalog?.models.filter((m) => !m.hidden).length ?? 0;
|
|
90
|
-
return (_jsxs("div", { className: "flex h-full flex-col", children: [_jsxs("div", { className: "flex-1 overflow-y-auto p-4", children: [_jsx("h3", { className: "text-xs font-medium uppercase tracking-wide text-muted-foreground", children: "Models" }), _jsx("p", { className: "mt-1 text-xs text-muted-foreground", children: "The list is read from the provider and refreshes on its own. Hide the ones you never pick \u2014 running sessions are unaffected." }), loading ? (_jsx("div", { className: "mt-6 flex justify-center", children: _jsx(Loader2, { className: "h-5 w-5 animate-spin text-muted-foreground" }) })) : (_jsxs("ul", { className: "mt-4 flex flex-col gap-2", children: [catalog?.models.map((entry) => (_jsx(ModelRow, { entry: entry, onToggle: () => toggleHidden(entry) }, entry.id))), catalog?.models.length === 0 && (_jsx("li", { className: "rounded-lg border border-dashed border-border-subtle p-4 text-center text-xs text-muted-foreground", children: "No models available." }))] })), error && (_jsx("p", { role: "alert", className: "mt-3 text-xs text-destructive", children: error })), catalog?.discovery.error && (_jsxs("p", { className: "mt-3 text-xs text-muted-foreground", children: ["Last refresh failed (", catalog.discovery.error, "). Showing the last known list."] })), catalog && !catalog.discovery.enabled && (_jsx("p", { className: "mt-3 text-xs text-muted-foreground", children: "Discovery is disabled (BRAIN_UI_MODEL_DISCOVERY). Only configured profiles are listed." }))] }), _jsxs("div", { className: "flex items-center justify-between gap-3 border-t border-border p-4", children: [_jsxs("span", { className: "text-[11px] text-muted-foreground", children: [visibleCount, " in picker \u00B7 ", formatRefreshed(catalog?.refreshedAt ?? null)] }), _jsxs("button", { onClick: onRefresh, disabled: refreshing, className: "flex items-center gap-2 rounded-lg border border-border-subtle bg-surface px-3 py-2 text-xs font-medium text-foreground transition-colors hover:border-primary hover:text-primary disabled:opacity-50", children: [_jsx(RefreshCw, { className: cn("h-3.5 w-3.5", refreshing && "animate-spin") }), "Refresh"] })] })] }));
|
|
136
|
+
return (_jsxs("div", { className: "flex h-full flex-col", children: [_jsxs("div", { className: "flex-1 overflow-y-auto p-4", children: [_jsx("h3", { className: "text-xs font-medium uppercase tracking-wide text-muted-foreground", children: "Models" }), _jsx("p", { className: "mt-1 text-xs text-muted-foreground", children: "The list is read from the provider and refreshes on its own. Hide the ones you never pick \u2014 running sessions are unaffected." }), loading ? (_jsx("div", { className: "mt-6 flex justify-center", children: _jsx(Loader2, { className: "h-5 w-5 animate-spin text-muted-foreground" }) })) : (_jsxs("ul", { className: "mt-4 flex flex-col gap-2", children: [catalog?.models.map((entry) => (_jsx(ModelRow, { entry: entry, onToggle: () => toggleHidden(entry), onBilling: (next) => changeBilling(entry, next) }, entry.id))), catalog?.models.length === 0 && (_jsx("li", { className: "rounded-lg border border-dashed border-border-subtle p-4 text-center text-xs text-muted-foreground", children: "No models available." }))] })), error && (_jsx("p", { role: "alert", className: "mt-3 text-xs text-destructive", children: error })), catalog?.discovery.error && (_jsxs("p", { className: "mt-3 text-xs text-muted-foreground", children: ["Last refresh failed (", catalog.discovery.error, "). Showing the last known list."] })), catalog && !catalog.discovery.enabled && (_jsx("p", { className: "mt-3 text-xs text-muted-foreground", children: "Discovery is disabled (BRAIN_UI_MODEL_DISCOVERY). Only configured profiles are listed." }))] }), _jsxs("div", { className: "flex items-center justify-between gap-3 border-t border-border p-4", children: [_jsxs("span", { className: "text-[11px] text-muted-foreground", children: [visibleCount, " in picker \u00B7 ", formatRefreshed(catalog?.refreshedAt ?? null)] }), _jsxs("button", { onClick: onRefresh, disabled: refreshing, className: "flex items-center gap-2 rounded-lg border border-border-subtle bg-surface px-3 py-2 text-xs font-medium text-foreground transition-colors hover:border-primary hover:text-primary disabled:opacity-50", children: [_jsx(RefreshCw, { className: cn("h-3.5 w-3.5", refreshing && "animate-spin") }), "Refresh"] })] })] }));
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Request-ordering guard for optimistic commits: `begin()` claims a token
|
|
140
|
+
* and returns a predicate that holds only while no later request has begun.
|
|
141
|
+
* An older in-flight request must never write over a newer edit's state.
|
|
142
|
+
*/
|
|
143
|
+
export function createRequestGate() {
|
|
144
|
+
let seq = 0;
|
|
145
|
+
return {
|
|
146
|
+
begin() {
|
|
147
|
+
const token = ++seq;
|
|
148
|
+
return () => seq === token;
|
|
149
|
+
},
|
|
150
|
+
};
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* The billing-override record PUT after changing one profile: every other
|
|
154
|
+
* profile keeps its stored override, the changed one is set — or, for "auto",
|
|
155
|
+
* REMOVED, never stored as a redundant explicit value.
|
|
156
|
+
*/
|
|
157
|
+
export function nextBillingOverrides(models, id, next) {
|
|
158
|
+
const billing = {};
|
|
159
|
+
for (const model of models) {
|
|
160
|
+
const value = model.id === id ? (next === "auto" ? undefined : next) : model.billingOverride;
|
|
161
|
+
if (value)
|
|
162
|
+
billing[model.id] = value;
|
|
163
|
+
}
|
|
164
|
+
return billing;
|
|
165
|
+
}
|
|
166
|
+
function billingLabel(mode) {
|
|
167
|
+
return mode === "api" ? "API" : "Subscription";
|
|
91
168
|
}
|
|
92
|
-
function ModelRow({ entry, onToggle, }) {
|
|
169
|
+
function ModelRow({ entry, onToggle, onBilling, }) {
|
|
93
170
|
const Icon = entry.hidden ? EyeOff : Eye;
|
|
94
|
-
return (_jsxs("li", { className: cn("flex items-center gap-3 rounded-lg border border-border-subtle bg-surface p-3", entry.hidden && "opacity-50"), children: [_jsxs("div", { className: "min-w-0 flex-1", children: [_jsx("p", { className: "truncate text-sm text-foreground", children: entry.label }), _jsxs("p", { className: "truncate text-[11px] text-muted-foreground", children: [entry.id, entry.contextWindow ? ` · ${formatTokens(entry.contextWindow)}` : "", entry.source === "declared" ? " · configured" : ""] })] }),
|
|
171
|
+
return (_jsxs("li", { className: cn("flex items-center gap-3 rounded-lg border border-border-subtle bg-surface p-3", entry.hidden && "opacity-50"), children: [_jsxs("div", { className: "min-w-0 flex-1", children: [_jsx("p", { className: "truncate text-sm text-foreground", children: entry.label }), _jsxs("p", { className: "truncate text-[11px] text-muted-foreground", children: [entry.id, entry.contextWindow ? ` · ${formatTokens(entry.contextWindow)}` : "", entry.source === "declared" ? " · configured" : ""] })] }), _jsxs("select", { value: entry.billingOverride ?? "auto", onChange: (e) => onBilling(e.target.value), "aria-label": `Billing for ${entry.label}`, className: "h-8 shrink-0 rounded-lg border border-border-subtle bg-surface px-1.5 text-[11px] text-muted-foreground transition-colors hover:border-primary hover:text-foreground", children: [_jsx("option", { value: "auto", children: !entry.billingOverride && entry.billingMode
|
|
172
|
+
? `Auto (${billingLabel(entry.billingMode).toLowerCase()})`
|
|
173
|
+
: "Auto" }), _jsx("option", { value: "subscription", children: "Subscription" }), _jsx("option", { value: "api", children: "API" })] }), _jsx("button", { onClick: onToggle, title: entry.hidden ? "Show in picker" : "Hide from picker", "aria-pressed": !entry.hidden, className: "flex h-8 w-8 shrink-0 items-center justify-center rounded-lg text-muted-foreground transition-colors hover:bg-surface-raised hover:text-foreground", children: _jsx(Icon, { className: "h-4 w-4" }) })] }));
|
|
95
174
|
}
|
|
96
175
|
function formatTokens(tokens) {
|
|
97
176
|
if (tokens >= 1_000_000)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"models-tab.js","sourceRoot":"","sources":["../../../src/components/settings/models-tab.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"models-tab.js","sourceRoot":"","sources":["../../../src/components/settings/models-tab.tsx"],"names":[],"mappings":"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"}
|
package/dist/lib/api-client.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { VoiceKeytermsResponse, VoiceTokenResponse, VoiceSessionResponse, PronunciationOverride, ProviderInfo, PasskeySummary, ModelCatalogResponse, ActivityRunSummary, ActivityRunDetail, ActivityRollups, ActivityDigest, ActivityIntent } from "@schlessera/brain-ui-sdk/protocol";
|
|
1
|
+
import type { VoiceKeytermsResponse, VoiceTokenResponse, VoiceSessionResponse, PronunciationOverride, ProviderInfo, PasskeySummary, BillingMode, ModelCatalogResponse, ActivityRunSummary, ActivityRunDetail, ActivityRollups, ActivityDigest, ActivityIntent } from "@schlessera/brain-ui-sdk/protocol";
|
|
2
2
|
export type { ActivityRunSummary, ActivityRunDetail, ActivityRunRollup, ActivityAggregate, ActivityRollups, ActivityDigest, ActivityIntent, } from "@schlessera/brain-ui-sdk/protocol";
|
|
3
3
|
import type { AuthenticationResponseJSON, RegistrationResponseJSON, PublicKeyCredentialCreationOptionsJSON, PublicKeyCredentialRequestOptionsJSON } from "@simplewebauthn/browser";
|
|
4
4
|
/**
|
|
@@ -19,6 +19,22 @@ export interface BrainSearchResponse {
|
|
|
19
19
|
/** Degraded-mode notices, e.g. vector search unavailable so results are FTS-only. */
|
|
20
20
|
warnings: string[];
|
|
21
21
|
}
|
|
22
|
+
/**
|
|
23
|
+
* Pricing-table freshness (GET /api/models/pricing) — mirrors the server
|
|
24
|
+
* pricing service's state. The route is additive: an older server 404s, and
|
|
25
|
+
* callers treat the rejection as "no freshness signal, show nothing".
|
|
26
|
+
*/
|
|
27
|
+
export interface PricingState {
|
|
28
|
+
enabled: boolean;
|
|
29
|
+
/** When a refresh last succeeded (either source); null when none ever has. */
|
|
30
|
+
fetchedAt: number | null;
|
|
31
|
+
/** The current table is older than the TTL (or was never fetched). */
|
|
32
|
+
stale: boolean;
|
|
33
|
+
/** What the table is served from: remote data (cache included) or the bundled snapshot. */
|
|
34
|
+
source: "remote" | "snapshot";
|
|
35
|
+
/** Last refresh failure, if the current table is served despite one. */
|
|
36
|
+
error?: string;
|
|
37
|
+
}
|
|
22
38
|
/** Backend id + capability flags the client renders behavior from. */
|
|
23
39
|
export interface BackendInfo {
|
|
24
40
|
id: string;
|
|
@@ -99,6 +115,10 @@ export declare const api: {
|
|
|
99
115
|
models: () => Promise<ModelCatalogResponse>;
|
|
100
116
|
/** Replace the hidden set (full list, not a delta); returns the new catalog. */
|
|
101
117
|
setHiddenModels: (hidden: string[]) => Promise<ModelCatalogResponse>;
|
|
118
|
+
/** Replace the billing-override record (full record, not a delta); returns the new catalog. */
|
|
119
|
+
setBillingOverrides: (billing: Record<string, BillingMode>) => Promise<ModelCatalogResponse>;
|
|
120
|
+
/** Pricing-table freshness for the Activity staleness indicator (see `PricingState`). */
|
|
121
|
+
pricingState: () => Promise<PricingState>;
|
|
102
122
|
/** Force a discovery refresh, bypassing the TTL. */
|
|
103
123
|
refreshModels: () => Promise<ModelCatalogResponse>;
|
|
104
124
|
/** Password-mode login. Resolves on success; throws the server error otherwise. */
|
|
@@ -142,7 +162,14 @@ export declare const api: {
|
|
|
142
162
|
live: ActivityRunSummary[];
|
|
143
163
|
history: ActivityRunSummary[];
|
|
144
164
|
}>;
|
|
145
|
-
|
|
165
|
+
/**
|
|
166
|
+
* One run's detail. Payload bodies (tool_input/tool_output events) are
|
|
167
|
+
* excluded by default — the session-history fetch only needs span timings —
|
|
168
|
+
* and opted into by the drill-in views via `includePayloads`.
|
|
169
|
+
*/
|
|
170
|
+
activityRun: (runId: string, opts?: {
|
|
171
|
+
includePayloads?: boolean;
|
|
172
|
+
}) => Promise<ActivityRunDetail>;
|
|
146
173
|
activityRollups: (days?: number) => Promise<ActivityRollups>;
|
|
147
174
|
activityInbox: () => Promise<{
|
|
148
175
|
intents: ActivityIntent[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api-client.d.ts","sourceRoot":"","sources":["../../src/lib/api-client.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"api-client.d.ts","sourceRoot":"","sources":["../../src/lib/api-client.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/api-client.js
CHANGED
|
@@ -52,6 +52,13 @@ export const api = {
|
|
|
52
52
|
method: "PUT",
|
|
53
53
|
body: JSON.stringify({ hidden }),
|
|
54
54
|
}),
|
|
55
|
+
/** Replace the billing-override record (full record, not a delta); returns the new catalog. */
|
|
56
|
+
setBillingOverrides: (billing) => fetchJson("/models/billing", {
|
|
57
|
+
method: "PUT",
|
|
58
|
+
body: JSON.stringify({ billing }),
|
|
59
|
+
}),
|
|
60
|
+
/** Pricing-table freshness for the Activity staleness indicator (see `PricingState`). */
|
|
61
|
+
pricingState: () => fetchJson("/models/pricing"),
|
|
55
62
|
/** Force a discovery refresh, bypassing the TTL. */
|
|
56
63
|
refreshModels: () => fetchJson("/models/refresh", { method: "POST" }),
|
|
57
64
|
/** Password-mode login. Resolves on success; throws the server error otherwise. */
|
|
@@ -95,7 +102,13 @@ export const api = {
|
|
|
95
102
|
]
|
|
96
103
|
.filter(Boolean)
|
|
97
104
|
.join("&")),
|
|
98
|
-
|
|
105
|
+
/**
|
|
106
|
+
* One run's detail. Payload bodies (tool_input/tool_output events) are
|
|
107
|
+
* excluded by default — the session-history fetch only needs span timings —
|
|
108
|
+
* and opted into by the drill-in views via `includePayloads`.
|
|
109
|
+
*/
|
|
110
|
+
activityRun: (runId, opts) => fetchJson(`/activity/runs/${encodeURIComponent(runId)}` +
|
|
111
|
+
(opts?.includePayloads ? "?include=payloads" : "")),
|
|
99
112
|
activityRollups: (days) => fetchJson(`/activity/rollups${days ? `?days=${days}` : ""}`),
|
|
100
113
|
activityInbox: () => fetchJson("/activity/inbox"),
|
|
101
114
|
activityInboxAck: (id) => fetchJson(`/activity/inbox/${id}/ack`, { method: "POST" }),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api-client.js","sourceRoot":"","sources":["../../src/lib/api-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"api-client.js","sourceRoot":"","sources":["../../src/lib/api-client.ts"],"names":[],"mappings":"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"}
|