aimeat 3.1.0 → 3.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (824) hide show
  1. package/dist/.env.example +58 -1
  2. package/dist/build-stamp.json +4 -4
  3. package/dist/locales/en.json +9225 -9103
  4. package/dist/locales/es.json +9217 -9095
  5. package/dist/locales/fi.json +9225 -9103
  6. package/dist/public/changelog.json +12 -0
  7. package/dist/public/css/views/admin.css +11 -0
  8. package/dist/public/css/views/chat.css +388 -0
  9. package/dist/public/css/views/profile.css +41 -0
  10. package/dist/public/js/services/admin.js +346 -331
  11. package/dist/public/js/services/chat.js +190 -0
  12. package/dist/public/js/services/organism-roles.js +51 -0
  13. package/dist/public/js/services/organisms.js +5 -25
  14. package/dist/public/js/services/speech-reader.js +26 -0
  15. package/dist/public/lib/VENDORED.md +1 -0
  16. package/dist/public/lib/duckdb-wasm@1.32.0/duckdb-browser-eh.worker.js +14 -0
  17. package/dist/public/lib/duckdb-wasm@1.32.0/duckdb-browser.js +23 -0
  18. package/dist/public/lib/duckdb-wasm@1.32.0/duckdb-eh.wasm +0 -0
  19. package/dist/public/lib/duckdb-wasm@1.32.0/extensions/v1.4.3/wasm_eh/parquet.duckdb_extension.wasm +0 -0
  20. package/dist/public/lib/vendored-assets.json +19 -0
  21. package/dist/public/llms-full-template.txt +2706 -0
  22. package/dist/public/llms-index-template.txt +60 -0
  23. package/dist/public/robots.node.txt +64 -23
  24. package/dist/public/spa.html +9 -1
  25. package/dist/public/views/admin/organism-ownership-tab.js +124 -0
  26. package/dist/public/views/admin/owners-tab.js +15 -4
  27. package/dist/public/views/admin/usage-tab.calls.js +120 -0
  28. package/dist/public/views/admin/usage-tab.js +18 -4
  29. package/dist/public/views/admin.js +2 -0
  30. package/dist/public/views/chat/parts.js +257 -0
  31. package/dist/public/views/chat.js +327 -0
  32. package/dist/public/views/landing.js +24 -1
  33. package/dist/public/views/profile/agents/scope-model.js +320 -296
  34. package/dist/public/views/profile/landing-page.cards.js +1 -0
  35. package/dist/public/views/profile/organisms/home.js +3 -1
  36. package/dist/public/views/profile/organisms/members.js +29 -4
  37. package/dist/public/views/profile/usage-tab.js +204 -0
  38. package/dist/public/views/profile.js +2 -0
  39. package/dist/scripts/audit-mcp-schemas.js +41 -0
  40. package/dist/scripts/audit-mcp-schemas.js.map +1 -1
  41. package/dist/scripts/build-sdk-libs.d.ts.map +1 -1
  42. package/dist/scripts/build-sdk-libs.js +1 -0
  43. package/dist/scripts/build-sdk-libs.js.map +1 -1
  44. package/dist/scripts/check-ai-disclosure.js +11 -0
  45. package/dist/scripts/check-ai-disclosure.js.map +1 -1
  46. package/dist/scripts/check-commit-msg.d.ts +8 -0
  47. package/dist/scripts/check-commit-msg.d.ts.map +1 -0
  48. package/dist/scripts/check-commit-msg.js +118 -0
  49. package/dist/scripts/check-commit-msg.js.map +1 -0
  50. package/dist/scripts/check-denial-coverage.d.ts +29 -0
  51. package/dist/scripts/check-denial-coverage.d.ts.map +1 -0
  52. package/dist/scripts/check-denial-coverage.js +237 -0
  53. package/dist/scripts/check-denial-coverage.js.map +1 -0
  54. package/dist/scripts/check-ext-entrypoints.js +14 -2
  55. package/dist/scripts/check-ext-entrypoints.js.map +1 -1
  56. package/dist/scripts/check-liaison-surface.js +27 -2
  57. package/dist/scripts/check-liaison-surface.js.map +1 -1
  58. package/dist/scripts/check-locales.js +38 -0
  59. package/dist/scripts/check-locales.js.map +1 -1
  60. package/dist/scripts/check-outbound-fetch.d.ts.map +1 -1
  61. package/dist/scripts/check-outbound-fetch.js +16 -2
  62. package/dist/scripts/check-outbound-fetch.js.map +1 -1
  63. package/dist/scripts/check-route-scopes.d.ts.map +1 -1
  64. package/dist/scripts/check-route-scopes.js +33 -4
  65. package/dist/scripts/check-route-scopes.js.map +1 -1
  66. package/dist/scripts/check-shared-implementation.js +28 -11
  67. package/dist/scripts/check-shared-implementation.js.map +1 -1
  68. package/dist/scripts/check-sse-parity.js +14 -0
  69. package/dist/scripts/check-sse-parity.js.map +1 -1
  70. package/dist/scripts/check-trusted-keys.d.ts +90 -1
  71. package/dist/scripts/check-trusted-keys.d.ts.map +1 -1
  72. package/dist/scripts/check-trusted-keys.js +521 -52
  73. package/dist/scripts/check-trusted-keys.js.map +1 -1
  74. package/dist/scripts/indexnow.js +9 -7
  75. package/dist/scripts/indexnow.js.map +1 -1
  76. package/dist/src/auth/middleware.d.ts +69 -6
  77. package/dist/src/auth/middleware.d.ts.map +1 -1
  78. package/dist/src/auth/middleware.js +130 -28
  79. package/dist/src/auth/middleware.js.map +1 -1
  80. package/dist/src/cli/connect/mcp/tools/agent-tasks.d.ts +5 -0
  81. package/dist/src/cli/connect/mcp/tools/agent-tasks.d.ts.map +1 -1
  82. package/dist/src/cli/connect/mcp/tools/agent-tasks.js +20 -2
  83. package/dist/src/cli/connect/mcp/tools/agent-tasks.js.map +1 -1
  84. package/dist/src/cli/connect/mcp/tools/agent-telemetry.d.ts +7 -1
  85. package/dist/src/cli/connect/mcp/tools/agent-telemetry.d.ts.map +1 -1
  86. package/dist/src/cli/connect/mcp/tools/agent-telemetry.js +24 -0
  87. package/dist/src/cli/connect/mcp/tools/agent-telemetry.js.map +1 -1
  88. package/dist/src/cli/connect/mcp/tools/apps.d.ts.map +1 -1
  89. package/dist/src/cli/connect/mcp/tools/apps.js +88 -0
  90. package/dist/src/cli/connect/mcp/tools/apps.js.map +1 -1
  91. package/dist/src/cli/connect/mcp/tools/core.d.ts +7 -0
  92. package/dist/src/cli/connect/mcp/tools/core.d.ts.map +1 -1
  93. package/dist/src/cli/connect/mcp/tools/core.js +83 -4
  94. package/dist/src/cli/connect/mcp/tools/core.js.map +1 -1
  95. package/dist/src/cli/connect/mcp/tools/organisms.d.ts +2 -0
  96. package/dist/src/cli/connect/mcp/tools/organisms.d.ts.map +1 -1
  97. package/dist/src/cli/connect/mcp/tools/organisms.js +16 -0
  98. package/dist/src/cli/connect/mcp/tools/organisms.js.map +1 -1
  99. package/dist/src/cli/connect/onboarding-prompt.js +1 -1
  100. package/dist/src/cli/connect/skill-bundle.js +1 -1
  101. package/dist/src/cli/connect/tool-call-defs-agent.d.ts +1 -0
  102. package/dist/src/cli/connect/tool-call-defs-agent.d.ts.map +1 -1
  103. package/dist/src/cli/connect/tool-call-defs-agent.js +6 -0
  104. package/dist/src/cli/connect/tool-call-defs-agent.js.map +1 -1
  105. package/dist/src/cli/connect/tool-call-defs-app-draft-edit.d.ts +21 -0
  106. package/dist/src/cli/connect/tool-call-defs-app-draft-edit.d.ts.map +1 -0
  107. package/dist/src/cli/connect/tool-call-defs-app-draft-edit.js +137 -0
  108. package/dist/src/cli/connect/tool-call-defs-app-draft-edit.js.map +1 -0
  109. package/dist/src/cli/connect/tool-call-defs-core.d.ts +1 -0
  110. package/dist/src/cli/connect/tool-call-defs-core.d.ts.map +1 -1
  111. package/dist/src/cli/connect/tool-call-defs-core.js +30 -0
  112. package/dist/src/cli/connect/tool-call-defs-core.js.map +1 -1
  113. package/dist/src/cli/connect/tool-call.d.ts.map +1 -1
  114. package/dist/src/cli/connect/tool-call.js +2 -0
  115. package/dist/src/cli/connect/tool-call.js.map +1 -1
  116. package/dist/src/config-types-ai.d.ts +76 -0
  117. package/dist/src/config-types-ai.d.ts.map +1 -0
  118. package/dist/src/config-types-ai.js +15 -0
  119. package/dist/src/config-types-ai.js.map +1 -0
  120. package/dist/src/config-types.d.ts +11 -2
  121. package/dist/src/config-types.d.ts.map +1 -1
  122. package/dist/src/config.d.ts.map +1 -1
  123. package/dist/src/config.js +25 -4
  124. package/dist/src/config.js.map +1 -1
  125. package/dist/src/data/appdev-pitfalls.d.ts +1 -0
  126. package/dist/src/data/appdev-pitfalls.d.ts.map +1 -1
  127. package/dist/src/data/appdev-pitfalls.js +11 -0
  128. package/dist/src/data/appdev-pitfalls.js.map +1 -1
  129. package/dist/src/data/builtin-skills.d.ts.map +1 -1
  130. package/dist/src/data/builtin-skills.js +3 -2
  131. package/dist/src/data/builtin-skills.js.map +1 -1
  132. package/dist/src/data/digital-signage-package.js +1 -1
  133. package/dist/src/data/library-packs/sdk.d.ts.map +1 -1
  134. package/dist/src/data/library-packs/sdk.js +76 -0
  135. package/dist/src/data/library-packs/sdk.js.map +1 -1
  136. package/dist/src/data/library-packs/vendored.d.ts.map +1 -1
  137. package/dist/src/data/library-packs/vendored.js +81 -0
  138. package/dist/src/data/library-packs/vendored.js.map +1 -1
  139. package/dist/src/data/library-packs.d.ts +2 -2
  140. package/dist/src/data/library-packs.js +2 -2
  141. package/dist/src/data/public-pages.d.ts +13 -0
  142. package/dist/src/data/public-pages.d.ts.map +1 -1
  143. package/dist/src/data/public-pages.js +153 -113
  144. package/dist/src/data/public-pages.js.map +1 -1
  145. package/dist/src/generated/api-types.d.ts +2251 -102
  146. package/dist/src/generated/api-types.d.ts.map +1 -1
  147. package/dist/src/index-start.d.ts.map +1 -1
  148. package/dist/src/index-start.js +21 -1
  149. package/dist/src/index-start.js.map +1 -1
  150. package/dist/src/mcp/agent-tasks.d.ts +16 -0
  151. package/dist/src/mcp/agent-tasks.d.ts.map +1 -1
  152. package/dist/src/mcp/agent-tasks.js +84 -54
  153. package/dist/src/mcp/agent-tasks.js.map +1 -1
  154. package/dist/src/mcp/agent-telemetry.d.ts +6 -1
  155. package/dist/src/mcp/agent-telemetry.d.ts.map +1 -1
  156. package/dist/src/mcp/agent-telemetry.js +37 -1
  157. package/dist/src/mcp/agent-telemetry.js.map +1 -1
  158. package/dist/src/mcp/ai-image.d.ts +22 -0
  159. package/dist/src/mcp/ai-image.d.ts.map +1 -0
  160. package/dist/src/mcp/ai-image.js +60 -0
  161. package/dist/src/mcp/ai-image.js.map +1 -0
  162. package/dist/src/mcp/annotations.d.ts +5 -0
  163. package/dist/src/mcp/annotations.d.ts.map +1 -1
  164. package/dist/src/mcp/annotations.js +23 -0
  165. package/dist/src/mcp/annotations.js.map +1 -1
  166. package/dist/src/mcp/apps-draft-edit.d.ts +28 -0
  167. package/dist/src/mcp/apps-draft-edit.d.ts.map +1 -0
  168. package/dist/src/mcp/apps-draft-edit.js +164 -0
  169. package/dist/src/mcp/apps-draft-edit.js.map +1 -0
  170. package/dist/src/mcp/apps-screenshot.d.ts +26 -0
  171. package/dist/src/mcp/apps-screenshot.d.ts.map +1 -0
  172. package/dist/src/mcp/apps-screenshot.js +39 -0
  173. package/dist/src/mcp/apps-screenshot.js.map +1 -0
  174. package/dist/src/mcp/catalog/definitions/agent-messaging.d.ts.map +1 -1
  175. package/dist/src/mcp/catalog/definitions/agent-messaging.js +18 -0
  176. package/dist/src/mcp/catalog/definitions/agent-messaging.js.map +1 -1
  177. package/dist/src/mcp/catalog/definitions/discovery-work-boards.d.ts +1 -0
  178. package/dist/src/mcp/catalog/definitions/discovery-work-boards.d.ts.map +1 -1
  179. package/dist/src/mcp/catalog/definitions/discovery-work-boards.js +59 -0
  180. package/dist/src/mcp/catalog/definitions/discovery-work-boards.js.map +1 -1
  181. package/dist/src/mcp/catalog/definitions/organisms-workspaces-apps.d.ts +3 -0
  182. package/dist/src/mcp/catalog/definitions/organisms-workspaces-apps.d.ts.map +1 -1
  183. package/dist/src/mcp/catalog/definitions/organisms-workspaces-apps.js +96 -2
  184. package/dist/src/mcp/catalog/definitions/organisms-workspaces-apps.js.map +1 -1
  185. package/dist/src/mcp/catalog/definitions/schedules-tasks-memory.d.ts +2 -0
  186. package/dist/src/mcp/catalog/definitions/schedules-tasks-memory.d.ts.map +1 -1
  187. package/dist/src/mcp/catalog/definitions/schedules-tasks-memory.js +7 -3
  188. package/dist/src/mcp/catalog/definitions/schedules-tasks-memory.js.map +1 -1
  189. package/dist/src/mcp/catalog/scopes.d.ts.map +1 -1
  190. package/dist/src/mcp/catalog/scopes.js +34 -1
  191. package/dist/src/mcp/catalog/scopes.js.map +1 -1
  192. package/dist/src/mcp/catalog/surfaces.d.ts.map +1 -1
  193. package/dist/src/mcp/catalog/surfaces.js +26 -7
  194. package/dist/src/mcp/catalog/surfaces.js.map +1 -1
  195. package/dist/src/mcp/core-admin.d.ts +7 -3
  196. package/dist/src/mcp/core-admin.d.ts.map +1 -1
  197. package/dist/src/mcp/core-admin.js +60 -3
  198. package/dist/src/mcp/core-admin.js.map +1 -1
  199. package/dist/src/mcp/core-datapackage.d.ts +32 -0
  200. package/dist/src/mcp/core-datapackage.d.ts.map +1 -0
  201. package/dist/src/mcp/core-datapackage.js +188 -0
  202. package/dist/src/mcp/core-datapackage.js.map +1 -0
  203. package/dist/src/mcp/core-storage.d.ts +7 -3
  204. package/dist/src/mcp/core-storage.d.ts.map +1 -1
  205. package/dist/src/mcp/core-storage.js +27 -4
  206. package/dist/src/mcp/core-storage.js.map +1 -1
  207. package/dist/src/mcp/core.d.ts.map +1 -1
  208. package/dist/src/mcp/core.js +3 -0
  209. package/dist/src/mcp/core.js.map +1 -1
  210. package/dist/src/mcp/extensions.d.ts.map +1 -1
  211. package/dist/src/mcp/extensions.js +11 -1
  212. package/dist/src/mcp/extensions.js.map +1 -1
  213. package/dist/src/mcp/index.d.ts +9 -0
  214. package/dist/src/mcp/index.d.ts.map +1 -1
  215. package/dist/src/mcp/index.js +43 -2
  216. package/dist/src/mcp/index.js.map +1 -1
  217. package/dist/src/mcp/organisms-email-invites.d.ts.map +1 -1
  218. package/dist/src/mcp/organisms-email-invites.js +2 -1
  219. package/dist/src/mcp/organisms-email-invites.js.map +1 -1
  220. package/dist/src/mcp/organisms-name-invites.d.ts.map +1 -1
  221. package/dist/src/mcp/organisms-name-invites.js +40 -1
  222. package/dist/src/mcp/organisms-name-invites.js.map +1 -1
  223. package/dist/src/mcp/organisms.d.ts.map +1 -1
  224. package/dist/src/mcp/organisms.js +6 -1
  225. package/dist/src/mcp/organisms.js.map +1 -1
  226. package/dist/src/mcp/tool-usage-wrap.d.ts +9 -0
  227. package/dist/src/mcp/tool-usage-wrap.d.ts.map +1 -0
  228. package/dist/src/mcp/tool-usage-wrap.js +87 -0
  229. package/dist/src/mcp/tool-usage-wrap.js.map +1 -0
  230. package/dist/src/mcp/workspaces.d.ts.map +1 -1
  231. package/dist/src/mcp/workspaces.js +9 -0
  232. package/dist/src/mcp/workspaces.js.map +1 -1
  233. package/dist/src/middleware/idempotency.d.ts +6 -0
  234. package/dist/src/middleware/idempotency.d.ts.map +1 -1
  235. package/dist/src/middleware/idempotency.js +23 -2
  236. package/dist/src/middleware/idempotency.js.map +1 -1
  237. package/dist/src/models/agent-task-schemas.d.ts.map +1 -1
  238. package/dist/src/models/agent-task-schemas.js +12 -1
  239. package/dist/src/models/agent-task-schemas.js.map +1 -1
  240. package/dist/src/models/webhook-schemas.d.ts +2 -2
  241. package/dist/src/models/workflow-schemas.d.ts +178 -1
  242. package/dist/src/models/workflow-schemas.d.ts.map +1 -1
  243. package/dist/src/models/workflow-schemas.js +75 -0
  244. package/dist/src/models/workflow-schemas.js.map +1 -1
  245. package/dist/src/routes/admin-extensions.d.ts +4 -0
  246. package/dist/src/routes/admin-extensions.d.ts.map +1 -1
  247. package/dist/src/routes/admin-extensions.js +135 -142
  248. package/dist/src/routes/admin-extensions.js.map +1 -1
  249. package/dist/src/routes/admin-monitoring.d.ts +2 -0
  250. package/dist/src/routes/admin-monitoring.d.ts.map +1 -1
  251. package/dist/src/routes/admin-monitoring.js +32 -0
  252. package/dist/src/routes/admin-monitoring.js.map +1 -1
  253. package/dist/src/routes/admin-organisms.d.ts +28 -0
  254. package/dist/src/routes/admin-organisms.d.ts.map +1 -0
  255. package/dist/src/routes/admin-organisms.js +99 -0
  256. package/dist/src/routes/admin-organisms.js.map +1 -0
  257. package/dist/src/routes/admin-usage.d.ts +33 -0
  258. package/dist/src/routes/admin-usage.d.ts.map +1 -0
  259. package/dist/src/routes/admin-usage.js +198 -0
  260. package/dist/src/routes/admin-usage.js.map +1 -0
  261. package/dist/src/routes/agent-conventions.d.ts.map +1 -1
  262. package/dist/src/routes/agent-conventions.js +4 -2
  263. package/dist/src/routes/agent-conventions.js.map +1 -1
  264. package/dist/src/routes/agent-docs.d.ts +4 -4
  265. package/dist/src/routes/agent-docs.js +145 -145
  266. package/dist/src/routes/agent-docs.js.map +1 -1
  267. package/dist/src/routes/agent-messages.d.ts +6 -0
  268. package/dist/src/routes/agent-messages.d.ts.map +1 -1
  269. package/dist/src/routes/agent-messages.js +23 -1
  270. package/dist/src/routes/agent-messages.js.map +1 -1
  271. package/dist/src/routes/agent-tasks/completion.d.ts +5 -0
  272. package/dist/src/routes/agent-tasks/completion.d.ts.map +1 -1
  273. package/dist/src/routes/agent-tasks/completion.js +35 -54
  274. package/dist/src/routes/agent-tasks/completion.js.map +1 -1
  275. package/dist/src/routes/agent-tasks/create-read.d.ts.map +1 -1
  276. package/dist/src/routes/agent-tasks/create-read.js +8 -1
  277. package/dist/src/routes/agent-tasks/create-read.js.map +1 -1
  278. package/dist/src/routes/agent-tasks/lifecycle.d.ts +4 -1
  279. package/dist/src/routes/agent-tasks/lifecycle.d.ts.map +1 -1
  280. package/dist/src/routes/agent-tasks/lifecycle.js +80 -2
  281. package/dist/src/routes/agent-tasks/lifecycle.js.map +1 -1
  282. package/dist/src/routes/agents/device-auth.d.ts.map +1 -1
  283. package/dist/src/routes/agents/device-auth.js +27 -4
  284. package/dist/src/routes/agents/device-auth.js.map +1 -1
  285. package/dist/src/routes/ai.d.ts +5 -0
  286. package/dist/src/routes/ai.d.ts.map +1 -1
  287. package/dist/src/routes/ai.js +51 -1
  288. package/dist/src/routes/ai.js.map +1 -1
  289. package/dist/src/routes/app-grants.d.ts.map +1 -1
  290. package/dist/src/routes/app-grants.js +5 -0
  291. package/dist/src/routes/app-grants.js.map +1 -1
  292. package/dist/src/routes/apps/drafts.d.ts +6 -0
  293. package/dist/src/routes/apps/drafts.d.ts.map +1 -1
  294. package/dist/src/routes/apps/drafts.js +133 -1
  295. package/dist/src/routes/apps/drafts.js.map +1 -1
  296. package/dist/src/routes/apps/read.d.ts +4 -0
  297. package/dist/src/routes/apps/read.d.ts.map +1 -1
  298. package/dist/src/routes/apps/read.js +47 -2
  299. package/dist/src/routes/apps/read.js.map +1 -1
  300. package/dist/src/routes/auth-otk.d.ts +28 -0
  301. package/dist/src/routes/auth-otk.d.ts.map +1 -0
  302. package/dist/src/routes/auth-otk.js +190 -0
  303. package/dist/src/routes/auth-otk.js.map +1 -0
  304. package/dist/src/routes/auth.d.ts +17 -0
  305. package/dist/src/routes/auth.d.ts.map +1 -1
  306. package/dist/src/routes/auth.js +44 -153
  307. package/dist/src/routes/auth.js.map +1 -1
  308. package/dist/src/routes/bootstrap.d.ts +6 -0
  309. package/dist/src/routes/bootstrap.d.ts.map +1 -1
  310. package/dist/src/routes/bootstrap.js +47 -20
  311. package/dist/src/routes/bootstrap.js.map +1 -1
  312. package/dist/src/routes/capabilities.d.ts +17 -0
  313. package/dist/src/routes/capabilities.d.ts.map +1 -1
  314. package/dist/src/routes/capabilities.js +187 -4
  315. package/dist/src/routes/capabilities.js.map +1 -1
  316. package/dist/src/routes/chat.d.ts +23 -0
  317. package/dist/src/routes/chat.d.ts.map +1 -0
  318. package/dist/src/routes/chat.js +165 -0
  319. package/dist/src/routes/chat.js.map +1 -0
  320. package/dist/src/routes/commerce.js +4 -4
  321. package/dist/src/routes/commerce.js.map +1 -1
  322. package/dist/src/routes/datapackages.d.ts +35 -0
  323. package/dist/src/routes/datapackages.d.ts.map +1 -0
  324. package/dist/src/routes/datapackages.js +217 -0
  325. package/dist/src/routes/datapackages.js.map +1 -0
  326. package/dist/src/routes/disputes.d.ts +27 -0
  327. package/dist/src/routes/disputes.d.ts.map +1 -1
  328. package/dist/src/routes/disputes.js +74 -79
  329. package/dist/src/routes/disputes.js.map +1 -1
  330. package/dist/src/routes/ecosystem-apps-advisories.d.ts +16 -0
  331. package/dist/src/routes/ecosystem-apps-advisories.d.ts.map +1 -0
  332. package/dist/src/routes/ecosystem-apps-advisories.js +104 -0
  333. package/dist/src/routes/ecosystem-apps-advisories.js.map +1 -0
  334. package/dist/src/routes/ecosystem-apps.d.ts +6 -0
  335. package/dist/src/routes/ecosystem-apps.d.ts.map +1 -1
  336. package/dist/src/routes/ecosystem-apps.js +31 -99
  337. package/dist/src/routes/ecosystem-apps.js.map +1 -1
  338. package/dist/src/routes/extensions/actions.d.ts.map +1 -1
  339. package/dist/src/routes/extensions/actions.js +29 -1
  340. package/dist/src/routes/extensions/actions.js.map +1 -1
  341. package/dist/src/routes/federation-sync/messaging.d.ts +6 -0
  342. package/dist/src/routes/federation-sync/messaging.d.ts.map +1 -1
  343. package/dist/src/routes/federation-sync/messaging.js +22 -1
  344. package/dist/src/routes/federation-sync/messaging.js.map +1 -1
  345. package/dist/src/routes/federation-sync/routing.d.ts.map +1 -1
  346. package/dist/src/routes/federation-sync/routing.js +12 -3
  347. package/dist/src/routes/federation-sync/routing.js.map +1 -1
  348. package/dist/src/routes/glossary.js +1 -1
  349. package/dist/src/routes/glossary.js.map +1 -1
  350. package/dist/src/routes/home/track.d.ts +5 -1
  351. package/dist/src/routes/home/track.d.ts.map +1 -1
  352. package/dist/src/routes/home/track.js +20 -6
  353. package/dist/src/routes/home/track.js.map +1 -1
  354. package/dist/src/routes/instances/install.d.ts +7 -0
  355. package/dist/src/routes/instances/install.d.ts.map +1 -1
  356. package/dist/src/routes/instances/install.js +31 -24
  357. package/dist/src/routes/instances/install.js.map +1 -1
  358. package/dist/src/routes/library-packs.d.ts +7 -0
  359. package/dist/src/routes/library-packs.d.ts.map +1 -1
  360. package/dist/src/routes/library-packs.js +32 -8
  361. package/dist/src/routes/library-packs.js.map +1 -1
  362. package/dist/src/routes/libs.js +1 -1
  363. package/dist/src/routes/libs.js.map +1 -1
  364. package/dist/src/routes/markdown-mirrors.js +1 -1
  365. package/dist/src/routes/markdown-mirrors.js.map +1 -1
  366. package/dist/src/routes/messages.d.ts +6 -0
  367. package/dist/src/routes/messages.d.ts.map +1 -1
  368. package/dist/src/routes/messages.js +15 -3
  369. package/dist/src/routes/messages.js.map +1 -1
  370. package/dist/src/routes/odata.d.ts +36 -0
  371. package/dist/src/routes/odata.d.ts.map +1 -0
  372. package/dist/src/routes/odata.js +143 -0
  373. package/dist/src/routes/odata.js.map +1 -0
  374. package/dist/src/routes/openrouter.d.ts +4 -0
  375. package/dist/src/routes/openrouter.d.ts.map +1 -1
  376. package/dist/src/routes/openrouter.js +10 -1
  377. package/dist/src/routes/openrouter.js.map +1 -1
  378. package/dist/src/routes/organisms/crud.d.ts +4 -0
  379. package/dist/src/routes/organisms/crud.d.ts.map +1 -1
  380. package/dist/src/routes/organisms/crud.js +25 -7
  381. package/dist/src/routes/organisms/crud.js.map +1 -1
  382. package/dist/src/routes/organisms/gates.d.ts.map +1 -1
  383. package/dist/src/routes/organisms/gates.js +19 -2
  384. package/dist/src/routes/organisms/gates.js.map +1 -1
  385. package/dist/src/routes/organisms/membership.d.ts +4 -0
  386. package/dist/src/routes/organisms/membership.d.ts.map +1 -1
  387. package/dist/src/routes/organisms/membership.js +88 -36
  388. package/dist/src/routes/organisms/membership.js.map +1 -1
  389. package/dist/src/routes/organisms/shared.d.ts.map +1 -1
  390. package/dist/src/routes/organisms/shared.js +2 -1
  391. package/dist/src/routes/organisms/shared.js.map +1 -1
  392. package/dist/src/routes/organisms/workspace-access.d.ts +5 -0
  393. package/dist/src/routes/organisms/workspace-access.d.ts.map +1 -1
  394. package/dist/src/routes/organisms/workspace-access.js +41 -2
  395. package/dist/src/routes/organisms/workspace-access.js.map +1 -1
  396. package/dist/src/routes/organisms/workspace-ops.d.ts +2 -0
  397. package/dist/src/routes/organisms/workspace-ops.d.ts.map +1 -1
  398. package/dist/src/routes/organisms/workspace-ops.js +10 -6
  399. package/dist/src/routes/organisms/workspace-ops.js.map +1 -1
  400. package/dist/src/routes/organisms/workspace-read.d.ts +3 -0
  401. package/dist/src/routes/organisms/workspace-read.d.ts.map +1 -1
  402. package/dist/src/routes/organisms/workspace-read.js +13 -7
  403. package/dist/src/routes/organisms/workspace-read.js.map +1 -1
  404. package/dist/src/routes/portal.d.ts +1 -0
  405. package/dist/src/routes/portal.d.ts.map +1 -1
  406. package/dist/src/routes/portal.js +13 -0
  407. package/dist/src/routes/portal.js.map +1 -1
  408. package/dist/src/routes/schedules.d.ts +4 -0
  409. package/dist/src/routes/schedules.d.ts.map +1 -1
  410. package/dist/src/routes/schedules.js +9 -1
  411. package/dist/src/routes/schedules.js.map +1 -1
  412. package/dist/src/routes/storage-files.d.ts +23 -0
  413. package/dist/src/routes/storage-files.d.ts.map +1 -1
  414. package/dist/src/routes/storage-files.js +103 -82
  415. package/dist/src/routes/storage-files.js.map +1 -1
  416. package/dist/src/routes/subdomains.d.ts +9 -1
  417. package/dist/src/routes/subdomains.d.ts.map +1 -1
  418. package/dist/src/routes/subdomains.js +55 -1
  419. package/dist/src/routes/subdomains.js.map +1 -1
  420. package/dist/src/routes/usage-reports.d.ts +31 -0
  421. package/dist/src/routes/usage-reports.d.ts.map +1 -0
  422. package/dist/src/routes/usage-reports.js +107 -0
  423. package/dist/src/routes/usage-reports.js.map +1 -0
  424. package/dist/src/routes/validate.d.ts.map +1 -1
  425. package/dist/src/routes/validate.js +1 -0
  426. package/dist/src/routes/validate.js.map +1 -1
  427. package/dist/src/routes/workflows.d.ts.map +1 -1
  428. package/dist/src/routes/workflows.js +9 -1
  429. package/dist/src/routes/workflows.js.map +1 -1
  430. package/dist/src/server-bootstrap/routes-loader.d.ts +2 -0
  431. package/dist/src/server-bootstrap/routes-loader.d.ts.map +1 -1
  432. package/dist/src/server-bootstrap/routes-loader.js +32 -2
  433. package/dist/src/server-bootstrap/routes-loader.js.map +1 -1
  434. package/dist/src/server-bootstrap/service-init.d.ts.map +1 -1
  435. package/dist/src/server-bootstrap/service-init.js +12 -7
  436. package/dist/src/server-bootstrap/service-init.js.map +1 -1
  437. package/dist/src/server-bootstrap/static-files.d.ts.map +1 -1
  438. package/dist/src/server-bootstrap/static-files.js +44 -10
  439. package/dist/src/server-bootstrap/static-files.js.map +1 -1
  440. package/dist/src/services/agent-task-fanout.d.ts +61 -0
  441. package/dist/src/services/agent-task-fanout.d.ts.map +1 -1
  442. package/dist/src/services/agent-task-fanout.js +114 -2
  443. package/dist/src/services/agent-task-fanout.js.map +1 -1
  444. package/dist/src/services/agent-task-write.d.ts.map +1 -1
  445. package/dist/src/services/agent-task-write.js +6 -0
  446. package/dist/src/services/agent-task-write.js.map +1 -1
  447. package/dist/src/services/ai-allowance.d.ts +82 -0
  448. package/dist/src/services/ai-allowance.d.ts.map +1 -0
  449. package/dist/src/services/ai-allowance.js +117 -0
  450. package/dist/src/services/ai-allowance.js.map +1 -0
  451. package/dist/src/services/ai-completion.d.ts +39 -0
  452. package/dist/src/services/ai-completion.d.ts.map +1 -1
  453. package/dist/src/services/ai-completion.js +77 -10
  454. package/dist/src/services/ai-completion.js.map +1 -1
  455. package/dist/src/services/ai-image.d.ts +70 -0
  456. package/dist/src/services/ai-image.d.ts.map +1 -0
  457. package/dist/src/services/ai-image.js +104 -0
  458. package/dist/src/services/ai-image.js.map +1 -0
  459. package/dist/src/services/ai-model-defaults.d.ts +45 -0
  460. package/dist/src/services/ai-model-defaults.d.ts.map +1 -0
  461. package/dist/src/services/ai-model-defaults.js +42 -0
  462. package/dist/src/services/ai-model-defaults.js.map +1 -0
  463. package/dist/src/services/ai-tool-setup.d.ts +5 -1
  464. package/dist/src/services/ai-tool-setup.d.ts.map +1 -1
  465. package/dist/src/services/ai-tool-setup.js +36 -0
  466. package/dist/src/services/ai-tool-setup.js.map +1 -1
  467. package/dist/src/services/ai-transcription.d.ts +5 -0
  468. package/dist/src/services/ai-transcription.d.ts.map +1 -1
  469. package/dist/src/services/ai-transcription.js +10 -2
  470. package/dist/src/services/ai-transcription.js.map +1 -1
  471. package/dist/src/services/ai-usage-admin.d.ts +19 -8
  472. package/dist/src/services/ai-usage-admin.d.ts.map +1 -1
  473. package/dist/src/services/ai-usage-admin.js +30 -35
  474. package/dist/src/services/ai-usage-admin.js.map +1 -1
  475. package/dist/src/services/app-agent-surfaces.js +4 -4
  476. package/dist/src/services/app-agent-surfaces.js.map +1 -1
  477. package/dist/src/services/app-artifact-lint.d.ts +4 -0
  478. package/dist/src/services/app-artifact-lint.d.ts.map +1 -1
  479. package/dist/src/services/app-artifact-lint.js +49 -0
  480. package/dist/src/services/app-artifact-lint.js.map +1 -1
  481. package/dist/src/services/app-draft-edit.d.ts +144 -0
  482. package/dist/src/services/app-draft-edit.d.ts.map +1 -0
  483. package/dist/src/services/app-draft-edit.js +203 -0
  484. package/dist/src/services/app-draft-edit.js.map +1 -0
  485. package/dist/src/services/app-spec-gate.d.ts +4 -0
  486. package/dist/src/services/app-spec-gate.d.ts.map +1 -1
  487. package/dist/src/services/app-spec-gate.js +16 -1
  488. package/dist/src/services/app-spec-gate.js.map +1 -1
  489. package/dist/src/services/attachment-duplication.d.ts +4 -0
  490. package/dist/src/services/attachment-duplication.d.ts.map +1 -1
  491. package/dist/src/services/attachment-duplication.js +15 -0
  492. package/dist/src/services/attachment-duplication.js.map +1 -1
  493. package/dist/src/services/auth-md.js +2 -2
  494. package/dist/src/services/auth-md.js.map +1 -1
  495. package/dist/src/services/board-write.d.ts +11 -3
  496. package/dist/src/services/board-write.d.ts.map +1 -1
  497. package/dist/src/services/board-write.js +24 -3
  498. package/dist/src/services/board-write.js.map +1 -1
  499. package/dist/src/services/capability-record.d.ts.map +1 -1
  500. package/dist/src/services/capability-record.js +22 -9
  501. package/dist/src/services/capability-record.js.map +1 -1
  502. package/dist/src/services/chat-agent.d.ts +36 -0
  503. package/dist/src/services/chat-agent.d.ts.map +1 -0
  504. package/dist/src/services/chat-agent.js +123 -0
  505. package/dist/src/services/chat-agent.js.map +1 -0
  506. package/dist/src/services/chat-session.d.ts +58 -0
  507. package/dist/src/services/chat-session.d.ts.map +1 -0
  508. package/dist/src/services/chat-session.js +151 -0
  509. package/dist/src/services/chat-session.js.map +1 -0
  510. package/dist/src/services/chat-threads.d.ts +61 -0
  511. package/dist/src/services/chat-threads.d.ts.map +1 -0
  512. package/dist/src/services/chat-threads.js +137 -0
  513. package/dist/src/services/chat-threads.js.map +1 -0
  514. package/dist/src/services/config-schema.d.ts.map +1 -1
  515. package/dist/src/services/config-schema.js +2 -1
  516. package/dist/src/services/config-schema.js.map +1 -1
  517. package/dist/src/services/core-jobs.d.ts +2 -0
  518. package/dist/src/services/core-jobs.d.ts.map +1 -1
  519. package/dist/src/services/core-jobs.js +11 -0
  520. package/dist/src/services/core-jobs.js.map +1 -1
  521. package/dist/src/services/datapackage/contract.d.ts +198 -0
  522. package/dist/src/services/datapackage/contract.d.ts.map +1 -0
  523. package/dist/src/services/datapackage/contract.js +140 -0
  524. package/dist/src/services/datapackage/contract.js.map +1 -0
  525. package/dist/src/services/datapackage/ext-capability.d.ts +85 -0
  526. package/dist/src/services/datapackage/ext-capability.d.ts.map +1 -0
  527. package/dist/src/services/datapackage/ext-capability.js +72 -0
  528. package/dist/src/services/datapackage/ext-capability.js.map +1 -0
  529. package/dist/src/services/datapackage/odata.d.ts +92 -0
  530. package/dist/src/services/datapackage/odata.d.ts.map +1 -0
  531. package/dist/src/services/datapackage/odata.js +256 -0
  532. package/dist/src/services/datapackage/odata.js.map +1 -0
  533. package/dist/src/services/datapackage/odps.d.ts +24 -0
  534. package/dist/src/services/datapackage/odps.d.ts.map +1 -0
  535. package/dist/src/services/datapackage/odps.js +183 -0
  536. package/dist/src/services/datapackage/odps.js.map +1 -0
  537. package/dist/src/services/datapackage/store.d.ts +143 -0
  538. package/dist/src/services/datapackage/store.d.ts.map +1 -0
  539. package/dist/src/services/datapackage/store.js +533 -0
  540. package/dist/src/services/datapackage/store.js.map +1 -0
  541. package/dist/src/services/datapackage/table.d.ts +67 -0
  542. package/dist/src/services/datapackage/table.d.ts.map +1 -0
  543. package/dist/src/services/datapackage/table.js +0 -0
  544. package/dist/src/services/datapackage/table.js.map +1 -0
  545. package/dist/src/services/extension-ctx.d.ts +1 -0
  546. package/dist/src/services/extension-ctx.d.ts.map +1 -1
  547. package/dist/src/services/extension-ctx.js +31 -6
  548. package/dist/src/services/extension-ctx.js.map +1 -1
  549. package/dist/src/services/extension-files.d.ts +20 -0
  550. package/dist/src/services/extension-files.d.ts.map +1 -1
  551. package/dist/src/services/extension-files.js +9 -2
  552. package/dist/src/services/extension-files.js.map +1 -1
  553. package/dist/src/services/extension-lifecycle.d.ts +3 -0
  554. package/dist/src/services/extension-lifecycle.d.ts.map +1 -1
  555. package/dist/src/services/extension-lifecycle.js +2 -26
  556. package/dist/src/services/extension-lifecycle.js.map +1 -1
  557. package/dist/src/services/extension-runtime.d.ts +28 -2
  558. package/dist/src/services/extension-runtime.d.ts.map +1 -1
  559. package/dist/src/services/extension-runtime.js +22 -0
  560. package/dist/src/services/extension-runtime.js.map +1 -1
  561. package/dist/src/services/extension-schedules.d.ts +90 -0
  562. package/dist/src/services/extension-schedules.d.ts.map +1 -0
  563. package/dist/src/services/extension-schedules.js +123 -0
  564. package/dist/src/services/extension-schedules.js.map +1 -0
  565. package/dist/src/services/extension-system-run.d.ts +91 -0
  566. package/dist/src/services/extension-system-run.d.ts.map +1 -0
  567. package/dist/src/services/extension-system-run.js +100 -0
  568. package/dist/src/services/extension-system-run.js.map +1 -0
  569. package/dist/src/services/extension-upsert.d.ts +2 -0
  570. package/dist/src/services/extension-upsert.d.ts.map +1 -1
  571. package/dist/src/services/extension-upsert.js +6 -24
  572. package/dist/src/services/extension-upsert.js.map +1 -1
  573. package/dist/src/services/goose-acp.d.ts +84 -0
  574. package/dist/src/services/goose-acp.d.ts.map +1 -0
  575. package/dist/src/services/goose-acp.js +304 -0
  576. package/dist/src/services/goose-acp.js.map +1 -0
  577. package/dist/src/services/invitations.d.ts +0 -20
  578. package/dist/src/services/invitations.d.ts.map +1 -1
  579. package/dist/src/services/invitations.js +30 -0
  580. package/dist/src/services/invitations.js.map +1 -1
  581. package/dist/src/services/job-seeding.d.ts +1 -0
  582. package/dist/src/services/job-seeding.d.ts.map +1 -1
  583. package/dist/src/services/job-seeding.js +6 -0
  584. package/dist/src/services/job-seeding.js.map +1 -1
  585. package/dist/src/services/ledger-admin.d.ts +18 -4
  586. package/dist/src/services/ledger-admin.d.ts.map +1 -1
  587. package/dist/src/services/ledger-admin.js +47 -33
  588. package/dist/src/services/ledger-admin.js.map +1 -1
  589. package/dist/src/services/markdown-negotiation.js +1 -1
  590. package/dist/src/services/markdown-negotiation.js.map +1 -1
  591. package/dist/src/services/message-broadcast.d.ts.map +1 -1
  592. package/dist/src/services/message-broadcast.js +29 -1
  593. package/dist/src/services/message-broadcast.js.map +1 -1
  594. package/dist/src/services/metered-access.d.ts +9 -2
  595. package/dist/src/services/metered-access.d.ts.map +1 -1
  596. package/dist/src/services/metered-access.js +92 -12
  597. package/dist/src/services/metered-access.js.map +1 -1
  598. package/dist/src/services/openrouter.d.ts +20 -1
  599. package/dist/src/services/openrouter.d.ts.map +1 -1
  600. package/dist/src/services/openrouter.js +66 -0
  601. package/dist/src/services/openrouter.js.map +1 -1
  602. package/dist/src/services/organism-import.d.ts.map +1 -1
  603. package/dist/src/services/organism-import.js +4 -1
  604. package/dist/src/services/organism-import.js.map +1 -1
  605. package/dist/src/services/organism-lifecycle.d.ts.map +1 -1
  606. package/dist/src/services/organism-lifecycle.js +5 -1
  607. package/dist/src/services/organism-lifecycle.js.map +1 -1
  608. package/dist/src/services/organism-ownership.d.ts +56 -0
  609. package/dist/src/services/organism-ownership.d.ts.map +1 -0
  610. package/dist/src/services/organism-ownership.js +174 -0
  611. package/dist/src/services/organism-ownership.js.map +1 -0
  612. package/dist/src/services/organism-privacy.d.ts.map +1 -1
  613. package/dist/src/services/organism-privacy.js +2 -1
  614. package/dist/src/services/organism-privacy.js.map +1 -1
  615. package/dist/src/services/prompt-defaults/tiers-core.js +4 -4
  616. package/dist/src/services/scheduler-extension-job.d.ts +29 -6
  617. package/dist/src/services/scheduler-extension-job.d.ts.map +1 -1
  618. package/dist/src/services/scheduler-extension-job.js +29 -75
  619. package/dist/src/services/scheduler-extension-job.js.map +1 -1
  620. package/dist/src/services/scope-vocabulary-migration.d.ts +54 -1
  621. package/dist/src/services/scope-vocabulary-migration.d.ts.map +1 -1
  622. package/dist/src/services/scope-vocabulary-migration.js +101 -6
  623. package/dist/src/services/scope-vocabulary-migration.js.map +1 -1
  624. package/dist/src/services/screenshot-capture.d.ts +40 -1
  625. package/dist/src/services/screenshot-capture.d.ts.map +1 -1
  626. package/dist/src/services/screenshot-capture.js +142 -60
  627. package/dist/src/services/screenshot-capture.js.map +1 -1
  628. package/dist/src/services/skill-bundle/generator.js +1 -1
  629. package/dist/src/services/skill-bundle/generic-adapter.js +1 -1
  630. package/dist/src/services/skill-bundle/hermes-adapter.js +1 -1
  631. package/dist/src/services/storage-file-write.d.ts +36 -1
  632. package/dist/src/services/storage-file-write.d.ts.map +1 -1
  633. package/dist/src/services/storage-file-write.js +49 -3
  634. package/dist/src/services/storage-file-write.js.map +1 -1
  635. package/dist/src/services/task-outcome.d.ts +53 -0
  636. package/dist/src/services/task-outcome.d.ts.map +1 -0
  637. package/dist/src/services/task-outcome.js +28 -0
  638. package/dist/src/services/task-outcome.js.map +1 -0
  639. package/dist/src/services/usage/archive-job.d.ts +25 -0
  640. package/dist/src/services/usage/archive-job.d.ts.map +1 -0
  641. package/dist/src/services/usage/archive-job.js +36 -0
  642. package/dist/src/services/usage/archive-job.js.map +1 -0
  643. package/dist/src/services/usage/record-app-open.d.ts +8 -0
  644. package/dist/src/services/usage/record-app-open.d.ts.map +1 -0
  645. package/dist/src/services/usage/record-app-open.js +52 -0
  646. package/dist/src/services/usage/record-app-open.js.map +1 -0
  647. package/dist/src/services/usage/rollup-cuts.d.ts +44 -0
  648. package/dist/src/services/usage/rollup-cuts.d.ts.map +1 -0
  649. package/dist/src/services/usage/rollup-cuts.js +81 -0
  650. package/dist/src/services/usage/rollup-cuts.js.map +1 -0
  651. package/dist/src/services/usage/rollup-engine.d.ts +71 -0
  652. package/dist/src/services/usage/rollup-engine.d.ts.map +1 -0
  653. package/dist/src/services/usage/rollup-engine.js +237 -0
  654. package/dist/src/services/usage/rollup-engine.js.map +1 -0
  655. package/dist/src/services/usage/usage-buffer.d.ts +25 -0
  656. package/dist/src/services/usage/usage-buffer.d.ts.map +1 -0
  657. package/dist/src/services/usage/usage-buffer.js +146 -0
  658. package/dist/src/services/usage/usage-buffer.js.map +1 -0
  659. package/dist/src/services/usage/usage-read.d.ts +115 -0
  660. package/dist/src/services/usage/usage-read.d.ts.map +1 -0
  661. package/dist/src/services/usage/usage-read.js +246 -0
  662. package/dist/src/services/usage/usage-read.js.map +1 -0
  663. package/dist/src/services/usage-metering.d.ts +5 -0
  664. package/dist/src/services/usage-metering.d.ts.map +1 -1
  665. package/dist/src/services/usage-metering.js +7 -0
  666. package/dist/src/services/usage-metering.js.map +1 -1
  667. package/dist/src/services/workflow/engine-human.d.ts +15 -0
  668. package/dist/src/services/workflow/engine-human.d.ts.map +1 -1
  669. package/dist/src/services/workflow/engine-human.js +10 -1
  670. package/dist/src/services/workflow/engine-human.js.map +1 -1
  671. package/dist/src/services/workflow/engine-steps.d.ts +48 -3
  672. package/dist/src/services/workflow/engine-steps.d.ts.map +1 -1
  673. package/dist/src/services/workflow/engine-steps.js +361 -0
  674. package/dist/src/services/workflow/engine-steps.js.map +1 -1
  675. package/dist/src/services/workflow/engine.d.ts +1 -0
  676. package/dist/src/services/workflow/engine.d.ts.map +1 -1
  677. package/dist/src/services/workflow/engine.js +2 -1
  678. package/dist/src/services/workflow/engine.js.map +1 -1
  679. package/dist/src/services/workflow/store.d.ts.map +1 -1
  680. package/dist/src/services/workflow/store.js +60 -4
  681. package/dist/src/services/workflow/store.js.map +1 -1
  682. package/dist/src/services/write-guards.d.ts +27 -1
  683. package/dist/src/services/write-guards.d.ts.map +1 -1
  684. package/dist/src/services/write-guards.js +39 -9
  685. package/dist/src/services/write-guards.js.map +1 -1
  686. package/dist/src/storage/interface.d.ts +4 -1
  687. package/dist/src/storage/interface.d.ts.map +1 -1
  688. package/dist/src/storage/interface.js +1 -0
  689. package/dist/src/storage/interface.js.map +1 -1
  690. package/dist/src/storage/providers/postgres-kysely/db-types.d.ts +119 -0
  691. package/dist/src/storage/providers/postgres-kysely/db-types.d.ts.map +1 -1
  692. package/dist/src/storage/providers/postgres-kysely/index.d.ts.map +1 -1
  693. package/dist/src/storage/providers/postgres-kysely/index.js +2 -1
  694. package/dist/src/storage/providers/postgres-kysely/index.js.map +1 -1
  695. package/dist/src/storage/providers/postgres-kysely/methods/agent-tasks.d.ts.map +1 -1
  696. package/dist/src/storage/providers/postgres-kysely/methods/agent-tasks.js +3 -0
  697. package/dist/src/storage/providers/postgres-kysely/methods/agent-tasks.js.map +1 -1
  698. package/dist/src/storage/providers/postgres-kysely/methods/agent-usage.d.ts.map +1 -1
  699. package/dist/src/storage/providers/postgres-kysely/methods/agent-usage.js +4 -0
  700. package/dist/src/storage/providers/postgres-kysely/methods/agent-usage.js.map +1 -1
  701. package/dist/src/storage/providers/postgres-kysely/methods/app-grants.d.ts +1 -0
  702. package/dist/src/storage/providers/postgres-kysely/methods/app-grants.d.ts.map +1 -1
  703. package/dist/src/storage/providers/postgres-kysely/methods/app-grants.js +3 -0
  704. package/dist/src/storage/providers/postgres-kysely/methods/app-grants.js.map +1 -1
  705. package/dist/src/storage/providers/postgres-kysely/methods/files.d.ts +2 -0
  706. package/dist/src/storage/providers/postgres-kysely/methods/files.d.ts.map +1 -1
  707. package/dist/src/storage/providers/postgres-kysely/methods/files.js +34 -2
  708. package/dist/src/storage/providers/postgres-kysely/methods/files.js.map +1 -1
  709. package/dist/src/storage/providers/postgres-kysely/methods/organisms.d.ts.map +1 -1
  710. package/dist/src/storage/providers/postgres-kysely/methods/organisms.js +11 -2
  711. package/dist/src/storage/providers/postgres-kysely/methods/organisms.js.map +1 -1
  712. package/dist/src/storage/providers/postgres-kysely/methods/usage.d.ts +32 -0
  713. package/dist/src/storage/providers/postgres-kysely/methods/usage.d.ts.map +1 -0
  714. package/dist/src/storage/providers/postgres-kysely/methods/usage.js +336 -0
  715. package/dist/src/storage/providers/postgres-kysely/methods/usage.js.map +1 -0
  716. package/dist/src/storage/providers/postgres-kysely/migrations/0036_usage_telemetry.sql +181 -0
  717. package/dist/src/storage/providers/postgres-kysely/migrations/0037_task_created_by.sql +18 -0
  718. package/dist/src/storage/providers/postgres-kysely/migrations/0038_organism_owners.sql +31 -0
  719. package/dist/src/storage/providers/postgres-kysely/migrations/0039_storage_file_utf8_verified.sql +19 -0
  720. package/dist/src/storage/providers/sqlite/index.d.ts.map +1 -1
  721. package/dist/src/storage/providers/sqlite/index.js +3 -1
  722. package/dist/src/storage/providers/sqlite/index.js.map +1 -1
  723. package/dist/src/storage/providers/sqlite/methods/apps.d.ts +1 -0
  724. package/dist/src/storage/providers/sqlite/methods/apps.d.ts.map +1 -1
  725. package/dist/src/storage/providers/sqlite/methods/apps.js +33 -28
  726. package/dist/src/storage/providers/sqlite/methods/apps.js.map +1 -1
  727. package/dist/src/storage/providers/sqlite/methods/governance.d.ts +2 -0
  728. package/dist/src/storage/providers/sqlite/methods/governance.d.ts.map +1 -1
  729. package/dist/src/storage/providers/sqlite/methods/governance.js +25 -4
  730. package/dist/src/storage/providers/sqlite/methods/governance.js.map +1 -1
  731. package/dist/src/storage/providers/sqlite/methods/identity-nodes.d.ts +1 -12
  732. package/dist/src/storage/providers/sqlite/methods/identity-nodes.d.ts.map +1 -1
  733. package/dist/src/storage/providers/sqlite/methods/identity-nodes.js +28 -135
  734. package/dist/src/storage/providers/sqlite/methods/identity-nodes.js.map +1 -1
  735. package/dist/src/storage/providers/sqlite/methods/storage-files.d.ts +38 -0
  736. package/dist/src/storage/providers/sqlite/methods/storage-files.d.ts.map +1 -0
  737. package/dist/src/storage/providers/sqlite/methods/storage-files.js +109 -0
  738. package/dist/src/storage/providers/sqlite/methods/storage-files.js.map +1 -0
  739. package/dist/src/storage/providers/sqlite/methods/usage.d.ts +43 -0
  740. package/dist/src/storage/providers/sqlite/methods/usage.d.ts.map +1 -0
  741. package/dist/src/storage/providers/sqlite/methods/usage.js +37 -0
  742. package/dist/src/storage/providers/sqlite/methods/usage.js.map +1 -0
  743. package/dist/src/storage/providers/sqlite/repos/agent-task.d.ts +1 -0
  744. package/dist/src/storage/providers/sqlite/repos/agent-task.d.ts.map +1 -1
  745. package/dist/src/storage/providers/sqlite/repos/agent-task.js +4 -2
  746. package/dist/src/storage/providers/sqlite/repos/agent-task.js.map +1 -1
  747. package/dist/src/storage/providers/sqlite/repos/agent-usage.d.ts.map +1 -1
  748. package/dist/src/storage/providers/sqlite/repos/agent-usage.js +4 -2
  749. package/dist/src/storage/providers/sqlite/repos/agent-usage.js.map +1 -1
  750. package/dist/src/storage/providers/sqlite/repos/community.d.ts.map +1 -1
  751. package/dist/src/storage/providers/sqlite/repos/community.js +20 -0
  752. package/dist/src/storage/providers/sqlite/repos/community.js.map +1 -1
  753. package/dist/src/storage/providers/sqlite/repos/usage.d.ts +35 -0
  754. package/dist/src/storage/providers/sqlite/repos/usage.d.ts.map +1 -0
  755. package/dist/src/storage/providers/sqlite/repos/usage.js +352 -0
  756. package/dist/src/storage/providers/sqlite/repos/usage.js.map +1 -0
  757. package/dist/src/storage/providers/sqlite/schema-tables-1.d.ts.map +1 -1
  758. package/dist/src/storage/providers/sqlite/schema-tables-1.js +2 -0
  759. package/dist/src/storage/providers/sqlite/schema-tables-1.js.map +1 -1
  760. package/dist/src/storage/providers/sqlite/schema-tables-3.d.ts +1 -0
  761. package/dist/src/storage/providers/sqlite/schema-tables-3.d.ts.map +1 -1
  762. package/dist/src/storage/providers/sqlite/schema-tables-3.js +1 -0
  763. package/dist/src/storage/providers/sqlite/schema-tables-3.js.map +1 -1
  764. package/dist/src/storage/providers/sqlite/schema-tables-4.d.ts +2 -0
  765. package/dist/src/storage/providers/sqlite/schema-tables-4.d.ts.map +1 -1
  766. package/dist/src/storage/providers/sqlite/schema-tables-4.js +131 -0
  767. package/dist/src/storage/providers/sqlite/schema-tables-4.js.map +1 -1
  768. package/dist/src/storage/providers/sqlite/schema.d.ts +2 -0
  769. package/dist/src/storage/providers/sqlite/schema.d.ts.map +1 -1
  770. package/dist/src/storage/providers/sqlite/schema.js +155 -130
  771. package/dist/src/storage/providers/sqlite/schema.js.map +1 -1
  772. package/dist/src/storage/repositories/app-grant.repository.d.ts +11 -0
  773. package/dist/src/storage/repositories/app-grant.repository.d.ts.map +1 -1
  774. package/dist/src/storage/repositories/file.repository.d.ts +13 -0
  775. package/dist/src/storage/repositories/file.repository.d.ts.map +1 -1
  776. package/dist/src/storage/repositories/usage.repository.d.ts +80 -0
  777. package/dist/src/storage/repositories/usage.repository.d.ts.map +1 -0
  778. package/dist/src/storage/repositories/usage.repository.js +23 -0
  779. package/dist/src/storage/repositories/usage.repository.js.map +1 -0
  780. package/dist/src/storage/types/agents-messaging.d.ts +24 -0
  781. package/dist/src/storage/types/agents-messaging.d.ts.map +1 -1
  782. package/dist/src/storage/types/agents-messaging.js +1 -0
  783. package/dist/src/storage/types/agents-messaging.js.map +1 -1
  784. package/dist/src/storage/types/commerce.d.ts +6 -0
  785. package/dist/src/storage/types/commerce.d.ts.map +1 -1
  786. package/dist/src/storage/types/organisms-federation.d.ts +21 -0
  787. package/dist/src/storage/types/organisms-federation.d.ts.map +1 -1
  788. package/dist/src/storage/types/usage.d.ts +186 -0
  789. package/dist/src/storage/types/usage.d.ts.map +1 -0
  790. package/dist/src/storage/types/usage.js +24 -0
  791. package/dist/src/storage/types/usage.js.map +1 -0
  792. package/dist/src/utils/agent-footer.d.ts.map +1 -1
  793. package/dist/src/utils/agent-footer.js +1 -0
  794. package/dist/src/utils/agent-footer.js.map +1 -1
  795. package/dist/src/utils/app-content-type.d.ts +57 -3
  796. package/dist/src/utils/app-content-type.d.ts.map +1 -1
  797. package/dist/src/utils/app-content-type.js +81 -12
  798. package/dist/src/utils/app-content-type.js.map +1 -1
  799. package/dist/src/utils/env-config/sections-features.d.ts.map +1 -1
  800. package/dist/src/utils/env-config/sections-features.js +9 -3
  801. package/dist/src/utils/env-config/sections-features.js.map +1 -1
  802. package/dist/src/utils/file-download-headers.d.ts +5 -3
  803. package/dist/src/utils/file-download-headers.d.ts.map +1 -1
  804. package/dist/src/utils/file-download-headers.js +18 -5
  805. package/dist/src/utils/file-download-headers.js.map +1 -1
  806. package/dist/src/utils/http-range.d.ts +151 -0
  807. package/dist/src/utils/http-range.d.ts.map +1 -0
  808. package/dist/src/utils/http-range.js +190 -0
  809. package/dist/src/utils/http-range.js.map +1 -0
  810. package/dist/src/utils/page-head.d.ts +5 -0
  811. package/dist/src/utils/page-head.d.ts.map +1 -1
  812. package/dist/src/utils/page-head.js +10 -1
  813. package/dist/src/utils/page-head.js.map +1 -1
  814. package/dist/src/utils/reserved-keys.d.ts +4 -1
  815. package/dist/src/utils/reserved-keys.d.ts.map +1 -1
  816. package/dist/src/utils/reserved-keys.js +4 -1
  817. package/dist/src/utils/reserved-keys.js.map +1 -1
  818. package/dist/src/utils/scope-coverage.d.ts +21 -0
  819. package/dist/src/utils/scope-coverage.d.ts.map +1 -1
  820. package/dist/src/utils/scope-coverage.js +22 -1
  821. package/dist/src/utils/scope-coverage.js.map +1 -1
  822. package/dist/static/sdk-libs/datapackage/index.js +336 -0
  823. package/dist/static/sdk-libs/dist/aimeat-datapackage.js +305 -0
  824. package/package.json +13 -2
@@ -0,0 +1,257 @@
1
+ /**
2
+ * @file public/views/chat/parts.js
3
+ * @description What the chat page is made of: the conversation list, one turn, the work log, and
4
+ * the box a person types into.
5
+ *
6
+ * Two registers share one column. The conversation is what was said; the work log is what was
7
+ * actually done, one line per tool call, and it is shown by default rather than folded away. A
8
+ * chat that reports "done" without showing the calls asks to be believed; this one can be checked.
9
+ * @structure
10
+ * - ThreadList — the person's conversations
11
+ * - Turn — one thing said, with the tools that ran while it was said
12
+ * - WorkLine — one tool call, its status, and what it was
13
+ * - Composer — the box, Enter to send, Shift+Enter for a newline, and a recorder beside it
14
+ * - StatusBar — which agent, what is left to spend, and what is wrong when something is
15
+ * @usage import { ThreadList, Turn, Composer, StatusBar } from './chat/parts.js';
16
+ * @version-history
17
+ * v1.1.0 — 2026-08-16 — Speech both ways: a recording becomes text in the box, which the person
18
+ * reads before sending, and an agent turn can be read aloud.
19
+ * v1.0.0 — 2026-08-16 — Initial.
20
+ */
21
+ import { h } from 'preact';
22
+ import { useRef, useEffect, useState } from 'preact/hooks';
23
+ import htm from 'htm';
24
+ import { t } from '/js/i18n.js';
25
+ import { Markdown } from '/components/Markdown.js';
26
+ import { VoiceRecorder } from '/components/VoiceRecorder.js';
27
+ import { speak, stop as stopSpeaking, isSpeechSupported, textToParagraphs } from '/js/services/speech-reader.js';
28
+
29
+ const html = htm.bind(h);
30
+ const tr = (key, fallback) => { const v = t(key); return v && v !== key ? v : fallback; };
31
+
32
+ /** hh:mm in the reader's own locale, which is all a turn needs. */
33
+ function timeShort(iso) {
34
+ if (!iso) return '';
35
+ const d = new Date(iso);
36
+ return Number.isNaN(d.getTime()) ? '' : d.toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' });
37
+ }
38
+
39
+ /**
40
+ * One tool call, as a line in the work log.
41
+ *
42
+ * The status is a word rather than a colour alone: a person who cannot see the difference between
43
+ * two greens still has to be able to tell a call that finished from one that failed.
44
+ */
45
+ export function WorkLine({ tool }) {
46
+ const status = String(tool.status || 'pending');
47
+ const label = tr(`chat.work.${status}`, status);
48
+ return html`
49
+ <li class="chat-work-line chat-work-line--${status}">
50
+ <span class="chat-work-status">${label}</span>
51
+ <span class="chat-work-title">${tool.title || tr('chat.work.untitled', 'a tool call')}</span>
52
+ </li>
53
+ `;
54
+ }
55
+
56
+ /** The work log for one turn: every tool call it made, in the order it made them. */
57
+ export function WorkLog({ tools }) {
58
+ if (!tools || tools.length === 0) return null;
59
+ return html`
60
+ <div class="chat-work">
61
+ <div class="chat-work-head">${tr('chat.work.title', 'What was done')}</div>
62
+ <ul class="chat-work-list">
63
+ ${tools.map((tool, i) => html`<${WorkLine} key=${i} tool=${tool} />`)}
64
+ </ul>
65
+ </div>
66
+ `;
67
+ }
68
+
69
+ /**
70
+ * One turn.
71
+ *
72
+ * The agent's words go through the markdown renderer because the agent writes markdown; the
73
+ * person's do not, because what they typed is what they meant.
74
+ */
75
+ export function Turn({ turn, id }) {
76
+ const mine = turn.role === 'user';
77
+ const [reading, setReading] = useState(false);
78
+ // A turn that failed before the agent said anything leaves an empty record, and an empty bubble
79
+ // on screen reads as a message that arrived blank. Nothing was said, so nothing is drawn; the
80
+ // error above it is what happened.
81
+ if (!mine && !turn.text && !(turn.tools && turn.tools.length)) return null;
82
+
83
+ const listen = () => {
84
+ if (reading) { stopSpeaking(); setReading(false); return; }
85
+ setReading(speak(id, textToParagraphs(turn.text || '')));
86
+ };
87
+
88
+ return html`
89
+ <div class="chat-turn chat-turn--${mine ? 'user' : 'agent'}">
90
+ <div class="chat-bubble">
91
+ ${mine
92
+ ? html`<p class="chat-said">${turn.text}</p>`
93
+ : html`<${Markdown} text=${turn.text || ''} />`}
94
+ <${WorkLog} tools=${turn.tools} />
95
+ </div>
96
+ <div class="chat-meta">
97
+ <span>${timeShort(turn.at)}</span>
98
+ ${turn.model ? html`<span class="chat-model" title=${tr('chat.modelTitle', 'The model that answered this turn')}>${turn.model}</span>` : ''}
99
+ ${!mine && turn.text && isSpeechSupported() ? html`
100
+ <button type="button" class="btn-ghost chat-listen" onClick=${listen}>
101
+ ${reading ? tr('chat.stopListening', 'Stop') : tr('chat.listen', 'Listen')}
102
+ </button>` : ''}
103
+ </div>
104
+ </div>
105
+ `;
106
+ }
107
+
108
+ /**
109
+ * What the agent is doing right now, before the turn is over.
110
+ *
111
+ * A person watching a spinner for four minutes cannot tell work from a hang, so the live turn shows
112
+ * the words as they are written and each tool call as it starts.
113
+ */
114
+ export function LiveTurn({ text, thought, tools, busy }) {
115
+ if (!busy && !text && (!tools || tools.length === 0)) return null;
116
+ return html`
117
+ <div class="chat-turn chat-turn--agent chat-turn--live">
118
+ <div class="chat-bubble">
119
+ ${text ? html`<${Markdown} text=${text} />` : ''}
120
+ ${!text && thought ? html`<p class="chat-thinking">${thought}</p>` : ''}
121
+ ${!text && !thought && busy ? html`<p class="chat-thinking">${tr('chat.working', 'Working…')}</p>` : ''}
122
+ <${WorkLog} tools=${tools} />
123
+ </div>
124
+ </div>
125
+ `;
126
+ }
127
+
128
+ /** A turn that could not run, with the reason and a way to try again. */
129
+ export function TurnError({ message, onRetry }) {
130
+ if (!message) return null;
131
+ return html`
132
+ <div class="chat-error" role="alert">
133
+ <p class="chat-error-msg">${message}</p>
134
+ ${onRetry && html`
135
+ <button type="button" class="btn-outline chat-error-retry" onClick=${onRetry}>
136
+ ${tr('chat.retry', 'Try again')}
137
+ </button>`}
138
+ </div>
139
+ `;
140
+ }
141
+
142
+ /**
143
+ * The person's conversations.
144
+ *
145
+ * `onClose` is the way back on a phone, where this list covers the conversation and the header that
146
+ * would otherwise carry the control is hidden. Without it, opening the list is a room with no door:
147
+ * the only exit is picking a different conversation than the one you were reading.
148
+ */
149
+ export function ThreadList({ threads, activeId, onOpen, onNew, onDelete, onClose }) {
150
+ return html`
151
+ <aside class="chat-threads">
152
+ <button type="button" class="btn-ghost chat-threads-close" onClick=${onClose}>
153
+ ↩ ${tr('chat.backToChat', 'Back to the conversation')}
154
+ </button>
155
+ <button type="button" class="btn-primary chat-new" onClick=${onNew}>
156
+ ${tr('chat.new', 'New conversation')}
157
+ </button>
158
+ ${threads.length === 0
159
+ ? html`<p class="chat-threads-empty">${tr('chat.noThreads', 'Nothing here yet. Say something and this is where it will be.')}</p>`
160
+ : html`
161
+ <ul class="chat-thread-list">
162
+ ${threads.map((thread) => html`
163
+ <li key=${thread.id} class="chat-thread ${thread.id === activeId ? 'chat-thread--active' : ''}">
164
+ <button type="button" class="chat-thread-open" onClick=${() => onOpen(thread.id)}>
165
+ <span class="chat-thread-title">${thread.title}</span>
166
+ <span class="chat-thread-sub">${tr('chat.turnCount', '{n} messages').replace('{n}', String(thread.turns ?? 0))}</span>
167
+ </button>
168
+ <button type="button" class="btn-ghost chat-thread-del"
169
+ aria-label=${tr('chat.delete', 'Delete conversation')}
170
+ onClick=${() => onDelete(thread.id)}>✗</button>
171
+ </li>
172
+ `)}
173
+ </ul>`}
174
+ </aside>
175
+ `;
176
+ }
177
+
178
+ /**
179
+ * The box.
180
+ *
181
+ * Enter sends and Shift+Enter opens a line, which is what every chat does and therefore what a
182
+ * person's hands already expect. The field grows with what is in it up to a ceiling, so a long ask
183
+ * is readable while being written without the composer eating the conversation.
184
+ */
185
+ export function Composer({ value, onInput, onSend, onStop, onSpeak, busy, disabled, note, listening, voiceMaxSeconds = 300 }) {
186
+ const ref = useRef(null);
187
+
188
+ // Re-measured on a resize as well as on every keystroke. Height depends on WIDTH: a line that
189
+ // fits on a desktop wraps on a phone, and a height measured before the turn left the field
190
+ // scrolling by two pixels behind a scrollbar nobody wanted.
191
+ useEffect(() => {
192
+ const fit = () => {
193
+ const el = ref.current;
194
+ if (!el) return;
195
+ el.style.height = 'auto';
196
+ el.style.height = `${Math.min(el.scrollHeight, 200)}px`;
197
+ };
198
+ fit();
199
+ window.addEventListener('resize', fit);
200
+ return () => window.removeEventListener('resize', fit);
201
+ }, [value]);
202
+
203
+ const keydown = (e) => {
204
+ if (e.key === 'Enter' && !e.shiftKey) {
205
+ e.preventDefault();
206
+ if (!busy && !disabled && value.trim()) onSend();
207
+ }
208
+ };
209
+
210
+ return html`
211
+ <div class="chat-composer">
212
+ ${note ? html`<p class="chat-composer-note">${note}</p>` : ''}
213
+ ${listening ? html`<p class="chat-composer-note">${tr('chat.hearing', 'Working out what you said…')}</p>` : ''}
214
+ <div class="chat-composer-row">
215
+ <textarea ref=${ref} class="chat-input" rows="1"
216
+ value=${value}
217
+ disabled=${disabled}
218
+ placeholder=${disabled
219
+ ? tr('chat.disabledPlaceholder', 'This node has no chat agent yet.')
220
+ : tr('chat.placeholder', 'Ask for something, or describe what you want built.')}
221
+ onInput=${(e) => onInput(e.target.value)}
222
+ onKeyDown=${keydown}></textarea>
223
+ ${onSpeak && !busy ? html`
224
+ <${VoiceRecorder} maxSeconds=${voiceMaxSeconds} disabled=${disabled || listening}
225
+ className="btn-outline chat-voice" onRecorded=${(file) => onSpeak(file)} />` : ''}
226
+ ${busy
227
+ ? html`<button type="button" class="btn-outline chat-send" onClick=${onStop}>${tr('chat.stop', 'Stop')}</button>`
228
+ : html`<button type="button" class="btn-primary chat-send"
229
+ disabled=${disabled || !value.trim()}
230
+ onClick=${onSend}>${tr('chat.send', 'Send')}</button>`}
231
+ </div>
232
+ </div>
233
+ `;
234
+ }
235
+
236
+ /**
237
+ * Who is answering, and what it costs.
238
+ *
239
+ * The allowance is shown because a person about to fall back to a free model deserves to have seen
240
+ * it coming. It is a line of text, not a gauge: this is not the thing they came here to look at.
241
+ */
242
+ export function StatusBar({ status, onReset }) {
243
+ if (!status) return null;
244
+ const remaining = Number(status.allowance_remaining_usd ?? 0);
245
+ return html`
246
+ <div class="chat-status">
247
+ <span class="chat-status-agent">${status.agent_name}</span>
248
+ ${status.has_own_key
249
+ ? html`<span class="chat-status-key">${tr('chat.ownKey', 'Running on your own OpenRouter key.')}</span>`
250
+ : html`<span class="chat-status-key">${tr('chat.allowance', '{n} USD left of your allowance.').replace('{n}', remaining.toFixed(2))}</span>`}
251
+ ${onReset && html`
252
+ <button type="button" class="btn-ghost chat-status-reset"
253
+ title=${tr('chat.resetTitle', 'Start a fresh agent session for this conversation. Needed after changing what the agent may do.')}
254
+ onClick=${onReset}>${tr('chat.reset', 'Reset session')}</button>`}
255
+ </div>
256
+ `;
257
+ }
@@ -0,0 +1,327 @@
1
+ /**
2
+ * @file public/views/chat.js
3
+ * @description The chat page: the person's first agent, reachable without connecting anything.
4
+ *
5
+ * Everything else on this node assumes a person has already wired their own AI tool to it over
6
+ * MCP. This page is the door for the ones who have not, and for the ones who never will. The agent
7
+ * it talks to is a real GAII principal with real scopes, so what happens here is the same work
8
+ * that happens through any other client, under the same permissions, visible in the same places.
9
+ *
10
+ * The tool calls are on screen for every turn. A chat that reports success without showing what it
11
+ * did asks to be believed; this one can be checked, and that is what makes it credible as a first
12
+ * agent rather than a demo.
13
+ * @structure
14
+ * - ChatView — the page: status, conversations, one live turn
15
+ * @usage import ChatView from '/views/chat.js'
16
+ * @version-history
17
+ * v1.1.0 — 2026-08-16 — Speech: a recording becomes text in the box for the person to read before
18
+ * they send it, and the engine is primed inside the tap so reading an answer aloud works on iOS.
19
+ * v1.0.1 — 2026-08-16 — The work log keys tool calls by id rather than title, so a finished call
20
+ * stops reading as "starting".
21
+ * v1.0.0 — 2026-08-16 — Initial.
22
+ */
23
+ import { h } from 'preact';
24
+ import { useState, useEffect, useRef, useCallback } from 'preact/hooks';
25
+ import htm from 'htm';
26
+ import { t } from '/js/i18n.js';
27
+ import { hasSession } from '/js/services/auth.js';
28
+ import { Spinner } from '/components/Spinner.js';
29
+ import * as chat from '/js/services/chat.js';
30
+ import { primeSpeech } from '/js/services/speech-reader.js';
31
+ import { ThreadList, Turn, LiveTurn, TurnError, Composer, StatusBar } from './chat/parts.js';
32
+
33
+ const html = htm.bind(h);
34
+ const tr = (key, fallback) => { const v = t(key); return v && v !== key ? v : fallback; };
35
+
36
+ export default function ChatView() {
37
+ const [status, setStatus] = useState(null);
38
+ const [threads, setThreads] = useState([]);
39
+ const [thread, setThread] = useState(null);
40
+ const [draft, setDraft] = useState('');
41
+ const [busy, setBusy] = useState(false);
42
+ const [live, setLive] = useState({ text: '', thought: '', tools: [] });
43
+ const [failure, setFailure] = useState('');
44
+ const [loading, setLoading] = useState(true);
45
+ // On a phone the conversation takes the whole screen, so the list is a separate place rather
46
+ // than a column that would leave neither readable.
47
+ const [listOpen, setListOpen] = useState(false);
48
+ const [listening, setListening] = useState(false);
49
+
50
+ const abortRef = useRef(null);
51
+ const bottomRef = useRef(null);
52
+ const lastAskRef = useRef('');
53
+
54
+ const loadThreads = useCallback(async () => {
55
+ const res = await chat.listThreads();
56
+ setThreads(res?.data?.threads ?? []);
57
+ }, []);
58
+
59
+ const openThread = useCallback(async (id) => {
60
+ const res = await chat.getThread(id);
61
+ setThread(res?.data?.thread ?? null);
62
+ setFailure('');
63
+ setLive({ text: '', thought: '', tools: [] });
64
+ setListOpen(false);
65
+ }, []);
66
+
67
+ // First load: what this node offers, and where the person left off.
68
+ useEffect(() => {
69
+ if (!hasSession()) { setLoading(false); return; }
70
+ (async () => {
71
+ try {
72
+ const [st, list] = await Promise.all([chat.status(), chat.listThreads()]);
73
+ setStatus(st?.data ?? null);
74
+ const found = list?.data?.threads ?? [];
75
+ setThreads(found);
76
+ if (found.length > 0) await openThread(found[0].id);
77
+ } catch (err) {
78
+ setFailure(err.message || tr('chat.loadFailed', 'The chat could not be loaded.'));
79
+ } finally {
80
+ setLoading(false);
81
+ }
82
+ })();
83
+ }, [openThread]);
84
+
85
+ // Keep the newest turn in view, the way a conversation is read.
86
+ useEffect(() => {
87
+ bottomRef.current?.scrollIntoView({ block: 'end' });
88
+ }, [thread?.turns?.length, live.text, live.tools.length]);
89
+
90
+ // The on-screen keyboard, measured rather than calculated.
91
+ //
92
+ // `100dvh − keyboard` double-counts on Android Chrome, where dvh already shrinks for the
93
+ // keyboard, and the composer ends up floating above a dead gap. The visual viewport excludes the
94
+ // keyboard on every platform, so the distance from the top of the page to the bottom of it is
95
+ // the space there actually is. Same approach as the inbox, for the same reason.
96
+ useEffect(() => {
97
+ const vv = window.visualViewport;
98
+ const root = document.documentElement;
99
+ if (!vv) return undefined;
100
+ const sync = () => {
101
+ if (!window.matchMedia('(max-width: 760px)').matches) {
102
+ root.style.removeProperty('--chat-avail');
103
+ return;
104
+ }
105
+ root.style.setProperty('--chat-avail', `${Math.max(220, Math.round(vv.height))}px`);
106
+ };
107
+ sync();
108
+ vv.addEventListener('resize', sync);
109
+ vv.addEventListener('scroll', sync);
110
+ window.addEventListener('orientationchange', sync);
111
+ return () => {
112
+ vv.removeEventListener('resize', sync);
113
+ vv.removeEventListener('scroll', sync);
114
+ window.removeEventListener('orientationchange', sync);
115
+ root.style.removeProperty('--chat-avail');
116
+ };
117
+ }, []);
118
+
119
+ // A change to the agent's permissions is made elsewhere, so the status line refreshes with the
120
+ // rest of the page rather than going stale until a reload.
121
+ useEffect(() => {
122
+ const handler = async () => {
123
+ try {
124
+ setStatus((await chat.status())?.data ?? null);
125
+ } catch (err) {
126
+ // A stale allowance line is not worth interrupting a conversation over, and the
127
+ // next update will correct it. Said out loud so it is not invisible either.
128
+ console.warn('[chat] the status line could not be refreshed:', err.message);
129
+ }
130
+ };
131
+ window.addEventListener('aimeat-live-update', handler);
132
+ return () => window.removeEventListener('aimeat-live-update', handler);
133
+ }, []);
134
+
135
+ const startThread = useCallback(async () => {
136
+ const res = await chat.createThread();
137
+ const created = res?.data?.thread;
138
+ if (!created) return null;
139
+ setThread(created);
140
+ setFailure('');
141
+ setListOpen(false);
142
+ await loadThreads();
143
+ return created;
144
+ }, [loadThreads]);
145
+
146
+ /**
147
+ * Send one message and read the answer as it is written.
148
+ *
149
+ * The person's words appear immediately rather than after the round trip: the node has already
150
+ * written them down by the time the first event arrives, and waiting to show them would make a
151
+ * slow turn look like a lost one.
152
+ */
153
+ const send = useCallback(async (retryText) => {
154
+ const text = (retryText ?? draft).trim();
155
+ if (!text || busy) return;
156
+ // Inside the tap, because that is the only moment iOS will accept it. Without this, reading
157
+ // an answer aloud later is a silent no-op with nothing in the console to find.
158
+ primeSpeech();
159
+
160
+ let target = thread;
161
+ if (!target) {
162
+ target = await startThread();
163
+ if (!target) return;
164
+ }
165
+
166
+ lastAskRef.current = text;
167
+ setDraft('');
168
+ setFailure('');
169
+ setBusy(true);
170
+ setLive({ text: '', thought: '', tools: [] });
171
+ setThread((prev) => (prev ? {
172
+ ...prev,
173
+ turns: [...(prev.turns ?? []), { role: 'user', text, at: new Date().toISOString() }],
174
+ } : prev));
175
+
176
+ const controller = new AbortController();
177
+ abortRef.current = controller;
178
+
179
+ let answer = '';
180
+ const tools = new Map();
181
+ try {
182
+ for await (const update of chat.streamTurn(target.id, text, controller.signal)) {
183
+ if (update.kind === 'text') {
184
+ answer += update.text;
185
+ setLive((l) => ({ ...l, text: answer }));
186
+ } else if (update.kind === 'thought') {
187
+ setLive((l) => ({ ...l, thought: update.text }));
188
+ } else if (update.kind === 'tool_call') {
189
+ // By id, not title: a call arrives once as it starts and once as it finishes,
190
+ // and only the first carries a title.
191
+ const key = update.id || update.title;
192
+ const seen = tools.get(key);
193
+ if (seen) {
194
+ seen.status = update.status;
195
+ if (update.title) seen.title = update.title;
196
+ } else {
197
+ tools.set(key, { title: update.title, status: update.status });
198
+ }
199
+ setLive((l) => ({ ...l, tools: [...tools.values()] }));
200
+ } else if (update.kind === 'error') {
201
+ setFailure(update.message || tr('chat.turnFailed', 'The turn could not be completed.'));
202
+ }
203
+ }
204
+ } catch (err) {
205
+ // An abort is the person's own decision, and half an answer is still an answer.
206
+ if (err.name !== 'AbortError') {
207
+ setFailure(err.message || tr('chat.turnFailed', 'The turn could not be completed.'));
208
+ }
209
+ } finally {
210
+ abortRef.current = null;
211
+ setBusy(false);
212
+ setLive({ text: '', thought: '', tools: [] });
213
+ // Read the conversation back from the node: it is the record, and what it holds is what
214
+ // was actually saved rather than what this page happened to see.
215
+ try {
216
+ const fresh = await chat.getThread(target.id);
217
+ if (fresh?.data?.thread) setThread(fresh.data.thread);
218
+ await loadThreads();
219
+ } catch (err) {
220
+ // The turn ran; a failed re-read leaves the optimistic copy on screen, which is the
221
+ // same text, and the next open corrects it.
222
+ console.warn('[chat] the conversation could not be re-read:', err.message);
223
+ if (answer) {
224
+ setThread((prev) => (prev ? {
225
+ ...prev,
226
+ turns: [...(prev.turns ?? []), { role: 'agent', text: answer, at: new Date().toISOString(), tools: [...tools.values()] }],
227
+ } : prev));
228
+ }
229
+ }
230
+ }
231
+ }, [draft, busy, thread, startThread, loadThreads]);
232
+
233
+ const stop = useCallback(() => { abortRef.current?.abort(); }, []);
234
+
235
+ /**
236
+ * A recording becomes text in the box, not a sent message.
237
+ *
238
+ * Speech recognition is wrong often enough that sending what it heard would make the person
239
+ * argue with a machine about what they said. They read it first, and edit it if it is wrong.
240
+ */
241
+ const speakToText = useCallback(async (file) => {
242
+ setListening(true);
243
+ setFailure('');
244
+ try {
245
+ const heard = await chat.speakToText(file);
246
+ if (heard) setDraft((d) => (d ? `${d} ${heard}` : heard));
247
+ else setFailure(tr('chat.heardNothing', 'Nothing was heard in that recording.'));
248
+ } catch (err) {
249
+ setFailure(err.message || tr('chat.transcribeFailed', 'That recording could not be turned into text.'));
250
+ } finally {
251
+ setListening(false);
252
+ }
253
+ }, []);
254
+
255
+ const removeThread = useCallback(async (id) => {
256
+ await chat.deleteThread(id);
257
+ if (thread?.id === id) setThread(null);
258
+ await loadThreads();
259
+ }, [thread, loadThreads]);
260
+
261
+ const resetSession = useCallback(async () => {
262
+ if (!thread) return;
263
+ await chat.resetThread(thread.id);
264
+ }, [thread]);
265
+
266
+ if (!hasSession()) {
267
+ return html`
268
+ <div class="chat-view chat-view--signin">
269
+ <h1>${tr('chat.title', 'Chat')}</h1>
270
+ <p>${tr('chat.signIn', 'Sign in and your first agent is waiting here.')}</p>
271
+ </div>`;
272
+ }
273
+
274
+ if (loading) return html`<div class="chat-view"><${Spinner} /></div>`;
275
+
276
+ const turns = thread?.turns ?? [];
277
+ const disabled = status ? !status.enabled : false;
278
+
279
+ return html`
280
+ <div class="chat-view ${listOpen ? 'chat-view--list' : ''}">
281
+ <${ThreadList}
282
+ threads=${threads}
283
+ activeId=${thread?.id}
284
+ onOpen=${openThread}
285
+ onNew=${startThread}
286
+ onDelete=${removeThread}
287
+ onClose=${() => setListOpen(false)} />
288
+
289
+ <section class="chat-main">
290
+ <header class="chat-head">
291
+ <button type="button" class="btn-ghost chat-list-toggle"
292
+ onClick=${() => setListOpen((o) => !o)}>
293
+ ${listOpen ? tr('chat.closeList', 'Close') : tr('chat.openList', 'Conversations')}
294
+ </button>
295
+ <h1 class="chat-title">${thread?.title ?? tr('chat.title', 'Chat')}</h1>
296
+ </header>
297
+
298
+ <${StatusBar} status=${status} onReset=${thread ? resetSession : null} />
299
+
300
+ <div class="chat-scroll">
301
+ ${turns.length === 0 && !busy ? html`
302
+ <div class="chat-welcome">
303
+ <h2>${tr('chat.welcomeTitle', 'Your first agent')}</h2>
304
+ <p>${tr('chat.welcomeBody', 'It works here the way your own AI tool would, with the same permissions and the same record of what it did. Ask it for something.')}</p>
305
+ </div>` : ''}
306
+
307
+ ${turns.map((turn, i) => html`<${Turn} key=${i} id=${`${thread?.id}-${i}`} turn=${turn} />`)}
308
+ <${LiveTurn} text=${live.text} thought=${live.thought} tools=${live.tools} busy=${busy} />
309
+ <${TurnError} message=${failure}
310
+ onRetry=${lastAskRef.current && !busy ? () => send(lastAskRef.current) : null} />
311
+ <div ref=${bottomRef}></div>
312
+ </div>
313
+
314
+ <${Composer}
315
+ value=${draft}
316
+ onInput=${setDraft}
317
+ onSend=${() => send()}
318
+ onStop=${stop}
319
+ onSpeak=${speakToText}
320
+ listening=${listening}
321
+ busy=${busy}
322
+ disabled=${disabled}
323
+ note=${disabled ? (status?.note ?? '') : ''} />
324
+ </section>
325
+ </div>
326
+ `;
327
+ }
@@ -9,6 +9,9 @@
9
9
  * @structure default export Landing({ navigate }) + BuildHero/Gallery(live wall)/StatsPanel/BuildAppPrompt/BuildAgentPrompt/AskYourAI
10
10
  * @usage routed at /v1/portal (and '/' for browsers) by spa.html
11
11
  * @version-history
12
+ * v5.2.0 — 2026-08-16 — The arrival redirect asks the node where this account lands instead of
13
+ * sending everyone to /v1/profile. The server has decided that since the remake, and this page
14
+ * ignored it, so an account created on the new path still arrived at the old one.
12
15
  * v5.1.0 — 2026-08-01 — One line above the footer about how this node marks AI-generated
13
16
  * content, linking /v1/transparency (TARGET-058 Phase 10). One line and no more: the page
14
17
  * that states the limits properly is the one it links to.
@@ -70,6 +73,7 @@ import htm from 'htm';
70
73
  const html = htm.bind(h);
71
74
  import { t, getLocale } from '/js/i18n.js';
72
75
  import { escHtml } from '/js/utils.js';
76
+ import { apiGet } from '/js/api.js';
73
77
  import { openAppSandboxed } from '/js/app-sandbox.js';
74
78
  import { siteLink, hasSite } from '/js/site.js';
75
79
  import { Collapsible } from '/components/Collapsible.js';
@@ -600,11 +604,30 @@ export default function Landing({ navigate }) {
600
604
  // The flag suppresses ONLY the arrival redirect. Signing in while standing on this page
601
605
  // always moves on to Home: without that, the sign-in modal closed and the visitor was left
602
606
  // looking at the same marketing page with no sign that anything had happened.
607
+ //
608
+ // WHERE it forwards to is the node's answer, not this file's. The server has decided since the
609
+ // remake which side an account lands on, and this page sent everyone to /v1/profile regardless —
610
+ // so a new account created on the new path still arrived at the old one. It asks now, and falls
611
+ // back to the profile only when the answer does not arrive.
603
612
  useEffect(() => {
613
+ const landingFor = async () => {
614
+ try {
615
+ const res = await apiGet('/v1/home/ui-track');
616
+ return res?.data?.landing || '/v1/profile';
617
+ } catch (err) {
618
+ // Not knowing where to send someone is not a reason to leave them on the marketing page.
619
+ // The old landing is where everyone went until now, so it is the safe answer.
620
+ console.warn('[landing] could not read where this account lands:', err.message);
621
+ return '/v1/profile';
622
+ }
623
+ };
604
624
  const check = () => {
605
625
  try {
606
626
  const raw = localStorage.getItem('aimeat_session');
607
- if (raw && JSON.parse(raw)?.jwt) { navigate('/v1/profile'); return true; }
627
+ if (raw && JSON.parse(raw)?.jwt) {
628
+ landingFor().then((path) => navigate(path));
629
+ return true;
630
+ }
608
631
  // eslint-disable-next-line aimeat/no-silent-catch -- stay on landing
609
632
  } catch { /* stay on landing */ }
610
633
  return false;