@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,259 @@
1
+ import { z } from "zod";
2
+ import type { BuilderClient } from "../../builder/builder-client.js";
3
+ export interface BuilderToolsDeps {
4
+ builderClient: BuilderClient;
5
+ }
6
+ export declare function buildBuilderTools(deps: BuilderToolsDeps): (import("@anthropic-ai/claude-agent-sdk").SdkMcpToolDefinition<{}> | import("@anthropic-ai/claude-agent-sdk").SdkMcpToolDefinition<{
7
+ pageRef: z.ZodString;
8
+ }> | import("@anthropic-ai/claude-agent-sdk").SdkMcpToolDefinition<{
9
+ name: z.ZodString;
10
+ displayName: z.ZodString;
11
+ category: z.ZodString;
12
+ icon: z.ZodOptional<z.ZodString>;
13
+ order: z.ZodOptional<z.ZodNumber>;
14
+ description: z.ZodOptional<z.ZodString>;
15
+ }> | import("@anthropic-ai/claude-agent-sdk").SdkMcpToolDefinition<{
16
+ pageRef: z.ZodString;
17
+ patch: z.ZodRecord<z.ZodString, z.ZodUnknown>;
18
+ }> | import("@anthropic-ai/claude-agent-sdk").SdkMcpToolDefinition<{
19
+ page: z.ZodString;
20
+ parent: z.ZodOptional<z.ZodString>;
21
+ slot: z.ZodOptional<z.ZodString>;
22
+ index: z.ZodOptional<z.ZodNumber>;
23
+ name: z.ZodString;
24
+ type: z.ZodString;
25
+ config: z.ZodRecord<z.ZodString, z.ZodUnknown>;
26
+ controller: z.ZodOptional<z.ZodString>;
27
+ }> | import("@anthropic-ai/claude-agent-sdk").SdkMcpToolDefinition<{
28
+ path: z.ZodString;
29
+ patch: z.ZodRecord<z.ZodString, z.ZodUnknown>;
30
+ replace: z.ZodOptional<z.ZodBoolean>;
31
+ }> | import("@anthropic-ai/claude-agent-sdk").SdkMcpToolDefinition<{
32
+ path: z.ZodString;
33
+ parent: z.ZodString;
34
+ slot: z.ZodOptional<z.ZodString>;
35
+ index: z.ZodNumber;
36
+ }> | import("@anthropic-ai/claude-agent-sdk").SdkMcpToolDefinition<{
37
+ path: z.ZodString;
38
+ }> | import("@anthropic-ai/claude-agent-sdk").SdkMcpToolDefinition<{
39
+ name: z.ZodString;
40
+ displayName: z.ZodString;
41
+ parent: z.ZodOptional<z.ZodString>;
42
+ icon: z.ZodOptional<z.ZodString>;
43
+ order: z.ZodOptional<z.ZodNumber>;
44
+ }> | import("@anthropic-ai/claude-agent-sdk").SdkMcpToolDefinition<{
45
+ ref: z.ZodString;
46
+ patch: z.ZodRecord<z.ZodString, z.ZodUnknown>;
47
+ }> | import("@anthropic-ai/claude-agent-sdk").SdkMcpToolDefinition<{
48
+ ref: z.ZodString;
49
+ }> | import("@anthropic-ai/claude-agent-sdk").SdkMcpToolDefinition<{
50
+ pageRef: z.ZodOptional<z.ZodString>;
51
+ }> | import("@anthropic-ai/claude-agent-sdk").SdkMcpToolDefinition<{
52
+ name: z.ZodString;
53
+ displayName: z.ZodOptional<z.ZodString>;
54
+ schema: z.ZodOptional<z.ZodString>;
55
+ fields: z.ZodArray<z.ZodObject<{
56
+ dataType: z.ZodObject<{
57
+ $dataType: z.ZodString;
58
+ config: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
59
+ }, "strip", z.ZodTypeAny, {
60
+ $dataType: string;
61
+ config?: Record<string, unknown> | undefined;
62
+ }, {
63
+ $dataType: string;
64
+ config?: Record<string, unknown> | undefined;
65
+ }>;
66
+ label: z.ZodOptional<z.ZodString>;
67
+ listable: z.ZodOptional<z.ZodBoolean>;
68
+ searchable: z.ZodOptional<z.ZodBoolean>;
69
+ sortable: z.ZodOptional<z.ZodBoolean>;
70
+ filterable: z.ZodOptional<z.ZodBoolean>;
71
+ access: z.ZodOptional<z.ZodEnum<["read", "readwrite"]>>;
72
+ required: z.ZodOptional<z.ZodBoolean>;
73
+ indexed: z.ZodOptional<z.ZodBoolean>;
74
+ order: z.ZodOptional<z.ZodNumber>;
75
+ name: z.ZodString;
76
+ }, "strip", z.ZodTypeAny, {
77
+ name: string;
78
+ dataType: {
79
+ $dataType: string;
80
+ config?: Record<string, unknown> | undefined;
81
+ };
82
+ label?: string | undefined;
83
+ listable?: boolean | undefined;
84
+ searchable?: boolean | undefined;
85
+ sortable?: boolean | undefined;
86
+ filterable?: boolean | undefined;
87
+ access?: "read" | "readwrite" | undefined;
88
+ required?: boolean | undefined;
89
+ indexed?: boolean | undefined;
90
+ order?: number | undefined;
91
+ }, {
92
+ name: string;
93
+ dataType: {
94
+ $dataType: string;
95
+ config?: Record<string, unknown> | undefined;
96
+ };
97
+ label?: string | undefined;
98
+ listable?: boolean | undefined;
99
+ searchable?: boolean | undefined;
100
+ sortable?: boolean | undefined;
101
+ filterable?: boolean | undefined;
102
+ access?: "read" | "readwrite" | undefined;
103
+ required?: boolean | undefined;
104
+ indexed?: boolean | undefined;
105
+ order?: number | undefined;
106
+ }>, "many">;
107
+ seeds: z.ZodOptional<z.ZodArray<z.ZodRecord<z.ZodString, z.ZodUnknown>, "many">>;
108
+ location: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodObject<{
109
+ category: z.ZodString;
110
+ }, "strip", z.ZodTypeAny, {
111
+ category: string;
112
+ }, {
113
+ category: string;
114
+ }>, z.ZodObject<{
115
+ page: z.ZodString;
116
+ }, "strip", z.ZodTypeAny, {
117
+ page: string;
118
+ }, {
119
+ page: string;
120
+ }>]>>;
121
+ routes: z.ZodOptional<z.ZodArray<z.ZodEnum<["list", "get", "create", "edit", "delete", "select", "archive", "export"]>, "many">>;
122
+ }> | import("@anthropic-ai/claude-agent-sdk").SdkMcpToolDefinition<{
123
+ ref: z.ZodString;
124
+ keepData: z.ZodOptional<z.ZodBoolean>;
125
+ }> | import("@anthropic-ai/claude-agent-sdk").SdkMcpToolDefinition<{
126
+ ref: z.ZodString;
127
+ field: z.ZodObject<{
128
+ dataType: z.ZodObject<{
129
+ $dataType: z.ZodString;
130
+ config: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
131
+ }, "strip", z.ZodTypeAny, {
132
+ $dataType: string;
133
+ config?: Record<string, unknown> | undefined;
134
+ }, {
135
+ $dataType: string;
136
+ config?: Record<string, unknown> | undefined;
137
+ }>;
138
+ label: z.ZodOptional<z.ZodString>;
139
+ listable: z.ZodOptional<z.ZodBoolean>;
140
+ searchable: z.ZodOptional<z.ZodBoolean>;
141
+ sortable: z.ZodOptional<z.ZodBoolean>;
142
+ filterable: z.ZodOptional<z.ZodBoolean>;
143
+ access: z.ZodOptional<z.ZodEnum<["read", "readwrite"]>>;
144
+ required: z.ZodOptional<z.ZodBoolean>;
145
+ indexed: z.ZodOptional<z.ZodBoolean>;
146
+ order: z.ZodOptional<z.ZodNumber>;
147
+ name: z.ZodString;
148
+ }, "strip", z.ZodTypeAny, {
149
+ name: string;
150
+ dataType: {
151
+ $dataType: string;
152
+ config?: Record<string, unknown> | undefined;
153
+ };
154
+ label?: string | undefined;
155
+ listable?: boolean | undefined;
156
+ searchable?: boolean | undefined;
157
+ sortable?: boolean | undefined;
158
+ filterable?: boolean | undefined;
159
+ access?: "read" | "readwrite" | undefined;
160
+ required?: boolean | undefined;
161
+ indexed?: boolean | undefined;
162
+ order?: number | undefined;
163
+ }, {
164
+ name: string;
165
+ dataType: {
166
+ $dataType: string;
167
+ config?: Record<string, unknown> | undefined;
168
+ };
169
+ label?: string | undefined;
170
+ listable?: boolean | undefined;
171
+ searchable?: boolean | undefined;
172
+ sortable?: boolean | undefined;
173
+ filterable?: boolean | undefined;
174
+ access?: "read" | "readwrite" | undefined;
175
+ required?: boolean | undefined;
176
+ indexed?: boolean | undefined;
177
+ order?: number | undefined;
178
+ }>;
179
+ }> | import("@anthropic-ai/claude-agent-sdk").SdkMcpToolDefinition<{
180
+ path: z.ZodString;
181
+ patch: z.ZodObject<{
182
+ dataType: z.ZodOptional<z.ZodObject<{
183
+ $dataType: z.ZodString;
184
+ config: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
185
+ }, "strip", z.ZodTypeAny, {
186
+ $dataType: string;
187
+ config?: Record<string, unknown> | undefined;
188
+ }, {
189
+ $dataType: string;
190
+ config?: Record<string, unknown> | undefined;
191
+ }>>;
192
+ label: z.ZodOptional<z.ZodString>;
193
+ listable: z.ZodOptional<z.ZodBoolean>;
194
+ searchable: z.ZodOptional<z.ZodBoolean>;
195
+ sortable: z.ZodOptional<z.ZodBoolean>;
196
+ filterable: z.ZodOptional<z.ZodBoolean>;
197
+ access: z.ZodOptional<z.ZodEnum<["read", "readwrite"]>>;
198
+ required: z.ZodOptional<z.ZodBoolean>;
199
+ indexed: z.ZodOptional<z.ZodBoolean>;
200
+ order: z.ZodOptional<z.ZodNumber>;
201
+ }, "strip", z.ZodTypeAny, {
202
+ label?: string | undefined;
203
+ dataType?: {
204
+ $dataType: string;
205
+ config?: Record<string, unknown> | undefined;
206
+ } | undefined;
207
+ listable?: boolean | undefined;
208
+ searchable?: boolean | undefined;
209
+ sortable?: boolean | undefined;
210
+ filterable?: boolean | undefined;
211
+ access?: "read" | "readwrite" | undefined;
212
+ required?: boolean | undefined;
213
+ indexed?: boolean | undefined;
214
+ order?: number | undefined;
215
+ }, {
216
+ label?: string | undefined;
217
+ dataType?: {
218
+ $dataType: string;
219
+ config?: Record<string, unknown> | undefined;
220
+ } | undefined;
221
+ listable?: boolean | undefined;
222
+ searchable?: boolean | undefined;
223
+ sortable?: boolean | undefined;
224
+ filterable?: boolean | undefined;
225
+ access?: "read" | "readwrite" | undefined;
226
+ required?: boolean | undefined;
227
+ indexed?: boolean | undefined;
228
+ order?: number | undefined;
229
+ }>;
230
+ }> | import("@anthropic-ai/claude-agent-sdk").SdkMcpToolDefinition<{
231
+ resourceType: z.ZodOptional<z.ZodString>;
232
+ }> | import("@anthropic-ai/claude-agent-sdk").SdkMcpToolDefinition<{
233
+ page: z.ZodString;
234
+ name: z.ZodString;
235
+ resource: z.ZodString;
236
+ template: z.ZodString;
237
+ params: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
238
+ endpoint: z.ZodOptional<z.ZodString>;
239
+ }> | import("@anthropic-ai/claude-agent-sdk").SdkMcpToolDefinition<{
240
+ query: z.ZodString;
241
+ patch: z.ZodObject<{
242
+ resource: z.ZodOptional<z.ZodString>;
243
+ template: z.ZodOptional<z.ZodString>;
244
+ params: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
245
+ endpoint: z.ZodOptional<z.ZodString>;
246
+ }, "strip", z.ZodTypeAny, {
247
+ params?: Record<string, unknown> | undefined;
248
+ resource?: string | undefined;
249
+ template?: string | undefined;
250
+ endpoint?: string | undefined;
251
+ }, {
252
+ params?: Record<string, unknown> | undefined;
253
+ resource?: string | undefined;
254
+ template?: string | undefined;
255
+ endpoint?: string | undefined;
256
+ }>;
257
+ }> | import("@anthropic-ai/claude-agent-sdk").SdkMcpToolDefinition<{
258
+ query: z.ZodString;
259
+ }>)[];
@@ -0,0 +1,216 @@
1
+ import { tool } from "@anthropic-ai/claude-agent-sdk";
2
+ import { z } from "zod";
3
+ import { BUILDER_ESCALATION_NOTE, BUILDER_EXPR_REFUSAL, BUILDER_REF_NOTE, } from "../../prompts/builder.js";
4
+ function content(text) {
5
+ return { content: [{ type: "text", text }] };
6
+ }
7
+ function note(description) {
8
+ return `${description}\n\n${BUILDER_ESCALATION_NOTE}`;
9
+ }
10
+ function hasExprSentinel(value) {
11
+ if (Array.isArray(value)) {
12
+ return value.some(hasExprSentinel);
13
+ }
14
+ if (value !== null && typeof value === "object") {
15
+ const record = value;
16
+ if (typeof record.$expr === "string") {
17
+ return true;
18
+ }
19
+ return Object.values(record).some(hasExprSentinel);
20
+ }
21
+ return false;
22
+ }
23
+ function exprRefusal() {
24
+ return content(JSON.stringify({
25
+ ok: false,
26
+ error: { code: "unsupported", detail: BUILDER_EXPR_REFUSAL },
27
+ }));
28
+ }
29
+ const CONFIG = z.record(z.unknown());
30
+ const BLOCK_PATH_FORMAT = "A block path from BuilderPageStructure: `<pageRef>#<block>` for a top-level block, then `/<child>` per nesting level (e.g. `/dashboard#grid/row/kpi`). Separators: `#` after the page, `/` between blocks.";
31
+ const BLOCK_PATH = z.string().describe(BLOCK_PATH_FORMAT);
32
+ const PARENT_PATH = z
33
+ .string()
34
+ .describe(`Container block to nest under. ${BLOCK_PATH_FORMAT}`);
35
+ const FIELD_PATH_FORMAT = "A field path `<resourceRef>#<fieldName>` (the `ref` from BuilderListResources plus the field name).";
36
+ const FIELD_PATH = z.string().describe(FIELD_PATH_FORMAT);
37
+ const DATA_TYPE_VALUE = z.object({
38
+ $dataType: z
39
+ .string()
40
+ .describe("A `dataTypes` id from BuilderCatalog, e.g. `string`, `select`."),
41
+ config: z
42
+ .record(z.unknown())
43
+ .optional()
44
+ .describe(`That DataType's own config, per BuilderCatalog. ${BUILDER_REF_NOTE}`),
45
+ });
46
+ const FIELD_ASPECTS = {
47
+ dataType: DATA_TYPE_VALUE,
48
+ label: z
49
+ .string()
50
+ .optional()
51
+ .describe("Column header. Defaults to the field name."),
52
+ listable: z
53
+ .boolean()
54
+ .optional()
55
+ .describe("Show in list/table responses. Default true."),
56
+ searchable: z.boolean().optional().describe("Include in free-text search."),
57
+ sortable: z.boolean().optional().describe("Allow sorting by this field."),
58
+ filterable: z.boolean().optional().describe("Allow filtering by this field."),
59
+ access: z
60
+ .enum(["read", "readwrite"])
61
+ .optional()
62
+ .describe("`read` makes it write-protected. Default `readwrite`."),
63
+ required: z.boolean().optional().describe("Reject writes omitting it."),
64
+ indexed: z.boolean().optional().describe("Add a database index."),
65
+ order: z
66
+ .number()
67
+ .optional()
68
+ .describe("Position among the resource's fields."),
69
+ };
70
+ const RESOURCE_LOCATION = z
71
+ .union([
72
+ z.string(),
73
+ z.object({ category: z.string() }),
74
+ z.object({ page: z.string() }),
75
+ ])
76
+ .describe("Where the resource folder goes: a `dir` string relative to src root, `{ category: <CategoryRef> }` (mirrors page placement), or `{ page: <PageRef> }` (nests beside that page). Omit for `src/<name>/`.");
77
+ const RESOURCE_ROUTE = z
78
+ .enum([
79
+ "list",
80
+ "get",
81
+ "create",
82
+ "edit",
83
+ "delete",
84
+ "select",
85
+ "archive",
86
+ "export",
87
+ ])
88
+ .describe("A DataAPI route: `list` (paginated listing), `get` (read one), `create`, `edit`, `delete`, `select` (relation-picker options), `archive` (soft delete + undo), `export` (CSV).");
89
+ const FIELD_SPEC = z.object({
90
+ name: z
91
+ .string()
92
+ .describe("Field name. Must not be one of BuilderCatalog's `reservedFieldNames` (they collide with a generated route or Model member) — e.g. use `itemCount`, not `count`."),
93
+ ...FIELD_ASPECTS,
94
+ });
95
+ const QUERY_REF = z
96
+ .string()
97
+ .describe("A query ref `<pageRef>@<queryName>` (e.g. `/catalog/books@inStockCount`), as reported in BuilderPageStructure's `queries`.");
98
+ const QUERY_ENDPOINT = z
99
+ .string()
100
+ .describe('Route path relative to the page\'s slug, e.g. `/stats/in-stock`. Must start with `/` and not collide with another route the page serves. Omit for `/stats/<kebab-name>`. A `$param` bound with `in: "param"` reads a path segment, so include a matching `:name` (e.g. `/stats/by-author/:author`).');
101
+ const QUERY_PARAMS = z
102
+ .record(z.unknown())
103
+ .describe("The template's parameters, keyed exactly as the `params` schema BuilderQueryTemplates reports for it — that schema documents every key and value shape, and an unrecognised key is rejected.");
104
+ const FIELD_ASPECTS_PATCH = z.object({
105
+ ...FIELD_ASPECTS,
106
+ dataType: DATA_TYPE_VALUE.optional(),
107
+ });
108
+ export function buildBuilderTools(deps) {
109
+ const run = async (op, args) => content(JSON.stringify(await deps.builderClient.call(op, args)));
110
+ return [
111
+ tool("BuilderCatalog", note("Lists every block type and DataType the page builder can emit, with their config schemas. Call this before adding blocks so you use valid types and options. For a config field whose schema is marked `x-dataType` (e.g. a Form field's `type`), pass a DataType value `{ $dataType: \"<id>\", config: {…} }` using an id and config from this catalog's `dataTypes` — never a raw `$expr`."), {}, () => run("GetCatalog", [])),
112
+ tool("BuilderListPages", note("Lists all builder-editable pages (route, id, category, file)."), {}, () => run("ListPages", [])),
113
+ tool("BuilderPageStructure", note(`Returns a page's block tree (each block's path, type, editability, config) plus a version hash for optimistic concurrency. ${BLOCK_PATH_FORMAT}`), { pageRef: z.string() }, ({ pageRef }) => run("GetPageStructure", [pageRef])),
114
+ tool("BuilderCreatePage", note("Creates a new page under an existing category and wires it into the barrel so it registers."), {
115
+ name: z.string(),
116
+ displayName: z.string(),
117
+ category: z.string(),
118
+ icon: z.string().optional(),
119
+ order: z.number().optional(),
120
+ description: z.string().optional(),
121
+ }, (input) => run("CreatePage", [input])),
122
+ tool("BuilderConfigurePage", note("Updates a page's metadata (displayName, icon, order, description)."), { pageRef: z.string(), patch: CONFIG }, async ({ pageRef, patch }) => hasExprSentinel(patch)
123
+ ? exprRefusal()
124
+ : run("ConfigurePage", [pageRef, patch])),
125
+ tool("BuilderDeletePage", note("Deletes a page file and removes its barrel import."), { pageRef: z.string() }, ({ pageRef }) => run("DeletePage", [pageRef])),
126
+ tool("BuilderAddBlock", note("Adds a block. Omit `parent` for a top-level block, or pass a container block's path to nest. `type` and `config` must match the catalog. Block types the catalog marks `controllerArg: true` (e.g. `TableView`) bind to a data resource: pass `controller` = the resource `ref` from BuilderListResources (its DataAPI class becomes the block's leading argument) and put the display options in `config`."), {
127
+ page: z.string(),
128
+ parent: PARENT_PATH.optional(),
129
+ slot: z.string().optional(),
130
+ index: z.number().optional(),
131
+ name: z.string(),
132
+ type: z.string(),
133
+ config: CONFIG,
134
+ controller: z
135
+ .string()
136
+ .optional()
137
+ .describe("Resource ref (from BuilderListResources) for a controller-leading block such as TableView. Required for those types; rejected for others."),
138
+ }, async (input) => hasExprSentinel(input.config)
139
+ ? exprRefusal()
140
+ : run("AddBlock", [input])),
141
+ tool("BuilderConfigureBlock", note("Merges (or replaces, with replace:true) options into a block's config. Children are managed with Add/Move/Remove, not here."), { path: BLOCK_PATH, patch: CONFIG, replace: z.boolean().optional() }, async ({ path, patch, replace, }) => hasExprSentinel(patch)
142
+ ? exprRefusal()
143
+ : run("ConfigureBlock", [path, patch, { replace }])),
144
+ tool("BuilderMoveBlock", note("Moves a child block to a new position within a container."), {
145
+ path: BLOCK_PATH,
146
+ parent: PARENT_PATH,
147
+ slot: z.string().optional(),
148
+ index: z.number(),
149
+ }, ({ path, parent, slot, index, }) => run("MoveBlock", [path, { parent, slot, index }])),
150
+ tool("BuilderRemoveBlock", note("Removes a block and its whole subtree."), { path: BLOCK_PATH }, ({ path }) => run("RemoveBlock", [path])),
151
+ tool("BuilderCreateCategory", note("Creates a navigation category (optionally under a parent category)."), {
152
+ name: z.string(),
153
+ displayName: z.string(),
154
+ parent: z.string().optional(),
155
+ icon: z.string().optional(),
156
+ order: z.number().optional(),
157
+ }, (input) => run("CreateCategory", [input])),
158
+ tool("BuilderConfigureCategory", note("Updates a category's metadata (displayName, icon, order)."), { ref: z.string(), patch: CONFIG }, async ({ ref, patch }) => hasExprSentinel(patch)
159
+ ? exprRefusal()
160
+ : run("ConfigureCategory", [ref, patch])),
161
+ tool("BuilderDeleteCategory", note("Deletes a category. Refused with referential_integrity if any page still references it."), { ref: z.string() }, ({ ref }) => run("DeleteCategory", [ref])),
162
+ tool("BuilderRefresh", note("Reconciles the builder's source index with disk after out-of-band edits (e.g. a vibe-mode excursion)."), { pageRef: z.string().optional() }, ({ pageRef }) => run("RefreshSourceIndex", pageRef ? [{ page: pageRef }] : [])),
163
+ tool("BuilderListResources", note("Lists every data resource (its ref, class/table names, /api route, field count, files). A resource is a Database Table+Model paired with a DataAPI controller."), {}, () => run("ListResources", [])),
164
+ tool("BuilderResourceStructure", note("Returns a resource's fields with their semantic aspects, its `routes` (absent when it serves the full set), and a version hash for optimistic concurrency. Hand-edited or relation fields come back marked `opaque` — safe mode cannot reconfigure those."), { ref: z.string() }, ({ ref }) => run("GetResourceStructure", [ref])),
165
+ tool("BuilderCreateResource", note("Creates a data resource — a Database Table+Model plus a matching DataAPI controller at /api/<name> — as a folder wired into the nearest barrel. Every resource auto-manages its own `_id`. When you limit `routes`, keep the view in sync: drop the TableView rowActions whose routes you left out, or bind a Form instead."), {
166
+ name: z.string(),
167
+ displayName: z.string().optional(),
168
+ schema: z.string().optional(),
169
+ fields: z.array(FIELD_SPEC),
170
+ seeds: z.array(z.record(z.unknown())).optional(),
171
+ location: RESOURCE_LOCATION.optional(),
172
+ routes: z.array(RESOURCE_ROUTE).min(1).optional(),
173
+ }, async (input) => hasExprSentinel(input) ? exprRefusal() : run("CreateResource", [input])),
174
+ tool("BuilderDeleteResource", note("Deletes a resource: removes its database.ts/data-api.ts/index.ts files, unwires the barrel export, and (by default) clears the resource's database table so a later resource reusing the name re-seeds cleanly instead of inheriting stale rows. Pass keepData: true to leave the table data in place. Does not detect pages whose TableView references its /api route."), { ref: z.string(), keepData: z.boolean().optional() }, ({ ref, keepData }) => run("DeleteResource", keepData === undefined ? [ref] : [ref, { keepData }])),
175
+ tool("BuilderAddField", note("Adds a field to a resource, editing the Table and DataAPI classes together in one atomic op."), { ref: z.string(), field: FIELD_SPEC }, async ({ ref, field }) => hasExprSentinel(field) ? exprRefusal() : run("AddField", [ref, field])),
176
+ tool("BuilderConfigureField", note("Reconfigures a field by merging the patch over its current aspects and re-deriving the whole decorator stack on both classes (no drift). Field name is immutable — rename via BuilderRemoveField + BuilderAddField."), { path: FIELD_PATH, patch: FIELD_ASPECTS_PATCH }, async ({ path, patch }) => hasExprSentinel(patch)
177
+ ? exprRefusal()
178
+ : run("ConfigureField", [path, patch])),
179
+ tool("BuilderRemoveField", note("Removes a field from a resource's Table and DataAPI classes in one atomic op. Leaves seed rows untouched."), { path: FIELD_PATH }, ({ path }) => run("RemoveField", [path])),
180
+ tool("BuilderQueryTemplates", note("Lists the query templates BuilderAddQuery can compile, each with its id, what it computes, its `output` kind, and the JSON Schema for its `params`. Call this before adding a query — the schema is the reference for every parameter and value shape."), {
181
+ resourceType: z
182
+ .string()
183
+ .optional()
184
+ .describe("Filter to templates for one resource type (v1 has only `database-table`). Omit for all."),
185
+ }, ({ resourceType }) => run("ListQueryTemplates", resourceType ? [resourceType] : [])),
186
+ tool("BuilderAddQuery", note("Adds a query — a page-hosted GET route serving one computed number that the DataAPI cannot give you. Compiles the template into a method on the resource's model and a route on the page, atomically. Returns `{ query, route }`; `route` is the full URL to pass as a KpiCard's `fetchUrl`, and it serves `{ \"value\": <number> }`."), {
187
+ page: z
188
+ .string()
189
+ .describe("PageRef the query is served from — the page that displays it, not the resource's page."),
190
+ name: z
191
+ .string()
192
+ .describe("camelCase identifier, unique among the page's members. Names the route; the model method it compiles into may differ, since queries wanting the identical chain share one."),
193
+ resource: z
194
+ .string()
195
+ .describe("Resource ref to read, from BuilderListResources."),
196
+ template: z
197
+ .string()
198
+ .describe("A template id from BuilderQueryTemplates."),
199
+ params: QUERY_PARAMS.optional(),
200
+ endpoint: QUERY_ENDPOINT.optional(),
201
+ }, async ({ page, ...input }) => hasExprSentinel(input) ? exprRefusal() : run("AddQuery", [page, input])),
202
+ tool("BuilderConfigureQuery", note("Recompiles a query, replacing both its route and its chain. Only the keys you pass change; the rest are re-read from the query. A query BuilderPageStructure reports as `opaque` is refused with opaque_target, leaving the hand-edit intact. Renaming is not supported — remove and re-add. Never affects another page's query, even one sharing the same model method."), {
203
+ query: QUERY_REF,
204
+ patch: z.object({
205
+ resource: z.string().optional(),
206
+ template: z.string().optional(),
207
+ params: QUERY_PARAMS.optional(),
208
+ endpoint: QUERY_ENDPOINT.optional(),
209
+ }),
210
+ }, async ({ query, patch }) => hasExprSentinel(patch)
211
+ ? exprRefusal()
212
+ : run("ConfigureQuery", [query, patch])),
213
+ tool("BuilderRemoveQuery", note("Removes a query's route from the page, and its model method too once no route on any page still calls it. Works on an opaque query as well — the builder can always remove what it cannot edit. Does not detect blocks whose fetchUrl points at the removed route: fix those in the same turn."), { query: QUERY_REF }, ({ query }) => run("RemoveQuery", [query])),
214
+ ];
215
+ }
216
+ //# sourceMappingURL=builder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"builder.js","sourceRoot":"","sources":["../../../src/mcp/tools/builder.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import { z } from "zod";
2
+ import type { ImportsScanner, ScanResult } from "../../pages/imports-scanner.js";
3
+ import type { RegistryClient } from "../../pages/registry-client.js";
4
+ import type { PageCandidate, PagesRegistryEntry } from "../../pages/types.js";
5
+ import type { CurrentPage } from "../../state/host-state.js";
6
+ export interface FindPagesUsingDeps {
7
+ registry: RegistryClient;
8
+ scanner: ImportsScanner;
9
+ hostProjectRoot: string;
10
+ getCurrentPage: () => CurrentPage;
11
+ }
12
+ export declare function computeCandidates(filepath: string, pages: readonly PagesRegistryEntry[], scan: ScanResult, rootDir: string, currentPage: CurrentPage): PageCandidate[];
13
+ export declare function buildFindPagesUsingTool(deps: FindPagesUsingDeps): import("@anthropic-ai/claude-agent-sdk").SdkMcpToolDefinition<{
14
+ readonly filepath: z.ZodString;
15
+ }>;
@@ -0,0 +1,108 @@
1
+ import path from "node:path";
2
+ import { tool } from "@anthropic-ai/claude-agent-sdk";
3
+ import { z } from "zod";
4
+ import { FIND_PAGES_TOOL_DESCRIPTION, FIND_PAGES_TOOL_NAME, MAX_BFS_DEPTH, } from "../../constants/pages.js";
5
+ const INPUT_SCHEMA = { filepath: z.string() };
6
+ function toAbsolute(rootDir, filepath) {
7
+ if (path.isAbsolute(filepath))
8
+ return filepath;
9
+ return path.resolve(rootDir, filepath);
10
+ }
11
+ function buildPageFilepathSet(rootDir, pages) {
12
+ const map = new Map();
13
+ for (const page of pages) {
14
+ if (page.filepath === undefined)
15
+ continue;
16
+ const absolute = toAbsolute(rootDir, page.filepath);
17
+ map.set(absolute, page);
18
+ }
19
+ return map;
20
+ }
21
+ function buildDirectCandidate(page, rootDir) {
22
+ return {
23
+ pagePath: page.path,
24
+ pageFilepath: toAbsolute(rootDir, page.filepath ?? ""),
25
+ distance: 0,
26
+ };
27
+ }
28
+ function findDirectPage(absoluteFilepath, pageMap, rootDir) {
29
+ const page = pageMap.get(absoluteFilepath);
30
+ if (page === undefined)
31
+ return null;
32
+ return buildDirectCandidate(page, rootDir);
33
+ }
34
+ function pushImporters(state, importers, nextDepth) {
35
+ for (const importer of importers) {
36
+ if (state.visited.has(importer))
37
+ continue;
38
+ state.visited.add(importer);
39
+ state.queue.push({ file: importer, depth: nextDepth });
40
+ }
41
+ }
42
+ function recordHitIfPage(state, file, depth, pageMap, rootDir) {
43
+ const page = pageMap.get(file);
44
+ if (page === undefined)
45
+ return;
46
+ state.hits.push({
47
+ pagePath: page.path,
48
+ pageFilepath: toAbsolute(rootDir, page.filepath ?? ""),
49
+ distance: depth,
50
+ });
51
+ }
52
+ function bfsToPages(startFile, scan, pageMap, rootDir) {
53
+ const state = {
54
+ visited: new Set([startFile]),
55
+ queue: [{ file: startFile, depth: 0 }],
56
+ hits: [],
57
+ };
58
+ while (state.queue.length > 0) {
59
+ const node = state.queue.shift();
60
+ if (node === undefined)
61
+ break;
62
+ if (node.depth > 0) {
63
+ recordHitIfPage(state, node.file, node.depth, pageMap, rootDir);
64
+ }
65
+ if (node.depth >= MAX_BFS_DEPTH)
66
+ continue;
67
+ const importers = scan.importersByFile.get(node.file) ?? [];
68
+ pushImporters(state, importers, node.depth + 1);
69
+ }
70
+ return state.hits;
71
+ }
72
+ function comparatorFor(currentPagePath) {
73
+ return (a, b) => {
74
+ const aIsCurrent = currentPagePath !== undefined && a.pagePath === currentPagePath;
75
+ const bIsCurrent = currentPagePath !== undefined && b.pagePath === currentPagePath;
76
+ if (aIsCurrent && !bIsCurrent)
77
+ return -1;
78
+ if (!aIsCurrent && bIsCurrent)
79
+ return 1;
80
+ return a.distance - b.distance;
81
+ };
82
+ }
83
+ function sortCandidates(candidates, currentPagePath) {
84
+ return [...candidates].sort(comparatorFor(currentPagePath));
85
+ }
86
+ export function computeCandidates(filepath, pages, scan, rootDir, currentPage) {
87
+ const absolute = toAbsolute(rootDir, filepath);
88
+ const pageMap = buildPageFilepathSet(rootDir, pages);
89
+ const direct = findDirectPage(absolute, pageMap, rootDir);
90
+ if (direct !== null)
91
+ return sortCandidates([direct], currentPage.path);
92
+ const hits = bfsToPages(absolute, scan, pageMap, rootDir);
93
+ return sortCandidates(hits, currentPage.path);
94
+ }
95
+ function buildContent(candidates) {
96
+ return {
97
+ content: [{ type: "text", text: JSON.stringify(candidates) }],
98
+ };
99
+ }
100
+ export function buildFindPagesUsingTool(deps) {
101
+ return tool(FIND_PAGES_TOOL_NAME, FIND_PAGES_TOOL_DESCRIPTION, INPUT_SCHEMA, async ({ filepath }) => {
102
+ const pages = await deps.registry.getRegistry();
103
+ const scan = await deps.scanner.scan(deps.hostProjectRoot);
104
+ const candidates = computeCandidates(filepath, pages, scan, deps.hostProjectRoot, deps.getCurrentPage());
105
+ return buildContent(candidates);
106
+ });
107
+ }
108
+ //# sourceMappingURL=find-pages-using.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"find-pages-using.js","sourceRoot":"","sources":["../../../src/mcp/tools/find-pages-using.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { CurrentPage } from "../../state/host-state.js";
2
+ type GetCurrentPage = () => CurrentPage;
3
+ export declare function buildGetCurrentPageTool(getCurrentPage: GetCurrentPage): import("@anthropic-ai/claude-agent-sdk").SdkMcpToolDefinition<{}>;
4
+ export {};
@@ -0,0 +1,12 @@
1
+ import { tool } from "@anthropic-ai/claude-agent-sdk";
2
+ import { GET_CURRENT_PAGE_TOOL_DESCRIPTION, GET_CURRENT_PAGE_TOOL_NAME, } from "../../constants/mcp.js";
3
+ const EMPTY_INPUT_SCHEMA = {};
4
+ function buildContent(page) {
5
+ return {
6
+ content: [{ type: "text", text: JSON.stringify(page) }],
7
+ };
8
+ }
9
+ export function buildGetCurrentPageTool(getCurrentPage) {
10
+ return tool(GET_CURRENT_PAGE_TOOL_NAME, GET_CURRENT_PAGE_TOOL_DESCRIPTION, EMPTY_INPUT_SCHEMA, async () => buildContent(getCurrentPage()));
11
+ }
12
+ //# sourceMappingURL=get-current-page.js.map