@digithings-ai/ui 0.0.0-stage → 0.1.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 (424) hide show
  1. package/README.md +48 -2
  2. package/package.json +143 -4
  3. package/src/components/NavShell.tsx +776 -0
  4. package/src/components/SocialRow.tsx +87 -0
  5. package/src/components/Spinner.tsx +27 -0
  6. package/src/components/StackLogo.tsx +40 -0
  7. package/src/components/Terminal.tsx +110 -0
  8. package/src/components/TerminalManifest.tsx +212 -0
  9. package/src/components/ThemeProvider.tsx +271 -0
  10. package/src/components/account/AuthCard.tsx +309 -0
  11. package/src/components/assistant-ui/elements/mermaid-diagram.aui.tsx +63 -0
  12. package/src/components/assistant-ui/elements/mermaid-diagram.tsx +340 -0
  13. package/src/components/brand/BrandWordmark.tsx +32 -0
  14. package/src/components/changelog/ReleaseRail.tsx +81 -0
  15. package/src/components/changelog/index.ts +1 -0
  16. package/src/components/chat/ChatCodeBlock.tsx +67 -0
  17. package/src/components/chat/ChatMarkdown.tsx +66 -0
  18. package/src/components/chat/ChatMarkdownSource.tsx +203 -0
  19. package/src/components/chat/ChatMermaidBlock.tsx +202 -0
  20. package/src/components/chat/ChatMessage.tsx +77 -0
  21. package/src/components/chat/ChatPlayback.tsx +422 -0
  22. package/src/components/chat/ChatStreamCursor.tsx +25 -0
  23. package/src/components/chat/ChatThinking.tsx +113 -0
  24. package/src/components/chat/ChatToolCall.tsx +190 -0
  25. package/src/components/chat/ChatTranscript.tsx +60 -0
  26. package/src/components/chat/ChatWidgetFrame.tsx +107 -0
  27. package/src/components/chat/DigichatBootLoader.tsx +683 -0
  28. package/src/components/chat/DigichatLauncher.tsx +361 -0
  29. package/src/components/chat/DigichatThread.tsx +118 -0
  30. package/src/components/chat/DigichatThreadList.tsx +54 -0
  31. package/src/components/chat/DigichatWordmark.tsx +24 -0
  32. package/src/components/chat/DotMatrix.tsx +650 -0
  33. package/src/components/chat/boot-lab.tsx +766 -0
  34. package/src/components/chat/boot-signal.ts +144 -0
  35. package/src/components/chat/chat-surfaces.ts +52 -0
  36. package/src/components/chat/connection-status.ts +40 -0
  37. package/src/components/chat/digichat-wordmark.ts +355 -0
  38. package/src/components/chat/disclosure-chevron.tsx +49 -0
  39. package/src/components/chat/followable-href.ts +9 -0
  40. package/src/components/chat/gallery-thread/action-icons.tsx +25 -0
  41. package/src/components/chat/gallery-thread/attachment.aui.tsx +262 -0
  42. package/src/components/chat/gallery-thread/block-caret.tsx +439 -0
  43. package/src/components/chat/gallery-thread/cn.ts +1 -0
  44. package/src/components/chat/gallery-thread/composer-keyboard.ts +106 -0
  45. package/src/components/chat/gallery-thread/composer-trigger-popover.aui.tsx +235 -0
  46. package/src/components/chat/gallery-thread/css.d.ts +6 -0
  47. package/src/components/chat/gallery-thread/file.tsx +238 -0
  48. package/src/components/chat/gallery-thread/follow-up-suggestions.aui.tsx +92 -0
  49. package/src/components/chat/gallery-thread/format-json-dump.ts +112 -0
  50. package/src/components/chat/gallery-thread/hooks/use-attachment-src.ts +46 -0
  51. package/src/components/chat/gallery-thread/hooks/use-copy-to-clipboard.ts +9 -0
  52. package/src/components/chat/gallery-thread/image.tsx +519 -0
  53. package/src/components/chat/gallery-thread/markdown-text.tsx +278 -0
  54. package/src/components/chat/gallery-thread/message-error.aui.tsx +105 -0
  55. package/src/components/chat/gallery-thread/message-timing.aui.tsx +143 -0
  56. package/src/components/chat/gallery-thread/private-work-step.tsx +188 -0
  57. package/src/components/chat/gallery-thread/reasoning.tsx +332 -0
  58. package/src/components/chat/gallery-thread/scroll-mode.ts +174 -0
  59. package/src/components/chat/gallery-thread/source.tsx +76 -0
  60. package/src/components/chat/gallery-thread/thread.aui.tsx +1619 -0
  61. package/src/components/chat/gallery-thread/tooltip-icon-button.tsx +53 -0
  62. package/src/components/chat/gallery-thread/typed-welcome-copy.tsx +18 -0
  63. package/src/components/chat/gallery-thread/ui/tooltip.tsx +22 -0
  64. package/src/components/chat/gallery-thread/work-chain-summary.tsx +48 -0
  65. package/src/components/chat/gallery-thread/work-chain.tsx +110 -0
  66. package/src/components/chat/gallery-thread/work-status.ts +66 -0
  67. package/src/components/chat/overlay-scrollbar.tsx +86 -0
  68. package/src/components/chat/sanitize-mermaid-svg.ts +38 -0
  69. package/src/components/chat/skins/SOURCE.md +36 -0
  70. package/src/components/chat/skins/base/attachment.aui.tsx +287 -0
  71. package/src/components/chat/skins/base/aui-default/README.md +45 -0
  72. package/src/components/chat/skins/base/aui-default/collapsible-root.tsx +19 -0
  73. package/src/components/chat/skins/base/aui-default/collapsible.tsx +21 -0
  74. package/src/components/chat/skins/base/aui-default/reasoning.aui.tsx +120 -0
  75. package/src/components/chat/skins/base/aui-default/reasoning.tsx +331 -0
  76. package/src/components/chat/skins/base/aui-default/surfaces.ts +7 -0
  77. package/src/components/chat/skins/base/aui-default/tool-fallback.aui.tsx +772 -0
  78. package/src/components/chat/skins/base/aui-default/tool-group.aui.tsx +241 -0
  79. package/src/components/chat/skins/base/docs-model-options.ts +6 -0
  80. package/src/components/chat/skins/base/elements/assistant-trace.aui.tsx +169 -0
  81. package/src/components/chat/skins/base/elements/composer-trigger-popover.aui.tsx +271 -0
  82. package/src/components/chat/skins/base/elements/directive-text.aui.tsx +29 -0
  83. package/src/components/chat/skins/base/elements/directive-text.tsx +76 -0
  84. package/src/components/chat/skins/base/elements/message-timing.aui.tsx +104 -0
  85. package/src/components/chat/skins/base/elements/model-selector.aui.tsx +140 -0
  86. package/src/components/chat/skins/base/elements/model-selector.tsx +720 -0
  87. package/src/components/chat/skins/base/elements/quote.aui.tsx +290 -0
  88. package/src/components/chat/skins/base/elements/work-chain.tsx +100 -0
  89. package/src/components/chat/skins/base/markdown-text.tsx +294 -0
  90. package/src/components/chat/skins/base/model.ts +1 -0
  91. package/src/components/chat/skins/base/thread.tsx +1050 -0
  92. package/src/components/chat/skins/base/tooltip-icon-button.tsx +56 -0
  93. package/src/components/chat/skins/base/ui/avatar.tsx +115 -0
  94. package/src/components/chat/skins/base/ui/badge.tsx +51 -0
  95. package/src/components/chat/skins/base/ui/button.tsx +67 -0
  96. package/src/components/chat/skins/base/ui/command.tsx +185 -0
  97. package/src/components/chat/skins/base/ui/dialog.tsx +168 -0
  98. package/src/components/chat/skins/base/ui/dot-matrix.tsx +267 -0
  99. package/src/components/chat/skins/base/ui/popover.tsx +97 -0
  100. package/src/components/chat/skins/base/ui/skeleton.tsx +20 -0
  101. package/src/components/chat/skins/base/ui/textarea.tsx +24 -0
  102. package/src/components/chat/skins/base/ui/tooltip.tsx +73 -0
  103. package/src/components/chat/skins/base-assistant-ui/config-provider.tsx +90 -0
  104. package/src/components/chat/skins/base-assistant-ui/defaults.ts +419 -0
  105. package/src/components/chat/skins/base-assistant-ui/index.tsx +44 -0
  106. package/src/components/chat/skins/chatgpt.tsx +448 -0
  107. package/src/components/chat/skins/claude.tsx +380 -0
  108. package/src/components/chat/skins/digichat-composer-toolbar.tsx +151 -0
  109. package/src/components/chat/skins/digichat-context-meter-shares.ts +158 -0
  110. package/src/components/chat/skins/digichat-context-meter.tsx +243 -0
  111. package/src/components/chat/skins/digichat-meter-tone.ts +26 -0
  112. package/src/components/chat/skins/digichat-usage-meter.tsx +103 -0
  113. package/src/components/chat/skins/digichat.tsx +144 -0
  114. package/src/components/chat/skins/expo-react-native.tsx +29 -0
  115. package/src/components/chat/skins/gemini.tsx +322 -0
  116. package/src/components/chat/skins/grok-icon.tsx +34 -0
  117. package/src/components/chat/skins/grok.tsx +369 -0
  118. package/src/components/chat/skins/index.ts +46 -0
  119. package/src/components/chat/skins/perplexity.tsx +462 -0
  120. package/src/components/chat/skins/product-page-assistant/assistant-modal.tsx +73 -0
  121. package/src/components/chat/skins/product-page-assistant/index.tsx +19 -0
  122. package/src/components/chat/skins/product-page-assistant/product-dashboard.tsx +164 -0
  123. package/src/components/chat/skins/react-ink.tsx +97 -0
  124. package/src/components/chat/skins/thread-skin-host-contract.ts +102 -0
  125. package/src/components/chat/skins/thread-skin-view.tsx +156 -0
  126. package/src/components/chat/skins/thread-skins.ts +143 -0
  127. package/src/components/chat/skins/tooltip-icon-button.tsx +35 -0
  128. package/src/components/chat/skins/ui/dropdown-menu.tsx +272 -0
  129. package/src/components/chat/skins/webpage-assistant/assistant-config.ts +238 -0
  130. package/src/components/chat/skins/webpage-assistant/assistant-modal.tsx +78 -0
  131. package/src/components/chat/skins/webpage-assistant/config-provider.tsx +132 -0
  132. package/src/components/chat/skins/webpage-assistant/docs-app.tsx +106 -0
  133. package/src/components/chat/skins/webpage-assistant/docs-article.tsx +109 -0
  134. package/src/components/chat/skins/webpage-assistant/docs-assistant.tsx +73 -0
  135. package/src/components/chat/skins/webpage-assistant/docs-nav.tsx +81 -0
  136. package/src/components/chat/skins/webpage-assistant/host-ui.ts +79 -0
  137. package/src/components/chat/skins/webpage-assistant/index.tsx +12 -0
  138. package/src/components/chat/skins/webpage-assistant/markdown-page.tsx +11 -0
  139. package/src/components/chat/skins/webpage-assistant/pages.ts +9 -0
  140. package/src/components/chat/skins/webpage-assistant/types.ts +178 -0
  141. package/src/components/chat/skins/webpage-assistant/use-mobile.ts +19 -0
  142. package/src/components/chat/stock/SOURCE.md +90 -0
  143. package/src/components/chat/stock/artifacts-panel.tsx +305 -0
  144. package/src/components/chat/stock/attachment.aui.tsx +280 -0
  145. package/src/components/chat/stock/chat-notice.tsx +143 -0
  146. package/src/components/chat/stock/chat-private-mode.tsx +64 -0
  147. package/src/components/chat/stock/deploy-ui-context.tsx +89 -0
  148. package/src/components/chat/stock/embed-chat-prefs.tsx +471 -0
  149. package/src/components/chat/stock/file.tsx +265 -0
  150. package/src/components/chat/stock/follow-up-suggestions.aui.tsx +83 -0
  151. package/src/components/chat/stock/image.tsx +531 -0
  152. package/src/components/chat/stock/index.ts +129 -0
  153. package/src/components/chat/stock/json-view.tsx +140 -0
  154. package/src/components/chat/stock/markdown-text.tsx +319 -0
  155. package/src/components/chat/stock/message-error.aui.tsx +96 -0
  156. package/src/components/chat/stock/message-export-menu.tsx +156 -0
  157. package/src/components/chat/stock/palette-row-preview.tsx +26 -0
  158. package/src/components/chat/stock/reasoning.aui.tsx +120 -0
  159. package/src/components/chat/stock/reasoning.tsx +335 -0
  160. package/src/components/chat/stock/skin-chrome.tsx +81 -0
  161. package/src/components/chat/stock/skin-credit.tsx +63 -0
  162. package/src/components/chat/stock/skin-palette-bridge.tsx +235 -0
  163. package/src/components/chat/stock/skin-palette-context.ts +16 -0
  164. package/src/components/chat/stock/skin-runtime.tsx +52 -0
  165. package/src/components/chat/stock/skin-slash-palette.tsx +393 -0
  166. package/src/components/chat/stock/skin-types.ts +217 -0
  167. package/src/components/chat/stock/stock-chat-prefs-host.tsx +501 -0
  168. package/src/components/chat/stock/stock-send-gate.tsx +94 -0
  169. package/src/components/chat/stock/stock-shape.tsx +39 -0
  170. package/src/components/chat/stock/thread.aui.tsx +645 -0
  171. package/src/components/chat/stock/tool-display.ts +6 -0
  172. package/src/components/chat/stock/tool-fallback.aui.tsx +866 -0
  173. package/src/components/chat/stock/tool-group.aui.tsx +244 -0
  174. package/src/components/chat/stock/tool-surface.ts +120 -0
  175. package/src/components/chat/stock/tooltip-icon-button.tsx +49 -0
  176. package/src/components/chat/stock/ui/avatar.tsx +108 -0
  177. package/src/components/chat/stock/ui/button.tsx +81 -0
  178. package/src/components/chat/stock/ui/collapsible.tsx +21 -0
  179. package/src/components/chat/stock/ui/dialog.tsx +163 -0
  180. package/src/components/chat/stock/ui/skeleton.tsx +13 -0
  181. package/src/components/chat/stock/ui/textarea.tsx +20 -0
  182. package/src/components/chat/stock/ui/tooltip.tsx +68 -0
  183. package/src/components/chat/stock/use-attachment-src.ts +42 -0
  184. package/src/components/chat/stock/use-copy-to-clipboard.ts +29 -0
  185. package/src/components/chat/strip-model-boilerplate.ts +42 -0
  186. package/src/components/chat/suggestion-cycle.tsx +230 -0
  187. package/src/components/chat/suggestion-scroll-row.tsx +81 -0
  188. package/src/components/chat/trace-grouping/chain-group-by.ts +44 -0
  189. package/src/components/chat/trace-grouping/chain-state.ts +141 -0
  190. package/src/components/chat/trace-grouping/index.ts +32 -0
  191. package/src/components/chat/trace-grouping/tool-row.ts +74 -0
  192. package/src/components/chat/trace-grouping/use-deploy-work-disclosure.ts +35 -0
  193. package/src/components/chat/trace-grouping/use-work-chain.ts +103 -0
  194. package/src/components/chat/trace-i18n/core.ts +48 -0
  195. package/src/components/chat/trace-i18n/index.tsx +23 -0
  196. package/src/components/chat/trace-i18n/locales/en.ts +24 -0
  197. package/src/components/chat/trace-i18n/locales/fr.ts +28 -0
  198. package/src/components/chat/trace-i18n/types.ts +35 -0
  199. package/src/components/chat/trace-spacing.ts +249 -0
  200. package/src/components/chat/transcript/activity-view.ts +375 -0
  201. package/src/components/chat/transcript/chat-export.ts +133 -0
  202. package/src/components/chat/transcript/index.ts +10 -0
  203. package/src/components/chat/transcript/save-file.ts +209 -0
  204. package/src/components/chat/transcript/transcript-markdown.ts +428 -0
  205. package/src/components/chat/transcript/types.ts +81 -0
  206. package/src/components/chat/turn-outcome.ts +52 -0
  207. package/src/components/chat/use-warmup-phase.ts +18 -0
  208. package/src/components/chat/work-status-lead.tsx +49 -0
  209. package/src/components/chrome.tsx +264 -0
  210. package/src/components/command-palette/CommandPalette.tsx +404 -0
  211. package/src/components/command-palette/index.ts +6 -0
  212. package/src/components/contact/ContactMailto.tsx +112 -0
  213. package/src/components/contact/index.ts +5 -0
  214. package/src/components/conviction/ConvictionMeter.tsx +40 -0
  215. package/src/components/conviction/SignedConvictionBadge.tsx +26 -0
  216. package/src/components/conviction/index.ts +7 -0
  217. package/src/components/data-layout/BentoGrid.tsx +52 -0
  218. package/src/components/data-layout/CardRail.tsx +150 -0
  219. package/src/components/data-layout/DotMatrixStat.tsx +65 -0
  220. package/src/components/data-layout/FeatureCell.tsx +80 -0
  221. package/src/components/data-layout/MediaFrame.tsx +125 -0
  222. package/src/components/data-layout/ModuleGrid.tsx +735 -0
  223. package/src/components/data-layout/Odometer.tsx +149 -0
  224. package/src/components/data-layout/ProductFrame.tsx +79 -0
  225. package/src/components/data-layout/TestimonialWall.tsx +139 -0
  226. package/src/components/data-layout/index.ts +19 -0
  227. package/src/components/data-layout/treemap.ts +368 -0
  228. package/src/components/deck/DeckStack.tsx +243 -0
  229. package/src/components/desk/DataTable.tsx +373 -0
  230. package/src/components/desk/KpiGrid.tsx +80 -0
  231. package/src/components/desk/Sparkline.tsx +63 -0
  232. package/src/components/desk/StateBlock.tsx +132 -0
  233. package/src/components/desk/index.ts +18 -0
  234. package/src/components/diagrams/ArchitectureDiagram.tsx +350 -0
  235. package/src/components/diagrams/ArchitectureTour.tsx +912 -0
  236. package/src/components/diagrams/TerminalSchematic.tsx +192 -0
  237. package/src/components/diagrams/architecture-svg.tsx +384 -0
  238. package/src/components/diagrams/index.ts +30 -0
  239. package/src/components/diagrams/mermaid-theme.ts +115 -0
  240. package/src/components/diagrams/tour-camera.ts +171 -0
  241. package/src/components/docs/CodeTabs.tsx +90 -0
  242. package/src/components/docs/CopyCommand.tsx +151 -0
  243. package/src/components/docs/DocsLayout.tsx +197 -0
  244. package/src/components/docs/DocsSearch.tsx +97 -0
  245. package/src/components/docs/Endpoint.tsx +135 -0
  246. package/src/components/document/DocumentFrame.tsx +43 -0
  247. package/src/components/document/GlyphList.tsx +51 -0
  248. package/src/components/document/PageTitle.tsx +44 -0
  249. package/src/components/document/Prose.tsx +38 -0
  250. package/src/components/document/Section.tsx +55 -0
  251. package/src/components/document/index.ts +13 -0
  252. package/src/components/effects-chrome/AnnouncementBar.tsx +88 -0
  253. package/src/components/effects-chrome/HorizontalScrollTrack.tsx +461 -0
  254. package/src/components/effects-chrome/Pipeline.tsx +226 -0
  255. package/src/components/effects-chrome/RotatingPrompts.tsx +116 -0
  256. package/src/components/effects-chrome/StackingPanels.tsx +101 -0
  257. package/src/components/effects-chrome/TabStrip.tsx +232 -0
  258. package/src/components/effects-chrome/ToastStack.tsx +201 -0
  259. package/src/components/effects-chrome/horizontal-track-core.ts +70 -0
  260. package/src/components/effects-chrome/index.ts +35 -0
  261. package/src/components/emblems.tsx +188 -0
  262. package/src/components/faviconTheme.ts +23 -0
  263. package/src/components/figure/Figure.tsx +38 -0
  264. package/src/components/figure/index.ts +2 -0
  265. package/src/components/finance-charts/DrawdownPlot.tsx +76 -0
  266. package/src/components/finance-charts/EquityCurve.tsx +71 -0
  267. package/src/components/finance-charts/PriceChart.tsx +119 -0
  268. package/src/components/finance-charts/chart-host.tsx +236 -0
  269. package/src/components/finance-charts/chart-scale.ts +93 -0
  270. package/src/components/finance-charts/demo-data.ts +88 -0
  271. package/src/components/finance-charts/index.ts +46 -0
  272. package/src/components/finance-charts/lw-chart.tsx +292 -0
  273. package/src/components/finance-composites/MarketBar.tsx +243 -0
  274. package/src/components/finance-composites/OrderBook.tsx +133 -0
  275. package/src/components/finance-composites/PerformanceDashboard.tsx +185 -0
  276. package/src/components/finance-composites/SortableTable.tsx +144 -0
  277. package/src/components/finance-composites/StockTicker.tsx +65 -0
  278. package/src/components/finance-composites/SyncedTearsheet.tsx +226 -0
  279. package/src/components/finance-composites/index.ts +28 -0
  280. package/src/components/finance-tearsheet/KpiStrip.tsx +49 -0
  281. package/src/components/finance-tearsheet/LiveBadge.tsx +29 -0
  282. package/src/components/finance-tearsheet/ReturnsMatrix.tsx +321 -0
  283. package/src/components/finance-tearsheet/StrategyTearsheet.tsx +99 -0
  284. package/src/components/finance-tearsheet/TearsheetCard.tsx +54 -0
  285. package/src/components/finance-tearsheet/TradeLogTable.tsx +73 -0
  286. package/src/components/finance-tearsheet/charts.tsx +2624 -0
  287. package/src/components/finance-tearsheet/demo-data.ts +177 -0
  288. package/src/components/finance-tearsheet/format.ts +41 -0
  289. package/src/components/finance-tearsheet/index.ts +120 -0
  290. package/src/components/finance-tearsheet/print.ts +52 -0
  291. package/src/components/finance-tearsheet/risk-bands.ts +48 -0
  292. package/src/components/finance-tearsheet/stats.ts +35 -0
  293. package/src/components/finance-tearsheet/strategy-sheet-model.ts +238 -0
  294. package/src/components/finance-tearsheet/types.ts +58 -0
  295. package/src/components/footer/FooterCells.tsx +109 -0
  296. package/src/components/footer/index.ts +6 -0
  297. package/src/components/graph.tsx +158 -0
  298. package/src/components/icons.tsx +98 -0
  299. package/src/components/landing/PixelWordmark.tsx +36 -0
  300. package/src/components/logos.ts +39 -0
  301. package/src/components/marquee/Marquee.tsx +204 -0
  302. package/src/components/metrics/PerfMetrics.tsx +68 -0
  303. package/src/components/metrics/StatCounter.tsx +104 -0
  304. package/src/components/page-geometry.tsx +177 -0
  305. package/src/components/pricing/Pricing.tsx +174 -0
  306. package/src/components/pricing/PricingMatrix.tsx +219 -0
  307. package/src/components/prose/index.ts +2 -0
  308. package/src/components/prose/prose.tsx +86 -0
  309. package/src/components/repo-activity/RepoActivity.tsx +599 -0
  310. package/src/components/repo-activity/RepoHeatmap.tsx +225 -0
  311. package/src/components/repo-activity/demo.ts +201 -0
  312. package/src/components/repo-activity/fetch.ts +211 -0
  313. package/src/components/repo-activity/heatmap.ts +123 -0
  314. package/src/components/repo-activity/index.ts +28 -0
  315. package/src/components/repo-activity/types.ts +99 -0
  316. package/src/components/stages/NumberedStages.tsx +116 -0
  317. package/src/components/symbols/marks.tsx +116 -0
  318. package/src/components/symbols/terminal-lockup.tsx +136 -0
  319. package/src/components/symbols/terminal-marks.tsx +226 -0
  320. package/src/components/terminal/ChatResponseLoader.tsx +67 -0
  321. package/src/components/terminal/ContainerBootLoader.tsx +82 -0
  322. package/src/components/terminal/TerminalStepCaret.tsx +202 -0
  323. package/src/components/themeInit.ts +24 -0
  324. package/src/components/typography/MotionReveal.tsx +108 -0
  325. package/src/components/typography/TypewriterReveal.tsx +101 -0
  326. package/src/components/typography/WordReveal.tsx +143 -0
  327. package/src/data/modules.ts +378 -0
  328. package/src/data/subsystems.ts +101 -0
  329. package/src/index.ts +587 -0
  330. package/src/lib/base-path.ts +60 -0
  331. package/src/lib/cx.ts +25 -0
  332. package/src/lib/gloomberb.ts +69 -0
  333. package/src/lib/record.ts +19 -0
  334. package/src/lib/stub-payload.ts +183 -0
  335. package/src/lib/useBodyScrollLock.ts +44 -0
  336. package/src/lib/utils.ts +6 -0
  337. package/src/motion/primitives.tsx +105 -0
  338. package/src/motion/scroll-glide.ts +62 -0
  339. package/src/motion/scrolly-core.ts +38 -0
  340. package/src/motion/scrolly.tsx +95 -0
  341. package/src/navigation/HashScrollManager.tsx +167 -0
  342. package/src/navigation/hashScroll.ts +78 -0
  343. package/src/replay/browser.ts +280 -0
  344. package/src/replay/chat-export-run.ts +121 -0
  345. package/src/replay/export-format.ts +25 -0
  346. package/src/replay/export-mount.ts +32 -0
  347. package/src/replay/filename.ts +54 -0
  348. package/src/replay/index.ts +21 -0
  349. package/src/replay/redact-dom.ts +178 -0
  350. package/src/replay/redact.ts +113 -0
  351. package/src/replay/snapshot.ts +659 -0
  352. package/src/styles/account-auth.css +339 -0
  353. package/src/styles/brand-wordmark.css +11 -0
  354. package/src/styles/card-rail.css +120 -0
  355. package/src/styles/chat-aui.css +1143 -0
  356. package/src/styles/chat-core.css +469 -0
  357. package/src/styles/chat-digichat.css +2531 -0
  358. package/src/styles/chat-math.css +70 -0
  359. package/src/styles/chat-skin-palette.css +138 -0
  360. package/src/styles/chat-stock-menu.css +37 -0
  361. package/src/styles/chat-widgets.css +190 -0
  362. package/src/styles/command-palette.css +372 -0
  363. package/src/styles/controls-core.css +2261 -0
  364. package/src/styles/controls-overlay.css +603 -0
  365. package/src/styles/data-layout.css +288 -0
  366. package/src/styles/deck.css +141 -0
  367. package/src/styles/diagrams.css +1860 -0
  368. package/src/styles/digichat-app-theme.css +250 -0
  369. package/src/styles/digichat-boot-loader.css +487 -0
  370. package/src/styles/digichat-launcher.css +377 -0
  371. package/src/styles/docs.css +165 -0
  372. package/src/styles/effects-chrome.css +888 -0
  373. package/src/styles/finance-composites.css +214 -0
  374. package/src/styles/finance-tearsheet-overlay.css +90 -0
  375. package/src/styles/finance-tearsheet.css +945 -0
  376. package/src/styles/marquee.css +168 -0
  377. package/src/styles/metrics.css +82 -0
  378. package/src/styles/nav-shell.css +551 -0
  379. package/src/styles/pricing.css +79 -0
  380. package/src/styles/repo-activity.css +575 -0
  381. package/src/styles/stages.css +69 -0
  382. package/src/styles/terminal-loaders.css +122 -0
  383. package/src/styles/terminal-manifest.css +228 -0
  384. package/src/styles/web-theme.css +1007 -0
  385. package/src/styles/word-reveal.css +204 -0
  386. package/src/theme/apply-theme.ts +214 -0
  387. package/src/theme/index.ts +27 -0
  388. package/src/theme/palette-registry.ts +855 -0
  389. package/src/theme/tui-prefs.ts +64 -0
  390. package/src/ui/alert.tsx +78 -0
  391. package/src/ui/avatar.tsx +104 -0
  392. package/src/ui/badge.tsx +75 -0
  393. package/src/ui/breadcrumb.tsx +61 -0
  394. package/src/ui/button.tsx +67 -0
  395. package/src/ui/card.tsx +139 -0
  396. package/src/ui/checkbox.tsx +27 -0
  397. package/src/ui/collapsible.tsx +32 -0
  398. package/src/ui/date-pager.tsx +325 -0
  399. package/src/ui/dialog.tsx +157 -0
  400. package/src/ui/dropdown-menu.tsx +267 -0
  401. package/src/ui/empty-state.tsx +165 -0
  402. package/src/ui/field.tsx +104 -0
  403. package/src/ui/form.tsx +36 -0
  404. package/src/ui/icon-button.tsx +36 -0
  405. package/src/ui/index.ts +34 -0
  406. package/src/ui/input.tsx +33 -0
  407. package/src/ui/kbd.tsx +30 -0
  408. package/src/ui/label.tsx +32 -0
  409. package/src/ui/pager.tsx +119 -0
  410. package/src/ui/pagination.tsx +126 -0
  411. package/src/ui/radio-group.tsx +51 -0
  412. package/src/ui/search-bar.tsx +85 -0
  413. package/src/ui/segmented-control.tsx +76 -0
  414. package/src/ui/select.tsx +257 -0
  415. package/src/ui/separator.tsx +24 -0
  416. package/src/ui/sheet.tsx +141 -0
  417. package/src/ui/skeleton.tsx +76 -0
  418. package/src/ui/slider.tsx +76 -0
  419. package/src/ui/switch.tsx +31 -0
  420. package/src/ui/table.tsx +179 -0
  421. package/src/ui/tabs.tsx +89 -0
  422. package/src/ui/tags-input.tsx +168 -0
  423. package/src/ui/textarea.tsx +17 -0
  424. package/src/ui/tooltip.tsx +71 -0
@@ -0,0 +1,378 @@
1
+ /**
2
+ * Single source of truth for digithings modules — drives the landing cards,
3
+ * the architecture/scrollytelling graph, the per-module detail pages, and the
4
+ * stack rows. Content is codebase-accurate (real packages, docker
5
+ * commands, init snippets). digistore/digilink are tier "roadmap".
6
+ */
7
+
8
+ export type Tier = "core" | "support" | "roadmap";
9
+
10
+ export interface StackItem {
11
+ name: string;
12
+ /** Simple Icons slug, or null to render a monogram chip. */
13
+ icon: string | null;
14
+ /** 2–4 char monogram used when icon is null. */
15
+ mono?: string;
16
+ }
17
+
18
+ export interface ModuleNode {
19
+ id: string;
20
+ name: string;
21
+ tier: Tier;
22
+ graphOrder: number;
23
+ graph: { x: number; y: number; r: number; hub?: boolean };
24
+ emblem: string;
25
+ role: string;
26
+ tagline: string;
27
+ summary: string[];
28
+ stack: StackItem[];
29
+ dockerCmd: string | null;
30
+ initSnippet: { lang: string; code: string };
31
+ api: { label?: string; code: string }[];
32
+ links: { label: string; href: string }[];
33
+ related: string[];
34
+ }
35
+
36
+ export const edges: { a: string; b: string }[] = [
37
+ { a: "digigraph", b: "digiquant" },
38
+ { a: "digigraph", b: "digisearch" },
39
+ { a: "digigraph", b: "digichat" },
40
+ { a: "digigraph", b: "digikey" },
41
+ { a: "digigraph", b: "digitrace" },
42
+ { a: "digigraph", b: "digibot" },
43
+ { a: "digigraph", b: "digivault" },
44
+ { a: "digiquant", b: "digistore" },
45
+ { a: "digisearch", b: "digistore" },
46
+ { a: "digiquant", b: "digilink" },
47
+ { a: "digisearch", b: "digibase" },
48
+ { a: "digichat", b: "digikey" },
49
+ { a: "digichat", b: "digisearch" },
50
+ { a: "digibot", b: "digiquant" },
51
+ { a: "digitrace", b: "digichat" },
52
+ ];
53
+
54
+ export const modules: ModuleNode[] = [
55
+ {
56
+ id: "digigraph",
57
+ name: "digigraph",
58
+ tier: "core",
59
+ graphOrder: 0,
60
+ graph: { x: 460, y: 280, r: 34, hub: true },
61
+ emblem: "digigraph",
62
+ role: "Orchestration · LangGraph state machine",
63
+ tagline: "A declarative graph decides what runs next — profile in, path out.",
64
+ summary: [
65
+ "A LangGraph state machine routes each request to the right sub-graph — quant research, retrieval, or chat — through conditional edges keyed on the request profile and the run's state. DIGI_SUPERVISOR=1 adds an entry node that stamps the run and enforces a recursion budget; it does not pick the branch, and unset, requests enter the research graph directly.",
66
+ "Speaks the OpenAI API so existing clients work unchanged; LiteLLM handles routing, caching, and checkpointed state across hops.",
67
+ ],
68
+ stack: [
69
+ { name: "LangGraph", icon: "langchain" },
70
+ { name: "FastAPI", icon: "fastapi" },
71
+ { name: "LiteLLM", icon: null, mono: "LL" },
72
+ { name: "Pydantic", icon: "pydantic" },
73
+ { name: "Polars", icon: "polars" },
74
+ { name: "OpenAI SDK", icon: "openai" },
75
+ ],
76
+ dockerCmd: "docker compose up -d digigraph",
77
+ initSnippet: {
78
+ lang: "python",
79
+ code: "from digigraph.server import app\n# uvicorn digigraph.server:app",
80
+ },
81
+ api: [
82
+ { label: "Run a workflow", code: "POST /workflow" },
83
+ { label: "Chat completions", code: "POST /v1/chat/completions" },
84
+ ],
85
+ links: [{ label: "Source", href: "https://github.com/digithings-ai" }],
86
+ related: ["digiquant", "digisearch", "digichat"],
87
+ },
88
+ {
89
+ id: "digiquant",
90
+ name: "digiquant",
91
+ tier: "core",
92
+ graphOrder: 1,
93
+ graph: { x: 300, y: 175, r: 26 },
94
+ emblem: "digiquant",
95
+ role: "Quant engine · NautilusTrader",
96
+ tagline: "Strategy research that ends in a reproducible backtest, not a markdown file.",
97
+ summary: [
98
+ "Scheduled research turns into a sized book; backtests run on a real NautilusTrader engine with Optuna driving the parameter search.",
99
+ "Every run writes an append-only audit trail and a tearsheet. No broker adapter ships wired — the IB, Alpaca, and QuantConnect adapters are declared stubs, so reaching a live venue is your own deliberate integration.",
100
+ ],
101
+ stack: [
102
+ { name: "NautilusTrader", icon: null, mono: "NT" },
103
+ { name: "Optuna", icon: "optuna" },
104
+ { name: "LangGraph", icon: "langchain" },
105
+ { name: "Polars", icon: "polars" },
106
+ { name: "yfinance", icon: null, mono: "yf" },
107
+ { name: "Supabase", icon: "supabase" },
108
+ ],
109
+ dockerCmd: "docker compose up -d digiquant",
110
+ initSnippet: {
111
+ lang: "python",
112
+ code: "from digiquant.strategies.registry import register\nregister(name, StrategyCls, ConfigCls, default_params)",
113
+ },
114
+ api: [
115
+ { label: "Register a strategy", code: "register(name, StrategyCls, ConfigCls, default_params)" },
116
+ ],
117
+ links: [
118
+ { label: "digiquant.io", href: "https://digiquant.io" },
119
+ { label: "Source", href: "https://github.com/digithings-ai" },
120
+ ],
121
+ related: ["digigraph", "digistore", "digilink"],
122
+ },
123
+ {
124
+ id: "digisearch",
125
+ name: "digisearch",
126
+ tier: "core",
127
+ graphOrder: 2,
128
+ graph: { x: 620, y: 175, r: 26 },
129
+ emblem: "digisearch",
130
+ role: "Vector retrieval · multi-backend",
131
+ tagline: "RAG without a stack rewrite when you switch vector DB.",
132
+ summary: [
133
+ "One client over Cloudflare Vectorize, Azure AI Search, or Chroma, with backend-neutral entities so you swap engines without touching business code.",
134
+ "Dense, sparse and hybrid retrieval all ship; BeautifulSoup and pdfplumber handle ingest, Polars throughout.",
135
+ ],
136
+ stack: [
137
+ { name: "Cloudflare Vectorize", icon: null, mono: "CF" },
138
+ { name: "Chroma", icon: null, mono: "Ch" },
139
+ { name: "Azure AI Search", icon: null, mono: "AZ" },
140
+ { name: "OpenAI", icon: "openai" },
141
+ { name: "BeautifulSoup", icon: null, mono: "BS4" },
142
+ { name: "pdfplumber", icon: null, mono: "PDF" },
143
+ { name: "LangGraph", icon: "langchain" },
144
+ { name: "FastAPI", icon: "fastapi" },
145
+ ],
146
+ dockerCmd: "docker compose up -d digisearch",
147
+ initSnippet: {
148
+ lang: "python",
149
+ code: "from digisearch.server import app\nDigiSearch().query(text, index)",
150
+ },
151
+ api: [{ label: "Query an index", code: "DigiSearch().query(text, index)" }],
152
+ links: [{ label: "Source", href: "https://github.com/digithings-ai" }],
153
+ related: ["digigraph", "digistore", "digibase"],
154
+ },
155
+ {
156
+ id: "digichat",
157
+ name: "digichat",
158
+ tier: "core",
159
+ graphOrder: 3,
160
+ graph: { x: 460, y: 440, r: 26 },
161
+ emblem: "digichat",
162
+ role: "Chat surface · Next.js BFF · BYOK",
163
+ tagline: "Talk to your stack with your keys, models and audit log.",
164
+ summary: [
165
+ "A Next.js and React BFF streaming digigraph through the Vercel AI SDK, your key forwarded per request — never stored, never logged.",
166
+ "Auth.js handles identity; Postgres and Drizzle persist sessions for humans and agents alike.",
167
+ ],
168
+ stack: [
169
+ { name: "Next.js", icon: "nextdotjs" },
170
+ { name: "React", icon: "react" },
171
+ { name: "Vercel AI SDK", icon: "vercel" },
172
+ { name: "Auth.js", icon: null, mono: "Auth" },
173
+ { name: "Postgres", icon: "postgresql" },
174
+ { name: "Drizzle", icon: "drizzle" },
175
+ ],
176
+ dockerCmd: "docker compose --profile digichat up -d",
177
+ initSnippet: {
178
+ lang: "bash",
179
+ code: "make up-digichat # start the chat stack\n# then open the local URL it prints",
180
+ },
181
+ api: [{ label: "Stream a turn", code: "streamText({ model, messages })" }],
182
+ links: [
183
+ { label: "Open digichat", href: "/chat" },
184
+ { label: "Source", href: "https://github.com/digithings-ai" },
185
+ ],
186
+ related: ["digigraph", "digikey", "digisearch"],
187
+ },
188
+ {
189
+ id: "digikey",
190
+ name: "digikey",
191
+ tier: "support",
192
+ graphOrder: 4,
193
+ graph: { x: 150, y: 120, r: 20 },
194
+ emblem: "digikey",
195
+ role: "Auth · RS256 JWTs · scoped API keys",
196
+ tagline: "Identity, JWTs, and scoped keys — one issuer for humans and machines.",
197
+ summary: [
198
+ "RS256-signed JWTs with a published JWKS, organization and project membership, and row-level scopes baked into the token.",
199
+ "SQLAlchemy over Postgres stores keys, bcrypt hashes them, and an optional Redis blocklist handles revocation.",
200
+ ],
201
+ stack: [
202
+ { name: "PyJWT", icon: null, mono: "JWT" },
203
+ { name: "cryptography", icon: null, mono: "crypto" },
204
+ { name: "bcrypt", icon: null, mono: "bcrypt" },
205
+ { name: "SQLAlchemy", icon: null, mono: "SQLA" },
206
+ { name: "Postgres", icon: "postgresql" },
207
+ { name: "Redis", icon: "redis" },
208
+ ],
209
+ dockerCmd: "docker compose up -d digikey",
210
+ initSnippet: {
211
+ lang: "python",
212
+ code: "from digikey.server import app\n# DIGIKEY_ISSUER=https://auth.example.com",
213
+ },
214
+ api: [{ label: "Issuer config", code: "DIGIKEY_ISSUER=https://…" }],
215
+ links: [{ label: "Source", href: "https://github.com/digithings-ai" }],
216
+ related: ["digichat", "digigraph", "digitrace"],
217
+ },
218
+ {
219
+ id: "digitrace",
220
+ name: "digitrace",
221
+ tier: "support",
222
+ graphOrder: 5,
223
+ graph: { x: 95, y: 300, r: 20 },
224
+ emblem: "digitrace",
225
+ role: "Observability · spans · correlation IDs",
226
+ tagline: "Correlation IDs across every hop — and prompts logged by length, never by text.",
227
+ summary: [
228
+ "Structured logging, Prometheus metrics and OpenTelemetry spans thread through every request, so a multi-hop run is traceable.",
229
+ "Audit events record a prompt's length and its IDs, never the prompt itself — tail events.jsonl and check. Optional LangSmith export runs a regex PII redactor on the way out.",
230
+ ],
231
+ stack: [
232
+ { name: "LangSmith", icon: null, mono: "LS" },
233
+ { name: "OpenTelemetry", icon: "opentelemetry" },
234
+ { name: "Prometheus", icon: "prometheus" },
235
+ { name: "FastAPI", icon: "fastapi" },
236
+ ],
237
+ dockerCmd: "docker compose up -d digitrace",
238
+ initSnippet: {
239
+ lang: "python",
240
+ code: "from digibase.http import install_request_id_middleware\ninstall_request_id_middleware(app)",
241
+ },
242
+ api: [{ label: "Middleware", code: "install_request_id_middleware(app)" }],
243
+ links: [{ label: "Source", href: "https://github.com/digithings-ai" }],
244
+ related: ["digigraph", "digibot", "digibase"],
245
+ },
246
+ {
247
+ id: "digibot",
248
+ name: "digibot",
249
+ tier: "support",
250
+ graphOrder: 6,
251
+ graph: { x: 250, y: 475, r: 20 },
252
+ emblem: "digibot",
253
+ role: "Always-on runtime · heartbeat · audit",
254
+ tagline: "The always-on agent runtime — heartbeats, scheduling, append-only audit.",
255
+ summary: [
256
+ "A heartbeat service that keeps agents running: research-runner scheduling and drift detection, calling digigraph over HTTP on an interval.",
257
+ "Every action lands in an append-only audit log, and it runs no LLM of its own.",
258
+ ],
259
+ stack: [
260
+ { name: "HTTPx", icon: null, mono: "hx" },
261
+ { name: "digibase", icon: null, mono: "DB" },
262
+ ],
263
+ dockerCmd: "docker compose --profile heartbeat up -d heartbeat",
264
+ initSnippet: { lang: "bash", code: "python -m digibot # runs on an interval" },
265
+ api: [{ label: "Run the daemon", code: "python -m digibot" }],
266
+ links: [{ label: "Source", href: "https://github.com/digithings-ai" }],
267
+ related: ["digiquant", "digitrace"],
268
+ },
269
+ {
270
+ id: "digibase",
271
+ name: "digibase",
272
+ tier: "support",
273
+ graphOrder: 7,
274
+ graph: { x: 670, y: 475, r: 20 },
275
+ emblem: "digibase",
276
+ role: "Shared HTTP + audit library",
277
+ tagline: "The shared Python library every service builds on — and nothing more.",
278
+ summary: [
279
+ "Not a service but a deliberately minimal library: request-ID middleware and logging, CORS and error handlers, an audit redaction helper, and a Prometheus metrics endpoint.",
280
+ "Imported by every other module so they all behave consistently, with optional OpenTelemetry setup. Auth middleware is digikey's job, not digibase's.",
281
+ ],
282
+ stack: [
283
+ { name: "Pydantic", icon: "pydantic" },
284
+ { name: "FastAPI", icon: "fastapi" },
285
+ { name: "Prometheus", icon: "prometheus" },
286
+ { name: "OpenTelemetry", icon: "opentelemetry" },
287
+ ],
288
+ dockerCmd: null,
289
+ initSnippet: {
290
+ lang: "python",
291
+ code: "from digibase.audit import redact_mapping\nfrom digibase.http import install_request_id_middleware",
292
+ },
293
+ api: [{ label: "Import", code: "from digibase.audit import redact_mapping" }],
294
+ links: [{ label: "Source", href: "https://github.com/digithings-ai" }],
295
+ related: ["digitrace", "digisearch"],
296
+ },
297
+ {
298
+ id: "digivault",
299
+ name: "digivault",
300
+ tier: "support",
301
+ graphOrder: 8,
302
+ graph: { x: 460, y: 80, r: 20 },
303
+ emblem: "digivault",
304
+ role: "Markdown vault · wikilinks · backlinks",
305
+ tagline: "A folder of markdown notes, served over HTTP — frontmatter, wikilinks and backlinks.",
306
+ summary: [
307
+ "An Obsidian-style vault service: it manages a folder of markdown notes with YAML frontmatter, wikilinks, tags and a folder taxonomy, and answers over HTTP rather than asking callers to walk the filesystem.",
308
+ "Routes cover listing, reading and creating notes, renaming with backlink repair, backlink and tag lookups, and a lint report. Two more — orchestrator_tools and orchestrator_invoke — expose the vault to digigraph as callable tools. Runs behind the `digivault` compose profile, so it is opt-in rather than up by default.",
309
+ ],
310
+ stack: [
311
+ { name: "FastAPI", icon: "fastapi" },
312
+ { name: "Pydantic", icon: "pydantic" },
313
+ { name: "PyYAML", icon: null, mono: "YM" },
314
+ ],
315
+ dockerCmd: "docker compose --profile digivault up -d digivault",
316
+ initSnippet: {
317
+ lang: "bash",
318
+ code: "curl -s localhost:8004/v1/notes | jq '.notes[].name'",
319
+ },
320
+ api: [
321
+ { label: "List notes", code: "GET /v1/notes" },
322
+ { label: "Backlinks", code: "GET /v1/notes/{name}/backlinks" },
323
+ { label: "Lint the vault", code: "GET /v1/lint" },
324
+ ],
325
+ links: [{ label: "Source", href: "https://github.com/digithings-ai" }],
326
+ related: ["digigraph", "digisearch", "digibase"],
327
+ },
328
+ {
329
+ id: "digistore",
330
+ name: "digistore",
331
+ tier: "roadmap",
332
+ graphOrder: 9,
333
+ graph: { x: 770, y: 120, r: 20 },
334
+ emblem: "digistore",
335
+ role: "Storage abstraction · roadmap",
336
+ tagline: "One storage API over S3, MinIO, Postgres, or SQLite.",
337
+ summary: [
338
+ "Roadmap: a storage abstraction so business code never binds to a backend, today a session-scoped dataset manager living inside digigraph.",
339
+ "Run SQLite on a laptop, then swap to S3 and Postgres in production without rewriting.",
340
+ ],
341
+ stack: [
342
+ { name: "Postgres", icon: "postgresql" },
343
+ { name: "SQLite", icon: "sqlite" },
344
+ { name: "S3", icon: null, mono: "S3" },
345
+ { name: "MinIO", icon: null, mono: "Mi" },
346
+ ],
347
+ dockerCmd: null,
348
+ initSnippet: { lang: "python", code: 'digistore.configure(backend="s3") # planned' },
349
+ api: [{ label: "Configure backend", code: 'digistore.configure(backend="s3")' }],
350
+ links: [{ label: "Roadmap", href: "https://github.com/digithings-ai" }],
351
+ related: ["digiquant", "digisearch"],
352
+ },
353
+ {
354
+ id: "digilink",
355
+ name: "digilink",
356
+ tier: "roadmap",
357
+ graphOrder: 10,
358
+ graph: { x: 825, y: 300, r: 20 },
359
+ emblem: "digilink",
360
+ role: "MCP protocol bridge · roadmap",
361
+ tagline: "A protocol bridge so non-native transports speak MCP.",
362
+ summary: [
363
+ "Roadmap: a translation layer registering adapters that turn REST, gRPC, or bespoke transports into MCP tools.",
364
+ "Today MCP is built into individual modules; this keeps the stack open instead of locked to one protocol.",
365
+ ],
366
+ stack: [
367
+ { name: "MCP", icon: null, mono: "MCP" },
368
+ { name: "HTTPx", icon: null, mono: "hx" },
369
+ ],
370
+ dockerCmd: null,
371
+ initSnippet: { lang: "python", code: 'digilink.register_adapter("rest", …) # planned' },
372
+ api: [{ label: "Register an adapter", code: 'digilink.register_adapter("rest", …)' }],
373
+ links: [{ label: "Roadmap", href: "https://github.com/digithings-ai" }],
374
+ related: ["digigraph", "digiquant"],
375
+ },
376
+ ];
377
+
378
+ export const moduleById = (id: string) => modules.find((m) => m.id === id);
@@ -0,0 +1,101 @@
1
+ /** digiquant subsystems — research → portfolio → execution.
2
+ * Same shape conventions as modules; drives the pipeline graph + detail pages.
3
+ *
4
+ * Display names and URL ids are job words (ADR-0026). Emblem keys stay on the
5
+ * existing mark set (research/portfolio/execution alias the same SVGs).
6
+ * Init snippets do not print retired package paths.
7
+ */
8
+ import { type StackItem } from "./modules";
9
+
10
+ export interface Subsystem {
11
+ id: string;
12
+ name: string;
13
+ tier: "research" | "signals" | "execution";
14
+ step: string;
15
+ emblem: string;
16
+ role: string;
17
+ tagline: string;
18
+ summary: string[];
19
+ stack: StackItem[];
20
+ dockerCmd: string | null;
21
+ initSnippet: { lang: string; code: string };
22
+ related: string[];
23
+ }
24
+
25
+ export const subsystems: Subsystem[] = [
26
+ {
27
+ id: "research",
28
+ name: "Research",
29
+ tier: "research",
30
+ step: "01 · research",
31
+ emblem: "research",
32
+ role: "Scheduled macro & market research",
33
+ tagline: "Research, persisted — structured views, not prose.",
34
+ summary: [
35
+ "Scheduled LangGraph research cycles across a configurable universe, pulling from open data sources (FRED, Treasury, SEC/EDGAR) on one daily graph, with per-artifact skip, edit, or full refresh.",
36
+ "Every cycle writes structured, versioned views to Supabase — re-used downstream, and fully auditable.",
37
+ ],
38
+ stack: [
39
+ { name: "LangGraph", icon: "langchain" },
40
+ { name: "Polars", icon: "polars" },
41
+ { name: "Supabase", icon: "supabase" },
42
+ { name: "FRED", icon: null, mono: "FRED" },
43
+ ],
44
+ dockerCmd: "docker compose up -d digiquant",
45
+ initSnippet: {
46
+ lang: "python",
47
+ code: "# daily research cycle — structured views, not prose\n# universe + open data → versioned artifacts (A0–A4)",
48
+ },
49
+ related: ["portfolio", "execution"],
50
+ },
51
+ {
52
+ id: "portfolio",
53
+ name: "Portfolio",
54
+ tier: "signals",
55
+ step: "02 · signals",
56
+ emblem: "portfolio",
57
+ role: "Deliberation & signal delivery",
58
+ tagline: "Delivery, not deliberation theatre.",
59
+ summary: [
60
+ "Translates daily research into allocations via a LangGraph deliberation pipeline. Each signal is timestamped, attributed to the views that produced it, and fully replayable.",
61
+ "Signals carry their provenance, so any decision can be reconstructed from the research that drove it.",
62
+ ],
63
+ stack: [
64
+ { name: "LangGraph", icon: "langchain" },
65
+ { name: "Polars", icon: "polars" },
66
+ { name: "Supabase", icon: "supabase" },
67
+ ],
68
+ dockerCmd: "docker compose up -d digiquant",
69
+ initSnippet: {
70
+ lang: "python",
71
+ code: "# deliberation → a sized book (H1–H9)\n# every signal timestamped to the views that produced it",
72
+ },
73
+ related: ["research", "execution"],
74
+ },
75
+ {
76
+ id: "execution",
77
+ name: "Execution",
78
+ tier: "execution",
79
+ step: "03 · execution",
80
+ emblem: "execution",
81
+ role: "Backtest, optimize, and paper-route — live venues refused",
82
+ tagline: "Paper adapters ship. Live tokens never leave the router.",
83
+ summary: [
84
+ "The execution stage runs the sized book through a real NautilusTrader engine — backtest and Optuna-driven optimization over your own OHLCV data, with a tearsheet and an append-only audit trail per run.",
85
+ "Paper adapters for Alpaca and IBKR ship; routing stays off until you opt in. Live venue tokens are refused on the public path. Connecting a live venue is your own integration, not a flag we flip.",
86
+ ],
87
+ stack: [
88
+ { name: "NautilusTrader", icon: null, mono: "NT" },
89
+ { name: "Optuna", icon: "optuna" },
90
+ { name: "Polars", icon: "polars" },
91
+ ],
92
+ dockerCmd: "docker compose up -d digiquant",
93
+ initSnippet: {
94
+ lang: "python",
95
+ code: "from digiquant.backtest import run_backtest\nresult = run_backtest(...) # paper adapters exist; live tokens are refused",
96
+ },
97
+ related: ["portfolio", "research"],
98
+ },
99
+ ];
100
+
101
+ export const subsystemById = (id: string) => subsystems.find((s) => s.id === id);