aimeat 3.1.0 → 3.3.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 (824) hide show
  1. package/dist/.env.example +58 -1
  2. package/dist/build-stamp.json +4 -4
  3. package/dist/locales/en.json +9225 -9103
  4. package/dist/locales/es.json +9217 -9095
  5. package/dist/locales/fi.json +9225 -9103
  6. package/dist/public/changelog.json +12 -0
  7. package/dist/public/css/views/admin.css +11 -0
  8. package/dist/public/css/views/chat.css +388 -0
  9. package/dist/public/css/views/profile.css +41 -0
  10. package/dist/public/js/services/admin.js +346 -331
  11. package/dist/public/js/services/chat.js +190 -0
  12. package/dist/public/js/services/organism-roles.js +51 -0
  13. package/dist/public/js/services/organisms.js +5 -25
  14. package/dist/public/js/services/speech-reader.js +26 -0
  15. package/dist/public/lib/VENDORED.md +1 -0
  16. package/dist/public/lib/duckdb-wasm@1.32.0/duckdb-browser-eh.worker.js +14 -0
  17. package/dist/public/lib/duckdb-wasm@1.32.0/duckdb-browser.js +23 -0
  18. package/dist/public/lib/duckdb-wasm@1.32.0/duckdb-eh.wasm +0 -0
  19. package/dist/public/lib/duckdb-wasm@1.32.0/extensions/v1.4.3/wasm_eh/parquet.duckdb_extension.wasm +0 -0
  20. package/dist/public/lib/vendored-assets.json +19 -0
  21. package/dist/public/llms-full-template.txt +2706 -0
  22. package/dist/public/llms-index-template.txt +60 -0
  23. package/dist/public/robots.node.txt +64 -23
  24. package/dist/public/spa.html +9 -1
  25. package/dist/public/views/admin/organism-ownership-tab.js +124 -0
  26. package/dist/public/views/admin/owners-tab.js +15 -4
  27. package/dist/public/views/admin/usage-tab.calls.js +120 -0
  28. package/dist/public/views/admin/usage-tab.js +18 -4
  29. package/dist/public/views/admin.js +2 -0
  30. package/dist/public/views/chat/parts.js +257 -0
  31. package/dist/public/views/chat.js +327 -0
  32. package/dist/public/views/landing.js +24 -1
  33. package/dist/public/views/profile/agents/scope-model.js +320 -296
  34. package/dist/public/views/profile/landing-page.cards.js +1 -0
  35. package/dist/public/views/profile/organisms/home.js +3 -1
  36. package/dist/public/views/profile/organisms/members.js +29 -4
  37. package/dist/public/views/profile/usage-tab.js +204 -0
  38. package/dist/public/views/profile.js +2 -0
  39. package/dist/scripts/audit-mcp-schemas.js +41 -0
  40. package/dist/scripts/audit-mcp-schemas.js.map +1 -1
  41. package/dist/scripts/build-sdk-libs.d.ts.map +1 -1
  42. package/dist/scripts/build-sdk-libs.js +1 -0
  43. package/dist/scripts/build-sdk-libs.js.map +1 -1
  44. package/dist/scripts/check-ai-disclosure.js +11 -0
  45. package/dist/scripts/check-ai-disclosure.js.map +1 -1
  46. package/dist/scripts/check-commit-msg.d.ts +8 -0
  47. package/dist/scripts/check-commit-msg.d.ts.map +1 -0
  48. package/dist/scripts/check-commit-msg.js +118 -0
  49. package/dist/scripts/check-commit-msg.js.map +1 -0
  50. package/dist/scripts/check-denial-coverage.d.ts +29 -0
  51. package/dist/scripts/check-denial-coverage.d.ts.map +1 -0
  52. package/dist/scripts/check-denial-coverage.js +237 -0
  53. package/dist/scripts/check-denial-coverage.js.map +1 -0
  54. package/dist/scripts/check-ext-entrypoints.js +14 -2
  55. package/dist/scripts/check-ext-entrypoints.js.map +1 -1
  56. package/dist/scripts/check-liaison-surface.js +27 -2
  57. package/dist/scripts/check-liaison-surface.js.map +1 -1
  58. package/dist/scripts/check-locales.js +38 -0
  59. package/dist/scripts/check-locales.js.map +1 -1
  60. package/dist/scripts/check-outbound-fetch.d.ts.map +1 -1
  61. package/dist/scripts/check-outbound-fetch.js +16 -2
  62. package/dist/scripts/check-outbound-fetch.js.map +1 -1
  63. package/dist/scripts/check-route-scopes.d.ts.map +1 -1
  64. package/dist/scripts/check-route-scopes.js +33 -4
  65. package/dist/scripts/check-route-scopes.js.map +1 -1
  66. package/dist/scripts/check-shared-implementation.js +28 -11
  67. package/dist/scripts/check-shared-implementation.js.map +1 -1
  68. package/dist/scripts/check-sse-parity.js +14 -0
  69. package/dist/scripts/check-sse-parity.js.map +1 -1
  70. package/dist/scripts/check-trusted-keys.d.ts +90 -1
  71. package/dist/scripts/check-trusted-keys.d.ts.map +1 -1
  72. package/dist/scripts/check-trusted-keys.js +521 -52
  73. package/dist/scripts/check-trusted-keys.js.map +1 -1
  74. package/dist/scripts/indexnow.js +9 -7
  75. package/dist/scripts/indexnow.js.map +1 -1
  76. package/dist/src/auth/middleware.d.ts +69 -6
  77. package/dist/src/auth/middleware.d.ts.map +1 -1
  78. package/dist/src/auth/middleware.js +130 -28
  79. package/dist/src/auth/middleware.js.map +1 -1
  80. package/dist/src/cli/connect/mcp/tools/agent-tasks.d.ts +5 -0
  81. package/dist/src/cli/connect/mcp/tools/agent-tasks.d.ts.map +1 -1
  82. package/dist/src/cli/connect/mcp/tools/agent-tasks.js +20 -2
  83. package/dist/src/cli/connect/mcp/tools/agent-tasks.js.map +1 -1
  84. package/dist/src/cli/connect/mcp/tools/agent-telemetry.d.ts +7 -1
  85. package/dist/src/cli/connect/mcp/tools/agent-telemetry.d.ts.map +1 -1
  86. package/dist/src/cli/connect/mcp/tools/agent-telemetry.js +24 -0
  87. package/dist/src/cli/connect/mcp/tools/agent-telemetry.js.map +1 -1
  88. package/dist/src/cli/connect/mcp/tools/apps.d.ts.map +1 -1
  89. package/dist/src/cli/connect/mcp/tools/apps.js +88 -0
  90. package/dist/src/cli/connect/mcp/tools/apps.js.map +1 -1
  91. package/dist/src/cli/connect/mcp/tools/core.d.ts +7 -0
  92. package/dist/src/cli/connect/mcp/tools/core.d.ts.map +1 -1
  93. package/dist/src/cli/connect/mcp/tools/core.js +83 -4
  94. package/dist/src/cli/connect/mcp/tools/core.js.map +1 -1
  95. package/dist/src/cli/connect/mcp/tools/organisms.d.ts +2 -0
  96. package/dist/src/cli/connect/mcp/tools/organisms.d.ts.map +1 -1
  97. package/dist/src/cli/connect/mcp/tools/organisms.js +16 -0
  98. package/dist/src/cli/connect/mcp/tools/organisms.js.map +1 -1
  99. package/dist/src/cli/connect/onboarding-prompt.js +1 -1
  100. package/dist/src/cli/connect/skill-bundle.js +1 -1
  101. package/dist/src/cli/connect/tool-call-defs-agent.d.ts +1 -0
  102. package/dist/src/cli/connect/tool-call-defs-agent.d.ts.map +1 -1
  103. package/dist/src/cli/connect/tool-call-defs-agent.js +6 -0
  104. package/dist/src/cli/connect/tool-call-defs-agent.js.map +1 -1
  105. package/dist/src/cli/connect/tool-call-defs-app-draft-edit.d.ts +21 -0
  106. package/dist/src/cli/connect/tool-call-defs-app-draft-edit.d.ts.map +1 -0
  107. package/dist/src/cli/connect/tool-call-defs-app-draft-edit.js +137 -0
  108. package/dist/src/cli/connect/tool-call-defs-app-draft-edit.js.map +1 -0
  109. package/dist/src/cli/connect/tool-call-defs-core.d.ts +1 -0
  110. package/dist/src/cli/connect/tool-call-defs-core.d.ts.map +1 -1
  111. package/dist/src/cli/connect/tool-call-defs-core.js +30 -0
  112. package/dist/src/cli/connect/tool-call-defs-core.js.map +1 -1
  113. package/dist/src/cli/connect/tool-call.d.ts.map +1 -1
  114. package/dist/src/cli/connect/tool-call.js +2 -0
  115. package/dist/src/cli/connect/tool-call.js.map +1 -1
  116. package/dist/src/config-types-ai.d.ts +76 -0
  117. package/dist/src/config-types-ai.d.ts.map +1 -0
  118. package/dist/src/config-types-ai.js +15 -0
  119. package/dist/src/config-types-ai.js.map +1 -0
  120. package/dist/src/config-types.d.ts +11 -2
  121. package/dist/src/config-types.d.ts.map +1 -1
  122. package/dist/src/config.d.ts.map +1 -1
  123. package/dist/src/config.js +25 -4
  124. package/dist/src/config.js.map +1 -1
  125. package/dist/src/data/appdev-pitfalls.d.ts +1 -0
  126. package/dist/src/data/appdev-pitfalls.d.ts.map +1 -1
  127. package/dist/src/data/appdev-pitfalls.js +11 -0
  128. package/dist/src/data/appdev-pitfalls.js.map +1 -1
  129. package/dist/src/data/builtin-skills.d.ts.map +1 -1
  130. package/dist/src/data/builtin-skills.js +3 -2
  131. package/dist/src/data/builtin-skills.js.map +1 -1
  132. package/dist/src/data/digital-signage-package.js +1 -1
  133. package/dist/src/data/library-packs/sdk.d.ts.map +1 -1
  134. package/dist/src/data/library-packs/sdk.js +76 -0
  135. package/dist/src/data/library-packs/sdk.js.map +1 -1
  136. package/dist/src/data/library-packs/vendored.d.ts.map +1 -1
  137. package/dist/src/data/library-packs/vendored.js +81 -0
  138. package/dist/src/data/library-packs/vendored.js.map +1 -1
  139. package/dist/src/data/library-packs.d.ts +2 -2
  140. package/dist/src/data/library-packs.js +2 -2
  141. package/dist/src/data/public-pages.d.ts +13 -0
  142. package/dist/src/data/public-pages.d.ts.map +1 -1
  143. package/dist/src/data/public-pages.js +153 -113
  144. package/dist/src/data/public-pages.js.map +1 -1
  145. package/dist/src/generated/api-types.d.ts +2251 -102
  146. package/dist/src/generated/api-types.d.ts.map +1 -1
  147. package/dist/src/index-start.d.ts.map +1 -1
  148. package/dist/src/index-start.js +21 -1
  149. package/dist/src/index-start.js.map +1 -1
  150. package/dist/src/mcp/agent-tasks.d.ts +16 -0
  151. package/dist/src/mcp/agent-tasks.d.ts.map +1 -1
  152. package/dist/src/mcp/agent-tasks.js +84 -54
  153. package/dist/src/mcp/agent-tasks.js.map +1 -1
  154. package/dist/src/mcp/agent-telemetry.d.ts +6 -1
  155. package/dist/src/mcp/agent-telemetry.d.ts.map +1 -1
  156. package/dist/src/mcp/agent-telemetry.js +37 -1
  157. package/dist/src/mcp/agent-telemetry.js.map +1 -1
  158. package/dist/src/mcp/ai-image.d.ts +22 -0
  159. package/dist/src/mcp/ai-image.d.ts.map +1 -0
  160. package/dist/src/mcp/ai-image.js +60 -0
  161. package/dist/src/mcp/ai-image.js.map +1 -0
  162. package/dist/src/mcp/annotations.d.ts +5 -0
  163. package/dist/src/mcp/annotations.d.ts.map +1 -1
  164. package/dist/src/mcp/annotations.js +23 -0
  165. package/dist/src/mcp/annotations.js.map +1 -1
  166. package/dist/src/mcp/apps-draft-edit.d.ts +28 -0
  167. package/dist/src/mcp/apps-draft-edit.d.ts.map +1 -0
  168. package/dist/src/mcp/apps-draft-edit.js +164 -0
  169. package/dist/src/mcp/apps-draft-edit.js.map +1 -0
  170. package/dist/src/mcp/apps-screenshot.d.ts +26 -0
  171. package/dist/src/mcp/apps-screenshot.d.ts.map +1 -0
  172. package/dist/src/mcp/apps-screenshot.js +39 -0
  173. package/dist/src/mcp/apps-screenshot.js.map +1 -0
  174. package/dist/src/mcp/catalog/definitions/agent-messaging.d.ts.map +1 -1
  175. package/dist/src/mcp/catalog/definitions/agent-messaging.js +18 -0
  176. package/dist/src/mcp/catalog/definitions/agent-messaging.js.map +1 -1
  177. package/dist/src/mcp/catalog/definitions/discovery-work-boards.d.ts +1 -0
  178. package/dist/src/mcp/catalog/definitions/discovery-work-boards.d.ts.map +1 -1
  179. package/dist/src/mcp/catalog/definitions/discovery-work-boards.js +59 -0
  180. package/dist/src/mcp/catalog/definitions/discovery-work-boards.js.map +1 -1
  181. package/dist/src/mcp/catalog/definitions/organisms-workspaces-apps.d.ts +3 -0
  182. package/dist/src/mcp/catalog/definitions/organisms-workspaces-apps.d.ts.map +1 -1
  183. package/dist/src/mcp/catalog/definitions/organisms-workspaces-apps.js +96 -2
  184. package/dist/src/mcp/catalog/definitions/organisms-workspaces-apps.js.map +1 -1
  185. package/dist/src/mcp/catalog/definitions/schedules-tasks-memory.d.ts +2 -0
  186. package/dist/src/mcp/catalog/definitions/schedules-tasks-memory.d.ts.map +1 -1
  187. package/dist/src/mcp/catalog/definitions/schedules-tasks-memory.js +7 -3
  188. package/dist/src/mcp/catalog/definitions/schedules-tasks-memory.js.map +1 -1
  189. package/dist/src/mcp/catalog/scopes.d.ts.map +1 -1
  190. package/dist/src/mcp/catalog/scopes.js +34 -1
  191. package/dist/src/mcp/catalog/scopes.js.map +1 -1
  192. package/dist/src/mcp/catalog/surfaces.d.ts.map +1 -1
  193. package/dist/src/mcp/catalog/surfaces.js +26 -7
  194. package/dist/src/mcp/catalog/surfaces.js.map +1 -1
  195. package/dist/src/mcp/core-admin.d.ts +7 -3
  196. package/dist/src/mcp/core-admin.d.ts.map +1 -1
  197. package/dist/src/mcp/core-admin.js +60 -3
  198. package/dist/src/mcp/core-admin.js.map +1 -1
  199. package/dist/src/mcp/core-datapackage.d.ts +32 -0
  200. package/dist/src/mcp/core-datapackage.d.ts.map +1 -0
  201. package/dist/src/mcp/core-datapackage.js +188 -0
  202. package/dist/src/mcp/core-datapackage.js.map +1 -0
  203. package/dist/src/mcp/core-storage.d.ts +7 -3
  204. package/dist/src/mcp/core-storage.d.ts.map +1 -1
  205. package/dist/src/mcp/core-storage.js +27 -4
  206. package/dist/src/mcp/core-storage.js.map +1 -1
  207. package/dist/src/mcp/core.d.ts.map +1 -1
  208. package/dist/src/mcp/core.js +3 -0
  209. package/dist/src/mcp/core.js.map +1 -1
  210. package/dist/src/mcp/extensions.d.ts.map +1 -1
  211. package/dist/src/mcp/extensions.js +11 -1
  212. package/dist/src/mcp/extensions.js.map +1 -1
  213. package/dist/src/mcp/index.d.ts +9 -0
  214. package/dist/src/mcp/index.d.ts.map +1 -1
  215. package/dist/src/mcp/index.js +43 -2
  216. package/dist/src/mcp/index.js.map +1 -1
  217. package/dist/src/mcp/organisms-email-invites.d.ts.map +1 -1
  218. package/dist/src/mcp/organisms-email-invites.js +2 -1
  219. package/dist/src/mcp/organisms-email-invites.js.map +1 -1
  220. package/dist/src/mcp/organisms-name-invites.d.ts.map +1 -1
  221. package/dist/src/mcp/organisms-name-invites.js +40 -1
  222. package/dist/src/mcp/organisms-name-invites.js.map +1 -1
  223. package/dist/src/mcp/organisms.d.ts.map +1 -1
  224. package/dist/src/mcp/organisms.js +6 -1
  225. package/dist/src/mcp/organisms.js.map +1 -1
  226. package/dist/src/mcp/tool-usage-wrap.d.ts +9 -0
  227. package/dist/src/mcp/tool-usage-wrap.d.ts.map +1 -0
  228. package/dist/src/mcp/tool-usage-wrap.js +87 -0
  229. package/dist/src/mcp/tool-usage-wrap.js.map +1 -0
  230. package/dist/src/mcp/workspaces.d.ts.map +1 -1
  231. package/dist/src/mcp/workspaces.js +9 -0
  232. package/dist/src/mcp/workspaces.js.map +1 -1
  233. package/dist/src/middleware/idempotency.d.ts +6 -0
  234. package/dist/src/middleware/idempotency.d.ts.map +1 -1
  235. package/dist/src/middleware/idempotency.js +23 -2
  236. package/dist/src/middleware/idempotency.js.map +1 -1
  237. package/dist/src/models/agent-task-schemas.d.ts.map +1 -1
  238. package/dist/src/models/agent-task-schemas.js +12 -1
  239. package/dist/src/models/agent-task-schemas.js.map +1 -1
  240. package/dist/src/models/webhook-schemas.d.ts +2 -2
  241. package/dist/src/models/workflow-schemas.d.ts +178 -1
  242. package/dist/src/models/workflow-schemas.d.ts.map +1 -1
  243. package/dist/src/models/workflow-schemas.js +75 -0
  244. package/dist/src/models/workflow-schemas.js.map +1 -1
  245. package/dist/src/routes/admin-extensions.d.ts +4 -0
  246. package/dist/src/routes/admin-extensions.d.ts.map +1 -1
  247. package/dist/src/routes/admin-extensions.js +135 -142
  248. package/dist/src/routes/admin-extensions.js.map +1 -1
  249. package/dist/src/routes/admin-monitoring.d.ts +2 -0
  250. package/dist/src/routes/admin-monitoring.d.ts.map +1 -1
  251. package/dist/src/routes/admin-monitoring.js +32 -0
  252. package/dist/src/routes/admin-monitoring.js.map +1 -1
  253. package/dist/src/routes/admin-organisms.d.ts +28 -0
  254. package/dist/src/routes/admin-organisms.d.ts.map +1 -0
  255. package/dist/src/routes/admin-organisms.js +99 -0
  256. package/dist/src/routes/admin-organisms.js.map +1 -0
  257. package/dist/src/routes/admin-usage.d.ts +33 -0
  258. package/dist/src/routes/admin-usage.d.ts.map +1 -0
  259. package/dist/src/routes/admin-usage.js +198 -0
  260. package/dist/src/routes/admin-usage.js.map +1 -0
  261. package/dist/src/routes/agent-conventions.d.ts.map +1 -1
  262. package/dist/src/routes/agent-conventions.js +4 -2
  263. package/dist/src/routes/agent-conventions.js.map +1 -1
  264. package/dist/src/routes/agent-docs.d.ts +4 -4
  265. package/dist/src/routes/agent-docs.js +145 -145
  266. package/dist/src/routes/agent-docs.js.map +1 -1
  267. package/dist/src/routes/agent-messages.d.ts +6 -0
  268. package/dist/src/routes/agent-messages.d.ts.map +1 -1
  269. package/dist/src/routes/agent-messages.js +23 -1
  270. package/dist/src/routes/agent-messages.js.map +1 -1
  271. package/dist/src/routes/agent-tasks/completion.d.ts +5 -0
  272. package/dist/src/routes/agent-tasks/completion.d.ts.map +1 -1
  273. package/dist/src/routes/agent-tasks/completion.js +35 -54
  274. package/dist/src/routes/agent-tasks/completion.js.map +1 -1
  275. package/dist/src/routes/agent-tasks/create-read.d.ts.map +1 -1
  276. package/dist/src/routes/agent-tasks/create-read.js +8 -1
  277. package/dist/src/routes/agent-tasks/create-read.js.map +1 -1
  278. package/dist/src/routes/agent-tasks/lifecycle.d.ts +4 -1
  279. package/dist/src/routes/agent-tasks/lifecycle.d.ts.map +1 -1
  280. package/dist/src/routes/agent-tasks/lifecycle.js +80 -2
  281. package/dist/src/routes/agent-tasks/lifecycle.js.map +1 -1
  282. package/dist/src/routes/agents/device-auth.d.ts.map +1 -1
  283. package/dist/src/routes/agents/device-auth.js +27 -4
  284. package/dist/src/routes/agents/device-auth.js.map +1 -1
  285. package/dist/src/routes/ai.d.ts +5 -0
  286. package/dist/src/routes/ai.d.ts.map +1 -1
  287. package/dist/src/routes/ai.js +51 -1
  288. package/dist/src/routes/ai.js.map +1 -1
  289. package/dist/src/routes/app-grants.d.ts.map +1 -1
  290. package/dist/src/routes/app-grants.js +5 -0
  291. package/dist/src/routes/app-grants.js.map +1 -1
  292. package/dist/src/routes/apps/drafts.d.ts +6 -0
  293. package/dist/src/routes/apps/drafts.d.ts.map +1 -1
  294. package/dist/src/routes/apps/drafts.js +133 -1
  295. package/dist/src/routes/apps/drafts.js.map +1 -1
  296. package/dist/src/routes/apps/read.d.ts +4 -0
  297. package/dist/src/routes/apps/read.d.ts.map +1 -1
  298. package/dist/src/routes/apps/read.js +47 -2
  299. package/dist/src/routes/apps/read.js.map +1 -1
  300. package/dist/src/routes/auth-otk.d.ts +28 -0
  301. package/dist/src/routes/auth-otk.d.ts.map +1 -0
  302. package/dist/src/routes/auth-otk.js +190 -0
  303. package/dist/src/routes/auth-otk.js.map +1 -0
  304. package/dist/src/routes/auth.d.ts +17 -0
  305. package/dist/src/routes/auth.d.ts.map +1 -1
  306. package/dist/src/routes/auth.js +44 -153
  307. package/dist/src/routes/auth.js.map +1 -1
  308. package/dist/src/routes/bootstrap.d.ts +6 -0
  309. package/dist/src/routes/bootstrap.d.ts.map +1 -1
  310. package/dist/src/routes/bootstrap.js +47 -20
  311. package/dist/src/routes/bootstrap.js.map +1 -1
  312. package/dist/src/routes/capabilities.d.ts +17 -0
  313. package/dist/src/routes/capabilities.d.ts.map +1 -1
  314. package/dist/src/routes/capabilities.js +187 -4
  315. package/dist/src/routes/capabilities.js.map +1 -1
  316. package/dist/src/routes/chat.d.ts +23 -0
  317. package/dist/src/routes/chat.d.ts.map +1 -0
  318. package/dist/src/routes/chat.js +165 -0
  319. package/dist/src/routes/chat.js.map +1 -0
  320. package/dist/src/routes/commerce.js +4 -4
  321. package/dist/src/routes/commerce.js.map +1 -1
  322. package/dist/src/routes/datapackages.d.ts +35 -0
  323. package/dist/src/routes/datapackages.d.ts.map +1 -0
  324. package/dist/src/routes/datapackages.js +217 -0
  325. package/dist/src/routes/datapackages.js.map +1 -0
  326. package/dist/src/routes/disputes.d.ts +27 -0
  327. package/dist/src/routes/disputes.d.ts.map +1 -1
  328. package/dist/src/routes/disputes.js +74 -79
  329. package/dist/src/routes/disputes.js.map +1 -1
  330. package/dist/src/routes/ecosystem-apps-advisories.d.ts +16 -0
  331. package/dist/src/routes/ecosystem-apps-advisories.d.ts.map +1 -0
  332. package/dist/src/routes/ecosystem-apps-advisories.js +104 -0
  333. package/dist/src/routes/ecosystem-apps-advisories.js.map +1 -0
  334. package/dist/src/routes/ecosystem-apps.d.ts +6 -0
  335. package/dist/src/routes/ecosystem-apps.d.ts.map +1 -1
  336. package/dist/src/routes/ecosystem-apps.js +31 -99
  337. package/dist/src/routes/ecosystem-apps.js.map +1 -1
  338. package/dist/src/routes/extensions/actions.d.ts.map +1 -1
  339. package/dist/src/routes/extensions/actions.js +29 -1
  340. package/dist/src/routes/extensions/actions.js.map +1 -1
  341. package/dist/src/routes/federation-sync/messaging.d.ts +6 -0
  342. package/dist/src/routes/federation-sync/messaging.d.ts.map +1 -1
  343. package/dist/src/routes/federation-sync/messaging.js +22 -1
  344. package/dist/src/routes/federation-sync/messaging.js.map +1 -1
  345. package/dist/src/routes/federation-sync/routing.d.ts.map +1 -1
  346. package/dist/src/routes/federation-sync/routing.js +12 -3
  347. package/dist/src/routes/federation-sync/routing.js.map +1 -1
  348. package/dist/src/routes/glossary.js +1 -1
  349. package/dist/src/routes/glossary.js.map +1 -1
  350. package/dist/src/routes/home/track.d.ts +5 -1
  351. package/dist/src/routes/home/track.d.ts.map +1 -1
  352. package/dist/src/routes/home/track.js +20 -6
  353. package/dist/src/routes/home/track.js.map +1 -1
  354. package/dist/src/routes/instances/install.d.ts +7 -0
  355. package/dist/src/routes/instances/install.d.ts.map +1 -1
  356. package/dist/src/routes/instances/install.js +31 -24
  357. package/dist/src/routes/instances/install.js.map +1 -1
  358. package/dist/src/routes/library-packs.d.ts +7 -0
  359. package/dist/src/routes/library-packs.d.ts.map +1 -1
  360. package/dist/src/routes/library-packs.js +32 -8
  361. package/dist/src/routes/library-packs.js.map +1 -1
  362. package/dist/src/routes/libs.js +1 -1
  363. package/dist/src/routes/libs.js.map +1 -1
  364. package/dist/src/routes/markdown-mirrors.js +1 -1
  365. package/dist/src/routes/markdown-mirrors.js.map +1 -1
  366. package/dist/src/routes/messages.d.ts +6 -0
  367. package/dist/src/routes/messages.d.ts.map +1 -1
  368. package/dist/src/routes/messages.js +15 -3
  369. package/dist/src/routes/messages.js.map +1 -1
  370. package/dist/src/routes/odata.d.ts +36 -0
  371. package/dist/src/routes/odata.d.ts.map +1 -0
  372. package/dist/src/routes/odata.js +143 -0
  373. package/dist/src/routes/odata.js.map +1 -0
  374. package/dist/src/routes/openrouter.d.ts +4 -0
  375. package/dist/src/routes/openrouter.d.ts.map +1 -1
  376. package/dist/src/routes/openrouter.js +10 -1
  377. package/dist/src/routes/openrouter.js.map +1 -1
  378. package/dist/src/routes/organisms/crud.d.ts +4 -0
  379. package/dist/src/routes/organisms/crud.d.ts.map +1 -1
  380. package/dist/src/routes/organisms/crud.js +25 -7
  381. package/dist/src/routes/organisms/crud.js.map +1 -1
  382. package/dist/src/routes/organisms/gates.d.ts.map +1 -1
  383. package/dist/src/routes/organisms/gates.js +19 -2
  384. package/dist/src/routes/organisms/gates.js.map +1 -1
  385. package/dist/src/routes/organisms/membership.d.ts +4 -0
  386. package/dist/src/routes/organisms/membership.d.ts.map +1 -1
  387. package/dist/src/routes/organisms/membership.js +88 -36
  388. package/dist/src/routes/organisms/membership.js.map +1 -1
  389. package/dist/src/routes/organisms/shared.d.ts.map +1 -1
  390. package/dist/src/routes/organisms/shared.js +2 -1
  391. package/dist/src/routes/organisms/shared.js.map +1 -1
  392. package/dist/src/routes/organisms/workspace-access.d.ts +5 -0
  393. package/dist/src/routes/organisms/workspace-access.d.ts.map +1 -1
  394. package/dist/src/routes/organisms/workspace-access.js +41 -2
  395. package/dist/src/routes/organisms/workspace-access.js.map +1 -1
  396. package/dist/src/routes/organisms/workspace-ops.d.ts +2 -0
  397. package/dist/src/routes/organisms/workspace-ops.d.ts.map +1 -1
  398. package/dist/src/routes/organisms/workspace-ops.js +10 -6
  399. package/dist/src/routes/organisms/workspace-ops.js.map +1 -1
  400. package/dist/src/routes/organisms/workspace-read.d.ts +3 -0
  401. package/dist/src/routes/organisms/workspace-read.d.ts.map +1 -1
  402. package/dist/src/routes/organisms/workspace-read.js +13 -7
  403. package/dist/src/routes/organisms/workspace-read.js.map +1 -1
  404. package/dist/src/routes/portal.d.ts +1 -0
  405. package/dist/src/routes/portal.d.ts.map +1 -1
  406. package/dist/src/routes/portal.js +13 -0
  407. package/dist/src/routes/portal.js.map +1 -1
  408. package/dist/src/routes/schedules.d.ts +4 -0
  409. package/dist/src/routes/schedules.d.ts.map +1 -1
  410. package/dist/src/routes/schedules.js +9 -1
  411. package/dist/src/routes/schedules.js.map +1 -1
  412. package/dist/src/routes/storage-files.d.ts +23 -0
  413. package/dist/src/routes/storage-files.d.ts.map +1 -1
  414. package/dist/src/routes/storage-files.js +103 -82
  415. package/dist/src/routes/storage-files.js.map +1 -1
  416. package/dist/src/routes/subdomains.d.ts +9 -1
  417. package/dist/src/routes/subdomains.d.ts.map +1 -1
  418. package/dist/src/routes/subdomains.js +55 -1
  419. package/dist/src/routes/subdomains.js.map +1 -1
  420. package/dist/src/routes/usage-reports.d.ts +31 -0
  421. package/dist/src/routes/usage-reports.d.ts.map +1 -0
  422. package/dist/src/routes/usage-reports.js +107 -0
  423. package/dist/src/routes/usage-reports.js.map +1 -0
  424. package/dist/src/routes/validate.d.ts.map +1 -1
  425. package/dist/src/routes/validate.js +1 -0
  426. package/dist/src/routes/validate.js.map +1 -1
  427. package/dist/src/routes/workflows.d.ts.map +1 -1
  428. package/dist/src/routes/workflows.js +9 -1
  429. package/dist/src/routes/workflows.js.map +1 -1
  430. package/dist/src/server-bootstrap/routes-loader.d.ts +2 -0
  431. package/dist/src/server-bootstrap/routes-loader.d.ts.map +1 -1
  432. package/dist/src/server-bootstrap/routes-loader.js +32 -2
  433. package/dist/src/server-bootstrap/routes-loader.js.map +1 -1
  434. package/dist/src/server-bootstrap/service-init.d.ts.map +1 -1
  435. package/dist/src/server-bootstrap/service-init.js +12 -7
  436. package/dist/src/server-bootstrap/service-init.js.map +1 -1
  437. package/dist/src/server-bootstrap/static-files.d.ts.map +1 -1
  438. package/dist/src/server-bootstrap/static-files.js +44 -10
  439. package/dist/src/server-bootstrap/static-files.js.map +1 -1
  440. package/dist/src/services/agent-task-fanout.d.ts +61 -0
  441. package/dist/src/services/agent-task-fanout.d.ts.map +1 -1
  442. package/dist/src/services/agent-task-fanout.js +114 -2
  443. package/dist/src/services/agent-task-fanout.js.map +1 -1
  444. package/dist/src/services/agent-task-write.d.ts.map +1 -1
  445. package/dist/src/services/agent-task-write.js +6 -0
  446. package/dist/src/services/agent-task-write.js.map +1 -1
  447. package/dist/src/services/ai-allowance.d.ts +82 -0
  448. package/dist/src/services/ai-allowance.d.ts.map +1 -0
  449. package/dist/src/services/ai-allowance.js +117 -0
  450. package/dist/src/services/ai-allowance.js.map +1 -0
  451. package/dist/src/services/ai-completion.d.ts +39 -0
  452. package/dist/src/services/ai-completion.d.ts.map +1 -1
  453. package/dist/src/services/ai-completion.js +77 -10
  454. package/dist/src/services/ai-completion.js.map +1 -1
  455. package/dist/src/services/ai-image.d.ts +70 -0
  456. package/dist/src/services/ai-image.d.ts.map +1 -0
  457. package/dist/src/services/ai-image.js +104 -0
  458. package/dist/src/services/ai-image.js.map +1 -0
  459. package/dist/src/services/ai-model-defaults.d.ts +45 -0
  460. package/dist/src/services/ai-model-defaults.d.ts.map +1 -0
  461. package/dist/src/services/ai-model-defaults.js +42 -0
  462. package/dist/src/services/ai-model-defaults.js.map +1 -0
  463. package/dist/src/services/ai-tool-setup.d.ts +5 -1
  464. package/dist/src/services/ai-tool-setup.d.ts.map +1 -1
  465. package/dist/src/services/ai-tool-setup.js +36 -0
  466. package/dist/src/services/ai-tool-setup.js.map +1 -1
  467. package/dist/src/services/ai-transcription.d.ts +5 -0
  468. package/dist/src/services/ai-transcription.d.ts.map +1 -1
  469. package/dist/src/services/ai-transcription.js +10 -2
  470. package/dist/src/services/ai-transcription.js.map +1 -1
  471. package/dist/src/services/ai-usage-admin.d.ts +19 -8
  472. package/dist/src/services/ai-usage-admin.d.ts.map +1 -1
  473. package/dist/src/services/ai-usage-admin.js +30 -35
  474. package/dist/src/services/ai-usage-admin.js.map +1 -1
  475. package/dist/src/services/app-agent-surfaces.js +4 -4
  476. package/dist/src/services/app-agent-surfaces.js.map +1 -1
  477. package/dist/src/services/app-artifact-lint.d.ts +4 -0
  478. package/dist/src/services/app-artifact-lint.d.ts.map +1 -1
  479. package/dist/src/services/app-artifact-lint.js +49 -0
  480. package/dist/src/services/app-artifact-lint.js.map +1 -1
  481. package/dist/src/services/app-draft-edit.d.ts +144 -0
  482. package/dist/src/services/app-draft-edit.d.ts.map +1 -0
  483. package/dist/src/services/app-draft-edit.js +203 -0
  484. package/dist/src/services/app-draft-edit.js.map +1 -0
  485. package/dist/src/services/app-spec-gate.d.ts +4 -0
  486. package/dist/src/services/app-spec-gate.d.ts.map +1 -1
  487. package/dist/src/services/app-spec-gate.js +16 -1
  488. package/dist/src/services/app-spec-gate.js.map +1 -1
  489. package/dist/src/services/attachment-duplication.d.ts +4 -0
  490. package/dist/src/services/attachment-duplication.d.ts.map +1 -1
  491. package/dist/src/services/attachment-duplication.js +15 -0
  492. package/dist/src/services/attachment-duplication.js.map +1 -1
  493. package/dist/src/services/auth-md.js +2 -2
  494. package/dist/src/services/auth-md.js.map +1 -1
  495. package/dist/src/services/board-write.d.ts +11 -3
  496. package/dist/src/services/board-write.d.ts.map +1 -1
  497. package/dist/src/services/board-write.js +24 -3
  498. package/dist/src/services/board-write.js.map +1 -1
  499. package/dist/src/services/capability-record.d.ts.map +1 -1
  500. package/dist/src/services/capability-record.js +22 -9
  501. package/dist/src/services/capability-record.js.map +1 -1
  502. package/dist/src/services/chat-agent.d.ts +36 -0
  503. package/dist/src/services/chat-agent.d.ts.map +1 -0
  504. package/dist/src/services/chat-agent.js +123 -0
  505. package/dist/src/services/chat-agent.js.map +1 -0
  506. package/dist/src/services/chat-session.d.ts +58 -0
  507. package/dist/src/services/chat-session.d.ts.map +1 -0
  508. package/dist/src/services/chat-session.js +151 -0
  509. package/dist/src/services/chat-session.js.map +1 -0
  510. package/dist/src/services/chat-threads.d.ts +61 -0
  511. package/dist/src/services/chat-threads.d.ts.map +1 -0
  512. package/dist/src/services/chat-threads.js +137 -0
  513. package/dist/src/services/chat-threads.js.map +1 -0
  514. package/dist/src/services/config-schema.d.ts.map +1 -1
  515. package/dist/src/services/config-schema.js +2 -1
  516. package/dist/src/services/config-schema.js.map +1 -1
  517. package/dist/src/services/core-jobs.d.ts +2 -0
  518. package/dist/src/services/core-jobs.d.ts.map +1 -1
  519. package/dist/src/services/core-jobs.js +11 -0
  520. package/dist/src/services/core-jobs.js.map +1 -1
  521. package/dist/src/services/datapackage/contract.d.ts +198 -0
  522. package/dist/src/services/datapackage/contract.d.ts.map +1 -0
  523. package/dist/src/services/datapackage/contract.js +140 -0
  524. package/dist/src/services/datapackage/contract.js.map +1 -0
  525. package/dist/src/services/datapackage/ext-capability.d.ts +85 -0
  526. package/dist/src/services/datapackage/ext-capability.d.ts.map +1 -0
  527. package/dist/src/services/datapackage/ext-capability.js +72 -0
  528. package/dist/src/services/datapackage/ext-capability.js.map +1 -0
  529. package/dist/src/services/datapackage/odata.d.ts +92 -0
  530. package/dist/src/services/datapackage/odata.d.ts.map +1 -0
  531. package/dist/src/services/datapackage/odata.js +256 -0
  532. package/dist/src/services/datapackage/odata.js.map +1 -0
  533. package/dist/src/services/datapackage/odps.d.ts +24 -0
  534. package/dist/src/services/datapackage/odps.d.ts.map +1 -0
  535. package/dist/src/services/datapackage/odps.js +183 -0
  536. package/dist/src/services/datapackage/odps.js.map +1 -0
  537. package/dist/src/services/datapackage/store.d.ts +143 -0
  538. package/dist/src/services/datapackage/store.d.ts.map +1 -0
  539. package/dist/src/services/datapackage/store.js +533 -0
  540. package/dist/src/services/datapackage/store.js.map +1 -0
  541. package/dist/src/services/datapackage/table.d.ts +67 -0
  542. package/dist/src/services/datapackage/table.d.ts.map +1 -0
  543. package/dist/src/services/datapackage/table.js +0 -0
  544. package/dist/src/services/datapackage/table.js.map +1 -0
  545. package/dist/src/services/extension-ctx.d.ts +1 -0
  546. package/dist/src/services/extension-ctx.d.ts.map +1 -1
  547. package/dist/src/services/extension-ctx.js +31 -6
  548. package/dist/src/services/extension-ctx.js.map +1 -1
  549. package/dist/src/services/extension-files.d.ts +20 -0
  550. package/dist/src/services/extension-files.d.ts.map +1 -1
  551. package/dist/src/services/extension-files.js +9 -2
  552. package/dist/src/services/extension-files.js.map +1 -1
  553. package/dist/src/services/extension-lifecycle.d.ts +3 -0
  554. package/dist/src/services/extension-lifecycle.d.ts.map +1 -1
  555. package/dist/src/services/extension-lifecycle.js +2 -26
  556. package/dist/src/services/extension-lifecycle.js.map +1 -1
  557. package/dist/src/services/extension-runtime.d.ts +28 -2
  558. package/dist/src/services/extension-runtime.d.ts.map +1 -1
  559. package/dist/src/services/extension-runtime.js +22 -0
  560. package/dist/src/services/extension-runtime.js.map +1 -1
  561. package/dist/src/services/extension-schedules.d.ts +90 -0
  562. package/dist/src/services/extension-schedules.d.ts.map +1 -0
  563. package/dist/src/services/extension-schedules.js +123 -0
  564. package/dist/src/services/extension-schedules.js.map +1 -0
  565. package/dist/src/services/extension-system-run.d.ts +91 -0
  566. package/dist/src/services/extension-system-run.d.ts.map +1 -0
  567. package/dist/src/services/extension-system-run.js +100 -0
  568. package/dist/src/services/extension-system-run.js.map +1 -0
  569. package/dist/src/services/extension-upsert.d.ts +2 -0
  570. package/dist/src/services/extension-upsert.d.ts.map +1 -1
  571. package/dist/src/services/extension-upsert.js +6 -24
  572. package/dist/src/services/extension-upsert.js.map +1 -1
  573. package/dist/src/services/goose-acp.d.ts +84 -0
  574. package/dist/src/services/goose-acp.d.ts.map +1 -0
  575. package/dist/src/services/goose-acp.js +304 -0
  576. package/dist/src/services/goose-acp.js.map +1 -0
  577. package/dist/src/services/invitations.d.ts +0 -20
  578. package/dist/src/services/invitations.d.ts.map +1 -1
  579. package/dist/src/services/invitations.js +30 -0
  580. package/dist/src/services/invitations.js.map +1 -1
  581. package/dist/src/services/job-seeding.d.ts +1 -0
  582. package/dist/src/services/job-seeding.d.ts.map +1 -1
  583. package/dist/src/services/job-seeding.js +6 -0
  584. package/dist/src/services/job-seeding.js.map +1 -1
  585. package/dist/src/services/ledger-admin.d.ts +18 -4
  586. package/dist/src/services/ledger-admin.d.ts.map +1 -1
  587. package/dist/src/services/ledger-admin.js +47 -33
  588. package/dist/src/services/ledger-admin.js.map +1 -1
  589. package/dist/src/services/markdown-negotiation.js +1 -1
  590. package/dist/src/services/markdown-negotiation.js.map +1 -1
  591. package/dist/src/services/message-broadcast.d.ts.map +1 -1
  592. package/dist/src/services/message-broadcast.js +29 -1
  593. package/dist/src/services/message-broadcast.js.map +1 -1
  594. package/dist/src/services/metered-access.d.ts +9 -2
  595. package/dist/src/services/metered-access.d.ts.map +1 -1
  596. package/dist/src/services/metered-access.js +92 -12
  597. package/dist/src/services/metered-access.js.map +1 -1
  598. package/dist/src/services/openrouter.d.ts +20 -1
  599. package/dist/src/services/openrouter.d.ts.map +1 -1
  600. package/dist/src/services/openrouter.js +66 -0
  601. package/dist/src/services/openrouter.js.map +1 -1
  602. package/dist/src/services/organism-import.d.ts.map +1 -1
  603. package/dist/src/services/organism-import.js +4 -1
  604. package/dist/src/services/organism-import.js.map +1 -1
  605. package/dist/src/services/organism-lifecycle.d.ts.map +1 -1
  606. package/dist/src/services/organism-lifecycle.js +5 -1
  607. package/dist/src/services/organism-lifecycle.js.map +1 -1
  608. package/dist/src/services/organism-ownership.d.ts +56 -0
  609. package/dist/src/services/organism-ownership.d.ts.map +1 -0
  610. package/dist/src/services/organism-ownership.js +174 -0
  611. package/dist/src/services/organism-ownership.js.map +1 -0
  612. package/dist/src/services/organism-privacy.d.ts.map +1 -1
  613. package/dist/src/services/organism-privacy.js +2 -1
  614. package/dist/src/services/organism-privacy.js.map +1 -1
  615. package/dist/src/services/prompt-defaults/tiers-core.js +4 -4
  616. package/dist/src/services/scheduler-extension-job.d.ts +29 -6
  617. package/dist/src/services/scheduler-extension-job.d.ts.map +1 -1
  618. package/dist/src/services/scheduler-extension-job.js +29 -75
  619. package/dist/src/services/scheduler-extension-job.js.map +1 -1
  620. package/dist/src/services/scope-vocabulary-migration.d.ts +54 -1
  621. package/dist/src/services/scope-vocabulary-migration.d.ts.map +1 -1
  622. package/dist/src/services/scope-vocabulary-migration.js +101 -6
  623. package/dist/src/services/scope-vocabulary-migration.js.map +1 -1
  624. package/dist/src/services/screenshot-capture.d.ts +40 -1
  625. package/dist/src/services/screenshot-capture.d.ts.map +1 -1
  626. package/dist/src/services/screenshot-capture.js +142 -60
  627. package/dist/src/services/screenshot-capture.js.map +1 -1
  628. package/dist/src/services/skill-bundle/generator.js +1 -1
  629. package/dist/src/services/skill-bundle/generic-adapter.js +1 -1
  630. package/dist/src/services/skill-bundle/hermes-adapter.js +1 -1
  631. package/dist/src/services/storage-file-write.d.ts +36 -1
  632. package/dist/src/services/storage-file-write.d.ts.map +1 -1
  633. package/dist/src/services/storage-file-write.js +49 -3
  634. package/dist/src/services/storage-file-write.js.map +1 -1
  635. package/dist/src/services/task-outcome.d.ts +53 -0
  636. package/dist/src/services/task-outcome.d.ts.map +1 -0
  637. package/dist/src/services/task-outcome.js +28 -0
  638. package/dist/src/services/task-outcome.js.map +1 -0
  639. package/dist/src/services/usage/archive-job.d.ts +25 -0
  640. package/dist/src/services/usage/archive-job.d.ts.map +1 -0
  641. package/dist/src/services/usage/archive-job.js +36 -0
  642. package/dist/src/services/usage/archive-job.js.map +1 -0
  643. package/dist/src/services/usage/record-app-open.d.ts +8 -0
  644. package/dist/src/services/usage/record-app-open.d.ts.map +1 -0
  645. package/dist/src/services/usage/record-app-open.js +52 -0
  646. package/dist/src/services/usage/record-app-open.js.map +1 -0
  647. package/dist/src/services/usage/rollup-cuts.d.ts +44 -0
  648. package/dist/src/services/usage/rollup-cuts.d.ts.map +1 -0
  649. package/dist/src/services/usage/rollup-cuts.js +81 -0
  650. package/dist/src/services/usage/rollup-cuts.js.map +1 -0
  651. package/dist/src/services/usage/rollup-engine.d.ts +71 -0
  652. package/dist/src/services/usage/rollup-engine.d.ts.map +1 -0
  653. package/dist/src/services/usage/rollup-engine.js +237 -0
  654. package/dist/src/services/usage/rollup-engine.js.map +1 -0
  655. package/dist/src/services/usage/usage-buffer.d.ts +25 -0
  656. package/dist/src/services/usage/usage-buffer.d.ts.map +1 -0
  657. package/dist/src/services/usage/usage-buffer.js +146 -0
  658. package/dist/src/services/usage/usage-buffer.js.map +1 -0
  659. package/dist/src/services/usage/usage-read.d.ts +115 -0
  660. package/dist/src/services/usage/usage-read.d.ts.map +1 -0
  661. package/dist/src/services/usage/usage-read.js +246 -0
  662. package/dist/src/services/usage/usage-read.js.map +1 -0
  663. package/dist/src/services/usage-metering.d.ts +5 -0
  664. package/dist/src/services/usage-metering.d.ts.map +1 -1
  665. package/dist/src/services/usage-metering.js +7 -0
  666. package/dist/src/services/usage-metering.js.map +1 -1
  667. package/dist/src/services/workflow/engine-human.d.ts +15 -0
  668. package/dist/src/services/workflow/engine-human.d.ts.map +1 -1
  669. package/dist/src/services/workflow/engine-human.js +10 -1
  670. package/dist/src/services/workflow/engine-human.js.map +1 -1
  671. package/dist/src/services/workflow/engine-steps.d.ts +48 -3
  672. package/dist/src/services/workflow/engine-steps.d.ts.map +1 -1
  673. package/dist/src/services/workflow/engine-steps.js +361 -0
  674. package/dist/src/services/workflow/engine-steps.js.map +1 -1
  675. package/dist/src/services/workflow/engine.d.ts +1 -0
  676. package/dist/src/services/workflow/engine.d.ts.map +1 -1
  677. package/dist/src/services/workflow/engine.js +2 -1
  678. package/dist/src/services/workflow/engine.js.map +1 -1
  679. package/dist/src/services/workflow/store.d.ts.map +1 -1
  680. package/dist/src/services/workflow/store.js +60 -4
  681. package/dist/src/services/workflow/store.js.map +1 -1
  682. package/dist/src/services/write-guards.d.ts +27 -1
  683. package/dist/src/services/write-guards.d.ts.map +1 -1
  684. package/dist/src/services/write-guards.js +39 -9
  685. package/dist/src/services/write-guards.js.map +1 -1
  686. package/dist/src/storage/interface.d.ts +4 -1
  687. package/dist/src/storage/interface.d.ts.map +1 -1
  688. package/dist/src/storage/interface.js +1 -0
  689. package/dist/src/storage/interface.js.map +1 -1
  690. package/dist/src/storage/providers/postgres-kysely/db-types.d.ts +119 -0
  691. package/dist/src/storage/providers/postgres-kysely/db-types.d.ts.map +1 -1
  692. package/dist/src/storage/providers/postgres-kysely/index.d.ts.map +1 -1
  693. package/dist/src/storage/providers/postgres-kysely/index.js +2 -1
  694. package/dist/src/storage/providers/postgres-kysely/index.js.map +1 -1
  695. package/dist/src/storage/providers/postgres-kysely/methods/agent-tasks.d.ts.map +1 -1
  696. package/dist/src/storage/providers/postgres-kysely/methods/agent-tasks.js +3 -0
  697. package/dist/src/storage/providers/postgres-kysely/methods/agent-tasks.js.map +1 -1
  698. package/dist/src/storage/providers/postgres-kysely/methods/agent-usage.d.ts.map +1 -1
  699. package/dist/src/storage/providers/postgres-kysely/methods/agent-usage.js +4 -0
  700. package/dist/src/storage/providers/postgres-kysely/methods/agent-usage.js.map +1 -1
  701. package/dist/src/storage/providers/postgres-kysely/methods/app-grants.d.ts +1 -0
  702. package/dist/src/storage/providers/postgres-kysely/methods/app-grants.d.ts.map +1 -1
  703. package/dist/src/storage/providers/postgres-kysely/methods/app-grants.js +3 -0
  704. package/dist/src/storage/providers/postgres-kysely/methods/app-grants.js.map +1 -1
  705. package/dist/src/storage/providers/postgres-kysely/methods/files.d.ts +2 -0
  706. package/dist/src/storage/providers/postgres-kysely/methods/files.d.ts.map +1 -1
  707. package/dist/src/storage/providers/postgres-kysely/methods/files.js +34 -2
  708. package/dist/src/storage/providers/postgres-kysely/methods/files.js.map +1 -1
  709. package/dist/src/storage/providers/postgres-kysely/methods/organisms.d.ts.map +1 -1
  710. package/dist/src/storage/providers/postgres-kysely/methods/organisms.js +11 -2
  711. package/dist/src/storage/providers/postgres-kysely/methods/organisms.js.map +1 -1
  712. package/dist/src/storage/providers/postgres-kysely/methods/usage.d.ts +32 -0
  713. package/dist/src/storage/providers/postgres-kysely/methods/usage.d.ts.map +1 -0
  714. package/dist/src/storage/providers/postgres-kysely/methods/usage.js +336 -0
  715. package/dist/src/storage/providers/postgres-kysely/methods/usage.js.map +1 -0
  716. package/dist/src/storage/providers/postgres-kysely/migrations/0036_usage_telemetry.sql +181 -0
  717. package/dist/src/storage/providers/postgres-kysely/migrations/0037_task_created_by.sql +18 -0
  718. package/dist/src/storage/providers/postgres-kysely/migrations/0038_organism_owners.sql +31 -0
  719. package/dist/src/storage/providers/postgres-kysely/migrations/0039_storage_file_utf8_verified.sql +19 -0
  720. package/dist/src/storage/providers/sqlite/index.d.ts.map +1 -1
  721. package/dist/src/storage/providers/sqlite/index.js +3 -1
  722. package/dist/src/storage/providers/sqlite/index.js.map +1 -1
  723. package/dist/src/storage/providers/sqlite/methods/apps.d.ts +1 -0
  724. package/dist/src/storage/providers/sqlite/methods/apps.d.ts.map +1 -1
  725. package/dist/src/storage/providers/sqlite/methods/apps.js +33 -28
  726. package/dist/src/storage/providers/sqlite/methods/apps.js.map +1 -1
  727. package/dist/src/storage/providers/sqlite/methods/governance.d.ts +2 -0
  728. package/dist/src/storage/providers/sqlite/methods/governance.d.ts.map +1 -1
  729. package/dist/src/storage/providers/sqlite/methods/governance.js +25 -4
  730. package/dist/src/storage/providers/sqlite/methods/governance.js.map +1 -1
  731. package/dist/src/storage/providers/sqlite/methods/identity-nodes.d.ts +1 -12
  732. package/dist/src/storage/providers/sqlite/methods/identity-nodes.d.ts.map +1 -1
  733. package/dist/src/storage/providers/sqlite/methods/identity-nodes.js +28 -135
  734. package/dist/src/storage/providers/sqlite/methods/identity-nodes.js.map +1 -1
  735. package/dist/src/storage/providers/sqlite/methods/storage-files.d.ts +38 -0
  736. package/dist/src/storage/providers/sqlite/methods/storage-files.d.ts.map +1 -0
  737. package/dist/src/storage/providers/sqlite/methods/storage-files.js +109 -0
  738. package/dist/src/storage/providers/sqlite/methods/storage-files.js.map +1 -0
  739. package/dist/src/storage/providers/sqlite/methods/usage.d.ts +43 -0
  740. package/dist/src/storage/providers/sqlite/methods/usage.d.ts.map +1 -0
  741. package/dist/src/storage/providers/sqlite/methods/usage.js +37 -0
  742. package/dist/src/storage/providers/sqlite/methods/usage.js.map +1 -0
  743. package/dist/src/storage/providers/sqlite/repos/agent-task.d.ts +1 -0
  744. package/dist/src/storage/providers/sqlite/repos/agent-task.d.ts.map +1 -1
  745. package/dist/src/storage/providers/sqlite/repos/agent-task.js +4 -2
  746. package/dist/src/storage/providers/sqlite/repos/agent-task.js.map +1 -1
  747. package/dist/src/storage/providers/sqlite/repos/agent-usage.d.ts.map +1 -1
  748. package/dist/src/storage/providers/sqlite/repos/agent-usage.js +4 -2
  749. package/dist/src/storage/providers/sqlite/repos/agent-usage.js.map +1 -1
  750. package/dist/src/storage/providers/sqlite/repos/community.d.ts.map +1 -1
  751. package/dist/src/storage/providers/sqlite/repos/community.js +20 -0
  752. package/dist/src/storage/providers/sqlite/repos/community.js.map +1 -1
  753. package/dist/src/storage/providers/sqlite/repos/usage.d.ts +35 -0
  754. package/dist/src/storage/providers/sqlite/repos/usage.d.ts.map +1 -0
  755. package/dist/src/storage/providers/sqlite/repos/usage.js +352 -0
  756. package/dist/src/storage/providers/sqlite/repos/usage.js.map +1 -0
  757. package/dist/src/storage/providers/sqlite/schema-tables-1.d.ts.map +1 -1
  758. package/dist/src/storage/providers/sqlite/schema-tables-1.js +2 -0
  759. package/dist/src/storage/providers/sqlite/schema-tables-1.js.map +1 -1
  760. package/dist/src/storage/providers/sqlite/schema-tables-3.d.ts +1 -0
  761. package/dist/src/storage/providers/sqlite/schema-tables-3.d.ts.map +1 -1
  762. package/dist/src/storage/providers/sqlite/schema-tables-3.js +1 -0
  763. package/dist/src/storage/providers/sqlite/schema-tables-3.js.map +1 -1
  764. package/dist/src/storage/providers/sqlite/schema-tables-4.d.ts +2 -0
  765. package/dist/src/storage/providers/sqlite/schema-tables-4.d.ts.map +1 -1
  766. package/dist/src/storage/providers/sqlite/schema-tables-4.js +131 -0
  767. package/dist/src/storage/providers/sqlite/schema-tables-4.js.map +1 -1
  768. package/dist/src/storage/providers/sqlite/schema.d.ts +2 -0
  769. package/dist/src/storage/providers/sqlite/schema.d.ts.map +1 -1
  770. package/dist/src/storage/providers/sqlite/schema.js +155 -130
  771. package/dist/src/storage/providers/sqlite/schema.js.map +1 -1
  772. package/dist/src/storage/repositories/app-grant.repository.d.ts +11 -0
  773. package/dist/src/storage/repositories/app-grant.repository.d.ts.map +1 -1
  774. package/dist/src/storage/repositories/file.repository.d.ts +13 -0
  775. package/dist/src/storage/repositories/file.repository.d.ts.map +1 -1
  776. package/dist/src/storage/repositories/usage.repository.d.ts +80 -0
  777. package/dist/src/storage/repositories/usage.repository.d.ts.map +1 -0
  778. package/dist/src/storage/repositories/usage.repository.js +23 -0
  779. package/dist/src/storage/repositories/usage.repository.js.map +1 -0
  780. package/dist/src/storage/types/agents-messaging.d.ts +24 -0
  781. package/dist/src/storage/types/agents-messaging.d.ts.map +1 -1
  782. package/dist/src/storage/types/agents-messaging.js +1 -0
  783. package/dist/src/storage/types/agents-messaging.js.map +1 -1
  784. package/dist/src/storage/types/commerce.d.ts +6 -0
  785. package/dist/src/storage/types/commerce.d.ts.map +1 -1
  786. package/dist/src/storage/types/organisms-federation.d.ts +21 -0
  787. package/dist/src/storage/types/organisms-federation.d.ts.map +1 -1
  788. package/dist/src/storage/types/usage.d.ts +186 -0
  789. package/dist/src/storage/types/usage.d.ts.map +1 -0
  790. package/dist/src/storage/types/usage.js +24 -0
  791. package/dist/src/storage/types/usage.js.map +1 -0
  792. package/dist/src/utils/agent-footer.d.ts.map +1 -1
  793. package/dist/src/utils/agent-footer.js +1 -0
  794. package/dist/src/utils/agent-footer.js.map +1 -1
  795. package/dist/src/utils/app-content-type.d.ts +57 -3
  796. package/dist/src/utils/app-content-type.d.ts.map +1 -1
  797. package/dist/src/utils/app-content-type.js +81 -12
  798. package/dist/src/utils/app-content-type.js.map +1 -1
  799. package/dist/src/utils/env-config/sections-features.d.ts.map +1 -1
  800. package/dist/src/utils/env-config/sections-features.js +9 -3
  801. package/dist/src/utils/env-config/sections-features.js.map +1 -1
  802. package/dist/src/utils/file-download-headers.d.ts +5 -3
  803. package/dist/src/utils/file-download-headers.d.ts.map +1 -1
  804. package/dist/src/utils/file-download-headers.js +18 -5
  805. package/dist/src/utils/file-download-headers.js.map +1 -1
  806. package/dist/src/utils/http-range.d.ts +151 -0
  807. package/dist/src/utils/http-range.d.ts.map +1 -0
  808. package/dist/src/utils/http-range.js +190 -0
  809. package/dist/src/utils/http-range.js.map +1 -0
  810. package/dist/src/utils/page-head.d.ts +5 -0
  811. package/dist/src/utils/page-head.d.ts.map +1 -1
  812. package/dist/src/utils/page-head.js +10 -1
  813. package/dist/src/utils/page-head.js.map +1 -1
  814. package/dist/src/utils/reserved-keys.d.ts +4 -1
  815. package/dist/src/utils/reserved-keys.d.ts.map +1 -1
  816. package/dist/src/utils/reserved-keys.js +4 -1
  817. package/dist/src/utils/reserved-keys.js.map +1 -1
  818. package/dist/src/utils/scope-coverage.d.ts +21 -0
  819. package/dist/src/utils/scope-coverage.d.ts.map +1 -1
  820. package/dist/src/utils/scope-coverage.js +22 -1
  821. package/dist/src/utils/scope-coverage.js.map +1 -1
  822. package/dist/static/sdk-libs/datapackage/index.js +336 -0
  823. package/dist/static/sdk-libs/dist/aimeat-datapackage.js +305 -0
  824. package/package.json +13 -2
@@ -1,85 +1,39 @@
1
- import { executeExtensionAction, trackMemoryAccess } from './extension-runtime.js';
2
- import { buildExtensionCtx, buildExtensionNotify, buildExtensionEmail } from './extension-ctx.js';
3
- import { getEncryptionKey } from './encryption.js';
4
- import { getExtSecretKeys, getInstanceSecretKeys, decryptSecretFields } from './extension-secrets.js';
1
+ import { runExtensionActionAsSystem } from './extension-system-run.js';
5
2
  /**
6
- * Execute a scheduled `extension` job: resolve the extension + action, build the sandbox context
7
- * (scheduler runs as a system caller), decrypt secret config (incl. an instance-scoped job's
8
- * bring-your-own-key config), run the action, and return the tracked memory reads/writes.
3
+ * Execute a scheduled `extension` job and return the tracked memory reads/writes for the run log.
4
+ *
5
+ * Every refusal throws: the scheduler records a thrown error as `lastRunResult: 'error'`, leaves the
6
+ * run count alone and notifies the owner, while any normal return is recorded as a successful run.
9
7
  */
10
8
  export async function runExtensionJob(storage, config, emailService, job) {
11
9
  if (!job.extensionName || !job.actionId) {
12
10
  throw new Error(`Extension job "${job.id}" missing extensionName or actionId`);
13
11
  }
14
- const ext = await storage.getExtension(job.extensionName);
15
- if (!ext) {
16
- throw new Error(`Extension "${job.extensionName}" not found`);
12
+ // A schedule's `ownerScope` is the owner GHII; an extension record carries the BARE installer name
13
+ // (routes/extensions/crud.ts writes `req.auth!.owner` into it). Both forms are needed: the owner
14
+ // fence compares bare names, storage is addressed by GHII. Falling back to the extension record's
15
+ // own installer would make the fence compare a value against itself, so it is not done.
16
+ const ownerScope = job.ownerScope ?? '';
17
+ const ownerName = ownerScope.split('@')[0];
18
+ if (!ownerName) {
19
+ throw new Error(`Extension job "${job.id}" has no owner scope — reinstall or reactivate extension "${job.extensionName}" to re-register it`);
17
20
  }
18
- if (ext.status !== 'active') {
19
- throw new Error(`Extension "${job.extensionName}" is not active`);
20
- }
21
- const action = ext.actions.find(a => a.id === job.actionId);
22
- if (!action) {
23
- throw new Error(`Action "${job.actionId}" not found in extension "${job.extensionName}"`);
24
- }
25
- // Build the extension context — scheduler runs as a system caller
26
- const extMemoryOwner = job.instanceId
27
- ? `ext:${ext.name}.${job.instanceId}`
28
- : `ext:${ext.name}`;
29
- // For an instance-scoped job, load the instance and decrypt its secret config so a scheduled
30
- // sync gets the same bring-your-own-key config a live instance action would. `type: 'secret'`
31
- // fields are decrypted just before the VM (see services/extension-secrets.ts).
32
- const encKey = getEncryptionKey(config);
33
- let instanceCtx;
34
- if (job.instanceId) {
35
- const inst = await storage.getExtensionInstance(ext.name, job.instanceId);
36
- instanceCtx = {
37
- id: job.instanceId,
38
- config: inst
39
- ? decryptSecretFields(inst.config, getInstanceSecretKeys(ext), encKey)
40
- : (job.input ?? {}),
41
- };
42
- }
43
- // One builder, so this road cannot be the one that forgets a guard again. It was: until
44
- // 2026-08-10 the scheduled path wrote memory without the size and key-count limits, and fetched
45
- // with a bare fetch rather than safeFetch, so an extension running on a clock had neither the
46
- // storage ceiling nor the SSRF check that the same extension had when a person invoked it.
47
- const baseCtx = buildExtensionCtx({
48
- config,
49
- storage,
50
- extMemoryOwner,
51
- // Scheduled runs have no human present. The installer is the responsible party, and the
52
- // 'operator' role is what the sandbox reads to decide it is a system run.
53
- caller: {
54
- gaii: `scheduler@${config.nodeId}`,
55
- owner: ext.installedBy,
56
- roles: ['operator'],
57
- },
58
- extConfig: decryptSecretFields(ext.config, getExtSecretKeys(ext), encKey),
59
- instance: instanceCtx,
60
- logPrefix: `[ext:${ext.name}:scheduler]`,
61
- // No wallet: nobody's balance is available to spend on a schedule.
62
- notify: buildExtensionNotify({
63
- storage, config, extName: ext.name,
64
- recipientGaii: ext.installedBy, recipientOwner: ext.installedBy,
65
- }),
66
- email: buildExtensionEmail({
67
- storage, config, extName: ext.name, extConfig: ext.config,
68
- ownerName: ext.installedBy, emailService,
69
- }),
21
+ const ownerGhii = ownerScope.includes('@') ? ownerScope : `${ownerName}@${config.nodeId}`;
22
+ const out = await runExtensionActionAsSystem({ storage, config, emailService }, {
23
+ extensionName: job.extensionName,
24
+ actionId: job.actionId,
25
+ instanceId: job.instanceId,
26
+ input: job.input,
27
+ // Nobody is present, and the scheduler says so rather than borrowing the owner's name for it.
28
+ callerGaii: `scheduler@${config.nodeId}`,
29
+ ownerName,
30
+ storageOwnerGhii: ownerGhii,
31
+ logLabel: 'scheduler',
32
+ producerKind: 'extension',
33
+ producerRef: job.id,
34
+ producerSchedule: job.cron,
35
+ trackMemory: true,
70
36
  });
71
- // Wrap with memory access tracking
72
- const { ctx, accessLog } = trackMemoryAccess(baseCtx);
73
- // Validate input is a plain object — reject non-serializable values
74
- const rawInput = job.input ?? {};
75
- let input;
76
- try {
77
- input = JSON.parse(JSON.stringify(rawInput));
78
- }
79
- catch {
80
- throw new Error(`Scheduled job "${job.id}" has non-serializable input`);
81
- }
82
- await executeExtensionAction(action.scriptContent, ctx, input, ext.limits);
83
- return { reads: accessLog.reads, writes: accessLog.writes };
37
+ return { reads: out.reads, writes: out.writes };
84
38
  }
85
39
  //# sourceMappingURL=scheduler-extension-job.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"scheduler-extension-job.js","sourceRoot":"","sources":["../../../src/services/scheduler-extension-job.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"scheduler-extension-job.js","sourceRoot":"","sources":["../../../src/services/scheduler-extension-job.ts"],"names":[],"mappings":"AAmCA,OAAO,EAAE,0BAA0B,EAAE,MAAM,2BAA2B,CAAC;AAGvE;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,OAAgB,EAChB,MAAoB,EACpB,YAAsC,EACtC,GAAuB;IAEvB,IAAI,CAAC,GAAG,CAAC,aAAa,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;QACxC,MAAM,IAAI,KAAK,CAAC,kBAAkB,GAAG,CAAC,EAAE,qCAAqC,CAAC,CAAC;IACjF,CAAC;IAED,mGAAmG;IACnG,iGAAiG;IACjG,kGAAkG;IAClG,wFAAwF;IACxF,MAAM,UAAU,GAAG,GAAG,CAAC,UAAU,IAAI,EAAE,CAAC;IACxC,MAAM,SAAS,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3C,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,kBAAkB,GAAG,CAAC,EAAE,6DAA6D,GAAG,CAAC,aAAa,qBAAqB,CAAC,CAAC;IAC/I,CAAC;IACD,MAAM,SAAS,GAAG,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,SAAS,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;IAE1F,MAAM,GAAG,GAAG,MAAM,0BAA0B,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,EAAE;QAC9E,aAAa,EAAE,GAAG,CAAC,aAAa;QAChC,QAAQ,EAAE,GAAG,CAAC,QAAQ;QACtB,UAAU,EAAE,GAAG,CAAC,UAAU;QAC1B,KAAK,EAAE,GAAG,CAAC,KAAK;QAChB,8FAA8F;QAC9F,UAAU,EAAE,aAAa,MAAM,CAAC,MAAM,EAAE;QACxC,SAAS;QACT,gBAAgB,EAAE,SAAS;QAC3B,QAAQ,EAAE,WAAW;QACrB,YAAY,EAAE,WAAW;QACzB,WAAW,EAAE,GAAG,CAAC,EAAE;QACnB,gBAAgB,EAAE,GAAG,CAAC,IAAI;QAC1B,WAAW,EAAE,IAAI;KAClB,CAAC,CAAC;IACH,OAAO,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC;AAClD,CAAC"}
@@ -32,6 +32,17 @@
32
32
  * // fire-and-forget at boot, after storage is ready
33
33
  * migrateAgentScopeVocabulary(storage).catch(err => logger.error(…));
34
34
  * @version-history
35
+ * v1.4.0 — 2026-08-14 — SECURITY: a conditional grant is decided from the OWNER-granted scopes, not
36
+ * from a set this migration had already widened. agent:permissions is conditional on agent:write,
37
+ * which is itself grandfathered, so the second boot handed every agent on the node the one word
38
+ * that lets an agent rewrite its own permissions — a word kept out of every wildcard for exactly
39
+ * that reason. Found by test/e2e-organism-scope-gate.ts asking whether a second run changes
40
+ * anything; it changed two agents out of three.
41
+ * v1.3.0 — 2026-08-14 — organism:write now gates three HTTP doors as well as the tools, so the
42
+ * entry for it says what removing it would cost. No conditional entry was added: this list
43
+ * already hands the word to every agent that has a scope list, and `*` covers it at the door, so
44
+ * one would have been dead code that read like a safeguard. An agent with NO recorded scope list
45
+ * is now counted and warned about instead of skipped in silence.
35
46
  * v1.2.0 — 2026-08-11 — Says in writing that account:security is in neither list, and why a word
36
47
  * that names NEW reach never belongs in either. Nothing executable changed.
37
48
  * v1.1.0 — 2026-08-11 — CONDITIONAL_SCOPES: a word handed only to agents already holding the
@@ -51,8 +62,17 @@ import type { Storage } from '../storage/interface.js';
51
62
  * ext:invoke — run an installed extension's action
52
63
  * organism:write — create a workspace, write and publish in one, comment, revert
53
64
  * organism:invite — invite a member, grant or revoke a workspace role
65
+ *
66
+ * organism:write NOW ALSO CARRIES THREE HTTP DOORS, as of 2026-08-14: POST /v1/organisms, POST
67
+ * /v1/organisms/:id/workspaces and POST /v1/organisms/:id/comments. Until then all three used
68
+ * requireRoleOrScope('agent', 'organism:write'), whose role path admitted every agent before it read
69
+ * a scope, so the word bound the MCP tool surface and nothing else. Tightening them to requireScope
70
+ * is safe only because the word is already in this list: taking it out would not merely rename a
71
+ * permission, it would stop every agent on the node from creating an organism. There is deliberately
72
+ * NO conditional entry for it below — a conditional grant would be dead code here, because this list
73
+ * hands the word to every agent with a recorded scope list and `*` covers it at the door.
54
74
  */
55
- export declare const GRANDFATHERED_SCOPES: readonly ["agent:write", "app:write", "app:manage", "capability:write", "ext:invoke", "organism:write", "organism:invite"];
75
+ export declare const GRANDFATHERED_SCOPES: readonly ["agent:write", "app:write", "app:manage", "capability:write", "ext:invoke", "organism:write", "organism:invite", "packages:write"];
56
76
  /**
57
77
  * Words granted only to agents that ALREADY hold the word they are replacing.
58
78
  *
@@ -74,4 +94,37 @@ export declare const CONDITIONAL_SCOPES: ReadonlyArray<{
74
94
  * nothing to do. Returns the number of agents actually updated, for the boot log.
75
95
  */
76
96
  export declare function migrateAgentScopeVocabulary(storage: Storage): Promise<number>;
97
+ /**
98
+ * The same grandfathering, for the OTHER principal family a new permission word can refuse.
99
+ *
100
+ * `requireScope` waves an owner session through and deliberately does NOT wave an app grant through
101
+ * — it is the only middleware that stops one, which is exactly why tightening a route to a new word
102
+ * is the shape that broke a live app in changelog 1.33.1 and is why H-20 was reverted. Everything
103
+ * above was written for agents and stopped there, so for five days the node had a mechanism that
104
+ * made a new word safe for one family and left the family the word actually bites uncovered.
105
+ *
106
+ * A grant carries what its owner approved on the consent screen at the time it was made, and an app
107
+ * gains nothing from being updated. So a word added to the vocabulary today would refuse every grant
108
+ * approved before it existed — for an act the app was already performing, through a door that asked
109
+ * nothing. Writing the word onto those grants preserves the reach they have; it does not hand an app
110
+ * a permission it never had, because the door it names was open to them a moment ago.
111
+ *
112
+ * The rule for a NEW grant is unchanged and is where the word does its work: the consent screen
113
+ * lists it, the owner sees it, and they can uncheck it.
114
+ *
115
+ * Conditional words are not applied here. Their `when` is a question about what an owner granted a
116
+ * particular agent, and an app grant's scope list is a different conversation with a different
117
+ * screen; the two should not be reasoned about with one table until someone decides they mean the
118
+ * same thing.
119
+ */
120
+ export declare function migrateAppGrantScopeVocabulary(storage: Storage): Promise<number>;
121
+ /**
122
+ * Both families, one call. The boot path takes this rather than either half, so a word added to
123
+ * GRANDFATHERED_SCOPES cannot reach one principal family and miss the other — which is the failure
124
+ * this pair exists to prevent, and which it had itself.
125
+ */
126
+ export declare function migrateScopeVocabulary(storage: Storage): Promise<{
127
+ agents: number;
128
+ appGrants: number;
129
+ }>;
77
130
  //# sourceMappingURL=scope-vocabulary-migration.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"scope-vocabulary-migration.d.ts","sourceRoot":"","sources":["../../../src/services/scope-vocabulary-migration.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AACH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAIvD;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,oBAAoB,4HAQvB,CAAC;AAEX;;;;;;;;;;GAUG;AACH,eAAO,MAAM,kBAAkB,EAAE,aAAa,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAc1F,CAAC;AAEF;;;GAGG;AACH,wBAAsB,2BAA2B,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAkCnF"}
1
+ {"version":3,"file":"scope-vocabulary-migration.d.ts","sourceRoot":"","sources":["../../../src/services/scope-vocabulary-migration.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmDG;AACH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAIvD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,eAAO,MAAM,oBAAoB,8IAavB,CAAC;AAEX;;;;;;;;;;GAUG;AACH,eAAO,MAAM,kBAAkB,EAAE,aAAa,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAc1F,CAAC;AAEF;;;GAGG;AACH,wBAAsB,2BAA2B,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CA0DnF;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAsB,8BAA8B,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAoBtF;AAED;;;;GAIG;AACH,wBAAsB,sBAAsB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC,CAK7G"}
@@ -11,6 +11,15 @@ import { scopeIsCovered } from '../utils/scope-coverage.js';
11
11
  * ext:invoke — run an installed extension's action
12
12
  * organism:write — create a workspace, write and publish in one, comment, revert
13
13
  * organism:invite — invite a member, grant or revoke a workspace role
14
+ *
15
+ * organism:write NOW ALSO CARRIES THREE HTTP DOORS, as of 2026-08-14: POST /v1/organisms, POST
16
+ * /v1/organisms/:id/workspaces and POST /v1/organisms/:id/comments. Until then all three used
17
+ * requireRoleOrScope('agent', 'organism:write'), whose role path admitted every agent before it read
18
+ * a scope, so the word bound the MCP tool surface and nothing else. Tightening them to requireScope
19
+ * is safe only because the word is already in this list: taking it out would not merely rename a
20
+ * permission, it would stop every agent on the node from creating an organism. There is deliberately
21
+ * NO conditional entry for it below — a conditional grant would be dead code here, because this list
22
+ * hands the word to every agent with a recorded scope list and `*` covers it at the door.
14
23
  */
15
24
  export const GRANDFATHERED_SCOPES = [
16
25
  'agent:write',
@@ -20,6 +29,11 @@ export const GRANDFATHERED_SCOPES = [
20
29
  'ext:invoke',
21
30
  'organism:write',
22
31
  'organism:invite',
32
+ // Added 2026-08-15 with the door that now demands it (routes/instances/install.ts). Installing a
33
+ // package asked for nothing before, so every principal that could reach the route could install;
34
+ // the word describes what was already happening rather than granting anything new, which is the
35
+ // only condition under which a word belongs on this list.
36
+ 'packages:write',
23
37
  ];
24
38
  /**
25
39
  * Words granted only to agents that ALREADY hold the word they are replacing.
@@ -54,21 +68,37 @@ export const CONDITIONAL_SCOPES = [
54
68
  export async function migrateAgentScopeVocabulary(storage) {
55
69
  const agents = await storage.listAgents();
56
70
  let changed = 0;
71
+ let noScopeList = 0;
57
72
  for (const agent of agents) {
58
73
  const held = agent.defaultScopes;
59
74
  // No recorded scopes at all: nothing to grandfather. An agent with none is minted from
60
- // config.defaultAgentScopes, which is a separate decision.
61
- if (!Array.isArray(held))
75
+ // config.defaultAgentScopes, which is a separate decision — and writing a list here would
76
+ // REPLACE that fallback rather than extend it, narrowing the agent to whatever this file
77
+ // happens to name. Counted instead, because it is a real population with a real consequence
78
+ // (see the warning below) and it was previously invisible.
79
+ if (!Array.isArray(held)) {
80
+ noScopeList++;
62
81
  continue;
82
+ }
63
83
  // The grandfathered words ride inside a wildcard already, so a '*' agent needs none of them.
64
84
  const missing = held.includes('*')
65
85
  ? []
66
86
  : GRANDFATHERED_SCOPES.filter(s => !held.includes(s));
67
- // The conditional words do NOT ride inside a wildcard that is their whole point — so a
68
- // '*' agent DOES need them written out, or it silently loses a tool it has today. Coverage
69
- // is asked of the 'when' word, which '*' does carry.
87
+ // A conditional grant asks "did the OWNER already give this agent the word it depends on?",
88
+ // and the answer has to come from what the owner granted never from a word this migration
89
+ // itself wrote on an earlier boot. Read literally, `held` mixes the two, and one pair
90
+ // overlaps: agent:write is GRANDFATHERED and agent:permissions is conditional on it. That
91
+ // handed agent:permissions — a word deliberately outside every wildcard, because it lets an
92
+ // agent rewrite its own permissions — to EVERY agent on the node, on the second boot, in
93
+ // silence. This runs on every boot, so "it only happens once" was never true of anything
94
+ // here. Testing coverage against the owner-granted set makes the answer the same on run one
95
+ // and run fifty. A '*' agent still gets these words written out, which is the whole point of
96
+ // the list — they sit OUTSIDE every wildcard, so a '*' agent would silently lose a tool it
97
+ // uses today. The filter does not touch that: '*' is not a grandfathered word, so it survives
98
+ // and still confers every 'when'.
99
+ const ownerGranted = held.filter(s => !GRANDFATHERED_SCOPES.includes(s));
70
100
  for (const c of CONDITIONAL_SCOPES) {
71
- if (scopeIsCovered(held, c.when) && !held.includes(c.grant))
101
+ if (scopeIsCovered(ownerGranted, c.when) && !held.includes(c.grant))
72
102
  missing.push(c.grant);
73
103
  }
74
104
  if (!missing.length)
@@ -82,6 +112,71 @@ export async function migrateAgentScopeVocabulary(storage) {
82
112
  scopes: GRANDFATHERED_SCOPES.join(', '),
83
113
  });
84
114
  }
115
+ if (noScopeList) {
116
+ // These agents keep whatever config.defaultAgentScopes says, which names none of the words
117
+ // above. Every gate that now asks for one of them refuses this agent, and the owner's only
118
+ // fix is to set its scopes explicitly in the agent editor. Say so out loud rather than
119
+ // leaving the population to be discovered by a support ticket.
120
+ logger.warn('Scope vocabulary migration: agents with no recorded scope list were left alone', {
121
+ agents: noScopeList,
122
+ effect: 'they fall back to config.defaultAgentScopes, which carries none of these words',
123
+ });
124
+ }
85
125
  return changed;
86
126
  }
127
+ /**
128
+ * The same grandfathering, for the OTHER principal family a new permission word can refuse.
129
+ *
130
+ * `requireScope` waves an owner session through and deliberately does NOT wave an app grant through
131
+ * — it is the only middleware that stops one, which is exactly why tightening a route to a new word
132
+ * is the shape that broke a live app in changelog 1.33.1 and is why H-20 was reverted. Everything
133
+ * above was written for agents and stopped there, so for five days the node had a mechanism that
134
+ * made a new word safe for one family and left the family the word actually bites uncovered.
135
+ *
136
+ * A grant carries what its owner approved on the consent screen at the time it was made, and an app
137
+ * gains nothing from being updated. So a word added to the vocabulary today would refuse every grant
138
+ * approved before it existed — for an act the app was already performing, through a door that asked
139
+ * nothing. Writing the word onto those grants preserves the reach they have; it does not hand an app
140
+ * a permission it never had, because the door it names was open to them a moment ago.
141
+ *
142
+ * The rule for a NEW grant is unchanged and is where the word does its work: the consent screen
143
+ * lists it, the owner sees it, and they can uncheck it.
144
+ *
145
+ * Conditional words are not applied here. Their `when` is a question about what an owner granted a
146
+ * particular agent, and an app grant's scope list is a different conversation with a different
147
+ * screen; the two should not be reasoned about with one table until someone decides they mean the
148
+ * same thing.
149
+ */
150
+ export async function migrateAppGrantScopeVocabulary(storage) {
151
+ const grants = await storage.listAppGrants();
152
+ let changed = 0;
153
+ for (const grant of grants) {
154
+ const held = grant.scopes;
155
+ if (!Array.isArray(held) || held.includes('*'))
156
+ continue;
157
+ const missing = GRANDFATHERED_SCOPES.filter(s => !held.includes(s));
158
+ if (!missing.length)
159
+ continue;
160
+ await storage.updateAppGrant(grant.grantId, { scopes: [...held, ...missing] });
161
+ changed++;
162
+ }
163
+ if (changed) {
164
+ logger.info('Scope vocabulary migration: live app grants grandfathered onto the new words', {
165
+ grantsUpdated: changed,
166
+ scopes: GRANDFATHERED_SCOPES.join(', '),
167
+ });
168
+ }
169
+ return changed;
170
+ }
171
+ /**
172
+ * Both families, one call. The boot path takes this rather than either half, so a word added to
173
+ * GRANDFATHERED_SCOPES cannot reach one principal family and miss the other — which is the failure
174
+ * this pair exists to prevent, and which it had itself.
175
+ */
176
+ export async function migrateScopeVocabulary(storage) {
177
+ return {
178
+ agents: await migrateAgentScopeVocabulary(storage),
179
+ appGrants: await migrateAppGrantScopeVocabulary(storage),
180
+ };
181
+ }
87
182
  //# sourceMappingURL=scope-vocabulary-migration.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"scope-vocabulary-migration.js","sourceRoot":"","sources":["../../../src/services/scope-vocabulary-migration.ts"],"names":[],"mappings":"AA0CA,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAE5D;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG;IAChC,aAAa;IACb,WAAW;IACX,YAAY;IACZ,kBAAkB;IAClB,YAAY;IACZ,gBAAgB;IAChB,iBAAiB;CACX,CAAC;AAEX;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAgE;IAC3F;QACI,KAAK,EAAE,sBAAsB;QAC7B,IAAI,EAAE,eAAe;QACrB,GAAG,EAAE,uFAAuF;KAC/F;IACD,8FAA8F;IAC9F,6FAA6F;IAC7F,4FAA4F;IAC5F,EAAE,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,eAAe,EAAE,GAAG,EAAE,mCAAmC,EAAE;IAC1F,EAAE,KAAK,EAAE,6BAA6B,EAAE,IAAI,EAAE,aAAa,EAAE,GAAG,EAAE,qCAAqC,EAAE;IACzG,EAAE,KAAK,EAAE,mBAAmB,EAAE,IAAI,EAAE,aAAa,EAAE,GAAG,EAAE,iCAAiC,EAAE;IAC3F,EAAE,KAAK,EAAE,gBAAgB,EAAE,IAAI,EAAE,gBAAgB,EAAE,GAAG,EAAE,oDAAoD,EAAE;IAC9G,EAAE,KAAK,EAAE,gBAAgB,EAAE,IAAI,EAAE,cAAc,EAAE,GAAG,EAAE,sBAAsB,EAAE;CACjF,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,2BAA2B,CAAC,OAAgB;IAC9D,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,UAAU,EAAE,CAAC;IAC1C,IAAI,OAAO,GAAG,CAAC,CAAC;IAEhB,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QACzB,MAAM,IAAI,GAAG,KAAK,CAAC,aAAa,CAAC;QACjC,uFAAuF;QACvF,2DAA2D;QAC3D,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;YAAE,SAAS;QAEnC,6FAA6F;QAC7F,MAAM,OAAO,GAAa,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;YACxC,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;QAE1D,yFAAyF;QACzF,2FAA2F;QAC3F,qDAAqD;QACrD,KAAK,MAAM,CAAC,IAAI,kBAAkB,EAAE,CAAC;YACjC,IAAI,cAAc,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC;gBAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QACvF,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,MAAM;YAAE,SAAS;QAE9B,MAAM,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,aAAa,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,OAAO,CAAC,EAAE,CAAC,CAAC;QAChF,OAAO,EAAE,CAAC;IACd,CAAC;IAED,IAAI,OAAO,EAAE,CAAC;QACV,MAAM,CAAC,IAAI,CAAC,8EAA8E,EAAE;YACxF,aAAa,EAAE,OAAO;YACtB,MAAM,EAAE,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC;SAC1C,CAAC,CAAC;IACP,CAAC;IACD,OAAO,OAAO,CAAC;AACnB,CAAC"}
1
+ {"version":3,"file":"scope-vocabulary-migration.js","sourceRoot":"","sources":["../../../src/services/scope-vocabulary-migration.ts"],"names":[],"mappings":"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"}
@@ -6,8 +6,22 @@
6
6
  * storage. No HTTP, no token, no operator action: it self-authenticates by virtue of running
7
7
  * inside the node. Disables itself gracefully (one log line, no crash) if no browser is available.
8
8
  * Opt-in via config.screenshotAutoCapture so nodes without a browser never try.
9
- * @structure startScreenshotAutoCapture() entry; launchBrowser() channel fallback; pass() one scan.
9
+ *
10
+ * It also serves ONE app on demand (captureAppScreenshot), which is a different job wearing the
11
+ * same machinery. The batch exists so a catalogue is not full of blank cards; the on-demand call
12
+ * exists because an agent that has just published an app cannot otherwise see what it made. A
13
+ * hosted agent has no browser and no shell, so without this it ships blind and says "done" on the
14
+ * strength of a 200.
15
+ * @structure startScreenshotAutoCapture() entry; launchBrowser() channel fallback;
16
+ * runScreenshotCapturePass() one batch scan; captureAppScreenshot() one app, with its own
17
+ * per-owner throttle; renderAndStore() the shared render both paths use.
10
18
  * @version-history
19
+ * v1.3.0 — 2026-08-16 — captureAppScreenshot(): one named app, on demand, answering with a reason
20
+ * instead of a number. The render moved into renderAndStore() so the batch and the request run
21
+ * the same code. The module-level `running` flag stays a BATCH guard only — it used to make any
22
+ * second caller return 0 silently, which is the wrong answer to give someone who asked a
23
+ * question. Rendering is expensive and unauthenticated rendering is a denial-of-service shape,
24
+ * so the on-demand path carries a per-owner throttle of its own.
11
25
  * v1.0.0 — 2026-06-20 — initial: interval backfill writing straight to storage; channel-fallback
12
26
  * browser via lazy playwright-core; graceful self-disable when no browser is present.
13
27
  * v1.1.0 — 2026-06-20 — render the app's STORED HTML directly (fulfill the main document) instead of
@@ -18,11 +32,36 @@
18
32
  */
19
33
  import type { AimeatConfig } from '../config.js';
20
34
  import type { Storage } from '../storage/interface.js';
35
+ /** What one on-demand capture can answer. Every failure names itself, because the caller is an agent
36
+ * deciding what to do next rather than a log nobody reads. */
37
+ export type CaptureResult = {
38
+ ok: true;
39
+ sizeBytes: number;
40
+ } | {
41
+ ok: false;
42
+ status: number;
43
+ code: string;
44
+ message: string;
45
+ };
21
46
  /**
22
47
  * One scan: capture + store a thumbnail for every published app that still has none. Returns the
23
48
  * number captured. Exported so a manual trigger / test can run a single pass on demand.
24
49
  */
25
50
  export declare function runScreenshotCapturePass(config: AimeatConfig, storage: Storage): Promise<number>;
51
+ /**
52
+ * Capture ONE app now, for a caller who asked.
53
+ *
54
+ * Separate from the batch on purpose. The batch may skip, retry next interval and answer with a
55
+ * count; someone who just published an app and wants to look at it needs either a picture or a
56
+ * reason. The batch's `running` flag is deliberately NOT consulted here: a scan in progress is no
57
+ * reason to refuse a person, and the two writing the same key is an upsert either way.
58
+ *
59
+ * Rendering is the most expensive thing this node does per request, so it is throttled per owner.
60
+ */
61
+ export declare function captureAppScreenshot(config: AimeatConfig, storage: Storage, app: {
62
+ ownerName: string;
63
+ filename: string;
64
+ }): Promise<CaptureResult>;
26
65
  /** Start the interval-driven auto-capture job (no-op unless config.screenshotAutoCapture is on). */
27
66
  export declare function startScreenshotAutoCapture(config: AimeatConfig, storage: Storage): void;
28
67
  //# sourceMappingURL=screenshot-capture.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"screenshot-capture.d.ts","sourceRoot":"","sources":["../../../src/services/screenshot-capture.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AACH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AA8CvD;;;GAGG;AACH,wBAAsB,wBAAwB,CAAC,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAyFtG;AAED,oGAAoG;AACpG,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI,CAOvF"}
1
+ {"version":3,"file":"screenshot-capture.d.ts","sourceRoot":"","sources":["../../../src/services/screenshot-capture.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAmBvD;+DAC+D;AAC/D,MAAM,MAAM,aAAa,GACrB;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GAC/B;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAoHjE;;;GAGG;AACH,wBAAsB,wBAAwB,CAAC,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAiCtG;AAED;;;;;;;;;GASG;AACH,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GACnF,OAAO,CAAC,aAAa,CAAC,CAqDxB;AAED,oGAAoG;AACpG,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI,CAOvF"}