@schlessera/brain-ui-react 0.34.0 → 0.35.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/README.md +12 -0
- package/dist/components/activity/activity-page.d.ts.map +1 -1
- package/dist/components/activity/activity-page.js +8 -149
- package/dist/components/activity/activity-page.js.map +1 -1
- package/dist/components/activity/activity-rollups.d.ts +5 -0
- package/dist/components/activity/activity-rollups.d.ts.map +1 -0
- package/dist/components/activity/activity-rollups.js +39 -0
- package/dist/components/activity/activity-rollups.js.map +1 -0
- package/dist/components/activity/activity-run-detail.d.ts +11 -0
- package/dist/components/activity/activity-run-detail.d.ts.map +1 -0
- package/dist/components/activity/activity-run-detail.js +111 -0
- package/dist/components/activity/activity-run-detail.js.map +1 -0
- package/dist/components/activity/activity-run-list.d.ts +15 -0
- package/dist/components/activity/activity-run-list.d.ts.map +1 -0
- package/dist/components/activity/activity-run-list.js +25 -0
- package/dist/components/activity/activity-run-list.js.map +1 -0
- package/dist/components/chat/brain-markdown-code.d.ts +4 -0
- package/dist/components/chat/brain-markdown-code.d.ts.map +1 -0
- package/dist/components/chat/brain-markdown-code.js +47 -0
- package/dist/components/chat/brain-markdown-code.js.map +1 -0
- package/dist/components/chat/brain-markdown-entities.d.ts +14 -0
- package/dist/components/chat/brain-markdown-entities.d.ts.map +1 -0
- package/dist/components/chat/brain-markdown-entities.js +93 -0
- package/dist/components/chat/brain-markdown-entities.js.map +1 -0
- package/dist/components/chat/brain-markdown-links.d.ts +36 -0
- package/dist/components/chat/brain-markdown-links.d.ts.map +1 -0
- package/dist/components/chat/brain-markdown-links.js +176 -0
- package/dist/components/chat/brain-markdown-links.js.map +1 -0
- package/dist/components/chat/brain-markdown-share.d.ts +15 -0
- package/dist/components/chat/brain-markdown-share.d.ts.map +1 -0
- package/dist/components/chat/brain-markdown-share.js +40 -0
- package/dist/components/chat/brain-markdown-share.js.map +1 -0
- package/dist/components/chat/brain-markdown.d.ts +1 -34
- package/dist/components/chat/brain-markdown.d.ts.map +1 -1
- package/dist/components/chat/brain-markdown.js +9 -402
- package/dist/components/chat/brain-markdown.js.map +1 -1
- package/dist/components/chat/composer.d.ts.map +1 -1
- package/dist/components/chat/composer.js +14 -1
- package/dist/components/chat/composer.js.map +1 -1
- package/dist/components/chat/session-drawer.d.ts.map +1 -1
- package/dist/components/chat/session-drawer.js +25 -10
- package/dist/components/chat/session-drawer.js.map +1 -1
- package/dist/components/chat/tool-views.d.ts +2 -2
- package/dist/components/chat/tool-views.d.ts.map +1 -1
- package/dist/components/chat/tool-views.js +2 -16
- package/dist/components/chat/tool-views.js.map +1 -1
- package/dist/components/chat/use-markdown-highlight.d.ts +12 -0
- package/dist/components/chat/use-markdown-highlight.d.ts.map +1 -0
- package/dist/components/chat/use-markdown-highlight.js +56 -0
- package/dist/components/chat/use-markdown-highlight.js.map +1 -0
- package/dist/components/connectivity/connection-gate.d.ts.map +1 -1
- package/dist/components/connectivity/connection-gate.js +94 -8
- package/dist/components/connectivity/connection-gate.js.map +1 -1
- package/dist/components/connectivity/connection-state.d.ts +12 -0
- package/dist/components/connectivity/connection-state.d.ts.map +1 -0
- package/dist/components/connectivity/connection-state.js +23 -0
- package/dist/components/connectivity/connection-state.js.map +1 -0
- package/dist/components/graph/graph-canvas-lazy.d.ts +2 -0
- package/dist/components/graph/graph-canvas-lazy.d.ts.map +1 -0
- package/dist/components/graph/graph-canvas-lazy.js +4 -0
- package/dist/components/graph/graph-canvas-lazy.js.map +1 -0
- package/dist/components/graph/graph-controls.js +4 -1
- package/dist/components/graph/graph-controls.js.map +1 -1
- package/dist/components/graph/graph-maintenance.d.ts +8 -0
- package/dist/components/graph/graph-maintenance.d.ts.map +1 -0
- package/dist/components/graph/graph-maintenance.js +115 -0
- package/dist/components/graph/graph-maintenance.js.map +1 -0
- package/dist/components/graph/graph-page.d.ts.map +1 -1
- package/dist/components/graph/graph-page.js +11 -306
- package/dist/components/graph/graph-page.js.map +1 -1
- package/dist/components/graph/graph-scene.d.ts +8 -0
- package/dist/components/graph/graph-scene.d.ts.map +1 -0
- package/dist/components/graph/graph-scene.js +208 -0
- package/dist/components/graph/graph-scene.js.map +1 -0
- package/dist/components/graph/graph-spinner.d.ts +2 -0
- package/dist/components/graph/graph-spinner.d.ts.map +1 -0
- package/dist/components/graph/graph-spinner.js +6 -0
- package/dist/components/graph/graph-spinner.js.map +1 -0
- package/dist/components/layout/app-shell.d.ts.map +1 -1
- package/dist/components/layout/app-shell.js +2 -1
- package/dist/components/layout/app-shell.js.map +1 -1
- package/dist/components/quick-actions/add-modal.d.ts.map +1 -1
- package/dist/components/quick-actions/add-modal.js +47 -4
- package/dist/components/quick-actions/add-modal.js.map +1 -1
- package/dist/components/quick-actions/search-modal.d.ts.map +1 -1
- package/dist/components/quick-actions/search-modal.js +46 -18
- package/dist/components/quick-actions/search-modal.js.map +1 -1
- package/dist/components/quick-actions/streaming-modal.d.ts.map +1 -1
- package/dist/components/quick-actions/streaming-modal.js +4 -1
- package/dist/components/quick-actions/streaming-modal.js.map +1 -1
- package/dist/components/settings/devices-agents-tab.d.ts +5 -0
- package/dist/components/settings/devices-agents-tab.d.ts.map +1 -0
- package/dist/components/settings/devices-agents-tab.js +96 -0
- package/dist/components/settings/devices-agents-tab.js.map +1 -0
- package/dist/components/settings/one-time-agent-credential.d.ts +3 -0
- package/dist/components/settings/one-time-agent-credential.d.ts.map +1 -0
- package/dist/components/settings/one-time-agent-credential.js +55 -0
- package/dist/components/settings/one-time-agent-credential.js.map +1 -0
- package/dist/components/settings/settings-panel.d.ts.map +1 -1
- package/dist/components/settings/settings-panel.js +16 -3
- package/dist/components/settings/settings-panel.js.map +1 -1
- package/dist/hooks/use-vpn-status.d.ts +6 -1
- package/dist/hooks/use-vpn-status.d.ts.map +1 -1
- package/dist/hooks/use-vpn-status.js +67 -30
- package/dist/hooks/use-vpn-status.js.map +1 -1
- package/dist/hooks/use-websocket.d.ts +3 -2
- package/dist/hooks/use-websocket.d.ts.map +1 -1
- package/dist/hooks/use-websocket.js +65 -254
- package/dist/hooks/use-websocket.js.map +1 -1
- package/dist/hooks/websocket-handlers/activity.d.ts +5 -0
- package/dist/hooks/websocket-handlers/activity.d.ts.map +1 -0
- package/dist/hooks/websocket-handlers/activity.js +10 -0
- package/dist/hooks/websocket-handlers/activity.js.map +1 -0
- package/dist/hooks/websocket-handlers/chat.d.ts +17 -0
- package/dist/hooks/websocket-handlers/chat.d.ts.map +1 -0
- package/dist/hooks/websocket-handlers/chat.js +175 -0
- package/dist/hooks/websocket-handlers/chat.js.map +1 -0
- package/dist/hooks/websocket-handlers/connection.d.ts +6 -0
- package/dist/hooks/websocket-handlers/connection.d.ts.map +1 -0
- package/dist/hooks/websocket-handlers/connection.js +27 -0
- package/dist/hooks/websocket-handlers/connection.js.map +1 -0
- package/dist/hooks/websocket-handlers/index.d.ts +4 -0
- package/dist/hooks/websocket-handlers/index.d.ts.map +1 -0
- package/dist/hooks/websocket-handlers/index.js +19 -0
- package/dist/hooks/websocket-handlers/index.js.map +1 -0
- package/dist/hooks/websocket-handlers/mask.d.ts +4 -0
- package/dist/hooks/websocket-handlers/mask.d.ts.map +1 -0
- package/dist/hooks/websocket-handlers/mask.js +14 -0
- package/dist/hooks/websocket-handlers/mask.js.map +1 -0
- package/dist/hooks/websocket-handlers/provider.d.ts +4 -0
- package/dist/hooks/websocket-handlers/provider.d.ts.map +1 -0
- package/dist/hooks/websocket-handlers/provider.js +31 -0
- package/dist/hooks/websocket-handlers/provider.js.map +1 -0
- package/dist/hooks/websocket-handlers/types.d.ts +24 -0
- package/dist/hooks/websocket-handlers/types.d.ts.map +1 -0
- package/dist/hooks/websocket-handlers/types.js +2 -0
- package/dist/hooks/websocket-handlers/types.js.map +1 -0
- package/dist/lib/api-client.d.ts +32 -0
- package/dist/lib/api-client.d.ts.map +1 -1
- package/dist/lib/api-client.js +11 -0
- package/dist/lib/api-client.js.map +1 -1
- package/dist/lib/format-time.d.ts +3 -0
- package/dist/lib/format-time.d.ts.map +1 -0
- package/dist/lib/format-time.js +25 -0
- package/dist/lib/format-time.js.map +1 -0
- package/dist/lib/push-registration.d.ts +7 -0
- package/dist/lib/push-registration.d.ts.map +1 -0
- package/dist/lib/push-registration.js +26 -0
- package/dist/lib/push-registration.js.map +1 -0
- package/dist/stores/activity-store-helpers.d.ts +50 -0
- package/dist/stores/activity-store-helpers.d.ts.map +1 -0
- package/dist/stores/activity-store-helpers.js +143 -0
- package/dist/stores/activity-store-helpers.js.map +1 -0
- package/dist/stores/activity-store-types.d.ts +48 -0
- package/dist/stores/activity-store-types.d.ts.map +1 -0
- package/dist/stores/activity-store-types.js +2 -0
- package/dist/stores/activity-store-types.js.map +1 -0
- package/dist/stores/activity-store.d.ts +2 -78
- package/dist/stores/activity-store.d.ts.map +1 -1
- package/dist/stores/activity-store.js +22 -142
- package/dist/stores/activity-store.js.map +1 -1
- package/dist/stores/connection-store.d.ts +14 -2
- package/dist/stores/connection-store.d.ts.map +1 -1
- package/dist/stores/connection-store.js +17 -0
- package/dist/stores/connection-store.js.map +1 -1
- package/dist/stores/file-store.d.ts.map +1 -1
- package/dist/stores/file-store.js +54 -18
- package/dist/stores/file-store.js.map +1 -1
- package/dist/stores/principal-store.d.ts +16 -0
- package/dist/stores/principal-store.d.ts.map +1 -0
- package/dist/stores/principal-store.js +29 -0
- package/dist/stores/principal-store.js.map +1 -0
- package/dist/stores/ui-store.d.ts +1 -1
- package/dist/stores/ui-store.d.ts.map +1 -1
- package/dist/styles.css +1 -1
- package/package.json +2 -2
- package/src/components/activity/activity-page.tsx +6 -477
- package/src/components/activity/activity-rollups.tsx +94 -0
- package/src/components/activity/activity-run-detail.tsx +301 -0
- package/src/components/activity/activity-run-list.tsx +97 -0
- package/src/components/chat/brain-markdown-code.tsx +60 -0
- package/src/components/chat/brain-markdown-entities.tsx +116 -0
- package/src/components/chat/brain-markdown-links.tsx +247 -0
- package/src/components/chat/brain-markdown-share.ts +47 -0
- package/src/components/chat/brain-markdown.tsx +27 -535
- package/src/components/chat/composer.tsx +14 -1
- package/src/components/chat/session-drawer.tsx +29 -10
- package/src/components/chat/tool-views.tsx +2 -13
- package/src/components/chat/use-markdown-highlight.ts +63 -0
- package/src/components/connectivity/connection-gate.tsx +128 -14
- package/src/components/connectivity/connection-state.ts +37 -0
- package/src/components/graph/graph-canvas-lazy.tsx +4 -0
- package/src/components/graph/graph-controls.tsx +4 -1
- package/src/components/graph/graph-maintenance.tsx +304 -0
- package/src/components/graph/graph-page.tsx +11 -840
- package/src/components/graph/graph-scene.tsx +548 -0
- package/src/components/graph/graph-spinner.tsx +9 -0
- package/src/components/layout/app-shell.tsx +2 -0
- package/src/components/quick-actions/add-modal.tsx +49 -4
- package/src/components/quick-actions/search-modal.tsx +46 -18
- package/src/components/quick-actions/streaming-modal.tsx +3 -1
- package/src/components/settings/devices-agents-tab.tsx +231 -0
- package/src/components/settings/one-time-agent-credential.tsx +131 -0
- package/src/components/settings/settings-panel.tsx +20 -5
- package/src/hooks/use-vpn-status.ts +71 -31
- package/src/hooks/use-websocket.ts +74 -275
- package/src/hooks/websocket-handlers/activity.ts +13 -0
- package/src/hooks/websocket-handlers/chat.ts +210 -0
- package/src/hooks/websocket-handlers/connection.ts +30 -0
- package/src/hooks/websocket-handlers/index.ts +59 -0
- package/src/hooks/websocket-handlers/mask.ts +17 -0
- package/src/hooks/websocket-handlers/provider.ts +35 -0
- package/src/hooks/websocket-handlers/types.ts +27 -0
- package/src/lib/api-client.ts +40 -1
- package/src/lib/format-time.ts +20 -0
- package/src/lib/push-registration.ts +29 -0
- package/src/stores/activity-store-helpers.ts +164 -0
- package/src/stores/activity-store-types.ts +55 -0
- package/src/stores/activity-store.ts +21 -217
- package/src/stores/connection-store.ts +33 -2
- package/src/stores/file-store.ts +42 -12
- package/src/stores/principal-store.ts +38 -0
- package/src/stores/ui-store.ts +1 -1
|
@@ -15,18 +15,43 @@ const LIMIT = 25;
|
|
|
15
15
|
export function SearchPanel({ open, onClose, }) {
|
|
16
16
|
const [query, setQuery] = useState("");
|
|
17
17
|
const [state, setState] = useState("idle");
|
|
18
|
+
const [resultQuery, setResultQuery] = useState("");
|
|
18
19
|
const [results, setResults] = useState([]);
|
|
19
20
|
const [warnings, setWarnings] = useState([]);
|
|
20
21
|
const [error, setError] = useState("");
|
|
21
22
|
const [selected, setSelected] = useState(0);
|
|
22
23
|
const inputRef = useRef(null);
|
|
23
24
|
const listRef = useRef(null);
|
|
25
|
+
const debounceRef = useRef(null);
|
|
24
26
|
const controllerRef = useRef(null);
|
|
25
27
|
const openFile = useFileStore((s) => s.openFile);
|
|
26
28
|
const setFilePanelOpen = useUIStore((s) => s.setFilePanelOpen);
|
|
27
29
|
const trimmed = query.trim();
|
|
28
|
-
const
|
|
30
|
+
const currentResults = resultQuery === trimmed ? results : [];
|
|
31
|
+
const cancelSearch = useCallback(() => {
|
|
32
|
+
if (debounceRef.current !== null)
|
|
33
|
+
clearTimeout(debounceRef.current);
|
|
34
|
+
debounceRef.current = null;
|
|
29
35
|
controllerRef.current?.abort();
|
|
36
|
+
controllerRef.current = null;
|
|
37
|
+
}, []);
|
|
38
|
+
function changeQuery(value) {
|
|
39
|
+
if (value.trim() === trimmed) {
|
|
40
|
+
setQuery(value);
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
// Invalidate before the debounce, including completions already queued.
|
|
44
|
+
cancelSearch();
|
|
45
|
+
setQuery(value);
|
|
46
|
+
setResultQuery("");
|
|
47
|
+
setResults([]);
|
|
48
|
+
setWarnings([]);
|
|
49
|
+
setError("");
|
|
50
|
+
setSelected(0);
|
|
51
|
+
setState("idle");
|
|
52
|
+
}
|
|
53
|
+
const runSearch = useCallback(async (q) => {
|
|
54
|
+
cancelSearch();
|
|
30
55
|
const controller = new AbortController();
|
|
31
56
|
controllerRef.current = controller;
|
|
32
57
|
setState("loading");
|
|
@@ -37,6 +62,7 @@ export function SearchPanel({ open, onClose, }) {
|
|
|
37
62
|
});
|
|
38
63
|
if (controller.signal.aborted)
|
|
39
64
|
return;
|
|
65
|
+
setResultQuery(q);
|
|
40
66
|
setResults(res.results);
|
|
41
67
|
setWarnings(res.warnings ?? []);
|
|
42
68
|
setSelected(0);
|
|
@@ -54,16 +80,16 @@ export function SearchPanel({ open, onClose, }) {
|
|
|
54
80
|
if (controllerRef.current === controller)
|
|
55
81
|
controllerRef.current = null;
|
|
56
82
|
}
|
|
57
|
-
}, []);
|
|
83
|
+
}, [cancelSearch]);
|
|
58
84
|
// Fresh panel every time it opens: stale results from a previous query would
|
|
59
85
|
// otherwise flash before the first search lands.
|
|
60
86
|
useEffect(() => {
|
|
61
87
|
if (!open) {
|
|
62
|
-
|
|
63
|
-
controllerRef.current = null;
|
|
88
|
+
cancelSearch();
|
|
64
89
|
return;
|
|
65
90
|
}
|
|
66
91
|
setQuery("");
|
|
92
|
+
setResultQuery("");
|
|
67
93
|
setResults([]);
|
|
68
94
|
setWarnings([]);
|
|
69
95
|
setError("");
|
|
@@ -72,37 +98,39 @@ export function SearchPanel({ open, onClose, }) {
|
|
|
72
98
|
// Focus after the slide-in starts; focusing mid-transform fights the
|
|
73
99
|
// mobile keyboard on some browsers.
|
|
74
100
|
const t = setTimeout(() => inputRef.current?.focus(), 120);
|
|
75
|
-
return () => clearTimeout(t);
|
|
76
|
-
}, [open]);
|
|
101
|
+
return () => { clearTimeout(t); cancelSearch(); };
|
|
102
|
+
}, [open, cancelSearch]);
|
|
77
103
|
// Debounced search on typing.
|
|
78
104
|
useEffect(() => {
|
|
79
105
|
if (!open)
|
|
80
106
|
return;
|
|
81
107
|
if (trimmed.length < MIN_QUERY) {
|
|
82
|
-
|
|
83
|
-
controllerRef.current = null;
|
|
108
|
+
cancelSearch();
|
|
84
109
|
setResults([]);
|
|
85
110
|
setWarnings([]);
|
|
86
111
|
setState("idle");
|
|
87
112
|
return;
|
|
88
113
|
}
|
|
89
|
-
|
|
90
|
-
return
|
|
91
|
-
}, [open, trimmed, runSearch]);
|
|
114
|
+
debounceRef.current = setTimeout(() => void runSearch(trimmed), DEBOUNCE_MS);
|
|
115
|
+
return cancelSearch;
|
|
116
|
+
}, [open, trimmed, runSearch, cancelSearch]);
|
|
92
117
|
function handleOpenResult(hit) {
|
|
93
118
|
// The file panel takes the same right-hand slot, so hand the screen over
|
|
94
119
|
// rather than stacking two sheets.
|
|
120
|
+
if (resultQuery !== trimmed || state !== "done")
|
|
121
|
+
return;
|
|
122
|
+
cancelSearch();
|
|
95
123
|
onClose();
|
|
96
124
|
setFilePanelOpen(true);
|
|
97
125
|
void openFile(hit.path);
|
|
98
126
|
}
|
|
99
127
|
function handleKeyDown(e) {
|
|
100
128
|
if (e.key === "ArrowDown" || e.key === "ArrowUp") {
|
|
101
|
-
if (
|
|
129
|
+
if (currentResults.length === 0)
|
|
102
130
|
return;
|
|
103
131
|
e.preventDefault();
|
|
104
132
|
const delta = e.key === "ArrowDown" ? 1 : -1;
|
|
105
|
-
const next = (selected + delta +
|
|
133
|
+
const next = (selected + delta + currentResults.length) % currentResults.length;
|
|
106
134
|
setSelected(next);
|
|
107
135
|
listRef.current
|
|
108
136
|
?.querySelectorAll("[data-result]")[next]?.scrollIntoView({ block: "nearest" });
|
|
@@ -110,18 +138,18 @@ export function SearchPanel({ open, onClose, }) {
|
|
|
110
138
|
}
|
|
111
139
|
if (e.key === "Enter") {
|
|
112
140
|
e.preventDefault();
|
|
113
|
-
const hit =
|
|
141
|
+
const hit = currentResults[selected];
|
|
114
142
|
if (hit)
|
|
115
143
|
handleOpenResult(hit);
|
|
116
144
|
// Enter with nothing selected jumps the debounce.
|
|
117
|
-
else if (trimmed.length >= MIN_QUERY)
|
|
145
|
+
else if (trimmed.length >= MIN_QUERY && state !== "loading")
|
|
118
146
|
void runSearch(trimmed);
|
|
119
147
|
}
|
|
120
148
|
}
|
|
121
|
-
return (_jsx(SlidePanel, { open: open, onClose: onClose, title: "Search", wide: true, children: _jsxs("div", { className: "flex h-full flex-col", children: [_jsx("div", { className: "border-b border-border px-5 py-3", children: _jsxs("div", { className: "flex items-center gap-2 rounded-lg border border-border bg-surface-raised px-3 py-2 focus-within:border-primary/40", children: [_jsx(Search, { className: "h-4 w-4 shrink-0 text-muted-foreground" }), _jsx("input", { ref: inputRef, value: query, onChange: (e) =>
|
|
122
|
-
|
|
149
|
+
return (_jsx(SlidePanel, { open: open, onClose: onClose, title: "Search", wide: true, children: _jsxs("div", { className: "flex h-full flex-col", children: [_jsx("div", { className: "border-b border-border px-5 py-3", children: _jsxs("div", { className: "flex items-center gap-2 rounded-lg border border-border bg-surface-raised px-3 py-2 focus-within:border-primary/40", children: [_jsx(Search, { className: "h-4 w-4 shrink-0 text-muted-foreground" }), _jsx("input", { ref: inputRef, value: query, onChange: (e) => changeQuery(e.target.value), onKeyDown: handleKeyDown, placeholder: "Search your brain...", className: "min-w-0 flex-1 bg-transparent text-sm text-foreground outline-none placeholder:text-muted-foreground", autoComplete: "off", autoCorrect: "off", spellCheck: false }), state === "loading" && (_jsx(Loader2, { className: "h-4 w-4 shrink-0 animate-spin text-primary" })), query && state !== "loading" && (_jsx("button", { onClick: () => {
|
|
150
|
+
changeQuery("");
|
|
123
151
|
inputRef.current?.focus();
|
|
124
|
-
}, className: "shrink-0 rounded p-0.5 text-muted-foreground transition-colors hover:text-foreground", title: "Clear", children: _jsx(X, { className: "h-3.5 w-3.5" }) }))] }) }), warnings.length > 0 && (_jsxs("div", { className: "flex items-start gap-2 border-b border-border bg-surface-raised/40 px-5 py-2", children: [_jsx(AlertTriangle, { className: "mt-0.5 h-3.5 w-3.5 shrink-0 text-muted-foreground" }), _jsx("div", { className: "text-[11px] leading-relaxed text-muted-foreground", children: warnings.map((w, i) => (_jsx("div", { children: w }, i))) })] })), _jsx("div", { ref: listRef, className: "flex-1 overflow-y-auto", children: state === "error" ? (_jsx(Placeholder, { children: error })) : trimmed.length < MIN_QUERY ? (_jsx(Placeholder, { children: _jsxs("span", { children: ["Type at least ", MIN_QUERY, " characters. ", _jsx(Kbd, { children: "\u2191" }), " ", _jsx(Kbd, { children: "\u2193" }), " to pick, ", _jsx(Kbd, { children: "\u21B5" }), " to open."] }) })) : state === "done" && results.length === 0 ? (_jsxs(Placeholder, { children: ["No results for \u201C", trimmed, "\u201D."] })) : (_jsx("div", { className: "divide-y divide-border/40", children:
|
|
152
|
+
}, className: "shrink-0 rounded p-0.5 text-muted-foreground transition-colors hover:text-foreground", title: "Clear", children: _jsx(X, { className: "h-3.5 w-3.5" }) }))] }) }), warnings.length > 0 && (_jsxs("div", { className: "flex items-start gap-2 border-b border-border bg-surface-raised/40 px-5 py-2", children: [_jsx(AlertTriangle, { className: "mt-0.5 h-3.5 w-3.5 shrink-0 text-muted-foreground" }), _jsx("div", { className: "text-[11px] leading-relaxed text-muted-foreground", children: warnings.map((w, i) => (_jsx("div", { children: w }, i))) })] })), _jsx("div", { ref: listRef, className: "flex-1 overflow-y-auto", children: state === "error" ? (_jsx(Placeholder, { children: error })) : trimmed.length < MIN_QUERY ? (_jsx(Placeholder, { children: _jsxs("span", { children: ["Type at least ", MIN_QUERY, " characters. ", _jsx(Kbd, { children: "\u2191" }), " ", _jsx(Kbd, { children: "\u2193" }), " to pick, ", _jsx(Kbd, { children: "\u21B5" }), " to open."] }) })) : state === "done" && results.length === 0 ? (_jsxs(Placeholder, { children: ["No results for \u201C", trimmed, "\u201D."] })) : (_jsx("div", { className: "divide-y divide-border/40", children: currentResults.map((hit, i) => (_jsx(ResultRow, { hit: hit, active: i === selected, onMouseEnter: () => setSelected(i), onClick: () => handleOpenResult(hit) }, hit.path))) })) }), _jsxs("div", { className: "flex items-center justify-between border-t border-border px-5 py-3", children: [_jsx("span", { className: "text-[11px] text-muted-foreground", children: state === "done" && results.length > 0
|
|
125
153
|
? `${results.length}${results.length === LIMIT ? "+" : ""} result${results.length === 1 ? "" : "s"}`
|
|
126
154
|
: "" }), _jsx("button", { onClick: onClose, className: "rounded-lg bg-surface-raised px-4 py-1.5 text-xs font-medium text-foreground transition-colors hover:bg-surface-overlay", children: "Close" })] })] }) }));
|
|
127
155
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"search-modal.js","sourceRoot":"","sources":["../../../src/components/quick-actions/search-modal.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AACjE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AACjE,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAC;AACvC,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,GAAG,EAAuB,MAAM,yBAAyB,CAAC;AACnE,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,EAAE,EAAE,EAAE,MAAM,oBAAoB,CAAC;AAExC,sEAAsE;AACtE,MAAM,WAAW,GAAG,GAAG,CAAC;AACxB,MAAM,SAAS,GAAG,CAAC,CAAC;AACpB,MAAM,KAAK,GAAG,EAAE,CAAC;AAIjB,MAAM,UAAU,WAAW,CAAC,EAC1B,IAAI,EACJ,OAAO,GAIR;IACC,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;IACvC,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAQ,MAAM,CAAC,CAAC;IAClD,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAmB,EAAE,CAAC,CAAC;IAC7D,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAW,EAAE,CAAC,CAAC;IACvD,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;IACvC,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IAE5C,MAAM,QAAQ,GAAG,MAAM,CAAmB,IAAI,CAAC,CAAC;IAChD,MAAM,OAAO,GAAG,MAAM,CAAiB,IAAI,CAAC,CAAC;IAC7C,MAAM,aAAa,GAAG,MAAM,CAAyB,IAAI,CAAC,CAAC;IAE3D,MAAM,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;IACjD,MAAM,gBAAgB,GAAG,UAAU,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC;IAE/D,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"search-modal.js","sourceRoot":"","sources":["../../../src/components/quick-actions/search-modal.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"streaming-modal.d.ts","sourceRoot":"","sources":["../../../src/components/quick-actions/streaming-modal.tsx"],"names":[],"mappings":"AAOA,wBAAgB,cAAc,CAAC,EAC7B,IAAI,EACJ,OAAO,EACP,KAAK,EACL,QAAQ,EACR,MAAe,GAChB,EAAE;IACD,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,+
|
|
1
|
+
{"version":3,"file":"streaming-modal.d.ts","sourceRoot":"","sources":["../../../src/components/quick-actions/streaming-modal.tsx"],"names":[],"mappings":"AAOA,wBAAgB,cAAc,CAAC,EAC7B,IAAI,EACJ,OAAO,EACP,KAAK,EACL,QAAQ,EACR,MAAe,GAChB,EAAE;IACD,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,+BAsJA"}
|
|
@@ -23,7 +23,10 @@ export function StreamingPanel({ open, onClose, title, endpoint, method = "POST"
|
|
|
23
23
|
});
|
|
24
24
|
if (!res.ok || !res.body) {
|
|
25
25
|
setState("error");
|
|
26
|
-
|
|
26
|
+
const body = await res.json().catch(() => null);
|
|
27
|
+
const message = typeof body?.error === "string" ? body.error : `HTTP ${res.status}: ${res.statusText}`;
|
|
28
|
+
if (!controller.signal.aborted)
|
|
29
|
+
setLines((l) => [...l, message]);
|
|
27
30
|
return;
|
|
28
31
|
}
|
|
29
32
|
const reader = res.body.getReader();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"streaming-modal.js","sourceRoot":"","sources":["../../../src/components/quick-actions/streaming-modal.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AACpD,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAC9D,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAIzD,MAAM,UAAU,cAAc,CAAC,EAC7B,IAAI,EACJ,OAAO,EACP,KAAK,EACL,QAAQ,EACR,MAAM,GAAG,MAAM,GAOhB;IACC,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAc,MAAM,CAAC,CAAC;IACxD,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAW,EAAE,CAAC,CAAC;IACjD,MAAM,SAAS,GAAG,MAAM,CAAiB,IAAI,CAAC,CAAC;IAC/C,MAAM,aAAa,GAAG,MAAM,CAAyB,IAAI,CAAC,CAAC;IAE3D,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,IAAI;YAAE,OAAO;QAElB,QAAQ,CAAC,SAAS,CAAC,CAAC;QACpB,QAAQ,CAAC,EAAE,CAAC,CAAC;QAEb,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;QACzC,aAAa,CAAC,OAAO,GAAG,UAAU,CAAC;QAEnC,CAAC,KAAK,IAAI,EAAE;YACV,IAAI,CAAC;gBACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,QAAQ,EAAE;oBAChC,MAAM;oBACN,MAAM,EAAE,UAAU,CAAC,MAAM;iBAC1B,CAAC,CAAC;gBAEH,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;oBACzB,QAAQ,CAAC,OAAO,CAAC,CAAC;oBAClB,
|
|
1
|
+
{"version":3,"file":"streaming-modal.js","sourceRoot":"","sources":["../../../src/components/quick-actions/streaming-modal.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"devices-agents-tab.d.ts","sourceRoot":"","sources":["../../../src/components/settings/devices-agents-tab.tsx"],"names":[],"mappings":"AAcA,qFAAqF;AACrF,wBAAgB,gBAAgB,CAAC,EAAE,MAAM,EAAE,EAAE;IAAE,MAAM,EAAE,OAAO,CAAA;CAAE,+BAiK/D"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
import { useEffect, useState } from "react";
|
|
3
|
+
import { Bot, Laptop, Loader2, Plus, Trash2 } from "lucide-react";
|
|
4
|
+
import { api } from "../../lib/api-client.js";
|
|
5
|
+
import { formatRelativeTime } from "../../lib/format-time.js";
|
|
6
|
+
import { cn } from "../../lib/utils.js";
|
|
7
|
+
import { usePrincipalStore } from "../../stores/principal-store.js";
|
|
8
|
+
const MAX_LABEL_LENGTH = 64;
|
|
9
|
+
const NOT_ENABLED = "Principal management is not enabled";
|
|
10
|
+
function displayLabel(label) {
|
|
11
|
+
return Array.from(label).slice(0, MAX_LABEL_LENGTH).join("");
|
|
12
|
+
}
|
|
13
|
+
/** Active devices and delegated agents, with owner-only mint and revoke controls. */
|
|
14
|
+
export function DevicesAgentsTab({ active }) {
|
|
15
|
+
const [principals, setPrincipals] = useState([]);
|
|
16
|
+
const [loading, setLoading] = useState(false);
|
|
17
|
+
const [enabled, setEnabled] = useState(true);
|
|
18
|
+
const [loadFailed, setLoadFailed] = useState(false);
|
|
19
|
+
const [error, setError] = useState(null);
|
|
20
|
+
const [label, setLabel] = useState("");
|
|
21
|
+
const [ttlDays, setTtlDays] = useState(7);
|
|
22
|
+
const busy = usePrincipalStore((state) => state.mintPending);
|
|
23
|
+
const mintError = usePrincipalStore((state) => state.mintError);
|
|
24
|
+
const oneTimeCredential = usePrincipalStore((state) => state.oneTimeCredential);
|
|
25
|
+
const mintAgent = usePrincipalStore((state) => state.mintAgent);
|
|
26
|
+
async function refresh() {
|
|
27
|
+
setLoading(true);
|
|
28
|
+
setLoadFailed(false);
|
|
29
|
+
setError(null);
|
|
30
|
+
try {
|
|
31
|
+
const data = await api.principals();
|
|
32
|
+
setPrincipals(data.principals);
|
|
33
|
+
setEnabled(true);
|
|
34
|
+
}
|
|
35
|
+
catch (err) {
|
|
36
|
+
setPrincipals([]);
|
|
37
|
+
if (err instanceof Error && err.message === NOT_ENABLED) {
|
|
38
|
+
setEnabled(false);
|
|
39
|
+
}
|
|
40
|
+
else {
|
|
41
|
+
setEnabled(true);
|
|
42
|
+
setLoadFailed(true);
|
|
43
|
+
setError(err instanceof Error ? err.message : "Could not load devices and agents");
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
finally {
|
|
47
|
+
setLoading(false);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
useEffect(() => {
|
|
51
|
+
if (active)
|
|
52
|
+
void refresh();
|
|
53
|
+
}, [active]);
|
|
54
|
+
useEffect(() => {
|
|
55
|
+
if (!oneTimeCredential)
|
|
56
|
+
return;
|
|
57
|
+
setLabel("");
|
|
58
|
+
if (active)
|
|
59
|
+
void refresh();
|
|
60
|
+
}, [active, oneTimeCredential]);
|
|
61
|
+
function onMint(event) {
|
|
62
|
+
event.preventDefault();
|
|
63
|
+
const trimmed = label.trim();
|
|
64
|
+
if (!trimmed || busy)
|
|
65
|
+
return;
|
|
66
|
+
setError(null);
|
|
67
|
+
void mintAgent(trimmed, ttlDays);
|
|
68
|
+
}
|
|
69
|
+
async function onRevoke(principal) {
|
|
70
|
+
const consequence = principal.is_own
|
|
71
|
+
? "This device will be signed out immediately, and you will return to sign in."
|
|
72
|
+
: principal.kind === "agent"
|
|
73
|
+
? "That agent will lose access immediately."
|
|
74
|
+
: "That device will be signed out immediately.";
|
|
75
|
+
if (!window.confirm(`${consequence} You can't undo this.`))
|
|
76
|
+
return;
|
|
77
|
+
setError(null);
|
|
78
|
+
try {
|
|
79
|
+
await api.principalRevoke(principal.id);
|
|
80
|
+
setPrincipals((rows) => rows.filter((row) => row.id !== principal.id));
|
|
81
|
+
if (principal.is_own)
|
|
82
|
+
window.location.reload();
|
|
83
|
+
}
|
|
84
|
+
catch (err) {
|
|
85
|
+
setError(err instanceof Error ? err.message : "Could not revoke access");
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
return (_jsxs("div", { className: "h-full overflow-y-auto p-4", children: [_jsx("h3", { className: "text-xs font-medium uppercase tracking-wide text-muted-foreground", children: "Devices & agents" }), _jsx("p", { className: "mt-1 text-xs text-muted-foreground", children: "See where this brain is signed in and create time-limited access for an agent." }), loading ? (_jsx("div", { className: "mt-6 flex justify-center", children: _jsx(Loader2, { className: "h-5 w-5 animate-spin text-muted-foreground" }) })) : !enabled ? (_jsx("p", { className: "mt-4 text-xs text-muted-foreground", children: "Devices and agents can only be managed when password authentication is enabled." })) : loadFailed ? (_jsx("p", { role: "alert", className: "mt-4 text-xs text-destructive", children: error })) : (_jsxs(_Fragment, { children: [_jsxs("ul", { className: "mt-4 flex flex-col gap-2", children: [principals.map((principal) => (_jsx(PrincipalRow, { principal: principal, onRevoke: () => void onRevoke(principal) }, principal.id))), principals.length === 0 ? (_jsx("li", { className: "rounded-lg border border-dashed border-border-subtle p-4 text-center text-xs text-muted-foreground", children: "No active devices or agents." })) : null] }), error || mintError ? (_jsx("p", { role: "alert", className: "mt-3 text-xs text-destructive", children: error ?? mintError })) : null, _jsxs("form", { onSubmit: onMint, className: "mt-6 border-t border-border pt-4", children: [_jsx("h4", { className: "text-xs font-medium uppercase tracking-wide text-muted-foreground", children: "Agent access" }), _jsx("p", { className: "mt-1 text-xs text-muted-foreground", children: "Create a credential an agent can use until it expires or you revoke it." }), _jsx("label", { className: "mt-3 block text-xs font-medium text-foreground", htmlFor: "agent-label", children: "Label" }), _jsx("input", { id: "agent-label", value: label, maxLength: MAX_LABEL_LENGTH, onChange: (event) => setLabel(event.target.value), placeholder: "Build agent", className: "mt-1 w-full rounded-lg border border-border-subtle bg-background px-3 py-2 text-sm text-foreground outline-none focus:border-primary" }), _jsx("label", { className: "mt-3 block text-xs font-medium text-foreground", htmlFor: "agent-ttl", children: "Expires after" }), _jsxs("select", { id: "agent-ttl", value: ttlDays, onChange: (event) => setTtlDays(Number(event.target.value)), className: "mt-1 w-full rounded-lg border border-border-subtle bg-background px-3 py-2 text-sm text-foreground outline-none focus:border-primary", children: [_jsx("option", { value: 1, children: "1 day" }), _jsx("option", { value: 7, children: "7 days" }), _jsx("option", { value: 30, children: "30 days" })] }), _jsxs("button", { type: "submit", disabled: busy || !label.trim(), className: "mt-4 flex w-full items-center justify-center gap-2 rounded-lg bg-primary px-4 py-2 text-sm font-medium text-primary-foreground transition-colors hover:brightness-110 disabled:opacity-50", children: [busy ? _jsx(Loader2, { className: "h-4 w-4 animate-spin" }) : _jsx(Plus, { className: "h-4 w-4" }), "Create agent credential"] })] })] }))] }));
|
|
89
|
+
}
|
|
90
|
+
function PrincipalRow({ principal, onRevoke, }) {
|
|
91
|
+
const agent = principal.kind === "agent";
|
|
92
|
+
const Icon = agent ? Bot : Laptop;
|
|
93
|
+
const kind = principal.is_own ? "This device" : agent ? "Agent" : "Device";
|
|
94
|
+
return (_jsx("li", { className: cn("rounded-lg border bg-surface p-3", principal.is_own ? "border-primary/60" : "border-border-subtle"), children: _jsxs("div", { className: "flex items-start gap-2", children: [_jsx(Icon, { className: "mt-0.5 h-4 w-4 shrink-0 text-primary" }), _jsxs("div", { className: "min-w-0 flex-1", children: [_jsxs("div", { className: "flex flex-wrap items-center gap-1.5", children: [_jsx("span", { className: "break-words text-sm text-foreground", children: displayLabel(principal.label) }), _jsx("span", { className: "rounded bg-surface-raised px-1.5 py-0.5 text-[10px] font-medium uppercase tracking-wide text-muted-foreground", children: kind })] }), _jsxs("dl", { className: "mt-1.5 grid grid-cols-[auto_1fr] gap-x-2 gap-y-0.5 text-[11px] text-muted-foreground", children: [_jsx("dt", { children: "Created" }), _jsx("dd", { children: formatRelativeTime(principal.created_at) }), _jsx("dt", { children: "Last seen" }), _jsx("dd", { children: principal.last_seen_at ? formatRelativeTime(principal.last_seen_at) : "Never" }), _jsx("dt", { children: "Expires" }), _jsx("dd", { children: formatRelativeTime(principal.expires_at) })] })] }), _jsxs("button", { type: "button", onClick: onRevoke, "aria-label": `Revoke ${displayLabel(principal.label)}`, className: "flex shrink-0 items-center gap-1 rounded px-1.5 py-1 text-xs text-muted-foreground transition-colors hover:text-destructive", children: [_jsx(Trash2, { className: "h-3.5 w-3.5" }), "Revoke"] })] }) }));
|
|
95
|
+
}
|
|
96
|
+
//# sourceMappingURL=devices-agents-tab.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"devices-agents-tab.js","sourceRoot":"","sources":["../../../src/components/settings/devices-agents-tab.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"one-time-agent-credential.d.ts","sourceRoot":"","sources":["../../../src/components/settings/one-time-agent-credential.tsx"],"names":[],"mappings":"AAMA,8EAA8E;AAC9E,wBAAgB,4BAA4B,uCAa3C"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useEffect, useRef, useState } from "react";
|
|
3
|
+
import { createPortal } from "react-dom";
|
|
4
|
+
import { Check, Copy } from "lucide-react";
|
|
5
|
+
import { usePrincipalStore } from "../../stores/principal-store.js";
|
|
6
|
+
/** App-level portal for the unrecoverable value returned by an agent mint. */
|
|
7
|
+
export function OneTimeAgentCredentialDialog() {
|
|
8
|
+
const credential = usePrincipalStore((state) => state.oneTimeCredential);
|
|
9
|
+
const acknowledge = usePrincipalStore((state) => state.acknowledgeAgentCredential);
|
|
10
|
+
return credential ? (_jsx(OneTimeCredential, { credential: credential, onDone: acknowledge }, credential.id)) : null;
|
|
11
|
+
}
|
|
12
|
+
function OneTimeCredential({ credential, onDone, }) {
|
|
13
|
+
const [copied, setCopied] = useState(false);
|
|
14
|
+
const [saved, setSaved] = useState(false);
|
|
15
|
+
const [copyError, setCopyError] = useState(false);
|
|
16
|
+
const dialogRef = useRef(null);
|
|
17
|
+
useEffect(() => {
|
|
18
|
+
const keepDialogOpen = (event) => {
|
|
19
|
+
if (event.key === "Escape") {
|
|
20
|
+
event.preventDefault();
|
|
21
|
+
event.stopPropagation();
|
|
22
|
+
return;
|
|
23
|
+
}
|
|
24
|
+
if (event.key !== "Tab")
|
|
25
|
+
return;
|
|
26
|
+
const focusable = Array.from(dialogRef.current?.querySelectorAll('button:not([disabled]), input:not([disabled])') ?? []);
|
|
27
|
+
if (focusable.length === 0)
|
|
28
|
+
return;
|
|
29
|
+
const first = focusable[0];
|
|
30
|
+
const last = focusable[focusable.length - 1];
|
|
31
|
+
if (event.shiftKey && document.activeElement === first) {
|
|
32
|
+
event.preventDefault();
|
|
33
|
+
last.focus();
|
|
34
|
+
}
|
|
35
|
+
else if (!event.shiftKey && document.activeElement === last) {
|
|
36
|
+
event.preventDefault();
|
|
37
|
+
first.focus();
|
|
38
|
+
}
|
|
39
|
+
};
|
|
40
|
+
window.addEventListener("keydown", keepDialogOpen, true);
|
|
41
|
+
return () => window.removeEventListener("keydown", keepDialogOpen, true);
|
|
42
|
+
}, []);
|
|
43
|
+
async function copyCredential() {
|
|
44
|
+
try {
|
|
45
|
+
await navigator.clipboard.writeText(credential.cookie);
|
|
46
|
+
setCopied(true);
|
|
47
|
+
setCopyError(false);
|
|
48
|
+
}
|
|
49
|
+
catch {
|
|
50
|
+
setCopyError(true);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
return createPortal(_jsx("div", { role: "dialog", "aria-modal": "true", "aria-labelledby": "one-time-credential-title", className: "fixed inset-0 z-[60] flex items-center justify-center bg-black/60 p-4", children: _jsxs("div", { ref: dialogRef, className: "w-full max-w-md rounded-xl border border-border bg-surface p-5 shadow-[0_16px_48px_rgba(0,0,0,0.5)]", children: [_jsx("h3", { id: "one-time-credential-title", className: "text-base font-semibold text-foreground", children: "Save this credential now" }), _jsx("p", { className: "mt-2 text-sm font-medium text-destructive", children: "This is the only time you will see this value." }), _jsx("p", { className: "mt-1 text-xs text-muted-foreground", children: "Store it somewhere safe before continuing. It cannot be recovered later." }), _jsx("div", { className: "mt-4 rounded-lg border border-border-subtle bg-background p-3", children: _jsx("code", { className: "block break-all text-xs text-foreground", children: credential.cookie }) }), _jsxs("button", { autoFocus: true, type: "button", onClick: () => void copyCredential(), className: "mt-3 flex w-full items-center justify-center gap-2 rounded-lg border border-border-subtle bg-surface px-4 py-2 text-sm font-medium text-foreground transition-colors hover:border-primary", children: [copied ? _jsx(Check, { className: "h-4 w-4" }) : _jsx(Copy, { className: "h-4 w-4" }), copied ? "Copied" : "Copy credential"] }), copyError ? (_jsx("p", { role: "alert", className: "mt-2 text-xs text-destructive", children: "Copy failed. Select the value above and copy it manually." })) : null, _jsxs("label", { className: "mt-4 flex items-start gap-2 text-xs text-foreground", children: [_jsx("input", { type: "checkbox", checked: saved, onChange: (event) => setSaved(event.target.checked), className: "mt-0.5" }), "I have saved this credential somewhere safe."] }), _jsx("button", { type: "button", disabled: !saved, onClick: onDone, className: "mt-3 w-full rounded-lg bg-primary px-4 py-2 text-sm font-medium text-primary-foreground transition-colors hover:brightness-110 disabled:opacity-50", children: "Done" })] }) }), document.body);
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=one-time-agent-credential.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"one-time-agent-credential.js","sourceRoot":"","sources":["../../../src/components/settings/one-time-agent-credential.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"settings-panel.d.ts","sourceRoot":"","sources":["../../../src/components/settings/settings-panel.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"settings-panel.d.ts","sourceRoot":"","sources":["../../../src/components/settings/settings-panel.tsx"],"names":[],"mappings":"AA0BA;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,EAC5B,IAAI,EACJ,OAAO,GACR,EAAE;IACD,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB,+BAqDA"}
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { Suspense, lazy } from "react";
|
|
3
|
-
import { KeyRound, Puzzle, SlidersHorizontal } from "lucide-react";
|
|
3
|
+
import { KeyRound, Laptop, Puzzle, SlidersHorizontal } from "lucide-react";
|
|
4
4
|
import { useUIStore } from "../../stores/ui-store.js";
|
|
5
5
|
import { SlidePanel } from "../layout/slide-panel.js";
|
|
6
6
|
import { cn } from "../../lib/utils.js";
|
|
7
|
+
import { usePrincipalStore } from "../../stores/principal-store.js";
|
|
7
8
|
/**
|
|
8
9
|
* Each tab is fetched the first time it is opened. Settings is the largest
|
|
9
10
|
* surface in the app and most sessions never open it, so none of it belongs in
|
|
@@ -13,11 +14,13 @@ import { cn } from "../../lib/utils.js";
|
|
|
13
14
|
*/
|
|
14
15
|
const ModelsTab = lazy(() => import("./models-tab.js").then((m) => ({ default: m.ModelsTab })));
|
|
15
16
|
const PasskeyTab = lazy(() => import("./passkey-tab.js").then((m) => ({ default: m.PasskeyTab })));
|
|
17
|
+
const DevicesAgentsTab = lazy(() => import("./devices-agents-tab.js").then((m) => ({ default: m.DevicesAgentsTab })));
|
|
16
18
|
const SkillsTab = lazy(() => import("./skills-tab.js").then((m) => ({ default: m.SkillsTab })));
|
|
17
19
|
const TABS = [
|
|
18
20
|
{ id: "models", label: "Models", icon: SlidersHorizontal },
|
|
19
21
|
{ id: "skills", label: "Skills", icon: Puzzle },
|
|
20
22
|
{ id: "security", label: "Security", icon: KeyRound },
|
|
23
|
+
{ id: "devices", label: "Devices & agents", icon: Laptop },
|
|
21
24
|
];
|
|
22
25
|
/**
|
|
23
26
|
* The settings surface: one panel, one entry point in the menus, a tab per
|
|
@@ -27,8 +30,18 @@ const TABS = [
|
|
|
27
30
|
export function SettingsPanel({ open, onClose, }) {
|
|
28
31
|
const tab = useUIStore((s) => s.settingsTab);
|
|
29
32
|
const setTab = useUIStore((s) => s.setSettingsTab);
|
|
30
|
-
|
|
33
|
+
const mintPending = usePrincipalStore((s) => s.mintPending);
|
|
34
|
+
const oneTimeCredential = usePrincipalStore((s) => s.oneTimeCredential);
|
|
35
|
+
const credentialProtected = mintPending || oneTimeCredential !== null;
|
|
36
|
+
function closeIfSafe() {
|
|
37
|
+
if (!credentialProtected)
|
|
38
|
+
onClose();
|
|
39
|
+
}
|
|
40
|
+
return (_jsx(SlidePanel, { open: open, onClose: closeIfSafe, title: "Settings", wide: true, children: _jsxs("div", { className: "flex h-full flex-col", children: [_jsx("div", { className: "flex shrink-0 gap-1 border-b border-border px-2 pt-2", children: TABS.map(({ id, label, icon: Icon }) => (_jsxs("button", { onClick: () => {
|
|
41
|
+
if (!credentialProtected)
|
|
42
|
+
setTab(id);
|
|
43
|
+
}, disabled: credentialProtected && tab !== id, "aria-selected": tab === id, role: "tab", className: cn("flex items-center gap-1.5 rounded-t-lg px-3 py-2 text-xs font-medium transition-colors disabled:cursor-not-allowed disabled:opacity-50", tab === id
|
|
31
44
|
? "border-b-2 border-primary text-foreground"
|
|
32
|
-
: "text-muted-foreground hover:text-foreground"), children: [_jsx(Icon, { className: "h-3.5 w-3.5" }), label] }, id))) }), _jsx("div", { className: "min-h-0 flex-1", children: _jsx(Suspense, { fallback: null, children: tab === "models" ? (_jsx(ModelsTab, { active: open && tab === "models" })) : tab === "skills" ? (_jsx(SkillsTab, { active: open && tab === "skills" })) : (_jsx(PasskeyTab, { active: open && tab === "security" })) }) })] }) }));
|
|
45
|
+
: "text-muted-foreground hover:text-foreground"), children: [_jsx(Icon, { className: "h-3.5 w-3.5" }), label] }, id))) }), _jsx("div", { className: "min-h-0 flex-1", children: _jsx(Suspense, { fallback: null, children: tab === "models" ? (_jsx(ModelsTab, { active: open && tab === "models" })) : tab === "skills" ? (_jsx(SkillsTab, { active: open && tab === "skills" })) : tab === "security" ? (_jsx(PasskeyTab, { active: open && tab === "security" })) : (_jsx(DevicesAgentsTab, { active: open && tab === "devices" })) }) })] }) }));
|
|
33
46
|
}
|
|
34
47
|
//# sourceMappingURL=settings-panel.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"settings-panel.js","sourceRoot":"","sources":["../../../src/components/settings/settings-panel.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"settings-panel.js","sourceRoot":"","sources":["../../../src/components/settings/settings-panel.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,2 +1,7 @@
|
|
|
1
|
-
|
|
1
|
+
/**
|
|
2
|
+
* Ask the mounted connectivity poller for a fresh reading. The poller remains
|
|
3
|
+
* the only writer of vpnStatus and serializes this with its scheduled checks.
|
|
4
|
+
*/
|
|
5
|
+
export declare function recheckVpnStatus(): void;
|
|
6
|
+
export declare function useVpnStatus(): number;
|
|
2
7
|
//# sourceMappingURL=use-vpn-status.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-vpn-status.d.ts","sourceRoot":"","sources":["../../src/hooks/use-vpn-status.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"use-vpn-status.d.ts","sourceRoot":"","sources":["../../src/hooks/use-vpn-status.ts"],"names":[],"mappings":"AAgCA;;;GAGG;AACH,wBAAgB,gBAAgB,IAAI,IAAI,CAEvC;AAED,wBAAgB,YAAY,WA0E3B"}
|