aimeat 3.2.0 → 3.3.1

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 (534) hide show
  1. package/README.md +1 -1
  2. package/dist/.env.example +58 -1
  3. package/dist/build-stamp.json +4 -4
  4. package/dist/locales/en.json +41 -1
  5. package/dist/locales/es.json +41 -1
  6. package/dist/locales/fi.json +43 -3
  7. package/dist/public/changelog.json +12 -0
  8. package/dist/public/css/views/chat.css +388 -0
  9. package/dist/public/js/services/chat.js +190 -0
  10. package/dist/public/js/services/speech-reader.js +26 -0
  11. package/dist/public/lib/VENDORED.md +1 -0
  12. package/dist/public/lib/duckdb-wasm@1.32.0/duckdb-browser-eh.worker.js +14 -0
  13. package/dist/public/lib/duckdb-wasm@1.32.0/duckdb-browser.js +23 -0
  14. package/dist/public/lib/duckdb-wasm@1.32.0/duckdb-eh.wasm +0 -0
  15. package/dist/public/lib/duckdb-wasm@1.32.0/extensions/v1.4.3/wasm_eh/parquet.duckdb_extension.wasm +0 -0
  16. package/dist/public/lib/vendored-assets.json +19 -0
  17. package/dist/public/llms-full-template.txt +2706 -0
  18. package/dist/public/llms-index-template.txt +60 -0
  19. package/dist/public/robots.node.txt +64 -23
  20. package/dist/public/spa.html +8 -1
  21. package/dist/public/views/chat/parts.js +257 -0
  22. package/dist/public/views/chat.js +327 -0
  23. package/dist/public/views/landing.js +24 -1
  24. package/dist/public/views/profile/agents/scope-model.js +320 -315
  25. package/dist/scripts/audit-mcp-schemas.js +50 -0
  26. package/dist/scripts/audit-mcp-schemas.js.map +1 -1
  27. package/dist/scripts/build-sdk-libs.d.ts.map +1 -1
  28. package/dist/scripts/build-sdk-libs.js +1 -0
  29. package/dist/scripts/build-sdk-libs.js.map +1 -1
  30. package/dist/scripts/check-ai-disclosure.d.ts +1 -1
  31. package/dist/scripts/check-ai-disclosure.d.ts.map +1 -1
  32. package/dist/scripts/check-ai-disclosure.js +30 -3
  33. package/dist/scripts/check-ai-disclosure.js.map +1 -1
  34. package/dist/scripts/check-denial-coverage.d.ts +29 -0
  35. package/dist/scripts/check-denial-coverage.d.ts.map +1 -0
  36. package/dist/scripts/check-denial-coverage.js +237 -0
  37. package/dist/scripts/check-denial-coverage.js.map +1 -0
  38. package/dist/scripts/check-ext-entrypoints.js +14 -2
  39. package/dist/scripts/check-ext-entrypoints.js.map +1 -1
  40. package/dist/scripts/check-outbound-fetch.d.ts.map +1 -1
  41. package/dist/scripts/check-outbound-fetch.js +16 -2
  42. package/dist/scripts/check-outbound-fetch.js.map +1 -1
  43. package/dist/scripts/check-sse-parity.js +14 -0
  44. package/dist/scripts/check-sse-parity.js.map +1 -1
  45. package/dist/scripts/indexnow.js +9 -7
  46. package/dist/scripts/indexnow.js.map +1 -1
  47. package/dist/src/auth/ai-gate.d.ts +25 -0
  48. package/dist/src/auth/ai-gate.d.ts.map +1 -0
  49. package/dist/src/auth/ai-gate.js +21 -0
  50. package/dist/src/auth/ai-gate.js.map +1 -0
  51. package/dist/src/auth/middleware.d.ts +7 -0
  52. package/dist/src/auth/middleware.d.ts.map +1 -1
  53. package/dist/src/auth/middleware.js +15 -21
  54. package/dist/src/auth/middleware.js.map +1 -1
  55. package/dist/src/cli/connect/mcp/tools/agent-tasks.d.ts +4 -0
  56. package/dist/src/cli/connect/mcp/tools/agent-tasks.d.ts.map +1 -1
  57. package/dist/src/cli/connect/mcp/tools/agent-tasks.js +11 -1
  58. package/dist/src/cli/connect/mcp/tools/agent-tasks.js.map +1 -1
  59. package/dist/src/cli/connect/mcp/tools/apps.d.ts.map +1 -1
  60. package/dist/src/cli/connect/mcp/tools/apps.js +88 -0
  61. package/dist/src/cli/connect/mcp/tools/apps.js.map +1 -1
  62. package/dist/src/cli/connect/mcp/tools/core.d.ts +7 -0
  63. package/dist/src/cli/connect/mcp/tools/core.d.ts.map +1 -1
  64. package/dist/src/cli/connect/mcp/tools/core.js +83 -4
  65. package/dist/src/cli/connect/mcp/tools/core.js.map +1 -1
  66. package/dist/src/cli/connect/onboarding-prompt.js +1 -1
  67. package/dist/src/cli/connect/skill-bundle.js +1 -1
  68. package/dist/src/cli/connect/tool-call-defs-agent.d.ts.map +1 -1
  69. package/dist/src/cli/connect/tool-call-defs-agent.js +38 -9
  70. package/dist/src/cli/connect/tool-call-defs-agent.js.map +1 -1
  71. package/dist/src/cli/connect/tool-call-defs-app-draft-edit.d.ts +21 -0
  72. package/dist/src/cli/connect/tool-call-defs-app-draft-edit.d.ts.map +1 -0
  73. package/dist/src/cli/connect/tool-call-defs-app-draft-edit.js +137 -0
  74. package/dist/src/cli/connect/tool-call-defs-app-draft-edit.js.map +1 -0
  75. package/dist/src/cli/connect/tool-call-defs-apps.d.ts.map +1 -1
  76. package/dist/src/cli/connect/tool-call-defs-apps.js +114 -25
  77. package/dist/src/cli/connect/tool-call-defs-apps.js.map +1 -1
  78. package/dist/src/cli/connect/tool-call-defs-core.d.ts +1 -0
  79. package/dist/src/cli/connect/tool-call-defs-core.d.ts.map +1 -1
  80. package/dist/src/cli/connect/tool-call-defs-core.js +179 -26
  81. package/dist/src/cli/connect/tool-call-defs-core.js.map +1 -1
  82. package/dist/src/cli/connect/tool-call-defs-organism.d.ts.map +1 -1
  83. package/dist/src/cli/connect/tool-call-defs-organism.js +20 -3
  84. package/dist/src/cli/connect/tool-call-defs-organism.js.map +1 -1
  85. package/dist/src/cli/connect/tool-call.d.ts.map +1 -1
  86. package/dist/src/cli/connect/tool-call.js +52 -1
  87. package/dist/src/cli/connect/tool-call.js.map +1 -1
  88. package/dist/src/config-types-ai.d.ts +76 -0
  89. package/dist/src/config-types-ai.d.ts.map +1 -0
  90. package/dist/src/config-types-ai.js +15 -0
  91. package/dist/src/config-types-ai.js.map +1 -0
  92. package/dist/src/config-types.d.ts +11 -2
  93. package/dist/src/config-types.d.ts.map +1 -1
  94. package/dist/src/config.d.ts.map +1 -1
  95. package/dist/src/config.js +25 -4
  96. package/dist/src/config.js.map +1 -1
  97. package/dist/src/data/builtin-skills.d.ts.map +1 -1
  98. package/dist/src/data/builtin-skills.js +3 -2
  99. package/dist/src/data/builtin-skills.js.map +1 -1
  100. package/dist/src/data/digital-signage-package.js +1 -1
  101. package/dist/src/data/library-packs/sdk.d.ts.map +1 -1
  102. package/dist/src/data/library-packs/sdk.js +76 -0
  103. package/dist/src/data/library-packs/sdk.js.map +1 -1
  104. package/dist/src/data/library-packs/vendored.d.ts.map +1 -1
  105. package/dist/src/data/library-packs/vendored.js +81 -0
  106. package/dist/src/data/library-packs/vendored.js.map +1 -1
  107. package/dist/src/data/library-packs.d.ts +2 -2
  108. package/dist/src/data/library-packs.js +2 -2
  109. package/dist/src/data/public-pages.d.ts +13 -0
  110. package/dist/src/data/public-pages.d.ts.map +1 -1
  111. package/dist/src/data/public-pages.js +153 -113
  112. package/dist/src/data/public-pages.js.map +1 -1
  113. package/dist/src/generated/api-types.d.ts +1808 -36
  114. package/dist/src/generated/api-types.d.ts.map +1 -1
  115. package/dist/src/index-start.d.ts.map +1 -1
  116. package/dist/src/index-start.js +3 -0
  117. package/dist/src/index-start.js.map +1 -1
  118. package/dist/src/mcp/agent-tasks.d.ts.map +1 -1
  119. package/dist/src/mcp/agent-tasks.js +5 -0
  120. package/dist/src/mcp/agent-tasks.js.map +1 -1
  121. package/dist/src/mcp/ai-image.d.ts +22 -0
  122. package/dist/src/mcp/ai-image.d.ts.map +1 -0
  123. package/dist/src/mcp/ai-image.js +60 -0
  124. package/dist/src/mcp/ai-image.js.map +1 -0
  125. package/dist/src/mcp/annotations.d.ts +5 -0
  126. package/dist/src/mcp/annotations.d.ts.map +1 -1
  127. package/dist/src/mcp/annotations.js +18 -0
  128. package/dist/src/mcp/annotations.js.map +1 -1
  129. package/dist/src/mcp/apps-draft-edit.d.ts +28 -0
  130. package/dist/src/mcp/apps-draft-edit.d.ts.map +1 -0
  131. package/dist/src/mcp/apps-draft-edit.js +164 -0
  132. package/dist/src/mcp/apps-draft-edit.js.map +1 -0
  133. package/dist/src/mcp/apps-screenshot.d.ts +26 -0
  134. package/dist/src/mcp/apps-screenshot.d.ts.map +1 -0
  135. package/dist/src/mcp/apps-screenshot.js +39 -0
  136. package/dist/src/mcp/apps-screenshot.js.map +1 -0
  137. package/dist/src/mcp/catalog/definitions/discovery-work-boards.d.ts +1 -0
  138. package/dist/src/mcp/catalog/definitions/discovery-work-boards.d.ts.map +1 -1
  139. package/dist/src/mcp/catalog/definitions/discovery-work-boards.js +40 -0
  140. package/dist/src/mcp/catalog/definitions/discovery-work-boards.js.map +1 -1
  141. package/dist/src/mcp/catalog/definitions/organisms-workspaces-apps.d.ts +3 -0
  142. package/dist/src/mcp/catalog/definitions/organisms-workspaces-apps.d.ts.map +1 -1
  143. package/dist/src/mcp/catalog/definitions/organisms-workspaces-apps.js +74 -0
  144. package/dist/src/mcp/catalog/definitions/organisms-workspaces-apps.js.map +1 -1
  145. package/dist/src/mcp/catalog/definitions/schedules-tasks-memory.d.ts.map +1 -1
  146. package/dist/src/mcp/catalog/definitions/schedules-tasks-memory.js +1 -0
  147. package/dist/src/mcp/catalog/definitions/schedules-tasks-memory.js.map +1 -1
  148. package/dist/src/mcp/catalog/scopes.d.ts.map +1 -1
  149. package/dist/src/mcp/catalog/scopes.js +19 -1
  150. package/dist/src/mcp/catalog/scopes.js.map +1 -1
  151. package/dist/src/mcp/catalog/surfaces.d.ts.map +1 -1
  152. package/dist/src/mcp/catalog/surfaces.js +18 -4
  153. package/dist/src/mcp/catalog/surfaces.js.map +1 -1
  154. package/dist/src/mcp/core-datapackage.d.ts +32 -0
  155. package/dist/src/mcp/core-datapackage.d.ts.map +1 -0
  156. package/dist/src/mcp/core-datapackage.js +188 -0
  157. package/dist/src/mcp/core-datapackage.js.map +1 -0
  158. package/dist/src/mcp/core-storage.d.ts +7 -3
  159. package/dist/src/mcp/core-storage.d.ts.map +1 -1
  160. package/dist/src/mcp/core-storage.js +27 -4
  161. package/dist/src/mcp/core-storage.js.map +1 -1
  162. package/dist/src/mcp/core.d.ts.map +1 -1
  163. package/dist/src/mcp/core.js +3 -0
  164. package/dist/src/mcp/core.js.map +1 -1
  165. package/dist/src/mcp/extensions.d.ts.map +1 -1
  166. package/dist/src/mcp/extensions.js +11 -1
  167. package/dist/src/mcp/extensions.js.map +1 -1
  168. package/dist/src/mcp/index.d.ts +9 -0
  169. package/dist/src/mcp/index.d.ts.map +1 -1
  170. package/dist/src/mcp/index.js +34 -0
  171. package/dist/src/mcp/index.js.map +1 -1
  172. package/dist/src/models/agent-task-schemas.d.ts.map +1 -1
  173. package/dist/src/models/agent-task-schemas.js +12 -1
  174. package/dist/src/models/agent-task-schemas.js.map +1 -1
  175. package/dist/src/models/workflow-schemas.d.ts +178 -1
  176. package/dist/src/models/workflow-schemas.d.ts.map +1 -1
  177. package/dist/src/models/workflow-schemas.js +75 -0
  178. package/dist/src/models/workflow-schemas.js.map +1 -1
  179. package/dist/src/routes/admin-extensions.d.ts +4 -0
  180. package/dist/src/routes/admin-extensions.d.ts.map +1 -1
  181. package/dist/src/routes/admin-extensions.js +135 -142
  182. package/dist/src/routes/admin-extensions.js.map +1 -1
  183. package/dist/src/routes/agent-conventions.d.ts.map +1 -1
  184. package/dist/src/routes/agent-conventions.js +4 -2
  185. package/dist/src/routes/agent-conventions.js.map +1 -1
  186. package/dist/src/routes/agent-docs.d.ts +4 -4
  187. package/dist/src/routes/agent-docs.js +145 -145
  188. package/dist/src/routes/agent-docs.js.map +1 -1
  189. package/dist/src/routes/agent-messages.d.ts +6 -0
  190. package/dist/src/routes/agent-messages.d.ts.map +1 -1
  191. package/dist/src/routes/agent-messages.js +23 -1
  192. package/dist/src/routes/agent-messages.js.map +1 -1
  193. package/dist/src/routes/agent-tasks/create-read.d.ts.map +1 -1
  194. package/dist/src/routes/agent-tasks/create-read.js +8 -1
  195. package/dist/src/routes/agent-tasks/create-read.js.map +1 -1
  196. package/dist/src/routes/agent-tasks/lifecycle.d.ts +4 -1
  197. package/dist/src/routes/agent-tasks/lifecycle.d.ts.map +1 -1
  198. package/dist/src/routes/agent-tasks/lifecycle.js +80 -2
  199. package/dist/src/routes/agent-tasks/lifecycle.js.map +1 -1
  200. package/dist/src/routes/ai.d.ts +5 -0
  201. package/dist/src/routes/ai.d.ts.map +1 -1
  202. package/dist/src/routes/ai.js +55 -16
  203. package/dist/src/routes/ai.js.map +1 -1
  204. package/dist/src/routes/app-grants.d.ts.map +1 -1
  205. package/dist/src/routes/app-grants.js +5 -0
  206. package/dist/src/routes/app-grants.js.map +1 -1
  207. package/dist/src/routes/apps/drafts.d.ts +6 -0
  208. package/dist/src/routes/apps/drafts.d.ts.map +1 -1
  209. package/dist/src/routes/apps/drafts.js +133 -1
  210. package/dist/src/routes/apps/drafts.js.map +1 -1
  211. package/dist/src/routes/apps/read.d.ts.map +1 -1
  212. package/dist/src/routes/apps/read.js +38 -1
  213. package/dist/src/routes/apps/read.js.map +1 -1
  214. package/dist/src/routes/auth-otk.d.ts +28 -0
  215. package/dist/src/routes/auth-otk.d.ts.map +1 -0
  216. package/dist/src/routes/auth-otk.js +190 -0
  217. package/dist/src/routes/auth-otk.js.map +1 -0
  218. package/dist/src/routes/auth.d.ts +17 -0
  219. package/dist/src/routes/auth.d.ts.map +1 -1
  220. package/dist/src/routes/auth.js +44 -153
  221. package/dist/src/routes/auth.js.map +1 -1
  222. package/dist/src/routes/bootstrap.d.ts +6 -0
  223. package/dist/src/routes/bootstrap.d.ts.map +1 -1
  224. package/dist/src/routes/bootstrap.js +47 -20
  225. package/dist/src/routes/bootstrap.js.map +1 -1
  226. package/dist/src/routes/chat.d.ts +23 -0
  227. package/dist/src/routes/chat.d.ts.map +1 -0
  228. package/dist/src/routes/chat.js +165 -0
  229. package/dist/src/routes/chat.js.map +1 -0
  230. package/dist/src/routes/commerce.js +4 -4
  231. package/dist/src/routes/commerce.js.map +1 -1
  232. package/dist/src/routes/datapackages.d.ts +35 -0
  233. package/dist/src/routes/datapackages.d.ts.map +1 -0
  234. package/dist/src/routes/datapackages.js +217 -0
  235. package/dist/src/routes/datapackages.js.map +1 -0
  236. package/dist/src/routes/disputes.d.ts +8 -0
  237. package/dist/src/routes/disputes.d.ts.map +1 -1
  238. package/dist/src/routes/disputes.js +52 -1
  239. package/dist/src/routes/disputes.js.map +1 -1
  240. package/dist/src/routes/ecosystem-apps-advisories.d.ts +16 -0
  241. package/dist/src/routes/ecosystem-apps-advisories.d.ts.map +1 -0
  242. package/dist/src/routes/ecosystem-apps-advisories.js +104 -0
  243. package/dist/src/routes/ecosystem-apps-advisories.js.map +1 -0
  244. package/dist/src/routes/ecosystem-apps.d.ts +6 -0
  245. package/dist/src/routes/ecosystem-apps.d.ts.map +1 -1
  246. package/dist/src/routes/ecosystem-apps.js +31 -99
  247. package/dist/src/routes/ecosystem-apps.js.map +1 -1
  248. package/dist/src/routes/extensions/actions.d.ts.map +1 -1
  249. package/dist/src/routes/extensions/actions.js +29 -1
  250. package/dist/src/routes/extensions/actions.js.map +1 -1
  251. package/dist/src/routes/federation-sync/routing.d.ts.map +1 -1
  252. package/dist/src/routes/federation-sync/routing.js +12 -3
  253. package/dist/src/routes/federation-sync/routing.js.map +1 -1
  254. package/dist/src/routes/glossary.js +1 -1
  255. package/dist/src/routes/glossary.js.map +1 -1
  256. package/dist/src/routes/home/track.d.ts +5 -1
  257. package/dist/src/routes/home/track.d.ts.map +1 -1
  258. package/dist/src/routes/home/track.js +20 -6
  259. package/dist/src/routes/home/track.js.map +1 -1
  260. package/dist/src/routes/instances/install.d.ts +3 -0
  261. package/dist/src/routes/instances/install.d.ts.map +1 -1
  262. package/dist/src/routes/instances/install.js +17 -24
  263. package/dist/src/routes/instances/install.js.map +1 -1
  264. package/dist/src/routes/libs.js +1 -1
  265. package/dist/src/routes/libs.js.map +1 -1
  266. package/dist/src/routes/llm-proxy.d.ts +34 -0
  267. package/dist/src/routes/llm-proxy.d.ts.map +1 -0
  268. package/dist/src/routes/llm-proxy.js +258 -0
  269. package/dist/src/routes/llm-proxy.js.map +1 -0
  270. package/dist/src/routes/markdown-mirrors.js +1 -1
  271. package/dist/src/routes/markdown-mirrors.js.map +1 -1
  272. package/dist/src/routes/odata.d.ts +36 -0
  273. package/dist/src/routes/odata.d.ts.map +1 -0
  274. package/dist/src/routes/odata.js +143 -0
  275. package/dist/src/routes/odata.js.map +1 -0
  276. package/dist/src/routes/openrouter.d.ts +4 -0
  277. package/dist/src/routes/openrouter.d.ts.map +1 -1
  278. package/dist/src/routes/openrouter.js +10 -1
  279. package/dist/src/routes/openrouter.js.map +1 -1
  280. package/dist/src/routes/organisms/gates.d.ts.map +1 -1
  281. package/dist/src/routes/organisms/gates.js +9 -2
  282. package/dist/src/routes/organisms/gates.js.map +1 -1
  283. package/dist/src/routes/portal.d.ts +1 -0
  284. package/dist/src/routes/portal.d.ts.map +1 -1
  285. package/dist/src/routes/portal.js +13 -0
  286. package/dist/src/routes/portal.js.map +1 -1
  287. package/dist/src/routes/schedules.d.ts +4 -0
  288. package/dist/src/routes/schedules.d.ts.map +1 -1
  289. package/dist/src/routes/schedules.js +9 -1
  290. package/dist/src/routes/schedules.js.map +1 -1
  291. package/dist/src/routes/storage-files.d.ts +23 -0
  292. package/dist/src/routes/storage-files.d.ts.map +1 -1
  293. package/dist/src/routes/storage-files.js +103 -82
  294. package/dist/src/routes/storage-files.js.map +1 -1
  295. package/dist/src/routes/workflows.d.ts.map +1 -1
  296. package/dist/src/routes/workflows.js +9 -1
  297. package/dist/src/routes/workflows.js.map +1 -1
  298. package/dist/src/server-bootstrap/routes-loader.d.ts +2 -0
  299. package/dist/src/server-bootstrap/routes-loader.d.ts.map +1 -1
  300. package/dist/src/server-bootstrap/routes-loader.js +22 -2
  301. package/dist/src/server-bootstrap/routes-loader.js.map +1 -1
  302. package/dist/src/server-bootstrap/service-init.d.ts.map +1 -1
  303. package/dist/src/server-bootstrap/service-init.js +12 -7
  304. package/dist/src/server-bootstrap/service-init.js.map +1 -1
  305. package/dist/src/server-bootstrap/static-files.d.ts.map +1 -1
  306. package/dist/src/server-bootstrap/static-files.js +44 -10
  307. package/dist/src/server-bootstrap/static-files.js.map +1 -1
  308. package/dist/src/services/ai-allowance.d.ts +82 -0
  309. package/dist/src/services/ai-allowance.d.ts.map +1 -0
  310. package/dist/src/services/ai-allowance.js +117 -0
  311. package/dist/src/services/ai-allowance.js.map +1 -0
  312. package/dist/src/services/ai-completion.d.ts +102 -0
  313. package/dist/src/services/ai-completion.d.ts.map +1 -1
  314. package/dist/src/services/ai-completion.js +131 -67
  315. package/dist/src/services/ai-completion.js.map +1 -1
  316. package/dist/src/services/ai-image.d.ts +70 -0
  317. package/dist/src/services/ai-image.d.ts.map +1 -0
  318. package/dist/src/services/ai-image.js +104 -0
  319. package/dist/src/services/ai-image.js.map +1 -0
  320. package/dist/src/services/ai-model-defaults.d.ts +45 -0
  321. package/dist/src/services/ai-model-defaults.d.ts.map +1 -0
  322. package/dist/src/services/ai-model-defaults.js +42 -0
  323. package/dist/src/services/ai-model-defaults.js.map +1 -0
  324. package/dist/src/services/ai-tool-setup.d.ts +5 -1
  325. package/dist/src/services/ai-tool-setup.d.ts.map +1 -1
  326. package/dist/src/services/ai-tool-setup.js +36 -0
  327. package/dist/src/services/ai-tool-setup.js.map +1 -1
  328. package/dist/src/services/ai-transcription.d.ts +5 -0
  329. package/dist/src/services/ai-transcription.d.ts.map +1 -1
  330. package/dist/src/services/ai-transcription.js +5 -2
  331. package/dist/src/services/ai-transcription.js.map +1 -1
  332. package/dist/src/services/app-agent-surfaces.js +4 -4
  333. package/dist/src/services/app-agent-surfaces.js.map +1 -1
  334. package/dist/src/services/app-draft-edit.d.ts +144 -0
  335. package/dist/src/services/app-draft-edit.d.ts.map +1 -0
  336. package/dist/src/services/app-draft-edit.js +203 -0
  337. package/dist/src/services/app-draft-edit.js.map +1 -0
  338. package/dist/src/services/auth-md.js +2 -2
  339. package/dist/src/services/auth-md.js.map +1 -1
  340. package/dist/src/services/board-write.d.ts +11 -3
  341. package/dist/src/services/board-write.d.ts.map +1 -1
  342. package/dist/src/services/board-write.js +24 -3
  343. package/dist/src/services/board-write.js.map +1 -1
  344. package/dist/src/services/chat-agent.d.ts +36 -0
  345. package/dist/src/services/chat-agent.d.ts.map +1 -0
  346. package/dist/src/services/chat-agent.js +123 -0
  347. package/dist/src/services/chat-agent.js.map +1 -0
  348. package/dist/src/services/chat-session.d.ts +58 -0
  349. package/dist/src/services/chat-session.d.ts.map +1 -0
  350. package/dist/src/services/chat-session.js +151 -0
  351. package/dist/src/services/chat-session.js.map +1 -0
  352. package/dist/src/services/chat-threads.d.ts +61 -0
  353. package/dist/src/services/chat-threads.d.ts.map +1 -0
  354. package/dist/src/services/chat-threads.js +137 -0
  355. package/dist/src/services/chat-threads.js.map +1 -0
  356. package/dist/src/services/config-schema.d.ts.map +1 -1
  357. package/dist/src/services/config-schema.js +2 -1
  358. package/dist/src/services/config-schema.js.map +1 -1
  359. package/dist/src/services/datapackage/contract.d.ts +198 -0
  360. package/dist/src/services/datapackage/contract.d.ts.map +1 -0
  361. package/dist/src/services/datapackage/contract.js +140 -0
  362. package/dist/src/services/datapackage/contract.js.map +1 -0
  363. package/dist/src/services/datapackage/ext-capability.d.ts +85 -0
  364. package/dist/src/services/datapackage/ext-capability.d.ts.map +1 -0
  365. package/dist/src/services/datapackage/ext-capability.js +72 -0
  366. package/dist/src/services/datapackage/ext-capability.js.map +1 -0
  367. package/dist/src/services/datapackage/odata.d.ts +92 -0
  368. package/dist/src/services/datapackage/odata.d.ts.map +1 -0
  369. package/dist/src/services/datapackage/odata.js +256 -0
  370. package/dist/src/services/datapackage/odata.js.map +1 -0
  371. package/dist/src/services/datapackage/odps.d.ts +24 -0
  372. package/dist/src/services/datapackage/odps.d.ts.map +1 -0
  373. package/dist/src/services/datapackage/odps.js +183 -0
  374. package/dist/src/services/datapackage/odps.js.map +1 -0
  375. package/dist/src/services/datapackage/store.d.ts +143 -0
  376. package/dist/src/services/datapackage/store.d.ts.map +1 -0
  377. package/dist/src/services/datapackage/store.js +533 -0
  378. package/dist/src/services/datapackage/store.js.map +1 -0
  379. package/dist/src/services/datapackage/table.d.ts +67 -0
  380. package/dist/src/services/datapackage/table.d.ts.map +1 -0
  381. package/dist/src/services/datapackage/table.js +0 -0
  382. package/dist/src/services/datapackage/table.js.map +1 -0
  383. package/dist/src/services/extension-ctx.d.ts +1 -0
  384. package/dist/src/services/extension-ctx.d.ts.map +1 -1
  385. package/dist/src/services/extension-ctx.js +31 -6
  386. package/dist/src/services/extension-ctx.js.map +1 -1
  387. package/dist/src/services/extension-files.d.ts +20 -0
  388. package/dist/src/services/extension-files.d.ts.map +1 -1
  389. package/dist/src/services/extension-files.js +9 -2
  390. package/dist/src/services/extension-files.js.map +1 -1
  391. package/dist/src/services/extension-lifecycle.d.ts +3 -0
  392. package/dist/src/services/extension-lifecycle.d.ts.map +1 -1
  393. package/dist/src/services/extension-lifecycle.js +2 -26
  394. package/dist/src/services/extension-lifecycle.js.map +1 -1
  395. package/dist/src/services/extension-runtime.d.ts +28 -2
  396. package/dist/src/services/extension-runtime.d.ts.map +1 -1
  397. package/dist/src/services/extension-runtime.js +22 -0
  398. package/dist/src/services/extension-runtime.js.map +1 -1
  399. package/dist/src/services/extension-schedules.d.ts +90 -0
  400. package/dist/src/services/extension-schedules.d.ts.map +1 -0
  401. package/dist/src/services/extension-schedules.js +123 -0
  402. package/dist/src/services/extension-schedules.js.map +1 -0
  403. package/dist/src/services/extension-system-run.d.ts +91 -0
  404. package/dist/src/services/extension-system-run.d.ts.map +1 -0
  405. package/dist/src/services/extension-system-run.js +100 -0
  406. package/dist/src/services/extension-system-run.js.map +1 -0
  407. package/dist/src/services/extension-upsert.d.ts +2 -0
  408. package/dist/src/services/extension-upsert.d.ts.map +1 -1
  409. package/dist/src/services/extension-upsert.js +6 -24
  410. package/dist/src/services/extension-upsert.js.map +1 -1
  411. package/dist/src/services/goose-acp.d.ts +84 -0
  412. package/dist/src/services/goose-acp.d.ts.map +1 -0
  413. package/dist/src/services/goose-acp.js +304 -0
  414. package/dist/src/services/goose-acp.js.map +1 -0
  415. package/dist/src/services/markdown-negotiation.js +1 -1
  416. package/dist/src/services/markdown-negotiation.js.map +1 -1
  417. package/dist/src/services/openrouter.d.ts +43 -1
  418. package/dist/src/services/openrouter.d.ts.map +1 -1
  419. package/dist/src/services/openrouter.js +98 -1
  420. package/dist/src/services/openrouter.js.map +1 -1
  421. package/dist/src/services/prompt-defaults/tiers-core.js +4 -4
  422. package/dist/src/services/scheduler-extension-job.d.ts +29 -6
  423. package/dist/src/services/scheduler-extension-job.d.ts.map +1 -1
  424. package/dist/src/services/scheduler-extension-job.js +29 -75
  425. package/dist/src/services/scheduler-extension-job.js.map +1 -1
  426. package/dist/src/services/scope-vocabulary-migration.d.ts +34 -1
  427. package/dist/src/services/scope-vocabulary-migration.d.ts.map +1 -1
  428. package/dist/src/services/scope-vocabulary-migration.js +60 -0
  429. package/dist/src/services/scope-vocabulary-migration.js.map +1 -1
  430. package/dist/src/services/screenshot-capture.d.ts +40 -1
  431. package/dist/src/services/screenshot-capture.d.ts.map +1 -1
  432. package/dist/src/services/screenshot-capture.js +142 -60
  433. package/dist/src/services/screenshot-capture.js.map +1 -1
  434. package/dist/src/services/skill-bundle/generator.js +1 -1
  435. package/dist/src/services/skill-bundle/generic-adapter.js +1 -1
  436. package/dist/src/services/skill-bundle/hermes-adapter.js +1 -1
  437. package/dist/src/services/storage-file-write.d.ts +36 -1
  438. package/dist/src/services/storage-file-write.d.ts.map +1 -1
  439. package/dist/src/services/storage-file-write.js +49 -3
  440. package/dist/src/services/storage-file-write.js.map +1 -1
  441. package/dist/src/services/task-outcome.d.ts +53 -0
  442. package/dist/src/services/task-outcome.d.ts.map +1 -0
  443. package/dist/src/services/task-outcome.js +28 -0
  444. package/dist/src/services/task-outcome.js.map +1 -0
  445. package/dist/src/services/workflow/engine-human.d.ts +15 -0
  446. package/dist/src/services/workflow/engine-human.d.ts.map +1 -1
  447. package/dist/src/services/workflow/engine-human.js +10 -1
  448. package/dist/src/services/workflow/engine-human.js.map +1 -1
  449. package/dist/src/services/workflow/engine-steps.d.ts +48 -3
  450. package/dist/src/services/workflow/engine-steps.d.ts.map +1 -1
  451. package/dist/src/services/workflow/engine-steps.js +361 -0
  452. package/dist/src/services/workflow/engine-steps.js.map +1 -1
  453. package/dist/src/services/workflow/engine.d.ts +1 -0
  454. package/dist/src/services/workflow/engine.d.ts.map +1 -1
  455. package/dist/src/services/workflow/engine.js +2 -1
  456. package/dist/src/services/workflow/engine.js.map +1 -1
  457. package/dist/src/services/workflow/store.d.ts.map +1 -1
  458. package/dist/src/services/workflow/store.js +60 -4
  459. package/dist/src/services/workflow/store.js.map +1 -1
  460. package/dist/src/services/write-guards.d.ts +27 -1
  461. package/dist/src/services/write-guards.d.ts.map +1 -1
  462. package/dist/src/services/write-guards.js +39 -9
  463. package/dist/src/services/write-guards.js.map +1 -1
  464. package/dist/src/storage/providers/postgres-kysely/db-types.d.ts +1 -0
  465. package/dist/src/storage/providers/postgres-kysely/db-types.d.ts.map +1 -1
  466. package/dist/src/storage/providers/postgres-kysely/methods/app-grants.d.ts +1 -0
  467. package/dist/src/storage/providers/postgres-kysely/methods/app-grants.d.ts.map +1 -1
  468. package/dist/src/storage/providers/postgres-kysely/methods/app-grants.js +3 -0
  469. package/dist/src/storage/providers/postgres-kysely/methods/app-grants.js.map +1 -1
  470. package/dist/src/storage/providers/postgres-kysely/methods/files.d.ts +2 -0
  471. package/dist/src/storage/providers/postgres-kysely/methods/files.d.ts.map +1 -1
  472. package/dist/src/storage/providers/postgres-kysely/methods/files.js +34 -2
  473. package/dist/src/storage/providers/postgres-kysely/methods/files.js.map +1 -1
  474. package/dist/src/storage/providers/postgres-kysely/methods/wallet.d.ts.map +1 -1
  475. package/dist/src/storage/providers/postgres-kysely/methods/wallet.js +23 -4
  476. package/dist/src/storage/providers/postgres-kysely/methods/wallet.js.map +1 -1
  477. package/dist/src/storage/providers/postgres-kysely/migrations/0039_storage_file_utf8_verified.sql +19 -0
  478. package/dist/src/storage/providers/sqlite/index.d.ts.map +1 -1
  479. package/dist/src/storage/providers/sqlite/index.js +2 -1
  480. package/dist/src/storage/providers/sqlite/index.js.map +1 -1
  481. package/dist/src/storage/providers/sqlite/methods/apps.d.ts +1 -0
  482. package/dist/src/storage/providers/sqlite/methods/apps.d.ts.map +1 -1
  483. package/dist/src/storage/providers/sqlite/methods/apps.js +33 -28
  484. package/dist/src/storage/providers/sqlite/methods/apps.js.map +1 -1
  485. package/dist/src/storage/providers/sqlite/methods/identity-nodes.d.ts +1 -12
  486. package/dist/src/storage/providers/sqlite/methods/identity-nodes.d.ts.map +1 -1
  487. package/dist/src/storage/providers/sqlite/methods/identity-nodes.js +28 -135
  488. package/dist/src/storage/providers/sqlite/methods/identity-nodes.js.map +1 -1
  489. package/dist/src/storage/providers/sqlite/methods/storage-files.d.ts +38 -0
  490. package/dist/src/storage/providers/sqlite/methods/storage-files.d.ts.map +1 -0
  491. package/dist/src/storage/providers/sqlite/methods/storage-files.js +109 -0
  492. package/dist/src/storage/providers/sqlite/methods/storage-files.js.map +1 -0
  493. package/dist/src/storage/providers/sqlite/methods/work.d.ts +5 -0
  494. package/dist/src/storage/providers/sqlite/methods/work.d.ts.map +1 -1
  495. package/dist/src/storage/providers/sqlite/methods/work.js +34 -22
  496. package/dist/src/storage/providers/sqlite/methods/work.js.map +1 -1
  497. package/dist/src/storage/providers/sqlite/schema.d.ts.map +1 -1
  498. package/dist/src/storage/providers/sqlite/schema.js +134 -130
  499. package/dist/src/storage/providers/sqlite/schema.js.map +1 -1
  500. package/dist/src/storage/repositories/app-grant.repository.d.ts +11 -0
  501. package/dist/src/storage/repositories/app-grant.repository.d.ts.map +1 -1
  502. package/dist/src/storage/repositories/file.repository.d.ts +13 -0
  503. package/dist/src/storage/repositories/file.repository.d.ts.map +1 -1
  504. package/dist/src/storage/types/commerce.d.ts +6 -0
  505. package/dist/src/storage/types/commerce.d.ts.map +1 -1
  506. package/dist/src/utils/agent-footer.d.ts.map +1 -1
  507. package/dist/src/utils/agent-footer.js +1 -0
  508. package/dist/src/utils/agent-footer.js.map +1 -1
  509. package/dist/src/utils/app-content-type.d.ts +57 -3
  510. package/dist/src/utils/app-content-type.d.ts.map +1 -1
  511. package/dist/src/utils/app-content-type.js +81 -12
  512. package/dist/src/utils/app-content-type.js.map +1 -1
  513. package/dist/src/utils/env-config/sections-features.d.ts.map +1 -1
  514. package/dist/src/utils/env-config/sections-features.js +9 -3
  515. package/dist/src/utils/env-config/sections-features.js.map +1 -1
  516. package/dist/src/utils/file-download-headers.d.ts +5 -3
  517. package/dist/src/utils/file-download-headers.d.ts.map +1 -1
  518. package/dist/src/utils/file-download-headers.js +18 -5
  519. package/dist/src/utils/file-download-headers.js.map +1 -1
  520. package/dist/src/utils/http-range.d.ts +151 -0
  521. package/dist/src/utils/http-range.d.ts.map +1 -0
  522. package/dist/src/utils/http-range.js +190 -0
  523. package/dist/src/utils/http-range.js.map +1 -0
  524. package/dist/src/utils/page-head.d.ts +5 -0
  525. package/dist/src/utils/page-head.d.ts.map +1 -1
  526. package/dist/src/utils/page-head.js +10 -1
  527. package/dist/src/utils/page-head.js.map +1 -1
  528. package/dist/src/utils/reserved-keys.d.ts +4 -1
  529. package/dist/src/utils/reserved-keys.d.ts.map +1 -1
  530. package/dist/src/utils/reserved-keys.js +4 -1
  531. package/dist/src/utils/reserved-keys.js.map +1 -1
  532. package/dist/static/sdk-libs/datapackage/index.js +336 -0
  533. package/dist/static/sdk-libs/dist/aimeat-datapackage.js +305 -0
  534. package/package.json +10 -2
@@ -0,0 +1,144 @@
1
+ /**
2
+ * @file app-draft-edit.ts
3
+ * @description Incremental editing of an app's draft slot, so an agent can build and iterate on a
4
+ * 400 kB app without a filesystem and without pushing the whole file through its context.
5
+ *
6
+ * The problem this solves is not size. A 400 kB app fits every body limit on this node. It is that
7
+ * no model emits 400 kB in one response, so a local agent writes the file to disk in pieces with
8
+ * its editor tools and uploads it afterwards. A server-side agent has no disk and is deliberately
9
+ * given no shell, because one process serves many owners. The draft slot is already a database row
10
+ * with a byte buffer on both backends, so it is the disk: append to it, do targeted replacements
11
+ * in it, read slices of it, and seed it from a published version.
12
+ *
13
+ * Every write goes through stageAppDraft(), which is the same function PUT /v1/apps/:owner/:file/draft
14
+ * and aimeat_app_draft_save call. That keeps the filename rule, the size ceiling and the manifest
15
+ * inheritance in one place, and it is why the size check happens BEFORE anything is written.
16
+ *
17
+ * Content is plain UTF-8 text, not base64. An app is HTML, the model emits it as text either way,
18
+ * and base64 would inflate the tool call by a third for nothing.
19
+ * @structure
20
+ * - writeAppDraft() — append to, or replace, the draft's bytes
21
+ * - replaceInAppDraft() — targeted old→new replacement with a uniqueness check
22
+ * - readAppDraft() — a line range, never the whole file by accident
23
+ * - seedAppDraft() — copy a published version's bytes into the draft, server-side
24
+ * @usage
25
+ * const out = await writeAppDraft(storage, config, {
26
+ * ownerName, ownerGhii, filename: 'pong.html', content: '<!doctype html>…', mode: 'append',
27
+ * });
28
+ * if ('refusal' in out) { res.status(out.refusal.status).json(error(...)); return; }
29
+ * @version-history
30
+ * v1.0.0 — 2026-08-16 — Initial implementation. Four operations so a hosted agent can build an app
31
+ * larger than one model response, and continue one it published a week ago (aimeat_app_get does
32
+ * not return source, and stageAppDraft only ever took bytes from its caller).
33
+ */
34
+ import type { AimeatConfig } from '../config.js';
35
+ import type { Storage } from '../storage/interface.js';
36
+ import type { PublishAppRefusal } from './app-publish.js';
37
+ import { type DraftManifestRequest, type StagedAppDraft } from './app-lifecycle.js';
38
+ /** The owner whose draft slot is being edited, already resolved from the principal at the door. */
39
+ export interface AppDraftEditScope {
40
+ ownerName: string;
41
+ ownerGhii: string;
42
+ }
43
+ /** Default number of lines readAppDraft() returns when the caller does not say. */
44
+ export declare const DRAFT_READ_DEFAULT_LINES = 400;
45
+ /** Hard ceiling on lines per read, so one call cannot pull a whole app into context. */
46
+ export declare const DRAFT_READ_MAX_LINES = 2000;
47
+ /**
48
+ * Hard ceiling on characters per read. Below the MCP layer's own 100k truncation on purpose: a slice
49
+ * that gets cut by the transport loses its tail silently, and a caller doing a replacement against a
50
+ * silently truncated read would target text it never actually saw.
51
+ */
52
+ export declare const DRAFT_READ_MAX_CHARS = 60000;
53
+ export interface WriteAppDraftInput extends AppDraftEditScope {
54
+ filename: string;
55
+ /** The text to write. UTF-8, not base64. */
56
+ content: string;
57
+ /** `append` adds to the end (the default); `replace` overwrites the whole draft. */
58
+ mode?: 'append' | 'replace';
59
+ /**
60
+ * Optional lost-update guard: the size the caller believes the draft currently has. A mismatch
61
+ * refuses instead of writing, which is the only way a caller building a file across many calls can
62
+ * notice that something else moved underneath it.
63
+ */
64
+ expectedSizeBytes?: number;
65
+ /** Manifest fields, only meaningful when the draft is being created. */
66
+ requested?: DraftManifestRequest;
67
+ }
68
+ export interface ReplaceInAppDraftInput extends AppDraftEditScope {
69
+ filename: string;
70
+ oldString: string;
71
+ newString: string;
72
+ /** Replace every occurrence instead of requiring exactly one. */
73
+ replaceAll?: boolean;
74
+ }
75
+ export interface ReadAppDraftInput extends AppDraftEditScope {
76
+ filename: string;
77
+ /** First line to return, 1-based. Defaults to 1. */
78
+ offset?: number;
79
+ /** How many lines to return. Defaults to DRAFT_READ_DEFAULT_LINES. */
80
+ limit?: number;
81
+ }
82
+ export interface SeedAppDraftInput extends AppDraftEditScope {
83
+ /** The draft to write into. */
84
+ filename: string;
85
+ /** The published app to copy from. Defaults to `filename`. */
86
+ fromFilename?: string;
87
+ /** Which published version. Defaults to the newest. */
88
+ version?: number;
89
+ }
90
+ export interface AppDraftSlice {
91
+ filename: string;
92
+ sizeBytes: number;
93
+ totalLines: number;
94
+ /** 1-based, inclusive. */
95
+ fromLine: number;
96
+ toLine: number;
97
+ /** True when lines remain after `toLine`, or when the slice hit the character ceiling. */
98
+ hasMore: boolean;
99
+ content: string;
100
+ mimeType: string;
101
+ updatedAt: string;
102
+ }
103
+ export interface ReplacedAppDraft extends StagedAppDraft {
104
+ /** How many occurrences were actually replaced. */
105
+ replacements: number;
106
+ }
107
+ export interface SeededAppDraft extends StagedAppDraft {
108
+ seededFrom: string;
109
+ seededVersion: number;
110
+ }
111
+ /**
112
+ * Append to, or replace, the draft's bytes.
113
+ *
114
+ * The size ceiling is enforced by stageAppDraft() before it writes, so a chunk that would push the
115
+ * draft past the limit leaves the previous content intact rather than truncating it.
116
+ */
117
+ export declare function writeAppDraft(storage: Storage, config: AimeatConfig, input: WriteAppDraftInput): Promise<StagedAppDraft | PublishAppRefusal>;
118
+ /**
119
+ * Replace `oldString` with `newString` inside the draft.
120
+ *
121
+ * Without `replaceAll` the match must be unique. Both refusals carry the actual count, because the
122
+ * caller's next move differs: zero means the text is not there at all, and more than one means it
123
+ * has to widen the surrounding context until the target is unambiguous. A count-free "did not work"
124
+ * turns that into guessing.
125
+ */
126
+ export declare function replaceInAppDraft(storage: Storage, config: AimeatConfig, input: ReplaceInAppDraftInput): Promise<ReplacedAppDraft | PublishAppRefusal>;
127
+ /**
128
+ * Return a line range of the draft.
129
+ *
130
+ * Bounded twice on purpose. A caller that asks for everything gets the first page and a `hasMore`
131
+ * flag rather than a whole app in its context, and a slice that would exceed the character ceiling
132
+ * is cut at a line boundary with the same flag set, so a later replacement is never aimed at text
133
+ * the caller only half received.
134
+ */
135
+ export declare function readAppDraft(storage: Storage, input: ReadAppDraftInput): Promise<AppDraftSlice | PublishAppRefusal>;
136
+ /**
137
+ * Copy a published version's bytes into the draft slot.
138
+ *
139
+ * The bytes never leave the server. Without this an app published a week ago cannot be continued at
140
+ * all through MCP: aimeat_app_get returns the manifest and no source, and stageAppDraft has always
141
+ * taken its bytes from the caller.
142
+ */
143
+ export declare function seedAppDraft(storage: Storage, config: AimeatConfig, input: SeedAppDraftInput): Promise<SeededAppDraft | PublishAppRefusal>;
144
+ //# sourceMappingURL=app-draft-edit.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app-draft-edit.d.ts","sourceRoot":"","sources":["../../../src/services/app-draft-edit.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,203 @@
1
+ import { stageAppDraft, } from './app-lifecycle.js';
2
+ /** Default number of lines readAppDraft() returns when the caller does not say. */
3
+ export const DRAFT_READ_DEFAULT_LINES = 400;
4
+ /** Hard ceiling on lines per read, so one call cannot pull a whole app into context. */
5
+ export const DRAFT_READ_MAX_LINES = 2000;
6
+ /**
7
+ * Hard ceiling on characters per read. Below the MCP layer's own 100k truncation on purpose: a slice
8
+ * that gets cut by the transport loses its tail silently, and a caller doing a replacement against a
9
+ * silently truncated read would target text it never actually saw.
10
+ */
11
+ export const DRAFT_READ_MAX_CHARS = 60_000;
12
+ function refuse(status, code, message) {
13
+ return { refusal: { status, code, message } };
14
+ }
15
+ /**
16
+ * Load the draft, or refuse with an answer that says what to do about it. Every operation except
17
+ * the creating write needs a draft to exist, and "not found" is the most common state a caller hits
18
+ * on its first attempt, so the message names both ways out.
19
+ */
20
+ async function requireDraft(storage, ownerGhii, filename) {
21
+ const draft = await storage.getAppDraft(ownerGhii, filename);
22
+ if (!draft) {
23
+ return refuse(404, 'NO_DRAFT', `No draft for "${filename}". Start one with a write in mode "replace", or copy the published `
24
+ + 'version into the slot first.');
25
+ }
26
+ return draft;
27
+ }
28
+ /**
29
+ * Carry the draft's own manifest forward. stageAppDraft() falls back to the LIVE app's manifest,
30
+ * which is right on the publish path and wrong here: a draft created before the app was ever
31
+ * published has a manifest of its own, and an append that did not pass it would quietly rename the
32
+ * app back to its filename on the second chunk.
33
+ */
34
+ function carryManifest(draft, requested) {
35
+ const base = draft?.manifest;
36
+ const carried = {
37
+ name: requested?.name ?? base?.name,
38
+ description: requested?.description ?? base?.description,
39
+ category: requested?.category ?? base?.category,
40
+ tags: requested?.tags ?? base?.tags,
41
+ icon: requested?.icon ?? base?.icon,
42
+ usesCortex: requested?.usesCortex ?? base?.usesCortex,
43
+ protection: requested?.protection ?? base?.protection,
44
+ mimeType: requested?.mimeType ?? draft?.mimeType,
45
+ };
46
+ return carried;
47
+ }
48
+ /**
49
+ * Append to, or replace, the draft's bytes.
50
+ *
51
+ * The size ceiling is enforced by stageAppDraft() before it writes, so a chunk that would push the
52
+ * draft past the limit leaves the previous content intact rather than truncating it.
53
+ */
54
+ export async function writeAppDraft(storage, config, input) {
55
+ const { ownerName, ownerGhii, filename, content } = input;
56
+ const mode = input.mode ?? 'append';
57
+ if (typeof content !== 'string') {
58
+ return refuse(400, 'INVALID_CONTENT', 'content must be a string of UTF-8 text.');
59
+ }
60
+ const draft = await storage.getAppDraft(ownerGhii, filename);
61
+ const current = draft?.data ?? Buffer.alloc(0);
62
+ if (input.expectedSizeBytes !== undefined && input.expectedSizeBytes !== current.length) {
63
+ return refuse(409, 'DRAFT_CHANGED', `Draft is ${current.length} bytes, not the expected ${input.expectedSizeBytes}. `
64
+ + 'Read it again before writing.');
65
+ }
66
+ const addition = Buffer.from(content, 'utf8');
67
+ const next = mode === 'append' ? Buffer.concat([current, addition]) : addition;
68
+ return stageAppDraft(storage, config, {
69
+ ownerName, ownerGhii, filename,
70
+ data: next,
71
+ requested: carryManifest(draft, input.requested),
72
+ });
73
+ }
74
+ /**
75
+ * Replace `oldString` with `newString` inside the draft.
76
+ *
77
+ * Without `replaceAll` the match must be unique. Both refusals carry the actual count, because the
78
+ * caller's next move differs: zero means the text is not there at all, and more than one means it
79
+ * has to widen the surrounding context until the target is unambiguous. A count-free "did not work"
80
+ * turns that into guessing.
81
+ */
82
+ export async function replaceInAppDraft(storage, config, input) {
83
+ const { ownerName, ownerGhii, filename, oldString, newString } = input;
84
+ if (!oldString) {
85
+ return refuse(400, 'INVALID_MATCH', 'old_string must not be empty.');
86
+ }
87
+ if (oldString === newString) {
88
+ return refuse(400, 'INVALID_MATCH', 'old_string and new_string are identical; nothing to do.');
89
+ }
90
+ const found = await requireDraft(storage, ownerGhii, filename);
91
+ if ('refusal' in found)
92
+ return found;
93
+ const text = found.data.toString('utf8');
94
+ const parts = text.split(oldString);
95
+ const occurrences = parts.length - 1;
96
+ if (occurrences === 0) {
97
+ return refuse(404, 'NOT_FOUND', `old_string does not appear in the draft for "${filename}". Read the surrounding lines and `
98
+ + 'match the text exactly, including indentation.');
99
+ }
100
+ if (occurrences > 1 && !input.replaceAll) {
101
+ return refuse(409, 'NOT_UNIQUE', `old_string appears ${occurrences} times in "${filename}". Include more surrounding text so `
102
+ + 'the match is unique, or set replace_all.');
103
+ }
104
+ const replacements = input.replaceAll ? occurrences : 1;
105
+ const nextText = input.replaceAll
106
+ ? parts.join(newString)
107
+ : text.replace(oldString, newString);
108
+ const staged = await stageAppDraft(storage, config, {
109
+ ownerName, ownerGhii, filename,
110
+ data: Buffer.from(nextText, 'utf8'),
111
+ requested: carryManifest(found),
112
+ });
113
+ if ('refusal' in staged)
114
+ return staged;
115
+ return { ...staged, replacements };
116
+ }
117
+ /**
118
+ * Return a line range of the draft.
119
+ *
120
+ * Bounded twice on purpose. A caller that asks for everything gets the first page and a `hasMore`
121
+ * flag rather than a whole app in its context, and a slice that would exceed the character ceiling
122
+ * is cut at a line boundary with the same flag set, so a later replacement is never aimed at text
123
+ * the caller only half received.
124
+ */
125
+ export async function readAppDraft(storage, input) {
126
+ const { ownerGhii, filename } = input;
127
+ const found = await requireDraft(storage, ownerGhii, filename);
128
+ if ('refusal' in found)
129
+ return found;
130
+ const text = found.data.toString('utf8');
131
+ const lines = text.split('\n');
132
+ const totalLines = lines.length;
133
+ const rawOffset = Math.trunc(input.offset ?? 1);
134
+ if (Number.isNaN(rawOffset) || rawOffset < 1) {
135
+ return refuse(400, 'INVALID_RANGE', 'offset is a 1-based line number and must be at least 1.');
136
+ }
137
+ const rawLimit = Math.trunc(input.limit ?? DRAFT_READ_DEFAULT_LINES);
138
+ if (Number.isNaN(rawLimit) || rawLimit < 1) {
139
+ return refuse(400, 'INVALID_RANGE', 'limit must be at least 1.');
140
+ }
141
+ const fromLine = Math.min(rawOffset, totalLines);
142
+ const limit = Math.min(rawLimit, DRAFT_READ_MAX_LINES);
143
+ const slice = [];
144
+ let chars = 0;
145
+ let toLine = fromLine - 1;
146
+ for (let i = fromLine - 1; i < totalLines && slice.length < limit; i++) {
147
+ const line = lines[i];
148
+ // +1 for the newline that rejoins them; stop BEFORE exceeding so the slice is whole lines.
149
+ if (chars > 0 && chars + line.length + 1 > DRAFT_READ_MAX_CHARS)
150
+ break;
151
+ slice.push(line);
152
+ chars += line.length + 1;
153
+ toLine = i + 1;
154
+ }
155
+ return {
156
+ filename,
157
+ sizeBytes: found.size,
158
+ totalLines,
159
+ fromLine,
160
+ toLine,
161
+ hasMore: toLine < totalLines,
162
+ content: slice.join('\n'),
163
+ mimeType: found.mimeType,
164
+ updatedAt: found.updatedAt,
165
+ };
166
+ }
167
+ /**
168
+ * Copy a published version's bytes into the draft slot.
169
+ *
170
+ * The bytes never leave the server. Without this an app published a week ago cannot be continued at
171
+ * all through MCP: aimeat_app_get returns the manifest and no source, and stageAppDraft has always
172
+ * taken its bytes from the caller.
173
+ */
174
+ export async function seedAppDraft(storage, config, input) {
175
+ const { ownerName, ownerGhii, filename } = input;
176
+ const from = input.fromFilename ?? filename;
177
+ const live = await storage.getApp(ownerGhii, from, input.version);
178
+ if (!live) {
179
+ return refuse(404, 'NOT_FOUND', input.version
180
+ ? `No version ${input.version} of "${from}" in your catalogue.`
181
+ : `No published app "${from}" in your catalogue.`);
182
+ }
183
+ // The SOURCE app's manifest is the base, which matters when seeding under a different filename:
184
+ // stageAppDraft would otherwise inherit from whatever lives at the destination name.
185
+ const staged = await stageAppDraft(storage, config, {
186
+ ownerName, ownerGhii, filename,
187
+ data: live.data,
188
+ requested: {
189
+ name: live.manifest.name,
190
+ description: live.manifest.description,
191
+ category: live.manifest.category,
192
+ tags: live.manifest.tags,
193
+ icon: live.manifest.icon,
194
+ usesCortex: live.manifest.usesCortex,
195
+ protection: live.manifest.protection,
196
+ mimeType: live.mimeType,
197
+ },
198
+ });
199
+ if ('refusal' in staged)
200
+ return staged;
201
+ return { ...staged, seededFrom: from, seededVersion: live.versionNumber };
202
+ }
203
+ //# sourceMappingURL=app-draft-edit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app-draft-edit.js","sourceRoot":"","sources":["../../../src/services/app-draft-edit.ts"],"names":[],"mappings":"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"}
@@ -150,7 +150,7 @@ rejected with \`INVALID_SCOPES\`. Ask for the least privilege your purpose needs
150
150
 
151
151
  External applications connect with the same consent guarantees:
152
152
  \`POST ${b}/v1/ecosystem-apps/hello\` → the owner approves (scopes + data-area allowlist)
153
- → \`POST ${b}/v1/ecosystem-apps/token\`. Full guide: the node's llms.txt.
153
+ → \`POST ${b}/v1/ecosystem-apps/token\`. Full guide: the node's llms-full.txt.
154
154
 
155
155
  ## Error handling
156
156
 
@@ -171,7 +171,7 @@ Retry transient failures (\`429\`, \`5xx\`) with backoff; treat \`access_denied\
171
171
  1. \`GET ${b}/v1/agents/{your-name}/skill-bundle\` — your configuration + API reference.
172
172
  2. \`GET ${b}/v1/agents/me/handbook\` — your operating handbook (directives, tasks, economy).
173
173
  3. \`GET ${b}/v1/agents/{your-name}/onboarding\` — pending onboarding steps from your owner.
174
- 4. \`GET ${b}/llms.txt\` and \`GET ${b}/.well-known/agent-skills/index.json\` — the full manual
174
+ 4. \`GET ${b}/llms-full.txt\` and \`GET ${b}/.well-known/agent-skills/index.json\` — the full manual
175
175
  and this node's public skills.
176
176
  `;
177
177
  }
@@ -1 +1 @@
1
- {"version":3,"file":"auth-md.js","sourceRoot":"","sources":["../../../src/services/auth-md.ts"],"names":[],"mappings":"AAgCA;;;;GAIG;AACH,MAAM,UAAU,sBAAsB,CAAC,MAAoB;IACzD,MAAM,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC;IACzB,OAAO;QACL,KAAK,EAAE,GAAG,CAAC,UAAU;QACrB,aAAa,EAAE,GAAG,CAAC,UAAU;QAC7B,YAAY,EAAE,GAAG,CAAC,6BAA6B;QAC/C,SAAS,EAAE,GAAG,CAAC,yBAAyB;QACxC,gBAAgB,EAAE,GAAG,CAAC,mBAAmB;QACzC,SAAS,EAAE,GAAG,CAAC,gBAAgB;QAC/B,cAAc,EAAE,GAAG,CAAC,iBAAiB;QACrC,qBAAqB,EAAE,CAAC,8CAA8C,CAAC;QACvE,0BAA0B,EAAE,CAAC,iBAAiB,EAAE,YAAY,CAAC;QAC7D,sFAAsF;QACtF,gFAAgF;QAChF,iFAAiF;QACjF,oFAAoF;QACpF,6EAA6E;QAC7E,qEAAqE;QACrE,wBAAwB,EAAE,CAAC,WAAW,CAAC;QACvC,SAAS,EAAE;YACT,YAAY,EAAE,GAAG,CAAC,6BAA6B;YAC/C,SAAS,EAAE,GAAG,CAAC,yBAAyB;YACxC,0BAA0B,EAAE,CAAC,iBAAiB,EAAE,YAAY,CAAC;SAC9D;QACD,QAAQ,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,CAAC,aAAa,EAAE;QACnE,cAAc,EAAE,MAAM,CAAC,kBAAkB;QACzC,8EAA8E;QAC9E,4EAA4E;QAC5E,oDAAoD;QACpD,qBAAqB,EAAE;YACrB;gBACE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,mBAAmB,EAAE,SAAS,EAAE,aAAa;gBACnE,YAAY,EAAE,GAAG,CAAC,YAAY;aAC/B;YACD;gBACE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,2BAA2B,EAAE,SAAS,EAAE,UAAU;gBACxE,YAAY,EAAE,GAAG,CAAC,6BAA6B;gBAC/C,SAAS,EAAE,GAAG,CAAC,yBAAyB;aACzC;YACD;gBACE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,6BAA6B,EAAE,SAAS,EAAE,eAAe;gBAC/E,YAAY,EAAE,GAAG,CAAC,0BAA0B;gBAC5C,SAAS,EAAE,GAAG,CAAC,0BAA0B;aAC1C;SACF;KACF,CAAC;AACJ,CAAC;AAED,4FAA4F;AAC5F,MAAM,UAAU,WAAW,CAAC,MAAoB;IAC9C,MAAM,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC;IACzB,MAAM,MAAM,GAAG,MAAM,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACpD,MAAM,aAAa,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,UAAU,EAAE,sBAAsB,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IAC9F,OAAO,sDAAsD,MAAM,CAAC,MAAM;;8DAEd,CAAC;;;;;;;;oCAQ3B,CAAC;;;EAGnC,aAAa;;;;;;;qEAOsD,CAAC;;;;;;;;;OAS/D,CAAC;;;;;;;;;;;;;;KAcH,CAAC;;;;;;OAMC,CAAC;;;;;;;;;;;;;;;gBAeQ,CAAC;;;;;;;;OAQV,CAAC;;;qCAG6B,MAAM,CAAC,MAAM;;;;;;;wCAOV,MAAM;;;;;iBAK7B,CAAC;;;;;;;SAOT,CAAC;WACC,CAAC;;;;;;;;;;;;;;;;;;WAkBD,CAAC;WACD,CAAC;WACD,CAAC;WACD,CAAC,yBAAyB,CAAC;;CAErC,CAAC;AACF,CAAC"}
1
+ {"version":3,"file":"auth-md.js","sourceRoot":"","sources":["../../../src/services/auth-md.ts"],"names":[],"mappings":"AAgCA;;;;GAIG;AACH,MAAM,UAAU,sBAAsB,CAAC,MAAoB;IACzD,MAAM,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC;IACzB,OAAO;QACL,KAAK,EAAE,GAAG,CAAC,UAAU;QACrB,aAAa,EAAE,GAAG,CAAC,UAAU;QAC7B,YAAY,EAAE,GAAG,CAAC,6BAA6B;QAC/C,SAAS,EAAE,GAAG,CAAC,yBAAyB;QACxC,gBAAgB,EAAE,GAAG,CAAC,mBAAmB;QACzC,SAAS,EAAE,GAAG,CAAC,gBAAgB;QAC/B,cAAc,EAAE,GAAG,CAAC,iBAAiB;QACrC,qBAAqB,EAAE,CAAC,8CAA8C,CAAC;QACvE,0BAA0B,EAAE,CAAC,iBAAiB,EAAE,YAAY,CAAC;QAC7D,sFAAsF;QACtF,gFAAgF;QAChF,iFAAiF;QACjF,oFAAoF;QACpF,6EAA6E;QAC7E,qEAAqE;QACrE,wBAAwB,EAAE,CAAC,WAAW,CAAC;QACvC,SAAS,EAAE;YACT,YAAY,EAAE,GAAG,CAAC,6BAA6B;YAC/C,SAAS,EAAE,GAAG,CAAC,yBAAyB;YACxC,0BAA0B,EAAE,CAAC,iBAAiB,EAAE,YAAY,CAAC;SAC9D;QACD,QAAQ,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,CAAC,aAAa,EAAE;QACnE,cAAc,EAAE,MAAM,CAAC,kBAAkB;QACzC,8EAA8E;QAC9E,4EAA4E;QAC5E,oDAAoD;QACpD,qBAAqB,EAAE;YACrB;gBACE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,mBAAmB,EAAE,SAAS,EAAE,aAAa;gBACnE,YAAY,EAAE,GAAG,CAAC,YAAY;aAC/B;YACD;gBACE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,2BAA2B,EAAE,SAAS,EAAE,UAAU;gBACxE,YAAY,EAAE,GAAG,CAAC,6BAA6B;gBAC/C,SAAS,EAAE,GAAG,CAAC,yBAAyB;aACzC;YACD;gBACE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,6BAA6B,EAAE,SAAS,EAAE,eAAe;gBAC/E,YAAY,EAAE,GAAG,CAAC,0BAA0B;gBAC5C,SAAS,EAAE,GAAG,CAAC,0BAA0B;aAC1C;SACF;KACF,CAAC;AACJ,CAAC;AAED,4FAA4F;AAC5F,MAAM,UAAU,WAAW,CAAC,MAAoB;IAC9C,MAAM,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC;IACzB,MAAM,MAAM,GAAG,MAAM,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACpD,MAAM,aAAa,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,UAAU,EAAE,sBAAsB,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IAC9F,OAAO,sDAAsD,MAAM,CAAC,MAAM;;8DAEd,CAAC;;;;;;;;oCAQ3B,CAAC;;;EAGnC,aAAa;;;;;;;qEAOsD,CAAC;;;;;;;;;OAS/D,CAAC;;;;;;;;;;;;;;KAcH,CAAC;;;;;;OAMC,CAAC;;;;;;;;;;;;;;;gBAeQ,CAAC;;;;;;;;OAQV,CAAC;;;qCAG6B,MAAM,CAAC,MAAM;;;;;;;wCAOV,MAAM;;;;;iBAK7B,CAAC;;;;;;;SAOT,CAAC;WACC,CAAC;;;;;;;;;;;;;;;;;;WAkBD,CAAC;WACD,CAAC;WACD,CAAC;WACD,CAAC,8BAA8B,CAAC;;CAE1C,CAAC;AACF,CAAC"}
@@ -62,9 +62,17 @@ export type BoardReactionResult = {
62
62
  /**
63
63
  * React to a post.
64
64
  *
65
- * Neither door loads the board here, so a reaction lands on any post whose ids the caller knows.
66
- * That is how both copies have always behaved and it is left as it is; the bound on the reaction
67
- * itself is what differed, and it now holds on both.
65
+ * The board is loaded and the READ rule applied, which is a change from how both doors behaved until
66
+ * 2026-08-15. Before that neither door loaded the board, so a reaction landed on any post whose ids
67
+ * the caller knew a principal holding social:write could write their own GAII onto a post on a
68
+ * private board they cannot read, post to or reply on, and could use the 200-versus-404 answer to
69
+ * probe which post ids exist there. That was recorded as a known state rather than decided, and it is
70
+ * decided now (E2E test-quality audit finding A30).
71
+ *
72
+ * The READ rule and not the POST rule, and the difference is the whole blast radius: boardVisibleTo
73
+ * leaves public and system boards open to everyone, so reacting on a public board — the normal case,
74
+ * and the only one any caller in this repo performs — is untouched. What closes is the private and
75
+ * shared case, where reacting was a write onto somebody else's surface.
68
76
  */
69
77
  export declare function reactToBoardPost(deps: BoardWriteDeps, caller: BoardWriteCaller, input: {
70
78
  boardId: string;
@@ -1 +1 @@
1
- {"version":3,"file":"board-write.d.ts","sourceRoot":"","sources":["../../../src/services/board-write.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"board-write.d.ts","sourceRoot":"","sources":["../../../src/services/board-write.ts"],"names":[],"mappings":"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"}
@@ -134,9 +134,17 @@ export async function subscribeToBoard(deps, caller, input) {
134
134
  /**
135
135
  * React to a post.
136
136
  *
137
- * Neither door loads the board here, so a reaction lands on any post whose ids the caller knows.
138
- * That is how both copies have always behaved and it is left as it is; the bound on the reaction
139
- * itself is what differed, and it now holds on both.
137
+ * The board is loaded and the READ rule applied, which is a change from how both doors behaved until
138
+ * 2026-08-15. Before that neither door loaded the board, so a reaction landed on any post whose ids
139
+ * the caller knew a principal holding social:write could write their own GAII onto a post on a
140
+ * private board they cannot read, post to or reply on, and could use the 200-versus-404 answer to
141
+ * probe which post ids exist there. That was recorded as a known state rather than decided, and it is
142
+ * decided now (E2E test-quality audit finding A30).
143
+ *
144
+ * The READ rule and not the POST rule, and the difference is the whole blast radius: boardVisibleTo
145
+ * leaves public and system boards open to everyone, so reacting on a public board — the normal case,
146
+ * and the only one any caller in this repo performs — is untouched. What closes is the private and
147
+ * shared case, where reacting was a write onto somebody else's surface.
140
148
  */
141
149
  export async function reactToBoardPost(deps, caller, input) {
142
150
  const { storage } = deps;
@@ -144,6 +152,19 @@ export async function reactToBoardPost(deps, caller, input) {
144
152
  if (!reaction || reaction.length > BOARD_LIMITS.reactionMax) {
145
153
  return { ok: false, status: 400, code: 'VALIDATION_ERROR', message: `reaction must be 1-${BOARD_LIMITS.reactionMax} characters` };
146
154
  }
155
+ // 404 rather than 403 for a board the caller cannot see: the same answer a post that does not
156
+ // exist gets, so the refusal does not become the probe it was closing.
157
+ //
158
+ // The same-owner clause is not decoration, and the E2E suite is what found it: boardVisibleTo
159
+ // grants same-owner access only for `shared` boards, so on a PRIVATE board it refuses the
160
+ // owner's own second agent — which is one person's two agents on one person's board, and
161
+ // exactly the arrangement this node is built around. isSameOwner is the test the rest of the
162
+ // codebase makes for that, so it is the test here.
163
+ const board = await storage.getBoard(input.boardId);
164
+ const mayReact = !!board && (boardVisibleTo(board, caller.gaii) || isSameOwner(board.ownerGaii, caller.gaii));
165
+ if (!mayReact) {
166
+ return { ok: false, status: 404, code: 'NOT_FOUND', message: 'Post not found' };
167
+ }
147
168
  const stored = await storage.addReaction(input.boardId, input.postId, reaction, caller.gaii);
148
169
  if (!stored) {
149
170
  return { ok: false, status: 404, code: 'NOT_FOUND', message: 'Post not found' };
@@ -1 +1 @@
1
- {"version":3,"file":"board-write.js","sourceRoot":"","sources":["../../../src/services/board-write.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"board-write.js","sourceRoot":"","sources":["../../../src/services/board-write.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ import type { AimeatConfig } from '../config.js';
2
+ import type { Storage } from '../storage/interface.js';
3
+ /** The agent's name component. One place, because it appears in a GAII, a UI and a log line. */
4
+ export declare const CHAT_AGENT_NAME = "chat";
5
+ export interface ChatAgentIdentity {
6
+ gaii: string;
7
+ ownerName: string;
8
+ scopes: string[];
9
+ created: boolean;
10
+ }
11
+ /**
12
+ * Find, or create, this owner's chat agent.
13
+ *
14
+ * The scopes come from the standard profile rather than from the owner's own roles. That is
15
+ * invariant 12: a role is granted, never inherited at mint time, and a mint that copied the owner's
16
+ * list would hand a scope-limited surface an unscoped credential. The owner can widen or narrow it
17
+ * afterwards in the Agents tab, which is the point of it being a real agent.
18
+ */
19
+ export declare function ensureChatAgent(storage: Storage, config: AimeatConfig, ownerName: string): Promise<ChatAgentIdentity>;
20
+ export interface ChatAgentToken {
21
+ token: string;
22
+ sessionId: string;
23
+ expiresAt: string;
24
+ }
25
+ /**
26
+ * Mint an MCP credential for one chat session.
27
+ *
28
+ * The session row is what makes it revocable: requireAuth checks the token's `jti` against it, and a
29
+ * token whose session row never existed answers "not revoked" forever. That was a real hole on the
30
+ * device-authorization path once, and this is the same shape of credential.
31
+ *
32
+ * `mcp_client` marks where the session came from, which is what makes the chat show up in the
33
+ * owner's connected-clients list as itself rather than as an anonymous agent.
34
+ */
35
+ export declare function mintChatAgentToken(storage: Storage, config: AimeatConfig, agent: ChatAgentIdentity): Promise<ChatAgentToken>;
36
+ //# sourceMappingURL=chat-agent.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat-agent.d.ts","sourceRoot":"","sources":["../../../src/services/chat-agent.ts"],"names":[],"mappings":"AA4BA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,KAAK,EAAE,OAAO,EAAe,MAAM,yBAAyB,CAAC;AAQpE,gGAAgG;AAChG,eAAO,MAAM,eAAe,SAAS,CAAC;AAEtC,MAAM,WAAW,iBAAiB;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;CACpB;AAED;;;;;;;GAOG;AACH,wBAAsB,eAAe,CACjC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,GAC1D,OAAO,CAAC,iBAAiB,CAAC,CAwC5B;AAYD,MAAM,WAAW,cAAc;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACrB;AAED;;;;;;;;;GASG;AACH,wBAAsB,kBAAkB,CACpC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,iBAAiB,GACjE,OAAO,CAAC,cAAc,CAAC,CAuBzB"}