@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.
Files changed (223) hide show
  1. package/README.md +12 -0
  2. package/dist/components/activity/activity-page.d.ts.map +1 -1
  3. package/dist/components/activity/activity-page.js +8 -149
  4. package/dist/components/activity/activity-page.js.map +1 -1
  5. package/dist/components/activity/activity-rollups.d.ts +5 -0
  6. package/dist/components/activity/activity-rollups.d.ts.map +1 -0
  7. package/dist/components/activity/activity-rollups.js +39 -0
  8. package/dist/components/activity/activity-rollups.js.map +1 -0
  9. package/dist/components/activity/activity-run-detail.d.ts +11 -0
  10. package/dist/components/activity/activity-run-detail.d.ts.map +1 -0
  11. package/dist/components/activity/activity-run-detail.js +111 -0
  12. package/dist/components/activity/activity-run-detail.js.map +1 -0
  13. package/dist/components/activity/activity-run-list.d.ts +15 -0
  14. package/dist/components/activity/activity-run-list.d.ts.map +1 -0
  15. package/dist/components/activity/activity-run-list.js +25 -0
  16. package/dist/components/activity/activity-run-list.js.map +1 -0
  17. package/dist/components/chat/brain-markdown-code.d.ts +4 -0
  18. package/dist/components/chat/brain-markdown-code.d.ts.map +1 -0
  19. package/dist/components/chat/brain-markdown-code.js +47 -0
  20. package/dist/components/chat/brain-markdown-code.js.map +1 -0
  21. package/dist/components/chat/brain-markdown-entities.d.ts +14 -0
  22. package/dist/components/chat/brain-markdown-entities.d.ts.map +1 -0
  23. package/dist/components/chat/brain-markdown-entities.js +93 -0
  24. package/dist/components/chat/brain-markdown-entities.js.map +1 -0
  25. package/dist/components/chat/brain-markdown-links.d.ts +36 -0
  26. package/dist/components/chat/brain-markdown-links.d.ts.map +1 -0
  27. package/dist/components/chat/brain-markdown-links.js +176 -0
  28. package/dist/components/chat/brain-markdown-links.js.map +1 -0
  29. package/dist/components/chat/brain-markdown-share.d.ts +15 -0
  30. package/dist/components/chat/brain-markdown-share.d.ts.map +1 -0
  31. package/dist/components/chat/brain-markdown-share.js +40 -0
  32. package/dist/components/chat/brain-markdown-share.js.map +1 -0
  33. package/dist/components/chat/brain-markdown.d.ts +1 -34
  34. package/dist/components/chat/brain-markdown.d.ts.map +1 -1
  35. package/dist/components/chat/brain-markdown.js +9 -402
  36. package/dist/components/chat/brain-markdown.js.map +1 -1
  37. package/dist/components/chat/composer.d.ts.map +1 -1
  38. package/dist/components/chat/composer.js +14 -1
  39. package/dist/components/chat/composer.js.map +1 -1
  40. package/dist/components/chat/session-drawer.d.ts.map +1 -1
  41. package/dist/components/chat/session-drawer.js +25 -10
  42. package/dist/components/chat/session-drawer.js.map +1 -1
  43. package/dist/components/chat/tool-views.d.ts +2 -2
  44. package/dist/components/chat/tool-views.d.ts.map +1 -1
  45. package/dist/components/chat/tool-views.js +2 -16
  46. package/dist/components/chat/tool-views.js.map +1 -1
  47. package/dist/components/chat/use-markdown-highlight.d.ts +12 -0
  48. package/dist/components/chat/use-markdown-highlight.d.ts.map +1 -0
  49. package/dist/components/chat/use-markdown-highlight.js +56 -0
  50. package/dist/components/chat/use-markdown-highlight.js.map +1 -0
  51. package/dist/components/connectivity/connection-gate.d.ts.map +1 -1
  52. package/dist/components/connectivity/connection-gate.js +94 -8
  53. package/dist/components/connectivity/connection-gate.js.map +1 -1
  54. package/dist/components/connectivity/connection-state.d.ts +12 -0
  55. package/dist/components/connectivity/connection-state.d.ts.map +1 -0
  56. package/dist/components/connectivity/connection-state.js +23 -0
  57. package/dist/components/connectivity/connection-state.js.map +1 -0
  58. package/dist/components/graph/graph-canvas-lazy.d.ts +2 -0
  59. package/dist/components/graph/graph-canvas-lazy.d.ts.map +1 -0
  60. package/dist/components/graph/graph-canvas-lazy.js +4 -0
  61. package/dist/components/graph/graph-canvas-lazy.js.map +1 -0
  62. package/dist/components/graph/graph-controls.js +4 -1
  63. package/dist/components/graph/graph-controls.js.map +1 -1
  64. package/dist/components/graph/graph-maintenance.d.ts +8 -0
  65. package/dist/components/graph/graph-maintenance.d.ts.map +1 -0
  66. package/dist/components/graph/graph-maintenance.js +115 -0
  67. package/dist/components/graph/graph-maintenance.js.map +1 -0
  68. package/dist/components/graph/graph-page.d.ts.map +1 -1
  69. package/dist/components/graph/graph-page.js +11 -306
  70. package/dist/components/graph/graph-page.js.map +1 -1
  71. package/dist/components/graph/graph-scene.d.ts +8 -0
  72. package/dist/components/graph/graph-scene.d.ts.map +1 -0
  73. package/dist/components/graph/graph-scene.js +208 -0
  74. package/dist/components/graph/graph-scene.js.map +1 -0
  75. package/dist/components/graph/graph-spinner.d.ts +2 -0
  76. package/dist/components/graph/graph-spinner.d.ts.map +1 -0
  77. package/dist/components/graph/graph-spinner.js +6 -0
  78. package/dist/components/graph/graph-spinner.js.map +1 -0
  79. package/dist/components/layout/app-shell.d.ts.map +1 -1
  80. package/dist/components/layout/app-shell.js +2 -1
  81. package/dist/components/layout/app-shell.js.map +1 -1
  82. package/dist/components/quick-actions/add-modal.d.ts.map +1 -1
  83. package/dist/components/quick-actions/add-modal.js +47 -4
  84. package/dist/components/quick-actions/add-modal.js.map +1 -1
  85. package/dist/components/quick-actions/search-modal.d.ts.map +1 -1
  86. package/dist/components/quick-actions/search-modal.js +46 -18
  87. package/dist/components/quick-actions/search-modal.js.map +1 -1
  88. package/dist/components/quick-actions/streaming-modal.d.ts.map +1 -1
  89. package/dist/components/quick-actions/streaming-modal.js +4 -1
  90. package/dist/components/quick-actions/streaming-modal.js.map +1 -1
  91. package/dist/components/settings/devices-agents-tab.d.ts +5 -0
  92. package/dist/components/settings/devices-agents-tab.d.ts.map +1 -0
  93. package/dist/components/settings/devices-agents-tab.js +96 -0
  94. package/dist/components/settings/devices-agents-tab.js.map +1 -0
  95. package/dist/components/settings/one-time-agent-credential.d.ts +3 -0
  96. package/dist/components/settings/one-time-agent-credential.d.ts.map +1 -0
  97. package/dist/components/settings/one-time-agent-credential.js +55 -0
  98. package/dist/components/settings/one-time-agent-credential.js.map +1 -0
  99. package/dist/components/settings/settings-panel.d.ts.map +1 -1
  100. package/dist/components/settings/settings-panel.js +16 -3
  101. package/dist/components/settings/settings-panel.js.map +1 -1
  102. package/dist/hooks/use-vpn-status.d.ts +6 -1
  103. package/dist/hooks/use-vpn-status.d.ts.map +1 -1
  104. package/dist/hooks/use-vpn-status.js +67 -30
  105. package/dist/hooks/use-vpn-status.js.map +1 -1
  106. package/dist/hooks/use-websocket.d.ts +3 -2
  107. package/dist/hooks/use-websocket.d.ts.map +1 -1
  108. package/dist/hooks/use-websocket.js +65 -254
  109. package/dist/hooks/use-websocket.js.map +1 -1
  110. package/dist/hooks/websocket-handlers/activity.d.ts +5 -0
  111. package/dist/hooks/websocket-handlers/activity.d.ts.map +1 -0
  112. package/dist/hooks/websocket-handlers/activity.js +10 -0
  113. package/dist/hooks/websocket-handlers/activity.js.map +1 -0
  114. package/dist/hooks/websocket-handlers/chat.d.ts +17 -0
  115. package/dist/hooks/websocket-handlers/chat.d.ts.map +1 -0
  116. package/dist/hooks/websocket-handlers/chat.js +175 -0
  117. package/dist/hooks/websocket-handlers/chat.js.map +1 -0
  118. package/dist/hooks/websocket-handlers/connection.d.ts +6 -0
  119. package/dist/hooks/websocket-handlers/connection.d.ts.map +1 -0
  120. package/dist/hooks/websocket-handlers/connection.js +27 -0
  121. package/dist/hooks/websocket-handlers/connection.js.map +1 -0
  122. package/dist/hooks/websocket-handlers/index.d.ts +4 -0
  123. package/dist/hooks/websocket-handlers/index.d.ts.map +1 -0
  124. package/dist/hooks/websocket-handlers/index.js +19 -0
  125. package/dist/hooks/websocket-handlers/index.js.map +1 -0
  126. package/dist/hooks/websocket-handlers/mask.d.ts +4 -0
  127. package/dist/hooks/websocket-handlers/mask.d.ts.map +1 -0
  128. package/dist/hooks/websocket-handlers/mask.js +14 -0
  129. package/dist/hooks/websocket-handlers/mask.js.map +1 -0
  130. package/dist/hooks/websocket-handlers/provider.d.ts +4 -0
  131. package/dist/hooks/websocket-handlers/provider.d.ts.map +1 -0
  132. package/dist/hooks/websocket-handlers/provider.js +31 -0
  133. package/dist/hooks/websocket-handlers/provider.js.map +1 -0
  134. package/dist/hooks/websocket-handlers/types.d.ts +24 -0
  135. package/dist/hooks/websocket-handlers/types.d.ts.map +1 -0
  136. package/dist/hooks/websocket-handlers/types.js +2 -0
  137. package/dist/hooks/websocket-handlers/types.js.map +1 -0
  138. package/dist/lib/api-client.d.ts +32 -0
  139. package/dist/lib/api-client.d.ts.map +1 -1
  140. package/dist/lib/api-client.js +11 -0
  141. package/dist/lib/api-client.js.map +1 -1
  142. package/dist/lib/format-time.d.ts +3 -0
  143. package/dist/lib/format-time.d.ts.map +1 -0
  144. package/dist/lib/format-time.js +25 -0
  145. package/dist/lib/format-time.js.map +1 -0
  146. package/dist/lib/push-registration.d.ts +7 -0
  147. package/dist/lib/push-registration.d.ts.map +1 -0
  148. package/dist/lib/push-registration.js +26 -0
  149. package/dist/lib/push-registration.js.map +1 -0
  150. package/dist/stores/activity-store-helpers.d.ts +50 -0
  151. package/dist/stores/activity-store-helpers.d.ts.map +1 -0
  152. package/dist/stores/activity-store-helpers.js +143 -0
  153. package/dist/stores/activity-store-helpers.js.map +1 -0
  154. package/dist/stores/activity-store-types.d.ts +48 -0
  155. package/dist/stores/activity-store-types.d.ts.map +1 -0
  156. package/dist/stores/activity-store-types.js +2 -0
  157. package/dist/stores/activity-store-types.js.map +1 -0
  158. package/dist/stores/activity-store.d.ts +2 -78
  159. package/dist/stores/activity-store.d.ts.map +1 -1
  160. package/dist/stores/activity-store.js +22 -142
  161. package/dist/stores/activity-store.js.map +1 -1
  162. package/dist/stores/connection-store.d.ts +14 -2
  163. package/dist/stores/connection-store.d.ts.map +1 -1
  164. package/dist/stores/connection-store.js +17 -0
  165. package/dist/stores/connection-store.js.map +1 -1
  166. package/dist/stores/file-store.d.ts.map +1 -1
  167. package/dist/stores/file-store.js +54 -18
  168. package/dist/stores/file-store.js.map +1 -1
  169. package/dist/stores/principal-store.d.ts +16 -0
  170. package/dist/stores/principal-store.d.ts.map +1 -0
  171. package/dist/stores/principal-store.js +29 -0
  172. package/dist/stores/principal-store.js.map +1 -0
  173. package/dist/stores/ui-store.d.ts +1 -1
  174. package/dist/stores/ui-store.d.ts.map +1 -1
  175. package/dist/styles.css +1 -1
  176. package/package.json +2 -2
  177. package/src/components/activity/activity-page.tsx +6 -477
  178. package/src/components/activity/activity-rollups.tsx +94 -0
  179. package/src/components/activity/activity-run-detail.tsx +301 -0
  180. package/src/components/activity/activity-run-list.tsx +97 -0
  181. package/src/components/chat/brain-markdown-code.tsx +60 -0
  182. package/src/components/chat/brain-markdown-entities.tsx +116 -0
  183. package/src/components/chat/brain-markdown-links.tsx +247 -0
  184. package/src/components/chat/brain-markdown-share.ts +47 -0
  185. package/src/components/chat/brain-markdown.tsx +27 -535
  186. package/src/components/chat/composer.tsx +14 -1
  187. package/src/components/chat/session-drawer.tsx +29 -10
  188. package/src/components/chat/tool-views.tsx +2 -13
  189. package/src/components/chat/use-markdown-highlight.ts +63 -0
  190. package/src/components/connectivity/connection-gate.tsx +128 -14
  191. package/src/components/connectivity/connection-state.ts +37 -0
  192. package/src/components/graph/graph-canvas-lazy.tsx +4 -0
  193. package/src/components/graph/graph-controls.tsx +4 -1
  194. package/src/components/graph/graph-maintenance.tsx +304 -0
  195. package/src/components/graph/graph-page.tsx +11 -840
  196. package/src/components/graph/graph-scene.tsx +548 -0
  197. package/src/components/graph/graph-spinner.tsx +9 -0
  198. package/src/components/layout/app-shell.tsx +2 -0
  199. package/src/components/quick-actions/add-modal.tsx +49 -4
  200. package/src/components/quick-actions/search-modal.tsx +46 -18
  201. package/src/components/quick-actions/streaming-modal.tsx +3 -1
  202. package/src/components/settings/devices-agents-tab.tsx +231 -0
  203. package/src/components/settings/one-time-agent-credential.tsx +131 -0
  204. package/src/components/settings/settings-panel.tsx +20 -5
  205. package/src/hooks/use-vpn-status.ts +71 -31
  206. package/src/hooks/use-websocket.ts +74 -275
  207. package/src/hooks/websocket-handlers/activity.ts +13 -0
  208. package/src/hooks/websocket-handlers/chat.ts +210 -0
  209. package/src/hooks/websocket-handlers/connection.ts +30 -0
  210. package/src/hooks/websocket-handlers/index.ts +59 -0
  211. package/src/hooks/websocket-handlers/mask.ts +17 -0
  212. package/src/hooks/websocket-handlers/provider.ts +35 -0
  213. package/src/hooks/websocket-handlers/types.ts +27 -0
  214. package/src/lib/api-client.ts +40 -1
  215. package/src/lib/format-time.ts +20 -0
  216. package/src/lib/push-registration.ts +29 -0
  217. package/src/stores/activity-store-helpers.ts +164 -0
  218. package/src/stores/activity-store-types.ts +55 -0
  219. package/src/stores/activity-store.ts +21 -217
  220. package/src/stores/connection-store.ts +33 -2
  221. package/src/stores/file-store.ts +42 -12
  222. package/src/stores/principal-store.ts +38 -0
  223. 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 runSearch = useCallback(async (q) => {
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
- controllerRef.current?.abort();
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
- controllerRef.current?.abort();
83
- controllerRef.current = null;
108
+ cancelSearch();
84
109
  setResults([]);
85
110
  setWarnings([]);
86
111
  setState("idle");
87
112
  return;
88
113
  }
89
- const t = setTimeout(() => void runSearch(trimmed), DEBOUNCE_MS);
90
- return () => clearTimeout(t);
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 (results.length === 0)
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 + results.length) % results.length;
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 = results[selected];
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) => setQuery(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: () => {
122
- setQuery("");
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: results.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
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":"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"}
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,+BAoJA"}
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
- setLines((l) => [...l, `HTTP ${res.status}: ${res.statusText}`]);
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":"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"}
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,5 @@
1
+ /** Active devices and delegated agents, with owner-only mint and revoke controls. */
2
+ export declare function DevicesAgentsTab({ active }: {
3
+ active: boolean;
4
+ }): import("react").JSX.Element;
5
+ //# sourceMappingURL=devices-agents-tab.d.ts.map
@@ -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,3 @@
1
+ /** App-level portal for the unrecoverable value returned by an agent mint. */
2
+ export declare function OneTimeAgentCredentialDialog(): import("react").JSX.Element | null;
3
+ //# sourceMappingURL=one-time-agent-credential.d.ts.map
@@ -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":"AAuBA;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,EAC5B,IAAI,EACJ,OAAO,GACR,EAAE;IACD,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB,+BAyCA"}
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
- return (_jsx(SlidePanel, { open: open, onClose: onClose, title: "Settings", 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: () => setTab(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", tab === id
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":"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"}
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,MAAM,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAC3E,OAAO,EAAE,UAAU,EAAoB,MAAM,0BAA0B,CAAC;AACxE,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,EAAE,EAAE,MAAM,oBAAoB,CAAC;AACxC,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AAEpE;;;;;;GAMG;AACH,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC;AAChG,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC;AACnG,MAAM,gBAAgB,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,yBAAyB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC,CAAC;AACtH,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC;AAEhG,MAAM,IAAI,GAAqE;IAC7E,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,iBAAiB,EAAE;IAC1D,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE;IAC/C,EAAE,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE;IACrD,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,kBAAkB,EAAE,IAAI,EAAE,MAAM,EAAE;CAC3D,CAAC;AAEF;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAAC,EAC5B,IAAI,EACJ,OAAO,GAIR;IACC,MAAM,GAAG,GAAG,UAAU,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;IAC7C,MAAM,MAAM,GAAG,UAAU,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC;IACnD,MAAM,WAAW,GAAG,iBAAiB,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;IAC5D,MAAM,iBAAiB,GAAG,iBAAiB,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC;IACxE,MAAM,mBAAmB,GAAG,WAAW,IAAI,iBAAiB,KAAK,IAAI,CAAC;IAEtE,SAAS,WAAW;QAClB,IAAI,CAAC,mBAAmB;YAAE,OAAO,EAAE,CAAC;IACtC,CAAC;IAED,OAAO,CACL,KAAC,UAAU,IAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,KAAK,EAAC,UAAU,EAAC,IAAI,kBACjE,eAAK,SAAS,EAAC,sBAAsB,aACnC,cAAK,SAAS,EAAC,sDAAsD,YAClE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CACvC,kBAEE,OAAO,EAAE,GAAG,EAAE;4BACZ,IAAI,CAAC,mBAAmB;gCAAE,MAAM,CAAC,EAAE,CAAC,CAAC;wBACvC,CAAC,EACD,QAAQ,EAAE,mBAAmB,IAAI,GAAG,KAAK,EAAE,mBAC5B,GAAG,KAAK,EAAE,EACzB,IAAI,EAAC,KAAK,EACV,SAAS,EAAE,EAAE,CACX,wIAAwI,EACxI,GAAG,KAAK,EAAE;4BACR,CAAC,CAAC,2CAA2C;4BAC7C,CAAC,CAAC,6CAA6C,CAClD,aAED,KAAC,IAAI,IAAC,SAAS,EAAC,aAAa,GAAG,EAC/B,KAAK,KAfD,EAAE,CAgBA,CACV,CAAC,GACE,EAEN,cAAK,SAAS,EAAC,gBAAgB,YAC7B,KAAC,QAAQ,IAAC,QAAQ,EAAE,IAAI,YACrB,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,CAClB,KAAC,SAAS,IAAC,MAAM,EAAE,IAAI,IAAI,GAAG,KAAK,QAAQ,GAAI,CAChD,CAAC,CAAC,CAAC,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,CACrB,KAAC,SAAS,IAAC,MAAM,EAAE,IAAI,IAAI,GAAG,KAAK,QAAQ,GAAI,CAChD,CAAC,CAAC,CAAC,GAAG,KAAK,UAAU,CAAC,CAAC,CAAC,CACvB,KAAC,UAAU,IAAC,MAAM,EAAE,IAAI,IAAI,GAAG,KAAK,UAAU,GAAI,CACnD,CAAC,CAAC,CAAC,CACF,KAAC,gBAAgB,IAAC,MAAM,EAAE,IAAI,IAAI,GAAG,KAAK,SAAS,GAAI,CACxD,GACQ,GACP,IACF,GACK,CACd,CAAC;AACJ,CAAC"}
@@ -1,2 +1,7 @@
1
- export declare function useVpnStatus(): void;
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":"AASA,wBAAgB,YAAY,SAiE3B"}
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"}