@cryptiklemur/lattice 4.0.1 → 5.0.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 (394) hide show
  1. package/bin/lattice +1 -9
  2. package/dist/client/assets/{angular-html-N8PCEquT.js → angular-html-DKTL-XDO.js} +1 -1
  3. package/dist/client/assets/{angular-ts-CJ8RJIPD.js → angular-ts-tvBzOwQR.js} +1 -1
  4. package/dist/client/assets/{apl-BD6tCLWN.js → apl-CCzl5qFl.js} +1 -1
  5. package/dist/client/assets/{astro-CpIIfBs6.js → astro-DNQTpO2Y.js} +1 -1
  6. package/dist/client/assets/{blade-D3qgnjiV.js → blade-CyJoIMeJ.js} +1 -1
  7. package/dist/client/assets/{c-Dr6ADN_t.js → c-OEwk5KN8.js} +1 -1
  8. package/dist/client/assets/{cobol-BIfDE0Hr.js → cobol-DpHyJzz2.js} +1 -1
  9. package/dist/client/assets/{coffee-DHQ57vfY.js → coffee-BX5dbDzZ.js} +1 -1
  10. package/dist/client/assets/{cpp-CEBY6JOp.js → cpp-BTBjNg2U.js} +1 -1
  11. package/dist/client/assets/{crystal-D125CSmP.js → crystal-CNzZd6DW.js} +1 -1
  12. package/dist/client/assets/{css-CBmrkYSr.js → css-BuKsNmms.js} +1 -1
  13. package/dist/client/assets/{dist-A_mCRD1f.js → dist-CKpDHMy6.js} +2 -2
  14. package/dist/client/assets/{edge-Ccsz7cJW.js → edge-DzhnGgJE.js} +1 -1
  15. package/dist/client/assets/{elixir-Do6gk14X.js → elixir-Dqs0waqF.js} +1 -1
  16. package/dist/client/assets/{elm-Db22zT4C.js → elm-BtWwjxWn.js} +1 -1
  17. package/dist/client/assets/{erb-MXVqAAJD.js → erb-iPD89b4v.js} +1 -1
  18. package/dist/client/assets/{git-rebase-B-LLWBOA.js → git-rebase-BxVNXJL4.js} +1 -1
  19. package/dist/client/assets/{glimmer-js-eWszRU73.js → glimmer-js-BlyCupwF.js} +1 -1
  20. package/dist/client/assets/{glimmer-ts-VQmwGqUp.js → glimmer-ts-DjIxWOS9.js} +1 -1
  21. package/dist/client/assets/{glsl-B8ilOfAl.js → glsl-CGIL-65r.js} +1 -1
  22. package/dist/client/assets/{graphql-DnTqxeOc.js → graphql-DeOn6mNV.js} +1 -1
  23. package/dist/client/assets/{hack-XJsHYSQb.js → hack-DVppeCmS.js} +1 -1
  24. package/dist/client/assets/{haml-CQ7Vqzwp.js → haml-WDhua0Mp.js} +1 -1
  25. package/dist/client/assets/{handlebars-C4szooBf.js → handlebars-i2Fu_9HI.js} +1 -1
  26. package/dist/client/assets/{html-B6EgAiSd.js → html-B1e6oxzK.js} +1 -1
  27. package/dist/client/assets/{html-derivative-DdinogQX.js → html-derivative-MofKXIVd.js} +1 -1
  28. package/dist/client/assets/{http-BSLxCgRq.js → http-Dk6S5pRD.js} +1 -1
  29. package/dist/client/assets/{hurl-pOsTwNfp.js → hurl-CroFYYJG.js} +1 -1
  30. package/dist/client/assets/{index-BHQ_8mvl.js → index-CVu-S6Yk.js} +2 -2
  31. package/dist/client/assets/{java-DRQLiiST.js → java-B89FYjqS.js} +1 -1
  32. package/dist/client/assets/{javascript-DvEK2-47.js → javascript-m6CO1Uiy.js} +1 -1
  33. package/dist/client/assets/{jinja-D2NYJ25y.js → jinja-DC9Wi41X.js} +1 -1
  34. package/dist/client/assets/{jison-DDZaLNAp.js → jison-6xiegwDk.js} +1 -1
  35. package/dist/client/assets/{json-TGR0NIWd.js → json-HA-96-qr.js} +1 -1
  36. package/dist/client/assets/{jsx-BjUoPYga.js → jsx-Wt1a8i8U.js} +1 -1
  37. package/dist/client/assets/{julia-C4gjSpFu.js → julia-7M93VBON.js} +1 -1
  38. package/dist/client/assets/{just-H351x5u_.js → just-CjfDLYLv.js} +1 -1
  39. package/dist/client/assets/{latex-BiTmf6gf.js → latex-CitsJ46x.js} +1 -1
  40. package/dist/client/assets/{liquid-86ufjRy-.js → liquid-C8VIFin8.js} +1 -1
  41. package/dist/client/assets/{lua-BNxR0F_8.js → lua-Ba2N7esc.js} +1 -1
  42. package/dist/client/assets/{marko-CvRxpRjM.js → marko-lTLvb2wu.js} +1 -1
  43. package/dist/client/assets/{mdc-CYbAIy2C.js → mdc-D6IV-8FD.js} +1 -1
  44. package/dist/client/assets/{nginx-egdgMq-F.js → nginx-Ch5AjE6S.js} +1 -1
  45. package/dist/client/assets/{nim-CXBJVz_w.js → nim-WmDDC6LW.js} +1 -1
  46. package/dist/client/assets/{perl-XRfMobzg.js → perl-CQv0gYuq.js} +1 -1
  47. package/dist/client/assets/{php-Br7a8uil.js → php-BJmH0qOB.js} +1 -1
  48. package/dist/client/assets/{pug-BVbbUVvy.js → pug-CsHPkzc9.js} +1 -1
  49. package/dist/client/assets/{qml-ByKvrL1j.js → qml-B36ecArG.js} +1 -1
  50. package/dist/client/assets/{r-mVoV0Ni6.js → r-D5Yi5Z4y.js} +1 -1
  51. package/dist/client/assets/{razor-T5O-9UJL.js → razor-CHAxVq4R.js} +1 -1
  52. package/dist/client/assets/{regexp-CioRuhuN.js → regexp-gfs--3M7.js} +1 -1
  53. package/dist/client/assets/{rst-V__uTudD.js → rst-ugdlp-hl.js} +1 -1
  54. package/dist/client/assets/{ruby-C_PuKPTI.js → ruby-CDRRW37j.js} +1 -1
  55. package/dist/client/assets/{sas-D_DqqQH4.js → sas-DZaNQaIP.js} +1 -1
  56. package/dist/client/assets/{scss-D-TjzZ4c.js → scss-CzWQEplj.js} +1 -1
  57. package/dist/client/assets/{shellscript-E5759VHu.js → shellscript-fgYvpu9N.js} +1 -1
  58. package/dist/client/assets/{shellsession-AESTM-Pv.js → shellsession-BoAohHh7.js} +1 -1
  59. package/dist/client/assets/{soy-QrbrrcDv.js → soy-DBzVgv9x.js} +1 -1
  60. package/dist/client/assets/{sql-0M8VcDHD.js → sql-BYXpAYTs.js} +1 -1
  61. package/dist/client/assets/{stata-CgeIpGtc.js → stata-I71MMY3p.js} +1 -1
  62. package/dist/client/assets/{surrealql-DBGwnZbw.js → surrealql-C9U8_1VO.js} +1 -1
  63. package/dist/client/assets/{svelte-Cv0PvUc_.js → svelte-VOFrPnWT.js} +1 -1
  64. package/dist/client/assets/{templ-B9t7xRE4.js → templ-BIaxAEtC.js} +1 -1
  65. package/dist/client/assets/{tex-DhZZ8dr2.js → tex-D1dwnBE5.js} +1 -1
  66. package/dist/client/assets/{ts-tags-BFv8sbnd.js → ts-tags-C0L2Q0r5.js} +1 -1
  67. package/dist/client/assets/{tsx-CXC9KSbY.js → tsx-BqcycEv1.js} +1 -1
  68. package/dist/client/assets/{twig-CM_OO66r.js → twig-vyWqOhpM.js} +1 -1
  69. package/dist/client/assets/{typescript-BdgOTaoD.js → typescript-B2YbovqG.js} +1 -1
  70. package/dist/client/assets/{vue-BnQhjnCm.js → vue-CbXxGdjo.js} +1 -1
  71. package/dist/client/assets/{vue-html-CNnGecRI.js → vue-html-DDX4KXW7.js} +1 -1
  72. package/dist/client/assets/{vue-vine-DCuMkRhK.js → vue-vine-DsyY1LR5.js} +1 -1
  73. package/dist/client/assets/{xml-CbTD7cB8.js → xml-Ddi0-r0D.js} +1 -1
  74. package/dist/client/assets/{xsl-uOqqo7cf.js → xsl-CsFcZHFS.js} +1 -1
  75. package/dist/client/assets/{yaml-BNrLoH59.js → yaml-tGJWoH6Y.js} +1 -1
  76. package/dist/client/index.html +1 -1
  77. package/dist/client/sw.js +1 -1
  78. package/dist/server/analytics/engine.js +832 -0
  79. package/dist/server/assets.js +39 -0
  80. package/dist/server/auth/passphrase.js +70 -0
  81. package/dist/server/config.js +47 -0
  82. package/dist/server/daemon.js +535 -0
  83. package/dist/server/features/ralph-loop.js +138 -0
  84. package/dist/server/features/scheduler.js +260 -0
  85. package/dist/server/features/sticky-notes.js +99 -0
  86. package/dist/server/handlers/analytics.js +28 -0
  87. package/dist/server/handlers/attachment.js +158 -0
  88. package/dist/server/handlers/bookmarks.js +41 -0
  89. package/dist/server/handlers/chat.js +350 -0
  90. package/dist/server/handlers/editor.js +72 -0
  91. package/dist/server/handlers/fs.js +234 -0
  92. package/dist/server/handlers/loop.js +33 -0
  93. package/dist/server/handlers/memory.js +181 -0
  94. package/dist/server/handlers/mesh.js +322 -0
  95. package/dist/server/handlers/notes.js +36 -0
  96. package/dist/server/handlers/plugins.js +593 -0
  97. package/dist/server/handlers/project-settings.js +166 -0
  98. package/dist/server/handlers/scheduler.js +52 -0
  99. package/dist/server/handlers/session.js +194 -0
  100. package/dist/server/handlers/settings.js +148 -0
  101. package/dist/server/handlers/skills.js +360 -0
  102. package/dist/server/handlers/terminal.js +75 -0
  103. package/dist/server/handlers/themes.js +102 -0
  104. package/dist/server/handlers/update.js +124 -0
  105. package/dist/server/identity.js +45 -0
  106. package/dist/server/index.js +435 -0
  107. package/dist/server/logger.js +20 -0
  108. package/dist/server/mesh/connector.js +355 -0
  109. package/dist/server/mesh/crypto.js +88 -0
  110. package/dist/server/mesh/discovery.js +95 -0
  111. package/dist/server/mesh/pairing.js +104 -0
  112. package/dist/server/mesh/peers.js +54 -0
  113. package/dist/server/mesh/proxy.js +86 -0
  114. package/dist/server/mesh/session-sync.js +85 -0
  115. package/dist/server/project/bookmarks.js +77 -0
  116. package/dist/server/project/context-breakdown.js +279 -0
  117. package/dist/server/project/file-browser.js +97 -0
  118. package/dist/server/project/project-files.js +274 -0
  119. package/dist/server/project/registry.js +51 -0
  120. package/dist/server/project/sdk-bridge.js +960 -0
  121. package/dist/server/project/session.js +696 -0
  122. package/dist/server/project/terminal.js +87 -0
  123. package/dist/server/project/warmup.js +242 -0
  124. package/dist/server/push.js +87 -0
  125. package/dist/server/tls.js +50 -0
  126. package/dist/server/tui.js +83 -0
  127. package/dist/server/update-checker.js +119 -0
  128. package/dist/server/ws/broadcast.js +50 -0
  129. package/dist/server/ws/router.js +105 -0
  130. package/dist/server/ws/server.js +2 -0
  131. package/dist/shared/analytics.js +1 -0
  132. package/dist/shared/messages.js +1 -0
  133. package/dist/shared/models.js +1 -0
  134. package/dist/shared/project-settings.js +1 -0
  135. package/package.json +5 -8
  136. package/themes/alabaster.json +9 -0
  137. package/themes/amoled.json +20 -0
  138. package/themes/ayu-light.json +9 -0
  139. package/themes/catppuccin-latte.json +9 -0
  140. package/themes/catppuccin-mocha.json +9 -0
  141. package/themes/clay-light.json +10 -0
  142. package/themes/clay.json +10 -0
  143. package/themes/dracula.json +9 -0
  144. package/themes/everforest-light.json +9 -0
  145. package/themes/everforest.json +9 -0
  146. package/themes/github-light.json +9 -0
  147. package/themes/gruvbox-dark.json +9 -0
  148. package/themes/gruvbox-light.json +9 -0
  149. package/themes/horizon-light.json +9 -0
  150. package/themes/kanagawa-lotus.json +9 -0
  151. package/themes/kanagawa.json +9 -0
  152. package/themes/modus-operandi.json +9 -0
  153. package/themes/monokai.json +9 -0
  154. package/themes/nightfox.json +9 -0
  155. package/themes/nord-light.json +9 -0
  156. package/themes/nord.json +9 -0
  157. package/themes/one-dark.json +9 -0
  158. package/themes/one-light.json +9 -0
  159. package/themes/palenight.json +9 -0
  160. package/themes/paper.json +9 -0
  161. package/themes/penumbra-light.json +9 -0
  162. package/themes/poimandres.json +9 -0
  163. package/themes/quiet-light.json +9 -0
  164. package/themes/rose-pine-dawn.json +9 -0
  165. package/themes/rose-pine.json +9 -0
  166. package/themes/solarized-dark.json +9 -0
  167. package/themes/solarized-light.json +9 -0
  168. package/themes/synthwave84.json +9 -0
  169. package/themes/tokyo-night-light.json +9 -0
  170. package/themes/tokyo-night.json +9 -0
  171. package/themes/vesper.json +9 -0
  172. package/index.html +0 -20
  173. package/public/icons/icon-192.svg +0 -11
  174. package/public/icons/icon-512.svg +0 -11
  175. package/public/sw-push.js +0 -53
  176. package/src/client/App.tsx +0 -42
  177. package/src/client/commands.ts +0 -36
  178. package/src/client/components/analytics/AnalyticsView.tsx +0 -244
  179. package/src/client/components/analytics/ChartCard.tsx +0 -194
  180. package/src/client/components/analytics/PeriodSelector.tsx +0 -42
  181. package/src/client/components/analytics/QuickStats.tsx +0 -122
  182. package/src/client/components/analytics/chartTokens.ts +0 -188
  183. package/src/client/components/analytics/charts/ActivityCalendar.tsx +0 -204
  184. package/src/client/components/analytics/charts/CacheEfficiencyChart.tsx +0 -56
  185. package/src/client/components/analytics/charts/ContextUtilizationChart.tsx +0 -106
  186. package/src/client/components/analytics/charts/CostAreaChart.tsx +0 -79
  187. package/src/client/components/analytics/charts/CostDistributionChart.tsx +0 -59
  188. package/src/client/components/analytics/charts/CostDonutChart.tsx +0 -84
  189. package/src/client/components/analytics/charts/CumulativeCostChart.tsx +0 -59
  190. package/src/client/components/analytics/charts/DailySummaryCards.tsx +0 -86
  191. package/src/client/components/analytics/charts/HourlyHeatmap.tsx +0 -133
  192. package/src/client/components/analytics/charts/NodeFleetOverview.tsx +0 -89
  193. package/src/client/components/analytics/charts/PermissionBreakdown.tsx +0 -98
  194. package/src/client/components/analytics/charts/ProjectRadar.tsx +0 -126
  195. package/src/client/components/analytics/charts/ResponseTimeScatter.tsx +0 -96
  196. package/src/client/components/analytics/charts/SessionBubbleChart.tsx +0 -114
  197. package/src/client/components/analytics/charts/SessionComplexityList.tsx +0 -65
  198. package/src/client/components/analytics/charts/SessionTimeline.tsx +0 -107
  199. package/src/client/components/analytics/charts/TokenFlowChart.tsx +0 -78
  200. package/src/client/components/analytics/charts/TokenSankeyChart.tsx +0 -93
  201. package/src/client/components/analytics/charts/ToolSunburst.tsx +0 -123
  202. package/src/client/components/analytics/charts/ToolTreemap.tsx +0 -110
  203. package/src/client/components/auth/PassphrasePrompt.tsx +0 -70
  204. package/src/client/components/chat/AttachmentChips.tsx +0 -116
  205. package/src/client/components/chat/ChatInput.tsx +0 -533
  206. package/src/client/components/chat/ChatView.tsx +0 -1076
  207. package/src/client/components/chat/CommandPalette.tsx +0 -162
  208. package/src/client/components/chat/ElicitationCard.tsx +0 -238
  209. package/src/client/components/chat/Message.tsx +0 -825
  210. package/src/client/components/chat/ModelSelector.tsx +0 -108
  211. package/src/client/components/chat/PermissionModeSelector.tsx +0 -41
  212. package/src/client/components/chat/PromptQuestion.tsx +0 -271
  213. package/src/client/components/chat/StatusBar.tsx +0 -50
  214. package/src/client/components/chat/TodoCard.tsx +0 -57
  215. package/src/client/components/chat/ToolGroup.tsx +0 -129
  216. package/src/client/components/chat/ToolResultRenderer.tsx +0 -348
  217. package/src/client/components/chat/VoiceRecorder.tsx +0 -85
  218. package/src/client/components/chat/toolSummary.ts +0 -41
  219. package/src/client/components/dashboard/DashboardView.tsx +0 -200
  220. package/src/client/components/dashboard/ProjectDashboardView.tsx +0 -179
  221. package/src/client/components/mesh/NodeBadge.tsx +0 -24
  222. package/src/client/components/mesh/PairingDialog.tsx +0 -340
  223. package/src/client/components/project-settings/ProjectClaude.tsx +0 -318
  224. package/src/client/components/project-settings/ProjectEnvironment.tsx +0 -235
  225. package/src/client/components/project-settings/ProjectGeneral.tsx +0 -76
  226. package/src/client/components/project-settings/ProjectMcp.tsx +0 -232
  227. package/src/client/components/project-settings/ProjectMemory.tsx +0 -488
  228. package/src/client/components/project-settings/ProjectNotifications.tsx +0 -48
  229. package/src/client/components/project-settings/ProjectPermissions.tsx +0 -209
  230. package/src/client/components/project-settings/ProjectPlugins.tsx +0 -117
  231. package/src/client/components/project-settings/ProjectRules.tsx +0 -286
  232. package/src/client/components/project-settings/ProjectSettingsView.tsx +0 -117
  233. package/src/client/components/project-settings/ProjectSkills.tsx +0 -91
  234. package/src/client/components/settings/Appearance.tsx +0 -275
  235. package/src/client/components/settings/BudgetSettings.tsx +0 -165
  236. package/src/client/components/settings/ClaudeSettings.tsx +0 -175
  237. package/src/client/components/settings/Editor.tsx +0 -123
  238. package/src/client/components/settings/Environment.tsx +0 -185
  239. package/src/client/components/settings/GlobalMcp.tsx +0 -216
  240. package/src/client/components/settings/GlobalMemory.tsx +0 -19
  241. package/src/client/components/settings/GlobalPlugins.tsx +0 -806
  242. package/src/client/components/settings/GlobalRules.tsx +0 -149
  243. package/src/client/components/settings/GlobalSkills.tsx +0 -140
  244. package/src/client/components/settings/MeshStatus.tsx +0 -183
  245. package/src/client/components/settings/Notifications.tsx +0 -123
  246. package/src/client/components/settings/SettingsView.tsx +0 -75
  247. package/src/client/components/settings/SkillMarketplace.tsx +0 -175
  248. package/src/client/components/settings/ThemePreview.tsx +0 -140
  249. package/src/client/components/settings/ThemeWizard.tsx +0 -405
  250. package/src/client/components/settings/mcp-shared.tsx +0 -194
  251. package/src/client/components/settings/skill-shared.tsx +0 -186
  252. package/src/client/components/setup/SetupWizard.tsx +0 -755
  253. package/src/client/components/sidebar/AddProjectModal.tsx +0 -438
  254. package/src/client/components/sidebar/NodeSettingsModal.tsx +0 -206
  255. package/src/client/components/sidebar/ProjectDropdown.tsx +0 -211
  256. package/src/client/components/sidebar/ProjectRail.tsx +0 -353
  257. package/src/client/components/sidebar/SearchFilter.tsx +0 -52
  258. package/src/client/components/sidebar/SessionList.tsx +0 -599
  259. package/src/client/components/sidebar/SettingsSidebar.tsx +0 -139
  260. package/src/client/components/sidebar/Sidebar.tsx +0 -469
  261. package/src/client/components/sidebar/UserIsland.tsx +0 -282
  262. package/src/client/components/sidebar/UserMenu.tsx +0 -107
  263. package/src/client/components/ui/CommandPalette.tsx +0 -321
  264. package/src/client/components/ui/ContextMenu.tsx +0 -153
  265. package/src/client/components/ui/ErrorBoundary.tsx +0 -56
  266. package/src/client/components/ui/IconPicker.tsx +0 -184
  267. package/src/client/components/ui/KeyboardShortcuts.tsx +0 -129
  268. package/src/client/components/ui/LatticeLogomark.tsx +0 -19
  269. package/src/client/components/ui/NodeDisconnectedOverlay.tsx +0 -35
  270. package/src/client/components/ui/PopupMenu.tsx +0 -120
  271. package/src/client/components/ui/SaveFooter.tsx +0 -63
  272. package/src/client/components/ui/Toast.tsx +0 -132
  273. package/src/client/components/ui/UpdateBanner.tsx +0 -110
  274. package/src/client/components/ui/UpdatePrompt.tsx +0 -47
  275. package/src/client/components/workspace/BookmarksView.tsx +0 -156
  276. package/src/client/components/workspace/FileBrowser.tsx +0 -174
  277. package/src/client/components/workspace/FileTree.tsx +0 -129
  278. package/src/client/components/workspace/FileViewer.tsx +0 -211
  279. package/src/client/components/workspace/NoteCard.tsx +0 -120
  280. package/src/client/components/workspace/NotesView.tsx +0 -102
  281. package/src/client/components/workspace/ScheduledTasksView.tsx +0 -117
  282. package/src/client/components/workspace/SplitPane.tsx +0 -81
  283. package/src/client/components/workspace/TabBar.tsx +0 -170
  284. package/src/client/components/workspace/TaskCard.tsx +0 -159
  285. package/src/client/components/workspace/TaskEditModal.tsx +0 -129
  286. package/src/client/components/workspace/TerminalInstance.tsx +0 -171
  287. package/src/client/components/workspace/TerminalView.tsx +0 -110
  288. package/src/client/components/workspace/WorkspaceView.tsx +0 -141
  289. package/src/client/hooks/useAnalytics.ts +0 -84
  290. package/src/client/hooks/useAttachments.ts +0 -313
  291. package/src/client/hooks/useBookmarks.ts +0 -57
  292. package/src/client/hooks/useEditorConfig.ts +0 -28
  293. package/src/client/hooks/useFocusTrap.ts +0 -74
  294. package/src/client/hooks/useIdleDetection.ts +0 -50
  295. package/src/client/hooks/useInstallPrompt.ts +0 -53
  296. package/src/client/hooks/useMesh.ts +0 -89
  297. package/src/client/hooks/useNotifications.ts +0 -54
  298. package/src/client/hooks/useOnline.ts +0 -6
  299. package/src/client/hooks/useProjectSettings.ts +0 -56
  300. package/src/client/hooks/useProjects.ts +0 -98
  301. package/src/client/hooks/usePushNotifications.ts +0 -92
  302. package/src/client/hooks/useSaveState.ts +0 -65
  303. package/src/client/hooks/useSession.ts +0 -580
  304. package/src/client/hooks/useSidebar.ts +0 -90
  305. package/src/client/hooks/useSkills.ts +0 -30
  306. package/src/client/hooks/useSpinnerVerb.ts +0 -36
  307. package/src/client/hooks/useSwipeDrawer.ts +0 -299
  308. package/src/client/hooks/useTheme.ts +0 -114
  309. package/src/client/hooks/useTimeTick.ts +0 -35
  310. package/src/client/hooks/useVoiceRecorder.ts +0 -169
  311. package/src/client/hooks/useWebSocket.ts +0 -27
  312. package/src/client/hooks/useWorkspace.ts +0 -57
  313. package/src/client/lib/theme-derive.ts +0 -196
  314. package/src/client/lib/workspace-url.ts +0 -219
  315. package/src/client/main.tsx +0 -10
  316. package/src/client/providers/WebSocketProvider.tsx +0 -186
  317. package/src/client/router.tsx +0 -578
  318. package/src/client/stores/analytics.ts +0 -68
  319. package/src/client/stores/bookmarks.ts +0 -45
  320. package/src/client/stores/mesh.ts +0 -78
  321. package/src/client/stores/session.ts +0 -569
  322. package/src/client/stores/sidebar.ts +0 -530
  323. package/src/client/stores/theme.ts +0 -44
  324. package/src/client/stores/workspace.ts +0 -518
  325. package/src/client/styles/global.css +0 -391
  326. package/src/client/styles/theme-vars.css +0 -18
  327. package/src/client/themes/index.ts +0 -105
  328. package/src/client/utils/editorUrl.ts +0 -55
  329. package/src/client/utils/findDuplicateKeys.ts +0 -12
  330. package/src/client/utils/formatSessionTitle.ts +0 -17
  331. package/src/client/vite-env.d.ts +0 -6
  332. package/src/server/analytics/engine.ts +0 -920
  333. package/src/server/assets.ts +0 -45
  334. package/src/server/auth/passphrase.ts +0 -78
  335. package/src/server/config.ts +0 -55
  336. package/src/server/daemon.ts +0 -567
  337. package/src/server/features/ralph-loop.ts +0 -173
  338. package/src/server/features/scheduler.ts +0 -304
  339. package/src/server/features/sticky-notes.ts +0 -104
  340. package/src/server/handlers/analytics.ts +0 -39
  341. package/src/server/handlers/attachment.ts +0 -189
  342. package/src/server/handlers/bookmarks.ts +0 -50
  343. package/src/server/handlers/chat.ts +0 -381
  344. package/src/server/handlers/editor.ts +0 -76
  345. package/src/server/handlers/fs.ts +0 -251
  346. package/src/server/handlers/loop.ts +0 -37
  347. package/src/server/handlers/memory.ts +0 -182
  348. package/src/server/handlers/mesh.ts +0 -362
  349. package/src/server/handlers/notes.ts +0 -47
  350. package/src/server/handlers/plugins.ts +0 -655
  351. package/src/server/handlers/project-settings.ts +0 -180
  352. package/src/server/handlers/scheduler.ts +0 -64
  353. package/src/server/handlers/session.ts +0 -226
  354. package/src/server/handlers/settings.ts +0 -157
  355. package/src/server/handlers/skills.ts +0 -378
  356. package/src/server/handlers/terminal.ts +0 -88
  357. package/src/server/handlers/themes.ts +0 -121
  358. package/src/server/handlers/update.ts +0 -133
  359. package/src/server/identity.ts +0 -56
  360. package/src/server/index.ts +0 -454
  361. package/src/server/logger.ts +0 -21
  362. package/src/server/mesh/connector.ts +0 -419
  363. package/src/server/mesh/crypto.ts +0 -106
  364. package/src/server/mesh/discovery.ts +0 -126
  365. package/src/server/mesh/pairing.ts +0 -123
  366. package/src/server/mesh/peers.ts +0 -60
  367. package/src/server/mesh/proxy.ts +0 -106
  368. package/src/server/mesh/session-sync.ts +0 -107
  369. package/src/server/project/bookmarks.ts +0 -83
  370. package/src/server/project/context-breakdown.ts +0 -307
  371. package/src/server/project/file-browser.ts +0 -106
  372. package/src/server/project/project-files.ts +0 -267
  373. package/src/server/project/pty-worker.cjs +0 -83
  374. package/src/server/project/registry.ts +0 -57
  375. package/src/server/project/sdk-bridge.ts +0 -1100
  376. package/src/server/project/session.ts +0 -723
  377. package/src/server/project/terminal.ts +0 -111
  378. package/src/server/project/warmup.ts +0 -285
  379. package/src/server/push.ts +0 -121
  380. package/src/server/tls.ts +0 -65
  381. package/src/server/tui.ts +0 -103
  382. package/src/server/update-checker.ts +0 -147
  383. package/src/server/ws/broadcast.ts +0 -61
  384. package/src/server/ws/router.ts +0 -123
  385. package/src/server/ws/server.ts +0 -2
  386. package/src/shared/analytics.ts +0 -40
  387. package/src/shared/messages.ts +0 -1302
  388. package/src/shared/models.ts +0 -255
  389. package/src/shared/project-settings.ts +0 -45
  390. package/tsconfig.json +0 -25
  391. package/vite.config.ts +0 -71
  392. /package/{src/server/runtime.ts → dist/server/runtime.js} +0 -0
  393. /package/{src/shared/constants.ts → dist/shared/constants.js} +0 -0
  394. /package/{src/shared/index.ts → dist/shared/index.js} +0 -0
@@ -1,578 +0,0 @@
1
- import { createRouter, createRootRoute, createRoute, createMemoryHistory } from "@tanstack/react-router";
2
- import { Outlet } from "@tanstack/react-router";
3
- import { useState, useEffect, useRef, useCallback } from "react";
4
- import { useFocusTrap } from "./hooks/useFocusTrap";
5
- import { Sidebar } from "./components/sidebar/Sidebar";
6
- import { WorkspaceView } from "./components/workspace/WorkspaceView";
7
- import { SetupWizard } from "./components/setup/SetupWizard";
8
- import { SettingsView } from "./components/settings/SettingsView";
9
- import { ProjectSettingsView } from "./components/project-settings/ProjectSettingsView";
10
- import { DashboardView } from "./components/dashboard/DashboardView";
11
- import { ProjectDashboardView } from "./components/dashboard/ProjectDashboardView";
12
- import { AnalyticsView } from "./components/analytics/AnalyticsView";
13
- import { NodeSettingsModal } from "./components/sidebar/NodeSettingsModal";
14
- import { AddProjectModal } from "./components/sidebar/AddProjectModal";
15
- import { useSidebar } from "./hooks/useSidebar";
16
- import { useWorkspace } from "./hooks/useWorkspace";
17
- import { useWebSocket } from "./hooks/useWebSocket";
18
- import { NodeDisconnectedOverlay } from "./components/ui/NodeDisconnectedOverlay";
19
- import { useSwipeDrawer } from "./hooks/useSwipeDrawer";
20
- import { exitSettings, getSidebarStore, handlePopState, closeDrawer, toggleDrawer } from "./stores/sidebar";
21
-
22
- function LoadingScreen() {
23
- var ws = useWebSocket();
24
- var [dataReceived, setDataReceived] = useState(false);
25
- var [minTimeElapsed, setMinTimeElapsed] = useState(false);
26
- var [initialLoadDone, setInitialLoadDone] = useState(false);
27
- var canvasRef = useRef<HTMLCanvasElement>(null);
28
- var frameRef = useRef<number>(0);
29
-
30
- useEffect(function () {
31
- var timer = setTimeout(function () {
32
- setMinTimeElapsed(true);
33
- }, 600);
34
- return function () { clearTimeout(timer); };
35
- }, []);
36
-
37
- useEffect(function () {
38
- if (ws.status !== "connected") return;
39
- function handleProjects() {
40
- setDataReceived(true);
41
- }
42
- ws.subscribe("projects:list", handleProjects);
43
- return function () { ws.unsubscribe("projects:list", handleProjects); };
44
- }, [ws]);
45
-
46
- var initialReady = dataReceived && minTimeElapsed;
47
- var isDisconnected = initialLoadDone && ws.status !== "connected";
48
- var ready = initialReady && !isDisconnected;
49
- var visible = !initialReady || isDisconnected;
50
-
51
- useEffect(function () {
52
- if (initialReady && !initialLoadDone) {
53
- var timer = setTimeout(function () {
54
- setInitialLoadDone(true);
55
- }, 300);
56
- return function () { clearTimeout(timer); };
57
- }
58
- }, [initialReady, initialLoadDone]);
59
-
60
- useEffect(function () {
61
- var canvas = canvasRef.current;
62
- if (!canvas) return;
63
- var ctx = canvas.getContext("2d");
64
- if (!ctx) return;
65
-
66
- var gridSize = 9;
67
- var spacing = 26;
68
- var dotRadius = 3.5;
69
- var padding = 20;
70
- var canvasSize = padding * 2 + (gridSize - 1) * spacing;
71
- var dpr = window.devicePixelRatio || 1;
72
-
73
- canvas.width = canvasSize * dpr;
74
- canvas.height = canvasSize * dpr;
75
- canvas.style.width = canvasSize + "px";
76
- canvas.style.height = canvasSize + "px";
77
- ctx.scale(dpr, dpr);
78
-
79
- var centerX = canvasSize / 2;
80
- var centerY = canvasSize / 2;
81
- var logoSquare = 14;
82
- var logoGap = 4;
83
- var logoHalf = (logoSquare * 2 + logoGap) / 2;
84
- var logoLeft = centerX - logoHalf;
85
- var logoTop = centerY - logoHalf;
86
- var logoRight = centerX + logoHalf;
87
- var logoBottom = centerY + logoHalf;
88
-
89
- var computedPrimary = getComputedStyle(document.documentElement).getPropertyValue("--color-primary").trim();
90
- var primary = computedPrimary ? "oklch(" + computedPrimary + ")" : "oklch(55% 0.25 280)";
91
-
92
- var prefersReducedMotion = window.matchMedia("(prefers-reduced-motion: reduce)").matches;
93
-
94
- type Dot = { x: number; y: number; col: number; row: number; hidden: boolean; brightness: number };
95
- var dots: Dot[] = [];
96
- for (var row = 0; row < gridSize; row++) {
97
- for (var col = 0; col < gridSize; col++) {
98
- var x = padding + col * spacing;
99
- var y = padding + row * spacing;
100
- var hidden = x + dotRadius > logoLeft && x - dotRadius < logoRight &&
101
- y + dotRadius > logoTop && y - dotRadius < logoBottom;
102
- dots.push({ x: x, y: y, col: col, row: row, hidden: hidden, brightness: 0.08 });
103
- }
104
- }
105
-
106
- type Connection = {
107
- a: number; b: number;
108
- birth: number; duration: number;
109
- fadeIn: number; fadeOut: number;
110
- };
111
- var connections: Connection[] = [];
112
- var maxConnections = 10;
113
- var now = performance.now();
114
-
115
- function getNeighbors(idx: number): number[] {
116
- var d = dots[idx];
117
- var result: number[] = [];
118
- for (var dr = -1; dr <= 1; dr++) {
119
- for (var dc = -1; dc <= 1; dc++) {
120
- if (dr === 0 && dc === 0) continue;
121
- var nr = d.row + dr;
122
- var nc = d.col + dc;
123
- if (nr >= 0 && nr < gridSize && nc >= 0 && nc < gridSize) {
124
- var ni = nr * gridSize + nc;
125
- if (!dots[ni].hidden) result.push(ni);
126
- }
127
- }
128
- }
129
- return result;
130
- }
131
-
132
- function drawStatic() {
133
- ctx!.clearRect(0, 0, canvasSize, canvasSize);
134
- for (var di = 0; di < dots.length; di++) {
135
- var dot = dots[di];
136
- if (dot.hidden) continue;
137
- ctx!.beginPath();
138
- ctx!.arc(dot.x, dot.y, dotRadius, 0, Math.PI * 2);
139
- ctx!.fillStyle = primary;
140
- ctx!.globalAlpha = 0.15;
141
- ctx!.fill();
142
- ctx!.globalAlpha = 1.0;
143
- }
144
- var squares = [
145
- [logoLeft, logoTop],
146
- [logoLeft + logoSquare + logoGap, logoTop],
147
- [logoLeft, logoTop + logoSquare + logoGap],
148
- [logoLeft + logoSquare + logoGap, logoTop + logoSquare + logoGap],
149
- ];
150
- for (var si = 0; si < squares.length; si++) {
151
- ctx!.fillStyle = primary;
152
- ctx!.globalAlpha = 0.9;
153
- ctx!.fillRect(squares[si][0], squares[si][1], logoSquare, logoSquare);
154
- ctx!.globalAlpha = 1.0;
155
- }
156
- }
157
-
158
- if (prefersReducedMotion) {
159
- drawStatic();
160
- return;
161
- }
162
-
163
- function animate() {
164
- now = performance.now();
165
- ctx!.clearRect(0, 0, canvasSize, canvasSize);
166
-
167
- if (connections.length < maxConnections && Math.random() < 0.04) {
168
- var candidates: number[] = [];
169
- for (var i = 0; i < dots.length; i++) {
170
- if (!dots[i].hidden) candidates.push(i);
171
- }
172
- var attempts = 0;
173
- while (attempts < 5 && connections.length < maxConnections) {
174
- var ai = candidates[Math.floor(Math.random() * candidates.length)];
175
- var neighbors = getNeighbors(ai);
176
- if (neighbors.length > 0) {
177
- var bi = neighbors[Math.floor(Math.random() * neighbors.length)];
178
- var exists = false;
179
- for (var j = 0; j < connections.length; j++) {
180
- if ((connections[j].a === ai && connections[j].b === bi) ||
181
- (connections[j].a === bi && connections[j].b === ai)) {
182
- exists = true;
183
- break;
184
- }
185
- }
186
- if (!exists) {
187
- connections.push({
188
- a: ai, b: bi,
189
- birth: now,
190
- duration: 2000 + Math.random() * 3000,
191
- fadeIn: 400,
192
- fadeOut: 400,
193
- });
194
- break;
195
- }
196
- }
197
- attempts++;
198
- }
199
- }
200
-
201
- var connectedSet = new Set<number>();
202
- var keep: Connection[] = [];
203
- for (var ci = 0; ci < connections.length; ci++) {
204
- var c = connections[ci];
205
- var age = now - c.birth;
206
- if (age > c.duration) continue;
207
- keep.push(c);
208
-
209
- var alpha = 1.0;
210
- if (age < c.fadeIn) {
211
- alpha = age / c.fadeIn;
212
- } else if (age > c.duration - c.fadeOut) {
213
- alpha = (c.duration - age) / c.fadeOut;
214
- }
215
-
216
- connectedSet.add(c.a);
217
- connectedSet.add(c.b);
218
-
219
- var da = dots[c.a];
220
- var db = dots[c.b];
221
- ctx!.beginPath();
222
- ctx!.moveTo(da.x, da.y);
223
- ctx!.lineTo(db.x, db.y);
224
- ctx!.strokeStyle = primary;
225
- ctx!.globalAlpha = alpha * 0.35;
226
- ctx!.lineWidth = 1.5;
227
- ctx!.stroke();
228
- ctx!.globalAlpha = 1.0;
229
- }
230
- connections = keep;
231
-
232
- for (var di = 0; di < dots.length; di++) {
233
- var dot = dots[di];
234
- if (dot.hidden) continue;
235
- var targetBrightness = connectedSet.has(di) ? 0.7 : 0.08;
236
- dot.brightness += (targetBrightness - dot.brightness) * 0.08;
237
- ctx!.beginPath();
238
- ctx!.arc(dot.x, dot.y, dotRadius, 0, Math.PI * 2);
239
- ctx!.fillStyle = primary;
240
- ctx!.globalAlpha = dot.brightness;
241
- ctx!.fill();
242
- ctx!.globalAlpha = 1.0;
243
- }
244
-
245
- var pulse = 0.4 + 0.2 * Math.sin(now / 800);
246
- var squares = [
247
- [logoLeft, logoTop],
248
- [logoLeft + logoSquare + logoGap, logoTop],
249
- [logoLeft, logoTop + logoSquare + logoGap],
250
- [logoLeft + logoSquare + logoGap, logoTop + logoSquare + logoGap],
251
- ];
252
- for (var si = 0; si < squares.length; si++) {
253
- var sx = squares[si][0];
254
- var sy = squares[si][1];
255
- ctx!.save();
256
- ctx!.shadowColor = primary;
257
- ctx!.shadowBlur = 8 + pulse * 6;
258
- ctx!.fillStyle = primary;
259
- ctx!.globalAlpha = 0.85 + pulse * 0.15;
260
- ctx!.fillRect(sx, sy, logoSquare, logoSquare);
261
- ctx!.restore();
262
- }
263
-
264
- frameRef.current = requestAnimationFrame(animate);
265
- }
266
-
267
- frameRef.current = requestAnimationFrame(animate);
268
-
269
- return function () {
270
- cancelAnimationFrame(frameRef.current);
271
- };
272
- }, []);
273
-
274
- if (!visible && initialReady) {
275
- return null;
276
- }
277
-
278
- var statusText = isDisconnected
279
- ? "Reconnecting..."
280
- : ws.status === "connecting" ? "Connecting..."
281
- : "Loading projects...";
282
-
283
- var bgClass = isDisconnected ? "bg-base-100/90" : "bg-base-100";
284
-
285
- return (
286
- <div
287
- className={"fixed inset-0 z-[9999] flex flex-col items-center justify-center " + bgClass}
288
- style={{ opacity: ready ? 0 : 1, transition: "opacity 300ms ease-out", pointerEvents: ready ? "none" : "auto" }}
289
- >
290
- <div className="flex flex-col items-center gap-7">
291
- <canvas ref={canvasRef} />
292
- <div className="flex flex-col items-center gap-2">
293
- <span className="text-[16px] font-mono font-bold text-base-content tracking-tight">Lattice</span>
294
- <span className="text-[12px] text-base-content/40">{statusText}</span>
295
- </div>
296
- </div>
297
- </div>
298
- );
299
- }
300
-
301
- function RemoveProjectConfirm() {
302
- var sidebar = useSidebar();
303
- var ws = useWebSocket();
304
- var slug = sidebar.confirmRemoveSlug;
305
- var removeModalRef = useRef<HTMLDivElement>(null);
306
- var stableCloseRemove = useCallback(function () { sidebar.closeConfirmRemove(); }, [sidebar.closeConfirmRemove]);
307
- useFocusTrap(removeModalRef, stableCloseRemove, !!slug);
308
-
309
- if (!slug) return null;
310
-
311
- var projects = (function () {
312
- try {
313
- var store = getSidebarStore();
314
- return store.state;
315
- } catch {
316
- return null;
317
- }
318
- })();
319
-
320
- return (
321
- <div ref={removeModalRef} className="fixed inset-0 z-[9999] flex items-center justify-center" role="dialog" aria-modal="true" aria-label="Remove Project">
322
- <div className="absolute inset-0 bg-base-content/50" onClick={sidebar.closeConfirmRemove} />
323
- <div className="relative bg-base-200 border border-base-content/15 rounded-2xl shadow-2xl w-full max-w-sm mx-4 overflow-hidden">
324
- <div className="px-5 py-4 border-b border-base-content/15">
325
- <h2 className="text-[15px] font-mono font-bold text-base-content">Remove Project</h2>
326
- </div>
327
- <div className="px-5 py-4">
328
- <p className="text-[13px] text-base-content/60">
329
- Remove <span className="font-semibold text-base-content">{slug}</span> from Lattice? This won't delete any files on disk.
330
- </p>
331
- </div>
332
- <div className="px-5 py-3 border-t border-base-content/15 flex justify-end gap-2">
333
- <button
334
- onClick={sidebar.closeConfirmRemove}
335
- className="btn btn-ghost btn-sm text-[12px]"
336
- >
337
- Cancel
338
- </button>
339
- <button
340
- onClick={function () {
341
- ws.send({
342
- type: "settings:update",
343
- settings: { removeProject: slug },
344
- } as any);
345
- if (sidebar.activeProjectSlug === slug) {
346
- sidebar.goToDashboard();
347
- }
348
- sidebar.closeConfirmRemove();
349
- }}
350
- className="btn btn-error btn-sm text-[12px]"
351
- >
352
- Remove
353
- </button>
354
- </div>
355
- </div>
356
- </div>
357
- );
358
- }
359
-
360
- function RootLayout() {
361
- var [setupComplete, setSetupComplete] = useState<boolean | null>(null);
362
- var ws = useWebSocket();
363
-
364
- useEffect(function () {
365
- function handleSettingsData(msg: { type: string; config?: { setupComplete?: boolean } }) {
366
- if (msg.type !== "settings:data") return;
367
- setSetupComplete(msg.config?.setupComplete === true);
368
- }
369
- ws.subscribe("settings:data", handleSettingsData as any);
370
- if (ws.status === "connected") {
371
- ws.send({ type: "settings:get" });
372
- }
373
- return function () {
374
- ws.unsubscribe("settings:data", handleSettingsData as any);
375
- };
376
- }, [ws.status]);
377
-
378
- var sidebar = useSidebar();
379
- var drawerSideRef = useRef<HTMLDivElement>(null);
380
-
381
- useSwipeDrawer(drawerSideRef, sidebar.drawerOpen, toggleDrawer, closeDrawer);
382
-
383
- useEffect(function () {
384
- function handleKeyDown(e: KeyboardEvent) {
385
- if (e.key === "Escape") {
386
- var state = getSidebarStore().state;
387
- if (state.sidebarMode === "settings") {
388
- exitSettings();
389
- }
390
- }
391
- }
392
- document.addEventListener("keydown", handleKeyDown);
393
- window.addEventListener("popstate", handlePopState);
394
- return function () {
395
- document.removeEventListener("keydown", handleKeyDown);
396
- window.removeEventListener("popstate", handlePopState);
397
- };
398
- }, []);
399
-
400
- if (setupComplete === null) {
401
- return <LoadingScreen />;
402
- }
403
-
404
- if (!setupComplete) {
405
- return (
406
- <SetupWizard onComplete={function () { setSetupComplete(true); }} />
407
- );
408
- }
409
-
410
- return (
411
- <div className="flex w-full h-full overflow-hidden bg-base-100">
412
- <a href="#main-content" className="sr-only focus:not-sr-only focus:fixed focus:top-2 focus:left-2 focus:z-[99999] focus:px-4 focus:py-2 focus:bg-primary focus:text-primary-content focus:rounded-lg focus:text-sm focus:font-semibold">
413
- Skip to content
414
- </a>
415
- <LoadingScreen />
416
- <div className="drawer lg:drawer-open h-full w-full">
417
- <input
418
- id="sidebar-drawer"
419
- type="checkbox"
420
- className="drawer-toggle"
421
- checked={sidebar.drawerOpen}
422
- readOnly
423
- />
424
-
425
- <main id="main-content" className="drawer-content flex flex-col h-full min-w-0 overflow-hidden relative">
426
- <Outlet />
427
- <NodeDisconnectedOverlay />
428
- </main>
429
-
430
- <div ref={drawerSideRef} className="drawer-side z-50 h-full">
431
- <label
432
- htmlFor="sidebar-drawer"
433
- aria-label="close sidebar"
434
- className="drawer-overlay"
435
- onClick={closeDrawer}
436
- />
437
- <nav aria-label="Sidebar navigation" className="h-full w-full lg:w-[284px] flex flex-col overflow-hidden">
438
- <Sidebar onSessionSelect={closeDrawer} />
439
- </nav>
440
- </div>
441
- </div>
442
- <NodeSettingsModal
443
- isOpen={sidebar.nodeSettingsOpen}
444
- onClose={sidebar.closeNodeSettings}
445
- />
446
- <AddProjectModal
447
- isOpen={sidebar.addProjectOpen}
448
- onClose={sidebar.closeAddProject}
449
- />
450
- <RemoveProjectConfirm />
451
- </div>
452
- );
453
- }
454
-
455
- import { Component } from "react";
456
- import type { ReactNode, ErrorInfo } from "react";
457
- import { AlertTriangle, RefreshCw } from "lucide-react";
458
-
459
- class ViewErrorBoundary extends Component<{ children: ReactNode; viewName: string }, { hasError: boolean; error: Error | null }> {
460
- constructor(props: { children: ReactNode; viewName: string }) {
461
- super(props);
462
- this.state = { hasError: false, error: null };
463
- }
464
- static getDerivedStateFromError(error: Error) {
465
- return { hasError: true, error: error };
466
- }
467
- componentDidCatch(error: Error, info: ErrorInfo) {
468
- console.error("[lattice] View error in " + this.props.viewName + ":", error, info.componentStack);
469
- }
470
- render() {
471
- if (this.state.hasError) {
472
- var self = this;
473
- return (
474
- <div className="flex flex-col items-center justify-center h-full bg-base-100 bg-lattice-grid gap-4 p-8">
475
- <AlertTriangle size={32} className="text-warning/50" />
476
- <div className="text-center max-w-[500px]">
477
- <p className="text-[14px] font-mono text-base-content/60 mb-1">
478
- Error in {this.props.viewName}
479
- </p>
480
- <p className="text-[12px] text-base-content/30 mb-4 font-mono break-all">
481
- {this.state.error?.message || "Unknown error"}
482
- </p>
483
- <button
484
- onClick={function () { self.setState({ hasError: false, error: null }); }}
485
- className="btn btn-ghost btn-sm text-[12px] gap-1.5"
486
- >
487
- <RefreshCw size={12} />
488
- Retry
489
- </button>
490
- </div>
491
- </div>
492
- );
493
- }
494
- return this.props.children;
495
- }
496
- }
497
-
498
- function IndexPage() {
499
- var sidebar = useSidebar();
500
- var workspace = useWorkspace();
501
- var viewName = sidebar.activeView.type;
502
-
503
- var activePane = workspace.panes.find(function (p) { return p.id === workspace.activePaneId; });
504
- var activeTab = activePane
505
- ? workspace.tabs.find(function (t) { return t.id === activePane!.activeTabId; })
506
- : null;
507
- var hasWorkspaceTab = activeTab && activeTab.id !== "chat";
508
-
509
- var content;
510
- if (viewName === "settings") {
511
- content = <SettingsView />;
512
- } else if (viewName === "project-settings") {
513
- content = <ProjectSettingsView />;
514
- } else if (viewName === "dashboard") {
515
- content = <DashboardView />;
516
- } else if (viewName === "project-dashboard") {
517
- content = <ProjectDashboardView />;
518
- } else if (viewName === "analytics") {
519
- content = <AnalyticsView />;
520
- } else {
521
- content = <WorkspaceView />;
522
- }
523
- return (
524
- <ViewErrorBoundary viewName={viewName}>
525
- {content}
526
- </ViewErrorBoundary>
527
- );
528
- }
529
-
530
- var rootRoute = createRootRoute({
531
- component: RootLayout,
532
- });
533
-
534
- var indexRoute = createRoute({
535
- getParentRoute: function () { return rootRoute; },
536
- path: "/",
537
- component: IndexPage,
538
- });
539
-
540
- var projectRoute = createRoute({
541
- getParentRoute: function () { return rootRoute; },
542
- path: "/$projectSlug",
543
- component: IndexPage,
544
- });
545
-
546
- var settingsRoute = createRoute({
547
- getParentRoute: function () { return rootRoute; },
548
- path: "/settings/$section",
549
- component: IndexPage,
550
- });
551
-
552
- var settingsIndexRoute = createRoute({
553
- getParentRoute: function () { return rootRoute; },
554
- path: "/settings",
555
- component: IndexPage,
556
- });
557
-
558
- var projectSettingsRoute = createRoute({
559
- getParentRoute: function () { return rootRoute; },
560
- path: "/$projectSlug/settings/$section",
561
- component: IndexPage,
562
- });
563
-
564
- var projectSettingsIndexRoute = createRoute({
565
- getParentRoute: function () { return rootRoute; },
566
- path: "/$projectSlug/settings",
567
- component: IndexPage,
568
- });
569
-
570
- var routeTree = rootRoute.addChildren([indexRoute, settingsIndexRoute, settingsRoute, projectSettingsIndexRoute, projectSettingsRoute, projectRoute]);
571
-
572
- export var router = createRouter({ routeTree });
573
-
574
- declare module "@tanstack/react-router" {
575
- interface Register {
576
- router: typeof router;
577
- }
578
- }
@@ -1,68 +0,0 @@
1
- import { Store } from "@tanstack/react-store";
2
- import type { AnalyticsPayload, AnalyticsPeriod, AnalyticsScope, AnalyticsSectionName } from "#shared";
3
-
4
- export interface AnalyticsState {
5
- data: Partial<AnalyticsPayload>;
6
- loadedSections: AnalyticsSectionName[];
7
- loading: boolean;
8
- error: string | null;
9
- period: AnalyticsPeriod;
10
- scope: AnalyticsScope;
11
- projectSlug: string | null;
12
- }
13
-
14
- var analyticsStore = new Store<AnalyticsState>({
15
- data: {},
16
- loadedSections: [],
17
- loading: false,
18
- error: null,
19
- period: "30d",
20
- scope: "global",
21
- projectSlug: null,
22
- });
23
-
24
- export function getAnalyticsStore(): Store<AnalyticsState> {
25
- return analyticsStore;
26
- }
27
-
28
- export function mergeAnalyticsSection(section: AnalyticsSectionName, sectionData: Partial<AnalyticsPayload>): void {
29
- analyticsStore.setState(function (state) {
30
- return {
31
- ...state,
32
- data: { ...state.data, ...sectionData },
33
- loadedSections: state.loadedSections.includes(section)
34
- ? state.loadedSections
35
- : [...state.loadedSections, section],
36
- };
37
- });
38
- }
39
-
40
- export function clearAnalyticsForRequest(): void {
41
- analyticsStore.setState(function (state) {
42
- return { ...state, data: {}, loadedSections: [], loading: true, error: null };
43
- });
44
- }
45
-
46
- export function setAnalyticsLoading(loading: boolean): void {
47
- analyticsStore.setState(function (state) {
48
- return { ...state, loading: loading };
49
- });
50
- }
51
-
52
- export function setAnalyticsError(error: string): void {
53
- analyticsStore.setState(function (state) {
54
- return { ...state, error: error, loading: false };
55
- });
56
- }
57
-
58
- export function setAnalyticsPeriod(period: AnalyticsPeriod): void {
59
- analyticsStore.setState(function (state) {
60
- return { ...state, period: period };
61
- });
62
- }
63
-
64
- export function setAnalyticsScope(scope: AnalyticsScope, projectSlug?: string): void {
65
- analyticsStore.setState(function (state) {
66
- return { ...state, scope: scope, projectSlug: projectSlug || null };
67
- });
68
- }
@@ -1,45 +0,0 @@
1
- import { Store } from "@tanstack/react-store";
2
- import type { MessageBookmark } from "#shared";
3
-
4
- export interface BookmarkState {
5
- bookmarks: MessageBookmark[];
6
- allBookmarks: MessageBookmark[];
7
- }
8
-
9
- var bookmarkStore = new Store<BookmarkState>({
10
- bookmarks: [],
11
- allBookmarks: [],
12
- });
13
-
14
- export function getBookmarkStore(): Store<BookmarkState> {
15
- return bookmarkStore;
16
- }
17
-
18
- export function setBookmarks(bookmarks: MessageBookmark[]): void {
19
- bookmarkStore.setState(function (state) {
20
- return { ...state, bookmarks };
21
- });
22
- }
23
-
24
- export function setAllBookmarks(bookmarks: MessageBookmark[]): void {
25
- bookmarkStore.setState(function (state) {
26
- return { ...state, allBookmarks: bookmarks };
27
- });
28
- }
29
-
30
- export function getBookmarkedUuids(): Set<string> {
31
- var set = new Set<string>();
32
- var bms = bookmarkStore.state.bookmarks;
33
- for (var i = 0; i < bms.length; i++) {
34
- set.add(bms[i].messageUuid);
35
- }
36
- return set;
37
- }
38
-
39
- export function findBookmarkByUuid(uuid: string): MessageBookmark | undefined {
40
- var bms = bookmarkStore.state.bookmarks;
41
- for (var i = 0; i < bms.length; i++) {
42
- if (bms[i].messageUuid === uuid) return bms[i];
43
- }
44
- return undefined;
45
- }