@schlessera/brain-ui-react 0.35.0 → 0.36.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 (755) hide show
  1. package/README.md +82 -4
  2. package/dist/components/activity/activity-page.d.ts +17 -5
  3. package/dist/components/activity/activity-page.d.ts.map +1 -1
  4. package/dist/components/activity/activity-page.js +144 -50
  5. package/dist/components/activity/activity-page.js.map +1 -1
  6. package/dist/components/activity/activity-run-detail.d.ts +16 -1
  7. package/dist/components/activity/activity-run-detail.d.ts.map +1 -1
  8. package/dist/components/activity/activity-run-detail.js +47 -4
  9. package/dist/components/activity/activity-run-detail.js.map +1 -1
  10. package/dist/components/activity/activity-run-list.d.ts +7 -1
  11. package/dist/components/activity/activity-run-list.d.ts.map +1 -1
  12. package/dist/components/activity/activity-run-list.js +16 -8
  13. package/dist/components/activity/activity-run-list.js.map +1 -1
  14. package/dist/components/activity/activity-views.d.ts +63 -0
  15. package/dist/components/activity/activity-views.d.ts.map +1 -0
  16. package/dist/components/activity/activity-views.js +52 -0
  17. package/dist/components/activity/activity-views.js.map +1 -0
  18. package/dist/components/activity/approval-card.d.ts +11 -0
  19. package/dist/components/activity/approval-card.d.ts.map +1 -0
  20. package/dist/components/activity/approval-card.js +46 -0
  21. package/dist/components/activity/approval-card.js.map +1 -0
  22. package/dist/components/activity/digest-card.d.ts +3 -0
  23. package/dist/components/activity/digest-card.d.ts.map +1 -1
  24. package/dist/components/activity/digest-card.js +20 -16
  25. package/dist/components/activity/digest-card.js.map +1 -1
  26. package/dist/components/activity/digest-summary.d.ts +19 -0
  27. package/dist/components/activity/digest-summary.d.ts.map +1 -0
  28. package/dist/components/activity/digest-summary.js +20 -0
  29. package/dist/components/activity/digest-summary.js.map +1 -0
  30. package/dist/components/activity/push-switch.d.ts +25 -0
  31. package/dist/components/activity/push-switch.d.ts.map +1 -0
  32. package/dist/components/activity/push-switch.js +14 -0
  33. package/dist/components/activity/push-switch.js.map +1 -0
  34. package/dist/components/activity/push-toggle.d.ts +7 -0
  35. package/dist/components/activity/push-toggle.d.ts.map +1 -1
  36. package/dist/components/activity/push-toggle.js +72 -47
  37. package/dist/components/activity/push-toggle.js.map +1 -1
  38. package/dist/components/activity/span-bits.d.ts.map +1 -1
  39. package/dist/components/activity/span-bits.js +9 -7
  40. package/dist/components/activity/span-bits.js.map +1 -1
  41. package/dist/components/chat/ask-user-card.d.ts +76 -3
  42. package/dist/components/chat/ask-user-card.d.ts.map +1 -1
  43. package/dist/components/chat/ask-user-card.js +208 -149
  44. package/dist/components/chat/ask-user-card.js.map +1 -1
  45. package/dist/components/chat/ask-user-typed.d.ts +42 -0
  46. package/dist/components/chat/ask-user-typed.d.ts.map +1 -0
  47. package/dist/components/chat/ask-user-typed.js +60 -0
  48. package/dist/components/chat/ask-user-typed.js.map +1 -0
  49. package/dist/components/chat/brain-markdown-links.d.ts +2 -1
  50. package/dist/components/chat/brain-markdown-links.d.ts.map +1 -1
  51. package/dist/components/chat/brain-markdown-links.js +3 -4
  52. package/dist/components/chat/brain-markdown-links.js.map +1 -1
  53. package/dist/components/chat/brain-markdown.d.ts.map +1 -1
  54. package/dist/components/chat/brain-markdown.js +4 -2
  55. package/dist/components/chat/brain-markdown.js.map +1 -1
  56. package/dist/components/chat/chat-page.d.ts.map +1 -1
  57. package/dist/components/chat/chat-page.js +24 -9
  58. package/dist/components/chat/chat-page.js.map +1 -1
  59. package/dist/components/chat/composer-view.d.ts +75 -0
  60. package/dist/components/chat/composer-view.d.ts.map +1 -0
  61. package/dist/components/chat/composer-view.js +31 -0
  62. package/dist/components/chat/composer-view.js.map +1 -0
  63. package/dist/components/chat/composer.d.ts +4 -0
  64. package/dist/components/chat/composer.d.ts.map +1 -1
  65. package/dist/components/chat/composer.js +76 -59
  66. package/dist/components/chat/composer.js.map +1 -1
  67. package/dist/components/chat/markdown-content.d.ts +16 -1
  68. package/dist/components/chat/markdown-content.d.ts.map +1 -1
  69. package/dist/components/chat/markdown-content.js +47 -3
  70. package/dist/components/chat/markdown-content.js.map +1 -1
  71. package/dist/components/chat/mermaid-block.d.ts +4 -0
  72. package/dist/components/chat/mermaid-block.d.ts.map +1 -1
  73. package/dist/components/chat/mermaid-block.js +13 -5
  74. package/dist/components/chat/mermaid-block.js.map +1 -1
  75. package/dist/components/chat/mermaid-share.d.ts +2 -1
  76. package/dist/components/chat/mermaid-share.d.ts.map +1 -1
  77. package/dist/components/chat/mermaid-share.js +7 -8
  78. package/dist/components/chat/mermaid-share.js.map +1 -1
  79. package/dist/components/chat/mermaid-viewer.d.ts.map +1 -1
  80. package/dist/components/chat/mermaid-viewer.js +3 -1
  81. package/dist/components/chat/mermaid-viewer.js.map +1 -1
  82. package/dist/components/chat/message-bubble.d.ts +8 -1
  83. package/dist/components/chat/message-bubble.d.ts.map +1 -1
  84. package/dist/components/chat/message-bubble.js +53 -24
  85. package/dist/components/chat/message-bubble.js.map +1 -1
  86. package/dist/components/chat/message-share.d.ts +2 -1
  87. package/dist/components/chat/message-share.d.ts.map +1 -1
  88. package/dist/components/chat/message-share.js +6 -7
  89. package/dist/components/chat/message-share.js.map +1 -1
  90. package/dist/components/chat/renderers/bind.d.ts +39 -0
  91. package/dist/components/chat/renderers/bind.d.ts.map +1 -0
  92. package/dist/components/chat/renderers/bind.js +43 -0
  93. package/dist/components/chat/renderers/bind.js.map +1 -0
  94. package/dist/components/chat/renderers/brain-ui-tools.d.ts +3 -0
  95. package/dist/components/chat/renderers/brain-ui-tools.d.ts.map +1 -0
  96. package/dist/components/chat/renderers/brain-ui-tools.js +41 -0
  97. package/dist/components/chat/renderers/brain-ui-tools.js.map +1 -0
  98. package/dist/components/chat/renderers/claude-tools.d.ts.map +1 -1
  99. package/dist/components/chat/renderers/claude-tools.js +3 -2
  100. package/dist/components/chat/renderers/claude-tools.js.map +1 -1
  101. package/dist/components/chat/renderers/index.d.ts +10 -2
  102. package/dist/components/chat/renderers/index.d.ts.map +1 -1
  103. package/dist/components/chat/renderers/index.js +15 -10
  104. package/dist/components/chat/renderers/index.js.map +1 -1
  105. package/dist/components/chat/session-drawer.d.ts +4 -0
  106. package/dist/components/chat/session-drawer.d.ts.map +1 -1
  107. package/dist/components/chat/session-drawer.js +32 -32
  108. package/dist/components/chat/session-drawer.js.map +1 -1
  109. package/dist/components/chat/session-list.d.ts +41 -0
  110. package/dist/components/chat/session-list.d.ts.map +1 -0
  111. package/dist/components/chat/session-list.js +10 -0
  112. package/dist/components/chat/session-list.js.map +1 -0
  113. package/dist/components/chat/share-block.d.ts.map +1 -1
  114. package/dist/components/chat/share-block.js +12 -11
  115. package/dist/components/chat/share-block.js.map +1 -1
  116. package/dist/components/chat/share-card.js +2 -2
  117. package/dist/components/chat/share-card.js.map +1 -1
  118. package/dist/components/chat/subagent-view.js +1 -1
  119. package/dist/components/chat/subagent-view.js.map +1 -1
  120. package/dist/components/chat/tool-call-timeline.d.ts.map +1 -1
  121. package/dist/components/chat/tool-call-timeline.js +37 -12
  122. package/dist/components/chat/tool-call-timeline.js.map +1 -1
  123. package/dist/components/chat/tool-cards/block-card.d.ts +28 -0
  124. package/dist/components/chat/tool-cards/block-card.d.ts.map +1 -0
  125. package/dist/components/chat/tool-cards/block-card.js +103 -0
  126. package/dist/components/chat/tool-cards/block-card.js.map +1 -0
  127. package/dist/components/chat/tool-cards/image-mask-card.d.ts +70 -0
  128. package/dist/components/chat/tool-cards/image-mask-card.d.ts.map +1 -0
  129. package/dist/components/chat/tool-cards/image-mask-card.js +142 -0
  130. package/dist/components/chat/tool-cards/image-mask-card.js.map +1 -0
  131. package/dist/components/chat/tool-cards/location-card.d.ts +45 -0
  132. package/dist/components/chat/tool-cards/location-card.d.ts.map +1 -0
  133. package/dist/components/chat/tool-cards/location-card.js +128 -0
  134. package/dist/components/chat/tool-cards/location-card.js.map +1 -0
  135. package/dist/components/chat/tool-views.d.ts +13 -2
  136. package/dist/components/chat/tool-views.d.ts.map +1 -1
  137. package/dist/components/chat/tool-views.js +20 -22
  138. package/dist/components/chat/tool-views.js.map +1 -1
  139. package/dist/components/chat/transcript-turn.d.ts +45 -0
  140. package/dist/components/chat/transcript-turn.d.ts.map +1 -0
  141. package/dist/components/chat/transcript-turn.js +25 -0
  142. package/dist/components/chat/transcript-turn.js.map +1 -0
  143. package/dist/components/chat/use-chat-commands.d.ts.map +1 -1
  144. package/dist/components/chat/use-chat-commands.js +13 -16
  145. package/dist/components/chat/use-chat-commands.js.map +1 -1
  146. package/dist/components/chat/welcome-state.d.ts +7 -0
  147. package/dist/components/chat/welcome-state.d.ts.map +1 -1
  148. package/dist/components/chat/welcome-state.js +13 -5
  149. package/dist/components/chat/welcome-state.js.map +1 -1
  150. package/dist/components/connectivity/connection-gate.d.ts.map +1 -1
  151. package/dist/components/connectivity/connection-gate.js +27 -21
  152. package/dist/components/connectivity/connection-gate.js.map +1 -1
  153. package/dist/components/connectivity/login-form.d.ts +31 -0
  154. package/dist/components/connectivity/login-form.d.ts.map +1 -0
  155. package/dist/components/connectivity/login-form.js +19 -0
  156. package/dist/components/connectivity/login-form.js.map +1 -0
  157. package/dist/components/connectivity/login-screen.d.ts +5 -2
  158. package/dist/components/connectivity/login-screen.d.ts.map +1 -1
  159. package/dist/components/connectivity/login-screen.js +41 -31
  160. package/dist/components/connectivity/login-screen.js.map +1 -1
  161. package/dist/components/dev/share-harness.js +1 -1
  162. package/dist/components/dev/share-harness.js.map +1 -1
  163. package/dist/components/files/file-panel.d.ts +1 -1
  164. package/dist/components/files/file-panel.d.ts.map +1 -1
  165. package/dist/components/files/file-panel.js +74 -0
  166. package/dist/components/files/file-panel.js.map +1 -1
  167. package/dist/components/files/file-tree-view.d.ts +45 -0
  168. package/dist/components/files/file-tree-view.d.ts.map +1 -0
  169. package/dist/components/files/file-tree-view.js +51 -0
  170. package/dist/components/files/file-tree-view.js.map +1 -0
  171. package/dist/components/files/file-tree.d.ts +6 -0
  172. package/dist/components/files/file-tree.d.ts.map +1 -1
  173. package/dist/components/files/file-tree.js +39 -43
  174. package/dist/components/files/file-tree.js.map +1 -1
  175. package/dist/components/files/file-viewer-binary.d.ts.map +1 -1
  176. package/dist/components/files/file-viewer-binary.js +3 -2
  177. package/dist/components/files/file-viewer-binary.js.map +1 -1
  178. package/dist/components/files/file-viewer-frame.d.ts +36 -0
  179. package/dist/components/files/file-viewer-frame.d.ts.map +1 -0
  180. package/dist/components/files/file-viewer-frame.js +26 -0
  181. package/dist/components/files/file-viewer-frame.js.map +1 -0
  182. package/dist/components/files/file-viewer.d.ts +5 -0
  183. package/dist/components/files/file-viewer.d.ts.map +1 -1
  184. package/dist/components/files/file-viewer.js +26 -32
  185. package/dist/components/files/file-viewer.js.map +1 -1
  186. package/dist/components/files/frontmatter-chips.d.ts +18 -0
  187. package/dist/components/files/frontmatter-chips.d.ts.map +1 -0
  188. package/dist/components/files/frontmatter-chips.js +11 -0
  189. package/dist/components/files/frontmatter-chips.js.map +1 -0
  190. package/dist/components/files/frontmatter-panel.d.ts +5 -1
  191. package/dist/components/files/frontmatter-panel.d.ts.map +1 -1
  192. package/dist/components/files/frontmatter-panel.js +7 -6
  193. package/dist/components/files/frontmatter-panel.js.map +1 -1
  194. package/dist/components/files/staleness.d.ts +18 -0
  195. package/dist/components/files/staleness.d.ts.map +1 -0
  196. package/dist/components/files/staleness.js +27 -0
  197. package/dist/components/files/staleness.js.map +1 -0
  198. package/dist/components/graph/graph-canvas.d.ts.map +1 -1
  199. package/dist/components/graph/graph-canvas.js +24 -1
  200. package/dist/components/graph/graph-canvas.js.map +1 -1
  201. package/dist/components/graph/graph-controls-column.d.ts +14 -0
  202. package/dist/components/graph/graph-controls-column.d.ts.map +1 -0
  203. package/dist/components/graph/graph-controls-column.js +44 -0
  204. package/dist/components/graph/graph-controls-column.js.map +1 -0
  205. package/dist/components/graph/graph-controls.d.ts +20 -5
  206. package/dist/components/graph/graph-controls.d.ts.map +1 -1
  207. package/dist/components/graph/graph-controls.js +58 -37
  208. package/dist/components/graph/graph-controls.js.map +1 -1
  209. package/dist/components/graph/graph-form.d.ts +82 -0
  210. package/dist/components/graph/graph-form.d.ts.map +1 -0
  211. package/dist/components/graph/graph-form.js +69 -0
  212. package/dist/components/graph/graph-form.js.map +1 -0
  213. package/dist/components/graph/graph-maintenance.d.ts.map +1 -1
  214. package/dist/components/graph/graph-maintenance.js +6 -10
  215. package/dist/components/graph/graph-maintenance.js.map +1 -1
  216. package/dist/components/graph/graph-node-rail.d.ts +13 -0
  217. package/dist/components/graph/graph-node-rail.d.ts.map +1 -0
  218. package/dist/components/graph/graph-node-rail.js +92 -0
  219. package/dist/components/graph/graph-node-rail.js.map +1 -0
  220. package/dist/components/graph/graph-page.d.ts +7 -0
  221. package/dist/components/graph/graph-page.d.ts.map +1 -1
  222. package/dist/components/graph/graph-page.js +102 -12
  223. package/dist/components/graph/graph-page.js.map +1 -1
  224. package/dist/components/graph/graph-scene.d.ts.map +1 -1
  225. package/dist/components/graph/graph-scene.js +100 -24
  226. package/dist/components/graph/graph-scene.js.map +1 -1
  227. package/dist/components/graph/lib/graph-helpers.d.ts +42 -12
  228. package/dist/components/graph/lib/graph-helpers.d.ts.map +1 -1
  229. package/dist/components/graph/lib/graph-helpers.js +33 -41
  230. package/dist/components/graph/lib/graph-helpers.js.map +1 -1
  231. package/dist/components/graph/node-card.d.ts +28 -0
  232. package/dist/components/graph/node-card.d.ts.map +1 -0
  233. package/dist/components/graph/node-card.js +7 -0
  234. package/dist/components/graph/node-card.js.map +1 -0
  235. package/dist/components/graph/node-popover.d.ts +6 -2
  236. package/dist/components/graph/node-popover.d.ts.map +1 -1
  237. package/dist/components/graph/node-popover.js +13 -31
  238. package/dist/components/graph/node-popover.js.map +1 -1
  239. package/dist/components/graph/use-graph-theme.d.ts +32 -4
  240. package/dist/components/graph/use-graph-theme.d.ts.map +1 -1
  241. package/dist/components/graph/use-graph-theme.js +44 -32
  242. package/dist/components/graph/use-graph-theme.js.map +1 -1
  243. package/dist/components/graph/use-node-actions.d.ts +26 -0
  244. package/dist/components/graph/use-node-actions.d.ts.map +1 -0
  245. package/dist/components/graph/use-node-actions.js +54 -0
  246. package/dist/components/graph/use-node-actions.js.map +1 -0
  247. package/dist/components/images/image-share.d.ts +2 -1
  248. package/dist/components/images/image-share.d.ts.map +1 -1
  249. package/dist/components/images/image-share.js +3 -3
  250. package/dist/components/images/image-share.js.map +1 -1
  251. package/dist/components/images/image-viewer.d.ts.map +1 -1
  252. package/dist/components/images/image-viewer.js +3 -1
  253. package/dist/components/images/image-viewer.js.map +1 -1
  254. package/dist/components/images/mask-editor.d.ts.map +1 -1
  255. package/dist/components/images/mask-editor.js +7 -5
  256. package/dist/components/images/mask-editor.js.map +1 -1
  257. package/dist/components/layout/app-shell.d.ts.map +1 -1
  258. package/dist/components/layout/app-shell.js +4 -1
  259. package/dist/components/layout/app-shell.js.map +1 -1
  260. package/dist/components/layout/desktop-palette.d.ts +23 -0
  261. package/dist/components/layout/desktop-palette.d.ts.map +1 -0
  262. package/dist/components/layout/desktop-palette.js +132 -0
  263. package/dist/components/layout/desktop-palette.js.map +1 -0
  264. package/dist/components/layout/key-cap.d.ts +9 -0
  265. package/dist/components/layout/key-cap.d.ts.map +1 -0
  266. package/dist/components/layout/key-cap.js +10 -0
  267. package/dist/components/layout/key-cap.js.map +1 -0
  268. package/dist/components/layout/mobile-tab-bar.d.ts +13 -0
  269. package/dist/components/layout/mobile-tab-bar.d.ts.map +1 -1
  270. package/dist/components/layout/mobile-tab-bar.js +58 -47
  271. package/dist/components/layout/mobile-tab-bar.js.map +1 -1
  272. package/dist/components/layout/shortcut-switch.d.ts +13 -0
  273. package/dist/components/layout/shortcut-switch.d.ts.map +1 -0
  274. package/dist/components/layout/shortcut-switch.js +22 -0
  275. package/dist/components/layout/shortcut-switch.js.map +1 -0
  276. package/dist/components/layout/side-rail.d.ts +24 -0
  277. package/dist/components/layout/side-rail.d.ts.map +1 -1
  278. package/dist/components/layout/side-rail.js +65 -27
  279. package/dist/components/layout/side-rail.js.map +1 -1
  280. package/dist/components/layout/slide-panel.d.ts +12 -2
  281. package/dist/components/layout/slide-panel.d.ts.map +1 -1
  282. package/dist/components/layout/slide-panel.js +11 -2
  283. package/dist/components/layout/slide-panel.js.map +1 -1
  284. package/dist/components/layout/theme.d.ts +22 -0
  285. package/dist/components/layout/theme.d.ts.map +1 -0
  286. package/dist/components/layout/theme.js +44 -0
  287. package/dist/components/layout/theme.js.map +1 -0
  288. package/dist/components/quick-actions/add-form.d.ts +44 -0
  289. package/dist/components/quick-actions/add-form.d.ts.map +1 -0
  290. package/dist/components/quick-actions/add-form.js +30 -0
  291. package/dist/components/quick-actions/add-form.js.map +1 -0
  292. package/dist/components/quick-actions/add-modal.d.ts +7 -0
  293. package/dist/components/quick-actions/add-modal.d.ts.map +1 -1
  294. package/dist/components/quick-actions/add-modal.js +23 -20
  295. package/dist/components/quick-actions/add-modal.js.map +1 -1
  296. package/dist/components/quick-actions/search-modal.d.ts.map +1 -1
  297. package/dist/components/quick-actions/search-modal.js +4 -3
  298. package/dist/components/quick-actions/search-modal.js.map +1 -1
  299. package/dist/components/quick-actions/streaming-modal.d.ts +6 -0
  300. package/dist/components/quick-actions/streaming-modal.d.ts.map +1 -1
  301. package/dist/components/quick-actions/streaming-modal.js +39 -17
  302. package/dist/components/quick-actions/streaming-modal.js.map +1 -1
  303. package/dist/components/quick-actions/streaming-output.d.ts +38 -0
  304. package/dist/components/quick-actions/streaming-output.d.ts.map +1 -0
  305. package/dist/components/quick-actions/streaming-output.js +22 -0
  306. package/dist/components/quick-actions/streaming-output.js.map +1 -0
  307. package/dist/components/quick-actions/whatsup-modal.d.ts +5 -0
  308. package/dist/components/quick-actions/whatsup-modal.d.ts.map +1 -1
  309. package/dist/components/quick-actions/whatsup-modal.js +36 -10
  310. package/dist/components/quick-actions/whatsup-modal.js.map +1 -1
  311. package/dist/components/settings/devices-agents-tab.d.ts +6 -1
  312. package/dist/components/settings/devices-agents-tab.d.ts.map +1 -1
  313. package/dist/components/settings/devices-agents-tab.js +55 -20
  314. package/dist/components/settings/devices-agents-tab.js.map +1 -1
  315. package/dist/components/settings/models-list.d.ts +39 -0
  316. package/dist/components/settings/models-list.d.ts.map +1 -0
  317. package/dist/components/settings/models-list.js +72 -0
  318. package/dist/components/settings/models-list.js.map +1 -0
  319. package/dist/components/settings/models-tab.d.ts +4 -0
  320. package/dist/components/settings/models-tab.d.ts.map +1 -1
  321. package/dist/components/settings/models-tab.js +52 -102
  322. package/dist/components/settings/models-tab.js.map +1 -1
  323. package/dist/components/settings/one-time-agent-credential.js +1 -1
  324. package/dist/components/settings/one-time-agent-credential.js.map +1 -1
  325. package/dist/components/settings/passkey-list.d.ts +35 -0
  326. package/dist/components/settings/passkey-list.d.ts.map +1 -0
  327. package/dist/components/settings/passkey-list.js +34 -0
  328. package/dist/components/settings/passkey-list.js.map +1 -0
  329. package/dist/components/settings/passkey-tab.d.ts +3 -0
  330. package/dist/components/settings/passkey-tab.d.ts.map +1 -1
  331. package/dist/components/settings/passkey-tab.js +53 -45
  332. package/dist/components/settings/passkey-tab.js.map +1 -1
  333. package/dist/components/settings/pi-accounts-list.d.ts +27 -0
  334. package/dist/components/settings/pi-accounts-list.d.ts.map +1 -0
  335. package/dist/components/settings/pi-accounts-list.js +15 -0
  336. package/dist/components/settings/pi-accounts-list.js.map +1 -0
  337. package/dist/components/settings/pi-accounts.d.ts +3 -0
  338. package/dist/components/settings/pi-accounts.d.ts.map +1 -1
  339. package/dist/components/settings/pi-accounts.js +73 -55
  340. package/dist/components/settings/pi-accounts.js.map +1 -1
  341. package/dist/components/settings/principal-list.d.ts +37 -0
  342. package/dist/components/settings/principal-list.d.ts.map +1 -0
  343. package/dist/components/settings/principal-list.js +18 -0
  344. package/dist/components/settings/principal-list.js.map +1 -0
  345. package/dist/components/settings/settings-panel.d.ts +10 -3
  346. package/dist/components/settings/settings-panel.d.ts.map +1 -1
  347. package/dist/components/settings/settings-panel.js +69 -8
  348. package/dist/components/settings/settings-panel.js.map +1 -1
  349. package/dist/components/settings/skills-list.d.ts +53 -0
  350. package/dist/components/settings/skills-list.d.ts.map +1 -0
  351. package/dist/components/settings/skills-list.js +28 -0
  352. package/dist/components/settings/skills-list.js.map +1 -0
  353. package/dist/components/settings/skills-tab.d.ts.map +1 -1
  354. package/dist/components/settings/skills-tab.js +65 -38
  355. package/dist/components/settings/skills-tab.js.map +1 -1
  356. package/dist/components/settings/tool-permissions-list.d.ts +18 -0
  357. package/dist/components/settings/tool-permissions-list.d.ts.map +1 -0
  358. package/dist/components/settings/tool-permissions-list.js +6 -0
  359. package/dist/components/settings/tool-permissions-list.js.map +1 -0
  360. package/dist/components/settings/tool-permissions.d.ts +2 -1
  361. package/dist/components/settings/tool-permissions.d.ts.map +1 -1
  362. package/dist/components/settings/tool-permissions.js +33 -16
  363. package/dist/components/settings/tool-permissions.js.map +1 -1
  364. package/dist/components/settings/web-search-chain.d.ts +41 -0
  365. package/dist/components/settings/web-search-chain.d.ts.map +1 -0
  366. package/dist/components/settings/web-search-chain.js +47 -0
  367. package/dist/components/settings/web-search-chain.js.map +1 -0
  368. package/dist/components/settings/web-search-settings.d.ts +4 -7
  369. package/dist/components/settings/web-search-settings.d.ts.map +1 -1
  370. package/dist/components/settings/web-search-settings.js +54 -76
  371. package/dist/components/settings/web-search-settings.js.map +1 -1
  372. package/dist/components/share/share-menu.d.ts.map +1 -1
  373. package/dist/components/share/share-menu.js +24 -4
  374. package/dist/components/share/share-menu.js.map +1 -1
  375. package/dist/components/voice/dictation-sheet.js +3 -3
  376. package/dist/components/voice/dictation-sheet.js.map +1 -1
  377. package/dist/components/voice/mic-button.js +1 -1
  378. package/dist/components/voice/mic-button.js.map +1 -1
  379. package/dist/components/voice/review-card.js +1 -1
  380. package/dist/components/voice/review-card.js.map +1 -1
  381. package/dist/config.d.ts +5 -2
  382. package/dist/config.d.ts.map +1 -1
  383. package/dist/config.js +15 -5
  384. package/dist/config.js.map +1 -1
  385. package/dist/connection.d.ts +12 -0
  386. package/dist/connection.d.ts.map +1 -0
  387. package/dist/connection.js +421 -0
  388. package/dist/connection.js.map +1 -0
  389. package/dist/default-root.d.ts +3 -0
  390. package/dist/default-root.d.ts.map +1 -0
  391. package/dist/default-root.js +16 -0
  392. package/dist/default-root.js.map +1 -0
  393. package/dist/hooks/use-color-scheme.d.ts +14 -0
  394. package/dist/hooks/use-color-scheme.d.ts.map +1 -0
  395. package/dist/hooks/use-color-scheme.js +37 -0
  396. package/dist/hooks/use-color-scheme.js.map +1 -0
  397. package/dist/hooks/use-hash-routes.d.ts.map +1 -1
  398. package/dist/hooks/use-hash-routes.js +4 -2
  399. package/dist/hooks/use-hash-routes.js.map +1 -1
  400. package/dist/hooks/use-media-query.d.ts +7 -0
  401. package/dist/hooks/use-media-query.d.ts.map +1 -0
  402. package/dist/hooks/use-media-query.js +34 -0
  403. package/dist/hooks/use-media-query.js.map +1 -0
  404. package/dist/hooks/use-share-intake.d.ts.map +1 -1
  405. package/dist/hooks/use-share-intake.js +37 -12
  406. package/dist/hooks/use-share-intake.js.map +1 -1
  407. package/dist/hooks/use-vpn-status.d.ts.map +1 -1
  408. package/dist/hooks/use-vpn-status.js +17 -18
  409. package/dist/hooks/use-vpn-status.js.map +1 -1
  410. package/dist/hooks/use-websocket.d.ts +5 -24
  411. package/dist/hooks/use-websocket.d.ts.map +1 -1
  412. package/dist/hooks/use-websocket.js +11 -384
  413. package/dist/hooks/use-websocket.js.map +1 -1
  414. package/dist/hooks/websocket-handlers/activity.d.ts +2 -2
  415. package/dist/hooks/websocket-handlers/activity.d.ts.map +1 -1
  416. package/dist/hooks/websocket-handlers/activity.js +4 -5
  417. package/dist/hooks/websocket-handlers/activity.js.map +1 -1
  418. package/dist/hooks/websocket-handlers/chat.d.ts +1 -0
  419. package/dist/hooks/websocket-handlers/chat.d.ts.map +1 -1
  420. package/dist/hooks/websocket-handlers/chat.js +27 -5
  421. package/dist/hooks/websocket-handlers/chat.js.map +1 -1
  422. package/dist/hooks/websocket-handlers/connection.d.ts.map +1 -1
  423. package/dist/hooks/websocket-handlers/connection.js +4 -6
  424. package/dist/hooks/websocket-handlers/connection.js.map +1 -1
  425. package/dist/hooks/websocket-handlers/mask.d.ts +1 -1
  426. package/dist/hooks/websocket-handlers/mask.d.ts.map +1 -1
  427. package/dist/hooks/websocket-handlers/mask.js +2 -3
  428. package/dist/hooks/websocket-handlers/mask.js.map +1 -1
  429. package/dist/hooks/websocket-handlers/provider.d.ts.map +1 -1
  430. package/dist/hooks/websocket-handlers/provider.js +4 -6
  431. package/dist/hooks/websocket-handlers/provider.js.map +1 -1
  432. package/dist/hooks/websocket-handlers/types.d.ts +6 -2
  433. package/dist/hooks/websocket-handlers/types.d.ts.map +1 -1
  434. package/dist/index.d.ts +5 -3
  435. package/dist/index.d.ts.map +1 -1
  436. package/dist/index.js +6 -3
  437. package/dist/index.js.map +1 -1
  438. package/dist/lib/api-client.d.ts +289 -0
  439. package/dist/lib/api-client.d.ts.map +1 -1
  440. package/dist/lib/api-client.js +243 -224
  441. package/dist/lib/api-client.js.map +1 -1
  442. package/dist/lib/backend.d.ts +19 -2
  443. package/dist/lib/backend.d.ts.map +1 -1
  444. package/dist/lib/backend.js +15 -9
  445. package/dist/lib/backend.js.map +1 -1
  446. package/dist/lib/diff.d.ts +8 -10
  447. package/dist/lib/diff.d.ts.map +1 -1
  448. package/dist/lib/diff.js +26 -53
  449. package/dist/lib/diff.js.map +1 -1
  450. package/dist/lib/light-dark.d.ts +37 -0
  451. package/dist/lib/light-dark.d.ts.map +1 -0
  452. package/dist/lib/light-dark.js +83 -0
  453. package/dist/lib/light-dark.js.map +1 -0
  454. package/dist/lib/mermaid-theme.d.ts +7 -2
  455. package/dist/lib/mermaid-theme.d.ts.map +1 -1
  456. package/dist/lib/mermaid-theme.js +125 -203
  457. package/dist/lib/mermaid-theme.js.map +1 -1
  458. package/dist/lib/passkeys.d.ts +6 -3
  459. package/dist/lib/passkeys.d.ts.map +1 -1
  460. package/dist/lib/passkeys.js +10 -4
  461. package/dist/lib/passkeys.js.map +1 -1
  462. package/dist/lib/push-registration.d.ts +4 -1
  463. package/dist/lib/push-registration.d.ts.map +1 -1
  464. package/dist/lib/push-registration.js +20 -2
  465. package/dist/lib/push-registration.js.map +1 -1
  466. package/dist/lib/share-intake.d.ts +2 -1
  467. package/dist/lib/share-intake.d.ts.map +1 -1
  468. package/dist/lib/share-intake.js +3 -3
  469. package/dist/lib/share-intake.js.map +1 -1
  470. package/dist/lib/share.d.ts +4 -3
  471. package/dist/lib/share.d.ts.map +1 -1
  472. package/dist/lib/share.js +6 -7
  473. package/dist/lib/share.js.map +1 -1
  474. package/dist/lib/single-key.d.ts +30 -0
  475. package/dist/lib/single-key.d.ts.map +1 -0
  476. package/dist/lib/single-key.js +45 -0
  477. package/dist/lib/single-key.js.map +1 -0
  478. package/dist/lib/tool-names.d.ts +8 -6
  479. package/dist/lib/tool-names.d.ts.map +1 -1
  480. package/dist/lib/tool-names.js +17 -7
  481. package/dist/lib/tool-names.js.map +1 -1
  482. package/dist/root-context.d.ts +229 -0
  483. package/dist/root-context.d.ts.map +1 -0
  484. package/dist/root-context.js +33 -0
  485. package/dist/root-context.js.map +1 -0
  486. package/dist/root.d.ts +38 -0
  487. package/dist/root.d.ts.map +1 -0
  488. package/dist/root.js +47 -0
  489. package/dist/root.js.map +1 -0
  490. package/dist/stores/activity-state.d.ts +29 -0
  491. package/dist/stores/activity-state.d.ts.map +1 -0
  492. package/dist/stores/activity-state.js +282 -0
  493. package/dist/stores/activity-state.js.map +1 -0
  494. package/dist/stores/activity-store.d.ts +10 -41
  495. package/dist/stores/activity-store.d.ts.map +1 -1
  496. package/dist/stores/activity-store.js +9 -271
  497. package/dist/stores/activity-store.js.map +1 -1
  498. package/dist/stores/chat-state.d.ts +212 -0
  499. package/dist/stores/chat-state.d.ts.map +1 -0
  500. package/dist/stores/chat-state.js +466 -0
  501. package/dist/stores/chat-state.js.map +1 -0
  502. package/dist/stores/chat-store.d.ts +4 -162
  503. package/dist/stores/chat-store.d.ts.map +1 -1
  504. package/dist/stores/chat-store.js +7 -418
  505. package/dist/stores/chat-store.js.map +1 -1
  506. package/dist/stores/connection-state.d.ts +40 -0
  507. package/dist/stores/connection-state.d.ts.map +1 -0
  508. package/dist/stores/connection-state.js +30 -0
  509. package/dist/stores/connection-state.js.map +1 -0
  510. package/dist/stores/connection-store.d.ts +4 -40
  511. package/dist/stores/connection-store.d.ts.map +1 -1
  512. package/dist/stores/connection-store.js +7 -27
  513. package/dist/stores/connection-store.js.map +1 -1
  514. package/dist/stores/create-stores.d.ts +23 -0
  515. package/dist/stores/create-stores.d.ts.map +1 -0
  516. package/dist/stores/create-stores.js +28 -0
  517. package/dist/stores/create-stores.js.map +1 -0
  518. package/dist/stores/file-state.d.ts +53 -0
  519. package/dist/stores/file-state.d.ts.map +1 -0
  520. package/dist/stores/file-state.js +341 -0
  521. package/dist/stores/file-state.js.map +1 -0
  522. package/dist/stores/file-store.d.ts +4 -52
  523. package/dist/stores/file-store.d.ts.map +1 -1
  524. package/dist/stores/file-store.js +7 -336
  525. package/dist/stores/file-store.js.map +1 -1
  526. package/dist/stores/graph-state.d.ts +95 -0
  527. package/dist/stores/graph-state.d.ts.map +1 -0
  528. package/dist/stores/graph-state.js +252 -0
  529. package/dist/stores/graph-state.js.map +1 -0
  530. package/dist/stores/graph-store.d.ts +7 -83
  531. package/dist/stores/graph-store.d.ts.map +1 -1
  532. package/dist/stores/graph-store.js +8 -249
  533. package/dist/stores/graph-store.js.map +1 -1
  534. package/dist/stores/mask-state.d.ts +21 -0
  535. package/dist/stores/mask-state.d.ts.map +1 -0
  536. package/dist/stores/mask-state.js +9 -0
  537. package/dist/stores/mask-state.js.map +1 -0
  538. package/dist/stores/mask-store.d.ts +4 -21
  539. package/dist/stores/mask-store.d.ts.map +1 -1
  540. package/dist/stores/mask-store.js +7 -6
  541. package/dist/stores/mask-store.js.map +1 -1
  542. package/dist/stores/principal-state.d.ts +16 -0
  543. package/dist/stores/principal-state.d.ts.map +1 -0
  544. package/dist/stores/principal-state.js +31 -0
  545. package/dist/stores/principal-state.js.map +1 -0
  546. package/dist/stores/principal-store.d.ts +4 -15
  547. package/dist/stores/principal-store.d.ts.map +1 -1
  548. package/dist/stores/principal-store.js +7 -28
  549. package/dist/stores/principal-store.js.map +1 -1
  550. package/dist/stores/provider-state.d.ts +24 -0
  551. package/dist/stores/provider-state.d.ts.map +1 -0
  552. package/dist/stores/provider-state.js +68 -0
  553. package/dist/stores/provider-state.js.map +1 -0
  554. package/dist/stores/provider-store.d.ts +4 -23
  555. package/dist/stores/provider-store.d.ts.map +1 -1
  556. package/dist/stores/provider-store.js +7 -64
  557. package/dist/stores/provider-store.js.map +1 -1
  558. package/dist/stores/share-state.d.ts +29 -0
  559. package/dist/stores/share-state.d.ts.map +1 -0
  560. package/dist/stores/share-state.js +21 -0
  561. package/dist/stores/share-state.js.map +1 -0
  562. package/dist/stores/share-store.d.ts +4 -28
  563. package/dist/stores/share-store.d.ts.map +1 -1
  564. package/dist/stores/share-store.js +7 -18
  565. package/dist/stores/share-store.js.map +1 -1
  566. package/dist/stores/store-environment.d.ts +10 -0
  567. package/dist/stores/store-environment.d.ts.map +1 -0
  568. package/dist/stores/store-environment.js +2 -0
  569. package/dist/stores/store-environment.js.map +1 -0
  570. package/dist/stores/ui-state.d.ts +71 -0
  571. package/dist/stores/ui-state.d.ts.map +1 -0
  572. package/dist/stores/ui-state.js +58 -0
  573. package/dist/stores/ui-state.js.map +1 -0
  574. package/dist/stores/ui-store.d.ts +4 -45
  575. package/dist/stores/ui-store.d.ts.map +1 -1
  576. package/dist/stores/ui-store.js +7 -36
  577. package/dist/stores/ui-store.js.map +1 -1
  578. package/dist/styles.css +1 -1
  579. package/dist/theme.css +150 -97
  580. package/dist/voice/asr-clients.d.ts +2 -1
  581. package/dist/voice/asr-clients.d.ts.map +1 -1
  582. package/dist/voice/asr-clients.js +16 -17
  583. package/dist/voice/asr-clients.js.map +1 -1
  584. package/dist/voice/use-dictation.d.ts.map +1 -1
  585. package/dist/voice/use-dictation.js +12 -8
  586. package/dist/voice/use-dictation.js.map +1 -1
  587. package/dist/voice/voice-state.d.ts +25 -0
  588. package/dist/voice/voice-state.d.ts.map +1 -0
  589. package/dist/voice/voice-state.js +29 -0
  590. package/dist/voice/voice-state.js.map +1 -0
  591. package/dist/voice/voice-store.d.ts +4 -25
  592. package/dist/voice/voice-store.d.ts.map +1 -1
  593. package/dist/voice/voice-store.js +7 -26
  594. package/dist/voice/voice-store.js.map +1 -1
  595. package/package.json +3 -2
  596. package/src/components/activity/activity-page.tsx +334 -160
  597. package/src/components/activity/activity-run-detail.tsx +81 -47
  598. package/src/components/activity/activity-run-list.tsx +27 -59
  599. package/src/components/activity/activity-views.tsx +155 -0
  600. package/src/components/activity/approval-card.tsx +80 -0
  601. package/src/components/activity/digest-card.tsx +25 -61
  602. package/src/components/activity/digest-summary.tsx +52 -0
  603. package/src/components/activity/push-switch.tsx +62 -0
  604. package/src/components/activity/push-toggle.tsx +51 -81
  605. package/src/components/activity/span-bits.tsx +8 -7
  606. package/src/components/chat/ask-user-card.tsx +292 -356
  607. package/src/components/chat/ask-user-typed.ts +77 -0
  608. package/src/components/chat/brain-markdown-links.tsx +4 -4
  609. package/src/components/chat/brain-markdown.tsx +4 -2
  610. package/src/components/chat/chat-page.tsx +38 -9
  611. package/src/components/chat/composer-view.tsx +194 -0
  612. package/src/components/chat/composer.tsx +117 -296
  613. package/src/components/chat/markdown-content.tsx +53 -2
  614. package/src/components/chat/mermaid-block.tsx +13 -5
  615. package/src/components/chat/mermaid-share.ts +8 -7
  616. package/src/components/chat/mermaid-viewer.tsx +3 -1
  617. package/src/components/chat/message-bubble.tsx +78 -94
  618. package/src/components/chat/message-share.ts +7 -7
  619. package/src/components/chat/renderers/bind.tsx +94 -0
  620. package/src/components/chat/renderers/brain-ui-tools.tsx +56 -0
  621. package/src/components/chat/renderers/claude-tools.tsx +3 -2
  622. package/src/components/chat/renderers/index.ts +15 -10
  623. package/src/components/chat/session-drawer.tsx +41 -138
  624. package/src/components/chat/session-list.tsx +113 -0
  625. package/src/components/chat/share-block.tsx +16 -12
  626. package/src/components/chat/share-card.tsx +2 -2
  627. package/src/components/chat/subagent-view.tsx +4 -4
  628. package/src/components/chat/tool-call-timeline.tsx +59 -22
  629. package/src/components/chat/tool-cards/block-card.tsx +145 -0
  630. package/src/components/chat/tool-cards/image-mask-card.tsx +214 -0
  631. package/src/components/chat/tool-cards/location-card.tsx +159 -0
  632. package/src/components/chat/tool-views.tsx +21 -60
  633. package/src/components/chat/transcript-turn.tsx +108 -0
  634. package/src/components/chat/use-chat-commands.ts +14 -16
  635. package/src/components/chat/welcome-state.tsx +36 -91
  636. package/src/components/connectivity/connection-gate.tsx +32 -24
  637. package/src/components/connectivity/login-form.tsx +122 -0
  638. package/src/components/connectivity/login-screen.tsx +45 -100
  639. package/src/components/dev/share-harness.tsx +2 -2
  640. package/src/components/files/file-panel.tsx +168 -0
  641. package/src/components/files/file-tree-view.tsx +127 -0
  642. package/src/components/files/file-tree.tsx +55 -109
  643. package/src/components/files/file-viewer-binary.tsx +3 -2
  644. package/src/components/files/file-viewer-frame.tsx +113 -0
  645. package/src/components/files/file-viewer.tsx +40 -95
  646. package/src/components/files/frontmatter-chips.tsx +42 -0
  647. package/src/components/files/frontmatter-panel.tsx +6 -71
  648. package/src/components/files/staleness.ts +29 -0
  649. package/src/components/graph/graph-canvas.tsx +24 -1
  650. package/src/components/graph/graph-controls-column.tsx +92 -0
  651. package/src/components/graph/graph-controls.tsx +83 -127
  652. package/src/components/graph/graph-form.tsx +183 -0
  653. package/src/components/graph/graph-maintenance.tsx +9 -14
  654. package/src/components/graph/graph-node-rail.tsx +147 -0
  655. package/src/components/graph/graph-page.tsx +189 -49
  656. package/src/components/graph/graph-scene.tsx +200 -30
  657. package/src/components/graph/lib/graph-helpers.ts +65 -43
  658. package/src/components/graph/node-card.tsx +64 -0
  659. package/src/components/graph/node-popover.tsx +28 -117
  660. package/src/components/graph/use-graph-theme.ts +69 -32
  661. package/src/components/graph/use-node-actions.ts +56 -0
  662. package/src/components/images/image-share.ts +4 -2
  663. package/src/components/images/image-viewer.tsx +3 -1
  664. package/src/components/images/mask-editor.tsx +7 -4
  665. package/src/components/layout/app-shell.tsx +5 -1
  666. package/src/components/layout/desktop-palette.tsx +151 -0
  667. package/src/components/layout/key-cap.tsx +15 -0
  668. package/src/components/layout/mobile-tab-bar.tsx +80 -157
  669. package/src/components/layout/shortcut-switch.tsx +32 -0
  670. package/src/components/layout/side-rail.tsx +70 -150
  671. package/src/components/layout/slide-panel.tsx +29 -2
  672. package/src/components/layout/theme.tsx +67 -0
  673. package/src/components/quick-actions/add-form.tsx +188 -0
  674. package/src/components/quick-actions/add-modal.tsx +32 -153
  675. package/src/components/quick-actions/search-modal.tsx +5 -3
  676. package/src/components/quick-actions/streaming-modal.tsx +42 -71
  677. package/src/components/quick-actions/streaming-output.tsx +112 -0
  678. package/src/components/quick-actions/whatsup-modal.tsx +38 -60
  679. package/src/components/settings/devices-agents-tab.tsx +60 -152
  680. package/src/components/settings/models-list.tsx +299 -0
  681. package/src/components/settings/models-tab.tsx +63 -337
  682. package/src/components/settings/one-time-agent-credential.tsx +1 -1
  683. package/src/components/settings/passkey-list.tsx +201 -0
  684. package/src/components/settings/passkey-tab.tsx +53 -197
  685. package/src/components/settings/pi-accounts-list.tsx +128 -0
  686. package/src/components/settings/pi-accounts.tsx +71 -170
  687. package/src/components/settings/principal-list.tsx +172 -0
  688. package/src/components/settings/settings-panel.tsx +232 -21
  689. package/src/components/settings/skills-list.tsx +276 -0
  690. package/src/components/settings/skills-tab.tsx +82 -269
  691. package/src/components/settings/tool-permissions-list.tsx +54 -0
  692. package/src/components/settings/tool-permissions.tsx +27 -46
  693. package/src/components/settings/web-search-chain.tsx +300 -0
  694. package/src/components/settings/web-search-settings.tsx +58 -328
  695. package/src/components/share/share-menu.tsx +19 -4
  696. package/src/components/voice/dictation-sheet.tsx +5 -5
  697. package/src/components/voice/mic-button.tsx +1 -1
  698. package/src/components/voice/review-card.tsx +1 -1
  699. package/src/config.ts +21 -7
  700. package/src/connection.ts +443 -0
  701. package/src/default-root.ts +16 -0
  702. package/src/hooks/use-color-scheme.ts +36 -0
  703. package/src/hooks/use-hash-routes.ts +4 -2
  704. package/src/hooks/use-media-query.ts +32 -0
  705. package/src/hooks/use-share-intake.ts +32 -12
  706. package/src/hooks/use-vpn-status.ts +18 -17
  707. package/src/hooks/use-websocket.ts +12 -428
  708. package/src/hooks/websocket-handlers/activity.ts +4 -5
  709. package/src/hooks/websocket-handlers/chat.ts +26 -5
  710. package/src/hooks/websocket-handlers/connection.ts +4 -6
  711. package/src/hooks/websocket-handlers/mask.ts +2 -3
  712. package/src/hooks/websocket-handlers/provider.ts +4 -6
  713. package/src/hooks/websocket-handlers/types.ts +6 -2
  714. package/src/index.ts +7 -3
  715. package/src/lib/api-client.ts +426 -384
  716. package/src/lib/backend.ts +20 -10
  717. package/src/lib/diff.ts +28 -62
  718. package/src/lib/light-dark.ts +83 -0
  719. package/src/lib/mermaid-theme.ts +183 -214
  720. package/src/lib/passkeys.ts +12 -4
  721. package/src/lib/push-registration.ts +19 -2
  722. package/src/lib/share-intake.ts +6 -3
  723. package/src/lib/share.ts +7 -4
  724. package/src/lib/single-key.ts +47 -0
  725. package/src/lib/tool-names.ts +31 -8
  726. package/src/root-context.tsx +40 -0
  727. package/src/root.ts +83 -0
  728. package/src/stores/activity-state.ts +295 -0
  729. package/src/stores/activity-store.ts +11 -285
  730. package/src/stores/chat-state.ts +795 -0
  731. package/src/stores/chat-store.ts +11 -705
  732. package/src/stores/connection-state.ts +78 -0
  733. package/src/stores/connection-store.ts +11 -76
  734. package/src/stores/create-stores.ts +31 -0
  735. package/src/stores/file-state.ts +399 -0
  736. package/src/stores/file-store.ts +9 -390
  737. package/src/stores/graph-state.ts +368 -0
  738. package/src/stores/graph-store.ts +10 -355
  739. package/src/stores/mask-state.ts +30 -0
  740. package/src/stores/mask-store.ts +10 -27
  741. package/src/stores/principal-state.ts +42 -0
  742. package/src/stores/principal-store.ts +10 -37
  743. package/src/stores/provider-state.ts +103 -0
  744. package/src/stores/provider-store.ts +10 -95
  745. package/src/stores/share-state.ts +56 -0
  746. package/src/stores/share-store.ts +11 -54
  747. package/src/stores/store-environment.ts +10 -0
  748. package/src/stores/ui-state.ts +143 -0
  749. package/src/stores/ui-store.ts +11 -93
  750. package/src/styles.css +4 -1
  751. package/src/theme.css +150 -97
  752. package/src/voice/asr-clients.ts +17 -17
  753. package/src/voice/use-dictation.ts +11 -8
  754. package/src/voice/voice-state.ts +57 -0
  755. package/src/voice/voice-store.ts +11 -55
@@ -1,42 +1,49 @@
1
+ import { useBrainUiRoot } from "../../root-context.js";
1
2
  import { useEffect, useRef, useState } from "react";
2
3
  import { Loader2, Search, SlidersHorizontal, X } from "lucide-react";
3
- import { api, type BrainSearchHit } from "../../lib/api-client.js";
4
+ import type { BrainSearchHit } from "../../lib/api-client.js";
5
+ import { useMediaQuery } from "../../hooks/use-media-query.js";
4
6
  import {
5
7
  useGraphStore,
6
8
  type DiscoveryColorBy,
7
9
  type LocalDirection,
8
10
  type SizeBy,
9
11
  } from "../../stores/graph-store.js";
10
- import { cn } from "../../lib/utils.js";
12
+ import { Field, Rows, Segmented, ToggleRow, ValueRow } from "./graph-form.js";
13
+
14
+ /** D22's ladder: the expanded rail, and D6's controls column, from 900. */
15
+ export const LAPTOP_QUERY = "(min-width: 900px)";
16
+ /** D6's four-pane rule: the right rail needs 1440. */
17
+ export const WIDE_QUERY = "(min-width: 1440px)";
18
+
19
+ const DEPTHS = [1, 2, 3] as const;
11
20
 
12
21
  /**
13
- * Per-mode option forms. Desktop: a floating card in the top-right of the
14
- * canvas. Mobile: a slide-up sheet behind a filter button (tap targets kept
15
- * at ≥44px). Only the options that matter per mode — everything else stays
16
- * out until a later phase earns it.
22
+ * Per-mode option forms. Below `laptop:` they live in a slide-up sheet
23
+ * behind a filter button (tap targets kept at >= 44px). From `laptop:` up
24
+ * the D6 controls column (`GraphControlsColumn`) owns `ControlsBody` and
25
+ * this overlay renders nothing — one picker in the DOM, never two.
26
+ *
27
+ * This is the container (S7): every option reads and writes the graph
28
+ * store; the form primitives are `graph-form.tsx`, on the kit.
17
29
  */
18
30
  export function GraphControls() {
19
31
  const [mobileOpen, setMobileOpen] = useState(false);
32
+ const laptop = useMediaQuery(LAPTOP_QUERY);
33
+ if (laptop) return null;
20
34
 
21
35
  return (
22
36
  <>
23
- {/* Mobile: floating filter button */}
24
37
  <button
25
38
  onClick={() => setMobileOpen(true)}
26
- className="absolute right-3 top-3 z-10 flex h-11 w-11 items-center justify-center rounded-full border border-border bg-surface-overlay text-foreground shadow-lg md:hidden"
39
+ className="absolute right-3 top-3 z-10 flex h-11 w-11 items-center justify-center rounded-full border border-border bg-surface-overlay text-foreground shadow-lg"
27
40
  title="Graph options"
28
41
  >
29
42
  <SlidersHorizontal className="h-4.5 w-4.5" />
30
43
  </button>
31
44
 
32
- {/* Desktop: docked card */}
33
- <div className="absolute right-4 top-4 z-10 hidden w-64 rounded-xl border border-border bg-surface-overlay/95 p-4 shadow-xl backdrop-blur md:block">
34
- <ControlsBody />
35
- </div>
36
-
37
- {/* Mobile: bottom sheet */}
38
45
  {mobileOpen && (
39
- <div className="fixed inset-0 z-40 md:hidden">
46
+ <div className="fixed inset-0 z-40">
40
47
  <div
41
48
  className="absolute inset-0 bg-background/60"
42
49
  onClick={() => setMobileOpen(false)}
@@ -60,19 +67,46 @@ export function GraphControls() {
60
67
  );
61
68
  }
62
69
 
63
- function ControlsBody() {
70
+ /** The per-mode form. Shared by the phone sheet and the D6 column. */
71
+ export function ControlsBody() {
64
72
  const mode = useGraphStore((s) => s.mode);
65
73
  return (
66
74
  <div className="flex flex-col gap-4">
67
75
  <SceneSearch />
68
76
  {mode === "local" && <LocalControls />}
69
77
  {mode === "discovery" && <DiscoveryControls />}
78
+ {(mode === "local" || mode === "discovery") && <ColourControls />}
70
79
  {mode === "clusters" && <ClustersControls />}
71
80
  {mode === "maintenance" && <MaintenanceControls />}
72
81
  </div>
73
82
  );
74
83
  }
75
84
 
85
+ /** The four colourings, in the design's order. */
86
+ export const COLOUR_RULES: { value: DiscoveryColorBy; label: string }[] = [
87
+ { value: "topic", label: "Topic" },
88
+ { value: "distance", label: "Distance" },
89
+ { value: "folder", label: "Folder" },
90
+ { value: "entity", label: "Entity" },
91
+ ];
92
+
93
+ /**
94
+ * D6's `Label "Colour"` + `FilterRow` (topic · distance · folder · entity),
95
+ * for the two modes drawn around a focus node. Every rule is servable from
96
+ * what a node carries — `community`, `distance`, `path`, `type` — so none is
97
+ * disabled; a corpus with no computed topics colours everything neutral
98
+ * under "Topic" and the legend says so, rather than hiding the rule.
99
+ */
100
+ function ColourControls() {
101
+ const colorBy = useGraphStore((s) => s.discoveryColorBy);
102
+ const setColorBy = useGraphStore((s) => s.setDiscoveryColorBy);
103
+ return (
104
+ <Field label="Colour">
105
+ <Segmented options={COLOUR_RULES} value={colorBy} onChange={(v) => setColorBy(v as DiscoveryColorBy)} />
106
+ </Field>
107
+ );
108
+ }
109
+
76
110
  /** Highlights matches in the current scene — no refetch. */
77
111
  function SceneSearch() {
78
112
  const sceneQuery = useGraphStore((s) => s.sceneQuery);
@@ -113,17 +147,6 @@ function LocalControls() {
113
147
  onPick={(path) => setLocalParams({ center: path })}
114
148
  />
115
149
  </Field>
116
- <Field label="Depth">
117
- <Segmented
118
- options={[
119
- { value: "1", label: "1" },
120
- { value: "2", label: "2" },
121
- { value: "3", label: "3" },
122
- ]}
123
- value={String(local.depth)}
124
- onChange={(v) => setLocalParams({ depth: Number(v) as 1 | 2 | 3 })}
125
- />
126
- </Field>
127
150
  <Field label="Direction">
128
151
  <Segmented
129
152
  options={[
@@ -135,6 +158,16 @@ function LocalControls() {
135
158
  onChange={(v) => setLocalParams({ direction: v as LocalDirection })}
136
159
  />
137
160
  </Field>
161
+ <Rows>
162
+ <ValueRow
163
+ label="Depth"
164
+ options={DEPTHS}
165
+ value={local.depth}
166
+ format={(d) => `${d} hop${d === 1 ? "" : "s"}`}
167
+ onChange={(depth) => setLocalParams({ depth })}
168
+ last
169
+ />
170
+ </Rows>
138
171
  </>
139
172
  );
140
173
  }
@@ -142,8 +175,6 @@ function LocalControls() {
142
175
  function DiscoveryControls() {
143
176
  const discovery = useGraphStore((s) => s.discovery);
144
177
  const setDiscoveryParams = useGraphStore((s) => s.setDiscoveryParams);
145
- const colorBy = useGraphStore((s) => s.discoveryColorBy);
146
- const setColorBy = useGraphStore((s) => s.setDiscoveryColorBy);
147
178
  const defaultRoot = useGraphStore((s) => s.meta?.defaultRoot ?? null);
148
179
 
149
180
  return (
@@ -173,16 +204,6 @@ function DiscoveryControls() {
173
204
  className="w-full accent-(--color-primary)"
174
205
  />
175
206
  </Field>
176
- <Field label="Color by">
177
- <Segmented
178
- options={[
179
- { value: "distance", label: "Distance" },
180
- { value: "folder", label: "Folder" },
181
- ]}
182
- value={colorBy}
183
- onChange={(v) => setColorBy(v as DiscoveryColorBy)}
184
- />
185
- </Field>
186
207
  {/* Direction is only meaningful with an explicit root: the default-root
187
208
  distances were walked once at index time. */}
188
209
  </>
@@ -206,13 +227,15 @@ function ClustersControls() {
206
227
  onChange={(v) => setSizeBy(v as SizeBy)}
207
228
  />
208
229
  </Field>
209
- <Field label="Isolated notes">
210
- <Toggle
230
+ <Rows>
231
+ <ToggleRow
211
232
  checked={clusters.isolates}
212
233
  onChange={(v) => setClustersParams({ isolates: v })}
213
- label="Include notes without links"
234
+ label="Isolated notes"
235
+ subtitle="include notes without links"
236
+ last
214
237
  />
215
- </Field>
238
+ </Rows>
216
239
  </>
217
240
  );
218
241
  }
@@ -225,28 +248,29 @@ function MaintenanceControls() {
225
248
  return (
226
249
  <>
227
250
  <Field label="Findings">
228
- <div className="flex flex-col">
229
- <Toggle
251
+ <Rows>
252
+ <ToggleRow
230
253
  checked={filters.orphans}
231
254
  onChange={(v) => setFilters({ orphans: v })}
232
255
  label="Orphans"
233
256
  />
234
- <Toggle
257
+ <ToggleRow
235
258
  checked={filters.unreachable}
236
259
  onChange={(v) => setFilters({ unreachable: v })}
237
260
  label="Unreachable"
238
261
  />
239
- <Toggle
262
+ <ToggleRow
240
263
  checked={filters.broken}
241
264
  onChange={(v) => setFilters({ broken: v })}
242
265
  label="Broken links"
243
266
  />
244
- <Toggle
267
+ <ToggleRow
245
268
  checked={filters.stale}
246
269
  onChange={(v) => setFilters({ stale: v })}
247
270
  label="Stale notes"
271
+ last
248
272
  />
249
- </div>
273
+ </Rows>
250
274
  </Field>
251
275
  <Field label={`Stale after ${maintenance.staleDays} days`}>
252
276
  <input
@@ -263,82 +287,6 @@ function MaintenanceControls() {
263
287
  );
264
288
  }
265
289
 
266
- // --- Small form primitives ---------------------------------------------------
267
-
268
- function Field({ label, children }: { label: string; children: React.ReactNode }) {
269
- return (
270
- <div>
271
- <div className="mb-1.5 text-[11px] font-medium uppercase tracking-wide text-muted-foreground">
272
- {label}
273
- </div>
274
- {children}
275
- </div>
276
- );
277
- }
278
-
279
- function Segmented({
280
- options,
281
- value,
282
- onChange,
283
- }: {
284
- options: { value: string; label: string }[];
285
- value: string;
286
- onChange: (value: string) => void;
287
- }) {
288
- return (
289
- <div className="flex rounded-lg border border-border bg-surface-raised p-0.5">
290
- {options.map((opt) => (
291
- <button
292
- key={opt.value}
293
- onClick={() => onChange(opt.value)}
294
- className={cn(
295
- "min-h-9 flex-1 rounded-md px-2 py-1.5 text-xs font-medium transition-colors",
296
- value === opt.value
297
- ? "bg-surface-overlay text-foreground"
298
- : "text-muted-foreground hover:text-foreground"
299
- )}
300
- >
301
- {opt.label}
302
- </button>
303
- ))}
304
- </div>
305
- );
306
- }
307
-
308
- function Toggle({
309
- checked,
310
- onChange,
311
- label,
312
- }: {
313
- checked: boolean;
314
- onChange: (checked: boolean) => void;
315
- label: string;
316
- }) {
317
- return (
318
- <button
319
- role="switch"
320
- aria-checked={checked}
321
- onClick={() => onChange(!checked)}
322
- className="flex min-h-9 w-full items-center justify-between gap-2 text-left text-xs text-foreground"
323
- >
324
- {label}
325
- <span
326
- className={cn(
327
- "relative h-5 w-9 shrink-0 rounded-full transition-colors",
328
- checked ? "bg-primary" : "bg-surface-raised border border-border"
329
- )}
330
- >
331
- <span
332
- className={cn(
333
- "absolute top-0.5 h-4 w-4 rounded-full bg-foreground transition-transform",
334
- checked ? "translate-x-4" : "translate-x-0.5"
335
- )}
336
- />
337
- </span>
338
- </button>
339
- );
340
- }
341
-
342
290
  /**
343
291
  * Debounced note search backed by /api/brain/search — the graph twin of the
344
292
  * search modal's flow, inlined so picking a center/root never leaves the view.
@@ -352,12 +300,20 @@ function NotePicker({
352
300
  placeholder?: string;
353
301
  onPick: (path: string) => void;
354
302
  }) {
303
+ const root = useBrainUiRoot();
304
+ const api = root.api;
355
305
  const [query, setQuery] = useState("");
356
306
  const [editing, setEditing] = useState(false);
357
307
  const [results, setResults] = useState<BrainSearchHit[]>([]);
358
308
  const [loading, setLoading] = useState(false);
359
309
  const controllerRef = useRef<AbortController | null>(null);
310
+ const blurTimer = useRef<ReturnType<typeof setTimeout> | undefined>(undefined);
360
311
 
312
+ useEffect(() => {
313
+ setQuery(""); setEditing(false); setResults([]);
314
+ const cleanup = () => clearTimeout(blurTimer.current);
315
+ return cleanup;
316
+ }, [root]);
361
317
  const trimmed = query.trim();
362
318
 
363
319
  useEffect(() => {
@@ -388,7 +344,7 @@ function NotePicker({
388
344
  clearTimeout(t);
389
345
  controllerRef.current?.abort();
390
346
  };
391
- }, [editing, trimmed]);
347
+ }, [editing, trimmed, root, api]);
392
348
 
393
349
  return (
394
350
  <div className="relative">
@@ -402,7 +358,7 @@ function NotePicker({
402
358
  }}
403
359
  onBlur={() => {
404
360
  // Delay so a click on a result lands before the list unmounts.
405
- setTimeout(() => setEditing(false), 150);
361
+ blurTimer.current = setTimeout(() => setEditing(false), 150);
406
362
  }}
407
363
  onChange={(e) => setQuery(e.target.value)}
408
364
  placeholder={placeholder}
@@ -0,0 +1,183 @@
1
+ import { FilterRow, Label, ListRow, Surface, Toggle } from "@schlessera/brain-ui-kit";
2
+ import { useId, type ReactNode } from "react";
3
+ import { cn } from "../../lib/utils.js";
4
+
5
+ /**
6
+ * The graph options form's primitives, on the kit (S7, the `graph`
7
+ * directory). `GraphControls` stays the container — every option reads and
8
+ * writes the graph store — and composes these. The canvas itself is WebGL
9
+ * and has no kit counterpart; the kit's `GraphView` is a static
10
+ * neighbourhood drawing for a chat answer, not a scene.
11
+ *
12
+ * A segmented choice is the kit `FilterRow`: one tab stop, ←→ and Home/End
13
+ * inside, activation following focus — which is what a mode switch is. A
14
+ * switch is the kit `Toggle`, named by the visible text beside it.
15
+ *
16
+ * D6 draws the depth and the switches as a `Surface pad={0}` of group
17
+ * `ListRow`s (`Rows`, `ToggleRow`, `ValueRow`): the row carries the handler
18
+ * and its own title names it, the same shape D5's Settings groups use.
19
+ */
20
+ export function Field({ label, children }: { label: string; children: ReactNode }) {
21
+ return (
22
+ <div>
23
+ <div className="mb-1.5">
24
+ <Label text={label} />
25
+ </div>
26
+ {children}
27
+ </div>
28
+ );
29
+ }
30
+
31
+ export function Segmented({
32
+ options,
33
+ value,
34
+ onChange,
35
+ }: {
36
+ options: { value: string; label: string }[];
37
+ value: string;
38
+ onChange: (value: string) => void;
39
+ }) {
40
+ const active = Math.max(0, options.findIndex((o) => o.value === value));
41
+ return (
42
+ <FilterRow
43
+ items={options.map((o) => ({ label: o.label, onClick: () => onChange(o.value) }))}
44
+ active={active}
45
+ mono={false}
46
+ />
47
+ );
48
+ }
49
+
50
+ export function SwitchRow({
51
+ checked,
52
+ onChange,
53
+ label,
54
+ }: {
55
+ checked: boolean;
56
+ onChange: (checked: boolean) => void;
57
+ label: string;
58
+ }) {
59
+ const id = useId();
60
+ return (
61
+ <div className="flex min-h-11 w-full items-center justify-between gap-3 text-xs text-foreground">
62
+ <span id={id}>{label}</span>
63
+ <Toggle on={checked} tone="amber" labelledBy={id} onClick={() => onChange(!checked)} />
64
+ </div>
65
+ );
66
+ }
67
+
68
+ /** A `Surface pad={0}` of group `ListRow`s — D6's depth and switch block. */
69
+ export function Rows({ children }: { children: ReactNode }) {
70
+ return <Surface pad={0}>{children}</Surface>;
71
+ }
72
+
73
+ /**
74
+ * A switch row inside `Rows`. The kit `ListRow`'s toggle is decorative and
75
+ * the row is the button, named by its title (the D5 pattern).
76
+ */
77
+ export function ToggleRow({
78
+ checked,
79
+ onChange,
80
+ label,
81
+ subtitle,
82
+ tone = "amber",
83
+ last = false,
84
+ }: {
85
+ checked: boolean;
86
+ onChange: (checked: boolean) => void;
87
+ label: string;
88
+ subtitle?: string;
89
+ tone?: "amber" | "teal" | "purple";
90
+ last?: boolean;
91
+ }) {
92
+ return (
93
+ <ListRow
94
+ title={label}
95
+ subtitle={subtitle}
96
+ subMono={subtitle !== undefined}
97
+ toggle={checked}
98
+ toggleTone={tone}
99
+ last={last}
100
+ onClick={() => onChange(!checked)}
101
+ />
102
+ );
103
+ }
104
+
105
+ /**
106
+ * A switch the host cannot serve yet, drawn anyway (the sixth pass, §3b:
107
+ * "until that exists the control is drawn but disabled with its reason, the
108
+ * same rule the palette follows"). The reason prints in mono where the
109
+ * subtitle would go, and the switch is the kit `Toggle` in its disabled
110
+ * state — `aria-disabled`, out of the tab order, dimmed by the kit's own
111
+ * rule, never a bare opacity on the row. It keeps its role and its name,
112
+ * because a control the reader is told about should also be one a screen
113
+ * reader can find. The no-op handler is what gives it the role: the kit
114
+ * gates every operable trait on a handler, and "disabled" is a state of an
115
+ * operable switch, not the absence of one.
116
+ */
117
+ export function DisabledToggleRow({
118
+ label,
119
+ reason,
120
+ tone = "amber",
121
+ last = false,
122
+ }: {
123
+ label: string;
124
+ /** Mono, printed under the title: "needs provenance". */
125
+ reason: string;
126
+ tone?: "amber" | "teal" | "purple";
127
+ last?: boolean;
128
+ }) {
129
+ const id = useId();
130
+ return (
131
+ <div
132
+ className={cn(
133
+ "flex min-h-14 w-full items-center justify-between gap-3 px-3.5 py-2.5",
134
+ !last && "border-b border-border"
135
+ )}
136
+ data-disabled-row=""
137
+ >
138
+ <div className="flex min-w-0 flex-col gap-1">
139
+ <span id={id} className="text-[13px] text-foreground">
140
+ {label}
141
+ </span>
142
+ <span className="font-[family-name:var(--font-mono)] text-[10px] text-muted-foreground">{reason}</span>
143
+ </div>
144
+ <Toggle on={false} tone={tone} labelledBy={id} disabled onClick={noop} />
145
+ </div>
146
+ );
147
+ }
148
+
149
+ function noop() {}
150
+
151
+ /**
152
+ * A row whose trailing mono value is the current choice and whose click
153
+ * steps to the next one — D6's `Depth · 2 hops`. The subtitle spells the
154
+ * ring so the step is not a surprise.
155
+ */
156
+ export function ValueRow<T extends string | number>({
157
+ label,
158
+ options,
159
+ value,
160
+ format,
161
+ onChange,
162
+ last = false,
163
+ }: {
164
+ label: string;
165
+ options: readonly T[];
166
+ value: T;
167
+ format: (value: T) => string;
168
+ onChange: (value: T) => void;
169
+ last?: boolean;
170
+ }) {
171
+ const index = Math.max(0, options.indexOf(value));
172
+ const next = options[(index + 1) % options.length]!;
173
+ return (
174
+ <ListRow
175
+ title={label}
176
+ subtitle={options.map(format).join(" · ")}
177
+ subMono
178
+ value={format(value)}
179
+ last={last}
180
+ onClick={() => onChange(next)}
181
+ />
182
+ );
183
+ }
@@ -13,17 +13,9 @@ import { GraphEmptyState } from "./graph-empty-state.js";
13
13
  import { GraphCanvas } from "./graph-canvas-lazy.js";
14
14
  import { CenteredSpinner } from "./graph-spinner.js";
15
15
  import { matchScene } from "./lib/graph-helpers.js";
16
+ import { useGraphTheme } from "./use-graph-theme.js";
16
17
  import { cn } from "../../lib/utils.js";
17
18
 
18
- /** Finding-type colors: dataviz status palette (warning/serious/critical) plus
19
- * the light end of the distance ramp for "stale" — checked against #0c0e12. */
20
- const FINDING_COLORS = {
21
- orphan: "#fab219",
22
- unreachable: "#ec835a",
23
- broken: "#d03b3b",
24
- stale: "#86b6ef",
25
- } as const;
26
-
27
19
  // --- Maintenance -------------------------------------------------------------
28
20
 
29
21
  type FindingKind = "orphan" | "unreachable" | "stale";
@@ -51,6 +43,9 @@ export function MaintenanceBody() {
51
43
  const openFile = useFileStore((s) => s.openFile);
52
44
  const setFilePanelOpen = useUIStore((s) => s.setFilePanelOpen);
53
45
  const listRef = useRef<HTMLDivElement>(null);
46
+ // The four lenses: the kit's `--bk-canvas-lens-*`, resolved for the scheme
47
+ // in force, so the list's headings and the canvas agree in both themes.
48
+ const lens = useGraphTheme().palette.lens;
54
49
 
55
50
  // One node per document, first matching section wins (a stale orphan is an
56
51
  // orphan); ring index encodes the finding kind.
@@ -122,7 +117,7 @@ export function MaintenanceBody() {
122
117
  hoveredId={hoveredId}
123
118
  matchIds={matchIds}
124
119
  nodeColor={(node) =>
125
- FINDING_COLORS[(node as FindingNode).finding ?? "stale"]
120
+ lens[(node as FindingNode).finding ?? "stale"]
126
121
  }
127
122
  onSelect={select}
128
123
  onHover={hover}
@@ -143,7 +138,7 @@ export function MaintenanceBody() {
143
138
  <FindingSection
144
139
  title={`Orphans (${findings.orphans.length})`}
145
140
  hint="No links in or out."
146
- color={FINDING_COLORS.orphan}
141
+ color={lens.orphan}
147
142
  nodes={findings.orphans}
148
143
  selectedId={selectedId}
149
144
  onSelect={select}
@@ -154,7 +149,7 @@ export function MaintenanceBody() {
154
149
  <FindingSection
155
150
  title={`Unreachable from root (${findings.unreachable.length})`}
156
151
  hint="No link path from the graph root reaches these."
157
- color={FINDING_COLORS.unreachable}
152
+ color={lens.unreachable}
158
153
  nodes={findings.unreachable}
159
154
  selectedId={selectedId}
160
155
  onSelect={select}
@@ -166,7 +161,7 @@ export function MaintenanceBody() {
166
161
  <SectionHeading
167
162
  title={`Broken links (${findings.brokenLinks.length})`}
168
163
  hint="Wiki links whose target resolves to nothing."
169
- color={FINDING_COLORS.broken}
164
+ color={lens.broken}
170
165
  />
171
166
  <FindingRows
172
167
  empty={findings.brokenLinks.length === 0}
@@ -183,7 +178,7 @@ export function MaintenanceBody() {
183
178
  <FindingSection
184
179
  title={`Stale notes (${findings.stale.length})`}
185
180
  hint={`Untouched for over ${findings.staleDays} days.`}
186
- color={FINDING_COLORS.stale}
181
+ color={lens.stale}
187
182
  nodes={findings.stale}
188
183
  subOf={(n) => `${(n as GraphNodePayload & { updated: string }).updated} · ${n.path}`}
189
184
  selectedId={selectedId}