aimeat 1.19.1 → 1.20.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 (292) hide show
  1. package/README.md +39 -3
  2. package/dist/.env.example +5 -1
  3. package/dist/locales/en.json +227 -1
  4. package/dist/locales/fi.json +229 -1
  5. package/dist/public/components/Markdown.js +88 -15
  6. package/dist/public/components/Mermaid.js +59 -0
  7. package/dist/public/components/NotificationBell.js +94 -0
  8. package/dist/public/css/theme.css +26 -0
  9. package/dist/public/css/views/admin.css +16 -0
  10. package/dist/public/css/views/agents-detail.css +93 -0
  11. package/dist/public/css/views/profile.css +241 -2
  12. package/dist/public/js/api.js +11 -5
  13. package/dist/public/js/services/admin.js +4 -0
  14. package/dist/public/js/services/agents.js +19 -0
  15. package/dist/public/js/services/organisms.js +822 -2
  16. package/dist/public/lib/mermaid/README.md +6 -0
  17. package/dist/public/lib/mermaid/mermaid.min.js +3405 -0
  18. package/dist/public/lib/toastui/toastui-editor-all.min.js +24 -0
  19. package/dist/public/lib/toastui/toastui-editor.min.css +6 -0
  20. package/dist/public/llms-template.txt +4 -0
  21. package/dist/public/spa.html +8 -0
  22. package/dist/public/views/admin/security-tab.js +93 -0
  23. package/dist/public/views/admin.js +2 -0
  24. package/dist/public/views/doc-solo.js +102 -0
  25. package/dist/public/views/profile/agents/agent-card.js +67 -8
  26. package/dist/public/views/profile/agents/tab-messages.js +51 -7
  27. package/dist/public/views/profile/agents-tab.js +184 -4
  28. package/dist/public/views/profile/generator-dashboard/use-autopilot.js +5 -2
  29. package/dist/public/views/profile/landing-page.js +12 -4
  30. package/dist/public/views/profile/organisms-tab.js +1640 -2
  31. package/dist/public/views/profile.js +6 -3
  32. package/dist/src/cli/connect/mcp/tools/index.d.ts.map +1 -1
  33. package/dist/src/cli/connect/mcp/tools/index.js +2 -0
  34. package/dist/src/cli/connect/mcp/tools/index.js.map +1 -1
  35. package/dist/src/cli/connect/mcp/tools/organisms.d.ts.map +1 -1
  36. package/dist/src/cli/connect/mcp/tools/organisms.js +31 -0
  37. package/dist/src/cli/connect/mcp/tools/organisms.js.map +1 -1
  38. package/dist/src/cli/connect/mcp/tools/workspaces.d.ts +15 -0
  39. package/dist/src/cli/connect/mcp/tools/workspaces.d.ts.map +1 -0
  40. package/dist/src/cli/connect/mcp/tools/workspaces.js +240 -0
  41. package/dist/src/cli/connect/mcp/tools/workspaces.js.map +1 -0
  42. package/dist/src/cli/connect/tool-call.d.ts +5 -0
  43. package/dist/src/cli/connect/tool-call.d.ts.map +1 -1
  44. package/dist/src/cli/connect/tool-call.js +255 -0
  45. package/dist/src/cli/connect/tool-call.js.map +1 -1
  46. package/dist/src/cli/init-wizard.d.ts.map +1 -1
  47. package/dist/src/cli/init-wizard.js +16 -8
  48. package/dist/src/cli/init-wizard.js.map +1 -1
  49. package/dist/src/config.d.ts +1 -1
  50. package/dist/src/config.d.ts.map +1 -1
  51. package/dist/src/config.js +4 -1
  52. package/dist/src/config.js.map +1 -1
  53. package/dist/src/generated/api-types.d.ts +987 -16
  54. package/dist/src/generated/api-types.d.ts.map +1 -1
  55. package/dist/src/generated/prisma-postgres/client.d.ts +1 -0
  56. package/dist/src/generated/prisma-postgres/client.js +5 -0
  57. package/dist/src/generated/prisma-postgres/default.d.ts +1 -0
  58. package/dist/src/generated/prisma-postgres/default.js +5 -0
  59. package/dist/src/generated/prisma-postgres/edge.d.ts +1 -0
  60. package/dist/src/generated/prisma-postgres/edge.js +1530 -0
  61. package/dist/src/generated/prisma-postgres/index-browser.js +1516 -0
  62. package/dist/src/generated/prisma-postgres/index.d.ts +128983 -0
  63. package/dist/src/generated/prisma-postgres/index.js +1551 -0
  64. package/dist/src/generated/prisma-postgres/package.json +183 -0
  65. package/dist/src/generated/prisma-postgres/query_engine-windows.dll.node +0 -0
  66. package/dist/src/generated/prisma-postgres/query_engine_bg.js +2 -0
  67. package/dist/src/generated/prisma-postgres/query_engine_bg.wasm +0 -0
  68. package/dist/src/generated/prisma-postgres/runtime/edge-esm.js +35 -0
  69. package/dist/src/generated/prisma-postgres/runtime/edge.js +35 -0
  70. package/dist/src/generated/prisma-postgres/runtime/index-browser.d.ts +370 -0
  71. package/dist/src/generated/prisma-postgres/runtime/index-browser.js +17 -0
  72. package/dist/src/generated/prisma-postgres/runtime/library.d.ts +3982 -0
  73. package/dist/src/generated/prisma-postgres/runtime/library.js +147 -0
  74. package/dist/src/generated/prisma-postgres/runtime/react-native.js +84 -0
  75. package/dist/src/generated/prisma-postgres/runtime/wasm-compiler-edge.js +85 -0
  76. package/dist/src/generated/prisma-postgres/runtime/wasm-engine-edge.js +38 -0
  77. package/dist/src/generated/prisma-postgres/schema.prisma +1465 -0
  78. package/dist/src/generated/prisma-postgres/wasm-edge-light-loader.mjs +5 -0
  79. package/dist/src/generated/prisma-postgres/wasm-worker-loader.mjs +5 -0
  80. package/dist/src/generated/prisma-postgres/wasm.d.ts +1 -0
  81. package/dist/src/generated/prisma-postgres/wasm.js +1537 -0
  82. package/dist/src/index.js +1 -1
  83. package/dist/src/mcp/agent-messages.d.ts +3 -0
  84. package/dist/src/mcp/agent-messages.d.ts.map +1 -1
  85. package/dist/src/mcp/agent-messages.js +9 -3
  86. package/dist/src/mcp/agent-messages.js.map +1 -1
  87. package/dist/src/mcp/annotations.d.ts.map +1 -1
  88. package/dist/src/mcp/annotations.js +12 -0
  89. package/dist/src/mcp/annotations.js.map +1 -1
  90. package/dist/src/mcp/catalog/definitions.d.ts.map +1 -1
  91. package/dist/src/mcp/catalog/definitions.js +139 -0
  92. package/dist/src/mcp/catalog/definitions.js.map +1 -1
  93. package/dist/src/mcp/catalog/surfaces.d.ts.map +1 -1
  94. package/dist/src/mcp/catalog/surfaces.js +9 -2
  95. package/dist/src/mcp/catalog/surfaces.js.map +1 -1
  96. package/dist/src/mcp/index.d.ts.map +1 -1
  97. package/dist/src/mcp/index.js +2 -0
  98. package/dist/src/mcp/index.js.map +1 -1
  99. package/dist/src/mcp/organisms.d.ts +2 -0
  100. package/dist/src/mcp/organisms.d.ts.map +1 -1
  101. package/dist/src/mcp/organisms.js +106 -21
  102. package/dist/src/mcp/organisms.js.map +1 -1
  103. package/dist/src/mcp/workspaces.d.ts +34 -0
  104. package/dist/src/mcp/workspaces.d.ts.map +1 -0
  105. package/dist/src/mcp/workspaces.js +464 -0
  106. package/dist/src/mcp/workspaces.js.map +1 -0
  107. package/dist/src/middleware/workspace-access.d.ts +13 -0
  108. package/dist/src/middleware/workspace-access.d.ts.map +1 -1
  109. package/dist/src/middleware/workspace-access.js +12 -7
  110. package/dist/src/middleware/workspace-access.js.map +1 -1
  111. package/dist/src/models/schemas.d.ts +2 -2
  112. package/dist/src/routes/admin-prompts.d.ts.map +1 -1
  113. package/dist/src/routes/admin-prompts.js +4 -1
  114. package/dist/src/routes/admin-prompts.js.map +1 -1
  115. package/dist/src/routes/admin-security.d.ts +19 -0
  116. package/dist/src/routes/admin-security.d.ts.map +1 -0
  117. package/dist/src/routes/admin-security.js +87 -0
  118. package/dist/src/routes/admin-security.js.map +1 -0
  119. package/dist/src/routes/agent-messages.d.ts +3 -0
  120. package/dist/src/routes/agent-messages.d.ts.map +1 -1
  121. package/dist/src/routes/agent-messages.js +27 -2
  122. package/dist/src/routes/agent-messages.js.map +1 -1
  123. package/dist/src/routes/apps.d.ts +6 -0
  124. package/dist/src/routes/apps.d.ts.map +1 -1
  125. package/dist/src/routes/apps.js +24 -6
  126. package/dist/src/routes/apps.js.map +1 -1
  127. package/dist/src/routes/bootstrap.d.ts.map +1 -1
  128. package/dist/src/routes/bootstrap.js +1 -0
  129. package/dist/src/routes/bootstrap.js.map +1 -1
  130. package/dist/src/routes/extensions.d.ts.map +1 -1
  131. package/dist/src/routes/extensions.js +5 -1
  132. package/dist/src/routes/extensions.js.map +1 -1
  133. package/dist/src/routes/generator-autopilot.d.ts +1 -0
  134. package/dist/src/routes/generator-autopilot.d.ts.map +1 -1
  135. package/dist/src/routes/generator-autopilot.js +8 -2
  136. package/dist/src/routes/generator-autopilot.js.map +1 -1
  137. package/dist/src/routes/generator.d.ts.map +1 -1
  138. package/dist/src/routes/generator.js +20 -0
  139. package/dist/src/routes/generator.js.map +1 -1
  140. package/dist/src/routes/libs.d.ts +4 -0
  141. package/dist/src/routes/libs.d.ts.map +1 -1
  142. package/dist/src/routes/libs.js +134 -5
  143. package/dist/src/routes/libs.js.map +1 -1
  144. package/dist/src/routes/memory.d.ts +2 -0
  145. package/dist/src/routes/memory.d.ts.map +1 -1
  146. package/dist/src/routes/memory.js +20 -10
  147. package/dist/src/routes/memory.js.map +1 -1
  148. package/dist/src/routes/notifications.d.ts +18 -0
  149. package/dist/src/routes/notifications.d.ts.map +1 -0
  150. package/dist/src/routes/notifications.js +64 -0
  151. package/dist/src/routes/notifications.js.map +1 -0
  152. package/dist/src/routes/organisms.d.ts +29 -0
  153. package/dist/src/routes/organisms.d.ts.map +1 -1
  154. package/dist/src/routes/organisms.js +1042 -2
  155. package/dist/src/routes/organisms.js.map +1 -1
  156. package/dist/src/routes/storage-files.d.ts +5 -0
  157. package/dist/src/routes/storage-files.d.ts.map +1 -1
  158. package/dist/src/routes/storage-files.js +83 -16
  159. package/dist/src/routes/storage-files.js.map +1 -1
  160. package/dist/src/routes/upload.d.ts +3 -0
  161. package/dist/src/routes/upload.d.ts.map +1 -1
  162. package/dist/src/routes/upload.js +9 -1
  163. package/dist/src/routes/upload.js.map +1 -1
  164. package/dist/src/server-bootstrap/config-init.d.ts.map +1 -1
  165. package/dist/src/server-bootstrap/config-init.js +1 -0
  166. package/dist/src/server-bootstrap/config-init.js.map +1 -1
  167. package/dist/src/server-bootstrap/middleware-guards.d.ts.map +1 -1
  168. package/dist/src/server-bootstrap/middleware-guards.js +4 -2
  169. package/dist/src/server-bootstrap/middleware-guards.js.map +1 -1
  170. package/dist/src/server-bootstrap/routes-loader.d.ts.map +1 -1
  171. package/dist/src/server-bootstrap/routes-loader.js +4 -0
  172. package/dist/src/server-bootstrap/routes-loader.js.map +1 -1
  173. package/dist/src/server-bootstrap/service-init.d.ts +2 -0
  174. package/dist/src/server-bootstrap/service-init.d.ts.map +1 -1
  175. package/dist/src/server-bootstrap/service-init.js +19 -1
  176. package/dist/src/server-bootstrap/service-init.js.map +1 -1
  177. package/dist/src/services/access-guard.d.ts +52 -0
  178. package/dist/src/services/access-guard.d.ts.map +1 -0
  179. package/dist/src/services/access-guard.js +30 -0
  180. package/dist/src/services/access-guard.js.map +1 -0
  181. package/dist/src/services/config-schema.js +1 -1
  182. package/dist/src/services/config-schema.js.map +1 -1
  183. package/dist/src/services/consent.d.ts.map +1 -1
  184. package/dist/src/services/consent.js +37 -1
  185. package/dist/src/services/consent.js.map +1 -1
  186. package/dist/src/services/gate-expiry.d.ts +25 -0
  187. package/dist/src/services/gate-expiry.d.ts.map +1 -0
  188. package/dist/src/services/gate-expiry.js +26 -0
  189. package/dist/src/services/gate-expiry.js.map +1 -0
  190. package/dist/src/services/gate-policy.d.ts +50 -0
  191. package/dist/src/services/gate-policy.d.ts.map +1 -0
  192. package/dist/src/services/gate-policy.js +82 -0
  193. package/dist/src/services/gate-policy.js.map +1 -0
  194. package/dist/src/services/generator-autopilot.d.ts +18 -1
  195. package/dist/src/services/generator-autopilot.d.ts.map +1 -1
  196. package/dist/src/services/generator-autopilot.js +94 -154
  197. package/dist/src/services/generator-autopilot.js.map +1 -1
  198. package/dist/src/services/handbooks/agent.d.ts +3 -1
  199. package/dist/src/services/handbooks/agent.d.ts.map +1 -1
  200. package/dist/src/services/handbooks/agent.js +10 -3
  201. package/dist/src/services/handbooks/agent.js.map +1 -1
  202. package/dist/src/services/manifest-schema.d.ts +48 -0
  203. package/dist/src/services/manifest-schema.d.ts.map +1 -0
  204. package/dist/src/services/manifest-schema.js +88 -0
  205. package/dist/src/services/manifest-schema.js.map +1 -0
  206. package/dist/src/services/notify.d.ts +19 -0
  207. package/dist/src/services/notify.d.ts.map +1 -0
  208. package/dist/src/services/notify.js +43 -0
  209. package/dist/src/services/notify.js.map +1 -0
  210. package/dist/src/services/organism-export.d.ts +13 -0
  211. package/dist/src/services/organism-export.d.ts.map +1 -0
  212. package/dist/src/services/organism-export.js +58 -0
  213. package/dist/src/services/organism-export.js.map +1 -0
  214. package/dist/src/services/organism-import.d.ts +16 -0
  215. package/dist/src/services/organism-import.d.ts.map +1 -0
  216. package/dist/src/services/organism-import.js +82 -0
  217. package/dist/src/services/organism-import.js.map +1 -0
  218. package/dist/src/services/prompt-defaults.d.ts.map +1 -1
  219. package/dist/src/services/prompt-defaults.js +75 -0
  220. package/dist/src/services/prompt-defaults.js.map +1 -1
  221. package/dist/src/services/safe-zip.d.ts +27 -0
  222. package/dist/src/services/safe-zip.d.ts.map +1 -0
  223. package/dist/src/services/safe-zip.js +131 -0
  224. package/dist/src/services/safe-zip.js.map +1 -0
  225. package/dist/src/services/security-incident.d.ts +25 -0
  226. package/dist/src/services/security-incident.d.ts.map +1 -0
  227. package/dist/src/services/security-incident.js +49 -0
  228. package/dist/src/services/security-incident.js.map +1 -0
  229. package/dist/src/services/skill-bundle/generator.d.ts +2 -0
  230. package/dist/src/services/skill-bundle/generator.d.ts.map +1 -1
  231. package/dist/src/services/skill-bundle/generator.js +11 -5
  232. package/dist/src/services/skill-bundle/generator.js.map +1 -1
  233. package/dist/src/services/template-bundles.d.ts +37 -0
  234. package/dist/src/services/template-bundles.d.ts.map +1 -0
  235. package/dist/src/services/template-bundles.js +130 -0
  236. package/dist/src/services/template-bundles.js.map +1 -0
  237. package/dist/src/services/workspace-export.d.ts +63 -0
  238. package/dist/src/services/workspace-export.d.ts.map +1 -0
  239. package/dist/src/services/workspace-export.js +145 -0
  240. package/dist/src/services/workspace-export.js.map +1 -0
  241. package/dist/src/services/workspace-import.d.ts +44 -0
  242. package/dist/src/services/workspace-import.d.ts.map +1 -0
  243. package/dist/src/services/workspace-import.js +120 -0
  244. package/dist/src/services/workspace-import.js.map +1 -0
  245. package/dist/src/services/workspace-meta.d.ts +39 -0
  246. package/dist/src/services/workspace-meta.d.ts.map +1 -0
  247. package/dist/src/services/workspace-meta.js +95 -0
  248. package/dist/src/services/workspace-meta.js.map +1 -0
  249. package/dist/src/storage/interface.d.ts +26 -0
  250. package/dist/src/storage/interface.d.ts.map +1 -1
  251. package/dist/src/storage/interface.js.map +1 -1
  252. package/dist/src/storage/pattern-utils.d.ts +26 -1
  253. package/dist/src/storage/pattern-utils.d.ts.map +1 -1
  254. package/dist/src/storage/pattern-utils.js +37 -8
  255. package/dist/src/storage/pattern-utils.js.map +1 -1
  256. package/dist/src/storage/providers/mongodb/index.d.ts +45 -7
  257. package/dist/src/storage/providers/mongodb/index.d.ts.map +1 -1
  258. package/dist/src/storage/providers/mongodb/index.js +214 -14
  259. package/dist/src/storage/providers/mongodb/index.js.map +1 -1
  260. package/dist/src/storage/providers/postgres/index.d.ts +6 -0
  261. package/dist/src/storage/providers/postgres/index.d.ts.map +1 -0
  262. package/dist/src/storage/providers/postgres/index.js +33 -0
  263. package/dist/src/storage/providers/postgres/index.js.map +1 -0
  264. package/dist/src/storage/providers/sqlite/index.d.ts +10 -1
  265. package/dist/src/storage/providers/sqlite/index.d.ts.map +1 -1
  266. package/dist/src/storage/providers/sqlite/index.js +132 -2
  267. package/dist/src/storage/providers/sqlite/index.js.map +1 -1
  268. package/dist/src/storage/providers/sqlite/repos/storage-file.d.ts.map +1 -1
  269. package/dist/src/storage/providers/sqlite/repos/storage-file.js +6 -2
  270. package/dist/src/storage/providers/sqlite/repos/storage-file.js.map +1 -1
  271. package/dist/src/storage/providers/sqlite/schema.d.ts.map +1 -1
  272. package/dist/src/storage/providers/sqlite/schema.js +23 -0
  273. package/dist/src/storage/providers/sqlite/schema.js.map +1 -1
  274. package/dist/src/storage/repositories/app.repository.d.ts +17 -0
  275. package/dist/src/storage/repositories/app.repository.d.ts.map +1 -1
  276. package/dist/src/storage/repositories/organism.repository.d.ts +8 -1
  277. package/dist/src/storage/repositories/organism.repository.d.ts.map +1 -1
  278. package/dist/src/storage/storage-factory.d.ts +1 -1
  279. package/dist/src/storage/storage-factory.d.ts.map +1 -1
  280. package/dist/src/storage/storage-factory.js +6 -0
  281. package/dist/src/storage/storage-factory.js.map +1 -1
  282. package/dist/src/utils/env-config.js +5 -5
  283. package/dist/src/utils/env-config.js.map +1 -1
  284. package/dist/src/utils/env-validator.js +6 -6
  285. package/dist/src/utils/env-validator.js.map +1 -1
  286. package/dist/src/utils/stable-json.d.ts +22 -0
  287. package/dist/src/utils/stable-json.d.ts.map +1 -0
  288. package/dist/src/utils/stable-json.js +36 -0
  289. package/dist/src/utils/stable-json.js.map +1 -0
  290. package/package.json +6 -3
  291. package/prisma/schema.postgres.prisma +1467 -0
  292. package/prisma/schema.prisma +27 -0
package/README.md CHANGED
@@ -13,6 +13,18 @@ AIMEAT is an open protocol for AI agent infrastructure. It gives agents (Claude,
13
13
 
14
14
  > Try it at [aimeat.io](https://aimeat.io/), or [run your own node](#getting-started) and join the federation.
15
15
 
16
+ ### Fastest start: let your AI assistant set this up
17
+
18
+ Cloned the repo and want it running without reading docs? Open **[startup.prompt.md](startup.prompt.md)** and
19
+ paste its contents into **Claude Code**, **Copilot**, **Cursor**, or any coding assistant with this repo
20
+ open. It takes the assistant — and you — from a fresh clone to a **live AIMEAT node** (or a connection to a
21
+ hosted one), **registers your AI agents** (CrewAI crews, Claude, Cursor, …) onto it, and explains the
22
+ essentials of working with AIMEAT as it goes.
23
+
24
+ The prompt asks only what it can't determine for itself (self-host vs `aimeat.io`, SQLite vs MongoDB, your
25
+ owner handle), runs the setup commands for you, and surfaces each agent's approval code for you to confirm.
26
+ It never invents secrets or pushes anything outward without asking.
27
+
16
28
  <p align="center">
17
29
  <img src="assets/screenshots/portal-landing.png" alt="Portal landing page" width="24%" />
18
30
  <img src="assets/screenshots/profile-overview.png" alt="User profile with the persistent grouped sidebar" width="24%" />
@@ -357,8 +369,10 @@ aimeat validate # check for problems
357
369
  pnpm dev # development with auto-reload
358
370
  pnpm build && pnpm start # production
359
371
 
360
- # Docker (includes MongoDB)
361
- docker compose up
372
+ # Docker — one compose file per backend (run from the aimeat/ directory)
373
+ docker compose up # MongoDB (default)
374
+ docker compose -f docker-compose.postgres.yml up --build # PostgreSQL
375
+ docker compose -f docker-compose.sqlite.yml up --build # SQLite (no external DB)
362
376
  ```
363
377
 
364
378
  Server runs on port 40050. Quick test: paste this into any AI chat:
@@ -367,13 +381,34 @@ Server runs on port 40050. Quick test: paste this into any AI chat:
367
381
 
368
382
  If the AI reads the docs and explains the protocol, everything works. Admin dashboard URL is shown in the startup log.
369
383
 
384
+ ### Desktop app (Windows) — no terminal needed
385
+
386
+ For a personal node without the command line, **AIMEAT Personal Node** is a one-click Windows installer that
387
+ bundles everything — the node server, a Node.js runtime, and a persistent SQLite database — so there are **no
388
+ prerequisites** to install. A small control panel starts/stops the node, shows status and live logs, configures
389
+ it (port, federation role), connects a local AI (Ollama / LM Studio) to your account, and opens the web
390
+ dashboard in your browser. Your data lives in your own app-data folder and survives restarts.
391
+
392
+ <p align="center">
393
+ <img src="assets/screenshots/aimeat-desktop.png" alt="AIMEAT Personal Node desktop app — control panel with Getting Started steps, node status (running on port 40050), and node info" width="640" />
394
+ </p>
395
+
396
+ Build the installer from source (a Rust toolchain + Node 24 + pnpm are needed to *build* it, not to *run* it):
397
+
398
+ ```bash
399
+ pnpm build-desktop # installer lands in aimeat-desktop/src-tauri/target/release/bundle/
400
+ ```
401
+
402
+ Built with [Tauri](https://tauri.app). Windows is the supported target today (macOS/Linux can follow via per-OS
403
+ CI). Developer docs: [aimeat-desktop/README.md](aimeat-desktop/README.md).
404
+
370
405
  ---
371
406
 
372
407
  ## Reference Implementation
373
408
 
374
409
  The `aimeat/` directory contains a full reference implementation in TypeScript (Express 5.2, Node 24). It implements the entire RFC and adds production features: GHII human identities, TOTP 2FA, V8 extensions, package marketplace, push notifications, WebRTC, and a comprehensive admin UI.
375
410
 
376
- Two storage backends: SQLite (personal nodes, local dev; can run `:memory:` for true in-RAM speed) and MongoDB (production). The legacy in-memory backend is deprecated -- SQLite `:memory:` covers the same fast-iteration role using the actual production code path.
411
+ Three storage backends: SQLite (personal nodes, local dev; can run `:memory:` for true in-RAM speed), MongoDB (production), and PostgreSQL (production). MongoDB and PostgreSQL share one Prisma-backed code path, so behaviour is identical across both. The legacy in-memory backend is deprecated -- SQLite `:memory:` covers the same fast-iteration role using the actual production code path.
377
412
 
378
413
  See the [Implementation Guide v3.0](docs/AIMEAT-IO-Implementation-Guide-v3.0.md) for full details.
379
414
 
@@ -382,6 +417,7 @@ See the [Implementation Guide v3.0](docs/AIMEAT-IO-Implementation-Guide-v3.0.md)
382
417
  ```bash
383
418
  pnpm test:e2e:sqlite # fast iteration default
384
419
  pnpm test:e2e:mongodb # most realistic; run before a PR
420
+ pnpm test:e2e:postgresql # PostgreSQL backend (needs a running Postgres)
385
421
  pnpm test:playwright:sqlite # browser tests, scoped
386
422
  pnpm test # unit tests
387
423
  pnpm typecheck && pnpm lint
package/dist/.env.example CHANGED
@@ -9,7 +9,8 @@ AIMEAT_PORT=40050
9
9
  # AIMEAT_BASE_URL="https://your-domain.com" # Public URL (default: http://localhost:$PORT)
10
10
 
11
11
  # ── Storage Backend ───────────────────────────────────────────
12
- # Choose storage: memory (default, data lost on restart), sqlite (file-based, zero-config), mongodb (production)
12
+ # Choose storage: memory (default, data lost on restart), sqlite (file-based, zero-config),
13
+ # mongodb (production), or postgresql (production). `postgres` is accepted as an alias.
13
14
  # AIMEAT_STORAGE="memory"
14
15
 
15
16
  # SQLite — file path for the database (auto-created on first run)
@@ -18,6 +19,9 @@ AIMEAT_PORT=40050
18
19
  # MongoDB — required when AIMEAT_STORAGE=mongodb
19
20
  # DATABASE_URL="mongodb://user:pass@localhost:27017/AIMEAT?replicaSet=rs0&authSource=admin"
20
21
 
22
+ # PostgreSQL — required when AIMEAT_STORAGE=postgresql
23
+ # DATABASE_URL="postgresql://user:pass@localhost:5432/aimeat?schema=public"
24
+
21
25
  # ── Operator / Admin ───────────────────────────────────────────
22
26
  # Auto-generated on startup if not set (printed to console)
23
27
  # AIMEAT_ADMIN_PASSWORD="TestAdminPw123!"
@@ -111,6 +111,10 @@
111
111
  "copied": "✓ Copied",
112
112
  "error": "Error"
113
113
  },
114
+ "notif": {
115
+ "title": "Notifications",
116
+ "empty": "No notifications yet"
117
+ },
114
118
  "nav": {
115
119
  "try": "Try it",
116
120
  "devView": "For Developers",
@@ -494,12 +498,27 @@
494
498
  "byTag": "Filter by tag:",
495
499
  "groupBy": "Group by:",
496
500
  "groupByNone": "No grouping",
501
+ "groupByCustom": "Custom groups",
497
502
  "groupByTag": "Tag",
498
503
  "groupByMode": "Mode",
499
504
  "clear": "Clear",
500
505
  "untagged": "Untagged",
501
506
  "noMatches": "No agents match the current filter."
502
507
  },
508
+ "groups": {
509
+ "addGroup": "Add group",
510
+ "hint": "Drag an agent by its grip handle onto a group to file it there.",
511
+ "ungrouped": "Ungrouped",
512
+ "unnamed": "Untitled group",
513
+ "namePlaceholder": "Group name",
514
+ "rename": "Click to rename",
515
+ "remove": "Remove group",
516
+ "toggle": "Collapse / expand",
517
+ "dragHint": "Drag onto a group to file it",
518
+ "emptyDrop": "Drag agents here to add them to this group.",
519
+ "confirmRemove": "Remove the group “{name}”? Its agents move to Ungrouped — they are not deleted.",
520
+ "saveError": "Failed to save groups."
521
+ },
503
522
  "reorderHint": "Drag to reorder",
504
523
  "solo": {
505
524
  "notFound": "Agent not found.",
@@ -747,6 +766,9 @@
747
766
  "online": "online",
748
767
  "offline": "offline",
749
768
  "threads": "Conversations",
769
+ "threadFallback": "Conversation",
770
+ "threadsShowMore": "Show {count} more",
771
+ "threadsShowLess": "Show less",
750
772
  "proposedTask": "Proposed task",
751
773
  "createTask": "Create this task",
752
774
  "adjustTask": "Let me adjust",
@@ -2879,7 +2901,7 @@
2879
2901
  "baseUrlInvalid": "Must start with http:// or https://",
2880
2902
  "dbUrl": "MongoDB URL",
2881
2903
  "dbUrlHint": "Leave empty for in-memory storage (data lost on restart)",
2882
- "dbUrlInvalid": "Must start with mongodb:// or mongodb+srv://",
2904
+ "dbUrlInvalid": "Must be a valid mongodb:// (or mongodb+srv://) or postgresql:// connection URL",
2883
2905
  "adminPassword": "Admin password",
2884
2906
  "adminPasswordHint": "Password for the operator admin panel (min 8 characters)",
2885
2907
  "adminPasswordWeak": "Password must be at least 8 characters",
@@ -3022,6 +3044,7 @@
3022
3044
  "storage_memory": "In-memory (development only, data lost on restart)",
3023
3045
  "storage_sqlite": "SQLite (personal use, zero-config file-based storage)",
3024
3046
  "storage_mongodb": "MongoDB (production, requires external server)",
3047
+ "storage_postgresql": "PostgreSQL (production, requires external server)",
3025
3048
  "sqlite_path_label": "SQLite database path",
3026
3049
  "sqlite_path_hint": "File path for the SQLite database (auto-created)",
3027
3050
  "pushEnabled": "Enable push notifications for personal nodes?",
@@ -5438,6 +5461,195 @@
5438
5461
  },
5439
5462
  "organisms": {
5440
5463
  "title": "Organisms",
5464
+ "openWorkspace": "Open workspace",
5465
+ "backToList": "All organisms",
5466
+ "noWorkspace": "This organism has no workspace yet. Set one up to track goals, plans, deliverables and decisions — versioned on publish.",
5467
+ "setupWorkspace": "Set up workspace",
5468
+ "workspaceReady": "Workspace ready",
5469
+ "setupError": "Failed to set up workspace",
5470
+ "addDraft": "Add draft",
5471
+ "saveDraft": "Save draft",
5472
+ "draftSaved": "Draft saved",
5473
+ "idOptional": "id (optional)",
5474
+ "draft": "draft",
5475
+ "publish": "Publish",
5476
+ "published": "Published",
5477
+ "draftVersion": "Draft",
5478
+ "publishedVersion": "Published",
5479
+ "workspacesDesc": "Workspaces in this organism — each is an independent space with its own documents, records and history.",
5480
+ "newWorkspace": "New workspace",
5481
+ "workspaceName": "Workspace name",
5482
+ "noWorkspaces": "No workspaces yet — create one to get started.",
5483
+ "deleteWorkspaceConfirm": "Delete the workspace “{name}” and all its content? This cannot be undone.",
5484
+ "backToWorkspaces": "Workspaces",
5485
+ "allOrganisms": "All organisms",
5486
+ "currentWorkspaces": "Workspaces in this organism",
5487
+ "import": "Import",
5488
+ "importHint": "Restore a workspace from a .zip backup",
5489
+ "export": "Export backup (.zip)",
5490
+ "imported": "Workspace imported",
5491
+ "exportOrg": "Export organism",
5492
+ "exportOrgHint": "Download a ZIP backup of the whole organism (all workspaces)",
5493
+ "importOrg": "Import organism",
5494
+ "importOrgHint": "Restore an organism from a .zip backup",
5495
+ "orgImported": "Organism imported",
5496
+ "requestAccess": "Request access",
5497
+ "accessRequested": "Access requested — {creator} will decide.",
5498
+ "byCreator": "by {creator}",
5499
+ "yours": "yours",
5500
+ "requests": "Access requests",
5501
+ "noRequests": "No access requests.",
5502
+ "approve": "Approve",
5503
+ "deny": "Deny",
5504
+ "approved": "approved",
5505
+ "revoke": "Revoke",
5506
+ "editFlow": "How editing works here",
5507
+ "activity": "Activity",
5508
+ "draftEdit": "Draft edit",
5509
+ "publishedWord": "Published",
5510
+ "publishedVerb": "published",
5511
+ "editedVerb": "edited",
5512
+ "confirmDeleteItem": "Delete “{name}”? Its draft, published version and full history are removed. This cannot be undone.",
5513
+ "deletedItem": "Deleted",
5514
+ "popOut": "Open in its own window",
5515
+ "docNotFound2": "Document not found.",
5516
+ "loginToView": "Sign in to view this document.",
5517
+ "docRejected": "Document rejected",
5518
+ "participants": "Who works here",
5519
+ "you": "you",
5520
+ "creatorTag": "creator",
5521
+ "guest": "guest",
5522
+ "anAgent": "agent",
5523
+ "hiddenAgent": "An agent whose details you cannot see",
5524
+ "otherAgentHint": "Another owner’s agent — you see what it has done here, not its live status",
5525
+ "viaAgent": "done via this agent",
5526
+ "contributions": "contributions",
5527
+ "events": "events",
5528
+ "less": "Less",
5529
+ "more": "More",
5530
+ "mon": "Mon",
5531
+ "wed": "Wed",
5532
+ "fri": "Fri",
5533
+ "docsDraft": "Docs draft",
5534
+ "docsPublished": "Docs published",
5535
+ "recordsDraft": "Records draft",
5536
+ "recordsPublished": "Records published",
5537
+ "overview": "Overview — who & what uses this organism",
5538
+ "hide": "Hide",
5539
+ "show": "Show",
5540
+ "aiPrompt": "AI access prompt:",
5541
+ "aiPromptHuman": "For chat",
5542
+ "aiPromptAgent": "For coding agent",
5543
+ "promptCopied": "Access prompt copied — paste it to your AI.",
5544
+ "addSpaceBtn": "Space",
5545
+ "addSpaceTitle": "Add a space",
5546
+ "addSpaceDesc": "A document space is a free-form wiki (sections + markdown pages). A record space is a schema-locked list (forms). You can remove spaces in Settings.",
5547
+ "modeDocument": "Document (wiki)",
5548
+ "modeRecords": "Records (form)",
5549
+ "noFields": "No fields",
5550
+ "createdAt": "Created",
5551
+ "lastSaved": "Last saved",
5552
+ "publishedAt": "Published",
5553
+ "fileVisibility": "File visibility",
5554
+ "fileVisibilityNote": "Private files only load for you — make them public to share the document.",
5555
+ "makeAllPublic": "Make all public",
5556
+ "toggleVisibility": "Click to toggle public / private",
5557
+ "public": "Public",
5558
+ "private": "Private",
5559
+ "sources": "Sources",
5560
+ "addSource": "Add source",
5561
+ "close": "Close",
5562
+ "sourcesDesc": "References this workspace draws on — memory, files, and knowledge packages. Pointers only; the originals stay where they live.",
5563
+ "src_memory": "Memory",
5564
+ "src_storage": "Files",
5565
+ "src_knowledge": "Knowledge",
5566
+ "mine": "Mine",
5567
+ "searchSources": "Search…",
5568
+ "search": "Search",
5569
+ "noResults": "No results",
5570
+ "entries": "entries",
5571
+ "attach": "Attach",
5572
+ "noSources": "No sources yet",
5573
+ "external": "external",
5574
+ "sourceAdded": "Source added",
5575
+ "sourceExists": "Already added",
5576
+ "sourcesSaveError": "Failed to save sources",
5577
+ "publishGated": "Sent for review (publish gate is on)",
5578
+ "publishGate": "Require review before publishing",
5579
+ "gateToggled": "Publish gate updated",
5580
+ "needsDecision": "Needs your decision",
5581
+ "approve": "Approve",
5582
+ "reject": "Reject",
5583
+ "approved": "Approved",
5584
+ "rejected": "Rejected",
5585
+ "decisions": "Recent decisions",
5586
+ "noneYet": "none yet",
5587
+ "onePerLine": "one per line",
5588
+ "docs": "docs",
5589
+ "newPage": "New document",
5590
+ "edit": "Edit",
5591
+ "pageTitle": "Document title",
5592
+ "writeMarkdown": "Write markdown…",
5593
+ "insertImage": "Upload image from file",
5594
+ "orPaste": "…or paste / drag an image into the editor",
5595
+ "saving": "Saving…",
5596
+ "pageSaved": "Document saved",
5597
+ "section": "Section",
5598
+ "sectionName": "Section name",
5599
+ "unsorted": "Unsorted",
5600
+ "moveTo": "move…",
5601
+ "newDocHere": "New document here",
5602
+ "addSubsection": "Sub-section",
5603
+ "selectDoc": "Select a document, or create one.",
5604
+ "docNotFound": "No document titled “{title}”",
5605
+ "rename": "Rename",
5606
+ "dragHint": "Drag into a section",
5607
+ "unnamed": "(unnamed)",
5608
+ "removeSection": "Remove section",
5609
+ "confirmRemoveSection": "Remove the section “{name}”? Its documents move to Unsorted — they are not deleted.",
5610
+ "confirmDeleteWorkspace": "Are you sure you want to delete this workspace? All its documents, records and version history are permanently removed. This cannot be undone.",
5611
+ "spaces": "Spaces",
5612
+ "recordsMode": "records",
5613
+ "remove": "Remove",
5614
+ "spaceName": "New space name",
5615
+ "docsSpace": "document space",
5616
+ "recordsSpace": "records type",
5617
+ "addSpace": "+ Add",
5618
+ "spaceAdded": "Space added",
5619
+ "spaceRemoved": "Space removed",
5620
+ "removeSpace": "Remove space",
5621
+ "confirmRemoveSpace": "Remove \"{name}\" from this workspace? Its data is kept in memory (orphaned) but the section disappears.",
5622
+ "restructure": "✨ Restructure / add types with AI",
5623
+ "restructureTitle": "Restructure / add types with AI",
5624
+ "restructureDesc": "Describe what to add or change. Existing types and their data are kept — the AI extends the current structure. (To start completely fresh, delete the workspace below first.)",
5625
+ "dangerZone": "Danger zone",
5626
+ "deleteWarn": "Deleting the workspace removes the manifest and ALL its data — drafts, published records, version history — and its schemas. The organism stays. This cannot be undone.",
5627
+ "deleteConfirmLabel": "Type the workspace name to confirm",
5628
+ "deleteWorkspace": "Delete workspace",
5629
+ "workspaceDeleted": "Workspace deleted",
5630
+ "settings": "Settings",
5631
+ "wsName": "Name",
5632
+ "wsSummary": "Summary",
5633
+ "autonomy": "AI autonomy (L1 cautious → L5 free)",
5634
+ "template": "Template",
5635
+ "settingsSaved": "Settings saved",
5636
+ "generateTitle": "Or generate a custom workspace with AI",
5637
+ "generateDesc": "Describe what this workspace is for — track, organise or refine information, or run a whole project lifecycle. The AI designs the object types. Use your OpenRouter key for one-click generation, or copy the prompt into any AI chat (free) and paste the result back.",
5638
+ "generatePlaceholder": "e.g. a game project's full dev lifecycle · organising AI-governance research & EU regulations · refining product specs",
5639
+ "generate": "Generate with AI",
5640
+ "generating": "Generating…",
5641
+ "generateError": "Generation failed",
5642
+ "noAiKey": "Set up your OpenRouter key above, or copy the prompt to your own AI chat.",
5643
+ "copyPrompt": "Copy prompt",
5644
+ "promptCopied": "Prompt copied — paste it into any AI chat, then paste the JSON it returns below.",
5645
+ "pasteHelp": "No key? Copy the prompt above into any AI chat, then paste the JSON it returns here:",
5646
+ "pastePlaceholder": "Paste the AI JSON response here",
5647
+ "applyPasted": "Validate & apply",
5648
+ "applyError": "Could not apply — check the pasted JSON.",
5649
+ "genFailed": "Generation failed — try again",
5650
+ "fixNeeded": "This needs fixing before it can be saved:",
5651
+ "copyFixPrompt": "Copy fix prompt for the AI",
5652
+ "fixPromptCopied": "Fix prompt copied — paste it back to your AI, then paste the corrected JSON.",
5441
5653
  "desc": "Organisms are groups — communities, teams, clubs, or projects. Create one or join existing ones to share knowledge, coordinate work, and build together.",
5442
5654
  "loading": "Loading organisms...",
5443
5655
  "empty": "You are not part of any organisms yet.",
@@ -5877,6 +6089,20 @@
5877
6089
  }
5878
6090
  },
5879
6091
  "admin": {
6092
+ "security": {
6093
+ "title": "Security",
6094
+ "desc": "Rejected / quarantined uploads and other security incidents.",
6095
+ "open": "open",
6096
+ "none": "No security incidents 🎉",
6097
+ "actor": "On behalf of",
6098
+ "source": "Source",
6099
+ "resolve": "Resolve",
6100
+ "resolved": "Incident resolved",
6101
+ "delete": "Delete",
6102
+ "deleted": "Deleted",
6103
+ "deleteConfirm": "Delete this incident and its quarantined file?",
6104
+ "evidence": "Payload"
6105
+ },
5880
6106
  "tabs": {
5881
6107
  "agentIntegration": "Agent Integration"
5882
6108
  },