aimeat 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1366) hide show
  1. package/dist/.env.example +300 -0
  2. package/dist/bin/aimeat.d.ts +3 -0
  3. package/dist/bin/aimeat.d.ts.map +1 -0
  4. package/dist/bin/aimeat.js +22 -0
  5. package/dist/bin/aimeat.js.map +1 -0
  6. package/dist/locales/en.json +4566 -0
  7. package/dist/locales/fi.json +4566 -0
  8. package/dist/public/BingSiteAuth.xml +4 -0
  9. package/dist/public/agent-consent.html +521 -0
  10. package/dist/public/aimeat-developers.html +679 -0
  11. package/dist/public/assets/mcp_1_add_custom_connector.png +0 -0
  12. package/dist/public/assets/mcp_2_connect_disconnect_connector.png +0 -0
  13. package/dist/public/components/Alert.js +18 -0
  14. package/dist/public/components/Card.js +19 -0
  15. package/dist/public/components/CopyButton.js +24 -0
  16. package/dist/public/components/FormField.js +16 -0
  17. package/dist/public/components/Modal.js +121 -0
  18. package/dist/public/components/Spinner.js +11 -0
  19. package/dist/public/components/Toast.js +26 -0
  20. package/dist/public/components/index.js +8 -0
  21. package/dist/public/components/useViewCSS.js +12 -0
  22. package/dist/public/cortex-bundled/aimeat-canvas.js +1408 -0
  23. package/dist/public/cortex-bundled/aimeat-canvas.yaml +241 -0
  24. package/dist/public/cortex-bundled/aimeat-charts.js +455 -0
  25. package/dist/public/cortex-bundled/aimeat-charts.yaml +178 -0
  26. package/dist/public/cortex-bundled/aimeat-ui-dialogs.js +667 -0
  27. package/dist/public/cortex-bundled/aimeat-ui-dialogs.yaml +66 -0
  28. package/dist/public/cortex-bundled/aimeat-ui-forms.js +1106 -0
  29. package/dist/public/cortex-bundled/aimeat-ui-forms.yaml +90 -0
  30. package/dist/public/cortex-bundled/aimeat-ui-layout.js +436 -0
  31. package/dist/public/cortex-bundled/aimeat-ui-layout.yaml +87 -0
  32. package/dist/public/cortex-bundled/aimeat-ui-nav.js +722 -0
  33. package/dist/public/cortex-bundled/aimeat-ui-nav.yaml +73 -0
  34. package/dist/public/cortex-bundled/aimeat-ui-viewers.js +602 -0
  35. package/dist/public/cortex-bundled/aimeat-ui-viewers.yaml +73 -0
  36. package/dist/public/css/components/tags.css +67 -0
  37. package/dist/public/css/theme.css +716 -0
  38. package/dist/public/css/views/admin.css +576 -0
  39. package/dist/public/css/views/aimeat-os.css +153 -0
  40. package/dist/public/css/views/calibrator.css +480 -0
  41. package/dist/public/css/views/foundry.css +1334 -0
  42. package/dist/public/css/views/help.css +136 -0
  43. package/dist/public/css/views/hobbies.css +73 -0
  44. package/dist/public/css/views/marketplace.css +134 -0
  45. package/dist/public/css/views/openclaw.css +33 -0
  46. package/dist/public/css/views/portal-classic.css +484 -0
  47. package/dist/public/css/views/portal-dev.css +139 -0
  48. package/dist/public/css/views/portal.css +365 -0
  49. package/dist/public/css/views/portfolio.css +322 -0
  50. package/dist/public/css/views/profile.css +1799 -0
  51. package/dist/public/echat.html +442 -0
  52. package/dist/public/img/genesis-001-badge.png +0 -0
  53. package/dist/public/img/platforms/chatgpt.png +0 -0
  54. package/dist/public/img/platforms/claude.png +0 -0
  55. package/dist/public/img/platforms/copilot.png +0 -0
  56. package/dist/public/img/platforms/deepseek.png +0 -0
  57. package/dist/public/img/platforms/gemini.png +0 -0
  58. package/dist/public/img/platforms/grok.png +0 -0
  59. package/dist/public/img/platforms/lmstudio.png +0 -0
  60. package/dist/public/img/platforms/m365copilot.png +0 -0
  61. package/dist/public/img/platforms/openclaw.png +0 -0
  62. package/dist/public/img/platforms/other.png +0 -0
  63. package/dist/public/js/api.js +123 -0
  64. package/dist/public/js/components/auth-image.js +59 -0
  65. package/dist/public/js/components/tag-cloud.js +31 -0
  66. package/dist/public/js/components/tag-editor.js +46 -0
  67. package/dist/public/js/hooks.js +63 -0
  68. package/dist/public/js/i18n.js +76 -0
  69. package/dist/public/js/services/admin.js +239 -0
  70. package/dist/public/js/services/agents.js +57 -0
  71. package/dist/public/js/services/apps.js +35 -0
  72. package/dist/public/js/services/auth.js +40 -0
  73. package/dist/public/js/services/boards.js +79 -0
  74. package/dist/public/js/services/calibrator.js +97 -0
  75. package/dist/public/js/services/catalogue.js +39 -0
  76. package/dist/public/js/services/consent.js +57 -0
  77. package/dist/public/js/services/cortex.js +95 -0
  78. package/dist/public/js/services/extensions.js +61 -0
  79. package/dist/public/js/services/federation.js +11 -0
  80. package/dist/public/js/services/foundry-context-bundle.js +128 -0
  81. package/dist/public/js/services/foundry-contract.js +117 -0
  82. package/dist/public/js/services/foundry-packaging.js +762 -0
  83. package/dist/public/js/services/foundry-probe-reconcile.js +52 -0
  84. package/dist/public/js/services/foundry-prompts-base.js +1886 -0
  85. package/dist/public/js/services/foundry-prompts-build.js +2187 -0
  86. package/dist/public/js/services/foundry-prompts-cortex-app.js +154 -0
  87. package/dist/public/js/services/foundry-prompts-cortex-data.js +241 -0
  88. package/dist/public/js/services/foundry-prompts-cortex-feature.js +281 -0
  89. package/dist/public/js/services/foundry-prompts-fix.js +408 -0
  90. package/dist/public/js/services/foundry-prompts-test.js +520 -0
  91. package/dist/public/js/services/foundry-prompts.js +31 -0
  92. package/dist/public/js/services/foundry-smoke.js +65 -0
  93. package/dist/public/js/services/foundry-testing.js +64 -0
  94. package/dist/public/js/services/foundry-validate.js +1082 -0
  95. package/dist/public/js/services/foundry.js +1194 -0
  96. package/dist/public/js/services/generator-context-bundle.js +134 -0
  97. package/dist/public/js/services/generator-contract.js +117 -0
  98. package/dist/public/js/services/generator-packaging.js +762 -0
  99. package/dist/public/js/services/generator-probe-reconcile.js +52 -0
  100. package/dist/public/js/services/generator-prompts-base.js +1890 -0
  101. package/dist/public/js/services/generator-prompts-build.js +1126 -0
  102. package/dist/public/js/services/generator-prompts-cortex-app.js +155 -0
  103. package/dist/public/js/services/generator-prompts-cortex-data.js +199 -0
  104. package/dist/public/js/services/generator-prompts-cortex-feature.js +276 -0
  105. package/dist/public/js/services/generator-prompts-fix.js +316 -0
  106. package/dist/public/js/services/generator-prompts-test.js +402 -0
  107. package/dist/public/js/services/generator-prompts.js +31 -0
  108. package/dist/public/js/services/generator-smoke.js +65 -0
  109. package/dist/public/js/services/generator-spec-tests.js +280 -0
  110. package/dist/public/js/services/generator-spec-validate.js +192 -0
  111. package/dist/public/js/services/generator-specs.js +369 -0
  112. package/dist/public/js/services/generator-testing.js +64 -0
  113. package/dist/public/js/services/generator-validate.js +916 -0
  114. package/dist/public/js/services/generator.js +952 -0
  115. package/dist/public/js/services/knowledge.js +120 -0
  116. package/dist/public/js/services/memory.js +112 -0
  117. package/dist/public/js/services/nodes.js +55 -0
  118. package/dist/public/js/services/organisms.js +74 -0
  119. package/dist/public/js/services/packages.js +97 -0
  120. package/dist/public/js/services/security.js +67 -0
  121. package/dist/public/js/services/stats.js +11 -0
  122. package/dist/public/js/services/wallet.js +24 -0
  123. package/dist/public/js/services/work.js +51 -0
  124. package/dist/public/js/utils.js +184 -0
  125. package/dist/public/lib/htm.mjs +4 -0
  126. package/dist/public/lib/live-updates.js +89 -0
  127. package/dist/public/lib/minidenticons.min.js +1 -0
  128. package/dist/public/lib/preact-hooks.mjs +3 -0
  129. package/dist/public/lib/preact.mjs +3 -0
  130. package/dist/public/lib/realtime.js +549 -0
  131. package/dist/public/lib/three.min.js +6 -0
  132. package/dist/public/lib/yaml.mjs +141 -0
  133. package/dist/public/llms-template.txt +1043 -0
  134. package/dist/public/oauth-consent.html +388 -0
  135. package/dist/public/og-image.png +0 -0
  136. package/dist/public/robots.txt +52 -0
  137. package/dist/public/spa.html +533 -0
  138. package/dist/public/sw.js +34 -0
  139. package/dist/public/tmp-paste.txt +223 -0
  140. package/dist/public/views/_template.js +85 -0
  141. package/dist/public/views/admin/actions-tab.js +41 -0
  142. package/dist/public/views/admin/agents-tab.js +84 -0
  143. package/dist/public/views/admin/boards-tab.js +154 -0
  144. package/dist/public/views/admin/chat-instances-tab.js +207 -0
  145. package/dist/public/views/admin/config-tab.js +151 -0
  146. package/dist/public/views/admin/consul-tab.js +77 -0
  147. package/dist/public/views/admin/cors-tab.js +240 -0
  148. package/dist/public/views/admin/cortex-tab.js +171 -0
  149. package/dist/public/views/admin/csm-tab.js +261 -0
  150. package/dist/public/views/admin/directory-tab.js +44 -0
  151. package/dist/public/views/admin/economy-tab.js +80 -0
  152. package/dist/public/views/admin/email-tab.js +460 -0
  153. package/dist/public/views/admin/federation-tab.js +412 -0
  154. package/dist/public/views/admin/generator-debug-tab.js +238 -0
  155. package/dist/public/views/admin/genesis-tab.js +70 -0
  156. package/dist/public/views/admin/ghii-tab.js +101 -0
  157. package/dist/public/views/admin/hooks-tab.js +69 -0
  158. package/dist/public/views/admin/knowledge-tab.js +297 -0
  159. package/dist/public/views/admin/maintenance-tab.js +98 -0
  160. package/dist/public/views/admin/matching-tab.js +44 -0
  161. package/dist/public/views/admin/memory-tab.js +222 -0
  162. package/dist/public/views/admin/msm-tab.js +342 -0
  163. package/dist/public/views/admin/overview-tab.js +90 -0
  164. package/dist/public/views/admin/owners-tab.js +55 -0
  165. package/dist/public/views/admin/packages-tab.js +510 -0
  166. package/dist/public/views/admin/portal-tab.js +211 -0
  167. package/dist/public/views/admin/prompts-tab.js +287 -0
  168. package/dist/public/views/admin/push-tab.js +291 -0
  169. package/dist/public/views/admin/realtime-tab.js +68 -0
  170. package/dist/public/views/admin/scheduler-tab.js +156 -0
  171. package/dist/public/views/admin/services-tab.js +981 -0
  172. package/dist/public/views/admin/shared.js +148 -0
  173. package/dist/public/views/admin/stats-tab.js +187 -0
  174. package/dist/public/views/admin/work-tab.js +45 -0
  175. package/dist/public/views/admin.js +400 -0
  176. package/dist/public/views/aimeat-os.js +259 -0
  177. package/dist/public/views/guides.js +402 -0
  178. package/dist/public/views/help.js +79 -0
  179. package/dist/public/views/hobbies.js +697 -0
  180. package/dist/public/views/marketplace.js +647 -0
  181. package/dist/public/views/openclaw.js +223 -0
  182. package/dist/public/views/portal-classic.js +519 -0
  183. package/dist/public/views/portal-dev.js +816 -0
  184. package/dist/public/views/portal.js +1354 -0
  185. package/dist/public/views/portfolio.js +795 -0
  186. package/dist/public/views/profile/access-tab.js +58 -0
  187. package/dist/public/views/profile/agents-tab.js +689 -0
  188. package/dist/public/views/profile/apps-tab.js +197 -0
  189. package/dist/public/views/profile/boards-tab.js +323 -0
  190. package/dist/public/views/profile/calibrator-batch.js +926 -0
  191. package/dist/public/views/profile/calibrator-chart.js +135 -0
  192. package/dist/public/views/profile/calibrator-llm-editor.js +205 -0
  193. package/dist/public/views/profile/calibrator-tab.js +535 -0
  194. package/dist/public/views/profile/chat-sessions-tab.js +184 -0
  195. package/dist/public/views/profile/data-wallet-tab.js +313 -0
  196. package/dist/public/views/profile/email-tab.js +157 -0
  197. package/dist/public/views/profile/extensions-tab.js +711 -0
  198. package/dist/public/views/profile/federation-tab.js +63 -0
  199. package/dist/public/views/profile/foundry-dashboard/DebugPanel.js +193 -0
  200. package/dist/public/views/profile/foundry-dashboard/DiagnosticsPanel.js +69 -0
  201. package/dist/public/views/profile/foundry-dashboard/EditModePanel.js +141 -0
  202. package/dist/public/views/profile/foundry-dashboard/PackageDialog.js +96 -0
  203. package/dist/public/views/profile/foundry-dashboard/RemovePanel.js +53 -0
  204. package/dist/public/views/profile/foundry-dashboard/use-autopilot-state.js +53 -0
  205. package/dist/public/views/profile/foundry-dashboard/use-autopilot.js +1016 -0
  206. package/dist/public/views/profile/foundry-dashboard/use-dashboard-core.js +154 -0
  207. package/dist/public/views/profile/foundry-dashboard/use-edit-mode.js +294 -0
  208. package/dist/public/views/profile/foundry-dashboard/use-lifecycle.js +101 -0
  209. package/dist/public/views/profile/foundry-dashboard/use-packaging.js +97 -0
  210. package/dist/public/views/profile/foundry-dashboard/use-test-execution.js +275 -0
  211. package/dist/public/views/profile/foundry-dashboard.js +395 -0
  212. package/dist/public/views/profile/foundry-detail.js +1178 -0
  213. package/dist/public/views/profile/foundry-settings.js +377 -0
  214. package/dist/public/views/profile/foundry-tab.js +546 -0
  215. package/dist/public/views/profile/generator-dashboard/DebugPanel.js +193 -0
  216. package/dist/public/views/profile/generator-dashboard/DiagnosticsPanel.js +69 -0
  217. package/dist/public/views/profile/generator-dashboard/EditModePanel.js +141 -0
  218. package/dist/public/views/profile/generator-dashboard/PackageDialog.js +96 -0
  219. package/dist/public/views/profile/generator-dashboard/RemovePanel.js +53 -0
  220. package/dist/public/views/profile/generator-dashboard/use-autopilot-state.js +53 -0
  221. package/dist/public/views/profile/generator-dashboard/use-autopilot.js +136 -0
  222. package/dist/public/views/profile/generator-dashboard/use-dashboard-core.js +143 -0
  223. package/dist/public/views/profile/generator-dashboard/use-edit-mode.js +296 -0
  224. package/dist/public/views/profile/generator-dashboard/use-lifecycle.js +101 -0
  225. package/dist/public/views/profile/generator-dashboard/use-packaging.js +97 -0
  226. package/dist/public/views/profile/generator-dashboard/use-test-execution.js +275 -0
  227. package/dist/public/views/profile/generator-dashboard.js +377 -0
  228. package/dist/public/views/profile/generator-detail.js +1007 -0
  229. package/dist/public/views/profile/generator-settings.js +417 -0
  230. package/dist/public/views/profile/generator-tab.js +544 -0
  231. package/dist/public/views/profile/inline-panels.js +277 -0
  232. package/dist/public/views/profile/knowledge-tab.js +735 -0
  233. package/dist/public/views/profile/landing-page.js +539 -0
  234. package/dist/public/views/profile/mcp-tab.js +140 -0
  235. package/dist/public/views/profile/memory-tab.js +599 -0
  236. package/dist/public/views/profile/node-stats-tab.js +132 -0
  237. package/dist/public/views/profile/nodes-tab.js +195 -0
  238. package/dist/public/views/profile/notifications-tab.js +274 -0
  239. package/dist/public/views/profile/organisms-tab.js +402 -0
  240. package/dist/public/views/profile/packages-tab.js +393 -0
  241. package/dist/public/views/profile/portfolio-tab.js +31 -0
  242. package/dist/public/views/profile/security-tab.js +219 -0
  243. package/dist/public/views/profile/services-tab.js +281 -0
  244. package/dist/public/views/profile/shared.js +58 -0
  245. package/dist/public/views/profile/wallet-tab.js +272 -0
  246. package/dist/public/views/profile/work-tab.js +220 -0
  247. package/dist/public/views/profile.js +271 -0
  248. package/dist/public/wizard.html +1320 -0
  249. package/dist/scripts/db-init.d.ts +19 -0
  250. package/dist/scripts/db-init.d.ts.map +1 -0
  251. package/dist/scripts/db-init.js +168 -0
  252. package/dist/scripts/db-init.js.map +1 -0
  253. package/dist/scripts/db-reset.d.ts +15 -0
  254. package/dist/scripts/db-reset.d.ts.map +1 -0
  255. package/dist/scripts/db-reset.js +162 -0
  256. package/dist/scripts/db-reset.js.map +1 -0
  257. package/dist/scripts/indexnow.d.ts +18 -0
  258. package/dist/scripts/indexnow.d.ts.map +1 -0
  259. package/dist/scripts/indexnow.js +104 -0
  260. package/dist/scripts/indexnow.js.map +1 -0
  261. package/dist/scripts/kill-port.d.ts +3 -0
  262. package/dist/scripts/kill-port.d.ts.map +1 -0
  263. package/dist/scripts/kill-port.js +89 -0
  264. package/dist/scripts/kill-port.js.map +1 -0
  265. package/dist/scripts/seed-digital-signage.d.ts +13 -0
  266. package/dist/scripts/seed-digital-signage.d.ts.map +1 -0
  267. package/dist/scripts/seed-digital-signage.js +85 -0
  268. package/dist/scripts/seed-digital-signage.js.map +1 -0
  269. package/dist/src/auth/jwt.d.ts +40 -0
  270. package/dist/src/auth/jwt.d.ts.map +1 -0
  271. package/dist/src/auth/jwt.js +139 -0
  272. package/dist/src/auth/jwt.js.map +1 -0
  273. package/dist/src/auth/keypair.d.ts +8 -0
  274. package/dist/src/auth/keypair.d.ts.map +1 -0
  275. package/dist/src/auth/keypair.js +35 -0
  276. package/dist/src/auth/keypair.js.map +1 -0
  277. package/dist/src/auth/middleware.d.ts +50 -0
  278. package/dist/src/auth/middleware.d.ts.map +1 -0
  279. package/dist/src/auth/middleware.js +241 -0
  280. package/dist/src/auth/middleware.js.map +1 -0
  281. package/dist/src/auth/node-keys.d.ts +7 -0
  282. package/dist/src/auth/node-keys.d.ts.map +1 -0
  283. package/dist/src/auth/node-keys.js +116 -0
  284. package/dist/src/auth/node-keys.js.map +1 -0
  285. package/dist/src/cli/config-export.d.ts +9 -0
  286. package/dist/src/cli/config-export.d.ts.map +1 -0
  287. package/dist/src/cli/config-export.js +90 -0
  288. package/dist/src/cli/config-export.js.map +1 -0
  289. package/dist/src/cli/config-import.d.ts +10 -0
  290. package/dist/src/cli/config-import.d.ts.map +1 -0
  291. package/dist/src/cli/config-import.js +124 -0
  292. package/dist/src/cli/config-import.js.map +1 -0
  293. package/dist/src/cli/federation-join.d.ts +13 -0
  294. package/dist/src/cli/federation-join.d.ts.map +1 -0
  295. package/dist/src/cli/federation-join.js +395 -0
  296. package/dist/src/cli/federation-join.js.map +1 -0
  297. package/dist/src/cli/init-wizard.d.ts +8 -0
  298. package/dist/src/cli/init-wizard.d.ts.map +1 -0
  299. package/dist/src/cli/init-wizard.js +1489 -0
  300. package/dist/src/cli/init-wizard.js.map +1 -0
  301. package/dist/src/cli/scaffold.d.ts +33 -0
  302. package/dist/src/cli/scaffold.d.ts.map +1 -0
  303. package/dist/src/cli/scaffold.js +142 -0
  304. package/dist/src/cli/scaffold.js.map +1 -0
  305. package/dist/src/config.d.ts +272 -0
  306. package/dist/src/config.d.ts.map +1 -0
  307. package/dist/src/config.js +362 -0
  308. package/dist/src/config.js.map +1 -0
  309. package/dist/src/data/example-packages.d.ts +49 -0
  310. package/dist/src/data/example-packages.d.ts.map +1 -0
  311. package/dist/src/data/example-packages.js +814 -0
  312. package/dist/src/data/example-packages.js.map +1 -0
  313. package/dist/src/i18n.d.ts +19 -0
  314. package/dist/src/i18n.d.ts.map +1 -0
  315. package/dist/src/i18n.js +126 -0
  316. package/dist/src/i18n.js.map +1 -0
  317. package/dist/src/index.d.ts +3 -0
  318. package/dist/src/index.d.ts.map +1 -0
  319. package/dist/src/index.js +608 -0
  320. package/dist/src/index.js.map +1 -0
  321. package/dist/src/mcp/boards.d.ts +18 -0
  322. package/dist/src/mcp/boards.d.ts.map +1 -0
  323. package/dist/src/mcp/boards.js +279 -0
  324. package/dist/src/mcp/boards.js.map +1 -0
  325. package/dist/src/mcp/catalogue.d.ts +17 -0
  326. package/dist/src/mcp/catalogue.d.ts.map +1 -0
  327. package/dist/src/mcp/catalogue.js +114 -0
  328. package/dist/src/mcp/catalogue.js.map +1 -0
  329. package/dist/src/mcp/chat-instances.d.ts +18 -0
  330. package/dist/src/mcp/chat-instances.d.ts.map +1 -0
  331. package/dist/src/mcp/chat-instances.js +161 -0
  332. package/dist/src/mcp/chat-instances.js.map +1 -0
  333. package/dist/src/mcp/consent.d.ts +18 -0
  334. package/dist/src/mcp/consent.d.ts.map +1 -0
  335. package/dist/src/mcp/consent.js +158 -0
  336. package/dist/src/mcp/consent.js.map +1 -0
  337. package/dist/src/mcp/core.d.ts +18 -0
  338. package/dist/src/mcp/core.d.ts.map +1 -0
  339. package/dist/src/mcp/core.js +489 -0
  340. package/dist/src/mcp/core.js.map +1 -0
  341. package/dist/src/mcp/extensions.d.ts +18 -0
  342. package/dist/src/mcp/extensions.d.ts.map +1 -0
  343. package/dist/src/mcp/extensions.js +299 -0
  344. package/dist/src/mcp/extensions.js.map +1 -0
  345. package/dist/src/mcp/flags.d.ts +18 -0
  346. package/dist/src/mcp/flags.d.ts.map +1 -0
  347. package/dist/src/mcp/flags.js +59 -0
  348. package/dist/src/mcp/flags.js.map +1 -0
  349. package/dist/src/mcp/index.d.ts +31 -0
  350. package/dist/src/mcp/index.d.ts.map +1 -0
  351. package/dist/src/mcp/index.js +694 -0
  352. package/dist/src/mcp/index.js.map +1 -0
  353. package/dist/src/mcp/knowledge.d.ts +18 -0
  354. package/dist/src/mcp/knowledge.d.ts.map +1 -0
  355. package/dist/src/mcp/knowledge.js +214 -0
  356. package/dist/src/mcp/knowledge.js.map +1 -0
  357. package/dist/src/mcp/memory-extended.d.ts +18 -0
  358. package/dist/src/mcp/memory-extended.d.ts.map +1 -0
  359. package/dist/src/mcp/memory-extended.js +73 -0
  360. package/dist/src/mcp/memory-extended.js.map +1 -0
  361. package/dist/src/mcp/organisms.d.ts +18 -0
  362. package/dist/src/mcp/organisms.d.ts.map +1 -0
  363. package/dist/src/mcp/organisms.js +291 -0
  364. package/dist/src/mcp/organisms.js.map +1 -0
  365. package/dist/src/mcp/prompts.d.ts +17 -0
  366. package/dist/src/mcp/prompts.d.ts.map +1 -0
  367. package/dist/src/mcp/prompts.js +65 -0
  368. package/dist/src/mcp/prompts.js.map +1 -0
  369. package/dist/src/mcp/wallet-extended.d.ts +17 -0
  370. package/dist/src/mcp/wallet-extended.d.ts.map +1 -0
  371. package/dist/src/mcp/wallet-extended.js +42 -0
  372. package/dist/src/mcp/wallet-extended.js.map +1 -0
  373. package/dist/src/middleware/__tests__/cookie-consent.test.d.ts +2 -0
  374. package/dist/src/middleware/__tests__/cookie-consent.test.d.ts.map +1 -0
  375. package/dist/src/middleware/__tests__/cookie-consent.test.js +432 -0
  376. package/dist/src/middleware/__tests__/cookie-consent.test.js.map +1 -0
  377. package/dist/src/middleware/cookie-consent.d.ts +19 -0
  378. package/dist/src/middleware/cookie-consent.d.ts.map +1 -0
  379. package/dist/src/middleware/cookie-consent.js +127 -0
  380. package/dist/src/middleware/cookie-consent.js.map +1 -0
  381. package/dist/src/middleware/cors.d.ts +12 -0
  382. package/dist/src/middleware/cors.d.ts.map +1 -0
  383. package/dist/src/middleware/cors.js +112 -0
  384. package/dist/src/middleware/cors.js.map +1 -0
  385. package/dist/src/middleware/envelope.d.ts +33 -0
  386. package/dist/src/middleware/envelope.d.ts.map +1 -0
  387. package/dist/src/middleware/envelope.js +32 -0
  388. package/dist/src/middleware/envelope.js.map +1 -0
  389. package/dist/src/middleware/idempotency.d.ts +3 -0
  390. package/dist/src/middleware/idempotency.d.ts.map +1 -0
  391. package/dist/src/middleware/idempotency.js +64 -0
  392. package/dist/src/middleware/idempotency.js.map +1 -0
  393. package/dist/src/middleware/metrics.d.ts +8 -0
  394. package/dist/src/middleware/metrics.d.ts.map +1 -0
  395. package/dist/src/middleware/metrics.js +25 -0
  396. package/dist/src/middleware/metrics.js.map +1 -0
  397. package/dist/src/middleware/rate-limit.d.ts +4 -0
  398. package/dist/src/middleware/rate-limit.d.ts.map +1 -0
  399. package/dist/src/middleware/rate-limit.js +73 -0
  400. package/dist/src/middleware/rate-limit.js.map +1 -0
  401. package/dist/src/middleware/request-id.d.ts +18 -0
  402. package/dist/src/middleware/request-id.d.ts.map +1 -0
  403. package/dist/src/middleware/request-id.js +23 -0
  404. package/dist/src/middleware/request-id.js.map +1 -0
  405. package/dist/src/middleware/stats.d.ts +4 -0
  406. package/dist/src/middleware/stats.d.ts.map +1 -0
  407. package/dist/src/middleware/stats.js +11 -0
  408. package/dist/src/middleware/stats.js.map +1 -0
  409. package/dist/src/middleware/workspace-access.d.ts +16 -0
  410. package/dist/src/middleware/workspace-access.d.ts.map +1 -0
  411. package/dist/src/middleware/workspace-access.js +115 -0
  412. package/dist/src/middleware/workspace-access.js.map +1 -0
  413. package/dist/src/models/schemas.d.ts +311 -0
  414. package/dist/src/models/schemas.d.ts.map +1 -0
  415. package/dist/src/models/schemas.js +281 -0
  416. package/dist/src/models/schemas.js.map +1 -0
  417. package/dist/src/routes/actions.d.ts +5 -0
  418. package/dist/src/routes/actions.d.ts.map +1 -0
  419. package/dist/src/routes/actions.js +199 -0
  420. package/dist/src/routes/actions.js.map +1 -0
  421. package/dist/src/routes/admin-agents.d.ts +5 -0
  422. package/dist/src/routes/admin-agents.d.ts.map +1 -0
  423. package/dist/src/routes/admin-agents.js +60 -0
  424. package/dist/src/routes/admin-agents.js.map +1 -0
  425. package/dist/src/routes/admin-config.d.ts +7 -0
  426. package/dist/src/routes/admin-config.d.ts.map +1 -0
  427. package/dist/src/routes/admin-config.js +209 -0
  428. package/dist/src/routes/admin-config.js.map +1 -0
  429. package/dist/src/routes/admin-economy.d.ts +5 -0
  430. package/dist/src/routes/admin-economy.d.ts.map +1 -0
  431. package/dist/src/routes/admin-economy.js +57 -0
  432. package/dist/src/routes/admin-economy.js.map +1 -0
  433. package/dist/src/routes/admin-extensions.d.ts +6 -0
  434. package/dist/src/routes/admin-extensions.d.ts.map +1 -0
  435. package/dist/src/routes/admin-extensions.js +619 -0
  436. package/dist/src/routes/admin-extensions.js.map +1 -0
  437. package/dist/src/routes/admin-features.d.ts +16 -0
  438. package/dist/src/routes/admin-features.d.ts.map +1 -0
  439. package/dist/src/routes/admin-features.js +672 -0
  440. package/dist/src/routes/admin-features.js.map +1 -0
  441. package/dist/src/routes/admin-maintenance.d.ts +8 -0
  442. package/dist/src/routes/admin-maintenance.d.ts.map +1 -0
  443. package/dist/src/routes/admin-maintenance.js +86 -0
  444. package/dist/src/routes/admin-maintenance.js.map +1 -0
  445. package/dist/src/routes/admin-memory.d.ts +12 -0
  446. package/dist/src/routes/admin-memory.d.ts.map +1 -0
  447. package/dist/src/routes/admin-memory.js +64 -0
  448. package/dist/src/routes/admin-memory.js.map +1 -0
  449. package/dist/src/routes/admin-monitoring.d.ts +5 -0
  450. package/dist/src/routes/admin-monitoring.d.ts.map +1 -0
  451. package/dist/src/routes/admin-monitoring.js +343 -0
  452. package/dist/src/routes/admin-monitoring.js.map +1 -0
  453. package/dist/src/routes/admin-prompts.d.ts +5 -0
  454. package/dist/src/routes/admin-prompts.d.ts.map +1 -0
  455. package/dist/src/routes/admin-prompts.js +198 -0
  456. package/dist/src/routes/admin-prompts.js.map +1 -0
  457. package/dist/src/routes/admin-scheduler.d.ts +6 -0
  458. package/dist/src/routes/admin-scheduler.d.ts.map +1 -0
  459. package/dist/src/routes/admin-scheduler.js +153 -0
  460. package/dist/src/routes/admin-scheduler.js.map +1 -0
  461. package/dist/src/routes/admin.d.ts +10 -0
  462. package/dist/src/routes/admin.d.ts.map +1 -0
  463. package/dist/src/routes/admin.js +847 -0
  464. package/dist/src/routes/admin.js.map +1 -0
  465. package/dist/src/routes/agents.d.ts +5 -0
  466. package/dist/src/routes/agents.d.ts.map +1 -0
  467. package/dist/src/routes/agents.js +946 -0
  468. package/dist/src/routes/agents.js.map +1 -0
  469. package/dist/src/routes/app-store.d.ts +25 -0
  470. package/dist/src/routes/app-store.d.ts.map +1 -0
  471. package/dist/src/routes/app-store.js +269 -0
  472. package/dist/src/routes/app-store.js.map +1 -0
  473. package/dist/src/routes/appeals.d.ts +5 -0
  474. package/dist/src/routes/appeals.d.ts.map +1 -0
  475. package/dist/src/routes/appeals.js +241 -0
  476. package/dist/src/routes/appeals.js.map +1 -0
  477. package/dist/src/routes/apps.d.ts +14 -0
  478. package/dist/src/routes/apps.d.ts.map +1 -0
  479. package/dist/src/routes/apps.js +395 -0
  480. package/dist/src/routes/apps.js.map +1 -0
  481. package/dist/src/routes/auth.d.ts +13 -0
  482. package/dist/src/routes/auth.d.ts.map +1 -0
  483. package/dist/src/routes/auth.js +517 -0
  484. package/dist/src/routes/auth.js.map +1 -0
  485. package/dist/src/routes/boards.d.ts +5 -0
  486. package/dist/src/routes/boards.d.ts.map +1 -0
  487. package/dist/src/routes/boards.js +614 -0
  488. package/dist/src/routes/boards.js.map +1 -0
  489. package/dist/src/routes/bootstrap.d.ts +6 -0
  490. package/dist/src/routes/bootstrap.d.ts.map +1 -0
  491. package/dist/src/routes/bootstrap.js +360 -0
  492. package/dist/src/routes/bootstrap.js.map +1 -0
  493. package/dist/src/routes/calibrator.d.ts +28 -0
  494. package/dist/src/routes/calibrator.d.ts.map +1 -0
  495. package/dist/src/routes/calibrator.js +556 -0
  496. package/dist/src/routes/calibrator.js.map +1 -0
  497. package/dist/src/routes/catalogue.d.ts +7 -0
  498. package/dist/src/routes/catalogue.d.ts.map +1 -0
  499. package/dist/src/routes/catalogue.js +377 -0
  500. package/dist/src/routes/catalogue.js.map +1 -0
  501. package/dist/src/routes/chat-instances.d.ts +5 -0
  502. package/dist/src/routes/chat-instances.d.ts.map +1 -0
  503. package/dist/src/routes/chat-instances.js +131 -0
  504. package/dist/src/routes/chat-instances.js.map +1 -0
  505. package/dist/src/routes/consent.d.ts +6 -0
  506. package/dist/src/routes/consent.d.ts.map +1 -0
  507. package/dist/src/routes/consent.js +188 -0
  508. package/dist/src/routes/consent.js.map +1 -0
  509. package/dist/src/routes/cortex.d.ts +5 -0
  510. package/dist/src/routes/cortex.d.ts.map +1 -0
  511. package/dist/src/routes/cortex.js +617 -0
  512. package/dist/src/routes/cortex.js.map +1 -0
  513. package/dist/src/routes/csm.d.ts +5 -0
  514. package/dist/src/routes/csm.d.ts.map +1 -0
  515. package/dist/src/routes/csm.js +258 -0
  516. package/dist/src/routes/csm.js.map +1 -0
  517. package/dist/src/routes/disputes.d.ts +5 -0
  518. package/dist/src/routes/disputes.d.ts.map +1 -0
  519. package/dist/src/routes/disputes.js +528 -0
  520. package/dist/src/routes/disputes.js.map +1 -0
  521. package/dist/src/routes/extensions.d.ts +6 -0
  522. package/dist/src/routes/extensions.d.ts.map +1 -0
  523. package/dist/src/routes/extensions.js +1149 -0
  524. package/dist/src/routes/extensions.js.map +1 -0
  525. package/dist/src/routes/federation-genesis.d.ts +11 -0
  526. package/dist/src/routes/federation-genesis.d.ts.map +1 -0
  527. package/dist/src/routes/federation-genesis.js +638 -0
  528. package/dist/src/routes/federation-genesis.js.map +1 -0
  529. package/dist/src/routes/federation-peer.d.ts +10 -0
  530. package/dist/src/routes/federation-peer.d.ts.map +1 -0
  531. package/dist/src/routes/federation-peer.js +613 -0
  532. package/dist/src/routes/federation-peer.js.map +1 -0
  533. package/dist/src/routes/federation-settlements.d.ts +10 -0
  534. package/dist/src/routes/federation-settlements.d.ts.map +1 -0
  535. package/dist/src/routes/federation-settlements.js +231 -0
  536. package/dist/src/routes/federation-settlements.js.map +1 -0
  537. package/dist/src/routes/federation-sync.d.ts +15 -0
  538. package/dist/src/routes/federation-sync.d.ts.map +1 -0
  539. package/dist/src/routes/federation-sync.js +629 -0
  540. package/dist/src/routes/federation-sync.js.map +1 -0
  541. package/dist/src/routes/federation.d.ts +15 -0
  542. package/dist/src/routes/federation.d.ts.map +1 -0
  543. package/dist/src/routes/federation.js +23 -0
  544. package/dist/src/routes/federation.js.map +1 -0
  545. package/dist/src/routes/flags.d.ts +5 -0
  546. package/dist/src/routes/flags.d.ts.map +1 -0
  547. package/dist/src/routes/flags.js +194 -0
  548. package/dist/src/routes/flags.js.map +1 -0
  549. package/dist/src/routes/foundry.d.ts +5 -0
  550. package/dist/src/routes/foundry.d.ts.map +1 -0
  551. package/dist/src/routes/foundry.js +955 -0
  552. package/dist/src/routes/foundry.js.map +1 -0
  553. package/dist/src/routes/generator-autopilot.d.ts +12 -0
  554. package/dist/src/routes/generator-autopilot.d.ts.map +1 -0
  555. package/dist/src/routes/generator-autopilot.js +71 -0
  556. package/dist/src/routes/generator-autopilot.js.map +1 -0
  557. package/dist/src/routes/generator.d.ts +5 -0
  558. package/dist/src/routes/generator.d.ts.map +1 -0
  559. package/dist/src/routes/generator.js +1313 -0
  560. package/dist/src/routes/generator.js.map +1 -0
  561. package/dist/src/routes/ghii.d.ts +16 -0
  562. package/dist/src/routes/ghii.d.ts.map +1 -0
  563. package/dist/src/routes/ghii.js +1115 -0
  564. package/dist/src/routes/ghii.js.map +1 -0
  565. package/dist/src/routes/instances.d.ts +31 -0
  566. package/dist/src/routes/instances.d.ts.map +1 -0
  567. package/dist/src/routes/instances.js +722 -0
  568. package/dist/src/routes/instances.js.map +1 -0
  569. package/dist/src/routes/knowledge.d.ts +33 -0
  570. package/dist/src/routes/knowledge.d.ts.map +1 -0
  571. package/dist/src/routes/knowledge.js +1108 -0
  572. package/dist/src/routes/knowledge.js.map +1 -0
  573. package/dist/src/routes/lib-data.d.ts +7 -0
  574. package/dist/src/routes/lib-data.d.ts.map +1 -0
  575. package/dist/src/routes/lib-data.js +189 -0
  576. package/dist/src/routes/lib-data.js.map +1 -0
  577. package/dist/src/routes/lib-social.d.ts +7 -0
  578. package/dist/src/routes/lib-social.d.ts.map +1 -0
  579. package/dist/src/routes/lib-social.js +159 -0
  580. package/dist/src/routes/lib-social.js.map +1 -0
  581. package/dist/src/routes/lib-storage.d.ts +7 -0
  582. package/dist/src/routes/lib-storage.d.ts.map +1 -0
  583. package/dist/src/routes/lib-storage.js +202 -0
  584. package/dist/src/routes/lib-storage.js.map +1 -0
  585. package/dist/src/routes/lib-tunnel.d.ts +8 -0
  586. package/dist/src/routes/lib-tunnel.d.ts.map +1 -0
  587. package/dist/src/routes/lib-tunnel.js +442 -0
  588. package/dist/src/routes/lib-tunnel.js.map +1 -0
  589. package/dist/src/routes/lib-wallet.d.ts +7 -0
  590. package/dist/src/routes/lib-wallet.d.ts.map +1 -0
  591. package/dist/src/routes/lib-wallet.js +129 -0
  592. package/dist/src/routes/lib-wallet.js.map +1 -0
  593. package/dist/src/routes/lib-work.d.ts +7 -0
  594. package/dist/src/routes/lib-work.d.ts.map +1 -0
  595. package/dist/src/routes/lib-work.js +210 -0
  596. package/dist/src/routes/lib-work.js.map +1 -0
  597. package/dist/src/routes/libs.d.ts +10 -0
  598. package/dist/src/routes/libs.d.ts.map +1 -0
  599. package/dist/src/routes/libs.js +989 -0
  600. package/dist/src/routes/libs.js.map +1 -0
  601. package/dist/src/routes/matches.d.ts +10 -0
  602. package/dist/src/routes/matches.d.ts.map +1 -0
  603. package/dist/src/routes/matches.js +218 -0
  604. package/dist/src/routes/matches.js.map +1 -0
  605. package/dist/src/routes/memory.d.ts +6 -0
  606. package/dist/src/routes/memory.d.ts.map +1 -0
  607. package/dist/src/routes/memory.js +796 -0
  608. package/dist/src/routes/memory.js.map +1 -0
  609. package/dist/src/routes/micro-memory.d.ts +5 -0
  610. package/dist/src/routes/micro-memory.d.ts.map +1 -0
  611. package/dist/src/routes/micro-memory.js +488 -0
  612. package/dist/src/routes/micro-memory.js.map +1 -0
  613. package/dist/src/routes/msm.d.ts +5 -0
  614. package/dist/src/routes/msm.d.ts.map +1 -0
  615. package/dist/src/routes/msm.js +242 -0
  616. package/dist/src/routes/msm.js.map +1 -0
  617. package/dist/src/routes/openrouter.d.ts +23 -0
  618. package/dist/src/routes/openrouter.d.ts.map +1 -0
  619. package/dist/src/routes/openrouter.js +337 -0
  620. package/dist/src/routes/openrouter.js.map +1 -0
  621. package/dist/src/routes/organisms.d.ts +5 -0
  622. package/dist/src/routes/organisms.d.ts.map +1 -0
  623. package/dist/src/routes/organisms.js +415 -0
  624. package/dist/src/routes/organisms.js.map +1 -0
  625. package/dist/src/routes/owners.d.ts +5 -0
  626. package/dist/src/routes/owners.d.ts.map +1 -0
  627. package/dist/src/routes/owners.js +637 -0
  628. package/dist/src/routes/owners.js.map +1 -0
  629. package/dist/src/routes/packages.d.ts +35 -0
  630. package/dist/src/routes/packages.d.ts.map +1 -0
  631. package/dist/src/routes/packages.js +600 -0
  632. package/dist/src/routes/packages.js.map +1 -0
  633. package/dist/src/routes/permissions.d.ts +5 -0
  634. package/dist/src/routes/permissions.d.ts.map +1 -0
  635. package/dist/src/routes/permissions.js +85 -0
  636. package/dist/src/routes/permissions.js.map +1 -0
  637. package/dist/src/routes/personal.d.ts +7 -0
  638. package/dist/src/routes/personal.d.ts.map +1 -0
  639. package/dist/src/routes/personal.js +594 -0
  640. package/dist/src/routes/personal.js.map +1 -0
  641. package/dist/src/routes/portal-api.d.ts +9 -0
  642. package/dist/src/routes/portal-api.d.ts.map +1 -0
  643. package/dist/src/routes/portal-api.js +49 -0
  644. package/dist/src/routes/portal-api.js.map +1 -0
  645. package/dist/src/routes/portal-human.d.ts +12 -0
  646. package/dist/src/routes/portal-human.d.ts.map +1 -0
  647. package/dist/src/routes/portal-human.js +2652 -0
  648. package/dist/src/routes/portal-human.js.map +1 -0
  649. package/dist/src/routes/portal.d.ts +24 -0
  650. package/dist/src/routes/portal.d.ts.map +1 -0
  651. package/dist/src/routes/portal.js +372 -0
  652. package/dist/src/routes/portal.js.map +1 -0
  653. package/dist/src/routes/portfolio.d.ts +5 -0
  654. package/dist/src/routes/portfolio.d.ts.map +1 -0
  655. package/dist/src/routes/portfolio.js +231 -0
  656. package/dist/src/routes/portfolio.js.map +1 -0
  657. package/dist/src/routes/profile.d.ts +5 -0
  658. package/dist/src/routes/profile.d.ts.map +1 -0
  659. package/dist/src/routes/profile.js +2042 -0
  660. package/dist/src/routes/profile.js.map +1 -0
  661. package/dist/src/routes/prompts.d.ts +5 -0
  662. package/dist/src/routes/prompts.d.ts.map +1 -0
  663. package/dist/src/routes/prompts.js +318 -0
  664. package/dist/src/routes/prompts.js.map +1 -0
  665. package/dist/src/routes/push.d.ts +6 -0
  666. package/dist/src/routes/push.d.ts.map +1 -0
  667. package/dist/src/routes/push.js +75 -0
  668. package/dist/src/routes/push.js.map +1 -0
  669. package/dist/src/routes/realtime.d.ts +7 -0
  670. package/dist/src/routes/realtime.d.ts.map +1 -0
  671. package/dist/src/routes/realtime.js +289 -0
  672. package/dist/src/routes/realtime.js.map +1 -0
  673. package/dist/src/routes/schemas.d.ts +5 -0
  674. package/dist/src/routes/schemas.d.ts.map +1 -0
  675. package/dist/src/routes/schemas.js +130 -0
  676. package/dist/src/routes/schemas.js.map +1 -0
  677. package/dist/src/routes/setup.d.ts +7 -0
  678. package/dist/src/routes/setup.d.ts.map +1 -0
  679. package/dist/src/routes/setup.js +243 -0
  680. package/dist/src/routes/setup.js.map +1 -0
  681. package/dist/src/routes/site.d.ts +6 -0
  682. package/dist/src/routes/site.d.ts.map +1 -0
  683. package/dist/src/routes/site.js +201 -0
  684. package/dist/src/routes/site.js.map +1 -0
  685. package/dist/src/routes/spec.d.ts +3 -0
  686. package/dist/src/routes/spec.d.ts.map +1 -0
  687. package/dist/src/routes/spec.js +47 -0
  688. package/dist/src/routes/spec.js.map +1 -0
  689. package/dist/src/routes/sse.d.ts +5 -0
  690. package/dist/src/routes/sse.d.ts.map +1 -0
  691. package/dist/src/routes/sse.js +66 -0
  692. package/dist/src/routes/sse.js.map +1 -0
  693. package/dist/src/routes/stats.d.ts +7 -0
  694. package/dist/src/routes/stats.d.ts.map +1 -0
  695. package/dist/src/routes/stats.js +98 -0
  696. package/dist/src/routes/stats.js.map +1 -0
  697. package/dist/src/routes/storage-files.d.ts +5 -0
  698. package/dist/src/routes/storage-files.d.ts.map +1 -0
  699. package/dist/src/routes/storage-files.js +460 -0
  700. package/dist/src/routes/storage-files.js.map +1 -0
  701. package/dist/src/routes/templates.d.ts +30 -0
  702. package/dist/src/routes/templates.d.ts.map +1 -0
  703. package/dist/src/routes/templates.js +511 -0
  704. package/dist/src/routes/templates.js.map +1 -0
  705. package/dist/src/routes/totp.d.ts +5 -0
  706. package/dist/src/routes/totp.d.ts.map +1 -0
  707. package/dist/src/routes/totp.js +166 -0
  708. package/dist/src/routes/totp.js.map +1 -0
  709. package/dist/src/routes/validate.d.ts +4 -0
  710. package/dist/src/routes/validate.d.ts.map +1 -0
  711. package/dist/src/routes/validate.js +71 -0
  712. package/dist/src/routes/validate.js.map +1 -0
  713. package/dist/src/routes/verification.d.ts +8 -0
  714. package/dist/src/routes/verification.d.ts.map +1 -0
  715. package/dist/src/routes/verification.js +259 -0
  716. package/dist/src/routes/verification.js.map +1 -0
  717. package/dist/src/routes/wallet.d.ts +18 -0
  718. package/dist/src/routes/wallet.d.ts.map +1 -0
  719. package/dist/src/routes/wallet.js +164 -0
  720. package/dist/src/routes/wallet.js.map +1 -0
  721. package/dist/src/routes/wellknown.d.ts +5 -0
  722. package/dist/src/routes/wellknown.d.ts.map +1 -0
  723. package/dist/src/routes/wellknown.js +57 -0
  724. package/dist/src/routes/wellknown.js.map +1 -0
  725. package/dist/src/routes/work.d.ts +21 -0
  726. package/dist/src/routes/work.d.ts.map +1 -0
  727. package/dist/src/routes/work.js +654 -0
  728. package/dist/src/routes/work.js.map +1 -0
  729. package/dist/src/schemas/knowledge-package.d.ts +203 -0
  730. package/dist/src/schemas/knowledge-package.d.ts.map +1 -0
  731. package/dist/src/schemas/knowledge-package.js +233 -0
  732. package/dist/src/schemas/knowledge-package.js.map +1 -0
  733. package/dist/src/server-bootstrap/config-init.d.ts +16 -0
  734. package/dist/src/server-bootstrap/config-init.d.ts.map +1 -0
  735. package/dist/src/server-bootstrap/config-init.js +113 -0
  736. package/dist/src/server-bootstrap/config-init.js.map +1 -0
  737. package/dist/src/server-bootstrap/middleware-guards.d.ts +15 -0
  738. package/dist/src/server-bootstrap/middleware-guards.d.ts.map +1 -0
  739. package/dist/src/server-bootstrap/middleware-guards.js +244 -0
  740. package/dist/src/server-bootstrap/middleware-guards.js.map +1 -0
  741. package/dist/src/server-bootstrap/routes-loader.d.ts +35 -0
  742. package/dist/src/server-bootstrap/routes-loader.d.ts.map +1 -0
  743. package/dist/src/server-bootstrap/routes-loader.js +290 -0
  744. package/dist/src/server-bootstrap/routes-loader.js.map +1 -0
  745. package/dist/src/server-bootstrap/service-init.d.ts +24 -0
  746. package/dist/src/server-bootstrap/service-init.d.ts.map +1 -0
  747. package/dist/src/server-bootstrap/service-init.js +195 -0
  748. package/dist/src/server-bootstrap/service-init.js.map +1 -0
  749. package/dist/src/server-bootstrap/static-files.d.ts +7 -0
  750. package/dist/src/server-bootstrap/static-files.d.ts.map +1 -0
  751. package/dist/src/server-bootstrap/static-files.js +119 -0
  752. package/dist/src/server-bootstrap/static-files.js.map +1 -0
  753. package/dist/src/server.d.ts +22 -0
  754. package/dist/src/server.d.ts.map +1 -0
  755. package/dist/src/server.js +133 -0
  756. package/dist/src/server.js.map +1 -0
  757. package/dist/src/services/cache-cleanup.d.ts +31 -0
  758. package/dist/src/services/cache-cleanup.d.ts.map +1 -0
  759. package/dist/src/services/cache-cleanup.js +123 -0
  760. package/dist/src/services/cache-cleanup.js.map +1 -0
  761. package/dist/src/services/catalogue-sync.d.ts +45 -0
  762. package/dist/src/services/catalogue-sync.d.ts.map +1 -0
  763. package/dist/src/services/catalogue-sync.js +196 -0
  764. package/dist/src/services/catalogue-sync.js.map +1 -0
  765. package/dist/src/services/component-registrar.d.ts +46 -0
  766. package/dist/src/services/component-registrar.d.ts.map +1 -0
  767. package/dist/src/services/component-registrar.js +389 -0
  768. package/dist/src/services/component-registrar.js.map +1 -0
  769. package/dist/src/services/config-loader.d.ts +42 -0
  770. package/dist/src/services/config-loader.d.ts.map +1 -0
  771. package/dist/src/services/config-loader.js +187 -0
  772. package/dist/src/services/config-loader.js.map +1 -0
  773. package/dist/src/services/config-provenance.d.ts +32 -0
  774. package/dist/src/services/config-provenance.d.ts.map +1 -0
  775. package/dist/src/services/config-provenance.js +59 -0
  776. package/dist/src/services/config-provenance.js.map +1 -0
  777. package/dist/src/services/config-schema.d.ts +52 -0
  778. package/dist/src/services/config-schema.d.ts.map +1 -0
  779. package/dist/src/services/config-schema.js +288 -0
  780. package/dist/src/services/config-schema.js.map +1 -0
  781. package/dist/src/services/consent.d.ts +43 -0
  782. package/dist/src/services/consent.d.ts.map +1 -0
  783. package/dist/src/services/consent.js +137 -0
  784. package/dist/src/services/consent.js.map +1 -0
  785. package/dist/src/services/consul-config.d.ts +30 -0
  786. package/dist/src/services/consul-config.d.ts.map +1 -0
  787. package/dist/src/services/consul-config.js +110 -0
  788. package/dist/src/services/consul-config.js.map +1 -0
  789. package/dist/src/services/core-jobs.d.ts +8 -0
  790. package/dist/src/services/core-jobs.d.ts.map +1 -0
  791. package/dist/src/services/core-jobs.js +161 -0
  792. package/dist/src/services/core-jobs.js.map +1 -0
  793. package/dist/src/services/cortex-manifest.d.ts +17 -0
  794. package/dist/src/services/cortex-manifest.d.ts.map +1 -0
  795. package/dist/src/services/cortex-manifest.js +343 -0
  796. package/dist/src/services/cortex-manifest.js.map +1 -0
  797. package/dist/src/services/cortex-seeder.d.ts +18 -0
  798. package/dist/src/services/cortex-seeder.d.ts.map +1 -0
  799. package/dist/src/services/cortex-seeder.js +86 -0
  800. package/dist/src/services/cortex-seeder.js.map +1 -0
  801. package/dist/src/services/cross-node-matching.d.ts +23 -0
  802. package/dist/src/services/cross-node-matching.d.ts.map +1 -0
  803. package/dist/src/services/cross-node-matching.js +62 -0
  804. package/dist/src/services/cross-node-matching.js.map +1 -0
  805. package/dist/src/services/csm-parser.d.ts +57 -0
  806. package/dist/src/services/csm-parser.d.ts.map +1 -0
  807. package/dist/src/services/csm-parser.js +161 -0
  808. package/dist/src/services/csm-parser.js.map +1 -0
  809. package/dist/src/services/csm-seed.d.ts +15 -0
  810. package/dist/src/services/csm-seed.d.ts.map +1 -0
  811. package/dist/src/services/csm-seed.js +89 -0
  812. package/dist/src/services/csm-seed.js.map +1 -0
  813. package/dist/src/services/directory.d.ts +86 -0
  814. package/dist/src/services/directory.d.ts.map +1 -0
  815. package/dist/src/services/directory.js +307 -0
  816. package/dist/src/services/directory.js.map +1 -0
  817. package/dist/src/services/email-templates.d.ts +29 -0
  818. package/dist/src/services/email-templates.d.ts.map +1 -0
  819. package/dist/src/services/email-templates.js +204 -0
  820. package/dist/src/services/email-templates.js.map +1 -0
  821. package/dist/src/services/email.d.ts +18 -0
  822. package/dist/src/services/email.d.ts.map +1 -0
  823. package/dist/src/services/email.js +102 -0
  824. package/dist/src/services/email.js.map +1 -0
  825. package/dist/src/services/encryption.d.ts +31 -0
  826. package/dist/src/services/encryption.d.ts.map +1 -0
  827. package/dist/src/services/encryption.js +51 -0
  828. package/dist/src/services/encryption.js.map +1 -0
  829. package/dist/src/services/eudiw.d.ts +15 -0
  830. package/dist/src/services/eudiw.d.ts.map +1 -0
  831. package/dist/src/services/eudiw.js +89 -0
  832. package/dist/src/services/eudiw.js.map +1 -0
  833. package/dist/src/services/event-bus.d.ts +8 -0
  834. package/dist/src/services/event-bus.d.ts.map +1 -0
  835. package/dist/src/services/event-bus.js +13 -0
  836. package/dist/src/services/event-bus.js.map +1 -0
  837. package/dist/src/services/extension-runtime.d.ts +72 -0
  838. package/dist/src/services/extension-runtime.d.ts.map +1 -0
  839. package/dist/src/services/extension-runtime.js +282 -0
  840. package/dist/src/services/extension-runtime.js.map +1 -0
  841. package/dist/src/services/federation-helpers.d.ts +37 -0
  842. package/dist/src/services/federation-helpers.d.ts.map +1 -0
  843. package/dist/src/services/federation-helpers.js +100 -0
  844. package/dist/src/services/federation-helpers.js.map +1 -0
  845. package/dist/src/services/federation.d.ts +32 -0
  846. package/dist/src/services/federation.d.ts.map +1 -0
  847. package/dist/src/services/federation.js +201 -0
  848. package/dist/src/services/federation.js.map +1 -0
  849. package/dist/src/services/foundry-debug.d.ts +77 -0
  850. package/dist/src/services/foundry-debug.d.ts.map +1 -0
  851. package/dist/src/services/foundry-debug.js +214 -0
  852. package/dist/src/services/foundry-debug.js.map +1 -0
  853. package/dist/src/services/foundry-registration.d.ts +42 -0
  854. package/dist/src/services/foundry-registration.d.ts.map +1 -0
  855. package/dist/src/services/foundry-registration.js +330 -0
  856. package/dist/src/services/foundry-registration.js.map +1 -0
  857. package/dist/src/services/foundry-testing.d.ts +90 -0
  858. package/dist/src/services/foundry-testing.d.ts.map +1 -0
  859. package/dist/src/services/foundry-testing.js +253 -0
  860. package/dist/src/services/foundry-testing.js.map +1 -0
  861. package/dist/src/services/foundry-validate.d.ts +115 -0
  862. package/dist/src/services/foundry-validate.d.ts.map +1 -0
  863. package/dist/src/services/foundry-validate.js +781 -0
  864. package/dist/src/services/foundry-validate.js.map +1 -0
  865. package/dist/src/services/generator-autopilot.d.ts +37 -0
  866. package/dist/src/services/generator-autopilot.d.ts.map +1 -0
  867. package/dist/src/services/generator-autopilot.js +1076 -0
  868. package/dist/src/services/generator-autopilot.js.map +1 -0
  869. package/dist/src/services/generator-debug.d.ts +79 -0
  870. package/dist/src/services/generator-debug.d.ts.map +1 -0
  871. package/dist/src/services/generator-debug.js +218 -0
  872. package/dist/src/services/generator-debug.js.map +1 -0
  873. package/dist/src/services/generator-prompt-seeds.d.ts +13 -0
  874. package/dist/src/services/generator-prompt-seeds.d.ts.map +1 -0
  875. package/dist/src/services/generator-prompt-seeds.js +2694 -0
  876. package/dist/src/services/generator-prompt-seeds.js.map +1 -0
  877. package/dist/src/services/generator-prompts/bundle.d.ts +17 -0
  878. package/dist/src/services/generator-prompts/bundle.d.ts.map +1 -0
  879. package/dist/src/services/generator-prompts/bundle.js +95 -0
  880. package/dist/src/services/generator-prompts/bundle.js.map +1 -0
  881. package/dist/src/services/generator-prompts/index.d.ts +48 -0
  882. package/dist/src/services/generator-prompts/index.d.ts.map +1 -0
  883. package/dist/src/services/generator-prompts/index.js +97 -0
  884. package/dist/src/services/generator-prompts/index.js.map +1 -0
  885. package/dist/src/services/generator-prompts/resolvers.d.ts +21 -0
  886. package/dist/src/services/generator-prompts/resolvers.d.ts.map +1 -0
  887. package/dist/src/services/generator-prompts/resolvers.js +1553 -0
  888. package/dist/src/services/generator-prompts/resolvers.js.map +1 -0
  889. package/dist/src/services/generator-prompts/spec-validate.d.ts +29 -0
  890. package/dist/src/services/generator-prompts/spec-validate.d.ts.map +1 -0
  891. package/dist/src/services/generator-prompts/spec-validate.js +190 -0
  892. package/dist/src/services/generator-prompts/spec-validate.js.map +1 -0
  893. package/dist/src/services/generator-prompts/strip.d.ts +13 -0
  894. package/dist/src/services/generator-prompts/strip.d.ts.map +1 -0
  895. package/dist/src/services/generator-prompts/strip.js +60 -0
  896. package/dist/src/services/generator-prompts/strip.js.map +1 -0
  897. package/dist/src/services/generator-prompts/types.d.ts +229 -0
  898. package/dist/src/services/generator-prompts/types.d.ts.map +1 -0
  899. package/dist/src/services/generator-prompts/types.js +8 -0
  900. package/dist/src/services/generator-prompts/types.js.map +1 -0
  901. package/dist/src/services/generator-prompts/validate.d.ts +48 -0
  902. package/dist/src/services/generator-prompts/validate.d.ts.map +1 -0
  903. package/dist/src/services/generator-prompts/validate.js +927 -0
  904. package/dist/src/services/generator-prompts/validate.js.map +1 -0
  905. package/dist/src/services/generator-registration.d.ts +43 -0
  906. package/dist/src/services/generator-registration.d.ts.map +1 -0
  907. package/dist/src/services/generator-registration.js +343 -0
  908. package/dist/src/services/generator-registration.js.map +1 -0
  909. package/dist/src/services/generator-testing.d.ts +93 -0
  910. package/dist/src/services/generator-testing.d.ts.map +1 -0
  911. package/dist/src/services/generator-testing.js +300 -0
  912. package/dist/src/services/generator-testing.js.map +1 -0
  913. package/dist/src/services/generator-validate.d.ts +117 -0
  914. package/dist/src/services/generator-validate.d.ts.map +1 -0
  915. package/dist/src/services/generator-validate.js +790 -0
  916. package/dist/src/services/generator-validate.js.map +1 -0
  917. package/dist/src/services/genesis-peering.d.ts +12 -0
  918. package/dist/src/services/genesis-peering.d.ts.map +1 -0
  919. package/dist/src/services/genesis-peering.js +91 -0
  920. package/dist/src/services/genesis-peering.js.map +1 -0
  921. package/dist/src/services/genesis-sync.d.ts +29 -0
  922. package/dist/src/services/genesis-sync.d.ts.map +1 -0
  923. package/dist/src/services/genesis-sync.js +370 -0
  924. package/dist/src/services/genesis-sync.js.map +1 -0
  925. package/dist/src/services/hooks.d.ts +21 -0
  926. package/dist/src/services/hooks.d.ts.map +1 -0
  927. package/dist/src/services/hooks.js +85 -0
  928. package/dist/src/services/hooks.js.map +1 -0
  929. package/dist/src/services/job-seeding.d.ts +7 -0
  930. package/dist/src/services/job-seeding.d.ts.map +1 -0
  931. package/dist/src/services/job-seeding.js +39 -0
  932. package/dist/src/services/job-seeding.js.map +1 -0
  933. package/dist/src/services/knowledge.d.ts +13 -0
  934. package/dist/src/services/knowledge.d.ts.map +1 -0
  935. package/dist/src/services/knowledge.js +15 -0
  936. package/dist/src/services/knowledge.js.map +1 -0
  937. package/dist/src/services/mailbox-notification.d.ts +37 -0
  938. package/dist/src/services/mailbox-notification.d.ts.map +1 -0
  939. package/dist/src/services/mailbox-notification.js +249 -0
  940. package/dist/src/services/mailbox-notification.js.map +1 -0
  941. package/dist/src/services/mailbox.d.ts +16 -0
  942. package/dist/src/services/mailbox.d.ts.map +1 -0
  943. package/dist/src/services/mailbox.js +77 -0
  944. package/dist/src/services/mailbox.js.map +1 -0
  945. package/dist/src/services/match-notification.d.ts +12 -0
  946. package/dist/src/services/match-notification.d.ts.map +1 -0
  947. package/dist/src/services/match-notification.js +121 -0
  948. package/dist/src/services/match-notification.js.map +1 -0
  949. package/dist/src/services/matching.d.ts +54 -0
  950. package/dist/src/services/matching.d.ts.map +1 -0
  951. package/dist/src/services/matching.js +293 -0
  952. package/dist/src/services/matching.js.map +1 -0
  953. package/dist/src/services/memory-replication.d.ts +43 -0
  954. package/dist/src/services/memory-replication.d.ts.map +1 -0
  955. package/dist/src/services/memory-replication.js +213 -0
  956. package/dist/src/services/memory-replication.js.map +1 -0
  957. package/dist/src/services/morsel.d.ts +49 -0
  958. package/dist/src/services/morsel.d.ts.map +1 -0
  959. package/dist/src/services/morsel.js +174 -0
  960. package/dist/src/services/morsel.js.map +1 -0
  961. package/dist/src/services/msm-parser.d.ts +55 -0
  962. package/dist/src/services/msm-parser.d.ts.map +1 -0
  963. package/dist/src/services/msm-parser.js +186 -0
  964. package/dist/src/services/msm-parser.js.map +1 -0
  965. package/dist/src/services/mydata-receipt.d.ts +29 -0
  966. package/dist/src/services/mydata-receipt.d.ts.map +1 -0
  967. package/dist/src/services/mydata-receipt.js +31 -0
  968. package/dist/src/services/mydata-receipt.js.map +1 -0
  969. package/dist/src/services/notification-templates.d.ts +40 -0
  970. package/dist/src/services/notification-templates.d.ts.map +1 -0
  971. package/dist/src/services/notification-templates.js +109 -0
  972. package/dist/src/services/notification-templates.js.map +1 -0
  973. package/dist/src/services/openrouter.d.ts +30 -0
  974. package/dist/src/services/openrouter.d.ts.map +1 -0
  975. package/dist/src/services/openrouter.js +95 -0
  976. package/dist/src/services/openrouter.js.map +1 -0
  977. package/dist/src/services/organism-reputation.d.ts +7 -0
  978. package/dist/src/services/organism-reputation.d.ts.map +1 -0
  979. package/dist/src/services/organism-reputation.js +107 -0
  980. package/dist/src/services/organism-reputation.js.map +1 -0
  981. package/dist/src/services/package-hash.d.ts +19 -0
  982. package/dist/src/services/package-hash.d.ts.map +1 -0
  983. package/dist/src/services/package-hash.js +22 -0
  984. package/dist/src/services/package-hash.js.map +1 -0
  985. package/dist/src/services/package-zip.d.ts +60 -0
  986. package/dist/src/services/package-zip.d.ts.map +1 -0
  987. package/dist/src/services/package-zip.js +267 -0
  988. package/dist/src/services/package-zip.js.map +1 -0
  989. package/dist/src/services/password.d.ts +9 -0
  990. package/dist/src/services/password.d.ts.map +1 -0
  991. package/dist/src/services/password.js +32 -0
  992. package/dist/src/services/password.js.map +1 -0
  993. package/dist/src/services/personal-routing.d.ts +21 -0
  994. package/dist/src/services/personal-routing.d.ts.map +1 -0
  995. package/dist/src/services/personal-routing.js +77 -0
  996. package/dist/src/services/personal-routing.js.map +1 -0
  997. package/dist/src/services/personal-tunnel.d.ts +39 -0
  998. package/dist/src/services/personal-tunnel.d.ts.map +1 -0
  999. package/dist/src/services/personal-tunnel.js +371 -0
  1000. package/dist/src/services/personal-tunnel.js.map +1 -0
  1001. package/dist/src/services/profile-schemas.d.ts +12 -0
  1002. package/dist/src/services/profile-schemas.d.ts.map +1 -0
  1003. package/dist/src/services/profile-schemas.js +100 -0
  1004. package/dist/src/services/profile-schemas.js.map +1 -0
  1005. package/dist/src/services/prometheus.d.ts +32 -0
  1006. package/dist/src/services/prometheus.d.ts.map +1 -0
  1007. package/dist/src/services/prometheus.js +162 -0
  1008. package/dist/src/services/prometheus.js.map +1 -0
  1009. package/dist/src/services/prompt-defaults.d.ts +33 -0
  1010. package/dist/src/services/prompt-defaults.d.ts.map +1 -0
  1011. package/dist/src/services/prompt-defaults.js +1675 -0
  1012. package/dist/src/services/prompt-defaults.js.map +1 -0
  1013. package/dist/src/services/prompt-seeder.d.ts +8 -0
  1014. package/dist/src/services/prompt-seeder.d.ts.map +1 -0
  1015. package/dist/src/services/prompt-seeder.js +65 -0
  1016. package/dist/src/services/prompt-seeder.js.map +1 -0
  1017. package/dist/src/services/prompt-variables.d.ts +15 -0
  1018. package/dist/src/services/prompt-variables.d.ts.map +1 -0
  1019. package/dist/src/services/prompt-variables.js +34 -0
  1020. package/dist/src/services/prompt-variables.js.map +1 -0
  1021. package/dist/src/services/push.d.ts +26 -0
  1022. package/dist/src/services/push.d.ts.map +1 -0
  1023. package/dist/src/services/push.js +70 -0
  1024. package/dist/src/services/push.js.map +1 -0
  1025. package/dist/src/services/quota.d.ts +45 -0
  1026. package/dist/src/services/quota.d.ts.map +1 -0
  1027. package/dist/src/services/quota.js +129 -0
  1028. package/dist/src/services/quota.js.map +1 -0
  1029. package/dist/src/services/realtime-manager.d.ts +144 -0
  1030. package/dist/src/services/realtime-manager.d.ts.map +1 -0
  1031. package/dist/src/services/realtime-manager.js +640 -0
  1032. package/dist/src/services/realtime-manager.js.map +1 -0
  1033. package/dist/src/services/scheduler.d.ts +55 -0
  1034. package/dist/src/services/scheduler.d.ts.map +1 -0
  1035. package/dist/src/services/scheduler.js +420 -0
  1036. package/dist/src/services/scheduler.js.map +1 -0
  1037. package/dist/src/services/schema-validator.d.ts +20 -0
  1038. package/dist/src/services/schema-validator.d.ts.map +1 -0
  1039. package/dist/src/services/schema-validator.js +68 -0
  1040. package/dist/src/services/schema-validator.js.map +1 -0
  1041. package/dist/src/services/site-sync.d.ts +15 -0
  1042. package/dist/src/services/site-sync.d.ts.map +1 -0
  1043. package/dist/src/services/site-sync.js +99 -0
  1044. package/dist/src/services/site-sync.js.map +1 -0
  1045. package/dist/src/services/site.d.ts +65 -0
  1046. package/dist/src/services/site.d.ts.map +1 -0
  1047. package/dist/src/services/site.js +378 -0
  1048. package/dist/src/services/site.js.map +1 -0
  1049. package/dist/src/services/stats.d.ts +75 -0
  1050. package/dist/src/services/stats.d.ts.map +1 -0
  1051. package/dist/src/services/stats.js +124 -0
  1052. package/dist/src/services/stats.js.map +1 -0
  1053. package/dist/src/services/sync-health.d.ts +53 -0
  1054. package/dist/src/services/sync-health.d.ts.map +1 -0
  1055. package/dist/src/services/sync-health.js +122 -0
  1056. package/dist/src/services/sync-health.js.map +1 -0
  1057. package/dist/src/services/sync-scheduler.d.ts +25 -0
  1058. package/dist/src/services/sync-scheduler.d.ts.map +1 -0
  1059. package/dist/src/services/sync-scheduler.js +211 -0
  1060. package/dist/src/services/sync-scheduler.js.map +1 -0
  1061. package/dist/src/services/totp.d.ts +31 -0
  1062. package/dist/src/services/totp.d.ts.map +1 -0
  1063. package/dist/src/services/totp.js +96 -0
  1064. package/dist/src/services/totp.js.map +1 -0
  1065. package/dist/src/services/trust-broadcast.d.ts +37 -0
  1066. package/dist/src/services/trust-broadcast.d.ts.map +1 -0
  1067. package/dist/src/services/trust-broadcast.js +107 -0
  1068. package/dist/src/services/trust-broadcast.js.map +1 -0
  1069. package/dist/src/services/trust.d.ts +16 -0
  1070. package/dist/src/services/trust.d.ts.map +1 -0
  1071. package/dist/src/services/trust.js +109 -0
  1072. package/dist/src/services/trust.js.map +1 -0
  1073. package/dist/src/services/vc-issuer.d.ts +14 -0
  1074. package/dist/src/services/vc-issuer.d.ts.map +1 -0
  1075. package/dist/src/services/vc-issuer.js +24 -0
  1076. package/dist/src/services/vc-issuer.js.map +1 -0
  1077. package/dist/src/storage/interface.d.ts +1161 -0
  1078. package/dist/src/storage/interface.d.ts.map +1 -0
  1079. package/dist/src/storage/interface.js +2 -0
  1080. package/dist/src/storage/interface.js.map +1 -0
  1081. package/dist/src/storage/pattern-utils.d.ts +20 -0
  1082. package/dist/src/storage/pattern-utils.d.ts.map +1 -0
  1083. package/dist/src/storage/pattern-utils.js +57 -0
  1084. package/dist/src/storage/pattern-utils.js.map +1 -0
  1085. package/dist/src/storage/providers/mongodb/index.d.ts +608 -0
  1086. package/dist/src/storage/providers/mongodb/index.d.ts.map +1 -0
  1087. package/dist/src/storage/providers/mongodb/index.js +4931 -0
  1088. package/dist/src/storage/providers/mongodb/index.js.map +1 -0
  1089. package/dist/src/storage/providers/sqlite/index.d.ts +602 -0
  1090. package/dist/src/storage/providers/sqlite/index.d.ts.map +1 -0
  1091. package/dist/src/storage/providers/sqlite/index.js +4156 -0
  1092. package/dist/src/storage/providers/sqlite/index.js.map +1 -0
  1093. package/dist/src/storage/providers/sqlite/repos/action.d.ts +13 -0
  1094. package/dist/src/storage/providers/sqlite/repos/action.d.ts.map +1 -0
  1095. package/dist/src/storage/providers/sqlite/repos/action.js +79 -0
  1096. package/dist/src/storage/providers/sqlite/repos/action.js.map +1 -0
  1097. package/dist/src/storage/providers/sqlite/repos/agent.d.ts +13 -0
  1098. package/dist/src/storage/providers/sqlite/repos/agent.d.ts.map +1 -0
  1099. package/dist/src/storage/providers/sqlite/repos/agent.js +103 -0
  1100. package/dist/src/storage/providers/sqlite/repos/agent.js.map +1 -0
  1101. package/dist/src/storage/providers/sqlite/repos/auth.d.ts +56 -0
  1102. package/dist/src/storage/providers/sqlite/repos/auth.d.ts.map +1 -0
  1103. package/dist/src/storage/providers/sqlite/repos/auth.js +282 -0
  1104. package/dist/src/storage/providers/sqlite/repos/auth.js.map +1 -0
  1105. package/dist/src/storage/providers/sqlite/repos/board.d.ts +24 -0
  1106. package/dist/src/storage/providers/sqlite/repos/board.d.ts.map +1 -0
  1107. package/dist/src/storage/providers/sqlite/repos/board.js +154 -0
  1108. package/dist/src/storage/providers/sqlite/repos/board.js.map +1 -0
  1109. package/dist/src/storage/providers/sqlite/repos/community.d.ts +33 -0
  1110. package/dist/src/storage/providers/sqlite/repos/community.d.ts.map +1 -0
  1111. package/dist/src/storage/providers/sqlite/repos/community.js +202 -0
  1112. package/dist/src/storage/providers/sqlite/repos/community.js.map +1 -0
  1113. package/dist/src/storage/providers/sqlite/repos/consent.d.ts +23 -0
  1114. package/dist/src/storage/providers/sqlite/repos/consent.d.ts.map +1 -0
  1115. package/dist/src/storage/providers/sqlite/repos/consent.js +187 -0
  1116. package/dist/src/storage/providers/sqlite/repos/consent.js.map +1 -0
  1117. package/dist/src/storage/providers/sqlite/repos/dispute.d.ts +20 -0
  1118. package/dist/src/storage/providers/sqlite/repos/dispute.d.ts.map +1 -0
  1119. package/dist/src/storage/providers/sqlite/repos/dispute.js +118 -0
  1120. package/dist/src/storage/providers/sqlite/repos/dispute.js.map +1 -0
  1121. package/dist/src/storage/providers/sqlite/repos/flag.d.ts +26 -0
  1122. package/dist/src/storage/providers/sqlite/repos/flag.d.ts.map +1 -0
  1123. package/dist/src/storage/providers/sqlite/repos/flag.js +147 -0
  1124. package/dist/src/storage/providers/sqlite/repos/flag.js.map +1 -0
  1125. package/dist/src/storage/providers/sqlite/repos/identity.d.ts +36 -0
  1126. package/dist/src/storage/providers/sqlite/repos/identity.d.ts.map +1 -0
  1127. package/dist/src/storage/providers/sqlite/repos/identity.js +297 -0
  1128. package/dist/src/storage/providers/sqlite/repos/identity.js.map +1 -0
  1129. package/dist/src/storage/providers/sqlite/repos/mailbox.d.ts +18 -0
  1130. package/dist/src/storage/providers/sqlite/repos/mailbox.d.ts.map +1 -0
  1131. package/dist/src/storage/providers/sqlite/repos/mailbox.js +91 -0
  1132. package/dist/src/storage/providers/sqlite/repos/mailbox.js.map +1 -0
  1133. package/dist/src/storage/providers/sqlite/repos/memory.d.ts +28 -0
  1134. package/dist/src/storage/providers/sqlite/repos/memory.d.ts.map +1 -0
  1135. package/dist/src/storage/providers/sqlite/repos/memory.js +152 -0
  1136. package/dist/src/storage/providers/sqlite/repos/memory.js.map +1 -0
  1137. package/dist/src/storage/providers/sqlite/repos/owner.d.ts +14 -0
  1138. package/dist/src/storage/providers/sqlite/repos/owner.d.ts.map +1 -0
  1139. package/dist/src/storage/providers/sqlite/repos/owner.js +124 -0
  1140. package/dist/src/storage/providers/sqlite/repos/owner.js.map +1 -0
  1141. package/dist/src/storage/providers/sqlite/repos/service-manifest.d.ts +17 -0
  1142. package/dist/src/storage/providers/sqlite/repos/service-manifest.d.ts.map +1 -0
  1143. package/dist/src/storage/providers/sqlite/repos/service-manifest.js +114 -0
  1144. package/dist/src/storage/providers/sqlite/repos/service-manifest.js.map +1 -0
  1145. package/dist/src/storage/providers/sqlite/repos/storage-file.d.ts +19 -0
  1146. package/dist/src/storage/providers/sqlite/repos/storage-file.d.ts.map +1 -0
  1147. package/dist/src/storage/providers/sqlite/repos/storage-file.js +128 -0
  1148. package/dist/src/storage/providers/sqlite/repos/storage-file.js.map +1 -0
  1149. package/dist/src/storage/providers/sqlite/repos/work.d.ts +13 -0
  1150. package/dist/src/storage/providers/sqlite/repos/work.d.ts.map +1 -0
  1151. package/dist/src/storage/providers/sqlite/repos/work.js +86 -0
  1152. package/dist/src/storage/providers/sqlite/repos/work.js.map +1 -0
  1153. package/dist/src/storage/providers/sqlite/schema.d.ts +7 -0
  1154. package/dist/src/storage/providers/sqlite/schema.d.ts.map +1 -0
  1155. package/dist/src/storage/providers/sqlite/schema.js +1090 -0
  1156. package/dist/src/storage/providers/sqlite/schema.js.map +1 -0
  1157. package/dist/src/storage/repositories/action.repository.d.ts +14 -0
  1158. package/dist/src/storage/repositories/action.repository.d.ts.map +1 -0
  1159. package/dist/src/storage/repositories/action.repository.js +2 -0
  1160. package/dist/src/storage/repositories/action.repository.js.map +1 -0
  1161. package/dist/src/storage/repositories/agent.repository.d.ts +18 -0
  1162. package/dist/src/storage/repositories/agent.repository.d.ts.map +1 -0
  1163. package/dist/src/storage/repositories/agent.repository.js +2 -0
  1164. package/dist/src/storage/repositories/agent.repository.js.map +1 -0
  1165. package/dist/src/storage/repositories/app-marketplace.repository.d.ts +9 -0
  1166. package/dist/src/storage/repositories/app-marketplace.repository.d.ts.map +1 -0
  1167. package/dist/src/storage/repositories/app-marketplace.repository.js +2 -0
  1168. package/dist/src/storage/repositories/app-marketplace.repository.js.map +1 -0
  1169. package/dist/src/storage/repositories/app.repository.d.ts +17 -0
  1170. package/dist/src/storage/repositories/app.repository.d.ts.map +1 -0
  1171. package/dist/src/storage/repositories/app.repository.js +2 -0
  1172. package/dist/src/storage/repositories/app.repository.js.map +1 -0
  1173. package/dist/src/storage/repositories/auth.repository.d.ts +6 -0
  1174. package/dist/src/storage/repositories/auth.repository.d.ts.map +1 -0
  1175. package/dist/src/storage/repositories/auth.repository.js +2 -0
  1176. package/dist/src/storage/repositories/auth.repository.js.map +1 -0
  1177. package/dist/src/storage/repositories/board.repository.d.ts +27 -0
  1178. package/dist/src/storage/repositories/board.repository.d.ts.map +1 -0
  1179. package/dist/src/storage/repositories/board.repository.js +2 -0
  1180. package/dist/src/storage/repositories/board.repository.js.map +1 -0
  1181. package/dist/src/storage/repositories/catalogue.repository.d.ts +18 -0
  1182. package/dist/src/storage/repositories/catalogue.repository.d.ts.map +1 -0
  1183. package/dist/src/storage/repositories/catalogue.repository.js +2 -0
  1184. package/dist/src/storage/repositories/catalogue.repository.js.map +1 -0
  1185. package/dist/src/storage/repositories/config.repository.d.ts +17 -0
  1186. package/dist/src/storage/repositories/config.repository.d.ts.map +1 -0
  1187. package/dist/src/storage/repositories/config.repository.js +2 -0
  1188. package/dist/src/storage/repositories/config.repository.js.map +1 -0
  1189. package/dist/src/storage/repositories/consent.repository.d.ts +19 -0
  1190. package/dist/src/storage/repositories/consent.repository.d.ts.map +1 -0
  1191. package/dist/src/storage/repositories/consent.repository.js +2 -0
  1192. package/dist/src/storage/repositories/consent.repository.js.map +1 -0
  1193. package/dist/src/storage/repositories/device-auth.repository.d.ts +11 -0
  1194. package/dist/src/storage/repositories/device-auth.repository.d.ts.map +1 -0
  1195. package/dist/src/storage/repositories/device-auth.repository.js +2 -0
  1196. package/dist/src/storage/repositories/device-auth.repository.js.map +1 -0
  1197. package/dist/src/storage/repositories/dispute.repository.d.ts +12 -0
  1198. package/dist/src/storage/repositories/dispute.repository.d.ts.map +1 -0
  1199. package/dist/src/storage/repositories/dispute.repository.js +2 -0
  1200. package/dist/src/storage/repositories/dispute.repository.js.map +1 -0
  1201. package/dist/src/storage/repositories/extension-instance.repository.d.ts +9 -0
  1202. package/dist/src/storage/repositories/extension-instance.repository.d.ts.map +1 -0
  1203. package/dist/src/storage/repositories/extension-instance.repository.js +2 -0
  1204. package/dist/src/storage/repositories/extension-instance.repository.js.map +1 -0
  1205. package/dist/src/storage/repositories/federation.repository.d.ts +37 -0
  1206. package/dist/src/storage/repositories/federation.repository.d.ts.map +1 -0
  1207. package/dist/src/storage/repositories/federation.repository.js +2 -0
  1208. package/dist/src/storage/repositories/federation.repository.js.map +1 -0
  1209. package/dist/src/storage/repositories/file.repository.d.ts +14 -0
  1210. package/dist/src/storage/repositories/file.repository.d.ts.map +1 -0
  1211. package/dist/src/storage/repositories/file.repository.js +2 -0
  1212. package/dist/src/storage/repositories/file.repository.js.map +1 -0
  1213. package/dist/src/storage/repositories/identity.repository.d.ts +29 -0
  1214. package/dist/src/storage/repositories/identity.repository.d.ts.map +1 -0
  1215. package/dist/src/storage/repositories/identity.repository.js +2 -0
  1216. package/dist/src/storage/repositories/identity.repository.js.map +1 -0
  1217. package/dist/src/storage/repositories/index.d.ts +34 -0
  1218. package/dist/src/storage/repositories/index.d.ts.map +1 -0
  1219. package/dist/src/storage/repositories/index.js +2 -0
  1220. package/dist/src/storage/repositories/index.js.map +1 -0
  1221. package/dist/src/storage/repositories/knowledge.repository.d.ts +18 -0
  1222. package/dist/src/storage/repositories/knowledge.repository.d.ts.map +1 -0
  1223. package/dist/src/storage/repositories/knowledge.repository.js +2 -0
  1224. package/dist/src/storage/repositories/knowledge.repository.js.map +1 -0
  1225. package/dist/src/storage/repositories/marketplace.repository.d.ts +23 -0
  1226. package/dist/src/storage/repositories/marketplace.repository.d.ts.map +1 -0
  1227. package/dist/src/storage/repositories/marketplace.repository.js +2 -0
  1228. package/dist/src/storage/repositories/marketplace.repository.js.map +1 -0
  1229. package/dist/src/storage/repositories/memory.repository.d.ts +32 -0
  1230. package/dist/src/storage/repositories/memory.repository.d.ts.map +1 -0
  1231. package/dist/src/storage/repositories/memory.repository.js +2 -0
  1232. package/dist/src/storage/repositories/memory.repository.js.map +1 -0
  1233. package/dist/src/storage/repositories/micro-memory.repository.d.ts +10 -0
  1234. package/dist/src/storage/repositories/micro-memory.repository.d.ts.map +1 -0
  1235. package/dist/src/storage/repositories/micro-memory.repository.js +2 -0
  1236. package/dist/src/storage/repositories/micro-memory.repository.js.map +1 -0
  1237. package/dist/src/storage/repositories/moderation.repository.d.ts +36 -0
  1238. package/dist/src/storage/repositories/moderation.repository.d.ts.map +1 -0
  1239. package/dist/src/storage/repositories/moderation.repository.js +2 -0
  1240. package/dist/src/storage/repositories/moderation.repository.js.map +1 -0
  1241. package/dist/src/storage/repositories/node.repository.d.ts +59 -0
  1242. package/dist/src/storage/repositories/node.repository.d.ts.map +1 -0
  1243. package/dist/src/storage/repositories/node.repository.js +2 -0
  1244. package/dist/src/storage/repositories/node.repository.js.map +1 -0
  1245. package/dist/src/storage/repositories/notification-template.repository.d.ts +8 -0
  1246. package/dist/src/storage/repositories/notification-template.repository.d.ts.map +1 -0
  1247. package/dist/src/storage/repositories/notification-template.repository.js +2 -0
  1248. package/dist/src/storage/repositories/notification-template.repository.js.map +1 -0
  1249. package/dist/src/storage/repositories/notification.repository.d.ts +14 -0
  1250. package/dist/src/storage/repositories/notification.repository.d.ts.map +1 -0
  1251. package/dist/src/storage/repositories/notification.repository.js +2 -0
  1252. package/dist/src/storage/repositories/notification.repository.js.map +1 -0
  1253. package/dist/src/storage/repositories/oauth.repository.d.ts +19 -0
  1254. package/dist/src/storage/repositories/oauth.repository.d.ts.map +1 -0
  1255. package/dist/src/storage/repositories/oauth.repository.js +2 -0
  1256. package/dist/src/storage/repositories/oauth.repository.js.map +1 -0
  1257. package/dist/src/storage/repositories/organism.repository.d.ts +34 -0
  1258. package/dist/src/storage/repositories/organism.repository.d.ts.map +1 -0
  1259. package/dist/src/storage/repositories/organism.repository.js +2 -0
  1260. package/dist/src/storage/repositories/organism.repository.js.map +1 -0
  1261. package/dist/src/storage/repositories/otk.repository.d.ts +9 -0
  1262. package/dist/src/storage/repositories/otk.repository.d.ts.map +1 -0
  1263. package/dist/src/storage/repositories/otk.repository.js +2 -0
  1264. package/dist/src/storage/repositories/otk.repository.js.map +1 -0
  1265. package/dist/src/storage/repositories/owner.repository.d.ts +9 -0
  1266. package/dist/src/storage/repositories/owner.repository.d.ts.map +1 -0
  1267. package/dist/src/storage/repositories/owner.repository.js +2 -0
  1268. package/dist/src/storage/repositories/owner.repository.js.map +1 -0
  1269. package/dist/src/storage/repositories/package-instance.repository.d.ts +26 -0
  1270. package/dist/src/storage/repositories/package-instance.repository.d.ts.map +1 -0
  1271. package/dist/src/storage/repositories/package-instance.repository.js +12 -0
  1272. package/dist/src/storage/repositories/package-instance.repository.js.map +1 -0
  1273. package/dist/src/storage/repositories/package.repository.d.ts +28 -0
  1274. package/dist/src/storage/repositories/package.repository.d.ts.map +1 -0
  1275. package/dist/src/storage/repositories/package.repository.js +12 -0
  1276. package/dist/src/storage/repositories/package.repository.js.map +1 -0
  1277. package/dist/src/storage/repositories/replication-queue.repository.d.ts +10 -0
  1278. package/dist/src/storage/repositories/replication-queue.repository.d.ts.map +1 -0
  1279. package/dist/src/storage/repositories/replication-queue.repository.js +2 -0
  1280. package/dist/src/storage/repositories/replication-queue.repository.js.map +1 -0
  1281. package/dist/src/storage/repositories/scheduler.repository.d.ts +30 -0
  1282. package/dist/src/storage/repositories/scheduler.repository.d.ts.map +1 -0
  1283. package/dist/src/storage/repositories/scheduler.repository.js +2 -0
  1284. package/dist/src/storage/repositories/scheduler.repository.js.map +1 -0
  1285. package/dist/src/storage/repositories/schema.repository.d.ts +9 -0
  1286. package/dist/src/storage/repositories/schema.repository.d.ts.map +1 -0
  1287. package/dist/src/storage/repositories/schema.repository.js +2 -0
  1288. package/dist/src/storage/repositories/schema.repository.js.map +1 -0
  1289. package/dist/src/storage/repositories/session.repository.d.ts +22 -0
  1290. package/dist/src/storage/repositories/session.repository.d.ts.map +1 -0
  1291. package/dist/src/storage/repositories/session.repository.js +2 -0
  1292. package/dist/src/storage/repositories/session.repository.js.map +1 -0
  1293. package/dist/src/storage/repositories/system-prompt.repository.d.ts +14 -0
  1294. package/dist/src/storage/repositories/system-prompt.repository.d.ts.map +1 -0
  1295. package/dist/src/storage/repositories/system-prompt.repository.js +2 -0
  1296. package/dist/src/storage/repositories/system-prompt.repository.js.map +1 -0
  1297. package/dist/src/storage/repositories/template-listing.repository.d.ts +44 -0
  1298. package/dist/src/storage/repositories/template-listing.repository.d.ts.map +1 -0
  1299. package/dist/src/storage/repositories/template-listing.repository.js +13 -0
  1300. package/dist/src/storage/repositories/template-listing.repository.js.map +1 -0
  1301. package/dist/src/storage/repositories/wallet.repository.d.ts +8 -0
  1302. package/dist/src/storage/repositories/wallet.repository.d.ts.map +1 -0
  1303. package/dist/src/storage/repositories/wallet.repository.js +2 -0
  1304. package/dist/src/storage/repositories/wallet.repository.js.map +1 -0
  1305. package/dist/src/storage/repositories/work.repository.d.ts +10 -0
  1306. package/dist/src/storage/repositories/work.repository.d.ts.map +1 -0
  1307. package/dist/src/storage/repositories/work.repository.js +2 -0
  1308. package/dist/src/storage/repositories/work.repository.js.map +1 -0
  1309. package/dist/src/storage/storage-factory.d.ts +9 -0
  1310. package/dist/src/storage/storage-factory.d.ts.map +1 -0
  1311. package/dist/src/storage/storage-factory.js +20 -0
  1312. package/dist/src/storage/storage-factory.js.map +1 -0
  1313. package/dist/src/types/route-manifest.d.ts +53 -0
  1314. package/dist/src/types/route-manifest.d.ts.map +1 -0
  1315. package/dist/src/types/route-manifest.js +44 -0
  1316. package/dist/src/types/route-manifest.js.map +1 -0
  1317. package/dist/src/utils/catalogue-hash.d.ts +10 -0
  1318. package/dist/src/utils/catalogue-hash.d.ts.map +1 -0
  1319. package/dist/src/utils/catalogue-hash.js +23 -0
  1320. package/dist/src/utils/catalogue-hash.js.map +1 -0
  1321. package/dist/src/utils/env-config.d.ts +8 -0
  1322. package/dist/src/utils/env-config.d.ts.map +1 -0
  1323. package/dist/src/utils/env-config.js +1264 -0
  1324. package/dist/src/utils/env-config.js.map +1 -0
  1325. package/dist/src/utils/env-validator.d.ts +14 -0
  1326. package/dist/src/utils/env-validator.d.ts.map +1 -0
  1327. package/dist/src/utils/env-validator.js +338 -0
  1328. package/dist/src/utils/env-validator.js.map +1 -0
  1329. package/dist/src/utils/fire-hook.d.ts +9 -0
  1330. package/dist/src/utils/fire-hook.d.ts.map +1 -0
  1331. package/dist/src/utils/fire-hook.js +12 -0
  1332. package/dist/src/utils/fire-hook.js.map +1 -0
  1333. package/dist/src/utils/gaii.d.ts +57 -0
  1334. package/dist/src/utils/gaii.d.ts.map +1 -0
  1335. package/dist/src/utils/gaii.js +148 -0
  1336. package/dist/src/utils/gaii.js.map +1 -0
  1337. package/dist/src/utils/ghii-resolver.d.ts +14 -0
  1338. package/dist/src/utils/ghii-resolver.d.ts.map +1 -0
  1339. package/dist/src/utils/ghii-resolver.js +21 -0
  1340. package/dist/src/utils/ghii-resolver.js.map +1 -0
  1341. package/dist/src/utils/logger.d.ts +9 -0
  1342. package/dist/src/utils/logger.d.ts.map +1 -0
  1343. package/dist/src/utils/logger.js +36 -0
  1344. package/dist/src/utils/logger.js.map +1 -0
  1345. package/dist/src/utils/otk.d.ts +2 -0
  1346. package/dist/src/utils/otk.d.ts.map +1 -0
  1347. package/dist/src/utils/otk.js +5 -0
  1348. package/dist/src/utils/otk.js.map +1 -0
  1349. package/dist/src/utils/tracking-code.d.ts +9 -0
  1350. package/dist/src/utils/tracking-code.d.ts.map +1 -0
  1351. package/dist/src/utils/tracking-code.js +16 -0
  1352. package/dist/src/utils/tracking-code.js.map +1 -0
  1353. package/dist/src/utils/url-validator.d.ts +5 -0
  1354. package/dist/src/utils/url-validator.d.ts.map +1 -0
  1355. package/dist/src/utils/url-validator.js +56 -0
  1356. package/dist/src/utils/url-validator.js.map +1 -0
  1357. package/dist/static/app-catalog.html +4401 -0
  1358. package/dist/static/cookieconsent.css +1 -0
  1359. package/dist/static/cookieconsent.umd.js +7 -0
  1360. package/dist/static/icons/icon-maskable.svg +27 -0
  1361. package/dist/static/icons/icon.svg +27 -0
  1362. package/dist/static/manifest.json +17 -0
  1363. package/dist/static/offline.html +167 -0
  1364. package/dist/static/sw.js +260 -0
  1365. package/package.json +182 -0
  1366. package/prisma/schema.prisma +1086 -0
@@ -0,0 +1,1313 @@
1
+ // @file src/routes/generator.ts
2
+ // @description Service generator API. Thin validation layer over Memory API.
3
+ // Agents and the browser UI submit generated content here; the route validates it, then writes to
4
+ // generator.* memory keys using the same structure the frontend reads.
5
+ // @structure
6
+ // POST /v1/generator/projects — create a new generator project
7
+ // GET /v1/generator/projects — list all projects for the caller
8
+ // GET /v1/generator/:projectId — get full project state (project, interviewSpec, components)
9
+ // DELETE /v1/generator/:projectId — delete project and all associated data (cascade)
10
+ // POST /v1/generator/:projectId/interview — save/update interview spec for a project
11
+ // POST /v1/generator/:projectId/settings — store project settings values (with optional encryption)
12
+ // GET /v1/generator/:projectId/settings — retrieve project settings values
13
+ // POST /v1/generator/:projectId/steps/blueprint — validate + store blueprint
14
+ // POST /v1/generator/:projectId/components/:componentId/submit — validate + store component content
15
+ // POST /v1/generator/:projectId/components/:componentId/register — register a validated component into the AIMEAT catalogue
16
+ // POST /v1/generator/:projectId/test — run tests in dependency order
17
+ // GET /v1/generator/:projectId/screenshots/:filename — serve test screenshot PNGs
18
+ // POST /v1/generator/:projectId/log — write log entry to memory
19
+ // POST /v1/generator/:projectId/complete — mark project active
20
+ // GET /v1/generator/:projectId/prompts/:componentId — get the generation prompt for a component
21
+ // GET /v1/generator/:projectId/prompts — get the blueprint generation prompt
22
+ // @usage
23
+ // Consumed by AI agents via device auth (generator:read / generator:write / generator:execute scopes)
24
+ // and by the browser UI (owner JWT satisfies agent role check).
25
+ // @version-history
26
+ // v1.0.0 — 2026-03-18 — Initial implementation
27
+ // v1.1.0 — 2026-03-18 — Add project management and interview endpoints (Task 3)
28
+ // v1.2.0 — 2026-03-18 — Add session claim, heartbeat, and release endpoints (Task 4)
29
+ // v1.3.0 — 2026-03-18 — Add blueprint, component submit, log, and complete endpoints (Task 5)
30
+ // v1.4.0 — 2026-03-18 — Add component registration endpoint (Task 6)
31
+ // v1.5.0 — 2026-03-18 — Fix session claim: use setMemory for new sessions (setMemoryIfVersion only for CAS on existing stale sessions)
32
+ // v1.6.0 — 2026-03-19 — Fix emitChange, session ownership, validation status codes, dead code removal, type checks
33
+ // v1.7.0 — 2026-03-19 — Add GET /v1/generator/my-assignments polling endpoint for agent discovery
34
+ // v1.8.0 — 2026-03-19 — Update agent guide to use polling instead of SSE for assignment discovery
35
+ // v1.9.0 — 2026-03-19 — Safety guards: version increment, blueprint immutability, registered component protection, session identity check
36
+ // v2.0.0 — 2026-03-19 — Add DELETE /v1/generator/:projectId cascade delete; validate componentId in heartbeat against blueprint
37
+ // v5.0.0 — 2026-03-20 — Remove agent guide, my-assignments, and session endpoints (replaced by OpenRouter autopilot)
38
+ // v5.1.0 — 2026-03-21 — Add settings collection endpoints (POST/GET /v1/generator/:projectId/settings)
39
+ // v5.2.0 — 2026-03-21 — Add test execution endpoint, screenshot serving, and screenshot cleanup on delete (Task 16)
40
+ import { Router } from 'express';
41
+ import { requireAuth, requireRole, requireScope } from '../auth/middleware.js';
42
+ import { success, error } from '../middleware/envelope.js';
43
+ import { logger } from '../utils/logger.js';
44
+ import { validateInterviewSpec, validateBlueprint, validateComponent } from '../services/generator-validate.js';
45
+ import { registerCsm, registerMsm, registerExtension, registerApp } from '../services/generator-registration.js';
46
+ import { emitChange } from '../services/event-bus.js';
47
+ // encryption removed from generator settings — values stored as plain text in owner-scoped memory
48
+ import { executeHttpTest, executePlaywrightTest, isPlaywrightAvailable, ensureScreenshotDir, cleanupScreenshots, screenshotDir } from '../services/generator-testing.js';
49
+ import { join } from 'node:path';
50
+ import { readFile } from 'node:fs/promises';
51
+ // DB-backed prompt builder — reads templates from SystemPromptRecord
52
+ import { buildPrompt } from '../services/generator-prompts/index.js';
53
+ import { GeneratorDebugWriter } from '../services/generator-debug.js';
54
+ export function generatorRouter(config, storage) {
55
+ const router = Router();
56
+ const VALID_COMPONENT_TYPES = ['csm', 'msm', 'extension', 'app', 'memory', 'translation', 'cortex'];
57
+ // Generator data is always stored under the owner's GHII (created by browser/owner session).
58
+ // Agents need to read/write using the owner's GHII, not their own GAII.
59
+ const ownerGhii = (req) => `${req.auth.owner}@${config.nodeId}`;
60
+ // POST /v1/generator/projects — create a new generator project
61
+ router.post('/v1/generator/projects', requireAuth(), requireRole('agent'), requireScope('generator:write'), async (req, res) => {
62
+ const gaii = ownerGhii(req);
63
+ const { name, description } = req.body ?? {};
64
+ if (!name || typeof name !== 'string') {
65
+ res.status(400).json(error(config.nodeId, 'INVALID_BODY', 'name is required'));
66
+ return;
67
+ }
68
+ const projectId = `gen-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`;
69
+ const now = new Date().toISOString();
70
+ const project = {
71
+ projectId,
72
+ name: name.trim(),
73
+ description: (description ?? '').trim(),
74
+ status: 'draft',
75
+ blueprint: null,
76
+ createdAt: now,
77
+ updatedAt: now,
78
+ };
79
+ await storage.setMemory({
80
+ key: `generator.${projectId}.project`,
81
+ ownerGaii: gaii,
82
+ value: project,
83
+ visibility: 'owner',
84
+ version: 1,
85
+ tags: ['generator', 'project'],
86
+ ttlHours: null,
87
+ createdAt: now,
88
+ updatedAt: now,
89
+ });
90
+ res.status(201).json(success(config.nodeId, { projectId, project }));
91
+ emitChange('memory');
92
+ });
93
+ // GET /v1/generator/projects — list all projects for the caller
94
+ // NOTE: This static route MUST be registered before GET /v1/generator/:projectId
95
+ router.get('/v1/generator/projects', requireAuth(), requireRole('agent'), requireScope('generator:read'), async (req, res) => {
96
+ const gaii = ownerGhii(req);
97
+ const records = await storage.listMemory(gaii, { prefix: 'generator.', visibility: 'owner' });
98
+ const projects = records
99
+ .filter(r => r.key.endsWith('.project'))
100
+ .map(r => r.value);
101
+ res.json(success(config.nodeId, { projects }));
102
+ });
103
+ // ── Debug file viewer API (MUST be before :projectId routes) ─────────
104
+ router.get('/v1/generator/debug/projects', requireAuth(), requireRole('owner'), async (_req, res) => {
105
+ const { listDebugProjects } = await import('../services/generator-debug.js');
106
+ res.json(success(config.nodeId, { projects: await listDebugProjects() }));
107
+ });
108
+ router.get('/v1/generator/debug/:projectId/files', requireAuth(), requireRole('owner'), async (req, res) => {
109
+ const { listDebugFiles } = await import('../services/generator-debug.js');
110
+ res.json(success(config.nodeId, { projectId: req.params['projectId'], files: await listDebugFiles(req.params['projectId']) }));
111
+ });
112
+ router.get('/v1/generator/debug/:projectId/file', requireAuth(), requireRole('owner'), async (req, res) => {
113
+ const { readDebugFile } = await import('../services/generator-debug.js');
114
+ const filePath = req.query['path'] || '';
115
+ if (!filePath) {
116
+ res.status(400).json(error(config.nodeId, 'INVALID_QUERY', 'path query parameter is required'));
117
+ return;
118
+ }
119
+ const content = await readDebugFile(req.params['projectId'], filePath);
120
+ if (content === null) {
121
+ res.status(404).json(error(config.nodeId, 'NOT_FOUND', 'File not found'));
122
+ return;
123
+ }
124
+ res.json(success(config.nodeId, { projectId: req.params['projectId'], path: filePath, content }));
125
+ });
126
+ router.delete('/v1/generator/debug/:projectId', requireAuth(), requireRole('owner'), async (req, res) => {
127
+ const { deleteDebugProject } = await import('../services/generator-debug.js');
128
+ res.json(success(config.nodeId, { deleted: await deleteDebugProject(req.params['projectId']), projectId: req.params['projectId'] }));
129
+ });
130
+ // GET /v1/generator/:projectId — get full project state
131
+ router.get('/v1/generator/:projectId', requireAuth(), requireRole('agent'), requireScope('generator:read'), async (req, res) => {
132
+ const gaii = ownerGhii(req);
133
+ const projectId = req.params['projectId'];
134
+ const [projectRec, interviewRec, sessionRec] = await Promise.all([
135
+ storage.getMemory(gaii, `generator.${projectId}.project`),
136
+ storage.getMemory(gaii, `generator.${projectId}.interview-spec`),
137
+ storage.getMemory(gaii, `generator.${projectId}.session`),
138
+ ]);
139
+ if (!projectRec) {
140
+ res.status(404).json(error(config.nodeId, 'NOT_FOUND', 'Project not found'));
141
+ return;
142
+ }
143
+ const componentRecords = await storage.listMemory(gaii, {
144
+ prefix: `generator.${projectId}.component.`,
145
+ });
146
+ const components = componentRecords.map(r => r.value);
147
+ res.json(success(config.nodeId, {
148
+ project: projectRec.value,
149
+ interviewSpec: interviewRec?.value ?? null,
150
+ components,
151
+ session: sessionRec?.value ?? null,
152
+ }));
153
+ });
154
+ // DELETE /v1/generator/:projectId — delete project and all associated data (cascade)
155
+ router.delete('/v1/generator/:projectId', requireAuth(), requireRole('agent'), requireScope('generator:write'), async (req, res) => {
156
+ const gaii = ownerGhii(req);
157
+ const projectId = req.params['projectId'];
158
+ const projectRec = await storage.getMemory(gaii, `generator.${projectId}.project`);
159
+ if (!projectRec) {
160
+ res.status(404).json(error(config.nodeId, 'NOT_FOUND', 'Project not found'));
161
+ return;
162
+ }
163
+ // Cascade delete all project data
164
+ const allRecords = await storage.listMemory(gaii, { prefix: `generator.${projectId}.` });
165
+ for (const rec of allRecords) {
166
+ await storage.deleteMemory(gaii, rec.key);
167
+ }
168
+ // Clean up test screenshots from filesystem
169
+ await cleanupScreenshots(projectId);
170
+ res.json(success(config.nodeId, { deleted: true, keysRemoved: allRecords.length }));
171
+ emitChange('memory');
172
+ });
173
+ // POST /v1/generator/:projectId/interview — save/update interview spec
174
+ // Also fixes visibility: frontend previously wrote 'private', now writes 'owner' so agents can read it.
175
+ router.post('/v1/generator/:projectId/interview', requireAuth(), requireRole('agent'), requireScope('generator:write'), async (req, res) => {
176
+ const gaii = ownerGhii(req);
177
+ const projectId = req.params['projectId'];
178
+ const { interviewSpec } = req.body ?? {};
179
+ const projectRec = await storage.getMemory(gaii, `generator.${projectId}.project`);
180
+ if (!projectRec) {
181
+ res.status(404).json(error(config.nodeId, 'NOT_FOUND', 'Project not found'));
182
+ return;
183
+ }
184
+ const validation = validateInterviewSpec(JSON.stringify(interviewSpec));
185
+ if (!validation.valid) {
186
+ res.status(422).json(error(config.nodeId, 'VALIDATION_ERROR', 'Invalid interview spec', undefined, { errors: validation.errors }));
187
+ return;
188
+ }
189
+ const now = new Date().toISOString();
190
+ await storage.setMemory({
191
+ key: `generator.${projectId}.interview-spec`,
192
+ ownerGaii: gaii,
193
+ value: interviewSpec,
194
+ visibility: 'owner',
195
+ version: 1,
196
+ tags: ['generator', 'interview'],
197
+ ttlHours: null,
198
+ createdAt: now,
199
+ updatedAt: now,
200
+ });
201
+ res.json(success(config.nodeId, { saved: true }));
202
+ emitChange('memory');
203
+ });
204
+ // POST /v1/generator/:projectId/settings — store project settings values
205
+ router.post('/v1/generator/:projectId/settings', requireAuth(), requireRole('owner'), async (req, res) => {
206
+ const projectId = req.params['projectId'];
207
+ const gaii = ownerGhii(req);
208
+ const { values, secretKeys } = req.body;
209
+ if (!values || typeof values !== 'object') {
210
+ res.status(400).json(error(config.nodeId, 'INVALID_BODY', 'values object required'));
211
+ return;
212
+ }
213
+ // Verify project exists
214
+ const projectRec = await storage.getMemory(gaii, `generator.${projectId}.project`);
215
+ if (!projectRec) {
216
+ res.status(404).json(error(config.nodeId, 'NOT_FOUND', 'Project not found'));
217
+ return;
218
+ }
219
+ // Store values as-is (no encryption — settings are already protected by owner-scoped memory)
220
+ const storedValues = { ...values };
221
+ // Store using full MemoryRecord pattern
222
+ const now = new Date().toISOString();
223
+ const existing = await storage.getMemory(gaii, `generator.${projectId}.settings`);
224
+ await storage.setMemory({
225
+ key: `generator.${projectId}.settings`,
226
+ ownerGaii: gaii,
227
+ value: storedValues,
228
+ visibility: 'owner',
229
+ version: existing ? existing.version + 1 : 1,
230
+ tags: ['generator', 'settings'],
231
+ ttlHours: null,
232
+ createdAt: existing?.createdAt ?? now,
233
+ updatedAt: now,
234
+ });
235
+ res.json(success(config.nodeId, { stored: Object.keys(values).length }));
236
+ emitChange('memory');
237
+ });
238
+ // GET /v1/generator/:projectId/settings — retrieve project settings values
239
+ router.get('/v1/generator/:projectId/settings', requireAuth(), requireRole('owner'), async (req, res) => {
240
+ const projectId = req.params['projectId'];
241
+ const gaii = ownerGhii(req);
242
+ const rec = await storage.getMemory(gaii, `generator.${projectId}.settings`);
243
+ const values = rec?.value ?? {};
244
+ res.json(success(config.nodeId, { values }));
245
+ });
246
+ // POST /v1/generator/:projectId/test/:componentId — execute AI-generated test code
247
+ // NOTE: registered before bulk test and /:projectId/components/:componentId
248
+ router.post('/v1/generator/:projectId/test/:componentId', requireAuth(), requireRole('owner'), async (req, res) => {
249
+ const gaii = ownerGhii(req);
250
+ const projectId = req.params['projectId'];
251
+ const componentId = req.params['componentId'];
252
+ const { testCode, environment } = req.body ?? {};
253
+ if (!testCode) {
254
+ res.status(400).json(error(config.nodeId, 'INVALID_BODY', 'testCode is required — AI must generate the test code first'));
255
+ return;
256
+ }
257
+ // Load component record for metadata
258
+ const compRec = await storage.getMemory(gaii, `generator.${projectId}.component.${componentId}`);
259
+ const compVal = compRec?.value ?? {};
260
+ const compType = compVal.type || 'unknown';
261
+ const registeredAs = compVal.registeredAs || componentId;
262
+ // Save testCode to component record BEFORE running the test.
263
+ // The browser test page reads testCode from the component record (GET /test-page/).
264
+ // Without this, the test page gets stale/empty testCode and the test fails.
265
+ if (compRec) {
266
+ await storage.setMemory({
267
+ ...compRec,
268
+ value: { ...compVal, testCode: testCode },
269
+ version: (compRec.version ?? 1) + 1,
270
+ updatedAt: new Date().toISOString(),
271
+ });
272
+ }
273
+ const token = (req.headers.authorization ?? '').replace('Bearer ', '');
274
+ const baseUrl = `http://localhost:${config.port}`;
275
+ let result;
276
+ // Determine execution environment: browser (Playwright) or server (HTTP)
277
+ const env = environment || (compType === 'cortex' || compType === 'app' ? 'browser' : 'server');
278
+ if (env === 'browser') {
279
+ // Browser test — execute AI-generated code in Playwright
280
+ if (!await isPlaywrightAvailable()) {
281
+ result = { componentId, type: compType, status: 'skipped', scenarios: 0, passed: 0, errors: ['Playwright not available'], screenshots: [], fixRound: 0 };
282
+ }
283
+ else {
284
+ // All browser tests use the self-contained test page
285
+ // It includes auth, library scripts, and test code — Playwright just navigates and reads results
286
+ const targetUrl = `${baseUrl}/v1/generator/test-page/${projectId}/${componentId}`;
287
+ await ensureScreenshotDir(projectId);
288
+ const pwResult = await executePlaywrightTest(testCode, projectId, componentId, targetUrl, [], token);
289
+ result = { componentId, type: compType, status: pwResult.passed ? 'passed' : 'failed', scenarios: 1, passed: pwResult.passed ? 1 : 0, errors: pwResult.errors, screenshots: pwResult.screenshots, fixRound: 0 };
290
+ }
291
+ }
292
+ else {
293
+ // Server test — execute AI-generated code with testFetch helper
294
+ const httpResult = await executeHttpTest(testCode, baseUrl, token);
295
+ result = { componentId, type: compType, status: httpResult.passed ? 'passed' : 'failed', scenarios: 1, passed: httpResult.passed ? 1 : 0, errors: httpResult.errors, screenshots: [], fixRound: 0, trace: httpResult.trace };
296
+ }
297
+ // Debug: write test artifacts to disk and log to terminal
298
+ const debugWriter = new GeneratorDebugWriter(projectId);
299
+ const compLabel = compVal.label || componentId;
300
+ await debugWriter.writeTestCode(componentId, testCode);
301
+ await debugWriter.writeTestResult(componentId, result);
302
+ // Copy screenshots to debug folder so they're visible alongside other artifacts
303
+ if (result.screenshots && result.screenshots.length > 0) {
304
+ const { screenshotDir: getScreenDir } = await import('../services/generator-testing.js');
305
+ const { copyFile } = await import('node:fs/promises');
306
+ const srcDir = getScreenDir(projectId);
307
+ for (const ss of result.screenshots) {
308
+ try {
309
+ const src = `${srcDir}/${ss}`;
310
+ const dest = `data/debug/generator/${projectId}/components/${componentId}/${ss}`;
311
+ await copyFile(src, dest).catch(() => { });
312
+ }
313
+ catch { /* screenshot copy optional */ }
314
+ }
315
+ }
316
+ await debugWriter.appendLog({
317
+ event: 'test_executed',
318
+ componentId,
319
+ componentLabel: compLabel,
320
+ type: compType,
321
+ environment: env,
322
+ status: result.status,
323
+ errors: result.errors,
324
+ passed: result.passed,
325
+ scenarios: result.scenarios,
326
+ });
327
+ // Terminal output — clear summary of what happened
328
+ const statusIcon = result.status === 'passed' ? '\u2705' : result.status === 'failed' ? '\u274C' : '\u23ED';
329
+ logger.info(`[generator-test] ${statusIcon} ${compLabel} (${compType}): ${result.status}${result.errors.length > 0 ? ' — ' + result.errors.length + ' errors' : ''}`, {
330
+ projectId, componentId, environment: env, errors: result.errors.slice(0, 3),
331
+ });
332
+ // Log trace for failed tests — shows every callExt/readExtMemory call with extracted shapes
333
+ if (result.status === 'failed' && result.trace && result.trace.length > 0) {
334
+ for (const t of result.trace) {
335
+ const resultStr = t.result || 'null';
336
+ // If shape was extracted, log just the shape on one line
337
+ const shapeMatch = resultStr.match(/\[shape extracted from (\d+) chars\]/);
338
+ if (shapeMatch) {
339
+ // Extract the JSON shape (everything before the [shape extracted...] marker)
340
+ const shapeJson = resultStr.slice(0, resultStr.indexOf('\n[shape extracted')).trim();
341
+ // Log compact: fn → shape (one line)
342
+ const compactShape = shapeJson.replace(/\s+/g, ' ').slice(0, 500);
343
+ logger.info(`[generator-test] [${t.status}] ${t.fn}(${t.args.slice(0, 60)}) → SHAPE: ${compactShape} [from ${shapeMatch[1]} chars]`);
344
+ }
345
+ else {
346
+ logger.info(`[generator-test] [${t.status}] ${t.fn}(${t.args.slice(0, 60)}) → ${resultStr.slice(0, 300)}`);
347
+ }
348
+ }
349
+ }
350
+ res.json(success(config.nodeId, { result }));
351
+ });
352
+ // POST /v1/generator/:projectId/debug/:componentId — write debug artifact to disk
353
+ router.post('/v1/generator/:projectId/debug/:componentId', requireAuth(), requireRole('owner'), async (req, res) => {
354
+ const projectId = req.params['projectId'];
355
+ const componentId = req.params['componentId'];
356
+ const { phase, content } = req.body ?? {};
357
+ if (!phase || !content) {
358
+ res.status(400).json(error(config.nodeId, 'INVALID_BODY', 'phase and content are required'));
359
+ return;
360
+ }
361
+ const debugWriter = new GeneratorDebugWriter(projectId);
362
+ const phases = {
363
+ 'prompt': () => debugWriter.writeComponentPrompt(componentId, content),
364
+ 'generated': () => debugWriter.writeComponentGenerated(componentId, content),
365
+ 'validation': () => debugWriter.writeValidation(componentId, content),
366
+ 'test-prompt': () => debugWriter.writeTestPrompt(componentId, content),
367
+ 'test-code': () => debugWriter.writeTestCode(componentId, content),
368
+ 'test-result': () => debugWriter.writeTestResult(componentId, content),
369
+ 'project-meta': () => debugWriter.writeProjectMeta(content.project, content.interviewSpec, content.blueprint),
370
+ };
371
+ const handler = phases[phase];
372
+ if (handler) {
373
+ await handler();
374
+ }
375
+ else {
376
+ // Generic fallback — write any phase as a text artifact
377
+ const text = typeof content === 'string' ? content : JSON.stringify(content, null, 2);
378
+ await debugWriter.writeArtifact(componentId, phase, text);
379
+ }
380
+ await debugWriter.appendLog({ event: `debug_${phase}`, componentId, timestamp: new Date().toISOString() });
381
+ res.json(success(config.nodeId, { written: true, phase, componentId }));
382
+ });
383
+ // POST /v1/generator/:projectId/apply-settings/:extensionName — inject project settings into extension config
384
+ // Reads settings from generator.{projectId}.settings and merges them into the extension's config object.
385
+ // This bridges blueprint settings (collected from user) to the extension's runtime config (ctx.config).
386
+ router.post('/v1/generator/:projectId/apply-settings/:extensionName', requireAuth(), requireRole('owner'), async (req, res) => {
387
+ const gaii = ownerGhii(req);
388
+ const projectId = req.params['projectId'];
389
+ const extensionName = req.params['extensionName'];
390
+ // Load project settings
391
+ const settingsRec = await storage.getMemory(gaii, `generator.${projectId}.settings`);
392
+ const settings = settingsRec?.value ?? {};
393
+ // Debug: log what we found
394
+ const settingsKeys = Object.keys(settings);
395
+ const settingsDebug = settingsKeys.map(k => {
396
+ const v = settings[k];
397
+ if (typeof v === 'string' && v.startsWith('enc:'))
398
+ return `${k}: [encrypted ${v.length} chars]`;
399
+ if (typeof v === 'string')
400
+ return `${k}: "${v.slice(0, 3)}...[${v.length} chars]"`;
401
+ return `${k}: ${JSON.stringify(v)}`;
402
+ });
403
+ logger.info(`apply-settings: found ${settingsKeys.length} settings for project ${projectId}`, { keys: settingsDebug });
404
+ if (settingsKeys.length === 0) {
405
+ res.json(success(config.nodeId, { applied: 0, message: 'No settings to apply', debug: { settingsRecordExists: !!settingsRec } }));
406
+ return;
407
+ }
408
+ // Load extension
409
+ const ext = await storage.getExtension(extensionName);
410
+ if (!ext) {
411
+ res.status(404).json(error(config.nodeId, 'NOT_FOUND', `Extension "${extensionName}" not found`));
412
+ return;
413
+ }
414
+ logger.info(`apply-settings: extension ${extensionName} current config keys: ${Object.keys(ext.config).join(', ')}`);
415
+ // Pass values through as-is (no encryption/decryption)
416
+ const decrypted = { ...settings };
417
+ const decryptLog = Object.keys(settings).map(k => {
418
+ const v = settings[k];
419
+ return `${k}: ${typeof v === 'string' ? v.length + ' chars' : typeof v}`;
420
+ });
421
+ logger.info(`apply-settings: decrypt results`, { results: decryptLog });
422
+ // Merge settings into extension config (preserving __schedules and other internal keys)
423
+ const newConfig = { ...ext.config, ...decrypted };
424
+ await storage.updateExtension(extensionName, { config: newConfig });
425
+ // Log final state (masked)
426
+ const finalKeys = Object.keys(newConfig).filter(k => !k.startsWith('__'));
427
+ const finalDebug = finalKeys.map(k => {
428
+ const v = newConfig[k];
429
+ if (typeof v === 'string' && v.length > 3)
430
+ return `${k}: "${v.slice(0, 3)}..."`;
431
+ return `${k}: ${JSON.stringify(v)}`;
432
+ });
433
+ logger.info(`apply-settings: extension ${extensionName} config updated`, { configKeys: finalDebug });
434
+ res.json(success(config.nodeId, { applied: Object.keys(decrypted).length, keys: Object.keys(decrypted), decryptLog }));
435
+ });
436
+ // POST /v1/generator/:projectId/probe-extension — call extension actions with test params, capture real responses
437
+ // Used by autopilot to get actual API response shapes for injection into cortex/app prompts.
438
+ router.post('/v1/generator/:projectId/probe-extension', requireAuth(), requireRole('owner'), async (req, res) => {
439
+ const gaii = ownerGhii(req);
440
+ const projectId = req.params['projectId'];
441
+ const { extensionName, scenarios } = req.body;
442
+ if (!extensionName || !scenarios || !Array.isArray(scenarios)) {
443
+ return res.status(400).json(error(config.nodeId, 'INVALID_BODY', 'extensionName and scenarios[] required.'));
444
+ }
445
+ // Verify project ownership
446
+ const projectRecord = await storage.getMemory(gaii, `generator.${projectId}.project`);
447
+ if (!projectRecord) {
448
+ return res.status(404).json(error(config.nodeId, 'NOT_FOUND', 'Project not found.'));
449
+ }
450
+ const token = (req.headers.authorization ?? '').replace('Bearer ', '');
451
+ const baseUrl = `http://localhost:${config.port}`;
452
+ const results = [];
453
+ for (const scenario of scenarios) {
454
+ try {
455
+ const resp = await fetch(`${baseUrl}/v1/ext/${encodeURIComponent(extensionName)}/${encodeURIComponent(scenario.action)}`, {
456
+ method: 'POST',
457
+ headers: { 'Content-Type': 'application/json', 'Authorization': `Bearer ${token}` },
458
+ body: JSON.stringify(scenario.input || {}),
459
+ });
460
+ const body = await resp.json();
461
+ results.push({
462
+ action: scenario.action,
463
+ input: scenario.input || {},
464
+ status: resp.status,
465
+ response: body.data ?? body,
466
+ });
467
+ }
468
+ catch (e) {
469
+ results.push({
470
+ action: scenario.action,
471
+ input: scenario.input || {},
472
+ status: 500,
473
+ response: { error: e.message },
474
+ });
475
+ }
476
+ }
477
+ logger.info('[generator] Extension probe complete', { extensionName, probed: results.length, projectId });
478
+ res.json(success(config.nodeId, { extensionName, results }));
479
+ });
480
+ // POST /v1/generator/:projectId/test — legacy bulk test endpoint
481
+ // Tests are now per-component via AI-generated code. This endpoint returns a stub.
482
+ router.post('/v1/generator/:projectId/test', requireAuth(), requireRole('owner'), async (req, res) => {
483
+ const report = {
484
+ level: 'none',
485
+ timestamp: new Date().toISOString(),
486
+ components: [],
487
+ overall: 'passed',
488
+ };
489
+ res.json(success(config.nodeId, { report }, [
490
+ { description: 'Tests are now per-component. Use POST /v1/generator/:projectId/test/:componentId with AI-generated testCode.', method: 'POST', url: `/v1/generator/${req.params['projectId']}/test/:componentId` },
491
+ ]));
492
+ });
493
+ // GET /v1/generator/:projectId/screenshots/:filename — serve test screenshot PNGs
494
+ // NOTE: registered before /:projectId/components/:componentId to avoid 'screenshots' matching as componentId
495
+ // Screenshots are project-scoped and non-sensitive — serve without auth
496
+ // so <img src="..."> tags work without JS-based auth header injection
497
+ router.get('/v1/generator/:projectId/screenshots/:filename', async (req, res) => {
498
+ const projectId = req.params['projectId'];
499
+ const filename = req.params['filename'];
500
+ if (filename.includes('..') || filename.includes('/') || filename.includes('\\')) {
501
+ res.status(400).json(error(config.nodeId, 'INVALID_BODY', 'Invalid filename'));
502
+ return;
503
+ }
504
+ const filepath = join(screenshotDir(projectId), filename);
505
+ try {
506
+ const data = await readFile(filepath);
507
+ res.set('Content-Type', 'image/png');
508
+ res.send(data);
509
+ }
510
+ catch {
511
+ res.status(404).json(error(config.nodeId, 'NOT_FOUND', 'Screenshot not found'));
512
+ }
513
+ });
514
+ // GET /v1/generator/test-page/:projectId/:componentId — browser test runner page
515
+ // Serves a self-contained HTML page that loads cortex/app library, auth, and test code.
516
+ // Playwright just navigates here and reads window.__testResults.
517
+ // CSP is removed for this route — AI-generated test code may use eval/new Function and
518
+ // this is an internal test page behind auth, not a public-facing page.
519
+ router.get('/v1/generator/test-page/:projectId/:componentId', requireAuth(), requireRole('owner'), async (req, res) => {
520
+ // Remove CSP for test pages — AI-generated code may need eval()
521
+ res.removeHeader('Content-Security-Policy');
522
+ const projectId = req.params['projectId'];
523
+ const componentId = req.params['componentId'];
524
+ const token = (req.headers.authorization ?? '').replace('Bearer ', '');
525
+ const compRec = await storage.getMemory(ownerGhii(req), `generator.${projectId}.component.${componentId}`);
526
+ const compVal = compRec?.value ?? {};
527
+ const compType = compVal.type || 'unknown';
528
+ const registeredAs = compVal.registeredAs || componentId;
529
+ const testCode = compVal.testCode || '';
530
+ if (!testCode) {
531
+ res.status(400).send('No test code for this component');
532
+ return;
533
+ }
534
+ // Build cortex/app script tags — nonce required for CSP
535
+ const nonce = res.locals.cspNonce;
536
+ const scripts = [];
537
+ if (compType === 'cortex' && registeredAs) {
538
+ // Load ALL project cortex dependencies BEFORE the component under test.
539
+ // Component cortexes depend on data cortex + platform UI cortexes.
540
+ // Without these, tests fail with "lib not loaded" errors.
541
+ const allComps = await storage.listMemory(ownerGhii(req), { prefix: `generator.${projectId}.component.`, visibility: 'owner' });
542
+ // Platform UI cortexes first (always available, not project-specific)
543
+ const platformCortexes = ['aimeat-ui-nav', 'aimeat-ui-layout', 'aimeat-ui-viewers', 'aimeat-ui-forms', 'aimeat-ui-dialogs', 'aimeat-charts'];
544
+ for (const pc of platformCortexes) {
545
+ scripts.push(`<script nonce="${nonce}" src="/v1/cortex/${pc}/libs/${pc}.js"></script>`);
546
+ }
547
+ // Then project cortexes in dependency order: data cortex before components
548
+ const projectCortexes = [];
549
+ for (const rec of allComps) {
550
+ const val = rec.value;
551
+ if (val.type === 'cortex' && val.registeredAs && val.registeredAs !== registeredAs) {
552
+ projectCortexes.push({ name: val.registeredAs, subtype: val.subtype || '' });
553
+ }
554
+ }
555
+ // Data cortex first, then other cortexes
556
+ projectCortexes.sort((a, b) => (a.subtype === 'data' ? -1 : b.subtype === 'data' ? 1 : 0));
557
+ for (const pc of projectCortexes) {
558
+ scripts.push(`<script nonce="${nonce}" src="/v1/cortex/${pc.name}/libs/${pc.name}.js"></script>`);
559
+ }
560
+ // Finally the component under test
561
+ scripts.push(`<script nonce="${nonce}" src="/v1/cortex/${registeredAs}/libs/${registeredAs}.js"></script>`);
562
+ }
563
+ // App tests need the same cortex libraries the app uses
564
+ // Load all cortex libs that belong to this project
565
+ if (compType === 'app') {
566
+ // Platform UI cortexes first
567
+ const platformCortexes = ['aimeat-ui-nav', 'aimeat-ui-layout', 'aimeat-ui-viewers', 'aimeat-ui-forms', 'aimeat-ui-dialogs', 'aimeat-charts'];
568
+ for (const pc of platformCortexes) {
569
+ scripts.push(`<script nonce="${nonce}" src="/v1/cortex/${pc}/libs/${pc}.js"></script>`);
570
+ }
571
+ const allComps = await storage.listMemory(ownerGhii(req), { prefix: `generator.${projectId}.component.`, visibility: 'owner' });
572
+ // Data cortex first, then components, then app-domain
573
+ const cortexes = [];
574
+ for (const rec of allComps) {
575
+ const val = rec.value;
576
+ if (val.type === 'cortex' && val.registeredAs) {
577
+ cortexes.push({ name: val.registeredAs, subtype: val.subtype || '' });
578
+ }
579
+ }
580
+ cortexes.sort((a, b) => {
581
+ const order = { data: 0, component: 1, feature: 1, 'app-domain': 2 };
582
+ return (order[a.subtype] ?? 1) - (order[b.subtype] ?? 1);
583
+ });
584
+ for (const c of cortexes) {
585
+ scripts.push(`<script nonce="${nonce}" src="/v1/cortex/${c.name}/libs/${c.name}.js"></script>`);
586
+ }
587
+ }
588
+ const html = `<!DOCTYPE html>
589
+ <html><head><meta charset="utf-8"><title>Test: ${registeredAs}</title>
590
+ <link href="https://cdn.jsdelivr.net/npm/daisyui@5" rel="stylesheet" type="text/css" />
591
+ <script src="https://cdn.jsdelivr.net/npm/@tailwindcss/browser@4"></script>
592
+ </head>
593
+ <body class="bg-base-100 min-h-screen flex flex-col">
594
+ <!-- AIMEAT Header — same structure as spa.html -->
595
+ <nav class="navbar bg-base-200 shadow-sm px-4">
596
+ <div class="flex-1 gap-4">
597
+ <span class="text-lg font-bold">AIME<span style="color:#E8564A">\u2665</span>AT</span>
598
+ <span class="text-xs opacity-50">Testing: ${registeredAs}</span>
599
+ </div>
600
+ <div class="flex-none gap-2">
601
+ <span id="header-auth"></span>
602
+ </div>
603
+ </nav>
604
+ <!-- App area — app-domain.render() targets this -->
605
+ <div id="app" class="flex-1"></div>
606
+ <!-- Test infrastructure (hidden during visual testing) -->
607
+ <details class="p-2 bg-base-200 mt-auto"><summary class="text-xs cursor-pointer">Test log</summary>
608
+ <pre id="log" class="text-xs"></pre>
609
+ <div id="result"></div>
610
+ </details>
611
+
612
+ <script nonce="${nonce}" src="/v1/libs/aimeat-auth.js"></script>
613
+ <script nonce="${nonce}">
614
+ // Inject test session into the real auth library
615
+ // Uses the same session.fetch() pattern as the real createSession() in aimeat-auth.js:
616
+ // const resp = await fetch(url, { ...opts, headers }); return resp.json();
617
+ (function() {
618
+ var jwt = ${JSON.stringify(token)};
619
+ var parseJwt = function(t) { try { return JSON.parse(atob(t.split('.')[1].replace(/-/g,'+').replace(/_/g,'/'))); } catch(e) { return null; } };
620
+ var payload = parseJwt(jwt);
621
+ var session = {
622
+ jwt: jwt,
623
+ owner: payload && payload.owner || null,
624
+ gaii: payload && payload.sub || null,
625
+ ghii: (payload && payload.owner || '') + '@' + (payload && payload.node || ''),
626
+ publicKey: null,
627
+ nodeUrl: window.location.origin,
628
+ roles: payload && payload.roles || [],
629
+ get valid() { return true; },
630
+ async fetch(path, opts) {
631
+ if (!opts) opts = {};
632
+ var url = window.location.origin + path;
633
+ var headers = Object.assign({}, opts.headers || {}, {
634
+ 'Content-Type': 'application/json',
635
+ 'Authorization': 'Bearer ' + jwt
636
+ });
637
+ var resp = await fetch(url, Object.assign({}, opts, { headers: headers }));
638
+ return resp.json();
639
+ },
640
+ async refresh() { return this; }
641
+ };
642
+ // Override auth methods — test page has a real JWT, make all auth paths work
643
+ AIMEAT.auth.getSession = function() { return session; };
644
+ AIMEAT.auth.login = async function() { return session; };
645
+ AIMEAT.auth.logout = async function() { location.reload(); };
646
+ // Also set AIMEAT.session directly — cortex IIFEs use AIMEAT.session.fetch()
647
+ AIMEAT.session = session;
648
+ // Mount the real golden sign-in/logout button in header
649
+ // mountLoginButton is NOT overridden — it uses the real auth library UI
650
+ setTimeout(function() {
651
+ if (AIMEAT.auth.mountLoginButton) {
652
+ AIMEAT.auth.mountLoginButton('#header-auth');
653
+ }
654
+ }, 100);
655
+ })();
656
+ </script>
657
+ <script nonce="${nonce}" src="/v1/libs/aimeat-data.js"></script>
658
+
659
+ ${scripts.join('\n')}
660
+
661
+ <script nonce="${nonce}">
662
+ // Ensure AIMEAT namespace aliases exist — cortex IIFEs register under different paths
663
+ // and generated code may use any of them
664
+ (function() {
665
+ if (!window.AIMEAT) window.AIMEAT = {};
666
+ if (!window.AIMEAT.ui) window.AIMEAT.ui = {};
667
+ // Alias bundled cortex names to AIMEAT.ui.* paths if not already set
668
+ var aliases = {
669
+ 'aimeat-ui-forms': 'forms', 'aimeat-ui-nav': 'nav', 'aimeat-ui-layout': 'layout',
670
+ 'aimeat-ui-viewers': 'viewers', 'aimeat-ui-dialogs': 'dialogs',
671
+ };
672
+ for (var full in aliases) {
673
+ var short = aliases[full];
674
+ if (AIMEAT[full] && !AIMEAT.ui[short]) AIMEAT.ui[short] = AIMEAT[full];
675
+ if (AIMEAT.ui[short] && !AIMEAT[full]) AIMEAT[full] = AIMEAT.ui[short];
676
+ }
677
+ })();
678
+ </script>
679
+
680
+ <script nonce="${nonce}">
681
+ // Test runner
682
+ window.__testResults = null;
683
+ window.__testRunning = true;
684
+ window.__renderSnapshot = null; // Set by test code to capture rendered state
685
+ (async function() {
686
+ try {
687
+ ${testCode}
688
+ } catch (e) {
689
+ if (!window.__testResults) {
690
+ window.__testResults = { passed: false, errors: ['Test threw: ' + e.message] };
691
+ }
692
+ } finally {
693
+ window.__testRunning = false;
694
+ if (!window.__testResults) {
695
+ window.__testResults = { passed: false, errors: ['Test did not complete'] };
696
+ }
697
+ // Show rendered component snapshot (if captured by test) BEFORE showing results
698
+ if (window.__renderSnapshot) {
699
+ var snapDiv = document.createElement('div');
700
+ snapDiv.id = 'render-snapshot';
701
+ snapDiv.style.border = '2px solid #ccc';
702
+ snapDiv.style.padding = '16px';
703
+ snapDiv.style.margin = '16px 0';
704
+ snapDiv.style.background = '#fff';
705
+ snapDiv.innerHTML = '<h3 style="margin:0 0 8px">Rendered Component</h3>' + window.__renderSnapshot;
706
+ document.body.appendChild(snapDiv);
707
+ }
708
+ // Show results in DOM
709
+ var el = document.getElementById('result');
710
+ if (el && window.__testResults) {
711
+ el.textContent = JSON.stringify(window.__testResults, null, 2);
712
+ el.style.color = window.__testResults.passed ? 'green' : 'red';
713
+ }
714
+ }
715
+ })();
716
+ </script>
717
+ </body></html>`;
718
+ res.set('Content-Type', 'text/html');
719
+ res.send(html);
720
+ });
721
+ // POST /v1/generator/:projectId/steps/blueprint — validate + store blueprint
722
+ // NOTE: registered before /:projectId/components/:componentId/submit to prevent 'steps' matching as componentId
723
+ router.post('/v1/generator/:projectId/steps/blueprint', requireAuth(), requireRole('agent'), requireScope('generator:write'), async (req, res) => {
724
+ const gaii = ownerGhii(req);
725
+ const projectId = req.params['projectId'];
726
+ const { blueprint } = req.body ?? {};
727
+ if (!blueprint || typeof blueprint !== 'string') {
728
+ res.status(400).json(error(config.nodeId, 'INVALID_BODY', 'blueprint string is required'));
729
+ return;
730
+ }
731
+ const validation = validateBlueprint(blueprint);
732
+ if (!validation.valid) {
733
+ // Return validation errors to agent — do NOT write to memory
734
+ const errors = validation.errors ?? [];
735
+ res.status(422).json(error(config.nodeId, 'VALIDATION_FAILED', errors.join('; ')));
736
+ return;
737
+ }
738
+ // Update the project's blueprint field in memory
739
+ const now = new Date().toISOString();
740
+ const projectRec = await storage.getMemory(gaii, `generator.${projectId}.project`);
741
+ if (!projectRec) {
742
+ res.status(404).json(error(config.nodeId, 'NOT_FOUND', 'Project not found'));
743
+ return;
744
+ }
745
+ // Guard: prevent blueprint overwrite if components have been submitted
746
+ const existingComponents = await storage.listMemory(gaii, { prefix: `generator.${projectId}.component.` });
747
+ const hasSubmitted = existingComponents.some(r => {
748
+ const val = r.value;
749
+ return val.status === 'ready' || val.status === 'registered';
750
+ });
751
+ if (hasSubmitted) {
752
+ res.status(409).json(error(config.nodeId, 'BLUEPRINT_LOCKED', 'Cannot overwrite blueprint — components have already been submitted. Delete components first or create a new project.'));
753
+ return;
754
+ }
755
+ const updatedProject = {
756
+ ...projectRec.value,
757
+ blueprint: validation.extracted ?? blueprint,
758
+ status: 'blueprint_ready',
759
+ updatedAt: now,
760
+ };
761
+ await storage.setMemory({ ...projectRec, value: updatedProject, version: (projectRec.version ?? 1) + 1, updatedAt: now });
762
+ // Initialize component records from blueprint — same as frontend handleSubmitBlueprint().
763
+ // This ensures the sidebar shows components immediately when agent submits blueprint.
764
+ const parsed = typeof (validation.extracted ?? blueprint) === 'string'
765
+ ? JSON.parse(validation.extracted ?? blueprint)
766
+ : (validation.extracted ?? blueprint);
767
+ const bpComponents = parsed.components ?? [];
768
+ for (const comp of bpComponents) {
769
+ const compKey = `generator.${projectId}.component.${comp.id}`;
770
+ const existing = await storage.getMemory(gaii, compKey);
771
+ if (!existing) {
772
+ await storage.setMemory({
773
+ key: compKey,
774
+ ownerGaii: gaii,
775
+ value: { id: comp.id, type: comp.type, label: comp.label, status: 'not_started', prompt: null, result: null, validationErrors: [], registeredAs: null, history: [] },
776
+ visibility: 'owner',
777
+ version: 1,
778
+ tags: ['generator', 'component', comp.type],
779
+ ttlHours: null,
780
+ createdAt: now,
781
+ updatedAt: now,
782
+ });
783
+ }
784
+ }
785
+ res.json(success(config.nodeId, { valid: true, errors: [], warnings: validation.warnings ?? [] }));
786
+ emitChange('memory');
787
+ });
788
+ // POST /v1/generator/:projectId/components/:componentId/submit — validate + store component content
789
+ router.post('/v1/generator/:projectId/components/:componentId/submit', requireAuth(), requireRole('agent'), requireScope('generator:write'), async (req, res) => {
790
+ const gaii = ownerGhii(req);
791
+ const projectId = req.params['projectId'];
792
+ const componentId = req.params['componentId'];
793
+ const { type, content } = req.body ?? {};
794
+ if (!type || !VALID_COMPONENT_TYPES.includes(type)) {
795
+ res.status(400).json(error(config.nodeId, 'INVALID_BODY', `type must be one of: ${VALID_COMPONENT_TYPES.join(', ')}`));
796
+ return;
797
+ }
798
+ if (!content || typeof content !== 'string') {
799
+ res.status(400).json(error(config.nodeId, 'INVALID_BODY', 'content string is required'));
800
+ return;
801
+ }
802
+ // Blueprint is REQUIRED before submitting components
803
+ const projectRec = await storage.getMemory(gaii, `generator.${projectId}.project`);
804
+ const blueprint = projectRec?.value?.blueprint;
805
+ if (!blueprint) {
806
+ res.status(400).json(error(config.nodeId, 'NO_BLUEPRINT', 'Blueprint must be submitted before components'));
807
+ return;
808
+ }
809
+ if (blueprint.components && !blueprint.components.some((c) => c.id === componentId)) {
810
+ res.status(404).json(error(config.nodeId, 'NOT_FOUND', `Component "${componentId}" not in blueprint`));
811
+ return;
812
+ }
813
+ const validation = validateComponent(type, content);
814
+ if (!validation.valid) {
815
+ // Return errors for agent to correct — do NOT write to memory
816
+ const errors = validation.errors ?? [];
817
+ res.status(422).json(error(config.nodeId, 'VALIDATION_FAILED', errors.join('; ')));
818
+ return;
819
+ }
820
+ // Write validated component to memory
821
+ const now = new Date().toISOString();
822
+ const existingRec = await storage.getMemory(gaii, `generator.${projectId}.component.${componentId}`);
823
+ if (existingRec) {
824
+ const existingStatus = existingRec.value?.status;
825
+ if (existingStatus === 'registered') {
826
+ res.status(409).json(error(config.nodeId, 'ALREADY_REGISTERED', 'Component is already registered. Cannot re-submit.'));
827
+ return;
828
+ }
829
+ }
830
+ const newVersion = existingRec ? existingRec.version + 1 : 1;
831
+ const extractedContent = typeof validation.extracted === 'string'
832
+ ? validation.extracted
833
+ : JSON.stringify(validation.extracted);
834
+ // Merge with existing record to preserve frontend fields (id, label, prompt, history, etc.)
835
+ const existingValue = (existingRec?.value ?? {});
836
+ // Resolve label from blueprint if not in existing record
837
+ const bpComp = blueprint.components?.find((c) => c.id === componentId);
838
+ const mergedValue = {
839
+ ...existingValue,
840
+ id: componentId,
841
+ label: existingValue.label || bpComp?.label || componentId,
842
+ type,
843
+ result: extractedContent,
844
+ content: extractedContent,
845
+ status: 'ready',
846
+ submittedAt: now,
847
+ };
848
+ await storage.setMemory({
849
+ key: `generator.${projectId}.component.${componentId}`,
850
+ ownerGaii: gaii,
851
+ value: mergedValue,
852
+ visibility: 'owner',
853
+ version: newVersion,
854
+ tags: ['generator', 'component', type],
855
+ ttlHours: null,
856
+ createdAt: existingRec?.createdAt ?? now,
857
+ updatedAt: now,
858
+ });
859
+ res.json(success(config.nodeId, {
860
+ valid: true,
861
+ errors: [],
862
+ warnings: validation.warnings ?? [],
863
+ extracted: validation.extracted,
864
+ }));
865
+ emitChange('memory');
866
+ });
867
+ // POST /v1/generator/:projectId/components/:componentId/register — register a validated component into the AIMEAT catalogue
868
+ router.post('/v1/generator/:projectId/components/:componentId/register', requireAuth(), requireRole('agent'), requireScope('generator:execute'), async (req, res) => {
869
+ const gaii = ownerGhii(req);
870
+ const projectId = req.params['projectId'];
871
+ const componentId = req.params['componentId'];
872
+ const componentRec = await storage.getMemory(gaii, `generator.${projectId}.component.${componentId}`);
873
+ if (!componentRec) {
874
+ res.status(404).json(error(config.nodeId, 'NOT_FOUND', 'Component not found — submit content first'));
875
+ return;
876
+ }
877
+ const component = componentRec.value;
878
+ if (component.status !== 'ready') {
879
+ res.status(400).json(error(config.nodeId, 'NOT_READY', 'Component must be in "ready" status before registration'));
880
+ return;
881
+ }
882
+ // For registration, resolve owner from auth (works for both owner and agent sessions)
883
+ const ownerName = req.auth.owner;
884
+ const regGhii = `${ownerName}@${config.nodeId}`;
885
+ try {
886
+ switch (component.type) {
887
+ case 'csm':
888
+ await registerCsm(component.content, ownerName, storage);
889
+ break;
890
+ case 'msm':
891
+ await registerMsm(component.content, ownerName, storage);
892
+ break;
893
+ case 'extension':
894
+ await registerExtension(component.content, ownerName, regGhii, storage, config.maxExtensionsPerOwner);
895
+ break;
896
+ case 'app':
897
+ await registerApp(component.content, ownerName, regGhii, storage);
898
+ break;
899
+ case 'cortex': {
900
+ // Register cortex: POST manifest+libs, then deactivate+activate
901
+ const cortexContent = component.content;
902
+ const manifestMatch = cortexContent.match(/```yaml\n([\s\S]*?)```/);
903
+ const jsMatch = cortexContent.match(/```javascript\n([\s\S]*?)```/);
904
+ if (manifestMatch) {
905
+ const manifest = manifestMatch[1].trim();
906
+ const nameMatch = manifest.match(/name:\s*"?([^\s"]+)"?/);
907
+ const cortexName = nameMatch?.[1] || '';
908
+ const libs = {};
909
+ if (jsMatch && cortexName) {
910
+ libs[`${cortexName}.js`] = jsMatch[1].trim();
911
+ }
912
+ const jwt = (req.headers.authorization ?? '').replace('Bearer ', '');
913
+ const baseUrl = `http://localhost:${config.port}`;
914
+ const headers = { 'Content-Type': 'application/json', 'Authorization': `Bearer ${jwt}` };
915
+ // Register (or re-register: deactivate → delete → register)
916
+ const regResp = await fetch(`${baseUrl}/v1/cortex`, { method: 'POST', headers, body: JSON.stringify({ manifest, ...(Object.keys(libs).length > 0 ? { libs } : {}) }) });
917
+ if (!regResp.ok && cortexName) {
918
+ await fetch(`${baseUrl}/v1/cortex/${encodeURIComponent(cortexName)}/deactivate`, { method: 'POST', headers }).catch(() => { });
919
+ await fetch(`${baseUrl}/v1/cortex/${encodeURIComponent(cortexName)}`, { method: 'DELETE', headers }).catch(() => { });
920
+ await fetch(`${baseUrl}/v1/cortex`, { method: 'POST', headers, body: JSON.stringify({ manifest, ...(Object.keys(libs).length > 0 ? { libs } : {}) }) });
921
+ }
922
+ // Activate
923
+ if (cortexName) {
924
+ await fetch(`${baseUrl}/v1/cortex/${encodeURIComponent(cortexName)}/deactivate`, { method: 'POST', headers }).catch(() => { });
925
+ await fetch(`${baseUrl}/v1/cortex/${encodeURIComponent(cortexName)}/activate`, { method: 'POST', headers });
926
+ }
927
+ }
928
+ break;
929
+ }
930
+ case 'memory':
931
+ case 'translation': {
932
+ // Write data to actual memory keys so AIMEAT.data.get() can read them.
933
+ // service_slug from blueprint — the single source of truth for namespacing
934
+ const projectRec2 = await storage.getMemory(gaii, `generator.${projectId}.project`);
935
+ const blueprint2 = projectRec2?.value?.blueprint;
936
+ const slug = blueprint2?.service_slug || '';
937
+ if (!slug) {
938
+ res.status(400).json(error(config.nodeId, 'NO_SERVICE_SLUG', 'Blueprint missing "service_slug" — cannot namespace memory keys. Regenerate blueprint.'));
939
+ return;
940
+ }
941
+ try {
942
+ const raw = component.content;
943
+ const clean = typeof raw === 'string' ? raw.replace(/^```\w*\n?/, '').replace(/\n?```$/, '').trim() : raw;
944
+ const parsed = typeof clean === 'string' ? JSON.parse(clean) : clean;
945
+ const now = new Date().toISOString();
946
+ if (component.type === 'translation') {
947
+ for (const [locale, strings] of Object.entries(parsed)) {
948
+ if (locale && typeof strings === 'object' && strings !== null) {
949
+ const memKey = `${slug}.i18n.${locale}`;
950
+ await storage.setMemory({ key: memKey, ownerGaii: regGhii, value: strings, visibility: 'public', version: 1, tags: ['generator', 'translation'], ttlHours: null, createdAt: now, updatedAt: now });
951
+ }
952
+ }
953
+ }
954
+ else {
955
+ for (const [rawKey, value] of Object.entries(parsed)) {
956
+ const memKey = rawKey.startsWith(slug + '.') ? rawKey : `${slug}.${rawKey}`;
957
+ await storage.setMemory({ key: memKey, ownerGaii: regGhii, value: value, visibility: 'public', version: 1, tags: ['generator', 'memory'], ttlHours: null, createdAt: now, updatedAt: now });
958
+ }
959
+ }
960
+ }
961
+ catch (e) {
962
+ console.error(`[generator] Failed to store ${component.type} in memory:`, e);
963
+ }
964
+ break;
965
+ }
966
+ default:
967
+ res.status(400).json(error(config.nodeId, 'UNSUPPORTED_TYPE', `Registration not supported for type: ${component.type}`));
968
+ return;
969
+ }
970
+ const now = new Date().toISOString();
971
+ await storage.setMemory({
972
+ ...componentRec,
973
+ value: { ...component, status: 'registered', registeredAt: now },
974
+ version: (componentRec.version ?? 1) + 1,
975
+ updatedAt: now,
976
+ });
977
+ res.json(success(config.nodeId, { registered: true, componentId }));
978
+ emitChange('memory');
979
+ }
980
+ catch (err) {
981
+ const msg = err instanceof Error ? err.message : String(err);
982
+ res.status(500).json(error(config.nodeId, 'REGISTRATION_ERROR', msg));
983
+ }
984
+ });
985
+ // POST /v1/generator/:projectId/components/:componentId/reset — reset a component to empty state for regeneration
986
+ router.post('/v1/generator/:projectId/components/:componentId/reset', requireAuth(), requireRole('owner'), async (req, res) => {
987
+ const gaii = ownerGhii(req);
988
+ const projectId = req.params['projectId'];
989
+ const componentId = req.params['componentId'];
990
+ const rec = await storage.getMemory(gaii, `generator.${projectId}.component.${componentId}`);
991
+ if (!rec) {
992
+ res.status(404).json(error(config.nodeId, 'NOT_FOUND', 'Component not found'));
993
+ return;
994
+ }
995
+ const comp = rec.value;
996
+ const now = new Date().toISOString();
997
+ // Clear all generated content, keep only blueprint-derived fields (id, type, label, subtype)
998
+ const reset = {
999
+ id: comp.id,
1000
+ type: comp.type,
1001
+ label: comp.label,
1002
+ subtype: comp.subtype,
1003
+ status: 'pending',
1004
+ // Clear generated fields
1005
+ result: undefined,
1006
+ spec: undefined,
1007
+ registeredAs: undefined,
1008
+ contextBundle: undefined,
1009
+ testCode: undefined,
1010
+ testResult: undefined,
1011
+ validationErrors: undefined,
1012
+ probeResults: undefined,
1013
+ history: [...(comp.history || []), { action: 'reset', at: now, by: 'user' }],
1014
+ };
1015
+ await storage.setMemory({
1016
+ ...rec,
1017
+ value: reset,
1018
+ version: (rec.version ?? 1) + 1,
1019
+ updatedAt: now,
1020
+ });
1021
+ // Also delete the separate spec record if it exists
1022
+ try {
1023
+ await storage.deleteMemory(gaii, `generator.${projectId}.spec.${componentId}`);
1024
+ }
1025
+ catch { /* may not exist */ }
1026
+ // Also delete the prompt record if stored
1027
+ try {
1028
+ await storage.deleteMemory(gaii, `generator.${projectId}.prompt.${componentId}`);
1029
+ }
1030
+ catch { /* may not exist */ }
1031
+ emitChange('memory');
1032
+ res.json(success(config.nodeId, { reset: true, componentId }));
1033
+ });
1034
+ // POST /v1/generator/:projectId/log — write log entry to memory
1035
+ router.post('/v1/generator/:projectId/log', requireAuth(), requireRole('agent'), requireScope('generator:execute'), async (req, res) => {
1036
+ const gaii = ownerGhii(req);
1037
+ const projectId = req.params['projectId'];
1038
+ const { level, message, componentId, meta } = req.body ?? {};
1039
+ if (!level || typeof level !== 'string' || !message || typeof message !== 'string') {
1040
+ res.status(400).json(error(config.nodeId, 'INVALID_BODY', 'level and message are required strings'));
1041
+ return;
1042
+ }
1043
+ if (!['info', 'warn', 'error'].includes(level)) {
1044
+ res.status(400).json(error(config.nodeId, 'INVALID_BODY', 'level must be info, warn, or error'));
1045
+ return;
1046
+ }
1047
+ if (meta != null && typeof meta !== 'object') {
1048
+ res.status(400).json(error(config.nodeId, 'INVALID_BODY', 'meta must be an object or null'));
1049
+ return;
1050
+ }
1051
+ const logId = `log-${Date.now()}-${Math.random().toString(36).slice(2, 6)}`;
1052
+ const now = new Date().toISOString();
1053
+ await storage.setMemory({
1054
+ key: `generator.${projectId}.logs.${logId}`,
1055
+ ownerGaii: gaii,
1056
+ value: { logId, level, message, componentId: componentId ?? null, meta: meta ?? null, timestamp: now },
1057
+ visibility: 'owner',
1058
+ version: 1,
1059
+ tags: ['generator', 'log'],
1060
+ ttlHours: null,
1061
+ createdAt: now,
1062
+ updatedAt: now,
1063
+ });
1064
+ res.json(success(config.nodeId, { logged: true, logId }));
1065
+ emitChange('memory');
1066
+ });
1067
+ // POST /v1/generator/:projectId/complete — mark project active, release session
1068
+ router.post('/v1/generator/:projectId/complete', requireAuth(), requireRole('agent'), requireScope('generator:execute'), async (req, res) => {
1069
+ const gaii = ownerGhii(req);
1070
+ const projectId = req.params['projectId'];
1071
+ const projectRec = await storage.getMemory(gaii, `generator.${projectId}.project`);
1072
+ if (!projectRec) {
1073
+ res.status(404).json(error(config.nodeId, 'NOT_FOUND', 'Project not found'));
1074
+ return;
1075
+ }
1076
+ // Guard: require at least one registered component before marking complete
1077
+ const componentRecords = await storage.listMemory(gaii, { prefix: `generator.${projectId}.component.` });
1078
+ const registeredCount = componentRecords.filter(r => {
1079
+ const val = r.value;
1080
+ return val.status === 'registered';
1081
+ }).length;
1082
+ if (registeredCount === 0) {
1083
+ res.status(400).json(error(config.nodeId, 'NO_COMPONENTS', 'Cannot complete project — no components have been registered. Generate and register components first.'));
1084
+ return;
1085
+ }
1086
+ const now = new Date().toISOString();
1087
+ await storage.setMemory({
1088
+ ...projectRec,
1089
+ value: {
1090
+ ...projectRec.value,
1091
+ status: 'active',
1092
+ completedAt: now,
1093
+ updatedAt: now,
1094
+ },
1095
+ updatedAt: now,
1096
+ });
1097
+ // Release session if it exists
1098
+ await storage.deleteMemory(gaii, `generator.${projectId}.session`);
1099
+ res.json(success(config.nodeId, { status: 'active', registeredComponents: registeredCount }));
1100
+ emitChange('memory');
1101
+ });
1102
+ // GET /v1/generator/:projectId/prompts/:componentId — get the generation prompt for a component
1103
+ // Returns the SAME prompt that the UI gives to users, with full context (blueprint, completed components, interview spec).
1104
+ router.get('/v1/generator/:projectId/prompts/:componentId', requireAuth(), requireRole('agent'), requireScope('generator:read'), async (req, res) => {
1105
+ const gaii = ownerGhii(req);
1106
+ const projectId = req.params['projectId'];
1107
+ const componentId = req.params['componentId'];
1108
+ // Load project state
1109
+ const [projectRec, interviewRec] = await Promise.all([
1110
+ storage.getMemory(gaii, `generator.${projectId}.project`),
1111
+ storage.getMemory(gaii, `generator.${projectId}.interview-spec`),
1112
+ ]);
1113
+ if (!projectRec) {
1114
+ res.status(404).json(error(config.nodeId, 'NOT_FOUND', 'Project not found'));
1115
+ return;
1116
+ }
1117
+ const project = projectRec.value;
1118
+ const interviewSpec = interviewRec?.value ?? null;
1119
+ const blueprint = project.blueprint;
1120
+ if (!blueprint?.components) {
1121
+ res.status(400).json(error(config.nodeId, 'NO_BLUEPRINT', 'Blueprint not yet submitted'));
1122
+ return;
1123
+ }
1124
+ const component = blueprint.components.find((c) => c.id === componentId);
1125
+ if (!component) {
1126
+ res.status(404).json(error(config.nodeId, 'NOT_FOUND', `Component "${componentId}" not in blueprint`));
1127
+ return;
1128
+ }
1129
+ // Load completed components for context
1130
+ // Include 'done' status — autopilot uses 'done' while UI uses 'registered'/'ready'
1131
+ const allComponentRecords = await storage.listMemory(gaii, { prefix: `generator.${projectId}.component.` });
1132
+ const completedComponents = allComponentRecords
1133
+ .filter(r => {
1134
+ const val = r.value;
1135
+ return (val.status === 'registered' || val.status === 'ready' || val.status === 'done') && val.registeredAs;
1136
+ })
1137
+ .map(r => {
1138
+ // Enrich with subtype from blueprint (not stored in component records)
1139
+ const val = r.value;
1140
+ if (!val.subtype && blueprint?.components) {
1141
+ const bpc = blueprint.components.find((c) => c.label === val.label || c.id === val.id);
1142
+ if (bpc && bpc.subtype) {
1143
+ val.subtype = bpc.subtype;
1144
+ logger.warn(`⚠️ SUBTYPE MISSING from stored component "${val.id || val.label}" — enriched from blueprint as "${bpc.subtype}". Autopilot will auto-fix this.`);
1145
+ }
1146
+ }
1147
+ return val;
1148
+ });
1149
+ // Determine prompt type — code (default) or spec
1150
+ const promptType = req.query.type || 'code';
1151
+ let promptId;
1152
+ if (promptType === 'test') {
1153
+ // Test prompt
1154
+ if (component.type === 'extension')
1155
+ promptId = 'gen-test-extension-spec';
1156
+ else if (component.type === 'cortex') {
1157
+ const sub = component.subtype || '';
1158
+ if (sub === 'component')
1159
+ promptId = 'gen-test-cortex-component';
1160
+ else if (sub === 'app-domain')
1161
+ promptId = 'gen-test-cortex-app-domain';
1162
+ else
1163
+ promptId = 'gen-test-cortex-spec';
1164
+ }
1165
+ else if (component.type === 'app')
1166
+ promptId = 'gen-test-app';
1167
+ else {
1168
+ res.status(400).json(error(config.nodeId, 'NO_TEST', `Component type "${component.type}" does not use test prompts`));
1169
+ return;
1170
+ }
1171
+ }
1172
+ else if (promptType === 'spec') {
1173
+ // Spec prompt — only for extension and cortex
1174
+ if (component.type === 'extension')
1175
+ promptId = 'gen-extension-spec';
1176
+ else if (component.type === 'cortex') {
1177
+ const sub = component.subtype || '';
1178
+ if (sub === 'data')
1179
+ promptId = 'gen-data-api-spec';
1180
+ else if (sub === 'component')
1181
+ promptId = 'gen-component-spec';
1182
+ else if (sub === 'app-domain')
1183
+ promptId = 'gen-app-domain-spec';
1184
+ else
1185
+ promptId = 'gen-component-spec';
1186
+ }
1187
+ else if (component.type === 'app') {
1188
+ promptId = 'gen-app-spec';
1189
+ }
1190
+ else {
1191
+ res.status(400).json(error(config.nodeId, 'NO_SPEC', `Component type "${component.type}" does not use specs`));
1192
+ return;
1193
+ }
1194
+ }
1195
+ else {
1196
+ // Code prompt
1197
+ const promptIdMap = {
1198
+ csm: 'gen-csm', memory: 'gen-memory', translation: 'gen-translation',
1199
+ extension: 'gen-extension-code', app: 'gen-app',
1200
+ };
1201
+ promptId = promptIdMap[component.type];
1202
+ if (component.type === 'cortex') {
1203
+ const sub = component.subtype || '';
1204
+ if (sub === 'data')
1205
+ promptId = 'gen-cortex-data';
1206
+ else if (sub === 'component')
1207
+ promptId = 'gen-cortex-component';
1208
+ else if (sub === 'app-domain')
1209
+ promptId = 'gen-cortex-app-domain';
1210
+ else
1211
+ promptId = 'gen-cortex-component';
1212
+ }
1213
+ if (!promptId)
1214
+ promptId = 'gen-extension-code';
1215
+ }
1216
+ // Load extension spec if available (for code prompts that reference it)
1217
+ const specRec = await storage.getMemory(gaii, `generator.${projectId}.spec.${componentId}`);
1218
+ const selfSpec = specRec?.value;
1219
+ // Load extension spec for cortex prompts that need it (gen-data-api-spec, gen-cortex-data)
1220
+ let extensionSpec;
1221
+ let dataApiSpec;
1222
+ if (component.type === 'cortex') {
1223
+ // Find extension component ID from blueprint
1224
+ const extBpComp = blueprint.components.find((c) => c.type === 'extension');
1225
+ if (extBpComp) {
1226
+ const extSpecRec = await storage.getMemory(gaii, `generator.${projectId}.spec.${extBpComp.id}`);
1227
+ extensionSpec = extSpecRec?.value;
1228
+ }
1229
+ // Find data-cortex spec for component/app-domain spec prompts
1230
+ const dataCortexBp = blueprint.components.find((c) => c.type === 'cortex' && c.subtype === 'data');
1231
+ if (dataCortexBp && dataCortexBp.id !== componentId) {
1232
+ const dataSpecRec = await storage.getMemory(gaii, `generator.${projectId}.spec.${dataCortexBp.id}`);
1233
+ dataApiSpec = dataSpecRec?.value;
1234
+ }
1235
+ }
1236
+ // Gather translation keys for cortex component/app-domain prompts
1237
+ const translationKeys = completedComponents
1238
+ .filter(c => c.type === 'translation' && c.contextBundle?.keys)
1239
+ .flatMap(c => c.contextBundle?.keys || []);
1240
+ let prompt;
1241
+ try {
1242
+ prompt = await buildPrompt(storage, promptId, {
1243
+ blueprint: blueprint,
1244
+ interviewSpec: interviewSpec,
1245
+ blueprintComponent: component,
1246
+ componentLabel: component.label,
1247
+ componentType: component.type,
1248
+ completedComponents: completedComponents,
1249
+ projectDescription: project.description || '',
1250
+ selfSpec,
1251
+ extensionSpec,
1252
+ dataApiSpec,
1253
+ translationKeys,
1254
+ });
1255
+ }
1256
+ catch (err) {
1257
+ const msg = err instanceof Error ? err.message : String(err);
1258
+ logger.error(`[generator] buildPrompt FAILED for ${promptId}: ${msg}`);
1259
+ res.status(500).json(error(config.nodeId, 'PROMPT_BUILD_FAILED', `Failed to build prompt "${promptId}": ${msg}`));
1260
+ return;
1261
+ }
1262
+ res.json(success(config.nodeId, {
1263
+ componentId,
1264
+ type: component.type,
1265
+ label: component.label,
1266
+ prompt,
1267
+ }));
1268
+ });
1269
+ // GET /v1/generator/:projectId/prompts — get the blueprint generation prompt
1270
+ router.get('/v1/generator/:projectId/prompts', requireAuth(), requireRole('agent'), requireScope('generator:read'), async (req, res) => {
1271
+ const gaii = ownerGhii(req);
1272
+ const projectId = req.params['projectId'];
1273
+ const [projectRec, interviewRec] = await Promise.all([
1274
+ storage.getMemory(gaii, `generator.${projectId}.project`),
1275
+ storage.getMemory(gaii, `generator.${projectId}.interview-spec`),
1276
+ ]);
1277
+ if (!projectRec) {
1278
+ res.status(404).json(error(config.nodeId, 'NOT_FOUND', 'Project not found'));
1279
+ return;
1280
+ }
1281
+ const project = projectRec.value;
1282
+ const interviewSpec = interviewRec?.value ?? null;
1283
+ const promptType = req.query.type || 'blueprint';
1284
+ if (promptType === 'interview') {
1285
+ // Interview prompt — gen-interview from DB
1286
+ const prompt = await buildPrompt(storage, 'gen-interview', {
1287
+ projectDescription: project.description || '',
1288
+ locale: req.query.locale || interviewSpec?.locale || 'en',
1289
+ });
1290
+ res.json(success(config.nodeId, { prompt }));
1291
+ return;
1292
+ }
1293
+ // Blueprint prompt — gen-blueprint from DB
1294
+ // Load cortex catalog for available libraries
1295
+ let cortexCatalog = [];
1296
+ try {
1297
+ const cortexResp = await fetch(`http://localhost:${config.port}/v1/cortex`, {
1298
+ headers: { 'Authorization': req.headers.authorization || '' },
1299
+ });
1300
+ const cortexJson = await cortexResp.json();
1301
+ cortexCatalog = (cortexJson.data || []).filter((c) => c.active && (c.components || []).some((comp) => comp.type === 'lib'));
1302
+ }
1303
+ catch { /* cortex catalog optional */ }
1304
+ const prompt = await buildPrompt(storage, 'gen-blueprint', {
1305
+ projectDescription: project.description || '',
1306
+ interviewSpec,
1307
+ cortexCatalog,
1308
+ });
1309
+ res.json(success(config.nodeId, { prompt }));
1310
+ });
1311
+ return router;
1312
+ }
1313
+ //# sourceMappingURL=generator.js.map