@cryptiklemur/lattice 4.0.2 → 5.0.1

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 +533 -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 -457
  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,133 +0,0 @@
1
- import { chmodSync, writeFileSync, accessSync, copyFileSync, unlinkSync, constants as fsConstants } from "node:fs";
2
- import { tmpdir } from "node:os";
3
- import { join } from "node:path";
4
- import { execSync, spawn } from "node:child_process";
5
- import type { ClientMessage } from "#shared";
6
- import { registerHandler } from "../ws/router";
7
- import { sendTo, broadcast } from "../ws/broadcast";
8
- import { checkForUpdate, getPackageName, getGitHubRepo, getInstallMode } from "../update-checker";
9
-
10
- function getAssetName(): string {
11
- var platform = process.platform === "darwin" ? "darwin" : "linux";
12
- var arch = process.arch === "arm64" ? "arm64" : "x64";
13
- return "lattice-" + platform + "-" + arch;
14
- }
15
-
16
- async function downloadBinaryUpdate(): Promise<{ success: boolean; message: string }> {
17
- var repo = getGitHubRepo();
18
- var assetName = getAssetName();
19
-
20
- try {
21
- var releaseRes = await fetch("https://api.github.com/repos/" + repo + "/releases/latest", {
22
- headers: { "Accept": "application/vnd.github.v3+json" },
23
- signal: AbortSignal.timeout(30000),
24
- });
25
-
26
- if (!releaseRes.ok) {
27
- return { success: false, message: "Failed to fetch release info (HTTP " + releaseRes.status + ")" };
28
- }
29
-
30
- var release = await releaseRes.json() as { assets?: Array<{ name: string; browser_download_url: string }> };
31
- var assets = release.assets ?? [];
32
- var asset = assets.find(function (a) { return a.name === assetName; });
33
-
34
- if (!asset) {
35
- return { success: false, message: "No binary found for " + assetName + " in latest release" };
36
- }
37
-
38
- var downloadRes = await fetch(asset.browser_download_url, {
39
- signal: AbortSignal.timeout(120000),
40
- });
41
-
42
- if (!downloadRes.ok) {
43
- return { success: false, message: "Failed to download binary (HTTP " + downloadRes.status + ")" };
44
- }
45
-
46
- var binary = new Uint8Array(await downloadRes.arrayBuffer());
47
- var execPath = process.execPath;
48
- var tmpPath = join(tmpdir(), "lattice-update-" + Date.now());
49
-
50
- writeFileSync(tmpPath, binary);
51
- chmodSync(tmpPath, 0o755);
52
-
53
- var needsSudo = false;
54
- try {
55
- accessSync(execPath, fsConstants.W_OK);
56
- } catch {
57
- needsSudo = true;
58
- }
59
-
60
- if (needsSudo) {
61
- try {
62
- execSync("sudo cp " + JSON.stringify(tmpPath) + " " + JSON.stringify(execPath), { stdio: "pipe", timeout: 10000 });
63
- execSync("sudo chmod +x " + JSON.stringify(execPath), { stdio: "pipe", timeout: 5000 });
64
- unlinkSync(tmpPath);
65
- } catch {
66
- return { success: false, message: "Update downloaded but needs sudo to install. Run: sudo cp " + tmpPath + " " + execPath };
67
- }
68
- } else {
69
- try { unlinkSync(execPath); } catch {}
70
- copyFileSync(tmpPath, execPath);
71
- chmodSync(execPath, 0o755);
72
- unlinkSync(tmpPath);
73
- }
74
-
75
- return { success: true, message: "Updated successfully. Restart the server to apply." };
76
- } catch (err) {
77
- return { success: false, message: "Update failed: " + (err instanceof Error ? err.message : String(err)) };
78
- }
79
- }
80
-
81
- registerHandler("update", function (clientId: string, message: ClientMessage) {
82
- if (message.type === "update:check") {
83
- var checkMsg = message as { type: "update:check"; force?: boolean };
84
- void checkForUpdate(checkMsg.force ?? false).then(function (info) {
85
- sendTo(clientId, {
86
- type: "update:status",
87
- currentVersion: info.currentVersion,
88
- latestVersion: info.latestVersion,
89
- updateAvailable: info.updateAvailable,
90
- releaseUrl: info.releaseUrl,
91
- installMode: info.installMode,
92
- });
93
- });
94
- return;
95
- }
96
-
97
- if (message.type === "update:apply") {
98
- {
99
- var pkgName = getPackageName();
100
- try {
101
- var proc = spawn("npm", ["install", "-g", pkgName + "@latest"], {
102
- stdio: ["ignore", "pipe", "pipe"],
103
- });
104
-
105
- var timeout = setTimeout(function () {
106
- proc.kill();
107
- }, 120000);
108
-
109
- proc.on("close", function (code) {
110
- clearTimeout(timeout);
111
- if (code === 0) {
112
- sendTo(clientId, { type: "update:apply_result", success: true, message: "Updated successfully. Restart the server to apply." });
113
- void checkForUpdate(true).then(function (info) {
114
- broadcast({
115
- type: "update:status",
116
- currentVersion: info.currentVersion,
117
- latestVersion: info.latestVersion,
118
- updateAvailable: info.updateAvailable,
119
- releaseUrl: info.releaseUrl,
120
- installMode: info.installMode,
121
- });
122
- });
123
- } else {
124
- sendTo(clientId, { type: "update:apply_result", success: false, message: "Update failed (exit code " + code + ")" });
125
- }
126
- });
127
- } catch (err) {
128
- sendTo(clientId, { type: "update:apply_result", success: false, message: "Failed to start update: " + String(err) });
129
- }
130
- }
131
- return;
132
- }
133
- });
@@ -1,56 +0,0 @@
1
- import { existsSync, readFileSync, writeFileSync, chmodSync } from "node:fs";
2
- import { join } from "node:path";
3
- import { randomUUID, generateKeyPairSync } from "node:crypto";
4
- import { getLatticeHome } from "./config";
5
-
6
- interface NodeIdentity {
7
- id: string;
8
- publicKey: string;
9
- privateKey: string;
10
- createdAt: number;
11
- }
12
-
13
- export function getIdentityPath(): string {
14
- return join(getLatticeHome(), "identity.json");
15
- }
16
-
17
- export function loadOrCreateIdentity(): NodeIdentity {
18
- var path = getIdentityPath();
19
- if (existsSync(path)) {
20
- var stored = JSON.parse(readFileSync(path, "utf-8")) as NodeIdentity;
21
- if (stored.publicKey && stored.privateKey) {
22
- return stored;
23
- }
24
- var keys = generateEd25519Keypair();
25
- stored.publicKey = keys.publicKey;
26
- stored.privateKey = keys.privateKey;
27
- writeFileSync(path, JSON.stringify(stored, null, 2), "utf-8");
28
- chmodSync(path, 0o600);
29
- return stored;
30
- }
31
- var keys = generateEd25519Keypair();
32
- var identity: NodeIdentity = {
33
- id: randomUUID(),
34
- publicKey: keys.publicKey,
35
- privateKey: keys.privateKey,
36
- createdAt: Date.now(),
37
- };
38
- writeFileSync(path, JSON.stringify(identity, null, 2), "utf-8");
39
- chmodSync(path, 0o600);
40
- return identity;
41
- }
42
-
43
- function generateEd25519Keypair(): { publicKey: string; privateKey: string } {
44
- var pair = generateKeyPairSync("ed25519", {
45
- publicKeyEncoding: { type: "spki", format: "der" },
46
- privateKeyEncoding: { type: "pkcs8", format: "der" },
47
- });
48
- return {
49
- publicKey: Buffer.from(pair.publicKey).toString("base64"),
50
- privateKey: Buffer.from(pair.privateKey).toString("base64"),
51
- };
52
- }
53
-
54
- export function getPublicKey(): string {
55
- return loadOrCreateIdentity().publicKey;
56
- }
@@ -1,457 +0,0 @@
1
- #!/usr/bin/env node
2
- delete process.env.CLAUDECODE;
3
- delete process.env.CLAUDE_CODE_ENTRYPOINT;
4
-
5
- import { existsSync, readFileSync, writeFileSync, unlinkSync, openSync } from "node:fs";
6
- import { join, dirname } from "node:path";
7
- import { fileURLToPath } from "node:url";
8
- import { spawn, execSync } from "node:child_process";
9
- import { getLatticeHome, loadConfig } from "./config";
10
-
11
- var __filename_local = fileURLToPath(import.meta.url);
12
- var __dirname_local = dirname(__filename_local);
13
-
14
- function getCurrentVersion(): string {
15
- try {
16
- var pkg = JSON.parse(readFileSync(join(__dirname_local, "../../package.json"), "utf-8"));
17
- return pkg.version || "0.0.0";
18
- } catch {
19
- return "0.0.0";
20
- }
21
- }
22
-
23
- var args = process.argv.slice(2);
24
- var command = "start";
25
- var portOverride: number | null = null;
26
-
27
- for (var i = 0; i < args.length; i++) {
28
- if (args[i] === "--port" && i + 1 < args.length) {
29
- portOverride = parseInt(args[i + 1], 10);
30
- i++;
31
- } else if (args[i].startsWith("--port=")) {
32
- portOverride = parseInt(args[i].split("=")[1], 10);
33
- } else if (!args[i].startsWith("-")) {
34
- command = args[i];
35
- }
36
- }
37
-
38
- function getEffectivePort(): number {
39
- return portOverride ?? loadConfig().port;
40
- }
41
-
42
- function getPidPath(port?: number): string {
43
- var p = port ?? getEffectivePort();
44
- return join(getLatticeHome(), "daemon-" + p + ".pid");
45
- }
46
-
47
- function readPid(port?: number): number | null {
48
- var pidPath = getPidPath(port);
49
- if (!existsSync(pidPath)) {
50
- return null;
51
- }
52
- try {
53
- var raw = readFileSync(pidPath, "utf-8").trim();
54
- var pid = parseInt(raw, 10);
55
- return isNaN(pid) ? null : pid;
56
- } catch {
57
- return null;
58
- }
59
- }
60
-
61
- function writePid(pid: number, port?: number): void {
62
- writeFileSync(getPidPath(port), String(pid), "utf-8");
63
- }
64
-
65
- function removePid(port?: number): void {
66
- var pidPath = getPidPath(port);
67
- if (existsSync(pidPath)) {
68
- try {
69
- unlinkSync(pidPath);
70
- } catch {
71
- }
72
- }
73
- }
74
-
75
- function isDaemonRunning(pid: number): boolean {
76
- try {
77
- process.kill(pid, 0);
78
- return true;
79
- } catch {
80
- return false;
81
- }
82
- }
83
-
84
- function spawnDaemon(port: number): number {
85
- var logPath = join(getLatticeHome(), "daemon.log");
86
- var logFd = openSync(logPath, "a");
87
- var pkgRoot = join(__dirname_local, "..");
88
- var localTsx = join(pkgRoot, "node_modules", ".bin", "tsx");
89
- var tsxBin = existsSync(localTsx) ? localTsx : "tsx";
90
- var child = spawn(tsxBin, ["--tsconfig", join(pkgRoot, "tsconfig.json"), __filename_local, "daemon", "--port", String(port)], {
91
- detached: true,
92
- stdio: ["ignore", logFd, logFd],
93
- env: { ...process.env, LATTICE_PORT: undefined },
94
- });
95
- child.unref();
96
- return child.pid!;
97
- }
98
-
99
- switch (command) {
100
- case "daemon":
101
- await runDaemon();
102
- break;
103
- case "start":
104
- await runStart();
105
- break;
106
- case "stop":
107
- runStop();
108
- break;
109
- case "restart":
110
- await runRestart();
111
- break;
112
- case "status":
113
- runStatus();
114
- break;
115
- case "update":
116
- await runUpdate();
117
- break;
118
- case "version":
119
- await runVersion();
120
- break;
121
- case "logs":
122
- runLogs();
123
- break;
124
- case "open":
125
- runOpen();
126
- break;
127
- case "config":
128
- runConfigInfo();
129
- break;
130
- case "help":
131
- case "--help":
132
- case "-h":
133
- runHelp();
134
- break;
135
- default:
136
- console.log("[lattice] Unknown command: " + command);
137
- runHelp();
138
- process.exit(1);
139
- }
140
-
141
- async function runDaemon(): Promise<void> {
142
- var { printBanner, printStatus, printQrCode, runOnboarding } = await import("./tui");
143
- var { startDaemon } = await import("./daemon");
144
- var { broadcast, closeAllClients } = await import("./ws/broadcast");
145
- var { getActiveStreamCount } = await import("./project/sdk-bridge");
146
- var { stopMeshConnections } = await import("./mesh/connector");
147
-
148
- var onboarding = await runOnboarding();
149
- if (onboarding.passphrase) {
150
- var { hashPassphrase } = await import("./auth/passphrase");
151
- var config = loadConfig();
152
- config.passphraseHash = await hashPassphrase(onboarding.passphrase);
153
- var { saveConfig: saveCfg } = await import("./config");
154
- saveCfg(config);
155
- }
156
-
157
- var effectivePort = portOverride ?? onboarding.port;
158
-
159
- writePid(process.pid);
160
- var shutdownInProgress = false;
161
- function gracefulShutdown(): void {
162
- if (shutdownInProgress) return;
163
- shutdownInProgress = true;
164
- console.log("\n[lattice] Shutting down gracefully...");
165
-
166
- broadcast({ type: "chat:error", message: "Server is shutting down" });
167
- stopMeshConnections();
168
-
169
- var waited = 0;
170
- var maxWait = 2000;
171
- var checkInterval = setInterval(function () {
172
- var activeCount = getActiveStreamCount();
173
- waited += 500;
174
- if (activeCount === 0 || waited >= maxWait) {
175
- clearInterval(checkInterval);
176
- closeAllClients();
177
- removePid();
178
- process.exit(0);
179
- }
180
- }, 500);
181
- }
182
- process.on("SIGTERM", gracefulShutdown);
183
- process.on("SIGINT", gracefulShutdown);
184
- await startDaemon(effectivePort);
185
-
186
- var config = loadConfig();
187
- var protocol = config.tls ? "https" : "http";
188
- var url = protocol + "://localhost:" + config.port;
189
- var version = getCurrentVersion();
190
- var projectCount = config.projects.length;
191
- var sessionCount = 0;
192
- try {
193
- var { listSessions } = await import("./project/session");
194
- for (var i = 0; i < config.projects.length; i++) {
195
- var result = await listSessions(config.projects[i].slug, { limit: 0 });
196
- sessionCount += result.totalCount;
197
- }
198
- } catch {}
199
-
200
- printBanner();
201
- await printQrCode(url);
202
- printStatus(config, version, projectCount, sessionCount);
203
- }
204
-
205
- async function runStart(): Promise<void> {
206
- var pid = readPid();
207
- if (pid !== null && isDaemonRunning(pid)) {
208
- console.log("[lattice] Daemon is already running (PID " + pid + ")");
209
- var config = loadConfig();
210
- var url = (config.tls ? "https" : "http") + "://localhost:" + config.port;
211
- openBrowser(url);
212
- return;
213
- }
214
-
215
- removePid();
216
-
217
- var config = loadConfig();
218
- var port = portOverride ?? config.port;
219
- var childPid = spawnDaemon(port);
220
- writePid(childPid);
221
- console.log("[lattice] Daemon started (PID " + childPid + ")");
222
- console.log("[lattice] Logs: " + join(getLatticeHome(), "daemon.log"));
223
-
224
- await new Promise<void>(function (resolve) {
225
- setTimeout(resolve, 800);
226
- });
227
-
228
- var url = (config.tls ? "https" : "http") + "://localhost:" + port;
229
- console.log("[lattice] Opening " + url);
230
- openBrowser(url);
231
- }
232
-
233
- function runStop(): void {
234
- var pid = readPid();
235
- if (pid === null) {
236
- console.log("[lattice] No PID file found. Daemon may not be running.");
237
- process.exit(1);
238
- }
239
-
240
- if (!isDaemonRunning(pid)) {
241
- console.log("[lattice] Daemon is not running (stale PID " + pid + ")");
242
- removePid();
243
- process.exit(0);
244
- }
245
-
246
- try {
247
- process.kill(pid, "SIGTERM");
248
- removePid();
249
- console.log("[lattice] Daemon stopped (PID " + pid + ")");
250
- } catch (err) {
251
- console.error("[lattice] Failed to stop daemon:", err);
252
- process.exit(1);
253
- }
254
- }
255
-
256
- function runHelp(): void {
257
- console.log("");
258
- console.log(" lattice — Multi-machine agentic dashboard for Claude Code");
259
- console.log("");
260
- console.log(" Usage: lattice [command] [options]");
261
- console.log("");
262
- console.log(" Commands:");
263
- console.log(" start Start the daemon and open the UI (default)");
264
- console.log(" stop Stop the running daemon");
265
- console.log(" restart Stop and restart the daemon");
266
- console.log(" status Show daemon status and connection info");
267
- console.log(" update Check for updates and install the latest version");
268
- console.log(" version Show current and latest version");
269
- console.log(" logs Tail the daemon log");
270
- console.log(" open Open the UI in the browser");
271
- console.log(" config Show configuration paths and settings");
272
- console.log(" help Show this help message");
273
- console.log("");
274
- console.log(" Options:");
275
- console.log(" --port=N Override the server port");
276
- console.log("");
277
- console.log(" Environment:");
278
- console.log(" LATTICE_HOME Data directory (default: ~/.lattice)");
279
- console.log(" DEBUG Enable debug logging (e.g. DEBUG=lattice:*)");
280
- console.log("");
281
- }
282
-
283
- async function runRestart(): Promise<void> {
284
- var pid = readPid();
285
- if (pid !== null && isDaemonRunning(pid)) {
286
- console.log("[lattice] Stopping daemon (PID " + pid + ")...");
287
- try {
288
- process.kill(pid, "SIGTERM");
289
- } catch {}
290
- removePid();
291
-
292
- var waited = 0;
293
- while (waited < 5000) {
294
- try {
295
- process.kill(pid, 0);
296
- await new Promise<void>(function (r) { setTimeout(r, 200); });
297
- waited += 200;
298
- } catch {
299
- break;
300
- }
301
- }
302
- }
303
-
304
- console.log("[lattice] Starting daemon...");
305
- var restartPort = portOverride ?? loadConfig().port;
306
- var childPid = spawnDaemon(restartPort);
307
- writePid(childPid);
308
- console.log("[lattice] Daemon started (PID " + childPid + ")");
309
- }
310
-
311
- async function runVersion(): Promise<void> {
312
- var { checkForUpdate } = await import("./update-checker");
313
- var info = await checkForUpdate(true);
314
- console.log("[lattice] Current: v" + info.currentVersion);
315
- if (info.latestVersion) {
316
- if (info.updateAvailable) {
317
- console.log("[lattice] Latest: v" + info.latestVersion + " (update available)");
318
- console.log("[lattice] Run 'lattice update' to install");
319
- } else {
320
- console.log("[lattice] Latest: v" + info.latestVersion + " (up to date)");
321
- }
322
- }
323
- console.log("[lattice] Mode: npm");
324
- }
325
-
326
- function runLogs(): void {
327
- var logPath = join(getLatticeHome(), "daemon.log");
328
- if (!existsSync(logPath)) {
329
- console.log("[lattice] No log file found at " + logPath);
330
- process.exit(1);
331
- }
332
- console.log("[lattice] Tailing " + logPath + " (Ctrl+C to stop)");
333
- var proc = spawn("tail", ["-f", "-n", "50", logPath], {
334
- stdio: ["ignore", "inherit", "inherit"],
335
- });
336
- process.on("SIGINT", function () {
337
- proc.kill();
338
- process.exit(0);
339
- });
340
- }
341
-
342
- function runOpen(): void {
343
- var config = loadConfig();
344
- var pid = readPid();
345
- if (pid === null || !isDaemonRunning(pid)) {
346
- console.log("[lattice] Daemon is not running. Start it with 'lattice start'");
347
- process.exit(1);
348
- }
349
- var url = (config.tls ? "https" : "http") + "://localhost:" + config.port;
350
- console.log("[lattice] Opening " + url);
351
- openBrowser(url);
352
- }
353
-
354
- function runConfigInfo(): void {
355
- var config = loadConfig();
356
- var home = getLatticeHome();
357
- console.log("[lattice] Home: " + home);
358
- console.log("[lattice] Config: " + join(home, "config.json"));
359
- console.log("[lattice] Port: " + config.port);
360
- console.log("[lattice] Name: " + config.name);
361
- console.log("[lattice] TLS: " + (config.tls ? "enabled" : "disabled"));
362
- console.log("[lattice] Projects: " + config.projects.length);
363
- for (var i = 0; i < config.projects.length; i++) {
364
- console.log(" " + config.projects[i].slug + " → " + config.projects[i].path);
365
- }
366
- if (config.passphraseHash) {
367
- console.log("[lattice] Passphrase: set");
368
- }
369
- if (config.costBudget) {
370
- console.log("[lattice] Budget: $" + config.costBudget.dailyLimit + "/day (" + config.costBudget.enforcement + ")");
371
- }
372
- }
373
-
374
- function runStatus(): void {
375
- var pid = readPid();
376
- if (pid === null) {
377
- console.log("[lattice] Status: not running (no PID file)");
378
- process.exit(0);
379
- }
380
-
381
- if (!isDaemonRunning(pid)) {
382
- console.log("[lattice] Status: not running (stale PID " + pid + ")");
383
- removePid();
384
- process.exit(0);
385
- }
386
-
387
- var config = loadConfig();
388
- var url = (config.tls ? "https" : "http") + "://localhost:" + config.port;
389
- console.log("[lattice] Status: running");
390
- console.log("[lattice] PID: " + pid);
391
- console.log("[lattice] Port: " + config.port);
392
- console.log("[lattice] URL: " + url);
393
- }
394
-
395
- async function runUpdate(): Promise<void> {
396
- var { checkForUpdate, getPackageName } = await import("./update-checker");
397
- console.log("[lattice] Checking for updates...");
398
- var info = await checkForUpdate(true);
399
-
400
- if (!info.latestVersion) {
401
- console.log("[lattice] Could not check for updates. Try again later.");
402
- process.exit(1);
403
- }
404
-
405
- if (!info.updateAvailable) {
406
- console.log("[lattice] Already on latest version (%s)", info.currentVersion);
407
- process.exit(0);
408
- }
409
-
410
- console.log("[lattice] Update available: %s -> %s", info.currentVersion, info.latestVersion);
411
- console.log("[lattice] Installing...");
412
-
413
- var pkgName = getPackageName();
414
- var proc = spawn("npm", ["install", "-g", pkgName + "@latest"], {
415
- stdio: ["ignore", "inherit", "inherit"],
416
- });
417
- var code = await new Promise<number>(function (resolve) {
418
- proc.on("close", function (c) { resolve(c ?? 1); });
419
- });
420
-
421
- if (code === 0) {
422
- console.log("[lattice] Updated to %s", info.latestVersion);
423
-
424
- var pid = readPid();
425
- if (pid !== null && isDaemonRunning(pid)) {
426
- console.log("[lattice] Restarting daemon...");
427
- try {
428
- process.kill(pid, "SIGTERM");
429
- } catch {}
430
- removePid();
431
- await new Promise<void>(function (resolve) { setTimeout(resolve, 1000); });
432
-
433
- var updatePort = portOverride ?? loadConfig().port;
434
- var childPid = spawnDaemon(updatePort);
435
- writePid(childPid);
436
- console.log("[lattice] Daemon restarted (PID %d)", childPid);
437
- }
438
- } else {
439
- console.error("[lattice] Update failed (exit code %d)", code);
440
- process.exit(1);
441
- }
442
- }
443
-
444
- function openBrowser(url: string): void {
445
- var platform = process.platform;
446
- try {
447
- if (platform === "win32") {
448
- spawn("cmd", ["/c", "start", url], { detached: true, stdio: "ignore" }).unref();
449
- } else if (platform === "darwin") {
450
- spawn("open", [url], { detached: true, stdio: "ignore" }).unref();
451
- } else {
452
- spawn("xdg-open", [url], { detached: true, stdio: "ignore" }).unref();
453
- }
454
- } catch {
455
- console.log("[lattice] Could not open browser. Visit: " + url);
456
- }
457
- }
@@ -1,21 +0,0 @@
1
- import createDebug from "debug";
2
-
3
- export var log = {
4
- server: createDebug("lattice:server"),
5
- ws: createDebug("lattice:ws"),
6
- chat: createDebug("lattice:chat"),
7
- session: createDebug("lattice:session"),
8
- mesh: createDebug("lattice:mesh"),
9
- meshConnect: createDebug("lattice:mesh:connect"),
10
- meshHello: createDebug("lattice:mesh:hello"),
11
- meshProxy: createDebug("lattice:mesh:proxy"),
12
- router: createDebug("lattice:router"),
13
- broadcast: createDebug("lattice:broadcast"),
14
- auth: createDebug("lattice:auth"),
15
- fs: createDebug("lattice:fs"),
16
- analytics: createDebug("lattice:analytics"),
17
- plugins: createDebug("lattice:plugins"),
18
- update: createDebug("lattice:update"),
19
- terminal: createDebug("lattice:terminal"),
20
- settings: createDebug("lattice:settings"),
21
- };