aimeat 3.2.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 (507) hide show
  1. package/dist/.env.example +58 -1
  2. package/dist/build-stamp.json +4 -4
  3. package/dist/locales/en.json +41 -1
  4. package/dist/locales/es.json +41 -1
  5. package/dist/locales/fi.json +43 -3
  6. package/dist/public/changelog.json +12 -0
  7. package/dist/public/css/views/chat.css +388 -0
  8. package/dist/public/js/services/chat.js +190 -0
  9. package/dist/public/js/services/speech-reader.js +26 -0
  10. package/dist/public/lib/VENDORED.md +1 -0
  11. package/dist/public/lib/duckdb-wasm@1.32.0/duckdb-browser-eh.worker.js +14 -0
  12. package/dist/public/lib/duckdb-wasm@1.32.0/duckdb-browser.js +23 -0
  13. package/dist/public/lib/duckdb-wasm@1.32.0/duckdb-eh.wasm +0 -0
  14. package/dist/public/lib/duckdb-wasm@1.32.0/extensions/v1.4.3/wasm_eh/parquet.duckdb_extension.wasm +0 -0
  15. package/dist/public/lib/vendored-assets.json +19 -0
  16. package/dist/public/llms-full-template.txt +2706 -0
  17. package/dist/public/llms-index-template.txt +60 -0
  18. package/dist/public/robots.node.txt +64 -23
  19. package/dist/public/spa.html +8 -1
  20. package/dist/public/views/chat/parts.js +257 -0
  21. package/dist/public/views/chat.js +327 -0
  22. package/dist/public/views/landing.js +24 -1
  23. package/dist/public/views/profile/agents/scope-model.js +320 -315
  24. package/dist/scripts/audit-mcp-schemas.js +41 -0
  25. package/dist/scripts/audit-mcp-schemas.js.map +1 -1
  26. package/dist/scripts/build-sdk-libs.d.ts.map +1 -1
  27. package/dist/scripts/build-sdk-libs.js +1 -0
  28. package/dist/scripts/build-sdk-libs.js.map +1 -1
  29. package/dist/scripts/check-ai-disclosure.js +11 -0
  30. package/dist/scripts/check-ai-disclosure.js.map +1 -1
  31. package/dist/scripts/check-denial-coverage.d.ts +29 -0
  32. package/dist/scripts/check-denial-coverage.d.ts.map +1 -0
  33. package/dist/scripts/check-denial-coverage.js +237 -0
  34. package/dist/scripts/check-denial-coverage.js.map +1 -0
  35. package/dist/scripts/check-ext-entrypoints.js +14 -2
  36. package/dist/scripts/check-ext-entrypoints.js.map +1 -1
  37. package/dist/scripts/check-outbound-fetch.d.ts.map +1 -1
  38. package/dist/scripts/check-outbound-fetch.js +16 -2
  39. package/dist/scripts/check-outbound-fetch.js.map +1 -1
  40. package/dist/scripts/check-sse-parity.js +14 -0
  41. package/dist/scripts/check-sse-parity.js.map +1 -1
  42. package/dist/scripts/indexnow.js +9 -7
  43. package/dist/scripts/indexnow.js.map +1 -1
  44. package/dist/src/auth/middleware.d.ts +7 -0
  45. package/dist/src/auth/middleware.d.ts.map +1 -1
  46. package/dist/src/auth/middleware.js +15 -21
  47. package/dist/src/auth/middleware.js.map +1 -1
  48. package/dist/src/cli/connect/mcp/tools/agent-tasks.d.ts +4 -0
  49. package/dist/src/cli/connect/mcp/tools/agent-tasks.d.ts.map +1 -1
  50. package/dist/src/cli/connect/mcp/tools/agent-tasks.js +11 -1
  51. package/dist/src/cli/connect/mcp/tools/agent-tasks.js.map +1 -1
  52. package/dist/src/cli/connect/mcp/tools/apps.d.ts.map +1 -1
  53. package/dist/src/cli/connect/mcp/tools/apps.js +88 -0
  54. package/dist/src/cli/connect/mcp/tools/apps.js.map +1 -1
  55. package/dist/src/cli/connect/mcp/tools/core.d.ts +7 -0
  56. package/dist/src/cli/connect/mcp/tools/core.d.ts.map +1 -1
  57. package/dist/src/cli/connect/mcp/tools/core.js +83 -4
  58. package/dist/src/cli/connect/mcp/tools/core.js.map +1 -1
  59. package/dist/src/cli/connect/onboarding-prompt.js +1 -1
  60. package/dist/src/cli/connect/skill-bundle.js +1 -1
  61. package/dist/src/cli/connect/tool-call-defs-app-draft-edit.d.ts +21 -0
  62. package/dist/src/cli/connect/tool-call-defs-app-draft-edit.d.ts.map +1 -0
  63. package/dist/src/cli/connect/tool-call-defs-app-draft-edit.js +137 -0
  64. package/dist/src/cli/connect/tool-call-defs-app-draft-edit.js.map +1 -0
  65. package/dist/src/cli/connect/tool-call-defs-core.d.ts +1 -0
  66. package/dist/src/cli/connect/tool-call-defs-core.d.ts.map +1 -1
  67. package/dist/src/cli/connect/tool-call-defs-core.js +30 -0
  68. package/dist/src/cli/connect/tool-call-defs-core.js.map +1 -1
  69. package/dist/src/cli/connect/tool-call.d.ts.map +1 -1
  70. package/dist/src/cli/connect/tool-call.js +2 -0
  71. package/dist/src/cli/connect/tool-call.js.map +1 -1
  72. package/dist/src/config-types-ai.d.ts +76 -0
  73. package/dist/src/config-types-ai.d.ts.map +1 -0
  74. package/dist/src/config-types-ai.js +15 -0
  75. package/dist/src/config-types-ai.js.map +1 -0
  76. package/dist/src/config-types.d.ts +11 -2
  77. package/dist/src/config-types.d.ts.map +1 -1
  78. package/dist/src/config.d.ts.map +1 -1
  79. package/dist/src/config.js +25 -4
  80. package/dist/src/config.js.map +1 -1
  81. package/dist/src/data/builtin-skills.d.ts.map +1 -1
  82. package/dist/src/data/builtin-skills.js +3 -2
  83. package/dist/src/data/builtin-skills.js.map +1 -1
  84. package/dist/src/data/digital-signage-package.js +1 -1
  85. package/dist/src/data/library-packs/sdk.d.ts.map +1 -1
  86. package/dist/src/data/library-packs/sdk.js +76 -0
  87. package/dist/src/data/library-packs/sdk.js.map +1 -1
  88. package/dist/src/data/library-packs/vendored.d.ts.map +1 -1
  89. package/dist/src/data/library-packs/vendored.js +81 -0
  90. package/dist/src/data/library-packs/vendored.js.map +1 -1
  91. package/dist/src/data/library-packs.d.ts +2 -2
  92. package/dist/src/data/library-packs.js +2 -2
  93. package/dist/src/data/public-pages.d.ts +13 -0
  94. package/dist/src/data/public-pages.d.ts.map +1 -1
  95. package/dist/src/data/public-pages.js +153 -113
  96. package/dist/src/data/public-pages.js.map +1 -1
  97. package/dist/src/generated/api-types.d.ts +1652 -36
  98. package/dist/src/generated/api-types.d.ts.map +1 -1
  99. package/dist/src/index-start.d.ts.map +1 -1
  100. package/dist/src/index-start.js +3 -0
  101. package/dist/src/index-start.js.map +1 -1
  102. package/dist/src/mcp/agent-tasks.d.ts.map +1 -1
  103. package/dist/src/mcp/agent-tasks.js +5 -0
  104. package/dist/src/mcp/agent-tasks.js.map +1 -1
  105. package/dist/src/mcp/ai-image.d.ts +22 -0
  106. package/dist/src/mcp/ai-image.d.ts.map +1 -0
  107. package/dist/src/mcp/ai-image.js +60 -0
  108. package/dist/src/mcp/ai-image.js.map +1 -0
  109. package/dist/src/mcp/annotations.d.ts +5 -0
  110. package/dist/src/mcp/annotations.d.ts.map +1 -1
  111. package/dist/src/mcp/annotations.js +18 -0
  112. package/dist/src/mcp/annotations.js.map +1 -1
  113. package/dist/src/mcp/apps-draft-edit.d.ts +28 -0
  114. package/dist/src/mcp/apps-draft-edit.d.ts.map +1 -0
  115. package/dist/src/mcp/apps-draft-edit.js +164 -0
  116. package/dist/src/mcp/apps-draft-edit.js.map +1 -0
  117. package/dist/src/mcp/apps-screenshot.d.ts +26 -0
  118. package/dist/src/mcp/apps-screenshot.d.ts.map +1 -0
  119. package/dist/src/mcp/apps-screenshot.js +39 -0
  120. package/dist/src/mcp/apps-screenshot.js.map +1 -0
  121. package/dist/src/mcp/catalog/definitions/discovery-work-boards.d.ts +1 -0
  122. package/dist/src/mcp/catalog/definitions/discovery-work-boards.d.ts.map +1 -1
  123. package/dist/src/mcp/catalog/definitions/discovery-work-boards.js +40 -0
  124. package/dist/src/mcp/catalog/definitions/discovery-work-boards.js.map +1 -1
  125. package/dist/src/mcp/catalog/definitions/organisms-workspaces-apps.d.ts +3 -0
  126. package/dist/src/mcp/catalog/definitions/organisms-workspaces-apps.d.ts.map +1 -1
  127. package/dist/src/mcp/catalog/definitions/organisms-workspaces-apps.js +74 -0
  128. package/dist/src/mcp/catalog/definitions/organisms-workspaces-apps.js.map +1 -1
  129. package/dist/src/mcp/catalog/definitions/schedules-tasks-memory.d.ts.map +1 -1
  130. package/dist/src/mcp/catalog/definitions/schedules-tasks-memory.js +1 -0
  131. package/dist/src/mcp/catalog/definitions/schedules-tasks-memory.js.map +1 -1
  132. package/dist/src/mcp/catalog/scopes.d.ts.map +1 -1
  133. package/dist/src/mcp/catalog/scopes.js +19 -1
  134. package/dist/src/mcp/catalog/scopes.js.map +1 -1
  135. package/dist/src/mcp/catalog/surfaces.d.ts.map +1 -1
  136. package/dist/src/mcp/catalog/surfaces.js +18 -4
  137. package/dist/src/mcp/catalog/surfaces.js.map +1 -1
  138. package/dist/src/mcp/core-datapackage.d.ts +32 -0
  139. package/dist/src/mcp/core-datapackage.d.ts.map +1 -0
  140. package/dist/src/mcp/core-datapackage.js +188 -0
  141. package/dist/src/mcp/core-datapackage.js.map +1 -0
  142. package/dist/src/mcp/core-storage.d.ts +7 -3
  143. package/dist/src/mcp/core-storage.d.ts.map +1 -1
  144. package/dist/src/mcp/core-storage.js +27 -4
  145. package/dist/src/mcp/core-storage.js.map +1 -1
  146. package/dist/src/mcp/core.d.ts.map +1 -1
  147. package/dist/src/mcp/core.js +3 -0
  148. package/dist/src/mcp/core.js.map +1 -1
  149. package/dist/src/mcp/extensions.d.ts.map +1 -1
  150. package/dist/src/mcp/extensions.js +11 -1
  151. package/dist/src/mcp/extensions.js.map +1 -1
  152. package/dist/src/mcp/index.d.ts +9 -0
  153. package/dist/src/mcp/index.d.ts.map +1 -1
  154. package/dist/src/mcp/index.js +34 -0
  155. package/dist/src/mcp/index.js.map +1 -1
  156. package/dist/src/models/agent-task-schemas.d.ts.map +1 -1
  157. package/dist/src/models/agent-task-schemas.js +12 -1
  158. package/dist/src/models/agent-task-schemas.js.map +1 -1
  159. package/dist/src/models/workflow-schemas.d.ts +178 -1
  160. package/dist/src/models/workflow-schemas.d.ts.map +1 -1
  161. package/dist/src/models/workflow-schemas.js +75 -0
  162. package/dist/src/models/workflow-schemas.js.map +1 -1
  163. package/dist/src/routes/admin-extensions.d.ts +4 -0
  164. package/dist/src/routes/admin-extensions.d.ts.map +1 -1
  165. package/dist/src/routes/admin-extensions.js +135 -142
  166. package/dist/src/routes/admin-extensions.js.map +1 -1
  167. package/dist/src/routes/agent-conventions.d.ts.map +1 -1
  168. package/dist/src/routes/agent-conventions.js +4 -2
  169. package/dist/src/routes/agent-conventions.js.map +1 -1
  170. package/dist/src/routes/agent-docs.d.ts +4 -4
  171. package/dist/src/routes/agent-docs.js +145 -145
  172. package/dist/src/routes/agent-docs.js.map +1 -1
  173. package/dist/src/routes/agent-messages.d.ts +6 -0
  174. package/dist/src/routes/agent-messages.d.ts.map +1 -1
  175. package/dist/src/routes/agent-messages.js +23 -1
  176. package/dist/src/routes/agent-messages.js.map +1 -1
  177. package/dist/src/routes/agent-tasks/create-read.d.ts.map +1 -1
  178. package/dist/src/routes/agent-tasks/create-read.js +8 -1
  179. package/dist/src/routes/agent-tasks/create-read.js.map +1 -1
  180. package/dist/src/routes/agent-tasks/lifecycle.d.ts +4 -1
  181. package/dist/src/routes/agent-tasks/lifecycle.d.ts.map +1 -1
  182. package/dist/src/routes/agent-tasks/lifecycle.js +80 -2
  183. package/dist/src/routes/agent-tasks/lifecycle.js.map +1 -1
  184. package/dist/src/routes/ai.d.ts +5 -0
  185. package/dist/src/routes/ai.d.ts.map +1 -1
  186. package/dist/src/routes/ai.js +51 -1
  187. package/dist/src/routes/ai.js.map +1 -1
  188. package/dist/src/routes/app-grants.d.ts.map +1 -1
  189. package/dist/src/routes/app-grants.js +5 -0
  190. package/dist/src/routes/app-grants.js.map +1 -1
  191. package/dist/src/routes/apps/drafts.d.ts +6 -0
  192. package/dist/src/routes/apps/drafts.d.ts.map +1 -1
  193. package/dist/src/routes/apps/drafts.js +133 -1
  194. package/dist/src/routes/apps/drafts.js.map +1 -1
  195. package/dist/src/routes/apps/read.d.ts.map +1 -1
  196. package/dist/src/routes/apps/read.js +38 -1
  197. package/dist/src/routes/apps/read.js.map +1 -1
  198. package/dist/src/routes/auth-otk.d.ts +28 -0
  199. package/dist/src/routes/auth-otk.d.ts.map +1 -0
  200. package/dist/src/routes/auth-otk.js +190 -0
  201. package/dist/src/routes/auth-otk.js.map +1 -0
  202. package/dist/src/routes/auth.d.ts +17 -0
  203. package/dist/src/routes/auth.d.ts.map +1 -1
  204. package/dist/src/routes/auth.js +44 -153
  205. package/dist/src/routes/auth.js.map +1 -1
  206. package/dist/src/routes/bootstrap.d.ts +6 -0
  207. package/dist/src/routes/bootstrap.d.ts.map +1 -1
  208. package/dist/src/routes/bootstrap.js +47 -20
  209. package/dist/src/routes/bootstrap.js.map +1 -1
  210. package/dist/src/routes/chat.d.ts +23 -0
  211. package/dist/src/routes/chat.d.ts.map +1 -0
  212. package/dist/src/routes/chat.js +165 -0
  213. package/dist/src/routes/chat.js.map +1 -0
  214. package/dist/src/routes/commerce.js +4 -4
  215. package/dist/src/routes/commerce.js.map +1 -1
  216. package/dist/src/routes/datapackages.d.ts +35 -0
  217. package/dist/src/routes/datapackages.d.ts.map +1 -0
  218. package/dist/src/routes/datapackages.js +217 -0
  219. package/dist/src/routes/datapackages.js.map +1 -0
  220. package/dist/src/routes/disputes.d.ts +8 -0
  221. package/dist/src/routes/disputes.d.ts.map +1 -1
  222. package/dist/src/routes/disputes.js +52 -1
  223. package/dist/src/routes/disputes.js.map +1 -1
  224. package/dist/src/routes/ecosystem-apps-advisories.d.ts +16 -0
  225. package/dist/src/routes/ecosystem-apps-advisories.d.ts.map +1 -0
  226. package/dist/src/routes/ecosystem-apps-advisories.js +104 -0
  227. package/dist/src/routes/ecosystem-apps-advisories.js.map +1 -0
  228. package/dist/src/routes/ecosystem-apps.d.ts +6 -0
  229. package/dist/src/routes/ecosystem-apps.d.ts.map +1 -1
  230. package/dist/src/routes/ecosystem-apps.js +31 -99
  231. package/dist/src/routes/ecosystem-apps.js.map +1 -1
  232. package/dist/src/routes/extensions/actions.d.ts.map +1 -1
  233. package/dist/src/routes/extensions/actions.js +29 -1
  234. package/dist/src/routes/extensions/actions.js.map +1 -1
  235. package/dist/src/routes/federation-sync/routing.d.ts.map +1 -1
  236. package/dist/src/routes/federation-sync/routing.js +12 -3
  237. package/dist/src/routes/federation-sync/routing.js.map +1 -1
  238. package/dist/src/routes/glossary.js +1 -1
  239. package/dist/src/routes/glossary.js.map +1 -1
  240. package/dist/src/routes/home/track.d.ts +5 -1
  241. package/dist/src/routes/home/track.d.ts.map +1 -1
  242. package/dist/src/routes/home/track.js +20 -6
  243. package/dist/src/routes/home/track.js.map +1 -1
  244. package/dist/src/routes/instances/install.d.ts +3 -0
  245. package/dist/src/routes/instances/install.d.ts.map +1 -1
  246. package/dist/src/routes/instances/install.js +17 -24
  247. package/dist/src/routes/instances/install.js.map +1 -1
  248. package/dist/src/routes/libs.js +1 -1
  249. package/dist/src/routes/libs.js.map +1 -1
  250. package/dist/src/routes/markdown-mirrors.js +1 -1
  251. package/dist/src/routes/markdown-mirrors.js.map +1 -1
  252. package/dist/src/routes/odata.d.ts +36 -0
  253. package/dist/src/routes/odata.d.ts.map +1 -0
  254. package/dist/src/routes/odata.js +143 -0
  255. package/dist/src/routes/odata.js.map +1 -0
  256. package/dist/src/routes/openrouter.d.ts +4 -0
  257. package/dist/src/routes/openrouter.d.ts.map +1 -1
  258. package/dist/src/routes/openrouter.js +10 -1
  259. package/dist/src/routes/openrouter.js.map +1 -1
  260. package/dist/src/routes/organisms/gates.d.ts.map +1 -1
  261. package/dist/src/routes/organisms/gates.js +9 -2
  262. package/dist/src/routes/organisms/gates.js.map +1 -1
  263. package/dist/src/routes/portal.d.ts +1 -0
  264. package/dist/src/routes/portal.d.ts.map +1 -1
  265. package/dist/src/routes/portal.js +13 -0
  266. package/dist/src/routes/portal.js.map +1 -1
  267. package/dist/src/routes/schedules.d.ts +4 -0
  268. package/dist/src/routes/schedules.d.ts.map +1 -1
  269. package/dist/src/routes/schedules.js +9 -1
  270. package/dist/src/routes/schedules.js.map +1 -1
  271. package/dist/src/routes/storage-files.d.ts +23 -0
  272. package/dist/src/routes/storage-files.d.ts.map +1 -1
  273. package/dist/src/routes/storage-files.js +103 -82
  274. package/dist/src/routes/storage-files.js.map +1 -1
  275. package/dist/src/routes/workflows.d.ts.map +1 -1
  276. package/dist/src/routes/workflows.js +9 -1
  277. package/dist/src/routes/workflows.js.map +1 -1
  278. package/dist/src/server-bootstrap/routes-loader.d.ts +2 -0
  279. package/dist/src/server-bootstrap/routes-loader.d.ts.map +1 -1
  280. package/dist/src/server-bootstrap/routes-loader.js +20 -2
  281. package/dist/src/server-bootstrap/routes-loader.js.map +1 -1
  282. package/dist/src/server-bootstrap/service-init.d.ts.map +1 -1
  283. package/dist/src/server-bootstrap/service-init.js +12 -7
  284. package/dist/src/server-bootstrap/service-init.js.map +1 -1
  285. package/dist/src/server-bootstrap/static-files.d.ts.map +1 -1
  286. package/dist/src/server-bootstrap/static-files.js +44 -10
  287. package/dist/src/server-bootstrap/static-files.js.map +1 -1
  288. package/dist/src/services/ai-allowance.d.ts +82 -0
  289. package/dist/src/services/ai-allowance.d.ts.map +1 -0
  290. package/dist/src/services/ai-allowance.js +117 -0
  291. package/dist/src/services/ai-allowance.js.map +1 -0
  292. package/dist/src/services/ai-completion.d.ts +26 -0
  293. package/dist/src/services/ai-completion.d.ts.map +1 -1
  294. package/dist/src/services/ai-completion.js +41 -13
  295. package/dist/src/services/ai-completion.js.map +1 -1
  296. package/dist/src/services/ai-image.d.ts +70 -0
  297. package/dist/src/services/ai-image.d.ts.map +1 -0
  298. package/dist/src/services/ai-image.js +104 -0
  299. package/dist/src/services/ai-image.js.map +1 -0
  300. package/dist/src/services/ai-model-defaults.d.ts +45 -0
  301. package/dist/src/services/ai-model-defaults.d.ts.map +1 -0
  302. package/dist/src/services/ai-model-defaults.js +42 -0
  303. package/dist/src/services/ai-model-defaults.js.map +1 -0
  304. package/dist/src/services/ai-tool-setup.d.ts +5 -1
  305. package/dist/src/services/ai-tool-setup.d.ts.map +1 -1
  306. package/dist/src/services/ai-tool-setup.js +36 -0
  307. package/dist/src/services/ai-tool-setup.js.map +1 -1
  308. package/dist/src/services/ai-transcription.d.ts +5 -0
  309. package/dist/src/services/ai-transcription.d.ts.map +1 -1
  310. package/dist/src/services/ai-transcription.js +5 -2
  311. package/dist/src/services/ai-transcription.js.map +1 -1
  312. package/dist/src/services/app-agent-surfaces.js +4 -4
  313. package/dist/src/services/app-agent-surfaces.js.map +1 -1
  314. package/dist/src/services/app-draft-edit.d.ts +144 -0
  315. package/dist/src/services/app-draft-edit.d.ts.map +1 -0
  316. package/dist/src/services/app-draft-edit.js +203 -0
  317. package/dist/src/services/app-draft-edit.js.map +1 -0
  318. package/dist/src/services/auth-md.js +2 -2
  319. package/dist/src/services/auth-md.js.map +1 -1
  320. package/dist/src/services/board-write.d.ts +11 -3
  321. package/dist/src/services/board-write.d.ts.map +1 -1
  322. package/dist/src/services/board-write.js +24 -3
  323. package/dist/src/services/board-write.js.map +1 -1
  324. package/dist/src/services/chat-agent.d.ts +36 -0
  325. package/dist/src/services/chat-agent.d.ts.map +1 -0
  326. package/dist/src/services/chat-agent.js +123 -0
  327. package/dist/src/services/chat-agent.js.map +1 -0
  328. package/dist/src/services/chat-session.d.ts +58 -0
  329. package/dist/src/services/chat-session.d.ts.map +1 -0
  330. package/dist/src/services/chat-session.js +151 -0
  331. package/dist/src/services/chat-session.js.map +1 -0
  332. package/dist/src/services/chat-threads.d.ts +61 -0
  333. package/dist/src/services/chat-threads.d.ts.map +1 -0
  334. package/dist/src/services/chat-threads.js +137 -0
  335. package/dist/src/services/chat-threads.js.map +1 -0
  336. package/dist/src/services/config-schema.d.ts.map +1 -1
  337. package/dist/src/services/config-schema.js +2 -1
  338. package/dist/src/services/config-schema.js.map +1 -1
  339. package/dist/src/services/datapackage/contract.d.ts +198 -0
  340. package/dist/src/services/datapackage/contract.d.ts.map +1 -0
  341. package/dist/src/services/datapackage/contract.js +140 -0
  342. package/dist/src/services/datapackage/contract.js.map +1 -0
  343. package/dist/src/services/datapackage/ext-capability.d.ts +85 -0
  344. package/dist/src/services/datapackage/ext-capability.d.ts.map +1 -0
  345. package/dist/src/services/datapackage/ext-capability.js +72 -0
  346. package/dist/src/services/datapackage/ext-capability.js.map +1 -0
  347. package/dist/src/services/datapackage/odata.d.ts +92 -0
  348. package/dist/src/services/datapackage/odata.d.ts.map +1 -0
  349. package/dist/src/services/datapackage/odata.js +256 -0
  350. package/dist/src/services/datapackage/odata.js.map +1 -0
  351. package/dist/src/services/datapackage/odps.d.ts +24 -0
  352. package/dist/src/services/datapackage/odps.d.ts.map +1 -0
  353. package/dist/src/services/datapackage/odps.js +183 -0
  354. package/dist/src/services/datapackage/odps.js.map +1 -0
  355. package/dist/src/services/datapackage/store.d.ts +143 -0
  356. package/dist/src/services/datapackage/store.d.ts.map +1 -0
  357. package/dist/src/services/datapackage/store.js +533 -0
  358. package/dist/src/services/datapackage/store.js.map +1 -0
  359. package/dist/src/services/datapackage/table.d.ts +67 -0
  360. package/dist/src/services/datapackage/table.d.ts.map +1 -0
  361. package/dist/src/services/datapackage/table.js +0 -0
  362. package/dist/src/services/datapackage/table.js.map +1 -0
  363. package/dist/src/services/extension-ctx.d.ts +1 -0
  364. package/dist/src/services/extension-ctx.d.ts.map +1 -1
  365. package/dist/src/services/extension-ctx.js +31 -6
  366. package/dist/src/services/extension-ctx.js.map +1 -1
  367. package/dist/src/services/extension-files.d.ts +20 -0
  368. package/dist/src/services/extension-files.d.ts.map +1 -1
  369. package/dist/src/services/extension-files.js +9 -2
  370. package/dist/src/services/extension-files.js.map +1 -1
  371. package/dist/src/services/extension-lifecycle.d.ts +3 -0
  372. package/dist/src/services/extension-lifecycle.d.ts.map +1 -1
  373. package/dist/src/services/extension-lifecycle.js +2 -26
  374. package/dist/src/services/extension-lifecycle.js.map +1 -1
  375. package/dist/src/services/extension-runtime.d.ts +28 -2
  376. package/dist/src/services/extension-runtime.d.ts.map +1 -1
  377. package/dist/src/services/extension-runtime.js +22 -0
  378. package/dist/src/services/extension-runtime.js.map +1 -1
  379. package/dist/src/services/extension-schedules.d.ts +90 -0
  380. package/dist/src/services/extension-schedules.d.ts.map +1 -0
  381. package/dist/src/services/extension-schedules.js +123 -0
  382. package/dist/src/services/extension-schedules.js.map +1 -0
  383. package/dist/src/services/extension-system-run.d.ts +91 -0
  384. package/dist/src/services/extension-system-run.d.ts.map +1 -0
  385. package/dist/src/services/extension-system-run.js +100 -0
  386. package/dist/src/services/extension-system-run.js.map +1 -0
  387. package/dist/src/services/extension-upsert.d.ts +2 -0
  388. package/dist/src/services/extension-upsert.d.ts.map +1 -1
  389. package/dist/src/services/extension-upsert.js +6 -24
  390. package/dist/src/services/extension-upsert.js.map +1 -1
  391. package/dist/src/services/goose-acp.d.ts +84 -0
  392. package/dist/src/services/goose-acp.d.ts.map +1 -0
  393. package/dist/src/services/goose-acp.js +304 -0
  394. package/dist/src/services/goose-acp.js.map +1 -0
  395. package/dist/src/services/markdown-negotiation.js +1 -1
  396. package/dist/src/services/markdown-negotiation.js.map +1 -1
  397. package/dist/src/services/openrouter.d.ts +20 -1
  398. package/dist/src/services/openrouter.d.ts.map +1 -1
  399. package/dist/src/services/openrouter.js +66 -0
  400. package/dist/src/services/openrouter.js.map +1 -1
  401. package/dist/src/services/prompt-defaults/tiers-core.js +4 -4
  402. package/dist/src/services/scheduler-extension-job.d.ts +29 -6
  403. package/dist/src/services/scheduler-extension-job.d.ts.map +1 -1
  404. package/dist/src/services/scheduler-extension-job.js +29 -75
  405. package/dist/src/services/scheduler-extension-job.js.map +1 -1
  406. package/dist/src/services/scope-vocabulary-migration.d.ts +34 -1
  407. package/dist/src/services/scope-vocabulary-migration.d.ts.map +1 -1
  408. package/dist/src/services/scope-vocabulary-migration.js +60 -0
  409. package/dist/src/services/scope-vocabulary-migration.js.map +1 -1
  410. package/dist/src/services/screenshot-capture.d.ts +40 -1
  411. package/dist/src/services/screenshot-capture.d.ts.map +1 -1
  412. package/dist/src/services/screenshot-capture.js +142 -60
  413. package/dist/src/services/screenshot-capture.js.map +1 -1
  414. package/dist/src/services/skill-bundle/generator.js +1 -1
  415. package/dist/src/services/skill-bundle/generic-adapter.js +1 -1
  416. package/dist/src/services/skill-bundle/hermes-adapter.js +1 -1
  417. package/dist/src/services/storage-file-write.d.ts +36 -1
  418. package/dist/src/services/storage-file-write.d.ts.map +1 -1
  419. package/dist/src/services/storage-file-write.js +49 -3
  420. package/dist/src/services/storage-file-write.js.map +1 -1
  421. package/dist/src/services/task-outcome.d.ts +53 -0
  422. package/dist/src/services/task-outcome.d.ts.map +1 -0
  423. package/dist/src/services/task-outcome.js +28 -0
  424. package/dist/src/services/task-outcome.js.map +1 -0
  425. package/dist/src/services/workflow/engine-human.d.ts +15 -0
  426. package/dist/src/services/workflow/engine-human.d.ts.map +1 -1
  427. package/dist/src/services/workflow/engine-human.js +10 -1
  428. package/dist/src/services/workflow/engine-human.js.map +1 -1
  429. package/dist/src/services/workflow/engine-steps.d.ts +48 -3
  430. package/dist/src/services/workflow/engine-steps.d.ts.map +1 -1
  431. package/dist/src/services/workflow/engine-steps.js +361 -0
  432. package/dist/src/services/workflow/engine-steps.js.map +1 -1
  433. package/dist/src/services/workflow/engine.d.ts +1 -0
  434. package/dist/src/services/workflow/engine.d.ts.map +1 -1
  435. package/dist/src/services/workflow/engine.js +2 -1
  436. package/dist/src/services/workflow/engine.js.map +1 -1
  437. package/dist/src/services/workflow/store.d.ts.map +1 -1
  438. package/dist/src/services/workflow/store.js +60 -4
  439. package/dist/src/services/workflow/store.js.map +1 -1
  440. package/dist/src/services/write-guards.d.ts +27 -1
  441. package/dist/src/services/write-guards.d.ts.map +1 -1
  442. package/dist/src/services/write-guards.js +39 -9
  443. package/dist/src/services/write-guards.js.map +1 -1
  444. package/dist/src/storage/providers/postgres-kysely/db-types.d.ts +1 -0
  445. package/dist/src/storage/providers/postgres-kysely/db-types.d.ts.map +1 -1
  446. package/dist/src/storage/providers/postgres-kysely/methods/app-grants.d.ts +1 -0
  447. package/dist/src/storage/providers/postgres-kysely/methods/app-grants.d.ts.map +1 -1
  448. package/dist/src/storage/providers/postgres-kysely/methods/app-grants.js +3 -0
  449. package/dist/src/storage/providers/postgres-kysely/methods/app-grants.js.map +1 -1
  450. package/dist/src/storage/providers/postgres-kysely/methods/files.d.ts +2 -0
  451. package/dist/src/storage/providers/postgres-kysely/methods/files.d.ts.map +1 -1
  452. package/dist/src/storage/providers/postgres-kysely/methods/files.js +34 -2
  453. package/dist/src/storage/providers/postgres-kysely/methods/files.js.map +1 -1
  454. package/dist/src/storage/providers/postgres-kysely/migrations/0039_storage_file_utf8_verified.sql +19 -0
  455. package/dist/src/storage/providers/sqlite/index.d.ts.map +1 -1
  456. package/dist/src/storage/providers/sqlite/index.js +2 -1
  457. package/dist/src/storage/providers/sqlite/index.js.map +1 -1
  458. package/dist/src/storage/providers/sqlite/methods/apps.d.ts +1 -0
  459. package/dist/src/storage/providers/sqlite/methods/apps.d.ts.map +1 -1
  460. package/dist/src/storage/providers/sqlite/methods/apps.js +33 -28
  461. package/dist/src/storage/providers/sqlite/methods/apps.js.map +1 -1
  462. package/dist/src/storage/providers/sqlite/methods/identity-nodes.d.ts +1 -12
  463. package/dist/src/storage/providers/sqlite/methods/identity-nodes.d.ts.map +1 -1
  464. package/dist/src/storage/providers/sqlite/methods/identity-nodes.js +28 -135
  465. package/dist/src/storage/providers/sqlite/methods/identity-nodes.js.map +1 -1
  466. package/dist/src/storage/providers/sqlite/methods/storage-files.d.ts +38 -0
  467. package/dist/src/storage/providers/sqlite/methods/storage-files.d.ts.map +1 -0
  468. package/dist/src/storage/providers/sqlite/methods/storage-files.js +109 -0
  469. package/dist/src/storage/providers/sqlite/methods/storage-files.js.map +1 -0
  470. package/dist/src/storage/providers/sqlite/schema.d.ts.map +1 -1
  471. package/dist/src/storage/providers/sqlite/schema.js +134 -130
  472. package/dist/src/storage/providers/sqlite/schema.js.map +1 -1
  473. package/dist/src/storage/repositories/app-grant.repository.d.ts +11 -0
  474. package/dist/src/storage/repositories/app-grant.repository.d.ts.map +1 -1
  475. package/dist/src/storage/repositories/file.repository.d.ts +13 -0
  476. package/dist/src/storage/repositories/file.repository.d.ts.map +1 -1
  477. package/dist/src/storage/types/commerce.d.ts +6 -0
  478. package/dist/src/storage/types/commerce.d.ts.map +1 -1
  479. package/dist/src/utils/agent-footer.d.ts.map +1 -1
  480. package/dist/src/utils/agent-footer.js +1 -0
  481. package/dist/src/utils/agent-footer.js.map +1 -1
  482. package/dist/src/utils/app-content-type.d.ts +57 -3
  483. package/dist/src/utils/app-content-type.d.ts.map +1 -1
  484. package/dist/src/utils/app-content-type.js +81 -12
  485. package/dist/src/utils/app-content-type.js.map +1 -1
  486. package/dist/src/utils/env-config/sections-features.d.ts.map +1 -1
  487. package/dist/src/utils/env-config/sections-features.js +9 -3
  488. package/dist/src/utils/env-config/sections-features.js.map +1 -1
  489. package/dist/src/utils/file-download-headers.d.ts +5 -3
  490. package/dist/src/utils/file-download-headers.d.ts.map +1 -1
  491. package/dist/src/utils/file-download-headers.js +18 -5
  492. package/dist/src/utils/file-download-headers.js.map +1 -1
  493. package/dist/src/utils/http-range.d.ts +151 -0
  494. package/dist/src/utils/http-range.d.ts.map +1 -0
  495. package/dist/src/utils/http-range.js +190 -0
  496. package/dist/src/utils/http-range.js.map +1 -0
  497. package/dist/src/utils/page-head.d.ts +5 -0
  498. package/dist/src/utils/page-head.d.ts.map +1 -1
  499. package/dist/src/utils/page-head.js +10 -1
  500. package/dist/src/utils/page-head.js.map +1 -1
  501. package/dist/src/utils/reserved-keys.d.ts +4 -1
  502. package/dist/src/utils/reserved-keys.d.ts.map +1 -1
  503. package/dist/src/utils/reserved-keys.js +4 -1
  504. package/dist/src/utils/reserved-keys.js.map +1 -1
  505. package/dist/static/sdk-libs/datapackage/index.js +336 -0
  506. package/dist/static/sdk-libs/dist/aimeat-datapackage.js +305 -0
  507. package/package.json +10 -2
@@ -359,7 +359,7 @@ When the owner sends one of these slash-prefixed messages, treat it as a command
359
359
  When the owner assigns shared tags in the Data Access tab, use those tags as same-owner collaboration areas. Write shared project state, handoff notes, queues, and team context under \`agents.tag.<tag>.*\` with \`visibility: "owner"\` and \`tags: ["<tag>"]\`. Read the area with \`GET /v1/memory?owner_scope=true&prefix=agents.tag.<tag>.&tags=<tag>\` or the equivalent \`aimeat_memory_list\` parameters. Do not put private local secrets in shared tag memory.
360
360
 
361
361
  ### Publish Knowledge Artifacts
362
- If onboarding or later work produced structured research, documentation, datasets, or reusable knowledge, create a real knowledge package instead of writing an arbitrary \`research.*\` memory placeholder. Follow \`/llms.txt\` and use \`POST /v1/knowledge/import\` for a new package, \`aimeat_knowledge_contribute\` for entries in an existing package, and \`aimeat_storage_upload\` for large source files or attachments.
362
+ If onboarding or later work produced structured research, documentation, datasets, or reusable knowledge, create a real knowledge package instead of writing an arbitrary \`research.*\` memory placeholder. Follow \`/llms-full.txt\` and use \`POST /v1/knowledge/import\` for a new package, \`aimeat_knowledge_contribute\` for entries in an existing package, and \`aimeat_storage_upload\` for large source files or attachments.
363
363
 
364
364
  After import, report the package ID, manifest key, visibility, and whether it is catalog-listed so the owner can link it from Data Access if desired.
365
365
 
@@ -200,7 +200,7 @@ POST ${ctx.nodeUrl}/v1/memory
200
200
  If the owner assigns shared tags in the Data Access tab, those tags are collaboration labels for same-owner agents. Use \`agents.tag.<tag>.*\` keys for shared project state, handoff notes, queues, and team context. Write shared entries with \`visibility: "owner"\` and \`tags: ["<tag>"]\`, then list the area with \`owner_scope=true\`, \`prefix=agents.tag.<tag>.\`, and the same tag filter. Do not store private agent-local secrets in shared tag memory.
201
201
 
202
202
  ### Publish Knowledge Artifacts
203
- If setup or work produced structured research, documentation, datasets, or reusable knowledge, create a real knowledge package instead of a placeholder memory key. Follow \`/llms.txt\`: use \`POST /v1/knowledge/import\` for new packages, \`aimeat_knowledge_contribute\` for entries in existing packages, and \`aimeat_storage_upload\` for large source files or attachments. Report the package ID and manifest key to the owner.
203
+ If setup or work produced structured research, documentation, datasets, or reusable knowledge, create a real knowledge package instead of a placeholder memory key. Follow \`/llms-full.txt\`: use \`POST /v1/knowledge/import\` for new packages, \`aimeat_knowledge_contribute\` for entries in existing packages, and \`aimeat_storage_upload\` for large source files or attachments. Report the package ID and manifest key to the owner.
204
204
 
205
205
  ## References
206
206
  - references/api-overview.md -- Endpoints, auth, response format
@@ -150,7 +150,7 @@ POST ${ctx.nodeUrl}/v1/memory
150
150
  If the owner assigns shared tags in the Data Access tab, those tags are collaboration labels for same-owner agents. Use \`agents.tag.<tag>.*\` keys for shared project state, handoff notes, queues, and team context. Write shared entries with \`visibility: "owner"\` and \`tags: ["<tag>"]\`, then list the area with \`owner_scope=true\`, \`prefix=agents.tag.<tag>.\`, and the same tag filter. Do not store private agent-local secrets in shared tag memory.
151
151
 
152
152
  ### Publish Knowledge Artifacts
153
- If setup or work produced structured research, documentation, datasets, or reusable knowledge, create a real knowledge package instead of a placeholder memory key. Follow \`/llms.txt\`: use \`POST /v1/knowledge/import\` for new packages, \`aimeat_knowledge_contribute\` for entries in existing packages, and \`aimeat_storage_upload\` for large source files or attachments. Report the package ID and manifest key to the owner.
153
+ If setup or work produced structured research, documentation, datasets, or reusable knowledge, create a real knowledge package instead of a placeholder memory key. Follow \`/llms-full.txt\`: use \`POST /v1/knowledge/import\` for new packages, \`aimeat_knowledge_contribute\` for entries in existing packages, and \`aimeat_storage_upload\` for large source files or attachments. Report the package ID and manifest key to the owner.
154
154
 
155
155
  ## References
156
156
  See references/ directory for detailed API documentation:
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * @file src/services/storage-file-write.ts
3
- * @description Storing one binary file, once, for every surface that can store one.
3
+ * @description Storing and removing one binary file, once, for every surface that can do either.
4
4
  *
5
5
  * WHY THIS FILE EXISTS. `POST /v1/storage` and `aimeat_storage_upload` are the same capability, and
6
6
  * the two copies had drifted in the way that costs money and access rather than tidiness:
@@ -28,12 +28,19 @@
28
28
  * - StorageWriteDeps / StorageFileInput / StorageFileWriteResult — the contract
29
29
  * - writeStorageFile() — the inline write, in order, with the fence first
30
30
  * - mintStorageUploadUrl() — the presigned representation of the same write
31
+ * - removeStorageFile() — the delete, sharing the same key fence and change events
31
32
  * @usage
32
33
  * const out = await writeStorageFile({ storage, config, emitResourceUpdated }, gaii, input);
33
34
  * if (!out.ok) return renderRefusal(out); // each door renders its own way
34
35
  * @version-history
35
36
  * v1.0.0 — 2026-08-11 — Initial (August 2026 audit step 8, unit storage-files). Collapses
36
37
  * POST /v1/storage and aimeat_storage_upload onto one write.
38
+ * v1.1.0 — 2026-08-15 — removeStorageFile(): the delete, which had one door (DELETE /v1/storage)
39
+ * and no tool, so an agent could store a file over MCP and never take it back. Written here
40
+ * rather than in the new tool because the anonymous key fence was already a hand-copied second
41
+ * copy on that route, and because the route emitted only `files` while the upload emits `files`
42
+ * and `memory` — a delete moves the byte budget the memory view renders exactly as an upload
43
+ * does, and the two views disagreed about it.
37
44
  */
38
45
  import type { AimeatConfig } from '../config.js';
39
46
  import type { Storage, StorageFileRecord } from '../storage/interface.js';
@@ -78,6 +85,34 @@ export type StorageFileWriteResult = {
78
85
  } | StorageWriteRefusal;
79
86
  /** Store one file under `ownerGaii`, with every gate and side effect the capability carries. */
80
87
  export declare function writeStorageFile(deps: StorageWriteDeps, ownerGaii: string, input: StorageFileInput): Promise<StorageFileWriteResult>;
88
+ export interface StorageDeleteRefusal {
89
+ ok: false;
90
+ status: number;
91
+ code: 'INVALID_INPUT' | 'FORBIDDEN' | 'NOT_FOUND' | 'ACCESS_DENIED';
92
+ message: string;
93
+ }
94
+ export type StorageFileDeleteResult = {
95
+ ok: true;
96
+ key: string;
97
+ size: number;
98
+ mimeType: string;
99
+ visibility: StorageFileRecord['visibility'];
100
+ } | StorageDeleteRefusal;
101
+ /**
102
+ * Remove one file from `ownerGaii`'s namespace. Irreversible: there is no version history behind a
103
+ * stored file the way there is behind a memory record, so what this deletes is gone.
104
+ *
105
+ * THE ORDER IS THE POINT. Fence, then read, then compare, then delete — a refusal must happen before
106
+ * anything is removed, which is the same rule the write follows for the quota. It also lets the
107
+ * caller be told WHAT it deleted (size, type), because those are read before the row goes.
108
+ *
109
+ * WHY NO CROSS-OWNER FORM. Reading has one, and it is the reason aimeat_storage_download takes a
110
+ * reference: a file is keyed by (owner, key) and an agent legitimately reads its owner's uploads.
111
+ * Deleting does not get the same door. `getStorageFile(ownerGaii, key)` is namespaced to the caller,
112
+ * so a file belonging to anyone else is simply absent here, and the ownership comparison below is a
113
+ * second lock on a door that is already shut rather than the lock that shuts it.
114
+ */
115
+ export declare function removeStorageFile(deps: StorageWriteDeps, ownerGaii: string, key: string): Promise<StorageFileDeleteResult>;
81
116
  export interface StorageUploadUrlInput {
82
117
  key: string;
83
118
  mimeType?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"storage-file-write.d.ts","sourceRoot":"","sources":["../../../src/services/storage-file-write.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,KAAK,EAAE,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAM1E;+EAC+E;AAC/E,eAAO,MAAM,8BAA8B,OAAO,CAAC;AAEnD,0EAA0E;AAC1E,MAAM,WAAW,gBAAgB;IAC7B,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,YAAY,CAAC;IACrB,gFAAgF;IAChF,mBAAmB,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAC1D,uBAAuB,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CACpD;AAED,MAAM,WAAW,mBAAmB;IAChC,EAAE,EAAE,KAAK,CAAC;IACV,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,eAAe,GAAG,WAAW,GAAG,gBAAgB,CAAC;IACvD,OAAO,EAAE,MAAM,CAAC;IAChB;;;;OAIG;IACH,KAAK,CAAC,EAAE,UAAU,GAAG,SAAS,CAAC;CAClC;AAED,MAAM,WAAW,gBAAgB;IAC7B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,iBAAiB,CAAC,YAAY,CAAC,CAAC;IAC7C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,wFAAwF;IACxF,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,MAAM,sBAAsB,GAC5B;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,iBAAiB,CAAC;IAAC,cAAc,EAAE,MAAM,CAAA;CAAE,GAC7D,mBAAmB,CAAC;AAmB1B,gGAAgG;AAChG,wBAAsB,gBAAgB,CAClC,IAAI,EAAE,gBAAgB,EACtB,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,gBAAgB,GACxB,OAAO,CAAC,sBAAsB,CAAC,CA2DjC;AAED,MAAM,WAAW,qBAAqB;IAClC,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,0EAA0E;IAC1E,YAAY,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,MAAM,sBAAsB,GAC5B;IACE,EAAE,EAAE,IAAI,CAAC;IACT,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,gBAAgB,EAAE,MAAM,CAAC;CAC5B,GACC,mBAAmB,CAAC;AAE1B;;;;GAIG;AACH,wBAAsB,oBAAoB,CACtC,IAAI,EAAE,gBAAgB,EACtB,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,qBAAqB,GAC7B,OAAO,CAAC,sBAAsB,CAAC,CAgCjC"}
1
+ {"version":3,"file":"storage-file-write.d.ts","sourceRoot":"","sources":["../../../src/services/storage-file-write.ts"],"names":[],"mappings":"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"}
@@ -6,8 +6,9 @@ import { isAnonymousGaii } from '../routes/memory/shared.js';
6
6
  * the token is signed with are the same value, so they cannot drift apart. */
7
7
  export const STORAGE_UPLOAD_URL_TTL_SECONDS = 3600;
8
8
  /**
9
- * May this principal write this key at all. Both representations of the upload run it, which is the
10
- * point: the fence is on the write, not on the shape the caller happens to ask for.
9
+ * May this principal touch this key at all. Every representation of the upload runs it, and so does
10
+ * the delete, which is the point: the fence is on the act, not on the shape the caller happens to
11
+ * ask for. The DELETE route carried its own copy of this until v1.1.0.
11
12
  */
12
13
  function checkKey(ownerGaii, key) {
13
14
  if (!key) {
@@ -16,7 +17,7 @@ function checkKey(ownerGaii, key) {
16
17
  if (isAnonymousGaii(ownerGaii) && !key.startsWith('anonymous/')) {
17
18
  return {
18
19
  ok: false, status: 403, code: 'FORBIDDEN',
19
- message: 'Anonymous agents can only upload to keys prefixed with "anonymous/"',
20
+ message: 'Anonymous agents can only use keys prefixed with "anonymous/"',
20
21
  };
21
22
  }
22
23
  return null;
@@ -74,6 +75,51 @@ export async function writeStorageFile(deps, ownerGaii, input) {
74
75
  emitChange('memory');
75
76
  return { ok: true, file, overageMorsels: quota.overageMorsels };
76
77
  }
78
+ /**
79
+ * Remove one file from `ownerGaii`'s namespace. Irreversible: there is no version history behind a
80
+ * stored file the way there is behind a memory record, so what this deletes is gone.
81
+ *
82
+ * THE ORDER IS THE POINT. Fence, then read, then compare, then delete — a refusal must happen before
83
+ * anything is removed, which is the same rule the write follows for the quota. It also lets the
84
+ * caller be told WHAT it deleted (size, type), because those are read before the row goes.
85
+ *
86
+ * WHY NO CROSS-OWNER FORM. Reading has one, and it is the reason aimeat_storage_download takes a
87
+ * reference: a file is keyed by (owner, key) and an agent legitimately reads its owner's uploads.
88
+ * Deleting does not get the same door. `getStorageFile(ownerGaii, key)` is namespaced to the caller,
89
+ * so a file belonging to anyone else is simply absent here, and the ownership comparison below is a
90
+ * second lock on a door that is already shut rather than the lock that shuts it.
91
+ */
92
+ export async function removeStorageFile(deps, ownerGaii, key) {
93
+ const { storage } = deps;
94
+ const fenced = checkKey(ownerGaii, key);
95
+ if (fenced)
96
+ return fenced;
97
+ const existing = await storage.getStorageFile(ownerGaii, key);
98
+ if (!existing) {
99
+ return {
100
+ ok: false, status: 404, code: 'NOT_FOUND',
101
+ message: `File not found in your namespace: ${key}. This deletes only your own files — a file someone else owns is not reachable here, whatever you may be allowed to read.`,
102
+ };
103
+ }
104
+ if (existing.ownerGaii !== ownerGaii) {
105
+ return { ok: false, status: 403, code: 'ACCESS_DENIED', message: 'You can only delete your own files' };
106
+ }
107
+ const deleted = await storage.deleteStorageFile(ownerGaii, key);
108
+ if (!deleted) {
109
+ // The row was there a moment ago and is not now. Another door removed it in between, which
110
+ // is the caller's desired end state, but saying "deleted" would claim work we did not do.
111
+ return { ok: false, status: 404, code: 'NOT_FOUND', message: `File not found: ${key}` };
112
+ }
113
+ deps.emitResourceUpdated?.(ownerGaii, `aimeat://storage/${encodeURIComponent(key)}`);
114
+ deps.emitResourceListChanged?.(ownerGaii);
115
+ // Both views, for the same reason the write emits both: the file leaves the files list AND frees
116
+ // bytes in the budget the memory view renders. The route emitted only 'files'.
117
+ emitChange('files');
118
+ emitChange('memory');
119
+ return {
120
+ ok: true, key, size: existing.size, mimeType: existing.mimeType, visibility: existing.visibility,
121
+ };
122
+ }
77
123
  /**
78
124
  * Mint a presigned URL for the same write. The options the caller states here ride in the SIGNED
79
125
  * token (PRESIGNED_META_KEYS.storage) and are applied by PUT /v1/upload/:token, so what was asked
@@ -1 +1 @@
1
- {"version":3,"file":"storage-file-write.js","sourceRoot":"","sources":["../../../src/services/storage-file-write.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"storage-file-write.js","sourceRoot":"","sources":["../../../src/services/storage-file-write.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,53 @@
1
+ /**
2
+ * @file src/services/task-outcome.ts
3
+ * @description What a finished task actually produced, in one place, for every door that reports a
4
+ * task.
5
+ *
6
+ * THE HOLE THIS CLOSES, and it was found by a crew rather than by us. A task-runner completed a
7
+ * real job in 104 seconds, the task went to `done`, and the answer could not be read back from
8
+ * anywhere: `aimeat_task_get` returns fifteen fields and not one of them is the output. The
9
+ * completion MESSAGE — the agent's own sentence about what it did — is written to the 'completed'
10
+ * event and nowhere else, and `deliverableKey` is on the record but was never returned. So the
11
+ * caller saw `status: "done"` and had to already know that a second, differently-shaped endpoint
12
+ * exists before it could find out what happened. A finished task whose result nobody can reach is
13
+ * indistinguishable from one that produced nothing.
14
+ *
15
+ * WHY NOT A NEW COLUMN. The two facts already exist: the sentence is on the terminal event, the
16
+ * pointer is on the record. A `completionMessage` column would be a third copy of something
17
+ * stored twice, on both providers, with a migration — to fix a READ. The read is what was broken.
18
+ *
19
+ * The deliverable is returned as an ADDRESS, not as content. It is a memory key under the agent's
20
+ * own namespace and may be any size; a task read that inlined it would make every listing as
21
+ * expensive as its largest output.
22
+ * @structure taskOutcome() — the terminal event plus the deliverable pointer, or null while running
23
+ * @usage
24
+ * import { taskOutcome } from '../services/task-outcome.js';
25
+ * const outcome = await taskOutcome(storage, task); // null unless done/failed
26
+ * @version-history
27
+ * v1.0.0 — 2026-08-16 — Initial. Reported by crewaimeat-dev against aimeat-crewai 0.20.0: a
28
+ * completed task-runner leaves its output where the caller cannot read it.
29
+ */
30
+ import type { Storage, AgentTaskRecord } from '../storage/interface.js';
31
+ /** What a finished task produced. Null while it is still running — an unfinished task has no
32
+ * outcome, and reporting an empty one would read as "finished with nothing". */
33
+ export interface TaskOutcome {
34
+ /** 'done' or 'failed' — the same word the terminal event carries. */
35
+ state: 'done' | 'failed';
36
+ /** The agent's own sentence about what it did, from the terminal event. */
37
+ message: string;
38
+ at: string;
39
+ /** Memory key under the AGENT's namespace where the deliverable was published, when one was
40
+ * named. The pointer, never the content: an output may be megabytes. */
41
+ deliverable_key?: string;
42
+ /** A ready-to-follow address for that key, so a caller does not have to assemble one. */
43
+ deliverable_url?: string;
44
+ }
45
+ /**
46
+ * The outcome of a task, or null if it has not finished.
47
+ *
48
+ * Reads the events newest-first and takes the first terminal one, so a task that was completed,
49
+ * reopened and completed again reports the LATEST completion rather than the first — which is what
50
+ * "what happened" means to whoever is asking.
51
+ */
52
+ export declare function taskOutcome(storage: Storage, task: AgentTaskRecord): Promise<TaskOutcome | null>;
53
+ //# sourceMappingURL=task-outcome.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task-outcome.d.ts","sourceRoot":"","sources":["../../../src/services/task-outcome.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,OAAO,KAAK,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAExE;iFACiF;AACjF,MAAM,WAAW,WAAW;IACxB,qEAAqE;IACrE,KAAK,EAAE,MAAM,GAAG,QAAQ,CAAC;IACzB,2EAA2E;IAC3E,OAAO,EAAE,MAAM,CAAC;IAChB,EAAE,EAAE,MAAM,CAAC;IACX;6EACyE;IACzE,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,yFAAyF;IACzF,eAAe,CAAC,EAAE,MAAM,CAAC;CAC5B;AAID;;;;;;GAMG;AACH,wBAAsB,WAAW,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,CAmBtG"}
@@ -0,0 +1,28 @@
1
+ const TERMINAL = new Set(['completed', 'failed']);
2
+ /**
3
+ * The outcome of a task, or null if it has not finished.
4
+ *
5
+ * Reads the events newest-first and takes the first terminal one, so a task that was completed,
6
+ * reopened and completed again reports the LATEST completion rather than the first — which is what
7
+ * "what happened" means to whoever is asking.
8
+ */
9
+ export async function taskOutcome(storage, task) {
10
+ if (task.status !== 'done' && task.status !== 'failed')
11
+ return null;
12
+ const { events } = await storage.listTaskEvents(task.id, { page: 1, perPage: 50 });
13
+ // listTaskEvents orders oldest-first; the terminal one is at the end.
14
+ const terminal = [...events].reverse().find(e => TERMINAL.has(e.type));
15
+ return {
16
+ state: task.status,
17
+ // A task can reach a terminal state without a terminal event — an owner-side cancel, an
18
+ // older record from before the event existed. Saying so beats an empty string that reads
19
+ // like an agent who had nothing to report.
20
+ message: terminal?.message ?? '(no completion message was recorded)',
21
+ at: terminal?.timestamp ?? task.completedAt ?? task.updatedAt,
22
+ ...(task.deliverableKey ? {
23
+ deliverable_key: task.deliverableKey,
24
+ deliverable_url: `/v1/memory/${encodeURIComponent(task.agentGaii)}/${encodeURIComponent(task.deliverableKey)}`,
25
+ } : {}),
26
+ };
27
+ }
28
+ //# sourceMappingURL=task-outcome.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task-outcome.js","sourceRoot":"","sources":["../../../src/services/task-outcome.ts"],"names":[],"mappings":"AA8CA,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC,CAAC;AAElD;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,OAAgB,EAAE,IAAqB;IACrE,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM,IAAI,IAAI,CAAC,MAAM,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IAEpE,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,OAAO,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;IACnF,sEAAsE;IACtE,MAAM,QAAQ,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IAEvE,OAAO;QACH,KAAK,EAAE,IAAI,CAAC,MAAM;QAClB,wFAAwF;QACxF,yFAAyF;QACzF,2CAA2C;QAC3C,OAAO,EAAE,QAAQ,EAAE,OAAO,IAAI,sCAAsC;QACpE,EAAE,EAAE,QAAQ,EAAE,SAAS,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,SAAS;QAC7D,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC;YACtB,eAAe,EAAE,IAAI,CAAC,cAAc;YACpC,eAAe,EAAE,cAAc,kBAAkB,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,kBAAkB,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE;SACjH,CAAC,CAAC,CAAC,EAAE,CAAC;KACV,CAAC;AACN,CAAC"}
@@ -6,6 +6,13 @@
6
6
  * Extracted from engine.ts to satisfy max-file-lines.
7
7
  * @usage import { validateHumanAnswer, applyHumanAnswer } from './engine-human.js';
8
8
  * @version-history
9
+ * v1.2.0 — 2026-08-15 — The upgrade requires a PERSON, which the paragraph guarding it always
10
+ * said and the code never asked. An agent could call aimeat_workflow_answer on the step holding
11
+ * its own draft and the node stamped that content 'editorial-control' with the note "reviewed
12
+ * by <the agent>", turning the public disclosure label from "no human editorial review" into
13
+ * the reviewed wording with nobody having read the bytes. `byIsHuman` is set by the door that
14
+ * knows the principal class and absent everywhere else, so agents keep answering and stop
15
+ * upgrading. E2E test-quality audit finding A18.
9
16
  * v1.1.0 — 2026-08-01 — TARGET-058 Phase 4: a human-input step that names `reviews_key` re-stamps
10
17
  * the reviewed content with humanInvolvement 'editorial-control'. This is the ONLY place in
11
18
  * the engine that may upgrade that field, and a watchdog timeout default never does — nobody
@@ -20,6 +27,14 @@ export interface HumanAnswerValue {
20
27
  pick: string;
21
28
  other?: string;
22
29
  by: string;
30
+ /**
31
+ * Was the answerer a PERSON? Absent means no, deliberately: the upgrade below is the one thing in
32
+ * the engine that can turn "no human editorial review" into "reviewed by a person", so a caller
33
+ * has to say so on purpose. `by` alone cannot answer it — an agent's GAII and a human's GHII are
34
+ * both just strings here, and inferring humanness from their shape would break the moment a new
35
+ * principal class arrives.
36
+ */
37
+ byIsHuman?: boolean;
23
38
  }
24
39
  /**
25
40
  * Validate an incoming answer against the question PINNED at ask time (not the current def — a
@@ -1 +1 @@
1
- {"version":3,"file":"engine-human.d.ts","sourceRoot":"","sources":["../../../../src/services/workflow/engine-human.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAGpD,OAAO,KAAK,EAAE,WAAW,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAC;AAE3F,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,EAAE,EAAE,MAAM,CAAC;CACZ;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,qBAAqB,EAAE,MAAM,EAAE;IAAE,KAAK,EAAE,MAAM,EAAE,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,GAAG,IAAI,CAOxH;AAED;;;;GAIG;AACH,wBAAsB,gBAAgB,CACpC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,gBAAgB,GACjH,OAAO,CAAC,IAAI,CAAC,CAwDf"}
1
+ {"version":3,"file":"engine-human.d.ts","sourceRoot":"","sources":["../../../../src/services/workflow/engine-human.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAGpD,OAAO,KAAK,EAAE,WAAW,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAC;AAE3F,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,EAAE,EAAE,MAAM,CAAC;IACX;;;;;;OAMG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,qBAAqB,EAAE,MAAM,EAAE;IAAE,KAAK,EAAE,MAAM,EAAE,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,GAAG,IAAI,CAOxH;AAED;;;;GAIG;AACH,wBAAsB,gBAAgB,CACpC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,gBAAgB,GACjH,OAAO,CAAC,IAAI,CAAC,CAiEf"}
@@ -52,7 +52,16 @@ export async function applyHumanAnswer(storage, config, ownerGhii, run, stepId,
52
52
  // A TIMEOUT DEFAULT IS NOT REVIEW. When the watchdog synthesises an answer (`by: 'timeout-default'`)
53
53
  // nobody read anything, and upgrading on that path would manufacture editorial control out of
54
54
  // silence — which is the precise failure this whole design exists to prevent.
55
- if (action?.reviews_key && ans.by && ans.by !== 'timeout-default') {
55
+ //
56
+ // AND NEITHER IS AN AGENT ANSWERING ITS OWN STEP. The paragraph above says "a person reads the
57
+ // substance", and until 2026-08-15 nothing enforced the person: the very agent whose draft was
58
+ // parked for review called aimeat_workflow_answer on it and the node stamped that content
59
+ // `humanInvolvement: 'editorial-control'` with the note "reviewed by <the agent>", flipping the
60
+ // public disclosure label from "no human editorial review" to the reviewed wording with nobody
61
+ // having seen the bytes. That is a false statement about provenance, which is the one thing this
62
+ // record exists to make true. `byIsHuman` is set by the door that knows the principal class; the
63
+ // agent surface and the watchdog leave it unset, so both keep answering and neither upgrades.
64
+ if (action?.reviews_key && ans.by && ans.by !== 'timeout-default' && ans.byIsHuman === true) {
56
65
  const reviewedKey = (run.keyPrefix ?? '') + template(action.reviews_key, run.vars);
57
66
  const reviewed = await storage.getMemory(ownerGhii, reviewedKey);
58
67
  if (reviewed) {
@@ -1 +1 @@
1
- {"version":3,"file":"engine-human.js","sourceRoot":"","sources":["../../../../src/services/workflow/engine-human.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"engine-human.js","sourceRoot":"","sources":["../../../../src/services/workflow/engine-human.ts"],"names":[],"mappings":"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"}
@@ -24,10 +24,55 @@ export declare function dispatchStep(deps: StepDeps, ownerGhii: string, run: Wor
24
24
  * under the lock by tick(), so onPushTerminal (which also locks) advances it safely on the reply.
25
25
  * The workflow owner is the caller GHII (the human pays / is the AIMEAT-side principal).
26
26
  */
27
- export declare function dispatchEcosystemStep(deps: StepDeps, ownerGhii: string, run: WorkflowRun, step: WorkflowStep, action: Exclude<WorkflowStep['action'], undefined | {
28
- kind: 'agent';
27
+ export declare function dispatchEcosystemStep(deps: StepDeps, ownerGhii: string, run: WorkflowRun, step: WorkflowStep, action: Extract<NonNullable<WorkflowStep['action']>, {
28
+ kind: 'export-out';
29
29
  } | {
30
- kind: 'human-input';
30
+ kind: 'trigger-geai';
31
+ }>, onPushTerminal: OnPushTerminal): void;
32
+ /**
33
+ * Run an `extension` step: one of the OWNER'S OWN extension actions, here on this node, in the
34
+ * QuickJS sandbox. No agent has to be online, no tunnel has to be up, and no model is called.
35
+ *
36
+ * WHY THIS EXISTS. An extension action was already callable over HTTP, over MCP and on a clock, and
37
+ * was the one capability a workflow could not reach — so a pipeline whose deterministic half lives
38
+ * in an extension had to route it through an agent that did nothing but relay, which needs the agent
39
+ * to be online and puts a model in the path of work that has no judgement in it.
40
+ *
41
+ * IDENTITY. The caller is the RUN'S OWNER GHII (an ecosystem step already names them for the same
42
+ * reason: the human is the AIMEAT-side principal), with the role 'operator' because nobody is
43
+ * sitting at a screen. Files land in the owner's namespace, so a package produced by a workflow step
44
+ * sits at the same permanent address as one produced on a clock, by an agent, or from the app.
45
+ *
46
+ * Fire-and-forget, exactly like the ecosystem path: tick() has already marked the step 'dispatched'
47
+ * and persisted it under the run lock, and onPushTerminal takes the lock again to advance the run.
48
+ * A throw becomes `ok: false`, which is `output-red` (or a retry) — never a quiet green.
49
+ */
50
+ export declare function dispatchExtensionStep(deps: StepDeps, ownerGhii: string, run: WorkflowRun, step: WorkflowStep, action: Extract<NonNullable<WorkflowStep['action']>, {
51
+ kind: 'extension';
52
+ }>, onPushTerminal: OnPushTerminal): void;
53
+ /**
54
+ * Run a `datapackage` step: publish one version from what an earlier step wrote.
55
+ *
56
+ * THIS IS THE BINDING A REPEATING PACKAGE NEEDS, and it is the join no other component could make.
57
+ * An extension step lands its return value in the OWNER'S namespace as a private record — right,
58
+ * because an intermediate result is not something to publish — and that is precisely what the
59
+ * sandbox cannot read back: `ctx.memory.get` sees `ext:{name}`, `ctx.memory.getPublic` returns only
60
+ * public records. So the two halves, "call the producer" and "publish what it returned", can only
61
+ * meet in the engine, which already runs as the owner and already wrote that key.
62
+ *
63
+ * It calls the same publishPackage() the REST route and the sandbox capability call, so a package a
64
+ * workflow refreshes weekly is the same object, at the same kind of address, as one a person
65
+ * published from the app. The producer block records that a workflow made it, and the schedule that
66
+ * drives the workflow rides along — a buyer choosing between two packages can see which is which.
67
+ *
68
+ * REFUSALS ARE RED, and loudly. A quality-gate refusal throws with the coordinates in the message:
69
+ * nothing was written, the package still stands on its previous version, and the step is red rather
70
+ * than green-with-nothing-produced. `recordFailure` puts the same sentence on the package's own
71
+ * pointer, so an owner looking at the package — not at a run log — learns that the latest attempt
72
+ * broke and which version they are still on.
73
+ */
74
+ export declare function dispatchDataPackageStep(deps: StepDeps, ownerGhii: string, run: WorkflowRun, step: WorkflowStep, action: Extract<NonNullable<WorkflowStep['action']>, {
75
+ kind: 'datapackage';
31
76
  }>, onPushTerminal: OnPushTerminal): void;
32
77
  /**
33
78
  * Deliver a human-input step's question to the owner and return the human bookkeeping record the
@@ -1 +1 @@
1
- {"version":3,"file":"engine-steps.d.ts","sourceRoot":"","sources":["../../../../src/services/workflow/engine-steps.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"engine-steps.d.ts","sourceRoot":"","sources":["../../../../src/services/workflow/engine-steps.ts"],"names":[],"mappings":"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"}