aimeat 1.35.0 → 1.37.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 (296) hide show
  1. package/dist/.env.example +31 -0
  2. package/dist/locales/en.json +192 -27
  3. package/dist/locales/fi.json +192 -27
  4. package/dist/public/components/Markdown.js +9 -0
  5. package/dist/public/components/MemoryEmbed.js +151 -0
  6. package/dist/public/components/Mermaid.js +4 -1
  7. package/dist/public/components/NotificationBell.js +45 -19
  8. package/dist/public/css/components/markdown.css +15 -0
  9. package/dist/public/css/views/agents-detail.css +17 -0
  10. package/dist/public/css/views/portfolio.css +51 -0
  11. package/dist/public/css/views/profile.css +31 -0
  12. package/dist/public/js/services/agents.js +9 -0
  13. package/dist/public/js/services/organisms.js +37 -1
  14. package/dist/public/llms-template.txt +278 -0
  15. package/dist/public/spa.html +39 -2
  16. package/dist/public/sw.js +50 -34
  17. package/dist/public/views/my-company.js +13 -1
  18. package/dist/public/views/portfolio.js +267 -44
  19. package/dist/public/views/profile/agents/agent-card.js +4 -0
  20. package/dist/public/views/profile/agents/tab-contracts.js +112 -0
  21. package/dist/public/views/profile/landing-page.js +10 -1
  22. package/dist/public/views/profile/memory-tab.js +6 -2
  23. package/dist/public/views/profile/notifications-tab.js +9 -1
  24. package/dist/public/views/profile/organisms/home.js +23 -3
  25. package/dist/public/views/profile/organisms/participants-panel.js +89 -17
  26. package/dist/public/views/profile/organisms/workspace-apps.js +130 -0
  27. package/dist/public/views/profile/organisms/workspace.js +5 -0
  28. package/dist/public/views/profile/organisms-tab.js +1 -1
  29. package/dist/public/views/secretary.js +13 -0
  30. package/dist/scripts/archive-stale-versions.d.ts +33 -0
  31. package/dist/scripts/archive-stale-versions.d.ts.map +1 -0
  32. package/dist/scripts/archive-stale-versions.js +278 -0
  33. package/dist/scripts/archive-stale-versions.js.map +1 -0
  34. package/dist/src/cli/connect/mcp/tools/agent-management.d.ts +4 -1
  35. package/dist/src/cli/connect/mcp/tools/agent-management.d.ts.map +1 -1
  36. package/dist/src/cli/connect/mcp/tools/agent-management.js +1 -1
  37. package/dist/src/cli/connect/mcp/tools/agent-management.js.map +1 -1
  38. package/dist/src/cli/init-wizard.d.ts.map +1 -1
  39. package/dist/src/cli/init-wizard.js +32 -0
  40. package/dist/src/cli/init-wizard.js.map +1 -1
  41. package/dist/src/config.d.ts +24 -0
  42. package/dist/src/config.d.ts.map +1 -1
  43. package/dist/src/config.js +21 -0
  44. package/dist/src/config.js.map +1 -1
  45. package/dist/src/data/aimeat-iam-package.d.ts +10 -2
  46. package/dist/src/data/aimeat-iam-package.d.ts.map +1 -1
  47. package/dist/src/data/aimeat-iam-package.js +39 -10
  48. package/dist/src/data/aimeat-iam-package.js.map +1 -1
  49. package/dist/src/generated/api-types.d.ts +802 -60
  50. package/dist/src/generated/api-types.d.ts.map +1 -1
  51. package/dist/src/generated/prisma-postgres/edge.js +5 -3
  52. package/dist/src/generated/prisma-postgres/index-browser.js +2 -0
  53. package/dist/src/generated/prisma-postgres/index.d.ts +54 -2
  54. package/dist/src/generated/prisma-postgres/index.js +5 -3
  55. package/dist/src/generated/prisma-postgres/package.json +1 -1
  56. package/dist/src/generated/prisma-postgres/schema.prisma +2 -0
  57. package/dist/src/generated/prisma-postgres/wasm.js +5 -3
  58. package/dist/src/mcp/annotations.d.ts.map +1 -1
  59. package/dist/src/mcp/annotations.js +1 -0
  60. package/dist/src/mcp/annotations.js.map +1 -1
  61. package/dist/src/mcp/catalog/definitions.d.ts +3 -0
  62. package/dist/src/mcp/catalog/definitions.d.ts.map +1 -1
  63. package/dist/src/mcp/catalog/definitions.js +21 -7
  64. package/dist/src/mcp/catalog/definitions.js.map +1 -1
  65. package/dist/src/mcp/catalog/surfaces.js +1 -1
  66. package/dist/src/mcp/catalog/surfaces.js.map +1 -1
  67. package/dist/src/mcp/core.js +1 -1
  68. package/dist/src/mcp/core.js.map +1 -1
  69. package/dist/src/mcp/extensions.d.ts.map +1 -1
  70. package/dist/src/mcp/extensions.js +21 -0
  71. package/dist/src/mcp/extensions.js.map +1 -1
  72. package/dist/src/mcp/memory-extended.js +1 -1
  73. package/dist/src/mcp/memory-extended.js.map +1 -1
  74. package/dist/src/mcp/organisms.d.ts +1 -0
  75. package/dist/src/mcp/organisms.d.ts.map +1 -1
  76. package/dist/src/mcp/organisms.js +23 -6
  77. package/dist/src/mcp/organisms.js.map +1 -1
  78. package/dist/src/mcp/workspaces.d.ts +7 -0
  79. package/dist/src/mcp/workspaces.d.ts.map +1 -1
  80. package/dist/src/mcp/workspaces.js +23 -5
  81. package/dist/src/mcp/workspaces.js.map +1 -1
  82. package/dist/src/middleware/subdomain.d.ts +9 -0
  83. package/dist/src/middleware/subdomain.d.ts.map +1 -1
  84. package/dist/src/middleware/subdomain.js +24 -3
  85. package/dist/src/middleware/subdomain.js.map +1 -1
  86. package/dist/src/models/schemas.d.ts +2 -0
  87. package/dist/src/models/schemas.d.ts.map +1 -1
  88. package/dist/src/models/schemas.js +2 -2
  89. package/dist/src/models/schemas.js.map +1 -1
  90. package/dist/src/routes/admin-features.js +1 -1
  91. package/dist/src/routes/admin-features.js.map +1 -1
  92. package/dist/src/routes/agent-onboarding.d.ts.map +1 -1
  93. package/dist/src/routes/agent-onboarding.js +44 -7
  94. package/dist/src/routes/agent-onboarding.js.map +1 -1
  95. package/dist/src/routes/agents.d.ts +8 -0
  96. package/dist/src/routes/agents.d.ts.map +1 -1
  97. package/dist/src/routes/agents.js +91 -5
  98. package/dist/src/routes/agents.js.map +1 -1
  99. package/dist/src/routes/app-grants.d.ts +5 -0
  100. package/dist/src/routes/app-grants.d.ts.map +1 -1
  101. package/dist/src/routes/app-grants.js +52 -20
  102. package/dist/src/routes/app-grants.js.map +1 -1
  103. package/dist/src/routes/boards.d.ts.map +1 -1
  104. package/dist/src/routes/boards.js +4 -1
  105. package/dist/src/routes/boards.js.map +1 -1
  106. package/dist/src/routes/bootstrap.d.ts +2 -0
  107. package/dist/src/routes/bootstrap.d.ts.map +1 -1
  108. package/dist/src/routes/bootstrap.js +5 -0
  109. package/dist/src/routes/bootstrap.js.map +1 -1
  110. package/dist/src/routes/capabilities.d.ts.map +1 -1
  111. package/dist/src/routes/capabilities.js +4 -1
  112. package/dist/src/routes/capabilities.js.map +1 -1
  113. package/dist/src/routes/catalogue.d.ts.map +1 -1
  114. package/dist/src/routes/catalogue.js +5 -4
  115. package/dist/src/routes/catalogue.js.map +1 -1
  116. package/dist/src/routes/extensions.d.ts.map +1 -1
  117. package/dist/src/routes/extensions.js +11 -0
  118. package/dist/src/routes/extensions.js.map +1 -1
  119. package/dist/src/routes/ghii.d.ts.map +1 -1
  120. package/dist/src/routes/ghii.js +65 -17
  121. package/dist/src/routes/ghii.js.map +1 -1
  122. package/dist/src/routes/lib-editor.d.ts +26 -0
  123. package/dist/src/routes/lib-editor.d.ts.map +1 -0
  124. package/dist/src/routes/lib-editor.js +215 -0
  125. package/dist/src/routes/lib-editor.js.map +1 -0
  126. package/dist/src/routes/lib-markdown.d.ts +16 -1
  127. package/dist/src/routes/lib-markdown.d.ts.map +1 -1
  128. package/dist/src/routes/lib-markdown.js +281 -2
  129. package/dist/src/routes/lib-markdown.js.map +1 -1
  130. package/dist/src/routes/lib-organism.d.ts +28 -0
  131. package/dist/src/routes/lib-organism.d.ts.map +1 -0
  132. package/dist/src/routes/lib-organism.js +298 -0
  133. package/dist/src/routes/lib-organism.js.map +1 -0
  134. package/dist/src/routes/lib-portfolio-standalone.d.ts +22 -0
  135. package/dist/src/routes/lib-portfolio-standalone.d.ts.map +1 -0
  136. package/dist/src/routes/lib-portfolio-standalone.js +68 -0
  137. package/dist/src/routes/lib-portfolio-standalone.js.map +1 -0
  138. package/dist/src/routes/libs.d.ts +18 -0
  139. package/dist/src/routes/libs.d.ts.map +1 -1
  140. package/dist/src/routes/libs.js +116 -18
  141. package/dist/src/routes/libs.js.map +1 -1
  142. package/dist/src/routes/memory.d.ts +3 -0
  143. package/dist/src/routes/memory.d.ts.map +1 -1
  144. package/dist/src/routes/memory.js +58 -4
  145. package/dist/src/routes/memory.js.map +1 -1
  146. package/dist/src/routes/notifications.d.ts +5 -1
  147. package/dist/src/routes/notifications.d.ts.map +1 -1
  148. package/dist/src/routes/notifications.js +68 -3
  149. package/dist/src/routes/notifications.js.map +1 -1
  150. package/dist/src/routes/oauth-login.d.ts +26 -21
  151. package/dist/src/routes/oauth-login.d.ts.map +1 -1
  152. package/dist/src/routes/oauth-login.js +257 -229
  153. package/dist/src/routes/oauth-login.js.map +1 -1
  154. package/dist/src/routes/openrouter.d.ts +3 -0
  155. package/dist/src/routes/openrouter.d.ts.map +1 -1
  156. package/dist/src/routes/openrouter.js +10 -5
  157. package/dist/src/routes/openrouter.js.map +1 -1
  158. package/dist/src/routes/organisms.d.ts +6 -0
  159. package/dist/src/routes/organisms.d.ts.map +1 -1
  160. package/dist/src/routes/organisms.js +203 -16
  161. package/dist/src/routes/organisms.js.map +1 -1
  162. package/dist/src/routes/owners.d.ts.map +1 -1
  163. package/dist/src/routes/owners.js +12 -8
  164. package/dist/src/routes/owners.js.map +1 -1
  165. package/dist/src/routes/portfolio.d.ts +41 -1
  166. package/dist/src/routes/portfolio.d.ts.map +1 -1
  167. package/dist/src/routes/portfolio.js +94 -30
  168. package/dist/src/routes/portfolio.js.map +1 -1
  169. package/dist/src/routes/push.d.ts +15 -0
  170. package/dist/src/routes/push.d.ts.map +1 -1
  171. package/dist/src/routes/push.js +16 -1
  172. package/dist/src/routes/push.js.map +1 -1
  173. package/dist/src/routes/site.d.ts +2 -0
  174. package/dist/src/routes/site.d.ts.map +1 -1
  175. package/dist/src/routes/site.js +10 -2
  176. package/dist/src/routes/site.js.map +1 -1
  177. package/dist/src/routes/subdomains.d.ts +5 -0
  178. package/dist/src/routes/subdomains.d.ts.map +1 -1
  179. package/dist/src/routes/subdomains.js +56 -0
  180. package/dist/src/routes/subdomains.js.map +1 -1
  181. package/dist/src/server-bootstrap/routes-loader.d.ts.map +1 -1
  182. package/dist/src/server-bootstrap/routes-loader.js +10 -15
  183. package/dist/src/server-bootstrap/routes-loader.js.map +1 -1
  184. package/dist/src/server-bootstrap/static-files.d.ts.map +1 -1
  185. package/dist/src/server-bootstrap/static-files.js +9 -4
  186. package/dist/src/server-bootstrap/static-files.js.map +1 -1
  187. package/dist/src/services/access-guard.d.ts.map +1 -1
  188. package/dist/src/services/access-guard.js +7 -0
  189. package/dist/src/services/access-guard.js.map +1 -1
  190. package/dist/src/services/ai-completion.d.ts +2 -0
  191. package/dist/src/services/ai-completion.d.ts.map +1 -1
  192. package/dist/src/services/ai-completion.js +2 -1
  193. package/dist/src/services/ai-completion.js.map +1 -1
  194. package/dist/src/services/config-schema.d.ts.map +1 -1
  195. package/dist/src/services/config-schema.js +2 -0
  196. package/dist/src/services/config-schema.js.map +1 -1
  197. package/dist/src/services/ecosystem-access.d.ts +24 -8
  198. package/dist/src/services/ecosystem-access.d.ts.map +1 -1
  199. package/dist/src/services/ecosystem-access.js +27 -5
  200. package/dist/src/services/ecosystem-access.js.map +1 -1
  201. package/dist/src/services/generator-autopilot.d.ts +2 -0
  202. package/dist/src/services/generator-autopilot.d.ts.map +1 -1
  203. package/dist/src/services/generator-autopilot.js +3 -1
  204. package/dist/src/services/generator-autopilot.js.map +1 -1
  205. package/dist/src/services/iam/app-commands.d.ts +75 -0
  206. package/dist/src/services/iam/app-commands.d.ts.map +1 -0
  207. package/dist/src/services/iam/app-commands.js +55 -0
  208. package/dist/src/services/iam/app-commands.js.map +1 -0
  209. package/dist/src/services/iam/define-app-iam.d.ts +45 -0
  210. package/dist/src/services/iam/define-app-iam.d.ts.map +1 -0
  211. package/dist/src/services/iam/define-app-iam.js +75 -0
  212. package/dist/src/services/iam/define-app-iam.js.map +1 -0
  213. package/dist/src/services/iam/model.d.ts +113 -0
  214. package/dist/src/services/iam/model.d.ts.map +1 -0
  215. package/dist/src/services/iam/model.js +115 -0
  216. package/dist/src/services/iam/model.js.map +1 -0
  217. package/dist/src/services/mailbox-notification.d.ts +1 -0
  218. package/dist/src/services/mailbox-notification.d.ts.map +1 -1
  219. package/dist/src/services/mailbox-notification.js +3 -0
  220. package/dist/src/services/mailbox-notification.js.map +1 -1
  221. package/dist/src/services/notebook-ai.d.ts +2 -0
  222. package/dist/src/services/notebook-ai.d.ts.map +1 -1
  223. package/dist/src/services/notebook-ai.js +1 -1
  224. package/dist/src/services/notebook-ai.js.map +1 -1
  225. package/dist/src/services/notify.d.ts +11 -1
  226. package/dist/src/services/notify.d.ts.map +1 -1
  227. package/dist/src/services/notify.js +39 -2
  228. package/dist/src/services/notify.js.map +1 -1
  229. package/dist/src/services/oidc-providers.d.ts +94 -0
  230. package/dist/src/services/oidc-providers.d.ts.map +1 -0
  231. package/dist/src/services/oidc-providers.js +181 -0
  232. package/dist/src/services/oidc-providers.js.map +1 -0
  233. package/dist/src/services/organism-privacy.d.ts +46 -0
  234. package/dist/src/services/organism-privacy.d.ts.map +1 -0
  235. package/dist/src/services/organism-privacy.js +42 -0
  236. package/dist/src/services/organism-privacy.js.map +1 -0
  237. package/dist/src/services/organism-template.d.ts.map +1 -1
  238. package/dist/src/services/organism-template.js +3 -1
  239. package/dist/src/services/organism-template.js.map +1 -1
  240. package/dist/src/services/prompt-defaults.d.ts +2 -0
  241. package/dist/src/services/prompt-defaults.d.ts.map +1 -1
  242. package/dist/src/services/prompt-defaults.js +5 -0
  243. package/dist/src/services/prompt-defaults.js.map +1 -1
  244. package/dist/src/services/scheduler.d.ts.map +1 -1
  245. package/dist/src/services/scheduler.js +16 -4
  246. package/dist/src/services/scheduler.js.map +1 -1
  247. package/dist/src/services/skill-bundle/generator.d.ts +2 -0
  248. package/dist/src/services/skill-bundle/generator.d.ts.map +1 -1
  249. package/dist/src/services/skill-bundle/generator.js +3 -1
  250. package/dist/src/services/skill-bundle/generator.js.map +1 -1
  251. package/dist/src/services/workspace-access.d.ts +2 -0
  252. package/dist/src/services/workspace-access.d.ts.map +1 -1
  253. package/dist/src/services/workspace-access.js +20 -8
  254. package/dist/src/services/workspace-access.js.map +1 -1
  255. package/dist/src/services/workspace-engagements.d.ts +65 -0
  256. package/dist/src/services/workspace-engagements.d.ts.map +1 -0
  257. package/dist/src/services/workspace-engagements.js +92 -0
  258. package/dist/src/services/workspace-engagements.js.map +1 -0
  259. package/dist/src/services/workspace-meta.d.ts +9 -2
  260. package/dist/src/services/workspace-meta.d.ts.map +1 -1
  261. package/dist/src/services/workspace-meta.js +22 -2
  262. package/dist/src/services/workspace-meta.js.map +1 -1
  263. package/dist/src/storage/interface.d.ts +10 -2
  264. package/dist/src/storage/interface.d.ts.map +1 -1
  265. package/dist/src/storage/interface.js.map +1 -1
  266. package/dist/src/storage/providers/mongodb/index.d.ts +1 -0
  267. package/dist/src/storage/providers/mongodb/index.d.ts.map +1 -1
  268. package/dist/src/storage/providers/mongodb/index.js +29 -2
  269. package/dist/src/storage/providers/mongodb/index.js.map +1 -1
  270. package/dist/src/storage/providers/sqlite/index.d.ts +1 -0
  271. package/dist/src/storage/providers/sqlite/index.d.ts.map +1 -1
  272. package/dist/src/storage/providers/sqlite/index.js +23 -8
  273. package/dist/src/storage/providers/sqlite/index.js.map +1 -1
  274. package/dist/src/storage/providers/sqlite/schema.d.ts.map +1 -1
  275. package/dist/src/storage/providers/sqlite/schema.js +9 -0
  276. package/dist/src/storage/providers/sqlite/schema.js.map +1 -1
  277. package/dist/src/storage/repositories/identity.repository.d.ts +2 -0
  278. package/dist/src/storage/repositories/identity.repository.d.ts.map +1 -1
  279. package/dist/src/utils/env-config.d.ts.map +1 -1
  280. package/dist/src/utils/env-config.js +23 -0
  281. package/dist/src/utils/env-config.js.map +1 -1
  282. package/dist/src/utils/env-validator.d.ts.map +1 -1
  283. package/dist/src/utils/env-validator.js +8 -0
  284. package/dist/src/utils/env-validator.js.map +1 -1
  285. package/dist/src/utils/node-descriptor.d.ts.map +1 -1
  286. package/dist/src/utils/node-descriptor.js +1 -0
  287. package/dist/src/utils/node-descriptor.js.map +1 -1
  288. package/dist/static/app-catalog.html +8 -2
  289. package/dist/static/icons/badge-96.png +0 -0
  290. package/dist/static/icons/icon-192.png +0 -0
  291. package/dist/static/icons/icon-512.png +0 -0
  292. package/dist/static/manifest.json +19 -17
  293. package/dist/static/sw.js +13 -11
  294. package/package.json +3 -1
  295. package/prisma/schema.postgres.prisma +2 -0
  296. package/prisma/schema.prisma +2 -0
@@ -0,0 +1,278 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * @file archive-stale-versions.ts
4
+ * @description One-time, REVERSIBLE cleanup of accumulated workspace-record version bloat. Publishing a
5
+ * workspace record used to append a new `.version.N` on every publish with no change-guard, so a
6
+ * contract agent that re-published the same draft each poll cycle piled up dozens of byte-identical
7
+ * versions per record (concentrated in request queues: mail/research/moodboard/image_requests). The
8
+ * publish path is now guarded (see mcp/workspaces.ts + routes/organisms.ts), so this stops GROWING;
9
+ * this script cleans up what already accrued.
10
+ *
11
+ * It does NOT delete: it flags redundant version rows `archived = 1` (the same reversible soft-archive
12
+ * the organism archive uses) under a shared `archivedRoot` so the whole batch can be restored with
13
+ * --unarchive. A version row is redundant when it is byte-identical to the version immediately before
14
+ * it (by N) — a pure republish that recorded no real change. Every genuine state transition, the
15
+ * first version, and the highest-numbered version (so publish's next-version scan is unaffected) are
16
+ * ALWAYS kept. Document/record spaces that version legitimately have no consecutive duplicates, so
17
+ * nothing there is touched.
18
+ *
19
+ * Read-only by default. `--from-export=<json>` analyses an exported memory dump with no DB at all.
20
+ * Detects the storage provider from .env for the live scan / apply.
21
+ * @usage
22
+ * pnpm versions:stats # live dry-run: what WOULD be archived (per namespace)
23
+ * pnpm versions:stats -- --from-export=dump.json # analyse an export JSON, no DB touched
24
+ * pnpm versions:archive # apply the archive (asks to confirm)
25
+ * pnpm versions:archive -- --force # apply without the prompt
26
+ * pnpm versions:stats -- --unarchive # preview restore; add --apply to restore
27
+ * pnpm versions:archive -- --unarchive --force # restore the whole archived batch
28
+ * @version-history
29
+ * v1.0.0 -- 2026-07-01 -- Initial: reversible consecutive-identical version dedupe (sqlite + mongodb),
30
+ * plus a DB-free --from-export analyser.
31
+ */
32
+ import { existsSync, readFileSync, statSync } from 'node:fs';
33
+ import { resolve, dirname } from 'node:path';
34
+ import { fileURLToPath } from 'node:url';
35
+ import { createInterface } from 'node:readline';
36
+ const __dirname = dirname(fileURLToPath(import.meta.url));
37
+ const ROOT = resolve(__dirname, '..');
38
+ const ARCHIVE_ROOT = 'stale-version-dedupe';
39
+ const ARCHIVED_BY = 'archive-stale-versions-script';
40
+ function loadEnv() {
41
+ const envPath = resolve(ROOT, '.env');
42
+ const vars = {};
43
+ if (existsSync(envPath)) {
44
+ for (const line of readFileSync(envPath, 'utf8').split('\n')) {
45
+ const m = line.match(/^([A-Z_]+)\s*=\s*"?([^"\n]*)"?/);
46
+ if (m)
47
+ vars[m[1]] = m[2];
48
+ }
49
+ }
50
+ return vars;
51
+ }
52
+ const env = { ...loadEnv(), ...process.env };
53
+ const provider = env.AIMEAT_STORAGE ?? 'memory';
54
+ const argv = process.argv.slice(2);
55
+ const force = argv.includes('--force') || argv.includes('-f');
56
+ const apply = argv.includes('--apply');
57
+ const unarchive = argv.includes('--unarchive');
58
+ const fromExportArg = argv.find(a => a.startsWith('--from-export='));
59
+ const fromExport = fromExportArg ? fromExportArg.split('=').slice(1).join('=') : null;
60
+ function fmtBytes(n) {
61
+ if (n < 1024)
62
+ return `${n} B`;
63
+ if (n < 1024 ** 2)
64
+ return `${(n / 1024).toFixed(1)} KB`;
65
+ if (n < 1024 ** 3)
66
+ return `${(n / 1024 ** 2).toFixed(1)} MB`;
67
+ return `${(n / 1024 ** 3).toFixed(2)} GB`;
68
+ }
69
+ function bytesOf(v) { return Buffer.byteLength(JSON.stringify(v ?? null), 'utf8'); }
70
+ async function confirm(message) {
71
+ if (force)
72
+ return true;
73
+ const rl = createInterface({ input: process.stdin, output: process.stdout });
74
+ const answer = await new Promise(r => rl.question(message, r));
75
+ rl.close();
76
+ return answer.trim().toLowerCase() === 'y';
77
+ }
78
+ /** Namespace label for a workspace record key: the objectType namespace segment, else '(other)'. */
79
+ function nsOf(key) {
80
+ const m = key.match(/\.shared\.([^.]+)\./) || key.match(/\.w\.[^.]+\.([^.]+)\./) || key.match(/^([^.]+)\./);
81
+ return m ? m[1] : '(other)';
82
+ }
83
+ /** Redundant version rows = byte-identical to the version immediately before them (by N), excluding the
84
+ * highest-numbered version of each record (kept so a future publish's maxN scan is unaffected). */
85
+ function planRedundant(rows) {
86
+ const groups = new Map();
87
+ for (const r of rows) {
88
+ const m = r.key.match(/^(.*)\.version\.(\d+)$/);
89
+ if (!m)
90
+ continue;
91
+ const arr = groups.get(m[1]) ?? [];
92
+ arr.push({ n: parseInt(m[2], 10), row: r });
93
+ groups.set(m[1], arr);
94
+ }
95
+ const out = [];
96
+ for (const arr of groups.values()) {
97
+ arr.sort((a, b) => a.n - b.n);
98
+ const maxN = arr[arr.length - 1].n;
99
+ for (let i = 1; i < arr.length; i++) {
100
+ if (arr[i].n === maxN)
101
+ continue; // always keep the top version
102
+ if (JSON.stringify(arr[i].row.value) === JSON.stringify(arr[i - 1].row.value)) {
103
+ out.push({ ...arr[i].row, bytes: bytesOf(arr[i].row.value) }); // identical to its predecessor
104
+ }
105
+ }
106
+ }
107
+ return out;
108
+ }
109
+ function report(redundant, totalVersionRows) {
110
+ const byNs = new Map();
111
+ let bytes = 0;
112
+ for (const r of redundant) {
113
+ const s = byNs.get(nsOf(r.key)) ?? { count: 0, bytes: 0 };
114
+ s.count++;
115
+ s.bytes += r.bytes;
116
+ byNs.set(nsOf(r.key), s);
117
+ bytes += r.bytes;
118
+ }
119
+ console.log(` Version rows scanned: ${totalVersionRows.toLocaleString()}`);
120
+ console.log(` Redundant (archivable): ${redundant.length.toLocaleString()} (${fmtBytes(bytes)})`);
121
+ if (byNs.size) {
122
+ console.log(' By namespace:');
123
+ for (const [ns, s] of [...byNs.entries()].sort((a, b) => b[1].bytes - a[1].bytes)) {
124
+ console.log(` ${ns.padEnd(22)} ${String(s.count).padStart(5)} rows ${fmtBytes(s.bytes).padStart(10)}`);
125
+ }
126
+ }
127
+ console.log('');
128
+ }
129
+ // ─── Export-file analysis (no DB) ────────────────────────────
130
+ function runFromExport(path) {
131
+ const p = resolve(process.cwd(), path);
132
+ if (!existsSync(p)) {
133
+ console.error(` x No export file at ${p}`);
134
+ process.exit(1);
135
+ }
136
+ const doc = JSON.parse(readFileSync(p, 'utf8'));
137
+ const entries = doc.entries ?? [];
138
+ const versionRows = entries.filter(e => /\.version\.\d+$/.test(e.key));
139
+ console.log(` Source: export file (${path}) — read-only, no DB touched`);
140
+ console.log(` Entries: ${entries.length.toLocaleString()}`);
141
+ console.log('');
142
+ report(planRedundant(versionRows), versionRows.length);
143
+ console.log(' This is analysis only. Point the script at the live node (drop --from-export) to apply.');
144
+ }
145
+ // ─── SQLite ──────────────────────────────────────────────────
146
+ async function runSqlite() {
147
+ const dbPath = resolve(ROOT, env.AIMEAT_SQLITE_PATH ?? './data/aimeat.db');
148
+ if (!existsSync(dbPath)) {
149
+ console.log(` No database file at ${dbPath} — nothing to do.`);
150
+ return;
151
+ }
152
+ const Database = (await import('better-sqlite3')).default;
153
+ const db = new Database(dbPath);
154
+ try {
155
+ console.log(` Storage: sqlite (${dbPath})`);
156
+ console.log(` DB file size: ${fmtBytes(statSync(dbPath).size)}`);
157
+ console.log('');
158
+ if (unarchive) {
159
+ const n = db.prepare('SELECT COUNT(*) AS c FROM memory WHERE archivedRoot = ?').get(ARCHIVE_ROOT).c;
160
+ console.log(` Archived batch "${ARCHIVE_ROOT}": ${n.toLocaleString()} row(s).`);
161
+ if (!apply) {
162
+ console.log(' Read-only. Add --apply to restore them.');
163
+ return;
164
+ }
165
+ if (!await confirm(` Restore ${n.toLocaleString()} archived version row(s)? [y/N] `)) {
166
+ console.log(' Aborted.');
167
+ return;
168
+ }
169
+ const res = db.prepare('UPDATE memory SET archived=0, archivedAt=NULL, archivedBy=NULL, archivedRoot=NULL WHERE archivedRoot = ?').run(ARCHIVE_ROOT);
170
+ console.log(` Restored ${res.changes.toLocaleString()} row(s).`);
171
+ return;
172
+ }
173
+ const rows = db.prepare("SELECT key, ownerGaii, value FROM memory WHERE key LIKE '%.version.%' AND archived = 0").all();
174
+ const redundant = planRedundant(rows.map(r => ({ key: r.key, ownerGaii: r.ownerGaii, value: JSON.parse(r.value) })));
175
+ report(redundant, rows.length);
176
+ if (!apply) {
177
+ console.log(' Read-only. Re-run with --apply (pnpm versions:archive) to soft-archive them.');
178
+ return;
179
+ }
180
+ if (redundant.length === 0) {
181
+ console.log(' Nothing to archive.');
182
+ return;
183
+ }
184
+ if (!await confirm(` Soft-archive ${redundant.length.toLocaleString()} redundant version row(s)? Reversible via --unarchive. [y/N] `)) {
185
+ console.log(' Aborted.');
186
+ return;
187
+ }
188
+ const at = new Date().toISOString();
189
+ const stmt = db.prepare('UPDATE memory SET archived=1, archivedAt=?, archivedBy=?, archivedRoot=? WHERE ownerGaii=? AND key=? AND archived=0');
190
+ const tx = db.transaction((items) => {
191
+ let done = 0;
192
+ for (const r of items)
193
+ done += stmt.run(at, ARCHIVED_BY, ARCHIVE_ROOT, r.ownerGaii, r.key).changes;
194
+ return done;
195
+ });
196
+ console.log(` Archived ${tx(redundant).toLocaleString()} row(s) under archivedRoot="${ARCHIVE_ROOT}". Restore with: pnpm versions:archive -- --unarchive --force`);
197
+ }
198
+ finally {
199
+ db.close();
200
+ }
201
+ }
202
+ // ─── MongoDB ─────────────────────────────────────────────────
203
+ async function runMongodb() {
204
+ const dbUrl = env.DATABASE_URL;
205
+ if (!dbUrl) {
206
+ console.error(' x No DATABASE_URL in .env');
207
+ process.exit(1);
208
+ }
209
+ const { PrismaClient } = await import('@prisma/client');
210
+ const prisma = new PrismaClient({ datasourceUrl: dbUrl });
211
+ await prisma.$connect();
212
+ try {
213
+ console.log(' Storage: mongodb');
214
+ console.log('');
215
+ if (unarchive) {
216
+ const n = await prisma.memory.count({ where: { archivedRoot: ARCHIVE_ROOT } });
217
+ console.log(` Archived batch "${ARCHIVE_ROOT}": ${n.toLocaleString()} row(s).`);
218
+ if (!apply) {
219
+ console.log(' Read-only. Add --apply to restore them.');
220
+ return;
221
+ }
222
+ if (!await confirm(` Restore ${n.toLocaleString()} archived version row(s)? [y/N] `)) {
223
+ console.log(' Aborted.');
224
+ return;
225
+ }
226
+ const res = await prisma.memory.updateMany({ where: { archivedRoot: ARCHIVE_ROOT }, data: { archived: false, archivedAt: null, archivedBy: null, archivedRoot: null } });
227
+ console.log(` Restored ${res.count.toLocaleString()} row(s).`);
228
+ return;
229
+ }
230
+ const rows = await prisma.memory.findMany({ where: { key: { contains: '.version.' }, archived: false }, select: { key: true, ownerGaii: true, value: true } });
231
+ const redundant = planRedundant(rows.map(r => ({ key: r.key, ownerGaii: r.ownerGaii, value: r.value })));
232
+ report(redundant, rows.length);
233
+ if (!apply) {
234
+ console.log(' Read-only. Re-run with --apply (pnpm versions:archive) to soft-archive them.');
235
+ return;
236
+ }
237
+ if (redundant.length === 0) {
238
+ console.log(' Nothing to archive.');
239
+ return;
240
+ }
241
+ if (!await confirm(` Soft-archive ${redundant.length.toLocaleString()} redundant version row(s)? Reversible via --unarchive. [y/N] `)) {
242
+ console.log(' Aborted.');
243
+ return;
244
+ }
245
+ const at = new Date();
246
+ let done = 0;
247
+ for (const r of redundant) {
248
+ await prisma.memory.update({ where: { ownerGaii_key: { ownerGaii: r.ownerGaii, key: r.key } }, data: { archived: true, archivedAt: at, archivedBy: ARCHIVED_BY, archivedRoot: ARCHIVE_ROOT } });
249
+ done++;
250
+ }
251
+ console.log(` Archived ${done.toLocaleString()} row(s) under archivedRoot="${ARCHIVE_ROOT}". Restore with: pnpm versions:archive -- --unarchive --force`);
252
+ }
253
+ finally {
254
+ await prisma.$disconnect();
255
+ }
256
+ }
257
+ // ─── Main ────────────────────────────────────────────────────
258
+ console.log('');
259
+ console.log(' AIMEAT Stale-Version Archive (reversible)');
260
+ console.log(' ══════════════════════════════════════════');
261
+ if (fromExport) {
262
+ runFromExport(fromExport);
263
+ }
264
+ else {
265
+ switch (provider) {
266
+ case 'sqlite':
267
+ await runSqlite();
268
+ break;
269
+ case 'mongodb':
270
+ await runMongodb();
271
+ break;
272
+ default:
273
+ console.log(' Storage: memory (in-memory) — nothing persisted. Use --from-export=<json> to analyse a dump.');
274
+ break;
275
+ }
276
+ }
277
+ console.log('');
278
+ //# sourceMappingURL=archive-stale-versions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"archive-stale-versions.js","sourceRoot":"","sources":["../../scripts/archive-stale-versions.ts"],"names":[],"mappings":"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"}
@@ -5,13 +5,16 @@
5
5
  * - PATCH /tags is same-owner gated -- an agent may set tags on itself or a
6
6
  * same-owner sibling (parity with agent-caps self-report). The crew scaffold
7
7
  * self-tags on every start via this path.
8
- * - PATCH /mode requires an owner role; an agent session gets a 403.
8
+ * - PATCH /mode is same-owner gated too (since v1.3.0) -- an agent may set its own /
9
+ * a same-owner sibling's mode, so a device-authed crew self-sets task-runner at startup.
9
10
  *
10
11
  * @version-history
11
12
  * v1.0.0 -- 2026-05-29 -- Initial creation: tags_set + mode_set
12
13
  * v1.1.0 -- 2026-05-30 -- MCP audit Phase 1: tool descriptions sourced from canonical catalog via descriptionFor().
13
14
  * v1.2.0 -- 2026-06-24 -- tags_set is now agent-callable on its own/same-owner record
14
15
  * (REST PATCH /tags relaxed from owner-role to same-owner). mode_set stays owner-only.
16
+ * v1.3.0 -- 2026-07-02 -- mode_set relaxed from owner-role to same-owner too (parity with tags_set),
17
+ * so a device-authed crew can self-set task-runner mode at startup.
15
18
  */
16
19
  import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
17
20
  import type { AgentRegistry } from '../../agent-registry.js';
@@ -1 +1 @@
1
- {"version":3,"file":"agent-management.d.ts","sourceRoot":"","sources":["../../../../../../src/cli/connect/mcp/tools/agent-management.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAI7D,wBAAgB,4BAA4B,CAAC,GAAG,EAAE,SAAS,EAAE,QAAQ,EAAE,aAAa,GAAG,IAAI,CA+B1F"}
1
+ {"version":3,"file":"agent-management.d.ts","sourceRoot":"","sources":["../../../../../../src/cli/connect/mcp/tools/agent-management.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AACH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAI7D,wBAAgB,4BAA4B,CAAC,GAAG,EAAE,SAAS,EAAE,QAAQ,EAAE,aAAa,GAAG,IAAI,CA+B1F"}
@@ -13,7 +13,7 @@ export function registerAgentManagementTools(mcp, registry) {
13
13
  });
14
14
  mcp.tool('aimeat_agent_mode_set', descriptionFor('aimeat_agent_mode_set'), {
15
15
  agent_name: agentNameSchema,
16
- target_agent_name: z.string().describe('Agent whose mode to update (must be owned by the calling owner).'),
16
+ target_agent_name: z.string().describe('Agent whose mode to update (same owner as the calling agent; pass the caller\'s own name to self-set).'),
17
17
  mode: z.enum(['autonomous', 'interactive', 'task-runner', 'coordinator', 'workstation']).describe('New mode.'),
18
18
  }, async ({ agent_name, target_agent_name, mode }) => {
19
19
  const { client } = pickAgent(registry, agent_name);
@@ -1 +1 @@
1
- {"version":3,"file":"agent-management.js","sourceRoot":"","sources":["../../../../../../src/cli/connect/mcp/tools/agent-management.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AAElE,MAAM,UAAU,4BAA4B,CAAC,GAAc,EAAE,QAAuB;IAElF,GAAG,CAAC,IAAI,CACN,uBAAuB,EACvB,cAAc,CAAC,uBAAuB,CAAC,EACvC;QACE,UAAU,EAAE,eAAe;QAC3B,iBAAiB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,wGAAwG,CAAC;QAChJ,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC,oDAAoD,CAAC;KACzF,EACD,KAAK,EAAE,EAAE,UAAU,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,EAAE;QAChD,MAAM,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;QACnD,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,cAAc,kBAAkB,CAAC,iBAAiB,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;QACtG,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;IACpG,CAAC,CACF,CAAC;IAEF,GAAG,CAAC,IAAI,CACN,uBAAuB,EACvB,cAAc,CAAC,uBAAuB,CAAC,EACvC;QACE,UAAU,EAAE,eAAe;QAC3B,iBAAiB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,kEAAkE,CAAC;QAC1G,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC;KAC/G,EACD,KAAK,EAAE,EAAE,UAAU,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,EAAE;QAChD,MAAM,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;QACnD,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,cAAc,kBAAkB,CAAC,iBAAiB,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;QACtG,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;IACpG,CAAC,CACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"agent-management.js","sourceRoot":"","sources":["../../../../../../src/cli/connect/mcp/tools/agent-management.ts"],"names":[],"mappings":"AAmBA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AAElE,MAAM,UAAU,4BAA4B,CAAC,GAAc,EAAE,QAAuB;IAElF,GAAG,CAAC,IAAI,CACN,uBAAuB,EACvB,cAAc,CAAC,uBAAuB,CAAC,EACvC;QACE,UAAU,EAAE,eAAe;QAC3B,iBAAiB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,wGAAwG,CAAC;QAChJ,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC,oDAAoD,CAAC;KACzF,EACD,KAAK,EAAE,EAAE,UAAU,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,EAAE;QAChD,MAAM,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;QACnD,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,cAAc,kBAAkB,CAAC,iBAAiB,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;QACtG,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;IACpG,CAAC,CACF,CAAC;IAEF,GAAG,CAAC,IAAI,CACN,uBAAuB,EACvB,cAAc,CAAC,uBAAuB,CAAC,EACvC;QACE,UAAU,EAAE,eAAe;QAC3B,iBAAiB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,wGAAwG,CAAC;QAChJ,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC;KAC/G,EACD,KAAK,EAAE,EAAE,UAAU,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,EAAE;QAChD,MAAM,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;QACnD,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,cAAc,kBAAkB,CAAC,iBAAiB,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;QACtG,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;IACpG,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"init-wizard.d.ts","sourceRoot":"","sources":["../../../src/cli/init-wizard.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAQH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AA4uDjD,wBAAsB,aAAa,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAoSvE"}
1
+ {"version":3,"file":"init-wizard.d.ts","sourceRoot":"","sources":["../../../src/cli/init-wizard.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAQH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAixDjD,wBAAsB,aAAa,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAoSvE"}
@@ -160,6 +160,8 @@ const CONFIG_DEFAULTS = {
160
160
  AIMEAT_GENERATOR_ENABLED: 'true',
161
161
  AIMEAT_APP_HOST: '',
162
162
  AIMEAT_APP_ORIGIN_ENABLED: 'false',
163
+ AIMEAT_PORTFOLIO_HOST: '',
164
+ AIMEAT_PORTFOLIO_ORIGIN_ENABLED: 'false',
163
165
  };
164
166
  // ── Helpers ─────────────────────────────────────────────────────────
165
167
  /** Parse a .env file into key-value pairs (ignores comments, handles quotes). */
@@ -446,6 +448,8 @@ function generateEnvContent(settings) {
446
448
  vars: [
447
449
  { key: 'AIMEAT_APP_ORIGIN_ENABLED', comment: 'Serve user apps from *.apps.<domain> to isolate them from your session. Requires DNS + wildcard TLS (see docs/internal/app-origin-deployment.md)' },
448
450
  { key: 'AIMEAT_APP_HOST', comment: 'App origin host, e.g. apps.example.com (required when AIMEAT_APP_ORIGIN_ENABLED=true)' },
451
+ { key: 'AIMEAT_PORTFOLIO_ORIGIN_ENABLED', comment: 'Serve published portfolios standalone at <username>.portfolio.<domain>. Requires DNS + wildcard TLS' },
452
+ { key: 'AIMEAT_PORTFOLIO_HOST', comment: 'Portfolio origin host, e.g. portfolio.example.com (required when AIMEAT_PORTFOLIO_ORIGIN_ENABLED=true)' },
449
453
  ],
450
454
  },
451
455
  ];
@@ -1430,6 +1434,34 @@ async function askAllAdvancedSettings(t, cfg, useCase, baseUrl) {
1430
1434
  settings.AIMEAT_APP_HOST = appHost.trim();
1431
1435
  settings.AIMEAT_APP_ORIGIN_ENABLED = 'true';
1432
1436
  }
1437
+ // ── Portfolio Origin ──
1438
+ // Same isolation model for standalone published portfolios:
1439
+ // <username>.portfolio.<domain>. Requires DNS + wildcard TLS.
1440
+ const portfolioOriginEnabled = checkCancel(await p.confirm({
1441
+ message: t('init.portfolioOrigin'),
1442
+ initialValue: false,
1443
+ }), t);
1444
+ if (portfolioOriginEnabled) {
1445
+ let portfolioHostDefault = '';
1446
+ try {
1447
+ portfolioHostDefault = `portfolio.${new URL(baseUrl).hostname}`;
1448
+ }
1449
+ catch {
1450
+ portfolioHostDefault = '';
1451
+ }
1452
+ const portfolioHost = checkCancel(await p.text({
1453
+ message: t('init.portfolioHost'),
1454
+ placeholder: portfolioHostDefault || 'portfolio.example.com',
1455
+ ...(portfolioHostDefault ? { defaultValue: portfolioHostDefault } : {}),
1456
+ validate: val => {
1457
+ const v = val ?? portfolioHostDefault;
1458
+ if (!v?.trim())
1459
+ return t('init.portfolioHostRequired');
1460
+ },
1461
+ }), t);
1462
+ settings.AIMEAT_PORTFOLIO_HOST = portfolioHost.trim();
1463
+ settings.AIMEAT_PORTFOLIO_ORIGIN_ENABLED = 'true';
1464
+ }
1433
1465
  }
1434
1466
  return settings;
1435
1467
  }