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,1194 @@
1
+ /**
2
+ * @file foundry.js
3
+ * @description Foundry service — manages project state, task queue, and component
4
+ * lifecycle via the AIMEAT Memory API.
5
+ * All state stored at foundry.{projectId}.* memory keys.
6
+ * @structure
7
+ * - Project CRUD (listProjects, createProject, updateProject, deleteProject, archiveProject)
8
+ * - Component state (getComponent, saveComponent, loadAllComponents)
9
+ * - Agent queue (enqueueTask, pollResults, pollLogs, checkQueueStatus)
10
+ * - Interview Spec (saveInterviewSpec, getInterviewSpec)
11
+ * - Cleanup (cleanupOldEntries)
12
+ * - Registration (registerComponent) — includes cortex case with auto-activate
13
+ * - Lifecycle (getComponentStatuses, activateAll, deactivateAll, removeComponents, reregisterComponent, getAppLaunchUrl)
14
+ * - Activity Logging (writeProjectLog)
15
+ * @usage import { listProjects, createProject, registerComponent } from '/js/services/foundry.js';
16
+ * @version-history
17
+ * v1.0.0 — 2026-03-10 — Initial generator service
18
+ * v1.1.0 — 2026-03-14 — Rewritten buildAgentSetupPrompt with SSE, GAII docs, full HTTP examples
19
+ * v1.1.1 — 2026-03-14 — getListeners now queries /v1/agents instead of memory; heartbeat uses /v1/checkin
20
+ * v1.2.0 — 2026-03-14 — saveComponent retries on 409 VERSION_CONFLICT;
21
+ * registerComponent sends YAML as { yaml: string } for CSM/MSM instead of JSON.parse
22
+ * v2.0.0 — 2026-03-14 — Replace regex sanitizeYaml with cleanYaml that uses
23
+ * real yaml parse+stringify — no more regex hacks
24
+ * v3.0.0 — 2026-03-14 — Add interview spec storage (saveInterviewSpec,
25
+ * getInterviewSpec); add cortex case in registerComponent with auto-activate
26
+ * v3.1.0 — 2026-03-15 — Namespace CSM/MSM names with owner (owner/name) to avoid
27
+ * collisions; upsert pattern (delete+recreate) on NAME_TAKEN for re-runs
28
+ * v4.0.0 — 2026-03-15 — Add lifecycle management: getComponentStatuses,
29
+ * activateAll, deactivateAll, removeComponents, getAppLaunchUrl
30
+ * v4.1.0 — 2026-03-15 — Improve saveComponent retry: up to 3 retries on
31
+ * 409 VERSION_CONFLICT instead of 1, preventing 409 spam on rapid updates
32
+ * v4.2.0 — 2026-03-15 — deleteProject now fully cleans up all registered
33
+ * components (extensions, cortex, apps, csm, msm) + extension memory +
34
+ * translation i18n keys before removing foundry state
35
+ * v4.3.0 — 2026-03-15 — Memory visibility changed to 'public' for cross-component access
36
+ * v4.4.0 — 2026-03-17 — Add reregisterComponent (deactivate → remove → register → re-activate)
37
+ * v4.5.0 — 2026-03-19 — Add writeProjectLog for user-action activity logging; fix apiPatch import
38
+ * v5.0.0 — 2026-03-20 — Remove agent-related functions (replaced by OpenRouter autopilot)
39
+ * v5.1.0 — 2026-03-21 — Add saveProjectSettings/getProjectSettings for settings collection step
40
+ * v6.0.0 — 2026-03-26 — Add multi-pass data model: PASS_TYPES, MULTI_PASS_TYPES,
41
+ * createInitialPasses, createUnitPasses, extractUnitsFromSkeleton, getNextPass,
42
+ * isDuplicatePrescription; skeleton/unit/test/reflection storage functions
43
+ */
44
+ import { apiGet, apiPost, apiPut, apiDelete } from '/js/api.js';
45
+ import { parse as parseYaml, stringify as stringifyYaml } from '/lib/yaml.mjs';
46
+
47
+ /* ── Pass Data Model ─────────────────────────────────── */
48
+
49
+ /**
50
+ * Pass types for the multi-pass pipeline.
51
+ * Order matters: test → skeleton → units → assembly
52
+ */
53
+ export const PASS_TYPES = {
54
+ TEST: 'test',
55
+ SKELETON: 'skeleton',
56
+ UNIT: 'unit',
57
+ ASSEMBLY: 'assembly',
58
+ REFLECTION: 'reflection',
59
+ };
60
+
61
+ /**
62
+ * Component types that use multi-pass generation.
63
+ * All others use single-shot (same as current generator).
64
+ */
65
+ export const MULTI_PASS_TYPES = ['extension', 'cortex', 'app'];
66
+
67
+ /**
68
+ * Maximum reflection attempts before escalating to user.
69
+ */
70
+ export const MAX_REFLECTIONS = 3;
71
+
72
+ /**
73
+ * Phase order for components. Components should be generated in this order.
74
+ * Earlier phases must be completed before later phases start.
75
+ */
76
+ export const PHASE_ORDER = ['csm', 'memory', 'translation', 'extension', 'cortex', 'app'];
77
+
78
+ /**
79
+ * Check if a component can proceed based on phase order.
80
+ * Returns { ok: true } or { ok: false, missing: [...] } listing unregistered dependencies.
81
+ */
82
+ export function checkPhaseOrder(componentType, allComponents) {
83
+ const typeIndex = PHASE_ORDER.indexOf(componentType === 'msm' ? 'csm' : componentType);
84
+ if (typeIndex <= 0) return { ok: true }; // CSM has no dependencies
85
+
86
+ const required = PHASE_ORDER.slice(0, typeIndex);
87
+ const missing = [];
88
+ for (const reqType of required) {
89
+ const comps = allComponents.filter(c => c.type === reqType || (reqType === 'translation' && c.type === 'translation'));
90
+ const allRegistered = comps.length > 0 && comps.every(c => c.registeredAs || c.status === 'registered');
91
+ if (!allRegistered && comps.length > 0) {
92
+ missing.push(...comps.filter(c => !c.registeredAs && c.status !== 'registered').map(c => c.label || c.id));
93
+ }
94
+ }
95
+ return missing.length > 0 ? { ok: false, missing } : { ok: true };
96
+ }
97
+
98
+ /**
99
+ * Create initial passes array for a component based on its type.
100
+ * For single-shot types (csm, msm, memory, translation), returns empty array.
101
+ * For multi-pass types, returns [test, skeleton] — unit passes are added after skeleton is validated.
102
+ */
103
+ export function createInitialPasses(componentType) {
104
+ if (!MULTI_PASS_TYPES.includes(componentType)) return [];
105
+ return [
106
+ { id: 'test', type: PASS_TYPES.TEST, status: 'pending', attempt: 1 },
107
+ { id: 'skeleton', type: PASS_TYPES.SKELETON, status: 'pending', attempt: 1 },
108
+ ];
109
+ }
110
+
111
+ /**
112
+ * Create unit passes from a validated skeleton.
113
+ * Parses the skeleton YAML to extract action/method/view IDs.
114
+ */
115
+ export function createUnitPasses(skeleton) {
116
+ const units = extractUnitsFromSkeleton(skeleton);
117
+ return units.map(unit => ({
118
+ id: `unit:${unit.id}`,
119
+ type: PASS_TYPES.UNIT,
120
+ status: 'pending',
121
+ attempt: 1,
122
+ unitId: unit.id,
123
+ unitLabel: unit.label || unit.id,
124
+ }));
125
+ }
126
+
127
+ /**
128
+ * Extract unit definitions from a skeleton YAML string.
129
+ * Returns array of { id, label } for each action/method/section/view.
130
+ */
131
+ export function extractUnitsFromSkeleton(skeletonYaml) {
132
+ const lines = skeletonYaml.split('\n');
133
+ const units = [];
134
+ // Track which section we're in based on indentation
135
+ // Collect ALL - id: and - name: entries from actions/methods/sections/views
136
+ const unitSections = new Set(['actions:', 'methods:', 'sections:', 'views:']);
137
+ let inUnitSection = false;
138
+ let sectionIndent = 0;
139
+
140
+ for (const line of lines) {
141
+ const trimmed = line.trim();
142
+ if (!trimmed) continue;
143
+
144
+ // Detect unit section start (top-level key)
145
+ if (unitSections.has(trimmed)) {
146
+ inUnitSection = true;
147
+ sectionIndent = line.search(/\S/);
148
+ continue;
149
+ }
150
+
151
+ // If we're in a unit section, check if we've left it
152
+ if (inUnitSection) {
153
+ const currentIndent = line.search(/\S/);
154
+ // A line at same or lesser indent as section header = new top-level section
155
+ if (currentIndent <= sectionIndent && !trimmed.startsWith('-') && /^\w/.test(trimmed)) {
156
+ inUnitSection = false;
157
+ // But check if this is ANOTHER unit section
158
+ if (unitSections.has(trimmed)) {
159
+ inUnitSection = true;
160
+ sectionIndent = currentIndent;
161
+ }
162
+ continue;
163
+ }
164
+ }
165
+
166
+ // Collect units from any active section
167
+ if (inUnitSection) {
168
+ if (trimmed.startsWith('- id: ')) {
169
+ const val = trimmed.slice(6).trim().replace(/["']/g, '');
170
+ units.push({ id: val, label: val });
171
+ } else if (trimmed.startsWith('- name: ')) {
172
+ const val = trimmed.slice(8).trim().replace(/["']/g, '');
173
+ units.push({ id: val, label: val });
174
+ }
175
+ }
176
+ }
177
+ return units;
178
+ }
179
+
180
+ /**
181
+ * Get the next pending pass for a component.
182
+ */
183
+ export function getNextPass(passes) {
184
+ return passes.find(p => p.status === 'pending');
185
+ }
186
+
187
+ /**
188
+ * Check if a reflection prescription is a duplicate of the previous one.
189
+ * Used for loop detection (same action+target twice = stuck).
190
+ */
191
+ export function isDuplicatePrescription(reflectionHistory, newPrescription) {
192
+ if (!reflectionHistory || reflectionHistory.length === 0) return false;
193
+ const prev = reflectionHistory[reflectionHistory.length - 1];
194
+ return prev.prescription &&
195
+ prev.prescription.action === newPrescription.action &&
196
+ prev.prescription.target === newPrescription.target;
197
+ }
198
+
199
+ /* ── Helpers ─────────────────────────────────────────── */
200
+
201
+ function genId() {
202
+ return 'prj-' + Date.now().toString(36) + '-' + Math.random().toString(36).slice(2, 7);
203
+ }
204
+
205
+ function taskId() {
206
+ return 'task-' + Date.now().toString(36) + '-' + Math.random().toString(36).slice(2, 7);
207
+ }
208
+
209
+ /* ── Project CRUD ────────────────────────────────────── */
210
+
211
+ export async function listProjects() {
212
+ const resp = await apiGet('/v1/memory?prefix=foundry.&owner_scope=true');
213
+ const items = resp?.data?.items || resp?.data?.entries || [];
214
+ const all = items
215
+ .filter(i => i.key.endsWith('.project'))
216
+ .map(i => ({ key: i.key, ...(typeof i.value === 'string' ? JSON.parse(i.value) : i.value) }));
217
+
218
+ // Auto-clean corrupted/orphaned project entries (missing projectId or name)
219
+ const valid = [];
220
+ for (const p of all) {
221
+ if (!p.projectId || !p.name) {
222
+ try { await apiDelete(`/v1/memory/${encodeURIComponent(p.key)}`); } catch { /* best effort */ }
223
+ continue;
224
+ }
225
+ valid.push(p);
226
+ }
227
+ return valid.sort((a, b) => (b.updatedAt || '').localeCompare(a.updatedAt || ''));
228
+ }
229
+
230
+ export async function getProject(projectId) {
231
+ // Use owner_scope to find projects regardless of which agent/identity created them
232
+ const resp = await apiGet(`/v1/memory?prefix=foundry.${projectId}.project&owner_scope=true`);
233
+ const items = resp?.data?.items || [];
234
+ const item = items.find(i => i.key === `foundry.${projectId}.project`);
235
+ if (!item) return null;
236
+ const val = typeof item.value === 'string' ? JSON.parse(item.value) : (item.value || item);
237
+ return { ...val, _version: item.version };
238
+ }
239
+
240
+ export async function createProject(name, description) {
241
+ const projectId = genId();
242
+ const project = {
243
+ projectId,
244
+ name,
245
+ description,
246
+ status: 'new',
247
+ createdAt: new Date().toISOString(),
248
+ updatedAt: new Date().toISOString(),
249
+ blueprint: null,
250
+ };
251
+ await apiPost('/v1/memory', {
252
+ key: `foundry.${projectId}.project`,
253
+ value: project,
254
+ visibility: 'owner',
255
+ });
256
+ return { ...project, _version: 1 };
257
+ }
258
+
259
+ export async function updateProject(projectId, updates) {
260
+ const current = await getProject(projectId);
261
+ if (!current) throw new Error('Project not found');
262
+ const version = current._version || 0;
263
+ const { _version, ...rest } = current;
264
+ const updated = { ...rest, ...updates, updatedAt: new Date().toISOString() };
265
+ await apiPut(`/v1/memory/foundry.${projectId}.project`, {
266
+ value: updated,
267
+ visibility: 'owner',
268
+ version,
269
+ });
270
+ return { ...updated, _version: version + 1 };
271
+ }
272
+
273
+ export async function archiveProject(projectId) {
274
+ return updateProject(projectId, { status: 'archived' });
275
+ }
276
+
277
+ export async function deleteProject(projectId, session) {
278
+ // Phase 1: Unregister all live components (extensions, cortex, apps, csm, msm)
279
+ const components = await loadAllComponents(projectId);
280
+ const registered = components.filter(c => c.registeredAs);
281
+
282
+ for (const comp of registered) {
283
+ const name = comp.registeredAs;
284
+ try {
285
+ if (comp.type === 'extension') {
286
+ try { await apiPost(`/v1/extensions/${encodeURIComponent(name)}/deactivate`); } catch { /* ok */ }
287
+ await apiDelete(`/v1/extensions/${encodeURIComponent(name)}`);
288
+ // Extension memory is cleaned up by DELETE /v1/extensions/{name} on the backend
289
+ } else if (comp.type === 'cortex') {
290
+ try { await apiPost(`/v1/cortex/${encodeURIComponent(name)}/deactivate`); } catch { /* ok */ }
291
+ await apiDelete(`/v1/cortex/${encodeURIComponent(name)}`);
292
+ } else if (comp.type === 'app') {
293
+ const owner = session?.owner || '';
294
+ await apiDelete(`/v1/apps/${encodeURIComponent(owner)}/${encodeURIComponent(name)}`);
295
+ } else if (comp.type === 'csm') {
296
+ await apiDelete(`/v1/csm/${encodeURIComponent(name)}`);
297
+ } else if (comp.type === 'msm') {
298
+ await apiDelete(`/v1/msm/${encodeURIComponent(name)}`);
299
+ }
300
+ } catch { /* best effort — component may already be gone */ }
301
+ }
302
+
303
+ // Phase 2: Clean translation memory keys — only delete this project's locale keys
304
+ // registeredAs format: "halytyskartta.i18n-fi" or "i18n-fi" (legacy)
305
+ const translationComps = components.filter(c => c.type === 'translation' && c.registeredAs);
306
+ const extComp = components.find(c => c.type === 'extension' && c.registeredAs);
307
+ const csmComp = components.find(c => c.type === 'csm' && c.registeredAs);
308
+ const slug = extComp?.registeredAs || csmComp?.registeredAs?.split('/')?.pop() || '';
309
+ for (const comp of translationComps) {
310
+ const name = comp.registeredAs;
311
+ if (name) {
312
+ // Try service-prefixed key first, then legacy format
313
+ const locale = name.replace(/^.*i18n-/, '');
314
+ const prefixedKey = slug ? `${slug}.i18n.${locale}` : `i18n.${locale}`;
315
+ try { await apiDelete(`/v1/memory/${encodeURIComponent(prefixedKey)}`); } catch { /* best effort */ }
316
+ // Also try legacy unprefixed key
317
+ if (slug) {
318
+ try { await apiDelete(`/v1/memory/${encodeURIComponent(`i18n.${locale}`)}`); } catch { /* best effort */ }
319
+ }
320
+ }
321
+ }
322
+
323
+ // Phase 3: Delete all foundry state keys
324
+ const resp = await apiGet(`/v1/memory?prefix=foundry.${projectId}.&owner_scope=true`);
325
+ const items = resp?.data?.items || resp?.data?.entries || [];
326
+ for (const item of items) {
327
+ await apiDelete(`/v1/memory/${encodeURIComponent(item.key)}`);
328
+ }
329
+ }
330
+
331
+ /* ── Activity Logging ────────────────────────────────── */
332
+
333
+ /**
334
+ * Write a project-level activity log entry to memory.
335
+ * Uses the same key pattern as agent logs: foundry.{projectId}.logs.{logId}
336
+ */
337
+ export async function writeProjectLog(projectId, action, details = {}) {
338
+ const logId = `log-${Date.now()}-${Math.random().toString(36).slice(2, 6)}`;
339
+ const key = `foundry.${projectId}.logs.${logId}`;
340
+ try {
341
+ await apiPost('/v1/memory', {
342
+ key,
343
+ value: {
344
+ logId,
345
+ level: 'info',
346
+ message: action,
347
+ componentId: details.componentId || null,
348
+ meta: details.meta || null,
349
+ source: 'ui',
350
+ timestamp: new Date().toISOString(),
351
+ },
352
+ visibility: 'owner',
353
+ tags: ['foundry', 'log'],
354
+ });
355
+ } catch { /* best-effort logging — don't block user flow */ }
356
+ }
357
+
358
+ /* ── Debug Artifact Writer ─────────────────────────── */
359
+
360
+ /**
361
+ * Write a debug artifact to disk for a foundry component.
362
+ * Best-effort — failures are silently ignored (don't block user flow).
363
+ * @param {string} projectId
364
+ * @param {string} componentId
365
+ * @param {string} phase — 'prompt'|'generated'|'validation'|'test-prompt'|'test-code'|'test-result'|'project-meta'
366
+ * @param {string|object} content
367
+ */
368
+ export async function writeDebugArtifact(projectId, componentId, phase, content) {
369
+ try {
370
+ await apiPost(`/v1/foundry/${projectId}/debug/${componentId}`, { phase, content });
371
+ } catch { /* best-effort */ }
372
+ }
373
+
374
+ /* ── Interview Spec ─────────────────────────────────── */
375
+
376
+ export async function saveInterviewSpec(projectId, spec) {
377
+ return apiPost('/v1/memory', {
378
+ key: `foundry.${projectId}.interview-spec`,
379
+ value: spec,
380
+ visibility: 'owner',
381
+ });
382
+ }
383
+
384
+ export async function getInterviewSpec(projectId) {
385
+ try {
386
+ const key = `foundry.${projectId}.interview-spec`;
387
+ const resp = await apiGet(`/v1/memory?prefix=${key}&owner_scope=true`);
388
+ const item = (resp?.data?.items || []).find(i => i.key === key);
389
+ if (!item?.value) return null;
390
+ return typeof item.value === 'string' ? JSON.parse(item.value) : item.value;
391
+ } catch { return null; }
392
+ }
393
+
394
+ /* ── Pending Edit State ─────────────────────────────── */
395
+
396
+ export async function savePendingEdit(projectId, data) {
397
+ return apiPost('/v1/memory', {
398
+ key: `foundry.${projectId}.pending-edit`,
399
+ value: data,
400
+ visibility: 'owner',
401
+ });
402
+ }
403
+
404
+ export async function getPendingEdit(projectId) {
405
+ try {
406
+ const key = `foundry.${projectId}.pending-edit`;
407
+ const resp = await apiGet(`/v1/memory?prefix=${key}&owner_scope=true`);
408
+ const item = (resp?.data?.items || []).find(i => i.key === key);
409
+ if (!item?.value) return null;
410
+ return typeof item.value === 'string' ? JSON.parse(item.value) : item.value;
411
+ } catch { return null; }
412
+ }
413
+
414
+ export async function clearPendingEdit(projectId) {
415
+ try {
416
+ await apiDelete(`/v1/memory/foundry.${projectId}.pending-edit`);
417
+ } catch { /* ignore */ }
418
+ }
419
+
420
+ /* ── Project Settings ────────────────────────────────── */
421
+
422
+ export async function saveProjectSettings(projectId, values, secretKeys) {
423
+ return apiPost(`/v1/foundry/${projectId}/settings`, { values, secretKeys });
424
+ }
425
+
426
+ export async function getProjectSettings(projectId) {
427
+ const res = await apiGet(`/v1/foundry/${projectId}/settings`);
428
+ return res?.data?.values || {};
429
+ }
430
+
431
+ /* ── Skeleton / Unit / Test / Reflection Storage ─────── */
432
+
433
+ /**
434
+ * Save skeleton YAML for a component.
435
+ */
436
+ export async function saveSkeleton(projectId, componentId, skeletonYaml) {
437
+ const key = `foundry.${projectId}.component.${componentId}.skeleton`;
438
+ await apiPost('/v1/memory', { key, value: skeletonYaml, visibility: 'owner' });
439
+ }
440
+
441
+ /**
442
+ * Load skeleton YAML for a component.
443
+ */
444
+ export async function loadSkeleton(projectId, componentId) {
445
+ try {
446
+ const key = `foundry.${projectId}.component.${componentId}.skeleton`;
447
+ const resp = await apiGet(`/v1/memory?prefix=${encodeURIComponent(key)}&owner_scope=true`);
448
+ const item = (resp?.data?.items || []).find(i => i.key === key);
449
+ if (!item?.value) return null;
450
+ return typeof item.value === 'string' ? item.value : JSON.stringify(item.value);
451
+ } catch { return null; }
452
+ }
453
+
454
+ /**
455
+ * Save a unit implementation.
456
+ */
457
+ export async function saveUnit(projectId, componentId, unitId, code) {
458
+ const key = `foundry.${projectId}.component.${componentId}.units.${unitId}`;
459
+ await apiPost('/v1/memory', { key, value: code, visibility: 'owner' });
460
+ }
461
+
462
+ /**
463
+ * Load all unit implementations for a component.
464
+ * Returns { unitId: code } object.
465
+ */
466
+ export async function loadUnits(projectId, componentId) {
467
+ const prefix = `foundry.${projectId}.component.${componentId}.units.`;
468
+ const resp = await apiGet(`/v1/memory?prefix=${encodeURIComponent(prefix)}&owner_scope=true`);
469
+ const items = resp?.data?.items || [];
470
+ const units = {};
471
+ for (const item of items) {
472
+ const unitId = item.key.replace(prefix, '');
473
+ units[unitId] = typeof item.value === 'string' ? item.value : JSON.stringify(item.value);
474
+ }
475
+ return units;
476
+ }
477
+
478
+ /**
479
+ * Save pre-generated test code for a component.
480
+ */
481
+ export async function saveTestCode(projectId, componentId, testCode) {
482
+ const key = `foundry.${projectId}.component.${componentId}.tests`;
483
+ await apiPost('/v1/memory', { key, value: testCode, visibility: 'owner' });
484
+ }
485
+
486
+ /**
487
+ * Load pre-generated test code.
488
+ */
489
+ export async function loadTestCode(projectId, componentId) {
490
+ try {
491
+ const key = `foundry.${projectId}.component.${componentId}.tests`;
492
+ const resp = await apiGet(`/v1/memory?prefix=${encodeURIComponent(key)}&owner_scope=true`);
493
+ const item = (resp?.data?.items || []).find(i => i.key === key);
494
+ if (!item?.value) return null;
495
+ return typeof item.value === 'string' ? item.value : JSON.stringify(item.value);
496
+ } catch { return null; }
497
+ }
498
+
499
+ /**
500
+ * Append a reflection entry to the component's reflection history.
501
+ */
502
+ export async function appendReflection(projectId, componentId, entry) {
503
+ const key = `foundry.${projectId}.component.${componentId}.reflection-history`;
504
+ let history = [];
505
+ try {
506
+ const resp = await apiGet(`/v1/memory?prefix=${encodeURIComponent(key)}&owner_scope=true`);
507
+ const item = (resp?.data?.items || []).find(i => i.key === key);
508
+ if (item?.value) {
509
+ const existing = typeof item.value === 'string' ? JSON.parse(item.value) : item.value;
510
+ if (Array.isArray(existing)) history = existing;
511
+ }
512
+ } catch { /* no history yet */ }
513
+
514
+ history.push({ ...entry, timestamp: new Date().toISOString() });
515
+
516
+ await apiPost('/v1/memory', { key, value: history, visibility: 'owner' });
517
+ return history;
518
+ }
519
+
520
+ /**
521
+ * Load reflection history for a component.
522
+ */
523
+ export async function loadReflectionHistory(projectId, componentId) {
524
+ try {
525
+ const key = `foundry.${projectId}.component.${componentId}.reflection-history`;
526
+ const resp = await apiGet(`/v1/memory?prefix=${encodeURIComponent(key)}&owner_scope=true`);
527
+ const item = (resp?.data?.items || []).find(i => i.key === key);
528
+ if (!item?.value) return [];
529
+ const val = typeof item.value === 'string' ? JSON.parse(item.value) : item.value;
530
+ return Array.isArray(val) ? val : [];
531
+ } catch { return []; }
532
+ }
533
+
534
+ /* ── Component State ─────────────────────────────────── */
535
+
536
+ export async function getComponent(projectId, componentId) {
537
+ const key = `foundry.${projectId}.component.${componentId}`;
538
+ const resp = await apiGet(`/v1/memory?prefix=${key}&owner_scope=true`);
539
+ const item = (resp?.data?.items || []).find(i => i.key === key);
540
+ return item || null;
541
+ }
542
+
543
+ export async function saveComponent(projectId, component) {
544
+ let version = component._version || 0;
545
+ const { _version, ...data } = component;
546
+ const key = `foundry.${projectId}.component.${data.id}`;
547
+ if (version === 0) {
548
+ // New component — use POST to create
549
+ await apiPost('/v1/memory', {
550
+ key,
551
+ value: data,
552
+ visibility: 'owner',
553
+ });
554
+ } else {
555
+ // Existing component — use PUT with optimistic locking; retry up to 3 times on conflict
556
+ const MAX_RETRIES = 3;
557
+ for (let attempt = 0; attempt <= MAX_RETRIES; attempt++) {
558
+ try {
559
+ await apiPut(`/v1/memory/${key}`, {
560
+ value: data,
561
+ visibility: 'owner',
562
+ version,
563
+ });
564
+ break; // success
565
+ } catch (err) {
566
+ const isConflict = err?.code === 'VERSION_CONFLICT' || err?.status === 409;
567
+ if (isConflict && attempt < MAX_RETRIES) {
568
+ // Re-fetch current version and retry
569
+ const fresh = await apiGet(`/v1/memory/${key}`);
570
+ version = fresh?.data?.version ?? version + 1;
571
+ } else {
572
+ throw err;
573
+ }
574
+ }
575
+ }
576
+ }
577
+ return { ...data, _version: version + 1 };
578
+ }
579
+
580
+ export async function loadAllComponents(projectId) {
581
+ const resp = await apiGet(`/v1/memory?prefix=foundry.${projectId}.component.&owner_scope=true`);
582
+ const items = resp?.data?.items || resp?.data?.entries || [];
583
+ // Filter out sub-keys (skeleton, tests, units, reflection-history) — only load component state records
584
+ const prefix = `foundry.${projectId}.component.`;
585
+ const componentItems = items.filter(i => {
586
+ const suffix = i.key.slice(prefix.length);
587
+ return !suffix.includes('.'); // component IDs like "ext-1" have no dots; sub-keys like "ext-1.tests" do
588
+ });
589
+ return componentItems.map(i => {
590
+ const val = typeof i.value === 'string' ? JSON.parse(i.value) : i.value;
591
+ // Ensure id is present — extract from memory key if missing (backend submit may omit it)
592
+ if (!val.id && i.key) {
593
+ const prefix = `foundry.${projectId}.component.`;
594
+ val.id = i.key.startsWith(prefix) ? i.key.slice(prefix.length) : i.key;
595
+ }
596
+ if (!val.label) val.label = val.id;
597
+ // Map backend 'content' field to frontend 'result' if result is missing
598
+ if (!val.result && val.content) val.result = val.content;
599
+ // Reconstruct raw markdown from extracted cortex JSON — the validator expects yaml+js code blocks
600
+ if (val.result && val.type === 'cortex' && typeof val.result === 'string') {
601
+ try {
602
+ const parsed = JSON.parse(val.result);
603
+ if (parsed.manifest && parsed.libs) {
604
+ const js = parsed.libs[0]?.code || '';
605
+ val.result = '```yaml\n' + parsed.manifest + '\n```\n\n```javascript\n' + js + '\n```';
606
+ }
607
+ } catch { /* not extracted JSON — already in raw format, leave as-is */ }
608
+ }
609
+ return { ...val, _version: i.version };
610
+ });
611
+ }
612
+
613
+ /* ── Agent Queue ─────────────────────────────────────── */
614
+
615
+ export async function enqueueTask(projectId, componentId, type, prompt, assignedTo, assignedToTag) {
616
+ const id = taskId();
617
+ const expiresAt = new Date(Date.now() + 30 * 60 * 1000).toISOString();
618
+ const entry = {
619
+ taskId: id,
620
+ componentId,
621
+ type,
622
+ prompt,
623
+ assignedTo: assignedTo || null,
624
+ assignedToTag: assignedToTag || 'foundry',
625
+ status: 'pending',
626
+ timeoutMinutes: 30,
627
+ createdAt: new Date().toISOString(),
628
+ expiresAt,
629
+ };
630
+ await apiPost('/v1/memory', {
631
+ key: `foundry.${projectId}.queue.${id}`,
632
+ value: entry,
633
+ visibility: 'owner',
634
+ });
635
+ return entry;
636
+ }
637
+
638
+ export async function pollResults(projectId) {
639
+ const resp = await apiGet(`/v1/memory?prefix=foundry.${projectId}.results.&owner_scope=true`);
640
+ const items = resp?.data?.items || resp?.data?.entries || [];
641
+ return items.map(i => typeof i.value === 'string' ? JSON.parse(i.value) : i.value);
642
+ }
643
+
644
+ export async function pollLogs(projectId, taskIdVal) {
645
+ try {
646
+ const resp = await apiGet(`/v1/memory/foundry.${projectId}.logs.${taskIdVal}`);
647
+ return resp?.data?.entries || [];
648
+ } catch { return []; }
649
+ }
650
+
651
+ export async function checkQueueStatus(projectId) {
652
+ const resp = await apiGet(`/v1/memory?prefix=foundry.${projectId}.queue.&owner_scope=true`);
653
+ const items = resp?.data?.items || resp?.data?.entries || [];
654
+ const now = Date.now();
655
+ return items.map(i => {
656
+ const val = typeof i.value === 'string' ? JSON.parse(i.value) : i.value;
657
+ if ((val.status === 'pending' || val.status === 'processing') && new Date(val.expiresAt).getTime() < now) {
658
+ val.status = 'expired';
659
+ }
660
+ return val;
661
+ });
662
+ }
663
+
664
+ /* ── Cleanup ────────────────────────────────────────── */
665
+
666
+ export async function cleanupOldEntries(projectId) {
667
+ const cutoff = Date.now() - 7 * 24 * 60 * 60 * 1000;
668
+ const prefixes = ['queue', 'results', 'logs'];
669
+ for (const pfx of prefixes) {
670
+ try {
671
+ const resp = await apiGet(`/v1/memory?prefix=foundry.${projectId}.${pfx}.&owner_scope=true`);
672
+ const items = resp?.data?.items || [];
673
+ for (const item of items) {
674
+ const val = typeof item.value === 'string' ? JSON.parse(item.value) : item.value;
675
+ const ts = val.completedAt || val.createdAt || item.created_at;
676
+ if (ts && new Date(ts).getTime() < cutoff) {
677
+ await apiDelete(`/v1/memory/${encodeURIComponent(item.key)}`);
678
+ }
679
+ }
680
+ } catch { /* best effort */ }
681
+ }
682
+ }
683
+
684
+ /* ── App Manifest Parser ─────────────────────────────── */
685
+
686
+ /**
687
+ * Extract name, description, version from an AIMEAT App Manifest HTML comment.
688
+ * Expected format: <!-- AIMEAT App Manifest\nname: ...\nversion: ...\n-->
689
+ */
690
+ function parseAppManifest(html) {
691
+ const meta = { name: '', description: '', version: '1.0.0' };
692
+ const match = html.match(/<!--\s*AIMEAT App Manifest\s*\n([\s\S]*?)-->/i);
693
+ if (!match) return meta;
694
+ for (const line of match[1].split('\n')) {
695
+ const m = line.match(/^\s*(name|description|version|entry)\s*:\s*(.+)/i);
696
+ if (m) {
697
+ const key = m[1].toLowerCase();
698
+ if (key in meta) meta[key] = m[2].trim();
699
+ }
700
+ }
701
+ return meta;
702
+ }
703
+
704
+ /* ── Registration ────────────────────────────────────── */
705
+
706
+ /**
707
+ * Clean YAML through the real yaml parser: parse → re-serialize.
708
+ * No regex hacks. If the YAML is valid, the parser handles block scalars,
709
+ * multiline strings, quoting, etc. correctly. Returns clean YAML string.
710
+ * Falls back to minimal text cleanup if parse fails entirely.
711
+ */
712
+ function cleanYaml(text) {
713
+ if (typeof text !== 'string') return text;
714
+ // Minimal pre-clean: only fix chars that prevent parsing at all
715
+ let s = text;
716
+ s = s.replace(/\\_/g, '_');
717
+ s = s.replace(/\\\[/g, '[').replace(/\\\]/g, ']');
718
+ s = s.replace(/\\\{/g, '{').replace(/\\\}/g, '}');
719
+ s = s.replace(/[\u200B\u200C\u200D\uFEFF]/g, '');
720
+ try {
721
+ const parsed = parseYaml(s);
722
+ return stringifyYaml(parsed, { lineWidth: 0 });
723
+ } catch {
724
+ // Try fixing markdown bullets and retry
725
+ s = s.replace(/^(\s*)\*\s{2,}/gm, '$1- ');
726
+ s = s.replace(/^(\s*)\*\s+(?=\S)/gm, '$1- ');
727
+ try {
728
+ const parsed = parseYaml(s);
729
+ return stringifyYaml(parsed, { lineWidth: 0 });
730
+ } catch {
731
+ return s; // give up, return pre-cleaned text
732
+ }
733
+ }
734
+ }
735
+
736
+ /**
737
+ * Prefix service.name in YAML with owner namespace (owner/name) to avoid collisions.
738
+ * If already namespaced with this owner, leaves it unchanged.
739
+ */
740
+ function namespacedYaml(result, owner) {
741
+ const raw = typeof result === 'string' ? cleanYaml(result) : result;
742
+ if (!owner || typeof raw !== 'string') return typeof result === 'string' ? { yaml: raw } : result;
743
+ try {
744
+ const parsed = parseYaml(raw);
745
+ const name = parsed?.service?.name;
746
+ if (name && !name.startsWith(owner + '/')) {
747
+ parsed.service.name = owner + '/' + name;
748
+ }
749
+ return { yaml: stringifyYaml(parsed, { lineWidth: 0 }) };
750
+ } catch {
751
+ return { yaml: raw };
752
+ }
753
+ }
754
+
755
+ /**
756
+ * POST a CSM/MSM manifest. On 409 NAME_TAKEN, delete the old one (if owned) and retry.
757
+ */
758
+ async function upsertManifest(endpoint, body, owner) {
759
+ try {
760
+ return await apiPost(endpoint, body);
761
+ } catch (err) {
762
+ const code = err?.code || '';
763
+ if (err?.status === 409 || code.includes('NAME_TAKEN')) {
764
+ // Extract name from the YAML we just tried to post
765
+ try {
766
+ const parsed = parseYaml(body.yaml);
767
+ const name = parsed?.service?.name;
768
+ if (name) {
769
+ await apiDelete(`${endpoint}/${encodeURIComponent(name)}`);
770
+ return await apiPost(endpoint, body);
771
+ }
772
+ } catch { /* delete failed — not our manifest, surface original error */ }
773
+ }
774
+ throw err;
775
+ }
776
+ }
777
+
778
+ export async function registerComponent(type, result, session, serviceSlug = '') {
779
+ const owner = session?.owner;
780
+ switch (type) {
781
+ case 'csm': {
782
+ // CSM results are YAML — namespace the service name with owner to avoid collisions
783
+ const yaml = namespacedYaml(result, owner);
784
+ return upsertManifest('/v1/csm', yaml, owner);
785
+ }
786
+ case 'msm': {
787
+ // MSM results are YAML — namespace the service name with owner to avoid collisions
788
+ const yaml = namespacedYaml(result, owner);
789
+ return upsertManifest('/v1/msm', yaml, owner);
790
+ }
791
+ case 'extension': {
792
+ // POST /v1/extensions expects { manifest: yamlString, scripts: { key: code } }
793
+ const parts = parseExtensionResult(result);
794
+ return apiPost('/v1/extensions', { manifest: cleanYaml(parts.manifest), scripts: parts.scripts });
795
+ }
796
+ case 'app': {
797
+ // App result is HTML. POST /v1/apps expects { filename, content (base64), name, description, ... }
798
+ const html = typeof result === 'string' ? result : String(result);
799
+ const appMeta = parseAppManifest(html);
800
+ const content = btoa(unescape(encodeURIComponent(html))); // UTF-8 safe base64
801
+ return apiPost('/v1/apps', {
802
+ filename: (appMeta.name || 'app') + '.html',
803
+ content,
804
+ mime_type: 'text/html',
805
+ name: appMeta.name || 'Generated App',
806
+ description: appMeta.description || '',
807
+ version: appMeta.version || '1.0.0',
808
+ });
809
+ }
810
+ case 'memory': {
811
+ const entries = typeof result === 'string' ? JSON.parse(result) : result;
812
+ const results = [];
813
+ for (const [rawKey, value] of Object.entries(entries)) {
814
+ // Service-prefix memory keys to avoid collisions across services
815
+ // Skip __meta and __index keys (they already contain the namespace)
816
+ const key = (serviceSlug && !rawKey.startsWith(serviceSlug + '.'))
817
+ ? `${serviceSlug}.${rawKey}`
818
+ : rawKey;
819
+ results.push(await apiPost('/v1/memory', { key, value, visibility: 'public' }));
820
+ }
821
+ return { data: { registered: results.length, keys: results.map((_, i) => {
822
+ const rawKey = Object.keys(entries)[i];
823
+ return (serviceSlug && !rawKey.startsWith(serviceSlug + '.'))
824
+ ? `${serviceSlug}.${rawKey}`
825
+ : rawKey;
826
+ }) } };
827
+ }
828
+ case 'translation': {
829
+ const translations = typeof result === 'string' ? JSON.parse(result) : result;
830
+ // Store each locale's translations with service-prefix to avoid collisions
831
+ const locales = [];
832
+ for (const [locale, strings] of Object.entries(translations)) {
833
+ if (locale && typeof strings === 'object') {
834
+ const key = serviceSlug ? `${serviceSlug}.i18n.${locale}` : `i18n.${locale}`;
835
+ await apiPost('/v1/memory', {
836
+ key,
837
+ value: strings,
838
+ visibility: 'public',
839
+ });
840
+ locales.push(locale);
841
+ }
842
+ }
843
+ const prefix = serviceSlug ? `${serviceSlug}.` : '';
844
+ return { ok: true, data: { locales, name: `${prefix}i18n-${locales.join('-')}` } };
845
+ }
846
+ case 'cortex': {
847
+ // Cortex result contains YAML manifest + optional JS lib code (pre-extracted by validator)
848
+ const extracted = typeof result === 'string' ? null : result;
849
+ if (!extracted || !extracted.manifest) {
850
+ throw new Error('Cortex result must be pre-extracted by validator (manifest + libs)');
851
+ }
852
+ const body = { manifest: extracted.manifest };
853
+ if (extracted.libs && extracted.libs.length > 0) {
854
+ const libs = {};
855
+ for (const lib of extracted.libs) {
856
+ if (lib.filename && lib.code) libs[lib.filename] = lib.code;
857
+ }
858
+ if (Object.keys(libs).length > 0) body.libs = libs;
859
+ }
860
+ let installResp;
861
+ try {
862
+ installResp = await apiPost('/v1/cortex', body);
863
+ } catch (e) {
864
+ // If cortex already exists (409 CONFLICT), deactivate + delete + retry install
865
+ if (e.message?.includes('already installed') || e.message?.includes('409') || e.message?.includes('CONFLICT')) {
866
+ const existingName = extracted.manifest.match?.(/name:\s*"?([^\s"]+)"?/)?.[1];
867
+ if (existingName) {
868
+ try { await apiPost(`/v1/cortex/${encodeURIComponent(existingName)}/deactivate`); } catch { /* ok */ }
869
+ await apiDelete(`/v1/cortex/${encodeURIComponent(existingName)}`);
870
+ installResp = await apiPost('/v1/cortex', body);
871
+ } else {
872
+ throw e;
873
+ }
874
+ } else {
875
+ throw e;
876
+ }
877
+ }
878
+ // Auto-activate after install — deactivate first to ensure new code takes effect
879
+ const name = installResp?.data?.name || installResp?.data?.extension?.name;
880
+ if (name) {
881
+ try { await apiPost(`/v1/cortex/${encodeURIComponent(name)}/deactivate`); } catch { /* ok if not yet active */ }
882
+ await apiPost(`/v1/cortex/${encodeURIComponent(name)}/activate`);
883
+ }
884
+ return installResp;
885
+ }
886
+ default:
887
+ throw new Error(`Unknown component type: ${type}`);
888
+ }
889
+ }
890
+
891
+ /* ── Lifecycle Management ────────────────────────────── */
892
+
893
+ /**
894
+ * Get live status for all registered components in a project.
895
+ * Checks extensions, cortex, and apps APIs for current state.
896
+ */
897
+ export async function getComponentStatuses(projectId) {
898
+ const components = await loadAllComponents(projectId);
899
+ const statuses = {};
900
+
901
+ // Fetch live extension list
902
+ let liveExtensions = [];
903
+ try {
904
+ const resp = await apiGet('/v1/extensions');
905
+ liveExtensions = resp?.data?.extensions || resp?.data || [];
906
+ } catch { /* extensions API may not exist */ }
907
+
908
+ // Fetch live cortex list
909
+ let liveCortexes = [];
910
+ try {
911
+ const resp = await apiGet('/v1/cortex');
912
+ liveCortexes = resp?.data?.extensions || resp?.data || [];
913
+ } catch { /* cortex API may not exist */ }
914
+
915
+ // Fetch live apps list
916
+ let liveApps = [];
917
+ try {
918
+ const resp = await apiGet('/v1/apps');
919
+ liveApps = resp?.data?.apps || resp?.data || [];
920
+ } catch { /* apps API may not exist */ }
921
+
922
+ for (const comp of components) {
923
+ const name = comp.registeredAs;
924
+ if (!name) {
925
+ statuses[comp.id] = { installed: false, status: 'not_registered' };
926
+ continue;
927
+ }
928
+
929
+ if (comp.type === 'extension') {
930
+ const ext = liveExtensions.find(e => e.name === name || e.metadata?.name === name);
931
+ statuses[comp.id] = ext
932
+ ? { installed: true, status: ext.status || 'installed', active: ext.status === 'active' }
933
+ : { installed: false, status: 'not_found' };
934
+ } else if (comp.type === 'cortex') {
935
+ const ctx = liveCortexes.find(c => c.name === name || c.metadata?.name === name);
936
+ statuses[comp.id] = ctx
937
+ ? { installed: true, status: ctx.status || 'installed', active: ctx.status === 'active' }
938
+ : { installed: false, status: 'not_found' };
939
+ } else if (comp.type === 'app') {
940
+ const app = liveApps.find(a => a.filename === name || a.name === name);
941
+ statuses[comp.id] = app
942
+ ? { installed: true, status: 'published', active: true }
943
+ : { installed: false, status: 'not_found' };
944
+ } else {
945
+ // csm, msm, memory, translation — no live status to check
946
+ statuses[comp.id] = { installed: !!name, status: name ? 'registered' : 'not_registered' };
947
+ }
948
+ }
949
+
950
+ return statuses;
951
+ }
952
+
953
+ /**
954
+ * Activate all extensions and cortexes in a project.
955
+ * Returns { activated: string[], errors: string[] }
956
+ */
957
+ export async function activateAll(projectId) {
958
+ const components = await loadAllComponents(projectId);
959
+ const activated = [];
960
+ const errors = [];
961
+
962
+ for (const comp of components) {
963
+ if (!comp.registeredAs) continue;
964
+ try {
965
+ if (comp.type === 'extension') {
966
+ await apiPost(`/v1/extensions/${encodeURIComponent(comp.registeredAs)}/activate`);
967
+ activated.push(comp.registeredAs);
968
+ } else if (comp.type === 'cortex') {
969
+ await apiPost(`/v1/cortex/${encodeURIComponent(comp.registeredAs)}/activate`);
970
+ activated.push(comp.registeredAs);
971
+ }
972
+ } catch (e) {
973
+ errors.push(`${comp.registeredAs}: ${e.message || 'activation failed'}`);
974
+ }
975
+ }
976
+
977
+ return { activated, errors };
978
+ }
979
+
980
+ /**
981
+ * Deactivate all extensions and cortexes in a project.
982
+ * Returns { deactivated: string[], errors: string[] }
983
+ */
984
+ export async function deactivateAll(projectId) {
985
+ const components = await loadAllComponents(projectId);
986
+ const deactivated = [];
987
+ const errors = [];
988
+
989
+ for (const comp of components) {
990
+ if (!comp.registeredAs) continue;
991
+ try {
992
+ if (comp.type === 'extension') {
993
+ await apiPost(`/v1/extensions/${encodeURIComponent(comp.registeredAs)}/deactivate`);
994
+ deactivated.push(comp.registeredAs);
995
+ } else if (comp.type === 'cortex') {
996
+ await apiPost(`/v1/cortex/${encodeURIComponent(comp.registeredAs)}/deactivate`);
997
+ deactivated.push(comp.registeredAs);
998
+ }
999
+ } catch (e) {
1000
+ errors.push(`${comp.registeredAs}: ${e.message || 'deactivation failed'}`);
1001
+ }
1002
+ }
1003
+
1004
+ return { deactivated, errors };
1005
+ }
1006
+
1007
+ /**
1008
+ * Remove selected components from the AIMEAT node.
1009
+ * @param {string} projectId
1010
+ * @param {string[]} componentIds - which component IDs to remove
1011
+ * @param {boolean} includeMemory - also delete memory keys written by extensions
1012
+ * @param {object} session - user session for owner context
1013
+ * Returns { removed: string[], errors: string[] }
1014
+ */
1015
+ export async function removeComponents(projectId, componentIds, includeMemory, session) {
1016
+ const components = await loadAllComponents(projectId);
1017
+ const toRemove = components.filter(c => componentIds.includes(c.id) && c.registeredAs);
1018
+ const removed = [];
1019
+ const errors = [];
1020
+
1021
+ for (const comp of toRemove) {
1022
+ const name = comp.registeredAs;
1023
+ try {
1024
+ if (comp.type === 'extension') {
1025
+ // Deactivate first, then delete
1026
+ try { await apiPost(`/v1/extensions/${encodeURIComponent(name)}/deactivate`); } catch { /* ok */ }
1027
+ await apiDelete(`/v1/extensions/${encodeURIComponent(name)}`);
1028
+ if (includeMemory) {
1029
+ // Clean up extension memory (ext:{name} namespace)
1030
+ try {
1031
+ const resp = await apiGet(`/v1/memory?prefix=&owner=ext:${encodeURIComponent(name)}&owner_scope=true`);
1032
+ const items = resp?.data?.items || [];
1033
+ for (const item of items) {
1034
+ try { await apiDelete(`/v1/memory/${encodeURIComponent(item.key)}?owner=ext:${encodeURIComponent(name)}`); } catch { /* best effort */ }
1035
+ }
1036
+ } catch { /* memory cleanup is best effort */ }
1037
+ }
1038
+ } else if (comp.type === 'cortex') {
1039
+ try { await apiPost(`/v1/cortex/${encodeURIComponent(name)}/deactivate`); } catch { /* ok */ }
1040
+ await apiDelete(`/v1/cortex/${encodeURIComponent(name)}`);
1041
+ } else if (comp.type === 'app') {
1042
+ const owner = session?.owner || '';
1043
+ await apiDelete(`/v1/apps/${encodeURIComponent(owner)}/${encodeURIComponent(name)}`);
1044
+ } else if (comp.type === 'csm') {
1045
+ await apiDelete(`/v1/csm/${encodeURIComponent(name)}`);
1046
+ } else if (comp.type === 'msm') {
1047
+ await apiDelete(`/v1/msm/${encodeURIComponent(name)}`);
1048
+ } else if (comp.type === 'translation') {
1049
+ // Translation keys stored as {service}.i18n.{locale} or legacy i18n.{locale}
1050
+ const locale = name.replace(/^.*i18n-/, '');
1051
+ if (locale) {
1052
+ // Find service slug from sibling extension/csm
1053
+ const extSibling = comps.find(c => c.type === 'extension' && c.registeredAs);
1054
+ const csmSibling = comps.find(c => c.type === 'csm' && c.registeredAs);
1055
+ const svcSlug = extSibling?.registeredAs || csmSibling?.registeredAs?.split('/')?.pop() || '';
1056
+ const memKey = svcSlug ? `${svcSlug}.i18n.${locale}` : `i18n.${locale}`;
1057
+ try { await apiDelete(`/v1/memory/${encodeURIComponent(memKey)}`); } catch { /* best effort */ }
1058
+ if (svcSlug) {
1059
+ try { await apiDelete(`/v1/memory/${encodeURIComponent(`i18n.${locale}`)}`); } catch { /* best effort */ }
1060
+ }
1061
+ }
1062
+ }
1063
+ removed.push(name);
1064
+ // Clear registeredAs in component state
1065
+ await saveComponent(projectId, { ...comp, registeredAs: null, status: 'not_started' });
1066
+ } catch (e) {
1067
+ errors.push(`${name}: ${e.message || 'removal failed'}`);
1068
+ }
1069
+ }
1070
+
1071
+ // Update project timestamp so it doesn't show "Invalid Date"
1072
+ if (removed.length > 0) {
1073
+ try { await updateProject(projectId, {}); } catch { /* best effort */ }
1074
+ }
1075
+
1076
+ return { removed, errors };
1077
+ }
1078
+
1079
+ /**
1080
+ * Re-register a component: deactivate → remove → register → re-activate if it was active.
1081
+ * Useful when updating a component that is already installed on the node.
1082
+ * @param {string} projectId
1083
+ * @param {object} component - the component object
1084
+ * @param {object} validationResult - validated extraction result
1085
+ * @param {object} session - user session
1086
+ * @param {string} serviceSlug - service slug for namespacing
1087
+ * @param {object} liveStatuses - current live statuses map (keyed by component id)
1088
+ * Returns the registration response (same shape as registerComponent).
1089
+ */
1090
+ export async function reregisterComponent(projectId, component, validationResult, session, serviceSlug, liveStatuses) {
1091
+ const name = component.registeredAs;
1092
+ if (!name) throw new Error('Component is not registered');
1093
+
1094
+ // Check if it was active before removal
1095
+ const wasActive = liveStatuses?.[component.id]?.active === true;
1096
+
1097
+ // Step 1: Deactivate (best effort)
1098
+ if (component.type === 'extension') {
1099
+ try { await apiPost(`/v1/extensions/${encodeURIComponent(name)}/deactivate`); } catch { /* ok */ }
1100
+ } else if (component.type === 'cortex') {
1101
+ try { await apiPost(`/v1/cortex/${encodeURIComponent(name)}/deactivate`); } catch { /* ok */ }
1102
+ }
1103
+
1104
+ // Step 2: Remove
1105
+ if (component.type === 'extension') {
1106
+ await apiDelete(`/v1/extensions/${encodeURIComponent(name)}`);
1107
+ } else if (component.type === 'cortex') {
1108
+ await apiDelete(`/v1/cortex/${encodeURIComponent(name)}`);
1109
+ } else if (component.type === 'app') {
1110
+ const owner = session?.owner || '';
1111
+ await apiDelete(`/v1/apps/${encodeURIComponent(owner)}/${encodeURIComponent(name)}`);
1112
+ } else if (component.type === 'csm') {
1113
+ await apiDelete(`/v1/csm/${encodeURIComponent(name)}`);
1114
+ } else if (component.type === 'msm') {
1115
+ await apiDelete(`/v1/msm/${encodeURIComponent(name)}`);
1116
+ }
1117
+
1118
+ // Step 3: Register new version
1119
+ const extracted = validationResult?.extracted || component.result;
1120
+ const resp = await registerComponent(component.type, extracted, session, serviceSlug);
1121
+
1122
+ // Step 4: Re-activate if it was active (extensions/cortex that don't auto-activate)
1123
+ if (wasActive && component.type === 'extension') {
1124
+ const newName = resp?.data?.extension?.name || resp?.data?.name || name;
1125
+ try { await apiPost(`/v1/extensions/${encodeURIComponent(newName)}/activate`); } catch { /* best effort */ }
1126
+ }
1127
+ // Note: cortex auto-activates in registerComponent, so no need to re-activate
1128
+
1129
+ return resp;
1130
+ }
1131
+
1132
+ /**
1133
+ * Get the launch URL for the app component in a project.
1134
+ */
1135
+ export function getAppLaunchUrl(components, session) {
1136
+ const appComp = components.find(c => c.type === 'app' && c.registeredAs);
1137
+ if (!appComp) return null;
1138
+ const owner = session?.owner || '';
1139
+ const filename = appComp.registeredAs.endsWith('.html') ? appComp.registeredAs : appComp.registeredAs + '.html';
1140
+ return `/v1/apps/${encodeURIComponent(owner)}/${encodeURIComponent(filename)}?mode=inline`;
1141
+ }
1142
+
1143
+ /* ── Extension Result Parser ─────────────────────────── */
1144
+
1145
+ function parseExtensionResult(result) {
1146
+ const text = typeof result === 'string' ? result : JSON.stringify(result);
1147
+
1148
+ // Strategy 1: markdown fences present — use them
1149
+ const yamlMatch = text.match(/```yaml\s*\n([\s\S]*?)```/i);
1150
+ // Match both "// actions/search.js" and "// search.js" formats
1151
+ const fencedJs = [...text.matchAll(/```javascript\s*\n\/\/\s*(?:actions\/)?([\w-]+\.js)\s*\n([\s\S]*?)```/gi)];
1152
+
1153
+ if (yamlMatch && fencedJs.length > 0) {
1154
+ const scripts = {};
1155
+ for (const m of fencedJs) {
1156
+ scripts[m[1].replace('actions/', '')] = m[2].trim();
1157
+ }
1158
+ return { manifest: yamlMatch[1].trim(), scripts };
1159
+ }
1160
+
1161
+ // Strategy 2: no fences — split on `// actions/filename.js` comment boundaries
1162
+ // The YAML manifest is everything before the first `// actions/` line.
1163
+ // Each JS file starts at `// actions/filename.js` and ends before the next one.
1164
+ // Match both "// actions/search.js" and "// search.js" formats
1165
+ const actionCommentRegex = /^\/\/\s*(?:actions\/)?([\w-]+\.js)\s*$/gm;
1166
+ const boundaries = [];
1167
+ let m;
1168
+ while ((m = actionCommentRegex.exec(text)) !== null) {
1169
+ boundaries.push({ filename: m[1], index: m.index, afterComment: m.index + m[0].length });
1170
+ }
1171
+
1172
+ if (boundaries.length === 0) {
1173
+ // No JS blocks found at all — return whatever we have as manifest
1174
+ const manifest = yamlMatch ? yamlMatch[1].trim() : text.trim();
1175
+ return { manifest, scripts: {} };
1176
+ }
1177
+
1178
+ // Everything before first // actions/ comment is the YAML manifest
1179
+ let manifest = text.slice(0, boundaries[0].index).trim();
1180
+ // Strip any markdown fences or stray ``` from the manifest
1181
+ manifest = manifest.replace(/^```\w*\s*\n?/gm, '').replace(/```\s*$/gm, '').trim();
1182
+
1183
+ const scripts = {};
1184
+ for (let i = 0; i < boundaries.length; i++) {
1185
+ const start = boundaries[i].afterComment;
1186
+ const end = i + 1 < boundaries.length ? boundaries[i + 1].index : text.length;
1187
+ let code = text.slice(start, end).trim();
1188
+ // Strip any trailing/leading markdown fences
1189
+ code = code.replace(/^```\w*\s*\n?/gm, '').replace(/```\s*$/gm, '').trim();
1190
+ scripts[boundaries[i].filename] = code;
1191
+ }
1192
+
1193
+ return { manifest, scripts };
1194
+ }