@antelopejs/dms-ai 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (416) hide show
  1. package/LICENSE +190 -0
  2. package/README.md +46 -0
  3. package/dist/builder/presence.d.ts +1 -0
  4. package/dist/builder/presence.js +22 -0
  5. package/dist/builder/presence.js.map +1 -0
  6. package/dist/constants/builder.d.ts +7 -0
  7. package/dist/constants/builder.js +11 -0
  8. package/dist/constants/builder.js.map +1 -0
  9. package/dist/constants/frontend-module.d.ts +3 -0
  10. package/dist/constants/frontend-module.js +7 -0
  11. package/dist/constants/frontend-module.js.map +1 -0
  12. package/dist/constants/logs.d.ts +3 -0
  13. package/dist/constants/logs.js +7 -0
  14. package/dist/constants/logs.js.map +1 -0
  15. package/dist/constants/module.d.ts +3 -0
  16. package/dist/constants/module.js +7 -0
  17. package/dist/constants/module.js.map +1 -0
  18. package/dist/constants/pages-registry.d.ts +2 -0
  19. package/dist/constants/pages-registry.js +6 -0
  20. package/dist/constants/pages-registry.js.map +1 -0
  21. package/dist/constants/sidecar.d.ts +24 -0
  22. package/dist/constants/sidecar.js +32 -0
  23. package/dist/constants/sidecar.js.map +1 -0
  24. package/dist/index.d.ts +3 -0
  25. package/dist/index.js +41 -0
  26. package/dist/index.js.map +1 -0
  27. package/dist/lifecycle/module-roots.d.ts +1 -0
  28. package/dist/lifecycle/module-roots.js +52 -0
  29. package/dist/lifecycle/module-roots.js.map +1 -0
  30. package/dist/lifecycle/respawn-tracker.d.ts +5 -0
  31. package/dist/lifecycle/respawn-tracker.js +20 -0
  32. package/dist/lifecycle/respawn-tracker.js.map +1 -0
  33. package/dist/lifecycle/skill-sources.d.ts +5 -0
  34. package/dist/lifecycle/skill-sources.js +181 -0
  35. package/dist/lifecycle/skill-sources.js.map +1 -0
  36. package/dist/lifecycle/spawn-sidecar.d.ts +17 -0
  37. package/dist/lifecycle/spawn-sidecar.js +299 -0
  38. package/dist/lifecycle/spawn-sidecar.js.map +1 -0
  39. package/dist/logging/log-buffer.d.ts +9 -0
  40. package/dist/logging/log-buffer.js +76 -0
  41. package/dist/logging/log-buffer.js.map +1 -0
  42. package/dist/pages/activity/page.d.ts +10 -0
  43. package/dist/pages/activity/page.js +62 -0
  44. package/dist/pages/activity/page.js.map +1 -0
  45. package/dist/pages/all.d.ts +4 -0
  46. package/dist/pages/all.js +21 -0
  47. package/dist/pages/all.js.map +1 -0
  48. package/dist/pages/index.d.ts +4 -0
  49. package/dist/pages/index.js +21 -0
  50. package/dist/pages/index.js.map +1 -0
  51. package/dist/pages/module.d.ts +1 -0
  52. package/dist/pages/module.js +11 -0
  53. package/dist/pages/module.js.map +1 -0
  54. package/dist/pages/overview/page.d.ts +11 -0
  55. package/dist/pages/overview/page.js +82 -0
  56. package/dist/pages/overview/page.js.map +1 -0
  57. package/dist/pages/settings/page.d.ts +9 -0
  58. package/dist/pages/settings/page.js +29 -0
  59. package/dist/pages/settings/page.js.map +1 -0
  60. package/dist/pages/skills/page.d.ts +9 -0
  61. package/dist/pages/skills/page.js +29 -0
  62. package/dist/pages/skills/page.js.map +1 -0
  63. package/dist/pages-registry.d.ts +2 -0
  64. package/dist/pages-registry.js +41 -0
  65. package/dist/pages-registry.js.map +1 -0
  66. package/dist/routes/builder.d.ts +11 -0
  67. package/dist/routes/builder.js +135 -0
  68. package/dist/routes/builder.js.map +1 -0
  69. package/dist/routes/health.d.ts +8 -0
  70. package/dist/routes/health.js +27 -0
  71. package/dist/routes/health.js.map +1 -0
  72. package/dist/routes/index.d.ts +8 -0
  73. package/dist/routes/index.js +25 -0
  74. package/dist/routes/index.js.map +1 -0
  75. package/dist/routes/logs.d.ts +7 -0
  76. package/dist/routes/logs.js +51 -0
  77. package/dist/routes/logs.js.map +1 -0
  78. package/dist/routes/metrics.d.ts +54 -0
  79. package/dist/routes/metrics.js +104 -0
  80. package/dist/routes/metrics.js.map +1 -0
  81. package/dist/routes/pages-registry.d.ts +7 -0
  82. package/dist/routes/pages-registry.js +86 -0
  83. package/dist/routes/pages-registry.js.map +1 -0
  84. package/dist/routes/proxy.d.ts +4 -0
  85. package/dist/routes/proxy.js +55 -0
  86. package/dist/routes/proxy.js.map +1 -0
  87. package/dist/routes/settings.d.ts +13 -0
  88. package/dist/routes/settings.js +52 -0
  89. package/dist/routes/settings.js.map +1 -0
  90. package/dist/routes/sidecar-auth.d.ts +3 -0
  91. package/dist/routes/sidecar-auth.js +27 -0
  92. package/dist/routes/sidecar-auth.js.map +1 -0
  93. package/dist/routes/sidecar-info.d.ts +6 -0
  94. package/dist/routes/sidecar-info.js +39 -0
  95. package/dist/routes/sidecar-info.js.map +1 -0
  96. package/dist/routes/skills.d.ts +18 -0
  97. package/dist/routes/skills.js +33 -0
  98. package/dist/routes/skills.js.map +1 -0
  99. package/dist/types/index.d.ts +2 -0
  100. package/dist/types/index.js +19 -0
  101. package/dist/types/index.js.map +1 -0
  102. package/dist/types/logs.d.ts +12 -0
  103. package/dist/types/logs.js +3 -0
  104. package/dist/types/logs.js.map +1 -0
  105. package/dist/types/pages-registry.d.ts +6 -0
  106. package/dist/types/pages-registry.js +3 -0
  107. package/dist/types/pages-registry.js.map +1 -0
  108. package/frontend-vue/.editorconfig +12 -0
  109. package/frontend-vue/app/components/ActivityView.vue +94 -0
  110. package/frontend-vue/app/components/SettingsView.vue +300 -0
  111. package/frontend-vue/app/components/SkillsView.vue +228 -0
  112. package/frontend-vue/app/plugins/ai.client.ts +109 -0
  113. package/frontend-vue/app/runtime/backoff.ts +30 -0
  114. package/frontend-vue/app/runtime/constants.ts +66 -0
  115. package/frontend-vue/app/runtime/current-page.ts +28 -0
  116. package/frontend-vue/app/runtime/header-action.ts +64 -0
  117. package/frontend-vue/app/runtime/host-commands.ts +127 -0
  118. package/frontend-vue/app/runtime/navigation-complete.ts +22 -0
  119. package/frontend-vue/app/runtime/overlay-prefs.ts +89 -0
  120. package/frontend-vue/app/runtime/overlay.ts +383 -0
  121. package/frontend-vue/app/runtime/shortcuts.ts +28 -0
  122. package/frontend-vue/app/runtime/sidecar-status.ts +163 -0
  123. package/frontend-vue/app/runtime/theme-bridge.ts +177 -0
  124. package/frontend-vue/app/runtime/ws-client.ts +196 -0
  125. package/frontend-vue/dms.frontend.ts +26 -0
  126. package/frontend-vue/eslint.config.mjs +24 -0
  127. package/frontend-vue/package.json +33 -0
  128. package/frontend-vue/pnpm-lock.yaml +2723 -0
  129. package/frontend-vue/tests/backoff.test.ts +44 -0
  130. package/frontend-vue/tests/host-commands.test.ts +142 -0
  131. package/frontend-vue/tests/navigation.test.ts +45 -0
  132. package/frontend-vue/tests/overlay-prefs.test.ts +91 -0
  133. package/frontend-vue/tests/sidecar-auth.test.ts +87 -0
  134. package/frontend-vue/tests/sidecar-guest.test.ts +45 -0
  135. package/frontend-vue/vitest.config.ts +8 -0
  136. package/package.json +79 -0
  137. package/sidecar/chatbox/dist/assets/index-Cy2BwTG0.js +50 -0
  138. package/sidecar/chatbox/dist/assets/index-pP_KOHIn.css +1 -0
  139. package/sidecar/chatbox/dist/index.html +13 -0
  140. package/sidecar/dist/agent/attachments.d.ts +8 -0
  141. package/sidecar/dist/agent/attachments.js +85 -0
  142. package/sidecar/dist/agent/attachments.js.map +1 -0
  143. package/sidecar/dist/agent/claude-runner.d.ts +33 -0
  144. package/sidecar/dist/agent/claude-runner.js +264 -0
  145. package/sidecar/dist/agent/claude-runner.js.map +1 -0
  146. package/sidecar/dist/agent/claude-session.d.ts +18 -0
  147. package/sidecar/dist/agent/claude-session.js +155 -0
  148. package/sidecar/dist/agent/claude-session.js.map +1 -0
  149. package/sidecar/dist/agent/edit-tracker.d.ts +9 -0
  150. package/sidecar/dist/agent/edit-tracker.js +34 -0
  151. package/sidecar/dist/agent/edit-tracker.js.map +1 -0
  152. package/sidecar/dist/agent/host-context.d.ts +4 -0
  153. package/sidecar/dist/agent/host-context.js +16 -0
  154. package/sidecar/dist/agent/host-context.js.map +1 -0
  155. package/sidecar/dist/agent/input-queue.d.ts +7 -0
  156. package/sidecar/dist/agent/input-queue.js +39 -0
  157. package/sidecar/dist/agent/input-queue.js.map +1 -0
  158. package/sidecar/dist/agent/permission-bus.d.ts +26 -0
  159. package/sidecar/dist/agent/permission-bus.js +138 -0
  160. package/sidecar/dist/agent/permission-bus.js.map +1 -0
  161. package/sidecar/dist/agent/question-bus.d.ts +22 -0
  162. package/sidecar/dist/agent/question-bus.js +91 -0
  163. package/sidecar/dist/agent/question-bus.js.map +1 -0
  164. package/sidecar/dist/agent/read-access.d.ts +2 -0
  165. package/sidecar/dist/agent/read-access.js +33 -0
  166. package/sidecar/dist/agent/read-access.js.map +1 -0
  167. package/sidecar/dist/agent/resolve-claude-binary.d.ts +1 -0
  168. package/sidecar/dist/agent/resolve-claude-binary.js +43 -0
  169. package/sidecar/dist/agent/resolve-claude-binary.js.map +1 -0
  170. package/sidecar/dist/agent/runner-events.d.ts +28 -0
  171. package/sidecar/dist/agent/runner-events.js +2 -0
  172. package/sidecar/dist/agent/runner-events.js.map +1 -0
  173. package/sidecar/dist/agent/sdk-adapter.d.ts +3 -0
  174. package/sidecar/dist/agent/sdk-adapter.js +106 -0
  175. package/sidecar/dist/agent/sdk-adapter.js.map +1 -0
  176. package/sidecar/dist/agent/sdk-loader.d.ts +5 -0
  177. package/sidecar/dist/agent/sdk-loader.js +14 -0
  178. package/sidecar/dist/agent/sdk-loader.js.map +1 -0
  179. package/sidecar/dist/agent/system-prompt.d.ts +6 -0
  180. package/sidecar/dist/agent/system-prompt.js +29 -0
  181. package/sidecar/dist/agent/system-prompt.js.map +1 -0
  182. package/sidecar/dist/agent/tool-summary.d.ts +1 -0
  183. package/sidecar/dist/agent/tool-summary.js +46 -0
  184. package/sidecar/dist/agent/tool-summary.js.map +1 -0
  185. package/sidecar/dist/agent/typecheck.d.ts +36 -0
  186. package/sidecar/dist/agent/typecheck.js +104 -0
  187. package/sidecar/dist/agent/typecheck.js.map +1 -0
  188. package/sidecar/dist/builder/builder-client.d.ts +10 -0
  189. package/sidecar/dist/builder/builder-client.js +52 -0
  190. package/sidecar/dist/builder/builder-client.js.map +1 -0
  191. package/sidecar/dist/builder/capability.d.ts +4 -0
  192. package/sidecar/dist/builder/capability.js +11 -0
  193. package/sidecar/dist/builder/capability.js.map +1 -0
  194. package/sidecar/dist/constants/agent.d.ts +25 -0
  195. package/sidecar/dist/constants/agent.js +25 -0
  196. package/sidecar/dist/constants/agent.js.map +1 -0
  197. package/sidecar/dist/constants/attachments.d.ts +7 -0
  198. package/sidecar/dist/constants/attachments.js +12 -0
  199. package/sidecar/dist/constants/attachments.js.map +1 -0
  200. package/sidecar/dist/constants/builder.d.ts +5 -0
  201. package/sidecar/dist/constants/builder.js +32 -0
  202. package/sidecar/dist/constants/builder.js.map +1 -0
  203. package/sidecar/dist/constants/daemon.d.ts +7 -0
  204. package/sidecar/dist/constants/daemon.js +8 -0
  205. package/sidecar/dist/constants/daemon.js.map +1 -0
  206. package/sidecar/dist/constants/env.d.ts +3 -0
  207. package/sidecar/dist/constants/env.js +4 -0
  208. package/sidecar/dist/constants/env.js.map +1 -0
  209. package/sidecar/dist/constants/host-state.d.ts +1 -0
  210. package/sidecar/dist/constants/host-state.js +2 -0
  211. package/sidecar/dist/constants/host-state.js.map +1 -0
  212. package/sidecar/dist/constants/http.d.ts +20 -0
  213. package/sidecar/dist/constants/http.js +31 -0
  214. package/sidecar/dist/constants/http.js.map +1 -0
  215. package/sidecar/dist/constants/logs.d.ts +11 -0
  216. package/sidecar/dist/constants/logs.js +16 -0
  217. package/sidecar/dist/constants/logs.js.map +1 -0
  218. package/sidecar/dist/constants/mcp.d.ts +24 -0
  219. package/sidecar/dist/constants/mcp.js +38 -0
  220. package/sidecar/dist/constants/mcp.js.map +1 -0
  221. package/sidecar/dist/constants/native-binary.d.ts +4 -0
  222. package/sidecar/dist/constants/native-binary.js +5 -0
  223. package/sidecar/dist/constants/native-binary.js.map +1 -0
  224. package/sidecar/dist/constants/pages.d.ts +16 -0
  225. package/sidecar/dist/constants/pages.js +24 -0
  226. package/sidecar/dist/constants/pages.js.map +1 -0
  227. package/sidecar/dist/constants/paths.d.ts +3 -0
  228. package/sidecar/dist/constants/paths.js +7 -0
  229. package/sidecar/dist/constants/paths.js.map +1 -0
  230. package/sidecar/dist/constants/permissions.d.ts +15 -0
  231. package/sidecar/dist/constants/permissions.js +15 -0
  232. package/sidecar/dist/constants/permissions.js.map +1 -0
  233. package/sidecar/dist/constants/ports.d.ts +3 -0
  234. package/sidecar/dist/constants/ports.js +4 -0
  235. package/sidecar/dist/constants/ports.js.map +1 -0
  236. package/sidecar/dist/constants/project.d.ts +8 -0
  237. package/sidecar/dist/constants/project.js +12 -0
  238. package/sidecar/dist/constants/project.js.map +1 -0
  239. package/sidecar/dist/constants/questions.d.ts +4 -0
  240. package/sidecar/dist/constants/questions.js +5 -0
  241. package/sidecar/dist/constants/questions.js.map +1 -0
  242. package/sidecar/dist/constants/read-access.d.ts +1 -0
  243. package/sidecar/dist/constants/read-access.js +8 -0
  244. package/sidecar/dist/constants/read-access.js.map +1 -0
  245. package/sidecar/dist/constants/safety-net.d.ts +5 -0
  246. package/sidecar/dist/constants/safety-net.js +6 -0
  247. package/sidecar/dist/constants/safety-net.js.map +1 -0
  248. package/sidecar/dist/constants/settings.d.ts +9 -0
  249. package/sidecar/dist/constants/settings.js +29 -0
  250. package/sidecar/dist/constants/settings.js.map +1 -0
  251. package/sidecar/dist/constants/state.d.ts +7 -0
  252. package/sidecar/dist/constants/state.js +7 -0
  253. package/sidecar/dist/constants/state.js.map +1 -0
  254. package/sidecar/dist/constants/timing.d.ts +1 -0
  255. package/sidecar/dist/constants/timing.js +2 -0
  256. package/sidecar/dist/constants/timing.js.map +1 -0
  257. package/sidecar/dist/constants/tool-summary.d.ts +20 -0
  258. package/sidecar/dist/constants/tool-summary.js +21 -0
  259. package/sidecar/dist/constants/tool-summary.js.map +1 -0
  260. package/sidecar/dist/constants/typecheck.d.ts +16 -0
  261. package/sidecar/dist/constants/typecheck.js +23 -0
  262. package/sidecar/dist/constants/typecheck.js.map +1 -0
  263. package/sidecar/dist/constants/ws.d.ts +5 -0
  264. package/sidecar/dist/constants/ws.js +6 -0
  265. package/sidecar/dist/constants/ws.js.map +1 -0
  266. package/sidecar/dist/host/project-info.d.ts +6 -0
  267. package/sidecar/dist/host/project-info.js +51 -0
  268. package/sidecar/dist/host/project-info.js.map +1 -0
  269. package/sidecar/dist/index.d.ts +3 -0
  270. package/sidecar/dist/index.js +280 -0
  271. package/sidecar/dist/index.js.map +1 -0
  272. package/sidecar/dist/logs/logs-client.d.ts +11 -0
  273. package/sidecar/dist/logs/logs-client.js +52 -0
  274. package/sidecar/dist/logs/logs-client.js.map +1 -0
  275. package/sidecar/dist/logs/types.d.ts +12 -0
  276. package/sidecar/dist/logs/types.js +2 -0
  277. package/sidecar/dist/logs/types.js.map +1 -0
  278. package/sidecar/dist/mcp/server.d.ts +2 -0
  279. package/sidecar/dist/mcp/server.js +50 -0
  280. package/sidecar/dist/mcp/server.js.map +1 -0
  281. package/sidecar/dist/mcp/tools/ask-user.d.ts +41 -0
  282. package/sidecar/dist/mcp/tools/ask-user.js +29 -0
  283. package/sidecar/dist/mcp/tools/ask-user.js.map +1 -0
  284. package/sidecar/dist/mcp/tools/builder.d.ts +259 -0
  285. package/sidecar/dist/mcp/tools/builder.js +216 -0
  286. package/sidecar/dist/mcp/tools/builder.js.map +1 -0
  287. package/sidecar/dist/mcp/tools/find-pages-using.d.ts +15 -0
  288. package/sidecar/dist/mcp/tools/find-pages-using.js +108 -0
  289. package/sidecar/dist/mcp/tools/find-pages-using.js.map +1 -0
  290. package/sidecar/dist/mcp/tools/get-current-page.d.ts +4 -0
  291. package/sidecar/dist/mcp/tools/get-current-page.js +12 -0
  292. package/sidecar/dist/mcp/tools/get-current-page.js.map +1 -0
  293. package/sidecar/dist/mcp/tools/list-pages.d.ts +8 -0
  294. package/sidecar/dist/mcp/tools/list-pages.js +29 -0
  295. package/sidecar/dist/mcp/tools/list-pages.js.map +1 -0
  296. package/sidecar/dist/mcp/tools/navigate-to-page.d.ts +14 -0
  297. package/sidecar/dist/mcp/tools/navigate-to-page.js +66 -0
  298. package/sidecar/dist/mcp/tools/navigate-to-page.js.map +1 -0
  299. package/sidecar/dist/mcp/tools/query-logs.d.ts +11 -0
  300. package/sidecar/dist/mcp/tools/query-logs.js +32 -0
  301. package/sidecar/dist/mcp/tools/query-logs.js.map +1 -0
  302. package/sidecar/dist/mcp/tools/typecheck.d.ts +9 -0
  303. package/sidecar/dist/mcp/tools/typecheck.js +20 -0
  304. package/sidecar/dist/mcp/tools/typecheck.js.map +1 -0
  305. package/sidecar/dist/mcp/types.d.ts +27 -0
  306. package/sidecar/dist/mcp/types.js +2 -0
  307. package/sidecar/dist/mcp/types.js.map +1 -0
  308. package/sidecar/dist/metrics/aggregate.d.ts +11 -0
  309. package/sidecar/dist/metrics/aggregate.js +189 -0
  310. package/sidecar/dist/metrics/aggregate.js.map +1 -0
  311. package/sidecar/dist/metrics/types.d.ts +53 -0
  312. package/sidecar/dist/metrics/types.js +8 -0
  313. package/sidecar/dist/metrics/types.js.map +1 -0
  314. package/sidecar/dist/pages/imports-scanner.d.ts +9 -0
  315. package/sidecar/dist/pages/imports-scanner.js +143 -0
  316. package/sidecar/dist/pages/imports-scanner.js.map +1 -0
  317. package/sidecar/dist/pages/registry-client.d.ts +15 -0
  318. package/sidecar/dist/pages/registry-client.js +83 -0
  319. package/sidecar/dist/pages/registry-client.js.map +1 -0
  320. package/sidecar/dist/pages/route-match.d.ts +2 -0
  321. package/sidecar/dist/pages/route-match.js +10 -0
  322. package/sidecar/dist/pages/route-match.js.map +1 -0
  323. package/sidecar/dist/pages/types.d.ts +11 -0
  324. package/sidecar/dist/pages/types.js +2 -0
  325. package/sidecar/dist/pages/types.js.map +1 -0
  326. package/sidecar/dist/prompts/agent.d.ts +3 -0
  327. package/sidecar/dist/prompts/agent.js +40 -0
  328. package/sidecar/dist/prompts/agent.js.map +1 -0
  329. package/sidecar/dist/prompts/builder.d.ts +3 -0
  330. package/sidecar/dist/prompts/builder.js +4 -0
  331. package/sidecar/dist/prompts/builder.js.map +1 -0
  332. package/sidecar/dist/protocol/events.d.ts +1050 -0
  333. package/sidecar/dist/protocol/events.js +154 -0
  334. package/sidecar/dist/protocol/events.js.map +1 -0
  335. package/sidecar/dist/protocol/messages.d.ts +644 -0
  336. package/sidecar/dist/protocol/messages.js +139 -0
  337. package/sidecar/dist/protocol/messages.js.map +1 -0
  338. package/sidecar/dist/server/client-auth.d.ts +2 -0
  339. package/sidecar/dist/server/client-auth.js +25 -0
  340. package/sidecar/dist/server/client-auth.js.map +1 -0
  341. package/sidecar/dist/server/host-socket-registry.d.ts +9 -0
  342. package/sidecar/dist/server/host-socket-registry.js +42 -0
  343. package/sidecar/dist/server/host-socket-registry.js.map +1 -0
  344. package/sidecar/dist/server/http.d.ts +25 -0
  345. package/sidecar/dist/server/http.js +263 -0
  346. package/sidecar/dist/server/http.js.map +1 -0
  347. package/sidecar/dist/server/idle-shutdown.d.ts +10 -0
  348. package/sidecar/dist/server/idle-shutdown.js +35 -0
  349. package/sidecar/dist/server/idle-shutdown.js.map +1 -0
  350. package/sidecar/dist/server/iframe-socket-registry.d.ts +10 -0
  351. package/sidecar/dist/server/iframe-socket-registry.js +57 -0
  352. package/sidecar/dist/server/iframe-socket-registry.js.map +1 -0
  353. package/sidecar/dist/server/live-turns.d.ts +8 -0
  354. package/sidecar/dist/server/live-turns.js +16 -0
  355. package/sidecar/dist/server/live-turns.js.map +1 -0
  356. package/sidecar/dist/server/navigation-completer.d.ts +5 -0
  357. package/sidecar/dist/server/navigation-completer.js +49 -0
  358. package/sidecar/dist/server/navigation-completer.js.map +1 -0
  359. package/sidecar/dist/server/pending-queue.d.ts +11 -0
  360. package/sidecar/dist/server/pending-queue.js +54 -0
  361. package/sidecar/dist/server/pending-queue.js.map +1 -0
  362. package/sidecar/dist/server/raw-data.d.ts +2 -0
  363. package/sidecar/dist/server/raw-data.js +13 -0
  364. package/sidecar/dist/server/raw-data.js.map +1 -0
  365. package/sidecar/dist/server/routing.d.ts +64 -0
  366. package/sidecar/dist/server/routing.js +571 -0
  367. package/sidecar/dist/server/routing.js.map +1 -0
  368. package/sidecar/dist/server/safety-net.d.ts +16 -0
  369. package/sidecar/dist/server/safety-net.js +76 -0
  370. package/sidecar/dist/server/safety-net.js.map +1 -0
  371. package/sidecar/dist/server/ws.d.ts +33 -0
  372. package/sidecar/dist/server/ws.js +182 -0
  373. package/sidecar/dist/server/ws.js.map +1 -0
  374. package/sidecar/dist/skills/build-catalog.d.ts +15 -0
  375. package/sidecar/dist/skills/build-catalog.js +39 -0
  376. package/sidecar/dist/skills/build-catalog.js.map +1 -0
  377. package/sidecar/dist/skills/frontmatter.d.ts +9 -0
  378. package/sidecar/dist/skills/frontmatter.js +50 -0
  379. package/sidecar/dist/skills/frontmatter.js.map +1 -0
  380. package/sidecar/dist/skills/plugin-wrapper.d.ts +6 -0
  381. package/sidecar/dist/skills/plugin-wrapper.js +37 -0
  382. package/sidecar/dist/skills/plugin-wrapper.js.map +1 -0
  383. package/sidecar/dist/skills/resolve-sources.d.ts +3 -0
  384. package/sidecar/dist/skills/resolve-sources.js +14 -0
  385. package/sidecar/dist/skills/resolve-sources.js.map +1 -0
  386. package/sidecar/dist/skills/types.d.ts +4 -0
  387. package/sidecar/dist/skills/types.js +2 -0
  388. package/sidecar/dist/skills/types.js.map +1 -0
  389. package/sidecar/dist/state/conversations.d.ts +20 -0
  390. package/sidecar/dist/state/conversations.js +93 -0
  391. package/sidecar/dist/state/conversations.js.map +1 -0
  392. package/sidecar/dist/state/host-state.d.ts +10 -0
  393. package/sidecar/dist/state/host-state.js +14 -0
  394. package/sidecar/dist/state/host-state.js.map +1 -0
  395. package/sidecar/dist/state/lock.d.ts +12 -0
  396. package/sidecar/dist/state/lock.js +43 -0
  397. package/sidecar/dist/state/lock.js.map +1 -0
  398. package/sidecar/dist/state/settings-store.d.ts +12 -0
  399. package/sidecar/dist/state/settings-store.js +82 -0
  400. package/sidecar/dist/state/settings-store.js.map +1 -0
  401. package/sidecar/dist/state/settings-types.d.ts +12 -0
  402. package/sidecar/dist/state/settings-types.js +4 -0
  403. package/sidecar/dist/state/settings-types.js.map +1 -0
  404. package/sidecar/dist/state/sidecar-version.d.ts +1 -0
  405. package/sidecar/dist/state/sidecar-version.js +14 -0
  406. package/sidecar/dist/state/sidecar-version.js.map +1 -0
  407. package/sidecar/dist/state/store.d.ts +11 -0
  408. package/sidecar/dist/state/store.js +89 -0
  409. package/sidecar/dist/state/store.js.map +1 -0
  410. package/sidecar/dist/state/types.d.ts +36 -0
  411. package/sidecar/dist/state/types.js +10 -0
  412. package/sidecar/dist/state/types.js.map +1 -0
  413. package/sidecar/package.json +42 -0
  414. package/skills/dms-builder-page/SKILL.md +80 -0
  415. package/skills/dms-builder-safe/REFERENCE.md +111 -0
  416. package/skills/dms-builder-safe/SKILL.md +118 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"conversations.js","sourceRoot":"","sources":["../../src/state/conversations.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ export interface CurrentPage {
2
+ path: string;
3
+ filepath?: string;
4
+ title?: string;
5
+ }
6
+ export interface HostState {
7
+ getCurrentPage(): CurrentPage;
8
+ setCurrentPage(page: CurrentPage): void;
9
+ }
10
+ export declare function createHostState(): HostState;
@@ -0,0 +1,14 @@
1
+ import { UNKNOWN_PAGE_PATH } from "../constants/host-state.js";
2
+ function buildUnknownPage() {
3
+ return { path: UNKNOWN_PAGE_PATH };
4
+ }
5
+ export function createHostState() {
6
+ let currentPage = buildUnknownPage();
7
+ return {
8
+ getCurrentPage: () => currentPage,
9
+ setCurrentPage: (page) => {
10
+ currentPage = page;
11
+ },
12
+ };
13
+ }
14
+ //# sourceMappingURL=host-state.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"host-state.js","sourceRoot":"","sources":["../../src/state/host-state.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAa/D,SAAS,gBAAgB;IACvB,OAAO,EAAE,IAAI,EAAE,iBAAiB,EAAE,CAAC;AACrC,CAAC;AAED,MAAM,UAAU,eAAe;IAC7B,IAAI,WAAW,GAAgB,gBAAgB,EAAE,CAAC;IAClD,OAAO;QACL,cAAc,EAAE,GAAG,EAAE,CAAC,WAAW;QACjC,cAAc,EAAE,CAAC,IAAI,EAAE,EAAE;YACvB,WAAW,GAAG,IAAI,CAAC;QACrB,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,12 @@
1
+ export interface SidecarLock {
2
+ port: number;
3
+ pid: number;
4
+ version: string;
5
+ buildId: string;
6
+ startedAt: number;
7
+ token: string;
8
+ clientToken: string;
9
+ }
10
+ export declare function buildLockPath(root: string): string;
11
+ export declare function writeLock(root: string, lock: SidecarLock): Promise<void>;
12
+ export declare function removeLock(root: string, ownerPid?: number): Promise<void>;
@@ -0,0 +1,43 @@
1
+ import { mkdir, open, readFile, rename, rm } from "node:fs/promises";
2
+ import { dirname, join } from "node:path";
3
+ import { SIDECAR_LOCK_FILE_NAME, SIDECAR_LOCK_TEMP_SUFFIX, } from "../constants/daemon.js";
4
+ import { STATE_DIR_SEGMENTS } from "../constants/paths.js";
5
+ const PRIVATE_DIRECTORY_MODE = 0o700;
6
+ const PRIVATE_FILE_MODE = 0o600;
7
+ export function buildLockPath(root) {
8
+ return join(root, ...STATE_DIR_SEGMENTS, SIDECAR_LOCK_FILE_NAME);
9
+ }
10
+ export async function writeLock(root, lock) {
11
+ const lockPath = buildLockPath(root);
12
+ await mkdir(dirname(lockPath), {
13
+ recursive: true,
14
+ mode: PRIVATE_DIRECTORY_MODE,
15
+ });
16
+ const tempPath = `${lockPath}${SIDECAR_LOCK_TEMP_SUFFIX}`;
17
+ const file = await open(tempPath, "w", PRIVATE_FILE_MODE);
18
+ try {
19
+ await file.chmod(PRIVATE_FILE_MODE);
20
+ await file.writeFile(JSON.stringify(lock), "utf8");
21
+ }
22
+ finally {
23
+ await file.close();
24
+ }
25
+ await rename(tempPath, lockPath);
26
+ }
27
+ async function readLockPid(lockPath) {
28
+ try {
29
+ const parsed = JSON.parse(await readFile(lockPath, "utf8"));
30
+ return typeof parsed.pid === "number" ? parsed.pid : null;
31
+ }
32
+ catch {
33
+ return null;
34
+ }
35
+ }
36
+ export async function removeLock(root, ownerPid = process.pid) {
37
+ const lockPath = buildLockPath(root);
38
+ const pid = await readLockPid(lockPath);
39
+ if (pid !== null && pid !== ownerPid)
40
+ return;
41
+ await rm(lockPath).catch(() => undefined);
42
+ }
43
+ //# sourceMappingURL=lock.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lock.js","sourceRoot":"","sources":["../../src/state/lock.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,kBAAkB,CAAC;AACrE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EACL,sBAAsB,EACtB,wBAAwB,GACzB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAY3D,MAAM,sBAAsB,GAAG,KAAK,CAAC;AACrC,MAAM,iBAAiB,GAAG,KAAK,CAAC;AAEhC,MAAM,UAAU,aAAa,CAAC,IAAY;IACxC,OAAO,IAAI,CAAC,IAAI,EAAE,GAAG,kBAAkB,EAAE,sBAAsB,CAAC,CAAC;AACnE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,SAAS,CAC7B,IAAY,EACZ,IAAiB;IAEjB,MAAM,QAAQ,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;IACrC,MAAM,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;QAC7B,SAAS,EAAE,IAAI;QACf,IAAI,EAAE,sBAAsB;KAC7B,CAAC,CAAC;IACH,MAAM,QAAQ,GAAG,GAAG,QAAQ,GAAG,wBAAwB,EAAE,CAAC;IAC1D,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,QAAQ,EAAE,GAAG,EAAE,iBAAiB,CAAC,CAAC;IAC1D,IAAI,CAAC;QACH,MAAM,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;QACpC,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,CAAC;IACrD,CAAC;YAAS,CAAC;QACT,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;IACrB,CAAC;IACD,MAAM,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;AACnC,CAAC;AAED,KAAK,UAAU,WAAW,CAAC,QAAgB;IACzC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,CAEzD,CAAC;QACF,OAAO,OAAO,MAAM,CAAC,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;IAC5D,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAID,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,IAAY,EACZ,WAAmB,OAAO,CAAC,GAAG;IAE9B,MAAM,QAAQ,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;IACrC,MAAM,GAAG,GAAG,MAAM,WAAW,CAAC,QAAQ,CAAC,CAAC;IACxC,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,QAAQ;QAAE,OAAO;IAC7C,MAAM,EAAE,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;AAC5C,CAAC"}
@@ -0,0 +1,12 @@
1
+ import { type AppSettings } from "./settings-types.js";
2
+ export interface CreateSettingsStoreOptions {
3
+ filePath: string;
4
+ }
5
+ export interface SettingsStore {
6
+ get(): AppSettings;
7
+ set(next: AppSettings): void;
8
+ load(): Promise<void>;
9
+ flush(): Promise<void>;
10
+ }
11
+ export declare function parseSettings(raw: string): AppSettings;
12
+ export declare function createSettingsStore(options: CreateSettingsStoreOptions): SettingsStore;
@@ -0,0 +1,82 @@
1
+ import { mkdir, readFile, writeFile } from "node:fs/promises";
2
+ import { dirname } from "node:path";
3
+ import { DEFAULT_SETTINGS, SETTINGS_LOG_PREFIX, } from "../constants/settings.js";
4
+ import { STATE_FILE_ENCODING, STATE_JSON_INDENT } from "../constants/state.js";
5
+ import { CHATBOX_MODES, GENERATION_MODES, THINKING_LEVELS, } from "./settings-types.js";
6
+ function isMode(value) {
7
+ return CHATBOX_MODES.includes(value);
8
+ }
9
+ function isThinking(value) {
10
+ return THINKING_LEVELS.includes(value);
11
+ }
12
+ function isGenerationMode(value) {
13
+ return GENERATION_MODES.includes(value);
14
+ }
15
+ export function parseSettings(raw) {
16
+ try {
17
+ const parsed = JSON.parse(raw);
18
+ if (parsed === null || typeof parsed !== "object")
19
+ return DEFAULT_SETTINGS;
20
+ const candidate = parsed;
21
+ return {
22
+ mode: isMode(candidate.mode) ? candidate.mode : DEFAULT_SETTINGS.mode,
23
+ thinking: isThinking(candidate.thinking)
24
+ ? candidate.thinking
25
+ : DEFAULT_SETTINGS.thinking,
26
+ generationMode: isGenerationMode(candidate.generationMode)
27
+ ? candidate.generationMode
28
+ : DEFAULT_SETTINGS.generationMode,
29
+ allowLocalSkills: typeof candidate.allowLocalSkills === "boolean"
30
+ ? candidate.allowLocalSkills
31
+ : DEFAULT_SETTINGS.allowLocalSkills,
32
+ };
33
+ }
34
+ catch {
35
+ return DEFAULT_SETTINGS;
36
+ }
37
+ }
38
+ async function readSettings(filePath) {
39
+ try {
40
+ const raw = await readFile(filePath, STATE_FILE_ENCODING);
41
+ return parseSettings(raw);
42
+ }
43
+ catch (err) {
44
+ const isMissing = err instanceof Error && err.code === "ENOENT";
45
+ if (isMissing)
46
+ return DEFAULT_SETTINGS;
47
+ console.warn(`${SETTINGS_LOG_PREFIX} read failed: ${String(err)}`);
48
+ return DEFAULT_SETTINGS;
49
+ }
50
+ }
51
+ async function persistSettings(filePath, settings) {
52
+ await mkdir(dirname(filePath), { recursive: true });
53
+ const json = JSON.stringify(settings, null, STATE_JSON_INDENT);
54
+ await writeFile(filePath, json, STATE_FILE_ENCODING);
55
+ }
56
+ function writeSettings(state) {
57
+ state.inflight = persistSettings(state.filePath, state.current).catch((err) => {
58
+ console.warn(`${SETTINGS_LOG_PREFIX} write failed: ${String(err)}`);
59
+ });
60
+ }
61
+ export function createSettingsStore(options) {
62
+ const state = {
63
+ filePath: options.filePath,
64
+ current: DEFAULT_SETTINGS,
65
+ inflight: null,
66
+ };
67
+ return {
68
+ get: () => state.current,
69
+ set: (next) => {
70
+ state.current = next;
71
+ writeSettings(state);
72
+ },
73
+ load: async () => {
74
+ state.current = await readSettings(state.filePath);
75
+ },
76
+ flush: async () => {
77
+ if (state.inflight !== null)
78
+ await state.inflight;
79
+ },
80
+ };
81
+ }
82
+ //# sourceMappingURL=settings-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"settings-store.js","sourceRoot":"","sources":["../../src/state/settings-store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ export declare const CHATBOX_MODES: readonly ["normal", "acceptEdits", "plan", "auto"];
2
+ export type ChatboxMode = (typeof CHATBOX_MODES)[number];
3
+ export declare const THINKING_LEVELS: readonly ["off", "low", "medium", "high"];
4
+ export type ThinkingLevel = (typeof THINKING_LEVELS)[number];
5
+ export declare const GENERATION_MODES: readonly ["safe", "vibe"];
6
+ export type GenerationMode = (typeof GENERATION_MODES)[number];
7
+ export interface AppSettings {
8
+ mode: ChatboxMode;
9
+ thinking: ThinkingLevel;
10
+ generationMode: GenerationMode;
11
+ allowLocalSkills: boolean;
12
+ }
@@ -0,0 +1,4 @@
1
+ export const CHATBOX_MODES = ["normal", "acceptEdits", "plan", "auto"];
2
+ export const THINKING_LEVELS = ["off", "low", "medium", "high"];
3
+ export const GENERATION_MODES = ["safe", "vibe"];
4
+ //# sourceMappingURL=settings-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"settings-types.js","sourceRoot":"","sources":["../../src/state/settings-types.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,QAAQ,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,CAAU,CAAC;AAGhF,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,CAAU,CAAC;AAMzE,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,MAAM,EAAE,MAAM,CAAU,CAAC"}
@@ -0,0 +1 @@
1
+ export declare function readSidecarVersion(): Promise<string>;
@@ -0,0 +1,14 @@
1
+ import { readFile } from "node:fs/promises";
2
+ import { SIDECAR_PACKAGE_JSON } from "../constants/paths.js";
3
+ const FALLBACK_VERSION = "0.0.0";
4
+ export async function readSidecarVersion() {
5
+ try {
6
+ const raw = await readFile(SIDECAR_PACKAGE_JSON, "utf8");
7
+ const parsed = JSON.parse(raw);
8
+ return parsed.version ?? FALLBACK_VERSION;
9
+ }
10
+ catch {
11
+ return FALLBACK_VERSION;
12
+ }
13
+ }
14
+ //# sourceMappingURL=sidecar-version.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sidecar-version.js","sourceRoot":"","sources":["../../src/state/sidecar-version.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAE7D,MAAM,gBAAgB,GAAG,OAAO,CAAC;AAEjC,MAAM,CAAC,KAAK,UAAU,kBAAkB;IACtC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,oBAAoB,EAAE,MAAM,CAAC,CAAC;QACzD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAyB,CAAC;QACvD,OAAO,MAAM,CAAC,OAAO,IAAI,gBAAgB,CAAC;IAC5C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,gBAAgB,CAAC;IAC1B,CAAC;AACH,CAAC"}
@@ -0,0 +1,11 @@
1
+ import type { StoredState } from "./types.js";
2
+ export interface CreateStoreOptions {
3
+ filePath: string;
4
+ debounceMs?: number;
5
+ }
6
+ export interface Store {
7
+ read(): Promise<StoredState>;
8
+ write(state: StoredState): void;
9
+ flush(): Promise<void>;
10
+ }
11
+ export declare function createStore(options: CreateStoreOptions): Store;
@@ -0,0 +1,89 @@
1
+ import { mkdir, readFile, writeFile } from "node:fs/promises";
2
+ import { dirname } from "node:path";
3
+ import { STATE_DEBOUNCE_MS, STATE_FILE_ENCODING, STATE_INITIAL, STATE_JSON_INDENT, STATE_LOG_PREFIX, } from "../constants/state.js";
4
+ function parseStateContents(raw) {
5
+ try {
6
+ const parsed = JSON.parse(raw);
7
+ if (parsed === null || typeof parsed !== "object")
8
+ return STATE_INITIAL;
9
+ const candidate = parsed;
10
+ if (candidate.conversations === undefined ||
11
+ typeof candidate.conversations !== "object") {
12
+ return STATE_INITIAL;
13
+ }
14
+ return { conversations: candidate.conversations };
15
+ }
16
+ catch {
17
+ return STATE_INITIAL;
18
+ }
19
+ }
20
+ async function readState(filePath) {
21
+ try {
22
+ const raw = await readFile(filePath, STATE_FILE_ENCODING);
23
+ return parseStateContents(raw);
24
+ }
25
+ catch (err) {
26
+ const isMissing = err instanceof Error && err.code === "ENOENT";
27
+ if (isMissing)
28
+ return STATE_INITIAL;
29
+ console.warn(`${STATE_LOG_PREFIX} read failed: ${String(err)}`);
30
+ return STATE_INITIAL;
31
+ }
32
+ }
33
+ async function persistState(filePath, state) {
34
+ await mkdir(dirname(filePath), { recursive: true });
35
+ const json = JSON.stringify(state, null, STATE_JSON_INDENT);
36
+ await writeFile(filePath, json, STATE_FILE_ENCODING);
37
+ }
38
+ function clearTimer(state) {
39
+ if (state.timer === null)
40
+ return;
41
+ clearTimeout(state.timer);
42
+ state.timer = null;
43
+ }
44
+ async function drainPending(state) {
45
+ const next = state.pending;
46
+ if (next === null)
47
+ return;
48
+ state.pending = null;
49
+ try {
50
+ await persistState(state.filePath, next);
51
+ }
52
+ catch (err) {
53
+ console.warn(`${STATE_LOG_PREFIX} write failed: ${String(err)}`);
54
+ }
55
+ }
56
+ function scheduleWrite(state) {
57
+ clearTimer(state);
58
+ state.timer = setTimeout(() => {
59
+ state.timer = null;
60
+ state.inflight = drainPending(state);
61
+ }, state.debounceMs);
62
+ }
63
+ function enqueueWrite(state, next) {
64
+ state.pending = next;
65
+ scheduleWrite(state);
66
+ }
67
+ async function flushStore(state) {
68
+ clearTimer(state);
69
+ if (state.inflight !== null)
70
+ await state.inflight;
71
+ state.inflight = drainPending(state);
72
+ await state.inflight;
73
+ state.inflight = null;
74
+ }
75
+ export function createStore(options) {
76
+ const state = {
77
+ filePath: options.filePath,
78
+ debounceMs: options.debounceMs ?? STATE_DEBOUNCE_MS,
79
+ pending: null,
80
+ timer: null,
81
+ inflight: null,
82
+ };
83
+ return {
84
+ read: () => readState(state.filePath),
85
+ write: (next) => enqueueWrite(state, next),
86
+ flush: () => flushStore(state),
87
+ };
88
+ }
89
+ //# sourceMappingURL=store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/state/store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ export declare const STORED_MESSAGE_ROLES: readonly ["user", "assistant", "tool_use", "tool_result", "permission"];
2
+ export type StoredMessageRole = (typeof STORED_MESSAGE_ROLES)[number];
3
+ export declare const STORED_MESSAGE_STATUSES: readonly ["success", "error"];
4
+ export type StoredMessageStatus = (typeof STORED_MESSAGE_STATUSES)[number];
5
+ export declare const STORED_PERMISSION_DECISIONS: readonly ["approved", "denied"];
6
+ export type StoredPermissionDecision = (typeof STORED_PERMISSION_DECISIONS)[number];
7
+ export interface StoredAttachmentMeta {
8
+ name: string;
9
+ mimeType: string;
10
+ size: number;
11
+ }
12
+ export interface StoredMessage {
13
+ role: StoredMessageRole;
14
+ content: string;
15
+ toolName?: string;
16
+ callId?: string;
17
+ status?: StoredMessageStatus;
18
+ decision?: StoredPermissionDecision;
19
+ attachments?: StoredAttachmentMeta[];
20
+ timestampMs: number;
21
+ }
22
+ export interface StoredConversation {
23
+ messages: StoredMessage[];
24
+ createdAtMs: number;
25
+ updatedAtMs: number;
26
+ }
27
+ export interface StoredState {
28
+ conversations: Record<string, StoredConversation>;
29
+ }
30
+ export interface ConversationSummary {
31
+ id: string;
32
+ title: string;
33
+ createdAtMs: number;
34
+ updatedAtMs: number;
35
+ messageCount: number;
36
+ }
@@ -0,0 +1,10 @@
1
+ export const STORED_MESSAGE_ROLES = [
2
+ "user",
3
+ "assistant",
4
+ "tool_use",
5
+ "tool_result",
6
+ "permission",
7
+ ];
8
+ export const STORED_MESSAGE_STATUSES = ["success", "error"];
9
+ export const STORED_PERMISSION_DECISIONS = ["approved", "denied"];
10
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/state/types.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,oBAAoB,GAAG;IAClC,MAAM;IACN,WAAW;IACX,UAAU;IACV,aAAa;IAIb,YAAY;CACJ,CAAC;AAIX,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,SAAS,EAAE,OAAO,CAAU,CAAC;AAMrE,MAAM,CAAC,MAAM,2BAA2B,GAAG,CAAC,UAAU,EAAE,QAAQ,CAAU,CAAC"}
@@ -0,0 +1,42 @@
1
+ {
2
+ "name": "@antelopejs/dms-ai-sidecar",
3
+ "version": "0.0.1",
4
+ "private": true,
5
+ "bin": {
6
+ "dms-ai-sidecar": "dist/index.js"
7
+ },
8
+ "type": "module",
9
+ "main": "dist/index.js",
10
+ "scripts": {
11
+ "build": "rimraf dist && tsc",
12
+ "build:chatbox": "cd chatbox && pnpm install && pnpm build",
13
+ "build:all": "pnpm build && pnpm build:chatbox",
14
+ "dev": "tsc -w",
15
+ "typecheck": "tsc --noEmit && tsc -p tsconfig.test.json && cd chatbox && pnpm typecheck",
16
+ "lint": "oxlint && oxfmt --check . && cd chatbox && pnpm lint",
17
+ "lint:fix": "oxlint --fix --max-warnings=1000000 && oxfmt . && cd chatbox && pnpm lint:fix",
18
+ "test": "vitest run --passWithNoTests",
19
+ "test:e2e": "echo 'no e2e yet' && exit 0",
20
+ "format": "oxfmt .",
21
+ "knip": "knip --dependencies",
22
+ "knip:all": "knip"
23
+ },
24
+ "dependencies": {
25
+ "@anthropic-ai/claude-agent-sdk": "^0.2.131",
26
+ "@anthropic-ai/claude-code": "^2.1.131",
27
+ "ws": "^8.18.0",
28
+ "zod": "^3.23.8"
29
+ },
30
+ "devDependencies": {
31
+ "@antelopejs/tooling-configs": "^0.0.4",
32
+ "@types/node": "^22.19.15",
33
+ "@types/ws": "^8.5.12",
34
+ "knip": "^6.34.0",
35
+ "oxfmt": "^0.66.0",
36
+ "oxlint": "1.81.0",
37
+ "oxlint-tsgolint": "^7.0.2001",
38
+ "rimraf": "^6.1.3",
39
+ "typescript": "^5.9.3",
40
+ "vitest": "^3.2.4"
41
+ }
42
+ }
@@ -0,0 +1,80 @@
1
+ ---
2
+ name: dms-builder-page
3
+ description: Builds or modifies an AntelopeJS DMS admin page (dashboard screen). Use when the user wants to add, edit, or compose an admin page, dashboard, table, form, or chart in a dms-* module.
4
+ icon: i-ph-layout
5
+ category: Builder
6
+ tags: [Pages, Dashboard, DMS]
7
+ ---
8
+
9
+ # Building an AntelopeJS DMS admin page
10
+
11
+ Use this when adding or reshaping an admin page (a dashboard screen) in a DMS
12
+ module. A page is a `@RegisterPage()` controller composed of DMS components bound
13
+ to backend routes.
14
+
15
+ ## Workflow
16
+
17
+ 1. **Locate the module.** Pages belong to a module registered with
18
+ `RegisterModule({ id, title, description, icon, landingPage })`. Find the existing
19
+ `pages/module.ts` and the `pages/all.ts` barrel — every page file must be
20
+ re-exported from `all.ts` or it will not load.
21
+
22
+ 2. **Declare the page.** Create `pages/<name>/page.ts`:
23
+ ```ts
24
+ @RegisterPage()
25
+ export class MyPage extends PageController(
26
+ "<slug>",
27
+ { displayName, description, icon, module: "<moduleId>", order: <n> },
28
+ DefaultLayout({ fullWidth: true }),
29
+ ) {
30
+ static content = /* components */;
31
+ }
32
+ ```
33
+ `order` controls sidebar position. Keep one page per file.
34
+
35
+ 3. **Compose with shared components, not raw HTML.** Build the screen from the
36
+ dms-base components (`KpiCard`, `ChartCard`, `TopListCard`, `TableView`,
37
+ `Form`, `PeriodSelector`, `Grid`/`GridRow`). Lay them out with
38
+ `Grid({ gap }).child(...)`.
39
+
40
+ 4. **Bind to data via `fetchUrl`.** Components fetch from backend routes
41
+ (e.g. `fetchUrl: "/<module>/metrics/kpi/actions"`). Each route is a
42
+ `Controller` method that returns the payload shape the component expects —
43
+ a `KpiCard` reads `{ value: number }`. Add the route alongside the existing
44
+ ones and register it in the routes barrel.
45
+ To make cards period-aware, declare one `PeriodSelector({ id })` and give each
46
+ card `periodScope: <that id>`; the components then append `from`/`to`/
47
+ `compareFrom`/`compareTo` query params to `fetchUrl`.
48
+
49
+ An aggregate route can live **on the page controller itself**, which is
50
+ simpler than a separate controller and inherits the page's auth gate for free:
51
+ a `@Get("/stats/…")` method taking `@Model(XModel)` and returning
52
+ `{ value: await model.someCount() }`. If the data comes from a builder-managed
53
+ resource, prefer generating it — `BuilderAddQuery` emits exactly that shape and
54
+ keeps the AQL chain typechecked. The Builder recognizes a query by its shape
55
+ alone (a scalar route over a resource model calling a `this.table…` chain), so
56
+ a hand-written route matching that grammar is picked up and editable just like
57
+ a generated one — there is no marker. To keep a hand-written aggregate off the
58
+ Builder's radar, write it **outside** the chain grammar (compute via an
59
+ intermediate variable or a helper), and it reads back as `opaque`.
60
+
61
+ 5. **Read before you write.** Model new components on the closest existing page
62
+ in the same module and copy its option shape exactly — the component option
63
+ contracts live in `node_modules/@antelopejs/interface-dms`.
64
+
65
+ 6. **Typecheck before declaring done.** Run the `Typecheck` tool on the module
66
+ after every source edit and fix every error — a non-compiling edit makes the
67
+ host reload fail and the page 404. Use `FindPagesUsing` to map each file you
68
+ edit to the pages that render it, and `QueryLogs` if the page still looks
69
+ wrong after the reload.
70
+
71
+ ## Guardrails
72
+
73
+ - Re-export every new page from `pages/all.ts`.
74
+ - A page's `module` must match an `id` passed to `RegisterModule`.
75
+ - Prefer adding fields to an existing route payload over inventing new routes.
76
+ - Before editing a page, make sure the host is displaying it (`NavigateToPage` —
77
+ look the route up via `ListPages`, never derive it from the filename) so the
78
+ live overlay hot-reloads onto your change while the user watches; for a
79
+ brand-new page, register the empty page and navigate to it before composing
80
+ content.