@polderlabs/bizar 9.0.0 → 10.0.7

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 (1306) hide show
  1. package/bizar-dash/BROWSER_VERIFICATION.md +190 -0
  2. package/bizar-dash/CHANGELOG.md +572 -0
  3. package/bizar-dash/CONTROL_SURFACES.md +157 -0
  4. package/bizar-dash/SETTINGS_AUDIT.md +225 -0
  5. package/bizar-dash/dist/assets/ActivityFeed-Da-JCrE6.js +11 -0
  6. package/bizar-dash/dist/assets/ActivityFeed-Da-JCrE6.js.map +1 -0
  7. package/bizar-dash/dist/assets/ActivityView-nIRsSETb.js +2 -0
  8. package/bizar-dash/dist/assets/ActivityView-nIRsSETb.js.map +1 -0
  9. package/bizar-dash/dist/assets/AdminView-DP1NMxmG.js +11 -0
  10. package/bizar-dash/dist/assets/AdminView-DP1NMxmG.js.map +1 -0
  11. package/bizar-dash/dist/assets/AgentActivity-lSPkOr-O.js +67 -0
  12. package/bizar-dash/dist/assets/AgentActivity-lSPkOr-O.js.map +1 -0
  13. package/bizar-dash/dist/assets/AgentsView-BIWGkz7w.js +13 -0
  14. package/bizar-dash/dist/assets/AgentsView-BIWGkz7w.js.map +1 -0
  15. package/bizar-dash/dist/assets/Alert-DN0UysMg.js +6 -0
  16. package/bizar-dash/dist/assets/Alert-DN0UysMg.js.map +1 -0
  17. package/bizar-dash/dist/assets/ArtifactsView-CDIhPBAx.js +6 -0
  18. package/bizar-dash/dist/assets/ArtifactsView-CDIhPBAx.js.map +1 -0
  19. package/bizar-dash/dist/assets/AuthView-DW5cs7ma.js +16 -0
  20. package/bizar-dash/dist/assets/AuthView-DW5cs7ma.js.map +1 -0
  21. package/bizar-dash/dist/assets/Avatar-DZPv9pvd.js +6 -0
  22. package/bizar-dash/dist/assets/Avatar-DZPv9pvd.js.map +1 -0
  23. package/bizar-dash/dist/assets/BackgroundJobsView-D8O-EyMD.js +1 -0
  24. package/bizar-dash/dist/assets/BackgroundJobsView-D8O-EyMD.js.map +1 -0
  25. package/bizar-dash/dist/assets/BackupView-uwXkhxOV.js +1 -0
  26. package/bizar-dash/dist/assets/BackupView-uwXkhxOV.js.map +1 -0
  27. package/bizar-dash/dist/assets/Card-Tyboihu7.js +1 -0
  28. package/bizar-dash/dist/assets/Card-Tyboihu7.js.map +1 -0
  29. package/bizar-dash/dist/assets/ChatView-DRBHzgay.js +9 -0
  30. package/bizar-dash/dist/assets/ChatView-DRBHzgay.js.map +1 -0
  31. package/bizar-dash/dist/assets/Chip-BrXIlR9w.js +1 -0
  32. package/bizar-dash/dist/assets/Chip-BrXIlR9w.js.map +1 -0
  33. package/bizar-dash/dist/assets/ClaudeSessionsView-Ck62jaOr.js +1 -0
  34. package/bizar-dash/dist/assets/ClaudeSessionsView-Ck62jaOr.js.map +1 -0
  35. package/bizar-dash/dist/assets/ClipboardView-DfND6xL6.js +1 -0
  36. package/bizar-dash/dist/assets/ClipboardView-DfND6xL6.js.map +1 -0
  37. package/bizar-dash/dist/assets/ConfigView-DjJmSrOJ.js +1 -0
  38. package/bizar-dash/dist/assets/ConfigView-DjJmSrOJ.js.map +1 -0
  39. package/bizar-dash/dist/assets/DiagnosticsView-CKgItf0J.js +2 -0
  40. package/bizar-dash/dist/assets/DiagnosticsView-CKgItf0J.js.map +1 -0
  41. package/bizar-dash/dist/assets/DialogsView-DHYF8dE1.js +6 -0
  42. package/bizar-dash/dist/assets/DialogsView-DHYF8dE1.js.map +1 -0
  43. package/bizar-dash/dist/assets/DoctorView-DDLHrSKk.js +6 -0
  44. package/bizar-dash/dist/assets/DoctorView-DDLHrSKk.js.map +1 -0
  45. package/bizar-dash/dist/assets/EmptyState-DZ2ouKwd.js +1 -0
  46. package/bizar-dash/dist/assets/EmptyState-DZ2ouKwd.js.map +1 -0
  47. package/bizar-dash/dist/assets/EnvVarsView-D1cx83mB.js +8 -0
  48. package/bizar-dash/dist/assets/EnvVarsView-D1cx83mB.js.map +1 -0
  49. package/bizar-dash/dist/assets/ErrorState-DwwJ2-Jq.js +1 -0
  50. package/bizar-dash/dist/assets/ErrorState-DwwJ2-Jq.js.map +1 -0
  51. package/bizar-dash/dist/assets/EvalView-C9aYixXW.js +1 -0
  52. package/bizar-dash/dist/assets/EvalView-C9aYixXW.js.map +1 -0
  53. package/bizar-dash/dist/assets/GoalsView-DZa_mGmh.js +6 -0
  54. package/bizar-dash/dist/assets/GoalsView-DZa_mGmh.js.map +1 -0
  55. package/bizar-dash/dist/assets/Grid-CiRyhAgR.js +1 -0
  56. package/bizar-dash/dist/assets/Grid-CiRyhAgR.js.map +1 -0
  57. package/bizar-dash/dist/assets/HeadroomView-CNc-TI7u.js +11 -0
  58. package/bizar-dash/dist/assets/HeadroomView-CNc-TI7u.js.map +1 -0
  59. package/bizar-dash/dist/assets/HistoryView-Dv7aPxJE.js +1 -0
  60. package/bizar-dash/dist/assets/HistoryView-Dv7aPxJE.js.map +1 -0
  61. package/bizar-dash/dist/assets/Input-BbFUDQnS.js +1 -0
  62. package/bizar-dash/dist/assets/Input-BbFUDQnS.js.map +1 -0
  63. package/bizar-dash/dist/assets/LibrariesView-DBQ83TNa.js +6 -0
  64. package/bizar-dash/dist/assets/LibrariesView-DBQ83TNa.js.map +1 -0
  65. package/bizar-dash/dist/assets/LightRAGView-JYpE5u9p.js +6 -0
  66. package/bizar-dash/dist/assets/LightRAGView-JYpE5u9p.js.map +1 -0
  67. package/bizar-dash/dist/assets/ListHeader-BGjm11Z0.js +1 -0
  68. package/bizar-dash/dist/assets/ListHeader-BGjm11Z0.js.map +1 -0
  69. package/bizar-dash/dist/assets/MemoryView-CnOP2MvM.js +8 -0
  70. package/bizar-dash/dist/assets/MemoryView-CnOP2MvM.js.map +1 -0
  71. package/bizar-dash/dist/assets/MessageBubble-5vUAquDx.js +29 -0
  72. package/bizar-dash/dist/assets/MessageBubble-5vUAquDx.js.map +1 -0
  73. package/bizar-dash/dist/assets/MiscView-BBcpUbZZ.js +1 -0
  74. package/bizar-dash/dist/assets/MiscView-BBcpUbZZ.js.map +1 -0
  75. package/bizar-dash/dist/assets/ModsView-CU4cAmIz.js +6 -0
  76. package/bizar-dash/dist/assets/ModsView-CU4cAmIz.js.map +1 -0
  77. package/bizar-dash/dist/assets/NotificationsView-BYffvthq.js +6 -0
  78. package/bizar-dash/dist/assets/NotificationsView-BYffvthq.js.map +1 -0
  79. package/bizar-dash/dist/assets/ObsidianView-D3bI0row.js +1 -0
  80. package/bizar-dash/dist/assets/ObsidianView-D3bI0row.js.map +1 -0
  81. package/bizar-dash/dist/assets/OverviewView-0tq8f-Y0.js +1 -0
  82. package/bizar-dash/dist/assets/OverviewView-0tq8f-Y0.js.map +1 -0
  83. package/bizar-dash/dist/assets/ProgressBar-B-h60LKA.js +1 -0
  84. package/bizar-dash/dist/assets/ProgressBar-B-h60LKA.js.map +1 -0
  85. package/bizar-dash/dist/assets/ProjectsView-DhX5lzHS.js +11 -0
  86. package/bizar-dash/dist/assets/ProjectsView-DhX5lzHS.js.map +1 -0
  87. package/bizar-dash/dist/assets/ProvidersView-CJMX7jm9.js +11 -0
  88. package/bizar-dash/dist/assets/ProvidersView-CJMX7jm9.js.map +1 -0
  89. package/bizar-dash/dist/assets/SchedulesView-CcwDQ9Nm.js +1 -0
  90. package/bizar-dash/dist/assets/SchedulesView-CcwDQ9Nm.js.map +1 -0
  91. package/bizar-dash/dist/assets/Select-Cw7Qtz2M.js +6 -0
  92. package/bizar-dash/dist/assets/Select-Cw7Qtz2M.js.map +1 -0
  93. package/bizar-dash/dist/assets/SettingsRow-DgsgbPSI.js +1 -0
  94. package/bizar-dash/dist/assets/SettingsRow-DgsgbPSI.js.map +1 -0
  95. package/bizar-dash/dist/assets/SettingsView-DTAFdKyK.js +18 -0
  96. package/bizar-dash/dist/assets/SettingsView-DTAFdKyK.js.map +1 -0
  97. package/bizar-dash/dist/assets/Sheet-DH-WNJ3Y.js +1 -0
  98. package/bizar-dash/dist/assets/Sheet-DH-WNJ3Y.js.map +1 -0
  99. package/bizar-dash/dist/assets/Slider-DXbJuQ7y.js +1 -0
  100. package/bizar-dash/dist/assets/Slider-DXbJuQ7y.js.map +1 -0
  101. package/bizar-dash/dist/assets/Sparkline-CYtAn82j.js +1 -0
  102. package/bizar-dash/dist/assets/Sparkline-CYtAn82j.js.map +1 -0
  103. package/bizar-dash/dist/assets/Switch-BItGrPqr.js +10 -0
  104. package/bizar-dash/dist/assets/Switch-BItGrPqr.js.map +1 -0
  105. package/bizar-dash/dist/assets/TasksView-i5tm6CkX.js +6 -0
  106. package/bizar-dash/dist/assets/TasksView-i5tm6CkX.js.map +1 -0
  107. package/bizar-dash/dist/assets/Textarea-qYDf3yds.js +1 -0
  108. package/bizar-dash/dist/assets/Textarea-qYDf3yds.js.map +1 -0
  109. package/bizar-dash/dist/assets/UpdateView-Xln-ej26.js +6 -0
  110. package/bizar-dash/dist/assets/UpdateView-Xln-ej26.js.map +1 -0
  111. package/bizar-dash/dist/assets/UsageView-BGuZSUZ6.js +1 -0
  112. package/bizar-dash/dist/assets/UsageView-BGuZSUZ6.js.map +1 -0
  113. package/bizar-dash/dist/assets/ViewHeader-BqIPVKuG.js +6 -0
  114. package/bizar-dash/dist/assets/ViewHeader-BqIPVKuG.js.map +1 -0
  115. package/bizar-dash/dist/assets/VoiceView-CWUOCQs_.js +1 -0
  116. package/bizar-dash/dist/assets/VoiceView-CWUOCQs_.js.map +1 -0
  117. package/bizar-dash/dist/assets/brain-fsBSDl2g.js +6 -0
  118. package/bizar-dash/dist/assets/brain-fsBSDl2g.js.map +1 -0
  119. package/bizar-dash/dist/assets/calendar-DsHTZoCU.js +6 -0
  120. package/bizar-dash/dist/assets/calendar-DsHTZoCU.js.map +1 -0
  121. package/bizar-dash/dist/assets/circle-CqSxqqeJ.js +6 -0
  122. package/bizar-dash/dist/assets/circle-CqSxqqeJ.js.map +1 -0
  123. package/bizar-dash/dist/assets/circle-alert-BsLl001l.js +6 -0
  124. package/bizar-dash/dist/assets/circle-alert-BsLl001l.js.map +1 -0
  125. package/bizar-dash/dist/assets/circle-check-rVKMQmZp.js +6 -0
  126. package/bizar-dash/dist/assets/circle-check-rVKMQmZp.js.map +1 -0
  127. package/bizar-dash/dist/assets/clock-OuficfgH.js +6 -0
  128. package/bizar-dash/dist/assets/clock-OuficfgH.js.map +1 -0
  129. package/bizar-dash/dist/assets/cmdk-DVxytz9i.js +80 -0
  130. package/bizar-dash/dist/assets/cmdk-DVxytz9i.js.map +1 -0
  131. package/bizar-dash/dist/assets/dnd-kit-DrHErSkw.js +5 -0
  132. package/bizar-dash/dist/assets/dnd-kit-DrHErSkw.js.map +1 -0
  133. package/bizar-dash/dist/assets/download-BdHlstUY.js +6 -0
  134. package/bizar-dash/dist/assets/download-BdHlstUY.js.map +1 -0
  135. package/bizar-dash/dist/assets/external-link-DA3_VGm-.js +6 -0
  136. package/bizar-dash/dist/assets/external-link-DA3_VGm-.js.map +1 -0
  137. package/bizar-dash/dist/assets/file-text-B-g8H227.js +6 -0
  138. package/bizar-dash/dist/assets/file-text-B-g8H227.js.map +1 -0
  139. package/bizar-dash/dist/assets/filter-D9B8s5CG.js +6 -0
  140. package/bizar-dash/dist/assets/filter-D9B8s5CG.js.map +1 -0
  141. package/bizar-dash/dist/assets/git-pull-request-ByH0YuVz.js +11 -0
  142. package/bizar-dash/dist/assets/git-pull-request-ByH0YuVz.js.map +1 -0
  143. package/bizar-dash/dist/assets/index-C4Vq_2LM.js +1 -0
  144. package/bizar-dash/dist/assets/index-C4Vq_2LM.js.map +1 -0
  145. package/bizar-dash/dist/assets/index-CASP1n-5.js +1 -0
  146. package/bizar-dash/dist/assets/index-CASP1n-5.js.map +1 -0
  147. package/bizar-dash/dist/assets/main-CdOm1Pj9.js +249 -0
  148. package/bizar-dash/dist/assets/main-CdOm1Pj9.js.map +1 -0
  149. package/bizar-dash/dist/assets/pause-C9hgd8wX.js +6 -0
  150. package/bizar-dash/dist/assets/pause-C9hgd8wX.js.map +1 -0
  151. package/bizar-dash/dist/assets/pencil-BanqaMw7.js +6 -0
  152. package/bizar-dash/dist/assets/pencil-BanqaMw7.js.map +1 -0
  153. package/bizar-dash/dist/assets/play-CawUZ02_.js +6 -0
  154. package/bizar-dash/dist/assets/play-CawUZ02_.js.map +1 -0
  155. package/bizar-dash/dist/assets/plug-Cmv0-T_e.js +6 -0
  156. package/bizar-dash/dist/assets/plug-Cmv0-T_e.js.map +1 -0
  157. package/bizar-dash/dist/assets/plus-M6LYiKX8.js +6 -0
  158. package/bizar-dash/dist/assets/plus-M6LYiKX8.js.map +1 -0
  159. package/bizar-dash/dist/assets/power-DP5x_SRF.js +6 -0
  160. package/bizar-dash/dist/assets/power-DP5x_SRF.js.map +1 -0
  161. package/bizar-dash/dist/assets/power-off-NOJRLAIs.js +6 -0
  162. package/bizar-dash/dist/assets/power-off-NOJRLAIs.js.map +1 -0
  163. package/bizar-dash/dist/assets/refresh-ccw-CHMprsm5.js +6 -0
  164. package/bizar-dash/dist/assets/refresh-ccw-CHMprsm5.js.map +1 -0
  165. package/bizar-dash/dist/assets/refresh-cw-1RBqDKgJ.js +6 -0
  166. package/bizar-dash/dist/assets/refresh-cw-1RBqDKgJ.js.map +1 -0
  167. package/bizar-dash/dist/assets/rotate-ccw-DJRekBbi.js +6 -0
  168. package/bizar-dash/dist/assets/rotate-ccw-DJRekBbi.js.map +1 -0
  169. package/bizar-dash/dist/assets/rotate-cw-DHooc0Tx.js +6 -0
  170. package/bizar-dash/dist/assets/rotate-cw-DHooc0Tx.js.map +1 -0
  171. package/bizar-dash/dist/assets/save-DQKCKyZK.js +6 -0
  172. package/bizar-dash/dist/assets/save-DQKCKyZK.js.map +1 -0
  173. package/bizar-dash/dist/assets/send-xgy3RAi7.js +6 -0
  174. package/bizar-dash/dist/assets/send-xgy3RAi7.js.map +1 -0
  175. package/bizar-dash/dist/assets/shield-alert-CWV2F5ab.js +6 -0
  176. package/bizar-dash/dist/assets/shield-alert-CWV2F5ab.js.map +1 -0
  177. package/bizar-dash/dist/assets/trash-2-CL4khSRv.js +6 -0
  178. package/bizar-dash/dist/assets/trash-2-CL4khSRv.js.map +1 -0
  179. package/bizar-dash/dist/assets/trending-up-CSJJhWTS.js +6 -0
  180. package/bizar-dash/dist/assets/trending-up-CSJJhWTS.js.map +1 -0
  181. package/bizar-dash/dist/assets/triangle-alert-BPLb7uLt.js +6 -0
  182. package/bizar-dash/dist/assets/triangle-alert-BPLb7uLt.js.map +1 -0
  183. package/bizar-dash/dist/assets/upload-Cww6MvFq.js +6 -0
  184. package/bizar-dash/dist/assets/upload-Cww6MvFq.js.map +1 -0
  185. package/bizar-dash/dist/assets/zap-DmhVUzRA.js +6 -0
  186. package/bizar-dash/dist/assets/zap-DmhVUzRA.js.map +1 -0
  187. package/bizar-dash/dist/index.html +19 -0
  188. package/bizar-dash/node_modules/.vite/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/results.json +1 -1
  189. package/bizar-dash/src/server/agents-store.mjs +1 -0
  190. package/bizar-dash/src/server/api.mjs +7 -2
  191. package/bizar-dash/src/server/artifact-mint.mjs +69 -0
  192. package/bizar-dash/src/server/claude-runner.mjs +5 -0
  193. package/bizar-dash/src/server/dialog-store.mjs +84 -2
  194. package/bizar-dash/src/server/memory-lightrag.mjs +14 -9
  195. package/bizar-dash/src/server/progress-parser.mjs +13 -1
  196. package/bizar-dash/src/server/progress-parser.test.mjs +24 -0
  197. package/bizar-dash/src/server/routes/activity.mjs +22 -2
  198. package/bizar-dash/src/server/routes/admin.mjs +163 -0
  199. package/bizar-dash/src/server/routes/agents-cc.mjs +196 -26
  200. package/bizar-dash/src/server/routes/agents.mjs +20 -5
  201. package/bizar-dash/src/server/routes/claude-session-detail.mjs +38 -0
  202. package/bizar-dash/src/server/routes/dialogs.mjs +49 -1
  203. package/bizar-dash/src/server/routes/goals.mjs +125 -4
  204. package/bizar-dash/src/server/routes/overview.mjs +131 -4
  205. package/bizar-dash/src/server/routes/overview.test.mjs +65 -0
  206. package/bizar-dash/src/server/routes/providers.mjs +53 -0
  207. package/bizar-dash/src/server/routes/skills.mjs +6 -1
  208. package/bizar-dash/src/server/routes/tasks.mjs +51 -1
  209. package/bizar-dash/src/server/server.mjs +20 -9
  210. package/bizar-dash/src/server/skills-store.mjs +2 -0
  211. package/bizar-dash/src/web/node_modules/.vite/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/results.json +1 -1
  212. package/bizar-dash/src/web/v8/App.tsx +113 -1
  213. package/bizar-dash/src/web/v8/__tests__/admin-view.test.tsx +105 -0
  214. package/bizar-dash/src/web/v8/__tests__/agent-card-metrics.test.tsx +54 -0
  215. package/bizar-dash/src/web/v8/__tests__/agent-detail-tasks.test.tsx +68 -0
  216. package/bizar-dash/src/web/v8/__tests__/agent-hierarchy.test.tsx +79 -0
  217. package/bizar-dash/src/web/v8/__tests__/agents-stuck-banner.test.tsx +142 -0
  218. package/bizar-dash/src/web/v8/__tests__/artifacts-view.test.tsx +102 -0
  219. package/bizar-dash/src/web/v8/__tests__/audit-fixes.test.tsx +139 -0
  220. package/bizar-dash/src/web/v8/__tests__/auth-view.test.tsx +94 -0
  221. package/bizar-dash/src/web/v8/__tests__/chat-types.test.ts +55 -0
  222. package/bizar-dash/src/web/v8/__tests__/chat-view.test.tsx +142 -0
  223. package/bizar-dash/src/web/v8/__tests__/claude-sessions-view.test.tsx +159 -0
  224. package/bizar-dash/src/web/v8/__tests__/clipboard-view.test.tsx +90 -0
  225. package/bizar-dash/src/web/v8/__tests__/config-view.test.tsx +111 -0
  226. package/bizar-dash/src/web/v8/__tests__/dialogs-view.test.tsx +81 -0
  227. package/bizar-dash/src/web/v8/__tests__/env-vars-view.test.tsx +123 -0
  228. package/bizar-dash/src/web/v8/__tests__/goals-cc-roundtrip.test.tsx +94 -0
  229. package/bizar-dash/src/web/v8/__tests__/history-view.test.tsx +96 -0
  230. package/bizar-dash/src/web/v8/__tests__/lightrag-view.test.tsx +90 -0
  231. package/bizar-dash/src/web/v8/__tests__/misc-view.test.tsx +79 -0
  232. package/bizar-dash/src/web/v8/__tests__/mods-view.test.tsx +123 -0
  233. package/bizar-dash/src/web/v8/__tests__/new-views.test.tsx +177 -0
  234. package/bizar-dash/src/web/v8/__tests__/obsidian-view.test.tsx +82 -0
  235. package/bizar-dash/src/web/v8/__tests__/overview-trends.test.tsx +87 -0
  236. package/bizar-dash/src/web/v8/__tests__/projects-view.test.tsx +134 -0
  237. package/bizar-dash/src/web/v8/__tests__/providers-view.test.tsx +100 -0
  238. package/bizar-dash/src/web/v8/__tests__/update-view.test.tsx +89 -0
  239. package/bizar-dash/src/web/v8/__tests__/voice-view.test.tsx +80 -0
  240. package/bizar-dash/src/web/v8/data/types.ts +86 -3
  241. package/bizar-dash/src/web/v8/data/useViewNavigate.ts +54 -0
  242. package/bizar-dash/src/web/v8/data/useWebSocket.ts +45 -0
  243. package/bizar-dash/src/web/v8/shell/Sidebar.tsx +111 -14
  244. package/bizar-dash/src/web/v8/shell/Topbar.tsx +100 -8
  245. package/bizar-dash/src/web/v8/ui/activity/ActivityLane.tsx +315 -0
  246. package/bizar-dash/src/web/v8/ui/activity/ActivityLanes.tsx +51 -0
  247. package/bizar-dash/src/web/v8/ui/agents/AgentCard.tsx +96 -15
  248. package/bizar-dash/src/web/v8/ui/agents/AgentDetail.tsx +168 -12
  249. package/bizar-dash/src/web/v8/ui/agents/AgentLiveOutput.tsx +252 -0
  250. package/bizar-dash/src/web/v8/ui/chat/ChatDrawer.tsx +208 -0
  251. package/bizar-dash/src/web/v8/ui/chat/EventStream.tsx +83 -0
  252. package/bizar-dash/src/web/v8/ui/chat/MessageBubble.tsx +174 -0
  253. package/bizar-dash/src/web/v8/ui/data/ListHeader.tsx +94 -0
  254. package/bizar-dash/src/web/v8/ui/feedback/ErrorState.tsx +116 -0
  255. package/bizar-dash/src/web/v8/ui/goals/GoalDetail.tsx +27 -0
  256. package/bizar-dash/src/web/v8/ui/index.ts +49 -2
  257. package/bizar-dash/src/web/v8/ui/kanban/KanbanBoard.tsx +61 -27
  258. package/bizar-dash/src/web/v8/ui/kanban/KanbanCard.tsx +156 -12
  259. package/bizar-dash/src/web/v8/ui/kanban/KanbanColumn.tsx +5 -10
  260. package/bizar-dash/src/web/v8/ui/kanban/KanbanContextMenu.tsx +4 -0
  261. package/bizar-dash/src/web/v8/ui/kanban/KanbanDetailDialog.tsx +638 -0
  262. package/bizar-dash/src/web/v8/ui/tasks/TaskDetail.tsx +313 -0
  263. package/bizar-dash/src/web/v8/views/Activity/ActivityView.tsx +203 -178
  264. package/bizar-dash/src/web/v8/views/Admin/AdminView.tsx +210 -0
  265. package/bizar-dash/src/web/v8/views/Agents/AgentHierarchy.tsx +212 -0
  266. package/bizar-dash/src/web/v8/views/Agents/AgentsView.tsx +328 -21
  267. package/bizar-dash/src/web/v8/views/Artifacts/ArtifactsView.tsx +241 -0
  268. package/bizar-dash/src/web/v8/views/Auth/AuthView.tsx +175 -0
  269. package/bizar-dash/src/web/v8/views/BackgroundJobs/BackgroundJobsView.tsx +1 -1
  270. package/bizar-dash/src/web/v8/views/Backup/BackupView.tsx +204 -0
  271. package/bizar-dash/src/web/v8/views/Chat/ChatView.tsx +356 -0
  272. package/bizar-dash/src/web/v8/views/ClaudeSessions/ClaudeSessionDetail.tsx +133 -0
  273. package/bizar-dash/src/web/v8/views/ClaudeSessions/ClaudeSessionsView.tsx +331 -0
  274. package/bizar-dash/src/web/v8/views/Clipboard/ClipboardView.tsx +210 -0
  275. package/bizar-dash/src/web/v8/views/Config/ConfigView.tsx +364 -0
  276. package/bizar-dash/src/web/v8/views/Diagnostics/DiagnosticsView.tsx +160 -0
  277. package/bizar-dash/src/web/v8/views/Dialogs/DialogsView.tsx +196 -0
  278. package/bizar-dash/src/web/v8/views/Doctor/DoctorView.tsx +181 -0
  279. package/bizar-dash/src/web/v8/views/EnvVars/EnvVarsView.tsx +365 -0
  280. package/bizar-dash/src/web/v8/views/Eval/EvalView.tsx +278 -0
  281. package/bizar-dash/src/web/v8/views/Goals/GoalsView.tsx +168 -10
  282. package/bizar-dash/src/web/v8/views/Headroom/HeadroomView.tsx +201 -0
  283. package/bizar-dash/src/web/v8/views/History/HistoryView.tsx +227 -0
  284. package/bizar-dash/src/web/v8/views/Libraries/LibrariesView.tsx +13 -3
  285. package/bizar-dash/src/web/v8/views/LightRAG/LightRAGView.tsx +183 -0
  286. package/bizar-dash/src/web/v8/views/Memory/MemoryView.tsx +30 -3
  287. package/bizar-dash/src/web/v8/views/Misc/MiscView.tsx +159 -0
  288. package/bizar-dash/src/web/v8/views/Mods/ModsView.tsx +348 -0
  289. package/bizar-dash/src/web/v8/views/Notifications/NotificationsView.tsx +178 -0
  290. package/bizar-dash/src/web/v8/views/Obsidian/ObsidianView.tsx +193 -0
  291. package/bizar-dash/src/web/v8/views/Overview/OverviewView.tsx +114 -11
  292. package/bizar-dash/src/web/v8/views/Projects/ProjectsView.tsx +253 -0
  293. package/bizar-dash/src/web/v8/views/Providers/ProvidersView.tsx +371 -0
  294. package/bizar-dash/src/web/v8/views/Router.tsx +125 -0
  295. package/bizar-dash/src/web/v8/views/Schedules/SchedulesView.tsx +46 -14
  296. package/bizar-dash/src/web/v8/views/Settings/SettingsView.tsx +322 -29
  297. package/bizar-dash/src/web/v8/views/Tasks/TasksView.tsx +229 -10
  298. package/bizar-dash/src/web/v8/views/Update/UpdateView.tsx +270 -0
  299. package/bizar-dash/src/web/v8/views/Usage/UsageView.tsx +210 -0
  300. package/bizar-dash/src/web/v8/views/Voice/VoiceView.tsx +192 -0
  301. package/bizar-dash/tests/tasks-patch-routes.test.mjs +194 -0
  302. package/bizar-dash/vite.config.ts +11 -3
  303. package/cli/__tests__/esm-no-require.test.mjs +97 -0
  304. package/cli/commands/tailscale.mjs +1 -3
  305. package/cli/commands/voice.mjs +2 -2
  306. package/cli/service-env.mjs +4 -5
  307. package/package.json +13 -3
  308. package/packages/sdk/dist/agent-registry.d.ts +134 -0
  309. package/packages/sdk/dist/agent-registry.js +228 -0
  310. package/packages/sdk/dist/consensus/byzantine.d.ts +159 -0
  311. package/packages/sdk/dist/consensus/byzantine.js +507 -0
  312. package/packages/sdk/dist/consensus/index.d.ts +60 -0
  313. package/packages/sdk/dist/consensus/index.js +76 -0
  314. package/packages/sdk/dist/consensus/queen.d.ts +86 -0
  315. package/packages/sdk/dist/consensus/queen.js +158 -0
  316. package/packages/sdk/dist/consensus/types.d.ts +155 -0
  317. package/packages/sdk/dist/consensus/types.js +29 -0
  318. package/packages/sdk/dist/dangerous-patterns.d.ts +27 -0
  319. package/packages/sdk/dist/dangerous-patterns.js +107 -0
  320. package/packages/sdk/dist/federation/audit.d.ts +71 -0
  321. package/packages/sdk/dist/federation/audit.js +133 -0
  322. package/packages/sdk/dist/federation/budget.d.ts +111 -0
  323. package/packages/sdk/dist/federation/budget.js +227 -0
  324. package/packages/sdk/dist/federation/envelope.d.ts +83 -0
  325. package/packages/sdk/dist/federation/envelope.js +92 -0
  326. package/packages/sdk/dist/federation/hmac.d.ts +61 -0
  327. package/packages/sdk/dist/federation/hmac.js +120 -0
  328. package/packages/sdk/dist/federation/index.d.ts +108 -0
  329. package/packages/sdk/dist/federation/index.js +275 -0
  330. package/packages/sdk/dist/federation/pii.d.ts +72 -0
  331. package/packages/sdk/dist/federation/pii.js +178 -0
  332. package/packages/sdk/dist/federation/policy.d.ts +50 -0
  333. package/packages/sdk/dist/federation/policy.js +76 -0
  334. package/packages/sdk/dist/federation/trust.d.ts +80 -0
  335. package/packages/sdk/dist/federation/trust.js +126 -0
  336. package/packages/sdk/dist/fingerprint.d.ts +18 -0
  337. package/packages/sdk/dist/fingerprint.js +0 -0
  338. package/packages/sdk/dist/index.d.ts +25 -0
  339. package/packages/sdk/dist/index.js +25 -0
  340. package/packages/sdk/dist/mcp/bin.d.ts +16 -0
  341. package/packages/sdk/dist/mcp/bin.js +46 -0
  342. package/packages/sdk/dist/mcp/server.d.ts +105 -0
  343. package/packages/sdk/dist/mcp/server.js +682 -0
  344. package/packages/sdk/dist/memory/index.d.ts +43 -0
  345. package/packages/sdk/dist/memory/index.js +159 -0
  346. package/packages/sdk/dist/router/codemod-intent.d.ts +68 -0
  347. package/packages/sdk/dist/router/codemod-intent.js +112 -0
  348. package/packages/sdk/dist/router/index.d.ts +100 -0
  349. package/packages/sdk/dist/router/index.js +149 -0
  350. package/packages/sdk/dist/router/memory-distillation.d.ts +58 -0
  351. package/packages/sdk/dist/router/memory-distillation.js +195 -0
  352. package/packages/sdk/dist/router/model-router.d.ts +83 -0
  353. package/packages/sdk/dist/router/model-router.js +207 -0
  354. package/packages/sdk/dist/router/q-learning-router.d.ts +85 -0
  355. package/packages/sdk/dist/router/q-learning-router.js +273 -0
  356. package/packages/sdk/dist/swarm-topology.d.ts +87 -0
  357. package/packages/sdk/dist/swarm-topology.js +219 -0
  358. package/packages/sdk/dist/version.d.ts +5 -0
  359. package/packages/sdk/dist/version.js +5 -0
  360. package/packages/sdk/package.json +1 -1
  361. package/plugins/bizar/dist/index.d.ts +25 -0
  362. package/plugins/bizar/dist/index.js +32 -0
  363. package/plugins/bizar/package.json +18 -0
  364. package/.claude/CLAUDE.md +0 -15
  365. package/.claude/agents/_shared/AGENT_BASELINE.md +0 -168
  366. package/.claude/agents/_shared/CLAUDE_TOOLS.md +0 -412
  367. package/.claude/agents/_shared/SKILLS.md +0 -109
  368. package/.claude/agents/agent-browser.md +0 -80
  369. package/.claude/agents/baldr.md +0 -49
  370. package/.claude/agents/forseti.md +0 -51
  371. package/.claude/agents/frigg.md +0 -42
  372. package/.claude/agents/heimdall.md +0 -33
  373. package/.claude/agents/hermod.md +0 -53
  374. package/.claude/agents/mimir.md +0 -49
  375. package/.claude/agents/odin.md +0 -287
  376. package/.claude/agents/quick.md +0 -34
  377. package/.claude/agents/semble-search.md +0 -50
  378. package/.claude/agents/thor.md +0 -53
  379. package/.claude/agents/tyr.md +0 -56
  380. package/.claude/agents/vidarr.md +0 -54
  381. package/.claude/agents/vor.md +0 -53
  382. package/.claude/commands/audit.md +0 -25
  383. package/.claude/commands/bizar.md +0 -22
  384. package/.claude/commands/explain.md +0 -17
  385. package/.claude/commands/goal.md +0 -98
  386. package/.claude/commands/init.md +0 -29
  387. package/.claude/commands/learn.md +0 -44
  388. package/.claude/commands/plan.md +0 -35
  389. package/.claude/commands/plow-through.md +0 -50
  390. package/.claude/commands/pr-review.md +0 -49
  391. package/.claude/commands/setup-provider.md +0 -96
  392. package/.claude/commands/tailscale-serve.md +0 -100
  393. package/.claude/commands/team.md +0 -132
  394. package/.claude/commands/test.md +0 -62
  395. package/.claude/commands/validate.md +0 -68
  396. package/.claude/commands/visual-plan.md +0 -24
  397. package/.claude/hooks/README.md +0 -92
  398. package/.claude/hooks/posttooluse-editwrite.mjs +0 -91
  399. package/.claude/hooks/pretooluse-bash.mjs +0 -81
  400. package/.claude/hooks/pretooluse-editwrite.mjs +0 -139
  401. package/.claude/hooks/sessionend-recall.mjs +0 -74
  402. package/.claude/hooks/sessionstart-prime.mjs +0 -80
  403. package/.claude/hooks/userpromptsubmit-tag.mjs +0 -80
  404. package/.claude/hooks/worker-suggest.mjs +0 -110
  405. package/.claude/settings.json +0 -125
  406. package/.claude/settings.local.json +0 -7
  407. package/.claude/skills/9router/SKILL.md +0 -80
  408. package/.claude/skills/9router-chat/SKILL.md +0 -73
  409. package/.claude/skills/9router-embeddings/SKILL.md +0 -69
  410. package/.claude/skills/9router-image/SKILL.md +0 -86
  411. package/.claude/skills/9router-stt/SKILL.md +0 -79
  412. package/.claude/skills/9router-tts/SKILL.md +0 -80
  413. package/.claude/skills/9router-web-fetch/SKILL.md +0 -99
  414. package/.claude/skills/9router-web-search/SKILL.md +0 -91
  415. package/.claude/skills/bizar/README.md +0 -9
  416. package/.claude/skills/bizar/SKILL.md +0 -450
  417. package/.claude/skills/cpp-coding-standards/README.md +0 -28
  418. package/.claude/skills/cpp-coding-standards/SKILL.md +0 -634
  419. package/.claude/skills/cpp-coding-standards/references/concurrency.md +0 -320
  420. package/.claude/skills/cpp-coding-standards/references/error-handling.md +0 -229
  421. package/.claude/skills/cpp-coding-standards/references/memory-safety.md +0 -216
  422. package/.claude/skills/cpp-coding-standards/references/modern-idioms.md +0 -282
  423. package/.claude/skills/cpp-coding-standards/references/review-checklist.md +0 -96
  424. package/.claude/skills/cpp-testing/README.md +0 -28
  425. package/.claude/skills/cpp-testing/SKILL.md +0 -304
  426. package/.claude/skills/cpp-testing/references/coverage.md +0 -370
  427. package/.claude/skills/cpp-testing/references/framework-compare.md +0 -175
  428. package/.claude/skills/cpp-testing/references/host-test-for-embedded.md +0 -499
  429. package/.claude/skills/cpp-testing/references/mocking.md +0 -364
  430. package/.claude/skills/cpp-testing/references/tdd-workflow.md +0 -308
  431. package/.claude/skills/cubesandbox/SKILL.md +0 -148
  432. package/.claude/skills/embedded-esp-idf/README.md +0 -41
  433. package/.claude/skills/embedded-esp-idf/SKILL.md +0 -439
  434. package/.claude/skills/embedded-esp-idf/references/freertos-patterns.md +0 -214
  435. package/.claude/skills/embedded-esp-idf/references/host-tests.md +0 -164
  436. package/.claude/skills/embedded-esp-idf/references/idf-py-commands.md +0 -157
  437. package/.claude/skills/embedded-esp-idf/references/kconfig.md +0 -159
  438. package/.claude/skills/embedded-esp-idf/references/logging-discipline.md +0 -118
  439. package/.claude/skills/embedded-esp-idf/references/memory-and-iram.md +0 -137
  440. package/.claude/skills/embedded-esp-idf/references/nvs.md +0 -121
  441. package/.claude/skills/embedded-esp-idf/references/packed-structs.md +0 -192
  442. package/.claude/skills/embedded-esp-idf/scripts/idf_env.sh +0 -47
  443. package/.claude/skills/embedded-esp-idf/scripts/size_check.sh +0 -77
  444. package/.claude/skills/glyph/SKILL.md +0 -163
  445. package/.claude/skills/harness-engineering/SKILL.md +0 -143
  446. package/.claude/skills/lightrag/SKILL.md +0 -81
  447. package/.claude/skills/memory-protocol/SKILL.md +0 -105
  448. package/.claude/skills/obsidian/SKILL.md +0 -306
  449. package/.claude/skills/read-the-damn-docs/SKILL.md +0 -113
  450. package/.claude/skills/self-improvement/SKILL.md +0 -64
  451. package/.claude/worktrees/kanban-overhaul/.claude/CLAUDE.md +0 -15
  452. package/.claude/worktrees/kanban-overhaul/.claude/agents/_shared/AGENT_BASELINE.md +0 -168
  453. package/.claude/worktrees/kanban-overhaul/.claude/agents/_shared/CLAUDE_TOOLS.md +0 -412
  454. package/.claude/worktrees/kanban-overhaul/.claude/agents/_shared/SKILLS.md +0 -109
  455. package/.claude/worktrees/kanban-overhaul/.claude/agents/agent-browser.md +0 -80
  456. package/.claude/worktrees/kanban-overhaul/.claude/agents/baldr.md +0 -49
  457. package/.claude/worktrees/kanban-overhaul/.claude/agents/forseti.md +0 -51
  458. package/.claude/worktrees/kanban-overhaul/.claude/agents/frigg.md +0 -42
  459. package/.claude/worktrees/kanban-overhaul/.claude/agents/heimdall.md +0 -33
  460. package/.claude/worktrees/kanban-overhaul/.claude/agents/hermod.md +0 -53
  461. package/.claude/worktrees/kanban-overhaul/.claude/agents/mimir.md +0 -49
  462. package/.claude/worktrees/kanban-overhaul/.claude/agents/odin.md +0 -287
  463. package/.claude/worktrees/kanban-overhaul/.claude/agents/quick.md +0 -34
  464. package/.claude/worktrees/kanban-overhaul/.claude/agents/semble-search.md +0 -50
  465. package/.claude/worktrees/kanban-overhaul/.claude/agents/thor.md +0 -53
  466. package/.claude/worktrees/kanban-overhaul/.claude/agents/tyr.md +0 -56
  467. package/.claude/worktrees/kanban-overhaul/.claude/agents/vidarr.md +0 -54
  468. package/.claude/worktrees/kanban-overhaul/.claude/agents/vor.md +0 -53
  469. package/.claude/worktrees/kanban-overhaul/.claude/commands/audit.md +0 -25
  470. package/.claude/worktrees/kanban-overhaul/.claude/commands/bizar.md +0 -22
  471. package/.claude/worktrees/kanban-overhaul/.claude/commands/explain.md +0 -17
  472. package/.claude/worktrees/kanban-overhaul/.claude/commands/init.md +0 -29
  473. package/.claude/worktrees/kanban-overhaul/.claude/commands/learn.md +0 -44
  474. package/.claude/worktrees/kanban-overhaul/.claude/commands/plan.md +0 -35
  475. package/.claude/worktrees/kanban-overhaul/.claude/commands/plow-through.md +0 -50
  476. package/.claude/worktrees/kanban-overhaul/.claude/commands/pr-review.md +0 -49
  477. package/.claude/worktrees/kanban-overhaul/.claude/commands/setup-provider.md +0 -96
  478. package/.claude/worktrees/kanban-overhaul/.claude/commands/tailscale-serve.md +0 -100
  479. package/.claude/worktrees/kanban-overhaul/.claude/commands/team.md +0 -132
  480. package/.claude/worktrees/kanban-overhaul/.claude/commands/test.md +0 -62
  481. package/.claude/worktrees/kanban-overhaul/.claude/commands/validate.md +0 -68
  482. package/.claude/worktrees/kanban-overhaul/.claude/commands/visual-plan.md +0 -24
  483. package/.claude/worktrees/kanban-overhaul/.claude/hooks/README.md +0 -92
  484. package/.claude/worktrees/kanban-overhaul/.claude/hooks/posttooluse-editwrite.mjs +0 -91
  485. package/.claude/worktrees/kanban-overhaul/.claude/hooks/pretooluse-bash.mjs +0 -81
  486. package/.claude/worktrees/kanban-overhaul/.claude/hooks/pretooluse-editwrite.mjs +0 -139
  487. package/.claude/worktrees/kanban-overhaul/.claude/hooks/sessionend-recall.mjs +0 -74
  488. package/.claude/worktrees/kanban-overhaul/.claude/hooks/sessionstart-prime.mjs +0 -80
  489. package/.claude/worktrees/kanban-overhaul/.claude/hooks/userpromptsubmit-tag.mjs +0 -80
  490. package/.claude/worktrees/kanban-overhaul/.claude/hooks/worker-suggest.mjs +0 -110
  491. package/.claude/worktrees/kanban-overhaul/.claude/settings.json +0 -125
  492. package/.claude/worktrees/kanban-overhaul/.claude/settings.local.json +0 -8
  493. package/.claude/worktrees/kanban-overhaul/.claude/skills/9router/SKILL.md +0 -80
  494. package/.claude/worktrees/kanban-overhaul/.claude/skills/9router-chat/SKILL.md +0 -73
  495. package/.claude/worktrees/kanban-overhaul/.claude/skills/9router-embeddings/SKILL.md +0 -69
  496. package/.claude/worktrees/kanban-overhaul/.claude/skills/9router-image/SKILL.md +0 -86
  497. package/.claude/worktrees/kanban-overhaul/.claude/skills/9router-stt/SKILL.md +0 -79
  498. package/.claude/worktrees/kanban-overhaul/.claude/skills/9router-tts/SKILL.md +0 -80
  499. package/.claude/worktrees/kanban-overhaul/.claude/skills/9router-web-fetch/SKILL.md +0 -99
  500. package/.claude/worktrees/kanban-overhaul/.claude/skills/9router-web-search/SKILL.md +0 -91
  501. package/.claude/worktrees/kanban-overhaul/.claude/skills/bizar/README.md +0 -9
  502. package/.claude/worktrees/kanban-overhaul/.claude/skills/bizar/SKILL.md +0 -450
  503. package/.claude/worktrees/kanban-overhaul/.claude/skills/cpp-coding-standards/README.md +0 -28
  504. package/.claude/worktrees/kanban-overhaul/.claude/skills/cpp-coding-standards/SKILL.md +0 -634
  505. package/.claude/worktrees/kanban-overhaul/.claude/skills/cpp-coding-standards/references/concurrency.md +0 -320
  506. package/.claude/worktrees/kanban-overhaul/.claude/skills/cpp-coding-standards/references/error-handling.md +0 -229
  507. package/.claude/worktrees/kanban-overhaul/.claude/skills/cpp-coding-standards/references/memory-safety.md +0 -216
  508. package/.claude/worktrees/kanban-overhaul/.claude/skills/cpp-coding-standards/references/modern-idioms.md +0 -282
  509. package/.claude/worktrees/kanban-overhaul/.claude/skills/cpp-coding-standards/references/review-checklist.md +0 -96
  510. package/.claude/worktrees/kanban-overhaul/.claude/skills/cpp-testing/README.md +0 -28
  511. package/.claude/worktrees/kanban-overhaul/.claude/skills/cpp-testing/SKILL.md +0 -304
  512. package/.claude/worktrees/kanban-overhaul/.claude/skills/cpp-testing/references/coverage.md +0 -370
  513. package/.claude/worktrees/kanban-overhaul/.claude/skills/cpp-testing/references/framework-compare.md +0 -175
  514. package/.claude/worktrees/kanban-overhaul/.claude/skills/cpp-testing/references/host-test-for-embedded.md +0 -499
  515. package/.claude/worktrees/kanban-overhaul/.claude/skills/cpp-testing/references/mocking.md +0 -364
  516. package/.claude/worktrees/kanban-overhaul/.claude/skills/cpp-testing/references/tdd-workflow.md +0 -308
  517. package/.claude/worktrees/kanban-overhaul/.claude/skills/cubesandbox/SKILL.md +0 -148
  518. package/.claude/worktrees/kanban-overhaul/.claude/skills/embedded-esp-idf/README.md +0 -41
  519. package/.claude/worktrees/kanban-overhaul/.claude/skills/embedded-esp-idf/SKILL.md +0 -439
  520. package/.claude/worktrees/kanban-overhaul/.claude/skills/embedded-esp-idf/references/freertos-patterns.md +0 -214
  521. package/.claude/worktrees/kanban-overhaul/.claude/skills/embedded-esp-idf/references/host-tests.md +0 -164
  522. package/.claude/worktrees/kanban-overhaul/.claude/skills/embedded-esp-idf/references/idf-py-commands.md +0 -157
  523. package/.claude/worktrees/kanban-overhaul/.claude/skills/embedded-esp-idf/references/kconfig.md +0 -159
  524. package/.claude/worktrees/kanban-overhaul/.claude/skills/embedded-esp-idf/references/logging-discipline.md +0 -118
  525. package/.claude/worktrees/kanban-overhaul/.claude/skills/embedded-esp-idf/references/memory-and-iram.md +0 -137
  526. package/.claude/worktrees/kanban-overhaul/.claude/skills/embedded-esp-idf/references/nvs.md +0 -121
  527. package/.claude/worktrees/kanban-overhaul/.claude/skills/embedded-esp-idf/references/packed-structs.md +0 -192
  528. package/.claude/worktrees/kanban-overhaul/.claude/skills/embedded-esp-idf/scripts/idf_env.sh +0 -47
  529. package/.claude/worktrees/kanban-overhaul/.claude/skills/embedded-esp-idf/scripts/size_check.sh +0 -77
  530. package/.claude/worktrees/kanban-overhaul/.claude/skills/glyph/SKILL.md +0 -163
  531. package/.claude/worktrees/kanban-overhaul/.claude/skills/harness-engineering/SKILL.md +0 -143
  532. package/.claude/worktrees/kanban-overhaul/.claude/skills/lightrag/SKILL.md +0 -81
  533. package/.claude/worktrees/kanban-overhaul/.claude/skills/memory-protocol/SKILL.md +0 -105
  534. package/.claude/worktrees/kanban-overhaul/.claude/skills/obsidian/SKILL.md +0 -306
  535. package/.claude/worktrees/kanban-overhaul/.claude/skills/read-the-damn-docs/SKILL.md +0 -113
  536. package/.claude/worktrees/kanban-overhaul/.claude/skills/self-improvement/SKILL.md +0 -64
  537. package/.claude/worktrees/kanban-overhaul/.dockerignore +0 -31
  538. package/.claude/worktrees/kanban-overhaul/.gitattributes +0 -27
  539. package/.claude/worktrees/kanban-overhaul/.harness/agents.json +0 -17
  540. package/.claude/worktrees/kanban-overhaul/.harness/arch-rules.json +0 -69
  541. package/.claude/worktrees/kanban-overhaul/.harness/topology.json +0 -4
  542. package/.claude/worktrees/kanban-overhaul/.nvmrc +0 -1
  543. package/.claude/worktrees/kanban-overhaul/.serena/project.yml +0 -159
  544. package/.claude/worktrees/kanban-overhaul/AGENTS.md +0 -250
  545. package/.claude/worktrees/kanban-overhaul/CHANGELOG.md +0 -5410
  546. package/.claude/worktrees/kanban-overhaul/CLAUDE.md +0 -260
  547. package/.claude/worktrees/kanban-overhaul/CURRENT_ISSUES_ AND_NEW_FEATURES.md +0 -18
  548. package/.claude/worktrees/kanban-overhaul/DECISIONS.md +0 -66
  549. package/.claude/worktrees/kanban-overhaul/Dockerfile +0 -48
  550. package/.claude/worktrees/kanban-overhaul/FINAL_GOAL.md +0 -397
  551. package/.claude/worktrees/kanban-overhaul/IMPLEMENTATION_PLAN.md +0 -250
  552. package/.claude/worktrees/kanban-overhaul/MILESTONES.md +0 -257
  553. package/.claude/worktrees/kanban-overhaul/Makefile +0 -93
  554. package/.claude/worktrees/kanban-overhaul/PROGRESS.md +0 -1406
  555. package/.claude/worktrees/kanban-overhaul/README.md +0 -483
  556. package/.claude/worktrees/kanban-overhaul/ROADMAP.md +0 -609
  557. package/.claude/worktrees/kanban-overhaul/bizar-dash/.graphifyignore +0 -40
  558. package/.claude/worktrees/kanban-overhaul/bizar-dash/.obsidian/README.md +0 -14
  559. package/.claude/worktrees/kanban-overhaul/bizar-dash/.obsidian/daily/2026-06-25.md +0 -9
  560. package/.claude/worktrees/kanban-overhaul/bizar-dash/.obsidian/vault.json +0 -7
  561. package/.claude/worktrees/kanban-overhaul/bizar-dash/.od-skills/web-prototype-e1429c1737/SKILL.md +0 -103
  562. package/.claude/worktrees/kanban-overhaul/bizar-dash/.od-skills/web-prototype-e1429c1737/assets/template.html +0 -338
  563. package/.claude/worktrees/kanban-overhaul/bizar-dash/.od-skills/web-prototype-e1429c1737/example.html +0 -81
  564. package/.claude/worktrees/kanban-overhaul/bizar-dash/.od-skills/web-prototype-e1429c1737/open-design.json +0 -172
  565. package/.claude/worktrees/kanban-overhaul/bizar-dash/.od-skills/web-prototype-e1429c1737/references/checklist.md +0 -44
  566. package/.claude/worktrees/kanban-overhaul/bizar-dash/.od-skills/web-prototype-e1429c1737/references/layouts.md +0 -247
  567. package/.claude/worktrees/kanban-overhaul/bizar-dash/ARCHITECTURE.md +0 -197
  568. package/.claude/worktrees/kanban-overhaul/bizar-dash/CHANGELOG.md +0 -235
  569. package/.claude/worktrees/kanban-overhaul/bizar-dash/DESIGN.md +0 -912
  570. package/.claude/worktrees/kanban-overhaul/bizar-dash/GLYPH.md +0 -418
  571. package/.claude/worktrees/kanban-overhaul/bizar-dash/PLAN.md +0 -1135
  572. package/.claude/worktrees/kanban-overhaul/bizar-dash/critique.json +0 -26
  573. package/.claude/worktrees/kanban-overhaul/bizar-dash/plans/debug-plan/comments.json +0 -1
  574. package/.claude/worktrees/kanban-overhaul/bizar-dash/plans/debug-plan/meta.json +0 -10
  575. package/.claude/worktrees/kanban-overhaul/bizar-dash/plans/debug-plan/plan.json +0 -174
  576. package/.claude/worktrees/kanban-overhaul/bizar-dash/scripts/smoke-bg-retry.mjs +0 -246
  577. package/.claude/worktrees/kanban-overhaul/bizar-dash/skills/agent-baseline/SKILL.md +0 -80
  578. package/.claude/worktrees/kanban-overhaul/bizar-dash/skills/agent-browser/SKILL.md +0 -181
  579. package/.claude/worktrees/kanban-overhaul/bizar-dash/skills/bizar/SKILL.md +0 -116
  580. package/.claude/worktrees/kanban-overhaul/bizar-dash/skills/chat/SKILL.md +0 -74
  581. package/.claude/worktrees/kanban-overhaul/bizar-dash/skills/eval/SKILL.md +0 -237
  582. package/.claude/worktrees/kanban-overhaul/bizar-dash/skills/headroom/SKILL.md +0 -94
  583. package/.claude/worktrees/kanban-overhaul/bizar-dash/skills/lightrag/SKILL.md +0 -86
  584. package/.claude/worktrees/kanban-overhaul/bizar-dash/skills/minimax/SKILL.md +0 -80
  585. package/.claude/worktrees/kanban-overhaul/bizar-dash/skills/obsidian/SKILL.md +0 -68
  586. package/.claude/worktrees/kanban-overhaul/bizar-dash/skills/providers/SKILL.md +0 -75
  587. package/.claude/worktrees/kanban-overhaul/bizar-dash/skills/publishing/SKILL.md +0 -146
  588. package/.claude/worktrees/kanban-overhaul/bizar-dash/skills/sdk/SKILL.md +0 -138
  589. package/.claude/worktrees/kanban-overhaul/bizar-dash/skills/self-improvement/SKILL.md +0 -53
  590. package/.claude/worktrees/kanban-overhaul/bizar-dash/skills/skills-cli/SKILL.md +0 -94
  591. package/.claude/worktrees/kanban-overhaul/bizar-dash/skills/usage/SKILL.md +0 -62
  592. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/cli/dashboard-ports.mjs +0 -488
  593. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/cli.mjs +0 -537
  594. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/activity-log.mjs +0 -174
  595. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/agents-store.mjs +0 -465
  596. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/api.mjs +0 -223
  597. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/artifact-template.html +0 -810
  598. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/artifacts-store.mjs +0 -733
  599. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/auth.mjs +0 -548
  600. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/background-store.mjs +0 -446
  601. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/backup-store.mjs +0 -530
  602. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/bg-poller.mjs +0 -375
  603. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/bg-retry.mjs +0 -446
  604. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/bg-spawner.mjs +0 -390
  605. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/browser.mjs +0 -40
  606. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/claude-bg-spawner.mjs +0 -390
  607. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/claude-info.mjs +0 -412
  608. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/claude-runner.mjs +0 -284
  609. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/claude-sdk.mjs +0 -191
  610. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/diagnostics-store.mjs +0 -598
  611. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/dialog-poller.mjs +0 -105
  612. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/dialog-store.mjs +0 -177
  613. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/digest-store.mjs +0 -558
  614. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/eval-store.mjs +0 -281
  615. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/eval.mjs +0 -500
  616. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/glyphs/mdx-compiler.mjs +0 -596
  617. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/headroom.mjs +0 -649
  618. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/lib/path-safe.mjs +0 -283
  619. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/lib/rate-limit.mjs +0 -122
  620. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/logger.mjs +0 -71
  621. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/memory-consolidator.mjs +0 -225
  622. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/memory-distillation.mjs +0 -296
  623. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/memory-git.mjs +0 -473
  624. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/memory-lightrag.mjs +0 -1478
  625. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/memory-obsidian.mjs +0 -230
  626. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/memory-schema.mjs +0 -145
  627. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/memory-secrets.mjs +0 -84
  628. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/memory-store.mjs +0 -1093
  629. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/metrics.mjs +0 -268
  630. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/minimax-usage-store.mjs +0 -372
  631. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/minimax.mjs +0 -683
  632. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/mod-security.mjs +0 -398
  633. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/mods-loader.mjs +0 -1243
  634. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/notifications-store.mjs +0 -243
  635. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/obsidian-store.mjs +0 -318
  636. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/ocr.mjs +0 -55
  637. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/otel.mjs +0 -260
  638. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/pair-store.mjs +0 -138
  639. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/progress-parser.mjs +0 -221
  640. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/projects-store.mjs +0 -364
  641. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/providers-store.mjs +0 -1801
  642. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes/_shared.mjs +0 -447
  643. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes/activity.mjs +0 -195
  644. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes/agents-cc.mjs +0 -194
  645. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes/agents.mjs +0 -134
  646. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes/artifacts.mjs +0 -279
  647. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes/auth.mjs +0 -69
  648. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes/background.mjs +0 -422
  649. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes/backup.mjs +0 -112
  650. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes/chat.mjs +0 -727
  651. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes/claude-session-detail.mjs +0 -329
  652. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes/claude-sessions.mjs +0 -259
  653. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes/clipboard.mjs +0 -173
  654. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes/config.mjs +0 -180
  655. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes/diagnostics.mjs +0 -50
  656. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes/dialogs.mjs +0 -86
  657. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes/digests.mjs +0 -82
  658. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes/distill.mjs +0 -129
  659. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes/doctor.mjs +0 -71
  660. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes/env-vars.mjs +0 -231
  661. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes/eval.mjs +0 -187
  662. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes/fs.mjs +0 -429
  663. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes/goal-planner.mjs +0 -236
  664. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes/goals.mjs +0 -212
  665. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes/headroom.mjs +0 -126
  666. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes/history.mjs +0 -78
  667. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes/lightrag.mjs +0 -169
  668. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes/memory.mjs +0 -1524
  669. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes/minimax.mjs +0 -133
  670. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes/misc.mjs +0 -90
  671. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes/mods.mjs +0 -359
  672. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes/notifications.mjs +0 -54
  673. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes/obsidian.mjs +0 -239
  674. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes/ocr.mjs +0 -182
  675. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes/overview.mjs +0 -92
  676. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes/pair.mjs +0 -67
  677. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes/projects.mjs +0 -175
  678. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes/providers.mjs +0 -308
  679. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes/schedules.mjs +0 -159
  680. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes/settings.mjs +0 -51
  681. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes/skills.mjs +0 -65
  682. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes/tailscale.mjs +0 -46
  683. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes/tasks.mjs +0 -518
  684. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes/themes.mjs +0 -51
  685. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes/update.mjs +0 -340
  686. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes/usage.mjs +0 -136
  687. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes/users.mjs +0 -102
  688. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes/voice.mjs +0 -167
  689. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes/workspaces.mjs +0 -299
  690. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes-v2/auth.mjs +0 -59
  691. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes-v2/events.mjs +0 -121
  692. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes-v2/health.mjs +0 -21
  693. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes-v2/index.mjs +0 -90
  694. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/routes-v2/sessions.mjs +0 -111
  695. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/schedules-runner.mjs +0 -556
  696. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/schedules-store.mjs +0 -268
  697. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/search-store.mjs +0 -220
  698. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/serve-info.mjs +0 -1110
  699. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/server.mjs +0 -966
  700. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/settings-store.mjs +0 -45
  701. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/skills-store.mjs +0 -190
  702. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/state.mjs +0 -437
  703. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/tailscale-store.mjs +0 -113
  704. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/task-delegator.mjs +0 -969
  705. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/tasks-store.mjs +0 -556
  706. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/tui.mjs +0 -923
  707. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/update-store.mjs +0 -168
  708. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/v2-auth-file.mjs +0 -99
  709. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/v2-event-bus.mjs +0 -128
  710. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/voice-store.mjs +0 -229
  711. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/voice-transcribe.mjs +0 -72
  712. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/watcher.mjs +0 -81
  713. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/workers/transcription-worker.mjs +0 -213
  714. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/workspaces.mjs +0 -626
  715. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/server/yaml.mjs +0 -238
  716. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/App.tsx +0 -200
  717. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/data/fetcher.ts +0 -59
  718. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/data/types.ts +0 -168
  719. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/data/useFetch.ts +0 -62
  720. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/data/useWebSocket.ts +0 -153
  721. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/main.tsx +0 -28
  722. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/shell/AppShell.tsx +0 -90
  723. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/shell/PageSkeleton.tsx +0 -29
  724. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/shell/Sidebar.tsx +0 -361
  725. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/shell/StatusBar.tsx +0 -63
  726. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/shell/Topbar.tsx +0 -113
  727. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/shell/index.ts +0 -15
  728. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/activity/ActivityFeed.tsx +0 -137
  729. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/agents/AgentActivity.tsx +0 -101
  730. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/agents/AgentCard.tsx +0 -158
  731. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/agents/AgentDetail.tsx +0 -232
  732. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/controls/Button.tsx +0 -141
  733. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/controls/ButtonGroup.tsx +0 -32
  734. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/controls/Checkbox.tsx +0 -49
  735. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/controls/Field.tsx +0 -78
  736. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/controls/Form.tsx +0 -23
  737. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/controls/IconButton.tsx +0 -112
  738. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/controls/Input.tsx +0 -94
  739. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/controls/RadioGroup.tsx +0 -74
  740. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/controls/Select.tsx +0 -171
  741. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/controls/Slider.tsx +0 -68
  742. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/controls/Switch.tsx +0 -56
  743. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/controls/Textarea.tsx +0 -64
  744. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/controls/Toggle.tsx +0 -36
  745. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/controls/ToggleGroup.tsx +0 -85
  746. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/data/Accordion.tsx +0 -134
  747. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/data/Avatar.tsx +0 -175
  748. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/data/Badge.tsx +0 -93
  749. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/data/BarList.tsx +0 -101
  750. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/data/Card.tsx +0 -140
  751. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/data/Chip.tsx +0 -96
  752. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/data/Kbd.tsx +0 -42
  753. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/data/ProgressBar.tsx +0 -93
  754. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/data/Sparkline.tsx +0 -98
  755. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/data/StatTile.tsx +0 -150
  756. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/data/Table.tsx +0 -170
  757. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/data/Timeline.tsx +0 -130
  758. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/data/ViewHeader.tsx +0 -122
  759. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/feedback/Alert.tsx +0 -95
  760. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/feedback/Banner.tsx +0 -39
  761. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/feedback/ContextMenu.tsx +0 -143
  762. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/feedback/Dialog.tsx +0 -149
  763. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/feedback/Drawer.tsx +0 -8
  764. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/feedback/DropdownMenu.tsx +0 -231
  765. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/feedback/EmptyState.tsx +0 -48
  766. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/feedback/Popover.tsx +0 -56
  767. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/feedback/Sheet.tsx +0 -103
  768. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/feedback/Skeleton.tsx +0 -67
  769. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/feedback/Spinner.tsx +0 -30
  770. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/feedback/Toast.tsx +0 -66
  771. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/feedback/Tooltip.tsx +0 -89
  772. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/goals/GoalCard.tsx +0 -176
  773. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/goals/GoalDetail.tsx +0 -245
  774. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/goals/KeyResult.tsx +0 -115
  775. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/index.ts +0 -349
  776. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/kanban/KanbanBoard.tsx +0 -115
  777. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/kanban/KanbanCard.tsx +0 -391
  778. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/kanban/KanbanColumn.tsx +0 -181
  779. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/kanban/KanbanContextMenu.tsx +0 -126
  780. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/kanban/KanbanDetailDialog.tsx +0 -638
  781. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/kanban/KanbanQuickAdd.tsx +0 -141
  782. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/libraries/LibraryGrid.tsx +0 -30
  783. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/libraries/LibraryItem.tsx +0 -161
  784. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/memory/MemoryVault.tsx +0 -144
  785. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/navigation/CommandPalette.tsx +0 -224
  786. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/navigation/NavLink.tsx +0 -81
  787. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/navigation/Pagination.tsx +0 -164
  788. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/navigation/Tabs.tsx +0 -128
  789. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/primitives/Box.tsx +0 -144
  790. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/primitives/Center.tsx +0 -40
  791. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/primitives/Cluster.tsx +0 -67
  792. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/primitives/Grid.tsx +0 -104
  793. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/primitives/Inline.tsx +0 -77
  794. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/primitives/Portal.tsx +0 -33
  795. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/primitives/ScrollArea.tsx +0 -62
  796. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/primitives/Separator.tsx +0 -42
  797. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/primitives/Stack.tsx +0 -73
  798. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/primitives/VisuallyHidden.tsx +0 -49
  799. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/settings/SettingsNav.tsx +0 -91
  800. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/settings/SettingsRow.tsx +0 -88
  801. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/settings/SettingsSection.tsx +0 -109
  802. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/styles/globals.css +0 -220
  803. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/styles/reset.css +0 -57
  804. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/styles/tokens.css +0 -217
  805. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/theme/DensityProvider.tsx +0 -66
  806. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/theme/ThemeProvider.tsx +0 -94
  807. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/theme/ThemeToggle.tsx +0 -88
  808. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/theme/useDensity.ts +0 -15
  809. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/theme/useTheme.ts +0 -16
  810. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/ui/utils/cx.ts +0 -19
  811. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/views/Activity/ActivityView.tsx +0 -71
  812. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/views/Agents/AgentsView.tsx +0 -172
  813. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/views/CommandPalette/AppCommandPalette.tsx +0 -247
  814. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/views/Goals/GoalsView.tsx +0 -137
  815. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/views/Libraries/LibrariesView.tsx +0 -108
  816. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/views/Memory/MemoryView.tsx +0 -77
  817. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/views/Overview/OverviewView.tsx +0 -152
  818. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/views/Router.tsx +0 -72
  819. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/views/Settings/SettingsView.tsx +0 -330
  820. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/views/Tasks/CommandPalettePlaceholder.tsx +0 -106
  821. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/views/Tasks/TasksView.tsx +0 -792
  822. package/.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8/vite-env.d.ts +0 -15
  823. package/.claude/worktrees/kanban-overhaul/bizar-dash/templates/mod/FORMAT.md +0 -76
  824. package/.claude/worktrees/kanban-overhaul/bizar-dash/templates/mod/hello-mod/README.md +0 -19
  825. package/.claude/worktrees/kanban-overhaul/bizar-dash/templates/mod/hello-mod/agents/greeter.md +0 -8
  826. package/.claude/worktrees/kanban-overhaul/bizar-dash/templates/mod/hello-mod/commands/hello.md +0 -6
  827. package/.claude/worktrees/kanban-overhaul/bizar-dash/templates/mod/hello-mod/mod.json +0 -20
  828. package/.claude/worktrees/kanban-overhaul/bizar-dash/templates/mod/hello-mod/routes/ping.mjs +0 -9
  829. package/.claude/worktrees/kanban-overhaul/bizar-dash/templates/mod/hello-mod/views/HelloView.tsx +0 -10
  830. package/.claude/worktrees/kanban-overhaul/bizar-dash/tests/setup.ts +0 -63
  831. package/.claude/worktrees/kanban-overhaul/bizar-dash/tests/smoke-v2.mjs +0 -212
  832. package/.claude/worktrees/kanban-overhaul/bizar-dash/tsconfig.json +0 -23
  833. package/.claude/worktrees/kanban-overhaul/bizar-dash/vite.config.ts +0 -66
  834. package/.claude/worktrees/kanban-overhaul/bizar-dash/vitest.config.ts +0 -20
  835. package/.claude/worktrees/kanban-overhaul/bizar-plugins/registry.json +0 -62
  836. package/.claude/worktrees/kanban-overhaul/bookmarklet/bizar-clipper.js +0 -48
  837. package/.claude/worktrees/kanban-overhaul/browser-extensions/bizar-clipper/README.md +0 -43
  838. package/.claude/worktrees/kanban-overhaul/browser-extensions/bizar-clipper/background.js +0 -95
  839. package/.claude/worktrees/kanban-overhaul/browser-extensions/bizar-clipper/content.js +0 -170
  840. package/.claude/worktrees/kanban-overhaul/browser-extensions/bizar-clipper/icons/icon-128.png +0 -0
  841. package/.claude/worktrees/kanban-overhaul/browser-extensions/bizar-clipper/icons/icon-16.png +0 -0
  842. package/.claude/worktrees/kanban-overhaul/browser-extensions/bizar-clipper/icons/icon-48.png +0 -0
  843. package/.claude/worktrees/kanban-overhaul/browser-extensions/bizar-clipper/icons/icon.svg +0 -4
  844. package/.claude/worktrees/kanban-overhaul/browser-extensions/bizar-clipper/manifest.json +0 -32
  845. package/.claude/worktrees/kanban-overhaul/browser-extensions/bizar-clipper/popup.html +0 -66
  846. package/.claude/worktrees/kanban-overhaul/browser-extensions/bizar-clipper/popup.js +0 -110
  847. package/.claude/worktrees/kanban-overhaul/bun.lock +0 -1558
  848. package/.claude/worktrees/kanban-overhaul/cli/agent-browser-up.sh +0 -152
  849. package/.claude/worktrees/kanban-overhaul/cli/agent-browser-update.mjs +0 -322
  850. package/.claude/worktrees/kanban-overhaul/cli/artifact-cli.mjs +0 -605
  851. package/.claude/worktrees/kanban-overhaul/cli/artifact-render.mjs +0 -621
  852. package/.claude/worktrees/kanban-overhaul/cli/artifact-server.mjs +0 -847
  853. package/.claude/worktrees/kanban-overhaul/cli/artifact-templates.mjs +0 -523
  854. package/.claude/worktrees/kanban-overhaul/cli/artifact.mjs +0 -63
  855. package/.claude/worktrees/kanban-overhaul/cli/atomic.mjs +0 -73
  856. package/.claude/worktrees/kanban-overhaul/cli/audit.mjs +0 -141
  857. package/.claude/worktrees/kanban-overhaul/cli/banner.mjs +0 -41
  858. package/.claude/worktrees/kanban-overhaul/cli/bg.mjs +0 -471
  859. package/.claude/worktrees/kanban-overhaul/cli/bin.mjs +0 -698
  860. package/.claude/worktrees/kanban-overhaul/cli/bootstrap.mjs +0 -77
  861. package/.claude/worktrees/kanban-overhaul/cli/commands/artifact.mjs +0 -20
  862. package/.claude/worktrees/kanban-overhaul/cli/commands/claim.mjs +0 -282
  863. package/.claude/worktrees/kanban-overhaul/cli/commands/claude-cmd.mjs +0 -348
  864. package/.claude/worktrees/kanban-overhaul/cli/commands/clip.mjs +0 -163
  865. package/.claude/worktrees/kanban-overhaul/cli/commands/cost.mjs +0 -279
  866. package/.claude/worktrees/kanban-overhaul/cli/commands/dash.mjs +0 -193
  867. package/.claude/worktrees/kanban-overhaul/cli/commands/deploy/cloudflare.mjs +0 -250
  868. package/.claude/worktrees/kanban-overhaul/cli/commands/deploy/docker.mjs +0 -222
  869. package/.claude/worktrees/kanban-overhaul/cli/commands/deploy/fly.mjs +0 -161
  870. package/.claude/worktrees/kanban-overhaul/cli/commands/deploy/vercel.mjs +0 -225
  871. package/.claude/worktrees/kanban-overhaul/cli/commands/deploy.mjs +0 -240
  872. package/.claude/worktrees/kanban-overhaul/cli/commands/eval.mjs +0 -396
  873. package/.claude/worktrees/kanban-overhaul/cli/commands/headroom.mjs +0 -204
  874. package/.claude/worktrees/kanban-overhaul/cli/commands/install.mjs +0 -170
  875. package/.claude/worktrees/kanban-overhaul/cli/commands/lightrag.mjs +0 -170
  876. package/.claude/worktrees/kanban-overhaul/cli/commands/marketplace.mjs +0 -64
  877. package/.claude/worktrees/kanban-overhaul/cli/commands/memory.mjs +0 -25
  878. package/.claude/worktrees/kanban-overhaul/cli/commands/minimax.mjs +0 -288
  879. package/.claude/worktrees/kanban-overhaul/cli/commands/mod.mjs +0 -185
  880. package/.claude/worktrees/kanban-overhaul/cli/commands/ocr.mjs +0 -182
  881. package/.claude/worktrees/kanban-overhaul/cli/commands/plugin.mjs +0 -358
  882. package/.claude/worktrees/kanban-overhaul/cli/commands/rca.mjs +0 -198
  883. package/.claude/worktrees/kanban-overhaul/cli/commands/sandbox.mjs +0 -220
  884. package/.claude/worktrees/kanban-overhaul/cli/commands/service.mjs +0 -79
  885. package/.claude/worktrees/kanban-overhaul/cli/commands/setup-provider.mjs +0 -466
  886. package/.claude/worktrees/kanban-overhaul/cli/commands/tailscale.mjs +0 -258
  887. package/.claude/worktrees/kanban-overhaul/cli/commands/usage.mjs +0 -113
  888. package/.claude/worktrees/kanban-overhaul/cli/commands/util.mjs +0 -577
  889. package/.claude/worktrees/kanban-overhaul/cli/commands/validate.mjs +0 -541
  890. package/.claude/worktrees/kanban-overhaul/cli/commands/voice.mjs +0 -211
  891. package/.claude/worktrees/kanban-overhaul/cli/commands/workspace.mjs +0 -247
  892. package/.claude/worktrees/kanban-overhaul/cli/copy.mjs +0 -586
  893. package/.claude/worktrees/kanban-overhaul/cli/cost-gate.mjs +0 -501
  894. package/.claude/worktrees/kanban-overhaul/cli/dev-link.mjs +0 -191
  895. package/.claude/worktrees/kanban-overhaul/cli/digest.mjs +0 -149
  896. package/.claude/worktrees/kanban-overhaul/cli/doctor.mjs +0 -217
  897. package/.claude/worktrees/kanban-overhaul/cli/export.mjs +0 -95
  898. package/.claude/worktrees/kanban-overhaul/cli/feature-list-bridge.mjs +0 -400
  899. package/.claude/worktrees/kanban-overhaul/cli/heads-up.mjs +0 -295
  900. package/.claude/worktrees/kanban-overhaul/cli/init.mjs +0 -368
  901. package/.claude/worktrees/kanban-overhaul/cli/install.mjs +0 -640
  902. package/.claude/worktrees/kanban-overhaul/cli/memory-constants.mjs +0 -76
  903. package/.claude/worktrees/kanban-overhaul/cli/memory.mjs +0 -1850
  904. package/.claude/worktrees/kanban-overhaul/cli/plugin-runtime-deps.mjs +0 -250
  905. package/.claude/worktrees/kanban-overhaul/cli/post-install-smoke.mjs +0 -256
  906. package/.claude/worktrees/kanban-overhaul/cli/prompts.mjs +0 -168
  907. package/.claude/worktrees/kanban-overhaul/cli/providers-detect.mjs +0 -233
  908. package/.claude/worktrees/kanban-overhaul/cli/provision-claude.mjs +0 -1176
  909. package/.claude/worktrees/kanban-overhaul/cli/provision.mjs +0 -2233
  910. package/.claude/worktrees/kanban-overhaul/cli/repair.mjs +0 -209
  911. package/.claude/worktrees/kanban-overhaul/cli/service-controller.mjs +0 -927
  912. package/.claude/worktrees/kanban-overhaul/cli/service-env.mjs +0 -139
  913. package/.claude/worktrees/kanban-overhaul/cli/service.mjs +0 -492
  914. package/.claude/worktrees/kanban-overhaul/cli/update.mjs +0 -29
  915. package/.claude/worktrees/kanban-overhaul/cli/utils.mjs +0 -221
  916. package/.claude/worktrees/kanban-overhaul/cli/worker-dispatcher.mjs +0 -259
  917. package/.claude/worktrees/kanban-overhaul/config/AGENTS.md +0 -595
  918. package/.claude/worktrees/kanban-overhaul/config/agents/_shared/AGENT_BASELINE.md +0 -155
  919. package/.claude/worktrees/kanban-overhaul/config/agents/_shared/CLINE_TOOLS.md +0 -398
  920. package/.claude/worktrees/kanban-overhaul/config/agents/_shared/SKILLS.md +0 -109
  921. package/.claude/worktrees/kanban-overhaul/config/agents/agent-browser.md +0 -90
  922. package/.claude/worktrees/kanban-overhaul/config/agents/baldr.md +0 -60
  923. package/.claude/worktrees/kanban-overhaul/config/agents/forseti.md +0 -60
  924. package/.claude/worktrees/kanban-overhaul/config/agents/frigg.md +0 -52
  925. package/.claude/worktrees/kanban-overhaul/config/agents/heimdall.md +0 -44
  926. package/.claude/worktrees/kanban-overhaul/config/agents/hermod.md +0 -64
  927. package/.claude/worktrees/kanban-overhaul/config/agents/mimir.md +0 -60
  928. package/.claude/worktrees/kanban-overhaul/config/agents/odin.md +0 -310
  929. package/.claude/worktrees/kanban-overhaul/config/agents/quick.md +0 -47
  930. package/.claude/worktrees/kanban-overhaul/config/agents/semble-search.md +0 -59
  931. package/.claude/worktrees/kanban-overhaul/config/agents/thor.md +0 -64
  932. package/.claude/worktrees/kanban-overhaul/config/agents/tyr.md +0 -67
  933. package/.claude/worktrees/kanban-overhaul/config/agents/vidarr.md +0 -65
  934. package/.claude/worktrees/kanban-overhaul/config/agents/vor.md +0 -62
  935. package/.claude/worktrees/kanban-overhaul/config/commands/audit.md +0 -5
  936. package/.claude/worktrees/kanban-overhaul/config/commands/bizar.md +0 -22
  937. package/.claude/worktrees/kanban-overhaul/config/commands/explain.md +0 -5
  938. package/.claude/worktrees/kanban-overhaul/config/commands/init.md +0 -26
  939. package/.claude/worktrees/kanban-overhaul/config/commands/learn.md +0 -5
  940. package/.claude/worktrees/kanban-overhaul/config/commands/plan.md +0 -30
  941. package/.claude/worktrees/kanban-overhaul/config/commands/plow-through.md +0 -47
  942. package/.claude/worktrees/kanban-overhaul/config/commands/pr-review.md +0 -5
  943. package/.claude/worktrees/kanban-overhaul/config/commands/setup-provider.md +0 -95
  944. package/.claude/worktrees/kanban-overhaul/config/commands/tailscale-serve.md +0 -97
  945. package/.claude/worktrees/kanban-overhaul/config/commands/team.md +0 -124
  946. package/.claude/worktrees/kanban-overhaul/config/commands/test.md +0 -60
  947. package/.claude/worktrees/kanban-overhaul/config/commands/validate.md +0 -66
  948. package/.claude/worktrees/kanban-overhaul/config/commands/visual-plan.md +0 -19
  949. package/.claude/worktrees/kanban-overhaul/config/hooks/PostToolUse +0 -66
  950. package/.claude/worktrees/kanban-overhaul/config/hooks/PreToolUse +0 -82
  951. package/.claude/worktrees/kanban-overhaul/config/hooks/README.md +0 -68
  952. package/.claude/worktrees/kanban-overhaul/config/hooks/TaskResume +0 -48
  953. package/.claude/worktrees/kanban-overhaul/config/hooks/TaskStart +0 -47
  954. package/.claude/worktrees/kanban-overhaul/config/hooks/UserPromptSubmit +0 -55
  955. package/.claude/worktrees/kanban-overhaul/config/rules/general.md +0 -9
  956. package/.claude/worktrees/kanban-overhaul/config/rules/git.md +0 -11
  957. package/.claude/worktrees/kanban-overhaul/config/rules/javascript.md +0 -10
  958. package/.claude/worktrees/kanban-overhaul/config/rules/python.md +0 -10
  959. package/.claude/worktrees/kanban-overhaul/config/rules/testing.md +0 -10
  960. package/.claude/worktrees/kanban-overhaul/config/rules/thinking.md +0 -56
  961. package/.claude/worktrees/kanban-overhaul/config/rules/uncertainty.md +0 -70
  962. package/.claude/worktrees/kanban-overhaul/config/skills/9router/SKILL.md +0 -80
  963. package/.claude/worktrees/kanban-overhaul/config/skills/9router-chat/SKILL.md +0 -73
  964. package/.claude/worktrees/kanban-overhaul/config/skills/9router-embeddings/SKILL.md +0 -69
  965. package/.claude/worktrees/kanban-overhaul/config/skills/9router-image/SKILL.md +0 -86
  966. package/.claude/worktrees/kanban-overhaul/config/skills/9router-stt/SKILL.md +0 -79
  967. package/.claude/worktrees/kanban-overhaul/config/skills/9router-tts/SKILL.md +0 -80
  968. package/.claude/worktrees/kanban-overhaul/config/skills/9router-web-fetch/SKILL.md +0 -99
  969. package/.claude/worktrees/kanban-overhaul/config/skills/9router-web-search/SKILL.md +0 -91
  970. package/.claude/worktrees/kanban-overhaul/config/skills/bizar/README.md +0 -9
  971. package/.claude/worktrees/kanban-overhaul/config/skills/bizar/SKILL.md +0 -447
  972. package/.claude/worktrees/kanban-overhaul/config/skills/cpp-coding-standards/README.md +0 -28
  973. package/.claude/worktrees/kanban-overhaul/config/skills/cpp-coding-standards/SKILL.md +0 -634
  974. package/.claude/worktrees/kanban-overhaul/config/skills/cpp-coding-standards/agents/openai.yaml +0 -4
  975. package/.claude/worktrees/kanban-overhaul/config/skills/cpp-coding-standards/references/concurrency.md +0 -320
  976. package/.claude/worktrees/kanban-overhaul/config/skills/cpp-coding-standards/references/error-handling.md +0 -229
  977. package/.claude/worktrees/kanban-overhaul/config/skills/cpp-coding-standards/references/memory-safety.md +0 -216
  978. package/.claude/worktrees/kanban-overhaul/config/skills/cpp-coding-standards/references/modern-idioms.md +0 -282
  979. package/.claude/worktrees/kanban-overhaul/config/skills/cpp-coding-standards/references/review-checklist.md +0 -96
  980. package/.claude/worktrees/kanban-overhaul/config/skills/cpp-testing/README.md +0 -28
  981. package/.claude/worktrees/kanban-overhaul/config/skills/cpp-testing/SKILL.md +0 -304
  982. package/.claude/worktrees/kanban-overhaul/config/skills/cpp-testing/agents/openai.yaml +0 -4
  983. package/.claude/worktrees/kanban-overhaul/config/skills/cpp-testing/references/coverage.md +0 -370
  984. package/.claude/worktrees/kanban-overhaul/config/skills/cpp-testing/references/framework-compare.md +0 -175
  985. package/.claude/worktrees/kanban-overhaul/config/skills/cpp-testing/references/host-test-for-embedded.md +0 -499
  986. package/.claude/worktrees/kanban-overhaul/config/skills/cpp-testing/references/mocking.md +0 -364
  987. package/.claude/worktrees/kanban-overhaul/config/skills/cpp-testing/references/tdd-workflow.md +0 -308
  988. package/.claude/worktrees/kanban-overhaul/config/skills/cubesandbox/SKILL.md +0 -148
  989. package/.claude/worktrees/kanban-overhaul/config/skills/embedded-esp-idf/README.md +0 -41
  990. package/.claude/worktrees/kanban-overhaul/config/skills/embedded-esp-idf/SKILL.md +0 -439
  991. package/.claude/worktrees/kanban-overhaul/config/skills/embedded-esp-idf/agents/openai.yaml +0 -4
  992. package/.claude/worktrees/kanban-overhaul/config/skills/embedded-esp-idf/references/freertos-patterns.md +0 -214
  993. package/.claude/worktrees/kanban-overhaul/config/skills/embedded-esp-idf/references/host-tests.md +0 -164
  994. package/.claude/worktrees/kanban-overhaul/config/skills/embedded-esp-idf/references/idf-py-commands.md +0 -157
  995. package/.claude/worktrees/kanban-overhaul/config/skills/embedded-esp-idf/references/kconfig.md +0 -159
  996. package/.claude/worktrees/kanban-overhaul/config/skills/embedded-esp-idf/references/logging-discipline.md +0 -118
  997. package/.claude/worktrees/kanban-overhaul/config/skills/embedded-esp-idf/references/memory-and-iram.md +0 -137
  998. package/.claude/worktrees/kanban-overhaul/config/skills/embedded-esp-idf/references/nvs.md +0 -121
  999. package/.claude/worktrees/kanban-overhaul/config/skills/embedded-esp-idf/references/packed-structs.md +0 -192
  1000. package/.claude/worktrees/kanban-overhaul/config/skills/embedded-esp-idf/scripts/idf_env.sh +0 -47
  1001. package/.claude/worktrees/kanban-overhaul/config/skills/embedded-esp-idf/scripts/size_check.sh +0 -77
  1002. package/.claude/worktrees/kanban-overhaul/config/skills/glyph/SKILL.md +0 -163
  1003. package/.claude/worktrees/kanban-overhaul/config/skills/harness-engineering/SKILL.md +0 -142
  1004. package/.claude/worktrees/kanban-overhaul/config/skills/lightrag/SKILL.md +0 -81
  1005. package/.claude/worktrees/kanban-overhaul/config/skills/memory-protocol/SKILL.md +0 -105
  1006. package/.claude/worktrees/kanban-overhaul/config/skills/obsidian/SKILL.md +0 -306
  1007. package/.claude/worktrees/kanban-overhaul/config/skills/read-the-damn-docs/SKILL.md +0 -113
  1008. package/.claude/worktrees/kanban-overhaul/config/skills/self-improvement/SKILL.md +0 -64
  1009. package/.claude/worktrees/kanban-overhaul/config/trigger-patterns.json +0 -186
  1010. package/.claude/worktrees/kanban-overhaul/docker-compose.yml +0 -50
  1011. package/.claude/worktrees/kanban-overhaul/docs/A11Y.md +0 -81
  1012. package/.claude/worktrees/kanban-overhaul/docs/DEPLOY.md +0 -360
  1013. package/.claude/worktrees/kanban-overhaul/docs/DOCKER.md +0 -250
  1014. package/.claude/worktrees/kanban-overhaul/docs/INDEX.md +0 -223
  1015. package/.claude/worktrees/kanban-overhaul/docs/PLUGIN_REGISTRY.md +0 -107
  1016. package/.claude/worktrees/kanban-overhaul/docs/RELEASING.md +0 -693
  1017. package/.claude/worktrees/kanban-overhaul/docs/architecture.md +0 -317
  1018. package/.claude/worktrees/kanban-overhaul/docs/code-review.md +0 -242
  1019. package/.claude/worktrees/kanban-overhaul/docs/curator.md +0 -144
  1020. package/.claude/worktrees/kanban-overhaul/docs/dashboard-ui-migration.md +0 -807
  1021. package/.claude/worktrees/kanban-overhaul/docs/decisions/DEC-001-cline-rewrite.md +0 -114
  1022. package/.claude/worktrees/kanban-overhaul/docs/decisions/DEC-002-in-process-clinecore.md +0 -139
  1023. package/.claude/worktrees/kanban-overhaul/docs/decisions/DEC-003-in-process-memory-vault.md +0 -101
  1024. package/.claude/worktrees/kanban-overhaul/docs/decisions/DEC-004-cline-agent-teams.md +0 -112
  1025. package/.claude/worktrees/kanban-overhaul/docs/decisions/DEC-005-bg-agents-via-dashboard.md +0 -77
  1026. package/.claude/worktrees/kanban-overhaul/docs/decisions/DEC-006-kanban-board.md +0 -69
  1027. package/.claude/worktrees/kanban-overhaul/docs/decisions/DEC-007-tool-approval-gate.md +0 -147
  1028. package/.claude/worktrees/kanban-overhaul/docs/decisions/DEC-008-skill-curator.md +0 -100
  1029. package/.claude/worktrees/kanban-overhaul/docs/decisions/DEC-009-pre-compaction-flush.md +0 -106
  1030. package/.claude/worktrees/kanban-overhaul/docs/decisions/DEC-010-knowledge-graph-tools.md +0 -95
  1031. package/.claude/worktrees/kanban-overhaul/docs/decisions/DEC-011-claude-code-migration.md +0 -172
  1032. package/.claude/worktrees/kanban-overhaul/docs/graph-tools.md +0 -130
  1033. package/.claude/worktrees/kanban-overhaul/docs/migration-guide.md +0 -471
  1034. package/.claude/worktrees/kanban-overhaul/docs/migrations/cline-replacement.md +0 -118
  1035. package/.claude/worktrees/kanban-overhaul/docs/postmortems/2026-06-18-plugin-state-deadlock.md +0 -250
  1036. package/.claude/worktrees/kanban-overhaul/docs/quality-document.md +0 -74
  1037. package/.claude/worktrees/kanban-overhaul/docs/releases/v0.5.2.md +0 -66
  1038. package/.claude/worktrees/kanban-overhaul/docs/releases/v0.5.4.md +0 -85
  1039. package/.claude/worktrees/kanban-overhaul/docs/releases/v2.3.0.md +0 -96
  1040. package/.claude/worktrees/kanban-overhaul/docs/releases/v3.24.0.md +0 -155
  1041. package/.claude/worktrees/kanban-overhaul/docs/releases/v4.0.0.md +0 -123
  1042. package/.claude/worktrees/kanban-overhaul/docs/releases/v7.0.0.md +0 -173
  1043. package/.claude/worktrees/kanban-overhaul/docs/safety.md +0 -216
  1044. package/.claude/worktrees/kanban-overhaul/feature_list.json +0 -1297
  1045. package/.claude/worktrees/kanban-overhaul/init.sh +0 -211
  1046. package/.claude/worktrees/kanban-overhaul/install.sh +0 -498
  1047. package/.claude/worktrees/kanban-overhaul/mods-examples/impeccable/INSTRUCTIONS.md +0 -82
  1048. package/.claude/worktrees/kanban-overhaul/mods-examples/impeccable/mod.json +0 -37
  1049. package/.claude/worktrees/kanban-overhaul/mods-examples/impeccable/route.mjs +0 -136
  1050. package/.claude/worktrees/kanban-overhaul/mods-examples/impeccable/web/index.html +0 -180
  1051. package/.claude/worktrees/kanban-overhaul/mods-examples/lightrag/INSTRUCTIONS.md +0 -81
  1052. package/.claude/worktrees/kanban-overhaul/mods-examples/lightrag/mod.json +0 -61
  1053. package/.claude/worktrees/kanban-overhaul/mods-examples/lightrag/route.mjs +0 -461
  1054. package/.claude/worktrees/kanban-overhaul/mods-examples/lightrag/web/index.html +0 -263
  1055. package/.claude/worktrees/kanban-overhaul/mods-examples/ponytail/INSTRUCTIONS.md +0 -87
  1056. package/.claude/worktrees/kanban-overhaul/mods-examples/ponytail/agents/thor.md +0 -64
  1057. package/.claude/worktrees/kanban-overhaul/mods-examples/ponytail/mod.json +0 -36
  1058. package/.claude/worktrees/kanban-overhaul/mods-examples/ponytail/route.mjs +0 -98
  1059. package/.claude/worktrees/kanban-overhaul/mods-examples/ponytail/web/index.html +0 -126
  1060. package/.claude/worktrees/kanban-overhaul/package.json +0 -154
  1061. package/.claude/worktrees/kanban-overhaul/packages/sdk/ARCHITECTURE.md +0 -70
  1062. package/.claude/worktrees/kanban-overhaul/packages/sdk/LICENSE +0 -21
  1063. package/.claude/worktrees/kanban-overhaul/packages/sdk/README.md +0 -80
  1064. package/.claude/worktrees/kanban-overhaul/packages/sdk/package.json +0 -30
  1065. package/.claude/worktrees/kanban-overhaul/packages/sdk/src/agent-registry.ts +0 -304
  1066. package/.claude/worktrees/kanban-overhaul/packages/sdk/src/consensus/byzantine.ts +0 -587
  1067. package/.claude/worktrees/kanban-overhaul/packages/sdk/src/consensus/index.ts +0 -147
  1068. package/.claude/worktrees/kanban-overhaul/packages/sdk/src/consensus/queen.ts +0 -173
  1069. package/.claude/worktrees/kanban-overhaul/packages/sdk/src/consensus/types.ts +0 -199
  1070. package/.claude/worktrees/kanban-overhaul/packages/sdk/src/dangerous-patterns.ts +0 -127
  1071. package/.claude/worktrees/kanban-overhaul/packages/sdk/src/federation/audit.ts +0 -156
  1072. package/.claude/worktrees/kanban-overhaul/packages/sdk/src/federation/budget.ts +0 -269
  1073. package/.claude/worktrees/kanban-overhaul/packages/sdk/src/federation/envelope.ts +0 -144
  1074. package/.claude/worktrees/kanban-overhaul/packages/sdk/src/federation/hmac.ts +0 -160
  1075. package/.claude/worktrees/kanban-overhaul/packages/sdk/src/federation/index.ts +0 -443
  1076. package/.claude/worktrees/kanban-overhaul/packages/sdk/src/federation/pii.ts +0 -241
  1077. package/.claude/worktrees/kanban-overhaul/packages/sdk/src/federation/policy.ts +0 -112
  1078. package/.claude/worktrees/kanban-overhaul/packages/sdk/src/federation/trust.ts +0 -146
  1079. package/.claude/worktrees/kanban-overhaul/packages/sdk/src/fingerprint.ts +0 -0
  1080. package/.claude/worktrees/kanban-overhaul/packages/sdk/src/index.ts +0 -114
  1081. package/.claude/worktrees/kanban-overhaul/packages/sdk/src/mcp/bin.ts +0 -51
  1082. package/.claude/worktrees/kanban-overhaul/packages/sdk/src/mcp/server.ts +0 -848
  1083. package/.claude/worktrees/kanban-overhaul/packages/sdk/src/memory/index.ts +0 -160
  1084. package/.claude/worktrees/kanban-overhaul/packages/sdk/src/router/codemod-intent.ts +0 -125
  1085. package/.claude/worktrees/kanban-overhaul/packages/sdk/src/router/index.ts +0 -247
  1086. package/.claude/worktrees/kanban-overhaul/packages/sdk/src/router/memory-distillation-shim.mjs +0 -18
  1087. package/.claude/worktrees/kanban-overhaul/packages/sdk/src/router/memory-distillation.ts +0 -249
  1088. package/.claude/worktrees/kanban-overhaul/packages/sdk/src/router/model-router.ts +0 -235
  1089. package/.claude/worktrees/kanban-overhaul/packages/sdk/src/router/q-learning-router.ts +0 -304
  1090. package/.claude/worktrees/kanban-overhaul/packages/sdk/src/swarm-topology.ts +0 -279
  1091. package/.claude/worktrees/kanban-overhaul/packages/sdk/src/version.ts +0 -4
  1092. package/.claude/worktrees/kanban-overhaul/packages/sdk/tsconfig.json +0 -25
  1093. package/.claude/worktrees/kanban-overhaul/packages/sdk/vitest.config.ts +0 -9
  1094. package/.claude/worktrees/kanban-overhaul/plugins/bizar/ARCHITECTURE.md +0 -72
  1095. package/.claude/worktrees/kanban-overhaul/plugins/bizar/CONSTRAINTS.md +0 -62
  1096. package/.claude/worktrees/kanban-overhaul/plugins/bizar/LICENSE +0 -21
  1097. package/.claude/worktrees/kanban-overhaul/plugins/bizar/README.md +0 -46
  1098. package/.claude/worktrees/kanban-overhaul/plugins/bizar/index.ts +0 -50
  1099. package/.claude/worktrees/kanban-overhaul/plugins/bizar/package.json +0 -18
  1100. package/.claude/worktrees/kanban-overhaul/plugins/bizar/tsconfig.json +0 -29
  1101. package/.claude/worktrees/kanban-overhaul/scripts/bh-full-e2e.mjs +0 -298
  1102. package/.claude/worktrees/kanban-overhaul/scripts/check-agents.mjs +0 -73
  1103. package/.claude/worktrees/kanban-overhaul/scripts/check-arch.sh +0 -80
  1104. package/.claude/worktrees/kanban-overhaul/scripts/check-deps.mjs +0 -492
  1105. package/.claude/worktrees/kanban-overhaul/scripts/clean-state-check.sh +0 -81
  1106. package/.claude/worktrees/kanban-overhaul/scripts/git-hooks/pre-commit +0 -59
  1107. package/.claude/worktrees/kanban-overhaul/scripts/git-hooks/pre-push +0 -54
  1108. package/.claude/worktrees/kanban-overhaul/scripts/install-hooks.sh +0 -29
  1109. package/.claude/worktrees/kanban-overhaul/scripts/install-service.mjs +0 -190
  1110. package/.claude/worktrees/kanban-overhaul/scripts/mirror-claude-md.sh +0 -78
  1111. package/.claude/worktrees/kanban-overhaul/scripts/session-trace.sh +0 -52
  1112. package/.claude/worktrees/kanban-overhaul/scripts/test-in-container.sh +0 -157
  1113. package/.claude/worktrees/kanban-overhaul/scripts/verify-feature.sh +0 -102
  1114. package/.claude/worktrees/kanban-overhaul/skills-lock.json +0 -11
  1115. package/.claude/worktrees/kanban-overhaul/templates/clean-state-checklist.md +0 -55
  1116. package/.claude/worktrees/kanban-overhaul/templates/deploy/cloudflare/README.md +0 -32
  1117. package/.claude/worktrees/kanban-overhaul/templates/deploy/cloudflare/functions-index.template.js +0 -15
  1118. package/.claude/worktrees/kanban-overhaul/templates/deploy/cloudflare/wrangler.toml.template +0 -9
  1119. package/.claude/worktrees/kanban-overhaul/templates/deploy/docker/.env.template +0 -16
  1120. package/.claude/worktrees/kanban-overhaul/templates/deploy/docker/README.md +0 -58
  1121. package/.claude/worktrees/kanban-overhaul/templates/deploy/docker/docker-compose.template.yml +0 -23
  1122. package/.claude/worktrees/kanban-overhaul/templates/deploy/fly/README.md +0 -35
  1123. package/.claude/worktrees/kanban-overhaul/templates/deploy/fly/fly.toml.template +0 -28
  1124. package/.claude/worktrees/kanban-overhaul/templates/deploy/vercel/README.md +0 -29
  1125. package/.claude/worktrees/kanban-overhaul/templates/deploy/vercel/api-index.template.js +0 -18
  1126. package/.claude/worktrees/kanban-overhaul/templates/deploy/vercel/vercel.json.template +0 -16
  1127. package/.claude/worktrees/kanban-overhaul/templates/eval-fixtures/README.md +0 -58
  1128. package/.claude/worktrees/kanban-overhaul/templates/eval-fixtures/citation.json +0 -16
  1129. package/.claude/worktrees/kanban-overhaul/templates/eval-fixtures/code-review.json +0 -16
  1130. package/.claude/worktrees/kanban-overhaul/templates/eval-fixtures/code-search-basic.json +0 -28
  1131. package/.claude/worktrees/kanban-overhaul/templates/eval-fixtures/concise-output.json +0 -16
  1132. package/.claude/worktrees/kanban-overhaul/templates/eval-fixtures/context-window.json +0 -16
  1133. package/.claude/worktrees/kanban-overhaul/templates/eval-fixtures/error-recovery.json +0 -16
  1134. package/.claude/worktrees/kanban-overhaul/templates/eval-fixtures/json-output.json +0 -20
  1135. package/.claude/worktrees/kanban-overhaul/templates/eval-fixtures/latency-bounds.json +0 -16
  1136. package/.claude/worktrees/kanban-overhaul/templates/eval-fixtures/multi-language.json +0 -16
  1137. package/.claude/worktrees/kanban-overhaul/templates/eval-fixtures/regression-suite.json +0 -79
  1138. package/.claude/worktrees/kanban-overhaul/templates/eval-fixtures/response-format.json +0 -30
  1139. package/.claude/worktrees/kanban-overhaul/templates/eval-fixtures/safe-paths.json +0 -16
  1140. package/.claude/worktrees/kanban-overhaul/templates/eval-fixtures/tool-call-correctness.json +0 -24
  1141. package/.claude/worktrees/kanban-overhaul/templates/eval-fixtures/tool-call-multi-step.json +0 -18
  1142. package/.claude/worktrees/kanban-overhaul/templates/eval-fixtures/unicode-handling.json +0 -16
  1143. package/.claude/worktrees/kanban-overhaul/templates/evaluator-rubric.md +0 -50
  1144. package/.claude/worktrees/kanban-overhaul/templates/plan/htmx.min.js +0 -1
  1145. package/.claude/worktrees/kanban-overhaul/templates/plan/library/bug-investigation.mdx +0 -79
  1146. package/.claude/worktrees/kanban-overhaul/templates/plan/library/decision-record.mdx +0 -71
  1147. package/.claude/worktrees/kanban-overhaul/templates/plan/library/feature-design.mdx +0 -92
  1148. package/.claude/worktrees/kanban-overhaul/templates/plan/meta.json.template +0 -8
  1149. package/.claude/worktrees/kanban-overhaul/templates/plan/plan.mdx.template +0 -46
  1150. package/.claude/worktrees/kanban-overhaul/templates/plugin-template/README.md +0 -121
  1151. package/.claude/worktrees/kanban-overhaul/templates/plugin-template/index.js +0 -66
  1152. package/.claude/worktrees/kanban-overhaul/templates/plugin-template/plugin.json +0 -42
  1153. package/.claude/worktrees/kanban-overhaul/templates/plugin-template/tests/plugin.test.js +0 -83
  1154. package/.claude/worktrees/kanban-overhaul/templates/schedules/daily-backup.json +0 -12
  1155. package/.claude/worktrees/kanban-overhaul/templates/schedules/daily-cleanup.json +0 -12
  1156. package/.claude/worktrees/kanban-overhaul/templates/schedules/hourly-health-check.json +0 -12
  1157. package/.claude/worktrees/kanban-overhaul/templates/schedules/webhook-on-push.json +0 -13
  1158. package/.claude/worktrees/kanban-overhaul/templates/schedules/weekly-digest.json +0 -13
  1159. package/.claude/worktrees/kanban-overhaul/templates/sprint-contract.md +0 -47
  1160. package/.claude/worktrees/kanban-overhaul/tsconfig.json +0 -44
  1161. package/.claude/worktrees/kanban-overhaul/vite.config.ts +0 -51
  1162. package/bizar-dash/dist/assets/ActivityFeed-BXIkGGQ1.js +0 -16
  1163. package/bizar-dash/dist/assets/ActivityFeed-BXIkGGQ1.js.map +0 -1
  1164. package/bizar-dash/dist/assets/ActivityView-CBxNNrZa.js +0 -12
  1165. package/bizar-dash/dist/assets/ActivityView-CBxNNrZa.js.map +0 -1
  1166. package/bizar-dash/dist/assets/AgentsView-uv4l21AH.js +0 -23
  1167. package/bizar-dash/dist/assets/AgentsView-uv4l21AH.js.map +0 -1
  1168. package/bizar-dash/dist/assets/BackgroundJobsView-CB4WXIpk.js +0 -6
  1169. package/bizar-dash/dist/assets/BackgroundJobsView-CB4WXIpk.js.map +0 -1
  1170. package/bizar-dash/dist/assets/Card-CeZsWlcP.js +0 -1
  1171. package/bizar-dash/dist/assets/Card-CeZsWlcP.js.map +0 -1
  1172. package/bizar-dash/dist/assets/Chip-OPjSKl2I.js +0 -1
  1173. package/bizar-dash/dist/assets/Chip-OPjSKl2I.js.map +0 -1
  1174. package/bizar-dash/dist/assets/EmptyState-BrLA8mbE.js +0 -1
  1175. package/bizar-dash/dist/assets/EmptyState-BrLA8mbE.js.map +0 -1
  1176. package/bizar-dash/dist/assets/GoalsView-B8R-kxQr.js +0 -11
  1177. package/bizar-dash/dist/assets/GoalsView-B8R-kxQr.js.map +0 -1
  1178. package/bizar-dash/dist/assets/Grid-B7NgNtff.js +0 -1
  1179. package/bizar-dash/dist/assets/Grid-B7NgNtff.js.map +0 -1
  1180. package/bizar-dash/dist/assets/Input-BW_5Sl6N.js +0 -1
  1181. package/bizar-dash/dist/assets/Input-BW_5Sl6N.js.map +0 -1
  1182. package/bizar-dash/dist/assets/KanbanCard-B-NOSfMN.js +0 -21
  1183. package/bizar-dash/dist/assets/KanbanCard-B-NOSfMN.js.map +0 -1
  1184. package/bizar-dash/dist/assets/LibrariesView-D6eB7B2A.js +0 -67
  1185. package/bizar-dash/dist/assets/LibrariesView-D6eB7B2A.js.map +0 -1
  1186. package/bizar-dash/dist/assets/MemoryView-MK4m1KbR.js +0 -13
  1187. package/bizar-dash/dist/assets/MemoryView-MK4m1KbR.js.map +0 -1
  1188. package/bizar-dash/dist/assets/OverviewView-CHavfYBa.js +0 -1
  1189. package/bizar-dash/dist/assets/OverviewView-CHavfYBa.js.map +0 -1
  1190. package/bizar-dash/dist/assets/SchedulesView-zV-0pbsz.js +0 -1
  1191. package/bizar-dash/dist/assets/SchedulesView-zV-0pbsz.js.map +0 -1
  1192. package/bizar-dash/dist/assets/Select-B6Ho36Tq.js +0 -11
  1193. package/bizar-dash/dist/assets/Select-B6Ho36Tq.js.map +0 -1
  1194. package/bizar-dash/dist/assets/SettingsRow-Br21uRFz.js +0 -1
  1195. package/bizar-dash/dist/assets/SettingsRow-Br21uRFz.js.map +0 -1
  1196. package/bizar-dash/dist/assets/SettingsView-Cx3uJrus.js +0 -38
  1197. package/bizar-dash/dist/assets/SettingsView-Cx3uJrus.js.map +0 -1
  1198. package/bizar-dash/dist/assets/Sheet-Cmu_4Zea.js +0 -1
  1199. package/bizar-dash/dist/assets/Sheet-Cmu_4Zea.js.map +0 -1
  1200. package/bizar-dash/dist/assets/Slider-B_jPr-SR.js +0 -1
  1201. package/bizar-dash/dist/assets/Slider-B_jPr-SR.js.map +0 -1
  1202. package/bizar-dash/dist/assets/Sparkline-Cmqw0N39.js +0 -1
  1203. package/bizar-dash/dist/assets/Sparkline-Cmqw0N39.js.map +0 -1
  1204. package/bizar-dash/dist/assets/Switch-C7Qyu50Y.js +0 -10
  1205. package/bizar-dash/dist/assets/Switch-C7Qyu50Y.js.map +0 -1
  1206. package/bizar-dash/dist/assets/TasksView-BXADmjgb.js +0 -1
  1207. package/bizar-dash/dist/assets/TasksView-BXADmjgb.js.map +0 -1
  1208. package/bizar-dash/dist/assets/Textarea-KIN98DVH.js +0 -1
  1209. package/bizar-dash/dist/assets/Textarea-KIN98DVH.js.map +0 -1
  1210. package/bizar-dash/dist/assets/ViewHeader-CPbqI-w8.js +0 -6
  1211. package/bizar-dash/dist/assets/ViewHeader-CPbqI-w8.js.map +0 -1
  1212. package/bizar-dash/dist/assets/brain-jN_ldx3U.js +0 -6
  1213. package/bizar-dash/dist/assets/brain-jN_ldx3U.js.map +0 -1
  1214. package/bizar-dash/dist/assets/calendar-DZGgPP2_.js +0 -6
  1215. package/bizar-dash/dist/assets/calendar-DZGgPP2_.js.map +0 -1
  1216. package/bizar-dash/dist/assets/circle-check-XhUtiACZ.js +0 -6
  1217. package/bizar-dash/dist/assets/circle-check-XhUtiACZ.js.map +0 -1
  1218. package/bizar-dash/dist/assets/clock-BXBnSbox.js +0 -6
  1219. package/bizar-dash/dist/assets/clock-BXBnSbox.js.map +0 -1
  1220. package/bizar-dash/dist/assets/cmdk-D15rXxc5.js +0 -80
  1221. package/bizar-dash/dist/assets/cmdk-D15rXxc5.js.map +0 -1
  1222. package/bizar-dash/dist/assets/dnd-kit-Bormfg7j.js +0 -5
  1223. package/bizar-dash/dist/assets/dnd-kit-Bormfg7j.js.map +0 -1
  1224. package/bizar-dash/dist/assets/git-pull-request-BCt0CEjc.js +0 -11
  1225. package/bizar-dash/dist/assets/git-pull-request-BCt0CEjc.js.map +0 -1
  1226. package/bizar-dash/dist/assets/index-C0JBGB5M.js +0 -1
  1227. package/bizar-dash/dist/assets/index-C0JBGB5M.js.map +0 -1
  1228. package/bizar-dash/dist/assets/index-CrWI7sQR.js +0 -1
  1229. package/bizar-dash/dist/assets/index-CrWI7sQR.js.map +0 -1
  1230. package/bizar-dash/dist/assets/main-CCimEcWH.js +0 -134
  1231. package/bizar-dash/dist/assets/main-CCimEcWH.js.map +0 -1
  1232. package/bizar-dash/dist/assets/play-B0rTjpSg.js +0 -6
  1233. package/bizar-dash/dist/assets/play-B0rTjpSg.js.map +0 -1
  1234. package/bizar-dash/dist/assets/plus-BaTQsS9G.js +0 -6
  1235. package/bizar-dash/dist/assets/plus-BaTQsS9G.js.map +0 -1
  1236. package/bizar-dash/dist/assets/refresh-cw-CoatVcs3.js +0 -6
  1237. package/bizar-dash/dist/assets/refresh-cw-CoatVcs3.js.map +0 -1
  1238. package/bizar-dash/dist/assets/terminal-k-1HFHcN.js +0 -11
  1239. package/bizar-dash/dist/assets/terminal-k-1HFHcN.js.map +0 -1
  1240. package/bizar-dash/dist/assets/trash-2-DtpKnAn2.js +0 -6
  1241. package/bizar-dash/dist/assets/trash-2-DtpKnAn2.js.map +0 -1
  1242. package/bizar-dash/dist/assets/triangle-alert-FHSs_e5b.js +0 -6
  1243. package/bizar-dash/dist/assets/triangle-alert-FHSs_e5b.js.map +0 -1
  1244. package/bizar-dash/dist/assets/wrench-CbBE0oQ0.js +0 -6
  1245. package/bizar-dash/dist/assets/wrench-CbBE0oQ0.js.map +0 -1
  1246. package/bizar-dash/dist/v8.html +0 -19
  1247. package/bizar-dash/src/web/v8/views/Tasks/CommandPalettePlaceholder.tsx +0 -106
  1248. package/bizar-dash/src/web/v8/views/Tasks/TasksKanbanPlaceholder.tsx +0 -62
  1249. package/bizar-dash/src/web/v8.html +0 -17
  1250. package/packages/sdk/.harness/agents.json +0 -17
  1251. package/packages/sdk/.harness/topology.json +0 -4
  1252. package/packages/sdk/ARCHITECTURE.md +0 -70
  1253. package/packages/sdk/README.md +0 -80
  1254. package/packages/sdk/src/agent-registry.ts +0 -304
  1255. package/packages/sdk/src/consensus/byzantine.ts +0 -587
  1256. package/packages/sdk/src/consensus/index.ts +0 -147
  1257. package/packages/sdk/src/consensus/queen.ts +0 -173
  1258. package/packages/sdk/src/consensus/types.ts +0 -199
  1259. package/packages/sdk/src/dangerous-patterns.ts +0 -127
  1260. package/packages/sdk/src/federation/audit.ts +0 -156
  1261. package/packages/sdk/src/federation/budget.ts +0 -269
  1262. package/packages/sdk/src/federation/envelope.ts +0 -144
  1263. package/packages/sdk/src/federation/hmac.ts +0 -160
  1264. package/packages/sdk/src/federation/index.ts +0 -443
  1265. package/packages/sdk/src/federation/pii.ts +0 -241
  1266. package/packages/sdk/src/federation/policy.ts +0 -112
  1267. package/packages/sdk/src/federation/trust.ts +0 -146
  1268. package/packages/sdk/src/fingerprint.ts +0 -0
  1269. package/packages/sdk/src/index.ts +0 -114
  1270. package/packages/sdk/src/mcp/bin.ts +0 -51
  1271. package/packages/sdk/src/mcp/server.ts +0 -848
  1272. package/packages/sdk/src/memory/index.ts +0 -160
  1273. package/packages/sdk/src/router/codemod-intent.ts +0 -125
  1274. package/packages/sdk/src/router/index.ts +0 -247
  1275. package/packages/sdk/src/router/memory-distillation-shim.mjs +0 -18
  1276. package/packages/sdk/src/router/memory-distillation.ts +0 -249
  1277. package/packages/sdk/src/router/model-router.ts +0 -235
  1278. package/packages/sdk/src/router/q-learning-router.ts +0 -304
  1279. package/packages/sdk/src/swarm-topology.ts +0 -279
  1280. package/packages/sdk/src/version.ts +0 -4
  1281. package/packages/sdk/tests/agent-registry.test.ts +0 -285
  1282. package/packages/sdk/tests/consensus.test.ts +0 -376
  1283. package/packages/sdk/tests/federation/audit.test.ts +0 -164
  1284. package/packages/sdk/tests/federation/budget.test.ts +0 -189
  1285. package/packages/sdk/tests/federation/envelope.test.ts +0 -120
  1286. package/packages/sdk/tests/federation/hmac.test.ts +0 -194
  1287. package/packages/sdk/tests/federation/orchestrator.test.ts +0 -176
  1288. package/packages/sdk/tests/federation/pii.test.ts +0 -106
  1289. package/packages/sdk/tests/federation/policy.test.ts +0 -140
  1290. package/packages/sdk/tests/federation/trust.test.ts +0 -124
  1291. package/packages/sdk/tests/mcp-tools.test.ts +0 -204
  1292. package/packages/sdk/tests/memory-distillation.test.mjs +0 -186
  1293. package/packages/sdk/tests/model-router.test.mjs +0 -108
  1294. package/packages/sdk/tests/q-learning-router.test.mjs +0 -100
  1295. package/packages/sdk/tests/router-orchestrator.test.mjs +0 -172
  1296. package/packages/sdk/tests/router.test.mjs +0 -91
  1297. package/packages/sdk/tests/sdk.test.mjs +0 -172
  1298. package/packages/sdk/tests/swarm-topology.test.ts +0 -258
  1299. package/packages/sdk/tsconfig.json +0 -25
  1300. /package/{.claude/worktrees/kanban-overhaul/bizar-dash/src/web/v8.html → bizar-dash/src/web/index.html} +0 -0
  1301. /package/{.claude/worktrees/kanban-overhaul/bizar-dash → bizar-dash}/src/web/v8/ui/kanban/KanbanCardBadges.tsx +0 -0
  1302. /package/{.claude/worktrees/kanban-overhaul/bizar-dash → bizar-dash}/src/web/v8/ui/kanban/KanbanEmptyColumn.tsx +0 -0
  1303. /package/{.claude/worktrees/kanban-overhaul/bizar-dash → bizar-dash}/src/web/v8/ui/kanban/KanbanProgress.tsx +0 -0
  1304. /package/{.claude/worktrees/kanban-overhaul/bizar-dash → bizar-dash}/src/web/v8/ui/kanban/KanbanToolbar.tsx +0 -0
  1305. /package/{.claude/worktrees/kanban-overhaul/bizar-dash → bizar-dash}/src/web/v8/ui/kanban/useKanbanSelection.ts +0 -0
  1306. /package/{.claude/worktrees/kanban-overhaul → plugins/bizar}/LICENSE +0 -0
@@ -1,1850 +0,0 @@
1
- /**
2
- * cli/memory.mjs
3
- *
4
- * `bizar memory` subcommands. Delegates to memory-store.mjs and memory-git.mjs.
5
- * Supports: init, status, link, unlink, write, pull, commit, push, sync,
6
- * reindex, conflicts, doctor.
7
- */
8
-
9
- import chalk from 'chalk';
10
- import { existsSync, mkdirSync, readFileSync, readdirSync, renameSync } from 'node:fs';
11
- import { join, dirname } from 'node:path';
12
- import { homedir } from 'node:os';
13
- import { fileURLToPath } from 'node:url';
14
- import { execFileSync as _execFileSync } from 'node:child_process';
15
-
16
- // Memory service modules (ESM, shared with bizar-dash)
17
- const SERVER_ROOT = join(dirname(fileURLToPath(import.meta.url)), '..', 'bizar-dash', 'src', 'server');
18
- const memoryStore = await import(`${SERVER_ROOT}/memory-store.mjs`).then((m) => m);
19
- const memorySchema = await import(`${SERVER_ROOT}/memory-schema.mjs`).then((m) => m);
20
- const memorySecrets = await import(`${SERVER_ROOT}/memory-secrets.mjs`).then((m) => m);
21
- const memoryGit = await import(`${SERVER_ROOT}/memory-git.mjs`).then((m) => m);
22
- const memoryLightrag = await import(`${SERVER_ROOT}/memory-lightrag.mjs`).then((m) => m);
23
-
24
- /**
25
- * Get the project root. Assumes CWD is the project root.
26
- */
27
- function getProjectRoot() {
28
- return process.cwd();
29
- }
30
-
31
- /**
32
- * Validate a git remote URL. Accepts HTTPS, SSH (scp-style), and SSH URL form.
33
- * Rejects file://, plain paths, and other schemes.
34
- *
35
- * @param {string} url
36
- * @returns {{ valid: true, kind: 'ssh'|'https'|'ssh-url' } | { valid: false, error: string }}
37
- */
38
- export function validateRemoteUrl(url) {
39
- if (typeof url !== 'string' || url.length === 0) {
40
- return { valid: false, error: 'URL must be a non-empty string' };
41
- }
42
- const trimmed = url.trim();
43
- // SSH scp-style: git@host:path
44
- if (/^[a-zA-Z0-9._-]+@[a-zA-Z0-9._-]+:.+$/.test(trimmed)) {
45
- return { valid: true, kind: 'ssh' };
46
- }
47
- // SSH URL form: ssh://[user@]host[:port]/path
48
- if (/^ssh:\/\/(?:[a-zA-Z0-9._-]+@)?[a-zA-Z0-9._-]+(?::\d+)?\/.+$/.test(trimmed)) {
49
- return { valid: true, kind: 'ssh-url' };
50
- }
51
- // HTTPS: https://host/path
52
- if (/^https:\/\/[a-zA-Z0-9._-]+(?::\d+)?\/.+$/.test(trimmed)) {
53
- return { valid: true, kind: 'https' };
54
- }
55
- return { valid: false, error: 'URL must be ssh://, https://, or git@host:path form' };
56
- }
57
-
58
- // ─── Helper formatters ────────────────────────────────────────────────────────
59
-
60
- function success(msg) { console.log(chalk.green('✓'), msg); }
61
- function info(msg) { console.log(chalk.blue('ℹ'), msg); }
62
- function warn(msg) { console.log(chalk.yellow('⚠'), msg); }
63
- function error(msg) { console.error(chalk.red('✗'), msg); }
64
-
65
- /**
66
- * Print a key-value row: ` key … value`
67
- */
68
- function kv(key, value) {
69
- const pad = 20;
70
- const dots = Math.max(2, pad - key.length);
71
- console.log(` ${key}${'.'.repeat(dots)} ${value}`);
72
- }
73
-
74
- // ─── Subcommand implementations ───────────────────────────────────────────────
75
-
76
- /**
77
- * `bizar memory write <relpath> [--type …] [--status …] [--confidence …]`
78
- * `[--tag <tag>]… [--body <body>|--body-file <file>]`
79
- * `[--title <title>] [--json]`
80
- *
81
- * Write a single note to the vault. Validates the path, type, status, and
82
- * confidence against the schema, builds frontmatter via `defaultFrontmatter`,
83
- * then delegates to `memoryStore.writeNote`. Designed for agents (and humans)
84
- * that want to write memory notes without going through the dashboard UI.
85
- */
86
- async function cmdWrite(args) {
87
- const projectRoot = getProjectRoot();
88
- const { writeNote, loadConfig } = memoryStore;
89
- const { defaultFrontmatter, VALID_TYPES, VALID_STATUSES, VALID_CONFIDENCES } = memorySchema;
90
-
91
- if (args.includes('--help') || args.includes('-h')) {
92
- console.log(`
93
- Usage: bizar memory write <relpath> [options]
94
-
95
- Write a single note to the vault. <relpath> must end in .md and is
96
- resolved relative to the project namespace root (e.g.
97
- decisions/0001-foo.md), NOT prefixed with the namespace.
98
-
99
- Options:
100
- --type <type> One of: ${VALID_TYPES.join(', ')}
101
- (default: project_overview)
102
- --status <status> One of: ${VALID_STATUSES.join(', ')}
103
- (default: active)
104
- --confidence <conf> One of: ${VALID_CONFIDENCES.join(', ')}
105
- (default: verified)
106
- --tag <tag> Tag to attach (may be passed multiple times)
107
- --title <title> Frontmatter title field
108
- --memory-id <id> Custom memory_id (default: <type>_<timestamp>)
109
- Must match [a-zA-Z0-9._-]+
110
- --scope <scope> Frontmatter scope field (e.g. project, team)
111
- --source-agent <name> Frontmatter source_agent field
112
- --body <text> Note body as a string
113
- --body-file <path> Path to a file containing the body
114
- (exactly one of --body / --body-file is allowed)
115
- --json Emit the full returned note as JSON
116
- --help, -h Show this help
117
-
118
- Exactly one of --body or --body-file is required, unless you intend
119
- to write an empty body (in which case omit both).
120
- `.trim());
121
- return;
122
- }
123
-
124
- // Parse positional relpath (first non-flag arg)
125
- const positional = args.filter((a) => !a.startsWith('-'));
126
- const relpath = positional[0];
127
- if (!relpath) {
128
- error('relpath is required: `bizar memory write <relpath>`');
129
- info('run `bizar memory write --help` for usage');
130
- process.exit(1);
131
- }
132
- if (!relpath.endsWith('.md')) {
133
- error(`relpath must end in .md: ${relpath}`);
134
- process.exit(1);
135
- }
136
-
137
- // ── Parse flags ──────────────────────────────────────────────────────────
138
- const optVal = (name) => {
139
- const i = args.indexOf(name);
140
- if (i === -1) return undefined;
141
- const v = args[i + 1];
142
- if (!v || v.startsWith('-')) return undefined;
143
- return v;
144
- };
145
-
146
- const type = optVal('--type') ?? 'project_overview';
147
- if (!VALID_TYPES.includes(type)) {
148
- error(`invalid --type: '${type}'`);
149
- info(`must be one of: ${VALID_TYPES.join(', ')}`);
150
- process.exit(1);
151
- }
152
-
153
- const status = optVal('--status') ?? 'active';
154
- if (!VALID_STATUSES.includes(status)) {
155
- error(`invalid --status: '${status}'`);
156
- info(`must be one of: ${VALID_STATUSES.join(', ')}`);
157
- process.exit(1);
158
- }
159
-
160
- const confidence = optVal('--confidence') ?? 'verified';
161
- if (!VALID_CONFIDENCES.includes(confidence)) {
162
- error(`invalid --confidence: '${confidence}'`);
163
- info(`must be one of: ${VALID_CONFIDENCES.join(', ')}`);
164
- process.exit(1);
165
- }
166
-
167
- const title = optVal('--title');
168
-
169
- // Multi-value --tag
170
- const tags = [];
171
- for (let i = 0; i < args.length; i++) {
172
- if (args[i] === '--tag' && args[i + 1] && !args[i + 1].startsWith('-')) {
173
- tags.push(args[i + 1]);
174
- i++;
175
- }
176
- }
177
-
178
- const inlineBody = optVal('--body');
179
- const bodyFile = optVal('--body-file');
180
- if (inlineBody !== undefined && bodyFile !== undefined) {
181
- error('use either --body or --body-file, not both');
182
- process.exit(1);
183
- }
184
-
185
- // --memory-id (kebab/snake-case only)
186
- const memoryId = optVal('--memory-id');
187
- if (memoryId !== undefined) {
188
- if (!/^[a-zA-Z0-9._-]+$/.test(memoryId)) {
189
- error(`invalid --memory-id: '${memoryId}' (must be kebab/snake-case)`);
190
- info('expected pattern: mem_<path>, e.g. mem_api_memory_schema_md');
191
- process.exit(1);
192
- }
193
- }
194
-
195
- // --scope (free-form, but non-empty when provided)
196
- const scope = optVal('--scope');
197
- if (scope !== undefined && scope.length === 0) {
198
- error('--scope must be a non-empty string');
199
- process.exit(1);
200
- }
201
-
202
- // --source-agent (free-form, but non-empty when provided)
203
- const sourceAgent = optVal('--source-agent');
204
- if (sourceAgent !== undefined && sourceAgent.length === 0) {
205
- error('--source-agent must be a non-empty string');
206
- process.exit(1);
207
- }
208
-
209
- let body = '';
210
- if (bodyFile) {
211
- try {
212
- body = readFileSync(bodyFile, 'utf8');
213
- } catch (err) {
214
- error(`failed to read --body-file ${bodyFile}: ${err.message}`);
215
- process.exit(1);
216
- }
217
- } else if (inlineBody !== undefined) {
218
- body = inlineBody;
219
- }
220
-
221
- // ── Build frontmatter ───────────────────────────────────────────────────
222
- const { config } = loadConfig(projectRoot);
223
- const projectId = config.projectId || projectRoot.split('/').pop() || 'unknown';
224
-
225
- const frontmatter = defaultFrontmatter({
226
- type,
227
- project_id: projectId,
228
- status,
229
- confidence,
230
- tags,
231
- });
232
- if (title) frontmatter.title = title;
233
- if (memoryId) frontmatter.memory_id = memoryId;
234
- if (scope) frontmatter.scope = scope;
235
- if (sourceAgent) frontmatter.source_agent = sourceAgent;
236
-
237
- // ── Write ───────────────────────────────────────────────────────────────
238
- let result;
239
- try {
240
- result = writeNote(projectRoot, relpath, { frontmatter, body });
241
- } catch (err) {
242
- if (err.code === 'SCHEMA_VALIDATION_FAILED') {
243
- error(`schema validation failed: ${err.message.replace(/^schema validation failed: /, '')}`);
244
- } else if (err.code === 'SECRET_DETECTED') {
245
- error(err.message);
246
- } else {
247
- error(err.message);
248
- }
249
- process.exit(1);
250
- }
251
-
252
- // ── Output ──────────────────────────────────────────────────────────────
253
- if (args.includes('--json')) {
254
- console.log(JSON.stringify(result, null, 2));
255
- return;
256
- }
257
-
258
- success(`wrote ${result.relPath}`);
259
- console.log();
260
- console.log(chalk.bold(' Note'));
261
- console.log(' ─────────────────────────────');
262
- kv('relpath', result.relPath);
263
- kv('type', String(result.frontmatter.type));
264
- kv('status', String(result.frontmatter.status));
265
- kv('confidence', String(result.frontmatter.confidence));
266
- kv('memory_id', String(result.frontmatter.memory_id));
267
- if (Array.isArray(result.frontmatter.tags) && result.frontmatter.tags.length > 0) {
268
- kv('tags', result.frontmatter.tags.join(', '));
269
- }
270
- if (title) kv('title', title);
271
- kv('size', `${result.size} bytes`);
272
- console.log();
273
- }
274
-
275
- /**
276
- * `bizar memory init`
277
- * Creates .bizar/memory.json with mode=managed (default).
278
- * Pass --memory-mode local-only to use local vault storage instead.
279
- *
280
- * Flags (added for install.sh bootstrap):
281
- * --yes Accept all defaults (skip prompts, skip if already initialized)
282
- * --memory-mode MODE Either "local-only" or "managed" (bypasses --managed alias)
283
- * --memory-repo-name Repo name / path for managed mode (bypasses --repo alias)
284
- */
285
- async function cmdInit(args) {
286
- const projectRoot = getProjectRoot();
287
- const { loadConfig, saveConfig } = memoryStore;
288
-
289
- // ── Help (must come before any work — fixes gap in cmdInit --help coverage) ─
290
- if (args.includes('--help') || args.includes('-h')) {
291
- console.log(`
292
- Usage: bizar memory init [options]
293
-
294
- Initialize memory config for this project.
295
-
296
- Options:
297
- --memory-mode <managed|local-only> Vault mode (default: managed)
298
- --memory-repo-name <name> Vault directory name (managed mode)
299
- --yes Skip prompts; non-interactive
300
- --non-interactive Alias for --yes
301
- --help, -h Show this help
302
- `.trim());
303
- return;
304
- }
305
-
306
- // --non-interactive is the canonical alias; --yes kept for backward compat.
307
- const yesFlag = args.includes('--yes') || args.includes('--non-interactive');
308
-
309
- const existing = loadConfig(projectRoot);
310
- if (existing.exists) {
311
- if (yesFlag) {
312
- // Bootstrap mode: skip silently if already initialized
313
- return;
314
- }
315
- warn('memory config already exists — run `bizar memory status` to see current config');
316
- const mode = existing.config.mode || 'local-only';
317
- info(`current mode: ${mode}, projectId: ${existing.config.projectId}`);
318
- return;
319
- }
320
-
321
- // --memory-mode takes precedence over --managed
322
- let mode = 'managed';
323
- const modeIdx = args.indexOf('--memory-mode');
324
- if (modeIdx !== -1 && args[modeIdx + 1]) {
325
- mode = args[modeIdx + 1];
326
- } else if (args.includes('--managed')) {
327
- mode = 'managed';
328
- }
329
-
330
- let repoName = '';
331
-
332
- if (mode === 'managed') {
333
- // --memory-repo-name takes precedence over --repo
334
- const repoArg = args.indexOf('--memory-repo-name');
335
- repoName = repoArg !== -1 ? args[repoArg + 1] : '';
336
- if (!repoName) {
337
- const legacyRepoArg = args.indexOf('--repo');
338
- repoName = legacyRepoArg !== -1 ? args[legacyRepoArg + 1] : '';
339
- }
340
- if (!repoName) {
341
- // Ask via inquirer-style prompt (use readline)
342
- const rl = await import('node:readline').then((m) =>
343
- m.createInterface({ input: process.stdin, output: process.stdout })
344
- );
345
- repoName = await new Promise((resolve) =>
346
- rl.question(chalk.cyan(' repo name (e.g. my-org/memory): '), resolve)
347
- );
348
- rl.close();
349
- }
350
- }
351
-
352
- const home = homedir();
353
- const projectId = projectRoot.split('/').pop() || 'project';
354
- const managedPath = mode === 'managed'
355
- ? join(home, '.local', 'share', 'bizar', 'memory', repoName || 'bizar-memory')
356
- : null;
357
- const vaultPath = mode === 'managed' ? managedPath : join(projectRoot, '.obsidian');
358
-
359
- const config = {
360
- version: 1,
361
- backend: 'bizar-local',
362
- projectId,
363
- memoryRepo: {
364
- mode,
365
- path: vaultPath,
366
- remote: null,
367
- branch: 'main',
368
- namespace: mode === 'managed' ? `projects/${projectId}` : null,
369
- },
370
- namespaces: {
371
- project: `projects/${projectId}`,
372
- global: 'global/bizar',
373
- user: `users/${process.env.USER || process.env.USERNAME || 'local'}`,
374
- },
375
- lightrag: {
376
- enabled: false,
377
- host: '127.0.0.1',
378
- port: 9621,
379
- workingDir: join(projectRoot, '.bizar', 'lightrag'),
380
- },
381
- git: {
382
- autoPullOnSessionStart: false,
383
- autoCommitOnMemoryWrite: false,
384
- autoPushOnSessionEnd: false,
385
- commitAuthor: 'Bizar Memory <bizar-memory@local>',
386
- commitMessageTemplate: `memory(${projectId}): {summary}`,
387
- },
388
- };
389
-
390
- const result = saveConfig(projectRoot, config);
391
- if (!result.ok) {
392
- error(`failed to write config: ${result.error}`);
393
- process.exit(1);
394
- }
395
-
396
- const { initVault } = memoryStore;
397
- const vaultResult = initVault(projectRoot);
398
- success(`initialized memory config`);
399
- info(`mode: ${mode}`);
400
- info(`vault: ${vaultResult.vaultRoot}`);
401
- if (vaultResult.created.length > 0) {
402
- for (const c of vaultResult.created) info(` created: ${c}`);
403
- }
404
- }
405
-
406
- /**
407
- * `bizar memory setup` — configure or reconfigure the memory vault.
408
- *
409
- * v4.2.0 — first-class bootstrap entry point. Two flows:
410
- * - No existing config → behaves like `init` + adds the remote (managed mode).
411
- * - Existing config → optionally updates the remote URL on a managed vault.
412
- *
413
- * Flags:
414
- * --mode <managed|local-only> Vault mode (default: managed)
415
- * --remote <url> Git remote URL (required for managed)
416
- * --repo-name <name> Vault directory name (default: bizar-memory)
417
- * --non-interactive No prompts; use flags or defaults
418
- * --yes Same as --non-interactive (backward compat)
419
- *
420
- * The remote URL is written to BOTH `memoryRepo.remote` (canonical,
421
- * read by resolveVault) and the top-level `gitRemote` (read by cmdPush).
422
- * Both must agree or `bizar memory push` will fail silently.
423
- *
424
- * Connectivity is checked via `memoryGit.lsRemote` after `addRemote`. A
425
- * failure here is informational only — credentials may not be configured
426
- * yet — and does NOT abort the setup.
427
- *
428
- * @param {string[]} argv
429
- */
430
- export async function cmdSetup(argv) {
431
- const projectRoot = getProjectRoot();
432
- const { loadConfig, saveConfig, initVault, resolveVault } = memoryStore;
433
-
434
- // ── Parse flags ──────────────────────────────────────────────────────────
435
- const optVal = (name) => {
436
- const i = argv.indexOf(name);
437
- if (i === -1) return undefined;
438
- const v = argv[i + 1];
439
- if (!v || v.startsWith('-')) return undefined;
440
- return v;
441
- };
442
- const hasFlag = (name) => argv.includes(name);
443
-
444
- const nonInteractive = hasFlag('--non-interactive') || hasFlag('--yes');
445
-
446
- // --mode (default managed). Accept --memory-mode alias too.
447
- let mode = 'managed';
448
- const modeRaw = optVal('--mode') ?? optVal('--memory-mode');
449
- if (modeRaw) mode = modeRaw;
450
- else if (hasFlag('--local-only')) mode = 'local-only';
451
- else if (hasFlag('--managed')) mode = 'managed';
452
- if (mode !== 'managed' && mode !== 'local-only') {
453
- error(`invalid --mode: '${mode}' (must be 'managed' or 'local-only')`);
454
- process.exit(1);
455
- }
456
-
457
- // --remote
458
- let remote = optVal('--remote');
459
- if (remote !== undefined) {
460
- const v = validateRemoteUrl(remote);
461
- if (!v.valid) {
462
- error(`invalid --remote URL: ${v.error}`);
463
- info('examples:');
464
- info(' --remote git@github.com:user/repo.git');
465
- info(' --remote ssh://git@github.com/user/repo.git');
466
- info(' --remote https://github.com/user/repo.git');
467
- process.exit(1);
468
- }
469
- // Store the trimmed canonical form
470
- remote = remote.trim();
471
- }
472
-
473
- // --repo-name (or --memory-repo-name, --repo)
474
- const repoName = optVal('--repo-name') ?? optVal('--memory-repo-name') ?? optVal('--repo') ?? 'bizar-memory';
475
-
476
- // ── Help ────────────────────────────────────────────────────────────────
477
- if (hasFlag('--help') || hasFlag('-h')) {
478
- console.log(`
479
- Usage: bizar memory setup [--remote <url>] [--mode <mode>] [--non-interactive]
480
-
481
- Configure or reconfigure this project's memory vault.
482
-
483
- Options:
484
- --mode <managed|local-only> Vault mode (default: managed)
485
- --remote <url> Git remote URL (required for managed)
486
- Accepts: ssh://, https://, git@host:path
487
- --repo-name <name> Vault directory name (default: bizar-memory)
488
- --local-only Shortcut for --mode local-only
489
- --non-interactive Skip prompts; use flags or defaults
490
- --yes Alias for --non-interactive
491
- --help, -h Show this help
492
-
493
- Examples:
494
- # Bootstrap: first-time init with a remote
495
- bizar memory setup --non-interactive \\
496
- --remote git@github.com:org/bizar-memory.git
497
-
498
- # Reconfigure the remote on an existing managed vault
499
- bizar memory setup --non-interactive \\
500
- --remote https://github.com/org/bizar-memory.git
501
-
502
- # Convert to local-only (removes remote but keeps notes)
503
- bizar memory setup --non-interactive --local-only
504
- `.trim());
505
- return;
506
- }
507
-
508
- // ── Read existing config ────────────────────────────────────────────────
509
- const { config: existingCfg, exists: configExists } = loadConfig(projectRoot);
510
-
511
- // Decide whether this is a bootstrap (no config) or reconfigure (config
512
- // already exists). The branch shape drives the rest of the function.
513
- const isBootstrap = !configExists;
514
-
515
- // Reconfigure path: if no --remote was passed AND --mode wasn't changed,
516
- // just print status and exit. Otherwise apply the change.
517
- if (!isBootstrap) {
518
- const existingMode = existingCfg.memoryRepo?.mode || existingCfg.mode || 'local-only';
519
- const existingRemote = existingCfg.memoryRepo?.remote || existingCfg.gitRemote || '';
520
- const modeChanged = mode !== existingMode;
521
- const remoteChanged = remote !== undefined && remote !== existingRemote;
522
-
523
- if (!modeChanged && !remoteChanged) {
524
- // Nothing to do — print status and exit
525
- console.log(chalk.bold('\n Memory setup (no changes)'));
526
- console.log(' ─────────────────────────────');
527
- success('already configured');
528
- kv('mode', existingMode);
529
- kv('remote', existingRemote || '(none)');
530
- kv('vault', existingCfg.memoryRepo?.path || existingCfg.repoName || '(unknown)');
531
- console.log();
532
- info(`run \`bizar memory setup --remote <url>\` to change the remote`);
533
- return;
534
- }
535
-
536
- // ── Reconfigure path — apply in place ───────────────────────────────
537
- const updatedCfg = { ...existingCfg };
538
-
539
- if (modeChanged && remote === undefined) {
540
- // Switching modes without a new remote is fine, but warn if going
541
- // managed without a URL to push to.
542
- if (mode === 'managed' && !existingRemote) {
543
- warn('switching to managed mode with no remote configured — push will fail');
544
- info('pass --remote <url> to set one');
545
- }
546
- }
547
-
548
- if (remote !== undefined) {
549
- // Dual-write: top-level + memoryRepo.*
550
- updatedCfg.gitRemote = remote;
551
- updatedCfg.memoryRepo = {
552
- ...(existingCfg.memoryRepo || {}),
553
- mode: mode === 'managed' ? 'managed' : (updatedCfg.memoryRepo?.mode || 'local-only'),
554
- remote,
555
- };
556
- }
557
- if (modeChanged) {
558
- updatedCfg.mode = mode;
559
- if (updatedCfg.memoryRepo) {
560
- updatedCfg.memoryRepo.mode = mode;
561
- }
562
- }
563
-
564
- const saveResult = saveConfig(projectRoot, updatedCfg);
565
- if (!saveResult.ok) {
566
- error(`failed to save config: ${saveResult.error}`);
567
- process.exit(1);
568
- }
569
-
570
- // If we now have a remote on a managed vault, register it.
571
- if (mode === 'managed' && remote) {
572
- addRemoteToVault(projectRoot, remote);
573
- }
574
-
575
- printSetupResult({ mode, remote, vaultPath: updatedCfg.memoryRepo?.path });
576
- return;
577
- }
578
-
579
- // ── Bootstrap path (no existing config) ─────────────────────────────────
580
-
581
- // For managed bootstrap, we need a remote. If missing, prompt or error.
582
- if (mode === 'managed' && !remote) {
583
- if (nonInteractive) {
584
- error('--remote is required for --mode managed in non-interactive setup');
585
- info('pass --remote <url> (or run without --non-interactive to be prompted)');
586
- process.exit(1);
587
- }
588
- // Prompt via readline
589
- const readline = await import('node:readline');
590
- const rl = readline.createInterface({ input: process.stdin, output: process.stdout });
591
- const answer = await new Promise((resolve) => {
592
- rl.question(chalk.cyan(' remote URL (ssh://, https://, or git@host:path): '), resolve);
593
- });
594
- rl.close();
595
- const trimmed = (answer || '').trim();
596
- if (!trimmed) {
597
- error('a remote URL is required for managed mode');
598
- process.exit(1);
599
- }
600
- const v = validateRemoteUrl(trimmed);
601
- if (!v.valid) {
602
- error(`invalid remote URL: ${v.error}`);
603
- process.exit(1);
604
- }
605
- remote = trimmed;
606
- }
607
-
608
- // Build a config object mirroring cmdInit's shape, with the remote set.
609
- const home = homedir();
610
- const projectId = projectRoot.split('/').pop() || 'project';
611
- const vaultPath = mode === 'managed'
612
- ? join(home, '.local', 'share', 'bizar', 'memory', repoName)
613
- : join(projectRoot, '.obsidian');
614
-
615
- const cfg = {
616
- version: 1,
617
- backend: 'bizar-local',
618
- projectId,
619
- memoryRepo: {
620
- mode,
621
- path: vaultPath,
622
- remote: mode === 'managed' ? (remote || null) : null,
623
- branch: 'main',
624
- namespace: mode === 'managed' ? `projects/${projectId}` : null,
625
- },
626
- namespaces: {
627
- project: `projects/${projectId}`,
628
- global: 'global/bizar',
629
- user: `users/${process.env.USER || process.env.USERNAME || 'local'}`,
630
- },
631
- lightrag: {
632
- enabled: false,
633
- host: '127.0.0.1',
634
- port: 9621,
635
- workingDir: join(projectRoot, '.bizar', 'lightrag'),
636
- },
637
- git: {
638
- autoPullOnSessionStart: false,
639
- autoCommitOnMemoryWrite: false,
640
- autoPushOnSessionEnd: false,
641
- commitAuthor: 'Bizar Memory <bizar-memory@local>',
642
- commitMessageTemplate: `memory(${projectId}): {summary}`,
643
- },
644
- };
645
-
646
- // Top-level gitRemote mirrors memoryRepo.remote so cmdPush works.
647
- if (mode === 'managed' && remote) {
648
- cfg.gitRemote = remote;
649
- }
650
-
651
- const saveResult = saveConfig(projectRoot, cfg);
652
- if (!saveResult.ok) {
653
- error(`failed to write config: ${saveResult.error}`);
654
- process.exit(1);
655
- }
656
-
657
- // Initialize the vault on disk.
658
- const vaultResult = initVault(projectRoot);
659
- if (!vaultResult.ok) {
660
- error(`vault init failed: ${vaultResult.error || 'unknown'}`);
661
- process.exit(1);
662
- }
663
- if (vaultResult.created.length > 0) {
664
- for (const c of vaultResult.created) info(` created: ${c}`);
665
- }
666
-
667
- // For managed bootstrap with a remote, register it on the new vault.
668
- if (mode === 'managed' && remote) {
669
- addRemoteToVault(projectRoot, remote);
670
- }
671
-
672
- printSetupResult({ mode, remote, vaultPath });
673
- }
674
-
675
- /**
676
- * Register `remote` as `origin` on the vault's git repo, then probe
677
- * connectivity via `lsRemote`. Both operations are best-effort: we
678
- * warn on failure but never abort the setup.
679
- *
680
- * @param {string} projectRoot
681
- * @param {string} remote
682
- */
683
- function addRemoteToVault(projectRoot, remote) {
684
- const { resolveVault } = memoryStore;
685
- const { vaultRoot } = resolveVault(projectRoot);
686
-
687
- // Sanity check: is the vault a git repo? initVault should have ensured
688
- // this, but double-check before calling git remote.
689
- const gitDir = join(vaultRoot, '.git');
690
- if (!existsSync(gitDir)) {
691
- warn('vault is not a git repo — skipping remote registration');
692
- info('run `bizar memory init` or `bizar memory sync` to repair');
693
- return;
694
- }
695
-
696
- if (typeof memoryGit.addRemote !== 'function') {
697
- warn('memoryGit.addRemote is not available in this build');
698
- info('(waiting for the addRemote/lsRemote stream to merge) — remote URL saved to config');
699
- return;
700
- }
701
-
702
- const addResult = memoryGit.addRemote(vaultRoot, 'origin', remote, { overwrite: true });
703
- if (!addResult || addResult.ok === false) {
704
- warn(`failed to register remote: ${addResult?.error || 'unknown error'}`);
705
- info('the remote URL is still saved in .bizar/memory.json');
706
- return;
707
- }
708
- if (addResult.action === 'unchanged') {
709
- info(`remote 'origin' already set to ${remote}`);
710
- } else if (addResult.action === 'updated') {
711
- success(`updated remote 'origin' → ${remote}`);
712
- } else {
713
- success(`registered remote 'origin' → ${remote}`);
714
- }
715
-
716
- if (typeof memoryGit.lsRemote !== 'function') {
717
- info('skipping connectivity probe (lsRemote not available yet)');
718
- return;
719
- }
720
-
721
- const probe = memoryGit.lsRemote(vaultRoot, 'origin', { timeoutMs: 5000 });
722
- if (typeof probe === 'string' && probe.length > 0) {
723
- const refCount = probe.split('\n').filter(Boolean).length;
724
- success(`connectivity ok (${refCount} refs reachable)`);
725
- } else {
726
- warn('could not reach remote (auth, network, or unknown host)');
727
- info('the vault is set up; configure credentials and run `bizar memory pull`');
728
- }
729
- }
730
-
731
- /**
732
- * Render the standard "setup complete" report using the existing `kv`
733
- * style. The connectivity line is omitted if not relevant.
734
- *
735
- * @param {{ mode: string, remote: string|undefined|null, vaultPath: string }} opts
736
- */
737
- function printSetupResult({ mode, remote, vaultPath }) {
738
- console.log();
739
- success('memory setup complete');
740
- console.log(' ─────────────────────────────');
741
- kv('mode', mode);
742
- kv('vault', String(vaultPath || ''));
743
- if (remote) kv('remote', remote);
744
- console.log();
745
- if (!remote) {
746
- info('local-only mode — notes are stored in this project only');
747
- info('run `bizar memory setup --remote <url>` to attach a remote later');
748
- } else {
749
- info('next steps:');
750
- info(' 1. `bizar memory pull` to fetch the existing vault (if any)');
751
- info(' 2. `bizar memory write <relpath>` to start adding notes');
752
- info(' 3. `bizar memory push` to publish');
753
- }
754
- }
755
-
756
- /**
757
- * `bizar memory status`
758
- */
759
- async function cmdStatus(_args, opts = {}) {
760
- const { wantJson = false } = opts;
761
- const projectRoot = getProjectRoot();
762
- const { loadConfig, resolveVault, initVault, listNotes } = memoryStore;
763
- const { isGitInstalled, status: gitStatus } = memoryGit;
764
-
765
- const { config, exists } = loadConfig(projectRoot);
766
- if (!exists) {
767
- warn('memory not initialized — run `bizar memory init` first');
768
- return;
769
- }
770
-
771
- const { vaultRoot, mode, projectId, branch } = resolveVault(projectRoot);
772
-
773
- const out = { mode, projectId, vault: vaultRoot, branch };
774
-
775
- // Ensure vault exists
776
- if (!existsSync(vaultRoot)) {
777
- out.vaultExists = false;
778
- } else {
779
- out.vaultExists = true;
780
- const notes = listNotes(projectRoot);
781
- out.noteCount = notes.length;
782
- }
783
-
784
- // Git status if managed
785
- if ((mode === 'managed' || mode === 'linked') && existsSync(vaultRoot)) {
786
- if (isGitInstalled()) {
787
- const gs = gitStatus(vaultRoot);
788
- if (gs.ok) {
789
- out.git = { branch: gs.branch, clean: gs.clean };
790
- if (gs.ahead > 0) out.git.ahead = gs.ahead;
791
- if (gs.behind > 0) out.git.behind = gs.behind;
792
- } else {
793
- out.git = { error: 'not a git repo' };
794
- }
795
- } else {
796
- out.git = { error: 'git not installed' };
797
- }
798
- }
799
-
800
- // LightRAG status
801
- try {
802
- const { isLightRAGRunning, isLightRAGInstalled, resolveLightRAGConfig } = memoryStore;
803
- const cfg = resolveLightRAGConfig(projectRoot);
804
- if (!cfg.enabled) {
805
- out.lightrag = { enabled: false };
806
- } else if (!(await isLightRAGInstalled())) {
807
- out.lightrag = { enabled: true, installed: false };
808
- } else {
809
- const running = await isLightRAGRunning(cfg);
810
- out.lightrag = { enabled: true, installed: true, running, host: cfg.host, port: cfg.port };
811
- }
812
- } catch (err) {
813
- out.lightrag = { error: err.message };
814
- }
815
-
816
- // Last reindex attempt
817
- const reindexMarker = join(projectRoot, '.bizar', 'memory-cache', 'last-reindex.json');
818
- if (existsSync(reindexMarker)) {
819
- try {
820
- const { finishedAt, ok, inserted, failed, noteCount } = JSON.parse(readFileSync(reindexMarker, 'utf8'));
821
- out.lastReindex = { finishedAt, ok, inserted, failed, noteCount };
822
- } catch { /* ignore */ }
823
- }
824
-
825
- if (wantJson) {
826
- process.stdout.write(JSON.stringify(out) + '\n');
827
- return;
828
- }
829
-
830
- console.log(chalk.bold('\n Bizar Memory Status'));
831
- console.log(' ─────────────────────────────');
832
- kv('mode', mode);
833
- kv('projectId', projectId);
834
- kv('vault', vaultRoot);
835
- kv('branch', branch);
836
- if (!out.vaultExists) {
837
- warn(`vault directory does not exist — run \`bizar memory init\` or \`bizar memory sync\``);
838
- } else {
839
- kv('noteCount', String(out.noteCount));
840
- }
841
- if (out.git) {
842
- if (out.git.error) {
843
- kv('git', chalk.yellow(out.git.error));
844
- } else {
845
- const cleanStr = out.git.clean ? chalk.green('clean') : chalk.red('dirty');
846
- kv('git', `${out.git.branch} (${cleanStr})`);
847
- if (out.git.ahead) kv('ahead', String(out.git.ahead));
848
- if (out.git.behind) kv('behind', String(out.git.behind));
849
- }
850
- }
851
- if (out.lightrag) {
852
- if (out.lightrag.error) {
853
- kv('lightrag', chalk.gray(`status unavailable (${out.lightrag.error})`));
854
- } else if (!out.lightrag.enabled) {
855
- kv('lightrag', chalk.gray('disabled'));
856
- } else if (!out.lightrag.installed) {
857
- kv('lightrag', chalk.yellow('not installed — `uv tool install "lightrag-hku[api]"`'));
858
- } else {
859
- const runningStr = out.lightrag.running
860
- ? chalk.green(`${out.lightrag.host}:${out.lightrag.port} (running)`)
861
- : chalk.yellow(`${out.lightrag.host}:${out.lightrag.port} (not running)`);
862
- kv('lightrag', runningStr);
863
- }
864
- }
865
- if (out.lastReindex) {
866
- const lr = out.lastReindex;
867
- const lrStr = `${new Date(lr.finishedAt).toLocaleString()} — ${lr.ok ? chalk.green(`${lr.inserted}/${lr.noteCount} ok`) : chalk.red(`${lr.failed} failed`)}`;
868
- kv('lastReindex', lrStr);
869
- }
870
- console.log();
871
- }
872
-
873
- /**
874
- * `bizar memory link <path|url>`
875
- *
876
- * v6.0.0 — Robust init-less clone. Three cases handled:
877
- *
878
- * 1. Default vault (`~/.bizar_memory`) does not exist → clone there.
879
- * 2. Default vault exists but is empty → clone there.
880
- * 3. Default vault exists with content → refuse unless `--force`; if
881
- * `--force`, move the existing dir to `<vault>.bak.<unix-ts>` and
882
- * clone fresh.
883
- *
884
- * For local paths, we copy (instead of clone) into the default vault
885
- * location. The original path is left untouched.
886
- *
887
- * Examples:
888
- * bizar memory link https://github.com/me/notes.git
889
- * bizar memory link /path/to/local/notes
890
- * bizar memory link --force https://github.com/me/notes.git
891
- */
892
- async function cmdLink(args) {
893
- const projectRoot = getProjectRoot();
894
- const { loadConfig, saveConfig, resolveVault } = memoryStore;
895
- const { clone, isGitInstalled, copyDir } = memoryGit;
896
-
897
- if (args.includes('--help') || args.includes('-h')) {
898
- console.log(` Usage: bizar memory link [--force] [--target DIR] <path|url>`);
899
- console.log(` `);
900
- console.log(` Link this project to a shared memory repo.`);
901
- console.log(` `);
902
- console.log(` By default, the remote is cloned into the Bizar vault location`);
903
- console.log(` (BIZAR_MEMORY_VAULT env var, or ~/.bizar_memory).`);
904
- console.log(` Use --target DIR to override the destination.`);
905
- console.log(` Use --force to overwrite an existing vault.`);
906
- console.log(` `);
907
- console.log(` Examples:`);
908
- console.log(` bizar memory link https://github.com/me/notes.git`);
909
- console.log(` bizar memory link /path/to/local/notes`);
910
- console.log(` bizar memory link --force https://github.com/me/notes.git`);
911
- console.log(` bizar memory link --target ~/my-notes https://...`);
912
- return;
913
- }
914
-
915
- const force = args.includes('--force');
916
- const targetIdx = args.indexOf('--target');
917
- const targetOverride = targetIdx >= 0 ? args[targetIdx + 1] : null;
918
- const positional = args.filter((a, i) => !a.startsWith('--') && i !== targetIdx + 1);
919
- const target = positional[0];
920
-
921
- if (!target) {
922
- error('specify a path or URL to link to (see `bizar memory link --help`)');
923
- process.exit(1);
924
- }
925
-
926
- const { config: existing } = loadConfig(projectRoot);
927
- if (existing.mode === 'managed' && !force) {
928
- error('already linked — use --force to overwrite');
929
- process.exit(1);
930
- }
931
-
932
- // ── Resolve destination ───────────────────────────────────────────
933
- const destRoot = targetOverride
934
- ? (targetOverride.startsWith('~')
935
- ? join(process.env.HOME, targetOverride.slice(1))
936
- : targetOverride)
937
- : (process.env.BIZAR_MEMORY_VAULT || join(process.env.HOME, '.bizar_memory'));
938
-
939
- // ── Handle existing destination ──────────────────────────────────
940
- if (existsSync(destRoot)) {
941
- const entries = readdirSync(destRoot);
942
- const isEmpty = entries.length === 0;
943
-
944
- // Is it already a git repo with commits?
945
- let isGitRepo = false;
946
- try {
947
- const r = _execFileSync('git', ['-C', destRoot, 'rev-parse', '--git-dir'], { stdio: 'pipe' });
948
- isGitRepo = r && r.toString().trim().length > 0;
949
- } catch {
950
- isGitRepo = false;
951
- }
952
-
953
- if (isGitRepo && !force) {
954
- error(
955
- `destination ${destRoot} is already a git repo — refusing to overwrite.\n` +
956
- ` Use --force to back it up and replace it.`,
957
- );
958
- process.exit(1);
959
- }
960
-
961
- if (!isEmpty && !force) {
962
- error(
963
- `destination ${destRoot} is not empty — refusing to overwrite.\n` +
964
- ` Use --force to back it up and replace it.`,
965
- );
966
- process.exit(1);
967
- }
968
-
969
- if (force) {
970
- const ts = Math.floor(Date.now() / 1000);
971
- const backup = `${destRoot}.bak.${ts}`;
972
- warn(`backing up ${destRoot} → ${backup}`);
973
- try {
974
- renameSync(destRoot, backup);
975
- } catch (err) {
976
- error(`failed to back up ${destRoot}: ${err.message}`);
977
- process.exit(1);
978
- }
979
- }
980
- }
981
-
982
- // Ensure parent exists.
983
- try {
984
- mkdirSync(dirname(destRoot), { recursive: true });
985
- } catch { /* ignore */ }
986
-
987
- // ── Clone or copy ─────────────────────────────────────────────────
988
- let gitRemote = '';
989
- if (target.startsWith('http') || target.startsWith('git')) {
990
- if (!isGitInstalled()) {
991
- error('git is not installed — cannot clone');
992
- process.exit(1);
993
- }
994
- info(`cloning ${target} → ${destRoot}`);
995
- const result = clone(target, destRoot);
996
- if (!result.ok) {
997
- error(`clone failed: ${result.error}`);
998
- process.exit(1);
999
- }
1000
- gitRemote = target;
1001
- } else {
1002
- // Local path → recursive copy.
1003
- if (!existsSync(target)) {
1004
- error(`path does not exist: ${target}`);
1005
- process.exit(1);
1006
- }
1007
- info(`copying ${target} → ${destRoot}`);
1008
- const result = copyDir(target, destRoot);
1009
- if (!result.ok) {
1010
- error(`copy failed: ${result.error}`);
1011
- process.exit(1);
1012
- }
1013
- // If the source is a git repo, copy its .git along (so the
1014
- // destination becomes a working clone).
1015
- const srcGit = join(target, '.git');
1016
- if (existsSync(srcGit)) {
1017
- const dstGit = join(destRoot, '.git');
1018
- const r = copyDir(srcGit, dstGit);
1019
- if (r.ok) {
1020
- gitRemote = _execFileSync('git', ['-C', target, 'config', '--get', 'remote.origin.url'], {
1021
- stdio: ['pipe', 'pipe', 'pipe'],
1022
- })
1023
- .toString()
1024
- .trim();
1025
- }
1026
- }
1027
- }
1028
-
1029
- // ── Save config ──────────────────────────────────────────────────
1030
- const config = {
1031
- ...existing,
1032
- mode: 'managed',
1033
- repoName: destRoot,
1034
- gitRemote,
1035
- branch: existing.branch || 'main',
1036
- linkedAt: new Date().toISOString(),
1037
- };
1038
-
1039
- const result = saveConfig(projectRoot, config);
1040
- if (!result.ok) {
1041
- error(`failed to save config: ${result.error}`);
1042
- process.exit(1);
1043
- }
1044
-
1045
- success(`linked to ${destRoot}${gitRemote ? ` (remote: ${gitRemote})` : ''}`);
1046
- }
1047
-
1048
- /**
1049
- * `bizar memory unlink`
1050
- */
1051
- async function cmdUnlink(_args) {
1052
- const projectRoot = getProjectRoot();
1053
- const { loadConfig, saveConfig } = memoryStore;
1054
-
1055
- const { config } = loadConfig(projectRoot);
1056
- if (config.mode === 'local-only') {
1057
- warn('not linked — nothing to do');
1058
- return;
1059
- }
1060
-
1061
- const newConfig = { ...config, mode: 'local-only', repoName: '', gitRemote: '' };
1062
- const result = saveConfig(projectRoot, newConfig);
1063
- if (!result.ok) {
1064
- error(`failed to save config: ${result.error}`);
1065
- process.exit(1);
1066
- }
1067
- success('unlinked — reverted to local-only mode');
1068
- }
1069
-
1070
- /**
1071
- * `bizar memory pull`
1072
- */
1073
- async function cmdPull(_args) {
1074
- const projectRoot = getProjectRoot();
1075
- const { loadConfig, resolveVault } = memoryStore;
1076
- const { pull, isGitInstalled, ensureUpstream } = memoryGit;
1077
-
1078
- const { config } = loadConfig(projectRoot);
1079
- if (config.mode === 'local-only') {
1080
- error('pull only works in managed mode');
1081
- process.exit(1);
1082
- }
1083
-
1084
- if (!isGitInstalled()) {
1085
- error('git is not installed');
1086
- process.exit(1);
1087
- }
1088
-
1089
- const { vaultRoot, branch } = resolveVault(projectRoot);
1090
- const remoteName = config.gitRemote ? 'origin' : 'origin';
1091
-
1092
- // Pre-flight: ensure upstream is set. Without this, `git pull` fails with
1093
- // "no tracking information" on freshly-cloned or locally-initialized vaults.
1094
- const upstreamResult = ensureUpstream(vaultRoot, config.branch || branch || 'main', remoteName);
1095
- if (!upstreamResult.ok) {
1096
- info(`upstream not set (${upstreamResult.error}); pull may fail`);
1097
- } else if (upstreamResult.action === 'set') {
1098
- success(`set upstream to ${remoteName}/${config.branch || branch || 'main'}`);
1099
- }
1100
-
1101
- info(`pulling into ${vaultRoot}`);
1102
- const result = pull(vaultRoot);
1103
- if (!result.ok) {
1104
- error(`pull failed: ${result.error}`);
1105
- process.exit(1);
1106
- }
1107
- success('pulled successfully');
1108
- }
1109
-
1110
- /**
1111
- * `bizar memory commit [-m msg]`
1112
- */
1113
- async function cmdCommit(args) {
1114
- const projectRoot = getProjectRoot();
1115
- const { loadConfig, resolveVault } = memoryStore;
1116
- const { commit: gitCommit, addAll, isGitInstalled } = memoryGit;
1117
-
1118
- const { config } = loadConfig(projectRoot);
1119
- if (config.mode === 'local-only') {
1120
- error('commit only works in managed mode');
1121
- process.exit(1);
1122
- }
1123
-
1124
- if (!isGitInstalled()) {
1125
- error('git is not installed');
1126
- process.exit(1);
1127
- }
1128
-
1129
- const { vaultRoot } = resolveVault(projectRoot);
1130
-
1131
- // Stage all
1132
- const addResult = addAll(vaultRoot);
1133
- if (!addResult.ok) {
1134
- error(`git add failed: ${addResult.error}`);
1135
- process.exit(1);
1136
- }
1137
-
1138
- // Message
1139
- const msgIdx = args.indexOf('-m');
1140
- let message;
1141
- if (msgIdx !== -1 && args[msgIdx + 1]) {
1142
- message = args[msgIdx + 1];
1143
- } else {
1144
- const date = new Date().toISOString().replace(/T.*/, '');
1145
- message = `[memory-sync] ${date} vault sync`;
1146
- }
1147
-
1148
- const result = gitCommit(vaultRoot, message);
1149
- if (!result.ok) {
1150
- error(`commit failed: ${result.error}`);
1151
- process.exit(1);
1152
- }
1153
- success(`committed: ${message}`);
1154
- }
1155
-
1156
- /**
1157
- * `bizar memory push`
1158
- */
1159
- async function cmdPush(_args) {
1160
- const projectRoot = getProjectRoot();
1161
- const { loadConfig, resolveVault } = memoryStore;
1162
- const { push, isGitInstalled } = memoryGit;
1163
-
1164
- const { config } = loadConfig(projectRoot);
1165
- if (config.mode === 'local-only') {
1166
- error('push only works in managed mode');
1167
- process.exit(1);
1168
- }
1169
-
1170
- if (!isGitInstalled()) {
1171
- error('git is not installed');
1172
- process.exit(1);
1173
- }
1174
-
1175
- const { vaultRoot, branch } = resolveVault(projectRoot);
1176
- info(`pushing to ${config.gitRemote || 'origin'}`);
1177
- const result = push(vaultRoot, { remote: config.gitRemote || 'origin', branch });
1178
- if (!result.ok) {
1179
- error(`push failed: ${result.error}`);
1180
- process.exit(1);
1181
- }
1182
- success('pushed successfully');
1183
- }
1184
-
1185
- /**
1186
- * `bizar memory sync`
1187
- * Full sync orchestrator: pull → stage → validate → secret-scan →
1188
- * commit → push (if remote configured).
1189
- */
1190
- async function cmdSync(args) {
1191
- const projectRoot = getProjectRoot();
1192
- const { loadConfig, resolveVault, validateAll, scanForSecrets, listNotes } = memoryStore;
1193
- const { pull, addAll, commit: gitCommit, push: gitPush, status: gitStatus, acquireLock, isGitInstalled, ensureUpstream } = memoryGit;
1194
-
1195
- const { config } = loadConfig(projectRoot);
1196
- if (config.mode === 'local-only') {
1197
- error('sync only works in managed mode');
1198
- process.exit(1);
1199
- }
1200
-
1201
- if (!isGitInstalled()) {
1202
- error('git is not installed');
1203
- process.exit(1);
1204
- }
1205
-
1206
- const { vaultRoot, branch } = resolveVault(projectRoot);
1207
- const branchName = config.branch || branch || 'main';
1208
-
1209
- // Pre-flight: ensure upstream is set. Some workflows create a vault before
1210
- // origin exists; without upstream, `git pull` fails with "no tracking".
1211
- if (config.gitRemote) {
1212
- const upstreamResult = ensureUpstream(vaultRoot, branchName, 'origin');
1213
- if (!upstreamResult.ok) {
1214
- info(`upstream not set (${upstreamResult.error}); pull may fail`);
1215
- } else if (upstreamResult.action === 'set') {
1216
- success(`set upstream to origin/${branchName}`);
1217
- }
1218
- }
1219
-
1220
- // Acquire lock
1221
- const lock = acquireLock(vaultRoot);
1222
- if (lock.error) {
1223
- error(`vault is locked by another process — try again later`);
1224
- process.exit(1);
1225
- }
1226
-
1227
- try {
1228
- // 1. Pull
1229
- info('pulling latest changes...');
1230
- const pullResult = pull(vaultRoot);
1231
- if (!pullResult.ok) {
1232
- warn(`pull failed (may be up to date): ${pullResult.error}`);
1233
- } else {
1234
- success('pulled');
1235
- }
1236
-
1237
- // 2. Check status
1238
- const gs = gitStatus(vaultRoot);
1239
- if (gs.clean) {
1240
- info('nothing to sync — vault is clean');
1241
- return;
1242
- }
1243
-
1244
- // 3. Validate changed files
1245
- const allNotes = listNotes(projectRoot);
1246
- const changedSet = new Set([...gs.modified, ...gs.untracked]);
1247
- const invalidNotes = allNotes.filter((n) => !n.schemaValid && changedSet.has(n.relPath));
1248
- if (invalidNotes.length > 0) {
1249
- error('schema validation failed for changed notes:');
1250
- for (const n of invalidNotes) {
1251
- const { errors } = memorySchema.validateNote(n.frontmatter, n.body);
1252
- console.error(` ${n.relPath}: ${errors.join('; ')}`);
1253
- }
1254
- process.exit(1);
1255
- }
1256
-
1257
- // 4. Secret scan changed files
1258
- const scanResults = [];
1259
- for (const relPath of changedSet) {
1260
- const result = scanForSecrets(projectRoot, relPath);
1261
- if (!result.safe) {
1262
- scanResults.push(...result.findings);
1263
- }
1264
- }
1265
-
1266
- const highFindings = scanResults.filter((f) => f.severity === 'HIGH');
1267
- if (highFindings.length > 0) {
1268
- error('HIGH-severity secrets detected — blocking commit:');
1269
- for (const f of highFindings) {
1270
- console.error(` [${f.id}] line ${f.line}: ${f.snippet}`);
1271
- }
1272
- process.exit(1);
1273
- }
1274
-
1275
- if (scanResults.length > 0) {
1276
- warn(`${scanResults.length} MEDIUM-severity finding(s):`);
1277
- for (const f of scanResults) {
1278
- warn(` [${f.id}] line ${f.line}: ${f.snippet}`);
1279
- }
1280
- }
1281
-
1282
- // 5. Add all
1283
- const addResult = addAll(vaultRoot);
1284
- if (!addResult.ok) {
1285
- error(`git add failed: ${addResult.error}`);
1286
- process.exit(1);
1287
- }
1288
-
1289
- // 6. Commit
1290
- const date = new Date().toISOString().replace(/T.*/, '');
1291
- const summary = allNotes.length > 0 ? allNotes[0].relPath.slice(0, 60) : 'vault sync';
1292
- const message = `[memory-sync] ${date} ${summary}`;
1293
- const commitResult = gitCommit(vaultRoot, message);
1294
- if (!commitResult.ok) {
1295
- error(`commit failed: ${commitResult.error}`);
1296
- process.exit(1);
1297
- }
1298
- success(`committed: ${message}`);
1299
-
1300
- // 7. Push if remote configured
1301
- if (config.gitRemote) {
1302
- if (args.includes('--push')) {
1303
- const pushResult = gitPush(vaultRoot, { remote: config.gitRemote, branch: config.branch || 'main' });
1304
- if (!pushResult.ok) {
1305
- error(`push failed: ${pushResult.error}`);
1306
- process.exit(1);
1307
- }
1308
- success('pushed');
1309
- } else {
1310
- info('skipping push (pass --push to push after commit)');
1311
- }
1312
- }
1313
-
1314
- success('sync complete');
1315
- } finally {
1316
- lock.release();
1317
- }
1318
- }
1319
-
1320
- /**
1321
- * `bizar memory reindex`
1322
- * v4.1.0 — populates the LightRAG server with every note in the vault.
1323
- *
1324
- * Steps:
1325
- * 1. Resolve LightRAG config from `.bizar/memory.json`.
1326
- * 2. Ensure `lightrag-server` is installed (searches common paths).
1327
- * 3. Ensure server is running (auto-starts if not).
1328
- * 4. List all notes from the vault.
1329
- * 5. Insert each note via `POST /documents` with stable id
1330
- * `bizar://<projectId>/<relPath>`.
1331
- * 6. Write marker file with stats.
1332
- *
1333
- * The reindex is idempotent — re-running re-inserts the same notes under
1334
- * the same ids; LightRAG's id-keyed storage handles this gracefully.
1335
- */
1336
- async function cmdReindex(args) {
1337
- const projectRoot = getProjectRoot();
1338
- const _atomic = await import('./atomic.mjs').then((m) => m);
1339
- const cacheDir = join(projectRoot, '.bizar', 'memory-cache');
1340
- mkdirSync(cacheDir, { recursive: true });
1341
-
1342
- const { isLightRAGInstalled, reindexVault, resolveLightRAGConfig } = memoryStore;
1343
-
1344
- // Preflight: is lightrag-server installed?
1345
- if (!(await isLightRAGInstalled())) {
1346
- error('lightrag-server not installed');
1347
- info('install it with: uv tool install "lightrag-hku[api]"');
1348
- info('then run `bizar memory reindex` again');
1349
- process.exit(1);
1350
- }
1351
-
1352
- // Preflight: is lightrag enabled in config?
1353
- const config = resolveLightRAGConfig(projectRoot);
1354
- if (!config.enabled) {
1355
- warn('lightrag is disabled in .bizar/memory.json (lightrag.enabled = false)');
1356
- info('set lightrag.enabled = true and run `bizar memory reindex` again');
1357
- return;
1358
- }
1359
-
1360
- info(`reindexing vault into LightRAG at http://${config.host}:${config.port}…`);
1361
- const result = await reindexVault(projectRoot, { logger: console });
1362
-
1363
- if (!result.ok && result.inserted === 0) {
1364
- error(`reindex failed: ${result.error || 'unknown'}`);
1365
- if (result.failures?.length > 0) {
1366
- info(`first failure: ${result.failures[0].relPath} — ${result.failures[0].error}`);
1367
- }
1368
- process.exit(1);
1369
- }
1370
-
1371
- if (result.started) {
1372
- success(`started LightRAG server (pid ${result.pid})`);
1373
- }
1374
- success(`reindexed ${result.inserted}/${result.noteCount} notes in ${result.durationMs}ms`);
1375
- if (result.failed > 0) {
1376
- warn(`${result.failed} notes failed — see marker for details`);
1377
- }
1378
- info(`marker: ${result.markerPath}`);
1379
- }
1380
-
1381
- /**
1382
- * `bizar memory search <query>`
1383
- * v4.1.0 — merged lexical + semantic search.
1384
- *
1385
- * - Lexical: token-frequency matching against vault notes (instant, free).
1386
- * - Semantic: LightRAG `/query` with `mode: 'mix'` (combines local entity
1387
- * graph + global relation graph). Skipped if LightRAG isn't running.
1388
- */
1389
- async function cmdSearch(args) {
1390
- const query = args.join(' ').trim();
1391
- if (!query) {
1392
- error('search requires a query: `bizar memory search <query>`');
1393
- process.exit(1);
1394
- }
1395
- const projectRoot = getProjectRoot();
1396
- const { searchVault } = memoryStore;
1397
-
1398
- // Lexical
1399
- const lexical = searchVault(projectRoot, query, { limit: 10 });
1400
- console.log(chalk.bold('\n Lexical results (token-frequency):'));
1401
- if (lexical.length === 0) {
1402
- console.log(chalk.dim(' (no matches)'));
1403
- } else {
1404
- for (const r of lexical.slice(0, 5)) {
1405
- console.log(` ${chalk.cyan(r.relPath)} ${chalk.dim(`(score ${r.score})`)}`);
1406
- console.log(chalk.dim(` ${r.snippet}`));
1407
- }
1408
- }
1409
-
1410
- // Semantic (best-effort)
1411
- console.log(chalk.bold('\n Semantic answer (LightRAG):'));
1412
- try {
1413
- const cfg = memoryStore.resolveLightRAGConfig(projectRoot);
1414
- const semantic = await memoryLightrag.query(cfg, query, { topK: 10 });
1415
- if (!semantic.ok) {
1416
- console.log(chalk.dim(` ${semantic.error || 'unavailable'}`));
1417
- if (semantic.error?.includes('not running')) {
1418
- console.log(chalk.dim(' tip: run `bizar memory reindex` to start + populate LightRAG'));
1419
- }
1420
- } else {
1421
- const response = semantic.response?.response || semantic.response?.answer || '';
1422
- if (response) {
1423
- console.log(` ${response.split('\n').join('\n ')}`);
1424
- } else {
1425
- console.log(chalk.dim(' (no answer returned)'));
1426
- }
1427
- }
1428
- } catch (err) {
1429
- console.log(chalk.dim(` ${err.message}`));
1430
- }
1431
- }
1432
-
1433
- /**
1434
- * `bizar memory conflicts`
1435
- */
1436
- async function cmdConflicts(_args) {
1437
- const projectRoot = getProjectRoot();
1438
- const { listNotes, readNote } = memoryStore;
1439
-
1440
- const notes = listNotes(projectRoot);
1441
- const conflicts = [];
1442
-
1443
- // Frontmatter-based conflicts
1444
- for (const note of notes) {
1445
- if (note.frontmatter?.status === 'conflict') {
1446
- conflicts.push({ relPath: note.relPath, reason: 'frontmatter: status=conflict' });
1447
- }
1448
- }
1449
-
1450
- // Git conflict markers in working tree
1451
- const { vaultRoot } = memoryStore.resolveVault(projectRoot);
1452
- const { readFileSync: rf } = await import('node:fs');
1453
- for (const note of notes) {
1454
- const filePath = join(vaultRoot, note.relPath);
1455
- try {
1456
- const content = rf(filePath, 'utf8');
1457
- if (/^<{7}\s|^={7}\s|^>{7}\s/m.test(content)) {
1458
- conflicts.push({ relPath: note.relPath, reason: 'git conflict markers detected' });
1459
- }
1460
- } catch { /* skip */ }
1461
- }
1462
-
1463
- if (conflicts.length === 0) {
1464
- success('no conflicts found');
1465
- } else {
1466
- console.log(chalk.red(`\n ${conflicts.length} conflict(s) found:`));
1467
- for (const c of conflicts) {
1468
- console.log(` ${c.relPath} — ${c.reason}`);
1469
- }
1470
- }
1471
- }
1472
-
1473
- /**
1474
- * `bizar memory doctor`
1475
- */
1476
- async function cmdDoctor(_args) {
1477
- const projectRoot = getProjectRoot();
1478
- const { loadConfig, resolveVault, initVault, listNotes, validateAll, scanForSecrets } = memoryStore;
1479
- const { isGitInstalled, status: gitStatus } = memoryGit;
1480
-
1481
- console.log(chalk.bold('\n Bizar Memory Doctor'));
1482
- console.log(' ─────────────────────────────');
1483
-
1484
- let allPassed = true;
1485
-
1486
- // Check 1: git installed
1487
- kv('git binary', isGitInstalled() ? chalk.green('present') : chalk.red('missing'));
1488
- if (!isGitInstalled()) allPassed = false;
1489
-
1490
- // Check 2: config exists
1491
- const { config, exists: configExists } = loadConfig(projectRoot);
1492
- kv('config file', configExists ? chalk.green('present') : chalk.red('missing'));
1493
- if (!configExists) allPassed = false;
1494
-
1495
- // Check 3: vault exists
1496
- if (configExists) {
1497
- const { vaultRoot } = resolveVault(projectRoot);
1498
- kv('vault dir', existsSync(vaultRoot) ? chalk.green('present') : chalk.red('missing'));
1499
- if (!existsSync(vaultRoot)) allPassed = false;
1500
-
1501
- // Check 4: vault is a git repo (if managed)
1502
- if ((config.mode === 'managed' || config.mode === 'linked') && existsSync(vaultRoot)) {
1503
- const gs = gitStatus(vaultRoot);
1504
- kv('git repo', gs.ok ? chalk.green('yes') : chalk.red('no'));
1505
- if (!gs.ok) allPassed = false;
1506
- }
1507
-
1508
- // Check 5: note count
1509
- const notes = listNotes(projectRoot);
1510
- kv('notes', notes.length > 0 ? chalk.green(String(notes.length)) : chalk.yellow('0'));
1511
-
1512
- // Check 6: schema validation pass rate
1513
- const validationResults = validateAll(projectRoot);
1514
- const invalidCount = validationResults.length;
1515
- if (invalidCount === 0) {
1516
- kv('schema valid', chalk.green('all notes valid'));
1517
- } else {
1518
- kv('schema valid', chalk.red(`${invalidCount} note(s) invalid`));
1519
- for (const r of validationResults.slice(0, 5)) {
1520
- console.error(` ${r.relPath}: ${r.errors.join('; ')}`);
1521
- }
1522
- allPassed = false;
1523
- }
1524
-
1525
- // Check 7: last reindex
1526
- const reindexMarker = join(projectRoot, '.bizar', 'memory-cache', 'last-reindex.json');
1527
- if (existsSync(reindexMarker)) {
1528
- try {
1529
- const { finishedAt, ok, inserted, failed, noteCount } = JSON.parse(readFileSync(reindexMarker, 'utf8'));
1530
- const ageMs = Date.now() - new Date(finishedAt).getTime();
1531
- const ageH = ageMs / 3600000;
1532
- const summary = `${inserted}/${noteCount} inserted${failed > 0 ? `, ${failed} failed` : ''}`;
1533
- const status = ok ? chalk.green(summary) : chalk.red(summary);
1534
- kv('lastReindex', ageH < 24 ? `${status} ${chalk.dim(`(${Math.round(ageH)}h ago)`)}` : `${status} ${chalk.yellow(`(${Math.round(ageH)}h ago)`)}`);
1535
- } catch { /* ignore */ }
1536
- } else {
1537
- kv('lastReindex', chalk.yellow('never — run `bizar memory reindex`'));
1538
- }
1539
-
1540
- // Check 8: LightRAG status
1541
- try {
1542
- const { isLightRAGInstalled, isLightRAGRunning, resolveLightRAGConfig } = memoryStore;
1543
- const cfg = resolveLightRAGConfig(projectRoot);
1544
- if (!cfg.enabled) {
1545
- kv('lightrag', chalk.gray('disabled'));
1546
- } else if (!(await isLightRAGInstalled())) {
1547
- kv('lightrag', chalk.yellow('not installed — `uv tool install "lightrag-hku[api]"`'));
1548
- } else {
1549
- const running = await isLightRAGRunning(cfg);
1550
- kv('lightrag', running ? chalk.green(`${cfg.host}:${cfg.port} running`) : chalk.yellow(`not running — run \`bizar memory reindex\``));
1551
- }
1552
- } catch (err) {
1553
- kv('lightrag', chalk.gray(`status check failed: ${err.message}`));
1554
- }
1555
- }
1556
-
1557
- console.log('\n ─────────────────────────────');
1558
- if (allPassed) {
1559
- success(chalk.bold('All checks passed'));
1560
- } else {
1561
- error(chalk.bold('Some checks failed — run `bizar memory init` or `bizar memory sync`'));
1562
- }
1563
- console.log();
1564
- }
1565
-
1566
- // ─── read / list / delete (Fix 4 + Fix 5 plumbing) ────────────────────────────
1567
-
1568
- /**
1569
- * Parse `--namespace <ns>` and return the chosen namespace plus the remaining
1570
- * positional args. Defaults to 'project' when the flag is absent.
1571
- */
1572
- function parseNamespaceFlag(args) {
1573
- const idx = args.indexOf('--namespace');
1574
- if (idx === -1) return { namespace: 'project', rest: args };
1575
- const v = args[idx + 1];
1576
- if (!v || v.startsWith('-')) return { namespace: 'project', rest: args };
1577
- // Remove the flag and its value from the rest
1578
- const rest = args.filter((a, i) => i !== idx && i !== idx + 1);
1579
- return { namespace: v, rest };
1580
- }
1581
-
1582
- /**
1583
- * `bizar memory read [--namespace <ns>] <relpath>`
1584
- *
1585
- * Read a single note and print its raw content (frontmatter + body) to stdout.
1586
- */
1587
- async function cmdRead(args) {
1588
- const projectRoot = getProjectRoot();
1589
- const { resolveVault, resolveNamespaceRoot } = memoryStore;
1590
-
1591
- if (args.includes('--help') || args.includes('-h')) {
1592
- console.log(`
1593
- Usage: bizar memory read [--namespace <ns>] <relpath>
1594
-
1595
- Read a single note and print it to stdout (YAML frontmatter + body).
1596
-
1597
- Options:
1598
- --namespace <project|global|user> Namespace to read from (default: project)
1599
- --help, -h Show this help
1600
- `.trim());
1601
- return;
1602
- }
1603
-
1604
- const { namespace, rest } = parseNamespaceFlag(args);
1605
- const relpath = rest.filter((a) => !a.startsWith('-'))[0];
1606
- if (!relpath) {
1607
- error('relpath is required: `bizar memory read <relpath>`');
1608
- info('run `bizar memory read --help` for usage');
1609
- process.exit(1);
1610
- }
1611
-
1612
- let note;
1613
- if (namespace === 'project') {
1614
- note = memoryStore.readNote(projectRoot, relpath);
1615
- } else {
1616
- const vi = resolveVault(projectRoot);
1617
- const root = resolveNamespaceRoot(vi, namespace);
1618
- if (!root) {
1619
- error(`unknown namespace: ${namespace}`);
1620
- process.exit(1);
1621
- }
1622
- note = memoryStore.readNote(projectRoot, relpath, { root });
1623
- }
1624
-
1625
- if (!note) {
1626
- error(`note not found: ${relpath}`);
1627
- process.exit(1);
1628
- }
1629
- process.stdout.write(note.raw);
1630
- if (!note.raw.endsWith('\n')) process.stdout.write('\n');
1631
- }
1632
-
1633
- /**
1634
- * `bizar memory list [--namespace <ns>] [--json] [dir]`
1635
- *
1636
- * List notes under a directory. Default: walk the project namespace root.
1637
- * Pass `dir` (e.g. `decisions/`) to scope to a subdirectory. The dir is
1638
- * resolved RELATIVE TO the namespace root.
1639
- */
1640
- async function cmdList(args) {
1641
- const projectRoot = getProjectRoot();
1642
- const { resolveVault, resolveNamespaceRoot } = memoryStore;
1643
-
1644
- if (args.includes('--help') || args.includes('-h')) {
1645
- console.log(`
1646
- Usage: bizar memory list [--namespace <ns>] [dir]
1647
-
1648
- List notes under a directory. Default: the project namespace root.
1649
-
1650
- Options:
1651
- --namespace <project|global|user> Namespace to list (default: project)
1652
- --json Emit JSON array
1653
- [dir] Subdirectory under the namespace (e.g. decisions/)
1654
- --help, -h Show this help
1655
- `.trim());
1656
- return;
1657
- }
1658
-
1659
- const { namespace, rest } = parseNamespaceFlag(args);
1660
- const asJson = rest.includes('--json');
1661
- const dir = rest.filter((a) => !a.startsWith('-'))[0] || '';
1662
-
1663
- let notes;
1664
- if (namespace === 'project') {
1665
- notes = memoryStore.listNotes(projectRoot, dir ? { namespace: dir } : {});
1666
- } else {
1667
- const vi = resolveVault(projectRoot);
1668
- const root = resolveNamespaceRoot(vi, namespace);
1669
- if (!root) {
1670
- error(`unknown namespace: ${namespace}`);
1671
- process.exit(1);
1672
- }
1673
- notes = memoryStore.listNotes(projectRoot, dir ? { root, namespace: dir } : { root });
1674
- }
1675
-
1676
- // listNotes returns relPaths RELATIVE to the search root, so when we
1677
- // filter by `dir` we need to re-attach the dir prefix for display —
1678
- // otherwise the user sees `0001-foo.md` instead of the more useful
1679
- // `decisions/0001-foo.md`. Strip a trailing slash for cleanliness.
1680
- const displayPrefix = dir ? dir.replace(/\/+$/, '') + '/' : '';
1681
-
1682
- if (asJson) {
1683
- console.log(JSON.stringify(notes.map((n) => ({
1684
- relPath: displayPrefix + n.relPath,
1685
- size: n.size,
1686
- mtime: n.mtime,
1687
- })), null, 2));
1688
- return;
1689
- }
1690
- if (notes.length === 0) {
1691
- console.log(chalk.dim(' (no notes)'));
1692
- return;
1693
- }
1694
- for (const n of notes) {
1695
- console.log(` ${displayPrefix}${n.relPath}`);
1696
- }
1697
- }
1698
-
1699
- /**
1700
- * `bizar memory delete [--namespace <ns>] <relpath>`
1701
- *
1702
- * Delete a single note from the vault.
1703
- */
1704
- async function cmdDelete(args) {
1705
- const projectRoot = getProjectRoot();
1706
- const { resolveVault, resolveNamespaceRoot } = memoryStore;
1707
-
1708
- if (args.includes('--help') || args.includes('-h')) {
1709
- console.log(`
1710
- Usage: bizar memory delete [--namespace <ns>] <relpath>
1711
-
1712
- Delete a single note from the vault.
1713
-
1714
- Options:
1715
- --namespace <project|global|user> Namespace to delete from (default: project)
1716
- --help, -h Show this help
1717
- `.trim());
1718
- return;
1719
- }
1720
-
1721
- const { namespace, rest } = parseNamespaceFlag(args);
1722
- const relpath = rest.filter((a) => !a.startsWith('-'))[0];
1723
- if (!relpath) {
1724
- error('relpath is required: `bizar memory delete <relpath>`');
1725
- info('run `bizar memory delete --help` for usage');
1726
- process.exit(1);
1727
- }
1728
-
1729
- let ok;
1730
- if (namespace === 'project') {
1731
- ok = memoryStore.deleteNote(projectRoot, relpath);
1732
- } else {
1733
- const vi = resolveVault(projectRoot);
1734
- const root = resolveNamespaceRoot(vi, namespace);
1735
- if (!root) {
1736
- error(`unknown namespace: ${namespace}`);
1737
- process.exit(1);
1738
- }
1739
- ok = memoryStore.deleteNote(projectRoot, relpath, { root });
1740
- }
1741
-
1742
- if (!ok) {
1743
- error(`note not found: ${relpath}`);
1744
- process.exit(1);
1745
- }
1746
- success(`deleted ${relpath}`);
1747
- }
1748
-
1749
- // ─── Dispatcher ──────────────────────────────────────────────────────────────
1750
-
1751
- /**
1752
- * @param {string} subcommand
1753
- * @param {string[]} args
1754
- * @param {{ wantJson?: boolean }} opts
1755
- */
1756
- export async function runMemory(subcommand, args, opts = {}) {
1757
- const { wantJson = false } = opts;
1758
- switch (subcommand) {
1759
- case 'init':
1760
- await cmdInit(args);
1761
- break;
1762
- case 'setup':
1763
- await cmdSetup(args);
1764
- break;
1765
- case 'status':
1766
- await cmdStatus(args, { wantJson });
1767
- break;
1768
- case 'link':
1769
- await cmdLink(args);
1770
- break;
1771
- case 'unlink':
1772
- await cmdUnlink(args);
1773
- break;
1774
- case 'write':
1775
- await cmdWrite(args);
1776
- break;
1777
- case 'read':
1778
- await cmdRead(args);
1779
- break;
1780
- case 'list':
1781
- await cmdList(args);
1782
- break;
1783
- case 'delete':
1784
- await cmdDelete(args);
1785
- break;
1786
- case 'pull':
1787
- await cmdPull(args);
1788
- break;
1789
- case 'commit':
1790
- await cmdCommit(args);
1791
- break;
1792
- case 'push':
1793
- await cmdPush(args);
1794
- break;
1795
- case 'sync':
1796
- await cmdSync(args);
1797
- break;
1798
- case 'reindex':
1799
- await cmdReindex(args);
1800
- break;
1801
- case 'search':
1802
- await cmdSearch(args);
1803
- break;
1804
- case 'conflicts':
1805
- await cmdConflicts(args);
1806
- break;
1807
- case 'doctor':
1808
- await cmdDoctor(args);
1809
- break;
1810
- case 'help':
1811
- case '--help':
1812
- case '-h':
1813
- showHelp();
1814
- break;
1815
- default:
1816
- error(`unknown subcommand: ${subcommand}`);
1817
- console.error(` Run \`bizar memory --help\` for usage.`);
1818
- process.exit(1);
1819
- }
1820
- }
1821
-
1822
- function showHelp() {
1823
- console.log(`
1824
- Bizar Memory Service
1825
-
1826
- Usage:
1827
- bizar memory <subcommand> [options]
1828
-
1829
- Subcommands:
1830
- init Initialize memory config for this project
1831
- setup Configure or reconfigure the memory vault (mode + remote)
1832
- status Show current memory configuration
1833
- link <path> Link to a shared memory repo (clone if URL)
1834
- unlink Revert to local-only mode
1835
- write Write a single note to the vault
1836
- read Read a single note and print it to stdout
1837
- list List notes (optionally filtered by namespace + dir)
1838
- delete Delete a single note from the vault
1839
- pull Git pull from the shared repo
1840
- commit [-m] Git commit staged changes
1841
- push Git push to the shared repo
1842
- sync [--push] Full sync: pull → validate → scan → commit → [push]
1843
- reindex Rebuild search index (STUB — Phase 2)
1844
- conflicts List notes with conflict markers
1845
- doctor Run health checks
1846
-
1847
- Options:
1848
- --help, -h Show this help
1849
- `.trim());
1850
- }