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
@@ -33,11 +33,27 @@
33
33
  * added for text types that do not already carry a charset. Non-text types pass through.
34
34
  * - sniffedContentType(mimeType, bytes) — for USER-UPLOADED bytes: the same, but only after the
35
35
  * bytes pass a UTF-8 decode test.
36
+ * - needsUtf8Verdict(mimeType) / isValidUtf8(bytes) — the two halves of that test, so a WRITE path
37
+ * can settle the question once instead of every read repeating it.
38
+ * - verifiedContentType(mimeType, utf8Verified) — the same answer from a stored verdict, for a
39
+ * response that does not have the whole file in hand.
40
+ *
41
+ * WHY THE VERDICT IS STORED. Serving a byte range is the case that breaks the "read the bytes"
42
+ * design: the whole point of a range is not to load the file, and the whole file is exactly what
43
+ * the decode test wants. Loading 25 MB to answer an 8-byte request measured 181 ms against 3 ms for
44
+ * a database-side slice. So the decode test moved to the write, where the bytes are already in
45
+ * hand and the answer is a property of the file rather than of the request. A row from before this
46
+ * existed carries no verdict, and a range read of one still loads the file: the same answer as
47
+ * today at the same cost as today, and it settles itself the next time the file is written.
36
48
  * @usage
37
- * import { appContentType, sniffedContentType } from '../utils/app-content-type.js';
38
- * res.setHeader('Content-Type', appContentType(app.mimeType)); // node-generated
39
- * res.setHeader('Content-Type', sniffedContentType(file.mimeType, file.data)); // uploaded
49
+ * import { appContentType, sniffedContentType, verifiedContentType } from '../utils/app-content-type.js';
50
+ * res.setHeader('Content-Type', appContentType(app.mimeType)); // node-generated
51
+ * res.setHeader('Content-Type', sniffedContentType(file.mimeType, file.data)); // uploaded, bytes in hand
52
+ * res.setHeader('Content-Type', verifiedContentType(file.mimeType, file.utf8Verified)); // uploaded, metadata only
40
53
  * @version-history
54
+ * v1.2.0 — 2026-08-15 — TARGET-063: the decode test split out so a write can settle it once
55
+ * (needsUtf8Verdict / isValidUtf8) and a metadata-only response can read the answer back
56
+ * (verifiedContentType). sniffedContentType now delegates, so there is still ONE rule.
41
57
  * v1.1.0 — 2026-08-01 — TARGET-058 Phase 5 step 0b: sniffedContentType() for the stored-file
42
58
  * routes, with the node-generated / user-uploaded distinction the Phase 4 audit drew.
43
59
  * v1.0.0 — 2026-08-01 — TARGET-058 Phase 4 step 0a, after the corpus scan above.
@@ -78,21 +94,74 @@ export function appContentType(mimeType) {
78
94
  * describes the entity, not the slice.
79
95
  */
80
96
  export function sniffedContentType(mimeType, bytes) {
81
- const type = (mimeType ?? '').trim() || 'application/octet-stream';
82
- if (/;\s*charset\s*=/i.test(type))
83
- return type;
84
- if (!TEXTUAL.test(type))
85
- return type;
97
+ if (!needsUtf8Verdict(mimeType))
98
+ return normalisedType(mimeType);
86
99
  if (!bytes)
87
- return type;
100
+ return normalisedType(mimeType);
101
+ return verifiedContentType(mimeType, isValidUtf8(bytes));
102
+ }
103
+ /**
104
+ * Would a UTF-8 verdict change how this type is served? False for a type that already names a
105
+ * charset (the author said it and we do not overrule them) and for anything non-textual (a charset
106
+ * on a PNG means nothing).
107
+ *
108
+ * A write path asks this FIRST, and skips the decode test entirely when the answer is no. That is
109
+ * what keeps the cost off image and archive uploads: they never needed the test, and now they do
110
+ * not pay for it.
111
+ */
112
+ export function needsUtf8Verdict(mimeType) {
113
+ const type = normalisedType(mimeType);
114
+ if (/;\s*charset\s*=/i.test(type))
115
+ return false;
116
+ return TEXTUAL.test(type);
117
+ }
118
+ /**
119
+ * Do these bytes decode as UTF-8, whole and strict?
120
+ *
121
+ * The decode test rather than a glyph signature, for the reason in the file header: a signature
122
+ * cannot tell `ä` from a clean Finnish `[ÅÄÖåäö]`, and produced exactly that false positive
123
+ * against the real corpus.
124
+ */
125
+ export function isValidUtf8(bytes) {
88
126
  try {
89
127
  new TextDecoder('utf-8', { fatal: true }).decode(bytes);
128
+ return true;
90
129
  }
91
130
  catch {
92
- // The exception IS the answer: a decode failure is precisely the signal that these bytes are
93
- // not UTF-8, and it is acted on rather than swallowed.
94
- return type; // leave the author's file exactly as it is served today
131
+ // The exception IS the answer. A fatal TextDecoder throws on exactly one condition, an invalid
132
+ // UTF-8 sequence, and that condition is the question being asked. There is no failure here to
133
+ // hide: false is a measured result rather than a fallback, and the caller stores it as one.
134
+ // eslint-disable-next-line aimeat/no-silent-catch -- the throw is the measurement, see above
135
+ return false;
95
136
  }
137
+ }
138
+ /**
139
+ * The served `Content-Type` from a verdict somebody else established.
140
+ *
141
+ * `undefined` means NOT ESTABLISHED — a file stored before the verdict was recorded — and it is
142
+ * treated exactly like `false`: say nothing, and serve the file the way it is served today. It is
143
+ * never read as "not UTF-8", because a caller that knows the answer passes the boolean.
144
+ */
145
+ export function verifiedContentType(mimeType, utf8Verified) {
146
+ const type = normalisedType(mimeType);
147
+ if (!utf8Verified)
148
+ return type;
149
+ if (!needsUtf8Verdict(type))
150
+ return type;
96
151
  return `${type}; charset=utf-8`;
97
152
  }
153
+ const normalisedType = (mimeType) => (mimeType ?? '').trim() || 'application/octet-stream';
154
+ /**
155
+ * The verdict to STORE for a file being written. `null` when the type could not be changed by one
156
+ * (an image, an archive, or a type whose author already named a charset), so nothing is computed
157
+ * and nothing is recorded.
158
+ *
159
+ * Called by each storage provider from createStorageFile, which is the one door every write goes
160
+ * through — sixteen call sites create files and none of them should have to know this rule exists.
161
+ */
162
+ export function utf8VerdictFor(file) {
163
+ if (!needsUtf8Verdict(file.mimeType))
164
+ return null;
165
+ return isValidUtf8(file.data);
166
+ }
98
167
  //# sourceMappingURL=app-content-type.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"app-content-type.js","sourceRoot":"","sources":["../../../src/utils/app-content-type.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CG;AAEH,uGAAuG;AACvG,MAAM,OAAO,GAAG,yFAAyF,CAAC;AAE1G;;;;;;;GAOG;AACH,MAAM,UAAU,cAAc,CAAC,QAAmC;IAChE,MAAM,IAAI,GAAG,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,0BAA0B,CAAC;IACnE,IAAI,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IAC/C,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IACrC,OAAO,GAAG,IAAI,iBAAiB,CAAC;AAClC,CAAC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,kBAAkB,CAChC,QAAmC,EACnC,KAA6C;IAE7C,MAAM,IAAI,GAAG,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,0BAA0B,CAAC;IACnE,IAAI,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IAC/C,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IACrC,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IACxB,IAAI,CAAC;QACH,IAAI,WAAW,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC1D,CAAC;IAAC,MAAM,CAAC;QACP,6FAA6F;QAC7F,uDAAuD;QACvD,OAAO,IAAI,CAAC,CAAG,wDAAwD;IACzE,CAAC;IACD,OAAO,GAAG,IAAI,iBAAiB,CAAC;AAClC,CAAC"}
1
+ {"version":3,"file":"app-content-type.js","sourceRoot":"","sources":["../../../src/utils/app-content-type.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2DG;AAEH,uGAAuG;AACvG,MAAM,OAAO,GAAG,yFAAyF,CAAC;AAE1G;;;;;;;GAOG;AACH,MAAM,UAAU,cAAc,CAAC,QAAmC;IAChE,MAAM,IAAI,GAAG,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,0BAA0B,CAAC;IACnE,IAAI,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IAC/C,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IACrC,OAAO,GAAG,IAAI,iBAAiB,CAAC;AAClC,CAAC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,kBAAkB,CAChC,QAAmC,EACnC,KAA6C;IAE7C,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC;QAAE,OAAO,cAAc,CAAC,QAAQ,CAAC,CAAC;IACjE,IAAI,CAAC,KAAK;QAAE,OAAO,cAAc,CAAC,QAAQ,CAAC,CAAC;IAC5C,OAAO,mBAAmB,CAAC,QAAQ,EAAE,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;AAC3D,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,gBAAgB,CAAC,QAAmC;IAClE,MAAM,IAAI,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC;IACtC,IAAI,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC;IAChD,OAAO,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC5B,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,WAAW,CAAC,KAA0B;IACpD,IAAI,CAAC;QACH,IAAI,WAAW,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACxD,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,+FAA+F;QAC/F,8FAA8F;QAC9F,4FAA4F;QAC5F,6FAA6F;QAC7F,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,mBAAmB,CAAC,QAAmC,EAAE,YAAwC;IAC/G,MAAM,IAAI,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC;IACtC,IAAI,CAAC,YAAY;QAAE,OAAO,IAAI,CAAC;IAC/B,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IACzC,OAAO,GAAG,IAAI,iBAAiB,CAAC;AAClC,CAAC;AAED,MAAM,cAAc,GAAG,CAAC,QAAmC,EAAU,EAAE,CACrE,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,0BAA0B,CAAC;AAExD;;;;;;;GAOG;AACH,MAAM,UAAU,cAAc,CAAC,IAAqD;IAClF,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,QAAQ,CAAC;QAAE,OAAO,IAAI,CAAC;IAClD,OAAO,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAChC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"sections-features.d.ts","sourceRoot":"","sources":["../../../../src/utils/env-config/sections-features.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAGjD,wBAAgB,eAAe,CAAC,MAAM,EAAE,YAAY,GAAG,aAAa,EAAE,CAygBrE"}
1
+ {"version":3,"file":"sections-features.d.ts","sourceRoot":"","sources":["../../../../src/utils/env-config/sections-features.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAGjD,wBAAgB,eAAe,CAAC,MAAM,EAAE,YAAY,GAAG,aAAa,EAAE,CA+gBrE"}
@@ -22,9 +22,15 @@ export function featureSections(config) {
22
22
  },
23
23
  {
24
24
  envVar: 'AIMEAT_CONTENT_SIGNAL',
25
- description: 'robots.txt Content Signals Policy directive (contentsignals.org); "off" removes it',
26
- value: config.contentSignal,
27
- defaultVal: 'search=yes, ai-input=yes, ai-train=no',
25
+ description: 'robots.txt Content Signals Policy directive (contentsignals.org); "off" removes it. Empty pairs it to AIMEAT_AI_TRAINING',
26
+ value: config.contentSignal || '(paired to AIMEAT_AI_TRAINING)',
27
+ defaultVal: '(paired)',
28
+ },
29
+ {
30
+ envVar: 'AIMEAT_AI_TRAINING',
31
+ description: 'Allow the AI training crawlers (GPTBot, ClaudeBot, Google-Extended, Applebot-Extended, meta-externalagent) in robots.txt. Search and retrieval bots are always allowed and are not affected',
32
+ value: config.aiTraining,
33
+ defaultVal: 'deny',
28
34
  },
29
35
  ],
30
36
  },
@@ -1 +1 @@
1
- {"version":3,"file":"sections-features.js","sourceRoot":"","sources":["../../../../src/utils/env-config/sections-features.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sections-features.js","sourceRoot":"","sources":["../../../../src/utils/env-config/sections-features.ts"],"names":[],"mappings":"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"}
@@ -59,13 +59,15 @@ export declare function isInlineSafeFileType(mimeType: string | undefined | null
59
59
  * The caller still sets `Content-Length` (or `Content-Range`), caching and any CORS headers: those
60
60
  * depend on which door the file came through, and these four do not.
61
61
  *
62
- * Pass the WHOLE file as `data`, even when replying with a range. The content type is sniffed from
63
- * it, and a multi-byte character straddling a range boundary would fail a decode of the slice while
64
- * the file itself is good UTF-8.
62
+ * Pass `utf8Verified` when the record carries it a metadata read has it and a range reply cannot
63
+ * sniff. Otherwise pass the WHOLE file as `data`, even when replying with a range: the content type
64
+ * is sniffed from it, and a multi-byte character straddling a range boundary would fail a decode of
65
+ * the slice while the file itself is good UTF-8.
65
66
  */
66
67
  export declare function setStoredFileHeaders(res: Response, file: {
67
68
  key: string;
68
69
  mimeType: string;
69
70
  data?: Buffer | Uint8Array | null;
71
+ utf8Verified?: boolean;
70
72
  }): void;
71
73
  //# sourceMappingURL=file-download-headers.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"file-download-headers.d.ts","sourceRoot":"","sources":["../../../src/utils/file-download-headers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AACH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAGxC;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,GAAG,OAAO,CAejF;AAuCD;;;;;;;;;;;GAWG;AACH,wBAAgB,oBAAoB,CAChC,GAAG,EAAE,QAAQ,EACb,IAAI,EAAE;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI,CAAA;CAAE,GAC3E,IAAI,CASN"}
1
+ {"version":3,"file":"file-download-headers.d.ts","sourceRoot":"","sources":["../../../src/utils/file-download-headers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AACH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAGxC;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,GAAG,OAAO,CAejF;AAuCD;;;;;;;;;;;;GAYG;AACH,wBAAgB,oBAAoB,CAChC,GAAG,EAAE,QAAQ,EACb,IAAI,EAAE;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI,CAAC;IAAC,YAAY,CAAC,EAAE,OAAO,CAAA;CAAE,GACnG,IAAI,CAqBN"}
@@ -1,4 +1,4 @@
1
- import { sniffedContentType } from './app-content-type.js';
1
+ import { sniffedContentType, verifiedContentType } from './app-content-type.js';
2
2
  /**
3
3
  * Everything a stored file may be rendered as when someone navigates to it. Read the reasoning in
4
4
  * the file header before adding to it: a type belongs here only when a browser CANNOT run script
@@ -71,13 +71,26 @@ function dispositionValue(disposition, filename) {
71
71
  * The caller still sets `Content-Length` (or `Content-Range`), caching and any CORS headers: those
72
72
  * depend on which door the file came through, and these four do not.
73
73
  *
74
- * Pass the WHOLE file as `data`, even when replying with a range. The content type is sniffed from
75
- * it, and a multi-byte character straddling a range boundary would fail a decode of the slice while
76
- * the file itself is good UTF-8.
74
+ * Pass `utf8Verified` when the record carries it a metadata read has it and a range reply cannot
75
+ * sniff. Otherwise pass the WHOLE file as `data`, even when replying with a range: the content type
76
+ * is sniffed from it, and a multi-byte character straddling a range boundary would fail a decode of
77
+ * the slice while the file itself is good UTF-8.
77
78
  */
78
79
  export function setStoredFileHeaders(res, file) {
79
80
  const inline = isInlineSafeFileType(file.mimeType);
80
- res.setHeader('Content-Type', sniffedContentType(file.mimeType, file.data));
81
+ // A stored verdict WINS over the bytes in hand, and that ordering is the point: a range response
82
+ // holds a slice, and sniffing a slice can disagree with the full GET when a multi-byte character
83
+ // straddles the boundary. The verdict is a property of the file, so both responses name the same
84
+ // type. Only a file written before the verdict existed falls through to reading the bytes.
85
+ //
86
+ // An EMPTY `data` is treated as "no bytes were supplied" rather than as an empty file, and that
87
+ // is not pedantry: a metadata-only record carries a zero-length buffer, zero bytes decode as
88
+ // valid UTF-8, and the sniffer would cheerfully stamp `charset=utf-8` on a file it has never
89
+ // seen. A genuinely empty file loses nothing by not being told which encoding its no bytes are in.
90
+ const supplied = file.data && file.data.length > 0 ? file.data : null;
91
+ res.setHeader('Content-Type', file.utf8Verified === undefined
92
+ ? sniffedContentType(file.mimeType, supplied)
93
+ : verifiedContentType(file.mimeType, file.utf8Verified));
81
94
  res.setHeader('X-Content-Type-Options', 'nosniff');
82
95
  res.setHeader('Content-Security-Policy', inline ? CSP_INLINE : CSP_ATTACHMENT);
83
96
  // The key is an address, so its last segment is the closest thing to a filename we have; a key
@@ -1 +1 @@
1
- {"version":3,"file":"file-download-headers.js","sourceRoot":"","sources":["../../../src/utils/file-download-headers.ts"],"names":[],"mappings":"AA4CA,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAE3D;;;;;;;GAOG;AACH,MAAM,UAAU,oBAAoB,CAAC,QAAmC;IACpE,MAAM,IAAI,GAAG,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACjE,IAAI,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC;QAAE,OAAO,KAAK,CAAC;IAC/C,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;QAAE,OAAO,IAAI,CAAC;IAC3C,iGAAiG;IACjG,2EAA2E;IAC3E,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;QAAE,OAAO,IAAI,CAAC;IACxE,4FAA4F;IAC5F,+FAA+F;IAC/F,8BAA8B;IAC9B,IAAI,IAAI,KAAK,iBAAiB;QAAE,OAAO,IAAI,CAAC;IAC5C,6FAA6F;IAC7F,+DAA+D;IAC/D,IAAI,IAAI,KAAK,YAAY;QAAE,OAAO,IAAI,CAAC;IACvC,OAAO,KAAK,CAAC;AACjB,CAAC;AAED;;;;;GAKG;AACH,MAAM,cAAc,GAAG,0FAA0F,CAAC;AAElH;;;;;;;;;GASG;AACH,MAAM,UAAU,GAAG,mLAAmL,CAAC;AAEvM;;;;;;;;;GASG;AACH,SAAS,gBAAgB,CAAC,WAAoC,EAAE,QAAgB;IAC5E,IAAI,CAAC,QAAQ;QAAE,OAAO,WAAW,CAAC;IAClC,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,eAAe,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;IAC5E,MAAM,IAAI,GAAG,kBAAkB,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;IACpH,OAAO,GAAG,WAAW,eAAe,KAAK,uBAAuB,IAAI,EAAE,CAAC;AAC3E,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,oBAAoB,CAChC,GAAa,EACb,IAA0E;IAE1E,MAAM,MAAM,GAAG,oBAAoB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACnD,GAAG,CAAC,SAAS,CAAC,cAAc,EAAE,kBAAkB,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAC5E,GAAG,CAAC,SAAS,CAAC,wBAAwB,EAAE,SAAS,CAAC,CAAC;IACnD,GAAG,CAAC,SAAS,CAAC,yBAAyB,EAAE,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC;IAC/E,+FAA+F;IAC/F,qFAAqF;IACrF,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC;IAC/E,GAAG,CAAC,SAAS,CAAC,qBAAqB,EAAE,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC,CAAC;AACvG,CAAC"}
1
+ {"version":3,"file":"file-download-headers.js","sourceRoot":"","sources":["../../../src/utils/file-download-headers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,151 @@
1
+ /**
2
+ * @file src/utils/http-range.ts
3
+ * @description HTTP byte-range parsing for the stored-file download paths, in one place.
4
+ *
5
+ * WHAT WAS WRONG. Three download handlers each carried the same four lines, and those four lines
6
+ * were `/bytes=(\d+)-(\d*)/`. That regex does not match `bytes=-8` — the SUFFIX range, which is
7
+ * exactly the request a Parquet reader makes first, because the footer is at the end of the file.
8
+ * A client asking for the last eight bytes got status 200 and the whole file, with no header
9
+ * anywhere saying the request had not been honoured. That is a silent fallback: the reader
10
+ * believes it is streaming and is in fact downloading everything, once per range it asks for.
11
+ * The fourth path, `GET /v1/pub`, never looked at `Range` at all.
12
+ *
13
+ * And no path ever sent `Accept-Ranges`. A client cannot discover range support by guessing, so
14
+ * DuckDB, pandas and every HTTP range reader concluded the node does not do ranges — correctly,
15
+ * from the evidence they had.
16
+ *
17
+ * THE RULES THIS ENCODES, and why each one is what it is:
18
+ *
19
+ * - `bytes=N-M`, `bytes=N-` and `bytes=-N` all parse. `M` past the end clamps to the last byte,
20
+ * which RFC 9110 §14.1.2 requires; `-N` larger than the file means the whole file, same clause.
21
+ * - A range unit that is NOT `bytes` is IGNORED and the full representation is sent. RFC 9110
22
+ * §14.2 says MUST on this, and it is not a covering fallback: `Accept-Ranges: bytes` on the
23
+ * same response has already told the client which unit this server speaks.
24
+ * - A `bytes=` header that does not parse, or that starts past the end of the file, is
25
+ * UNSATISFIABLE. That answers 416 with a `Content-Range` of `bytes STAR/size`, never a 200. This is
26
+ * the case the old regex covered up.
27
+ * - A MULTI-range request (`bytes=0-9, 20-29`) is refused with 416 rather than served as one
28
+ * coalesced span or silently reduced to its first range. A `multipart/byteranges` body is not
29
+ * implemented here, and answering a two-range request with one range's bytes, under a status
30
+ * code that claims the request was honoured, is the same class of defect this file exists to
31
+ * remove. No stored-file client on this node sends one.
32
+ * @structure parseRangeHeader() — the verdict · sendPartialContent() / setAcceptRanges() /
33
+ * rangeNotSatisfiable() — the three response shapes a door needs · serveStoredFile() — all three,
34
+ * plus the read, in the one order that does not load a file to send part of it
35
+ * @usage
36
+ * const file = await storage.getStorageFileMeta(gaii, key); // no bytes yet
37
+ * if (!file) { …404… }
38
+ * res.setHeader('Cache-Control', 'public, max-age=300'); // this door's own headers first
39
+ * const served = await serveStoredFile(res, file, req.headers.range, {
40
+ * range: (start, length) => storage.readStorageFileRange(gaii, key, start, length),
41
+ * all: () => storage.getStorageFile(gaii, key).then(f => f?.data ?? null),
42
+ * });
43
+ * if (!served) { …404… } // it vanished mid-request
44
+ * @version-history
45
+ * v1.1.0 -- 2026-08-15 -- TARGET-063: serveStoredFile(), so a range is read as a range. The four
46
+ * doors each carried the same three-line dance and each began by loading the whole file.
47
+ * v1.0.0 -- 2026-08-15 -- TARGET-063 A1: extracted from the three copies in routes/storage-files.ts,
48
+ * with suffix ranges, 416 and Accept-Ranges added. GET /v1/pub gains range support for the first
49
+ * time; it is the door a program reading a data package from its permanent address knocks at.
50
+ */
51
+ import type { Response } from 'express';
52
+ /** What a `Range` header means for one representation of a known size. */
53
+ export type RangeVerdict =
54
+ /** No usable range: absent header, or a unit this server does not speak. Send the whole thing, 200. */
55
+ {
56
+ kind: 'full';
57
+ }
58
+ /** Inclusive byte offsets into the representation. Send 206. */
59
+ | {
60
+ kind: 'partial';
61
+ start: number;
62
+ end: number;
63
+ }
64
+ /** The header named `bytes` and could not be honoured. Send 416 — never 200. */
65
+ | {
66
+ kind: 'unsatisfiable';
67
+ reason: string;
68
+ };
69
+ /**
70
+ * Decide what a `Range` header asks for.
71
+ *
72
+ * `size` is the complete length of the representation. A zero-length file makes every byte range
73
+ * unsatisfiable, which is what RFC 9110 §15.5.17 describes and what a client needs to hear rather
74
+ * than a 200 with no bytes and a status that says it was a partial answer.
75
+ */
76
+ export declare function parseRangeHeader(header: string | undefined | null, size: number): RangeVerdict;
77
+ /**
78
+ * Announce range support. Belongs on EVERY response that carries (or describes) stored bytes,
79
+ * including the 200 and the HEAD: a client decides whether to range-read from this header, and a
80
+ * server that answers ranges without advertising them is a server nothing ranges against.
81
+ */
82
+ export declare function setAcceptRanges(res: Response): void;
83
+ /**
84
+ * 416 with the one header that makes it actionable: a `Content-Range` of `bytes STAR/size` tells the
85
+ * client how long the representation actually is, so its next request can be a valid one.
86
+ *
87
+ * Deliberately NOT the envelope. This is a byte-serving path, the caller may be a database engine
88
+ * rather than a browser, and the status plus Content-Range is the whole message.
89
+ */
90
+ export declare function rangeNotSatisfiable(res: Response, size: number, reason: string): void;
91
+ /**
92
+ * 206 with the slice.
93
+ *
94
+ * `chunk` is the slice and `file` describes the WHOLE representation, which is the distinction the
95
+ * Content-Range header itself makes. `setStoredFileHeaders` follows the same rule: it takes the
96
+ * file's stored UTF-8 verdict when there is one, so this response names the same content type the
97
+ * full GET does. Sniffing the slice would not — a multi-byte character straddling the boundary
98
+ * fails a decode that the whole file passes.
99
+ */
100
+ export declare function sendPartialContent(res: Response, file: {
101
+ key: string;
102
+ mimeType: string;
103
+ size: number;
104
+ data?: Buffer;
105
+ utf8Verified?: boolean;
106
+ }, range: {
107
+ start: number;
108
+ end: number;
109
+ }, chunk: Buffer): void;
110
+ /**
111
+ * Does naming this file's content type still require reading it?
112
+ *
113
+ * Only for a row written before the UTF-8 verdict was recorded, and only for a type whose served
114
+ * form the verdict would change. Everything written since answers from metadata alone, and this
115
+ * shrinks to nothing as old rows are rewritten.
116
+ */
117
+ export declare function needsBytesForType(file: {
118
+ mimeType: string;
119
+ utf8Verified?: boolean;
120
+ }): boolean;
121
+ /** How a door gets at the bytes it is about to serve. Both halves come from the storage layer, and
122
+ * a range read never touches the rest of the file. */
123
+ export interface StoredFileReader {
124
+ /** `length` bytes from byte offset `start`. Null only if the file has disappeared. */
125
+ range(start: number, length: number): Promise<Buffer | null>;
126
+ /** The whole representation. Null only if the file has disappeared. */
127
+ all(): Promise<Buffer | null>;
128
+ }
129
+ /**
130
+ * Serve one stored file, honouring `Range`, from METADATA plus a reader.
131
+ *
132
+ * WHY THE READER IS A CALLBACK AND NOT A BUFFER. Every door here used to load the entire file and
133
+ * then decide what part of it to send, which meant an eight-byte suffix request — the first thing a
134
+ * Parquet reader asks for — read 25 MB out of the database to answer it. Measured on Postgres:
135
+ * 181 ms that way, 3 ms as a database-side substring, and the gap widens with the file. Taking the
136
+ * reader rather than the bytes is what lets the decision come BEFORE the read.
137
+ *
138
+ * The caller sets its own caching and CORS headers first; they differ per door and these do not.
139
+ * Returns false when the file vanished between the metadata read and the bytes, and sends nothing —
140
+ * the caller owns the 404 because only it knows which shape of "not found" that door tells.
141
+ */
142
+ export declare function serveStoredFile(res: Response, file: {
143
+ key: string;
144
+ mimeType: string;
145
+ size: number;
146
+ utf8Verified?: boolean;
147
+ createdAt?: string;
148
+ }, rangeHeader: string | undefined, read: StoredFileReader, opts?: {
149
+ headOnly?: boolean;
150
+ }): Promise<boolean>;
151
+ //# sourceMappingURL=http-range.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http-range.d.ts","sourceRoot":"","sources":["../../../src/utils/http-range.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiDG;AACH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAIxC,0EAA0E;AAC1E,MAAM,MAAM,YAAY;AACpB,uGAAuG;AACrG;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE;AAClB,gEAAgE;GAC9D;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE;AACjD,gFAAgF;GAC9E;IAAE,IAAI,EAAE,eAAe,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAEhD;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,EAAE,IAAI,EAAE,MAAM,GAAG,YAAY,CAyC9F;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,QAAQ,GAAG,IAAI,CAEnD;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAMrF;AAED;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAC9B,GAAG,EAAE,QAAQ,EACb,IAAI,EAAE;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,OAAO,CAAA;CAAE,EAC5F,KAAK,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,EACrC,KAAK,EAAE,MAAM,GACd,IAAI,CAON;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAE7F;AAED;uDACuD;AACvD,MAAM,WAAW,gBAAgB;IAC7B,sFAAsF;IACtF,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAC7D,uEAAuE;IACvE,GAAG,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;CACjC;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,eAAe,CACjC,GAAG,EAAE,QAAQ,EACb,IAAI,EAAE;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,OAAO,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,EACjG,WAAW,EAAE,MAAM,GAAG,SAAS,EAC/B,IAAI,EAAE,gBAAgB,EACtB,IAAI,GAAE;IAAE,QAAQ,CAAC,EAAE,OAAO,CAAA;CAAO,GAClC,OAAO,CAAC,OAAO,CAAC,CAoElB"}
@@ -0,0 +1,190 @@
1
+ import { setStoredFileHeaders } from './file-download-headers.js';
2
+ import { needsUtf8Verdict } from './app-content-type.js';
3
+ /**
4
+ * Decide what a `Range` header asks for.
5
+ *
6
+ * `size` is the complete length of the representation. A zero-length file makes every byte range
7
+ * unsatisfiable, which is what RFC 9110 §15.5.17 describes and what a client needs to hear rather
8
+ * than a 200 with no bytes and a status that says it was a partial answer.
9
+ */
10
+ export function parseRangeHeader(header, size) {
11
+ const raw = (header ?? '').trim();
12
+ if (!raw)
13
+ return { kind: 'full' };
14
+ // A unit we do not speak. RFC 9110 §14.2: ignore it and answer with the full representation.
15
+ // `Accept-Ranges: bytes` is on that same response, so the client is not left guessing.
16
+ if (!/^bytes\s*=/i.test(raw))
17
+ return { kind: 'full' };
18
+ const spec = raw.slice(raw.indexOf('=') + 1).trim();
19
+ if (spec.includes(',')) {
20
+ return {
21
+ kind: 'unsatisfiable',
22
+ reason: 'This server serves one byte range per request. A multipart/byteranges response is '
23
+ + 'not implemented, and answering part of what was asked under a success status would '
24
+ + 'hide that. Ask for one range at a time.',
25
+ };
26
+ }
27
+ // suffix-byte-range-spec: "-N" — the LAST N bytes. The shape a Parquet reader opens with.
28
+ const suffix = /^-(\d+)$/.exec(spec);
29
+ if (suffix) {
30
+ const wanted = parseInt(suffix[1], 10);
31
+ if (!Number.isFinite(wanted) || wanted <= 0 || size === 0) {
32
+ return { kind: 'unsatisfiable', reason: `suffix range "${spec}" against a ${size}-byte representation` };
33
+ }
34
+ // Asking for more than there is means the whole thing (RFC 9110 §14.1.2), not an error.
35
+ return { kind: 'partial', start: Math.max(0, size - wanted), end: size - 1 };
36
+ }
37
+ // int-byte-range-spec: "N-" or "N-M".
38
+ const explicit = /^(\d+)-(\d*)$/.exec(spec);
39
+ if (!explicit) {
40
+ return { kind: 'unsatisfiable', reason: `unparseable byte range "${spec}"` };
41
+ }
42
+ const start = parseInt(explicit[1], 10);
43
+ // An absent last-byte-pos means "to the end"; one past the end clamps to the last byte.
44
+ const end = explicit[2] === '' ? size - 1 : Math.min(parseInt(explicit[2], 10), size - 1);
45
+ if (!Number.isFinite(start) || size === 0 || start >= size || end < start) {
46
+ return { kind: 'unsatisfiable', reason: `byte range "${spec}" against a ${size}-byte representation` };
47
+ }
48
+ return { kind: 'partial', start, end };
49
+ }
50
+ /**
51
+ * Announce range support. Belongs on EVERY response that carries (or describes) stored bytes,
52
+ * including the 200 and the HEAD: a client decides whether to range-read from this header, and a
53
+ * server that answers ranges without advertising them is a server nothing ranges against.
54
+ */
55
+ export function setAcceptRanges(res) {
56
+ res.setHeader('Accept-Ranges', 'bytes');
57
+ }
58
+ /**
59
+ * 416 with the one header that makes it actionable: a `Content-Range` of `bytes STAR/size` tells the
60
+ * client how long the representation actually is, so its next request can be a valid one.
61
+ *
62
+ * Deliberately NOT the envelope. This is a byte-serving path, the caller may be a database engine
63
+ * rather than a browser, and the status plus Content-Range is the whole message.
64
+ */
65
+ export function rangeNotSatisfiable(res, size, reason) {
66
+ res.status(416);
67
+ setAcceptRanges(res);
68
+ res.setHeader('Content-Range', `bytes */${size}`);
69
+ res.setHeader('Content-Type', 'text/plain; charset=utf-8');
70
+ res.end(`416 Range Not Satisfiable: ${reason}\n`);
71
+ }
72
+ /**
73
+ * 206 with the slice.
74
+ *
75
+ * `chunk` is the slice and `file` describes the WHOLE representation, which is the distinction the
76
+ * Content-Range header itself makes. `setStoredFileHeaders` follows the same rule: it takes the
77
+ * file's stored UTF-8 verdict when there is one, so this response names the same content type the
78
+ * full GET does. Sniffing the slice would not — a multi-byte character straddling the boundary
79
+ * fails a decode that the whole file passes.
80
+ */
81
+ export function sendPartialContent(res, file, range, chunk) {
82
+ res.status(206);
83
+ setStoredFileHeaders(res, file);
84
+ setAcceptRanges(res);
85
+ res.setHeader('Content-Range', `bytes ${range.start}-${range.end}/${file.size}`);
86
+ res.setHeader('Content-Length', chunk.length);
87
+ res.end(chunk);
88
+ }
89
+ /**
90
+ * Does naming this file's content type still require reading it?
91
+ *
92
+ * Only for a row written before the UTF-8 verdict was recorded, and only for a type whose served
93
+ * form the verdict would change. Everything written since answers from metadata alone, and this
94
+ * shrinks to nothing as old rows are rewritten.
95
+ */
96
+ export function needsBytesForType(file) {
97
+ return file.utf8Verified === undefined && needsUtf8Verdict(file.mimeType);
98
+ }
99
+ /**
100
+ * Serve one stored file, honouring `Range`, from METADATA plus a reader.
101
+ *
102
+ * WHY THE READER IS A CALLBACK AND NOT A BUFFER. Every door here used to load the entire file and
103
+ * then decide what part of it to send, which meant an eight-byte suffix request — the first thing a
104
+ * Parquet reader asks for — read 25 MB out of the database to answer it. Measured on Postgres:
105
+ * 181 ms that way, 3 ms as a database-side substring, and the gap widens with the file. Taking the
106
+ * reader rather than the bytes is what lets the decision come BEFORE the read.
107
+ *
108
+ * The caller sets its own caching and CORS headers first; they differ per door and these do not.
109
+ * Returns false when the file vanished between the metadata read and the bytes, and sends nothing —
110
+ * the caller owns the 404 because only it knows which shape of "not found" that door tells.
111
+ */
112
+ export async function serveStoredFile(res, file, rangeHeader, read, opts = {}) {
113
+ // A validator, on every representation of the file. A ranged reader keeps one of these between
114
+ // requests to know the bytes did not move under it, and DuckDB reads Last-Modified straight off
115
+ // the probe. It costs nothing: the write time is already in the metadata.
116
+ if (file.createdAt) {
117
+ const at = new Date(file.createdAt);
118
+ if (!Number.isNaN(at.getTime()))
119
+ res.setHeader('Last-Modified', at.toUTCString());
120
+ }
121
+ // ONE decision, made before anything is sent: can this file's content type be named without its
122
+ // bytes? With a stored verdict, yes, and nothing outside the requested range is ever read. For a
123
+ // file written before the verdict existed the charset still lives in the content, so the whole
124
+ // file is read — the same cost as before this change, paid only by rows that predate it, and
125
+ // gone the next time each one is written.
126
+ //
127
+ // Getting this wrong is not a slow response but a false one. An earlier draft passed the
128
+ // metadata record straight through, and its `data` is an EMPTY buffer: the sniffer decoded zero
129
+ // bytes, found them valid UTF-8, and stamped `charset=utf-8` on a range reply. On a genuinely
130
+ // cp1252 file that declares an encoding the file does not have, over a GET of the same file that
131
+ // correctly declares nothing.
132
+ const whole = needsBytesForType(file) ? await read.all() : null;
133
+ if (needsBytesForType(file) && !whole)
134
+ return false;
135
+ const described = whole ? { ...file, data: whole } : file;
136
+ const verdict = parseRangeHeader(rangeHeader, file.size);
137
+ // A HEAD answers out of the metadata and reads nothing more. Express auto-handles HEAD through
138
+ // the GET handler, so /v1/pub was loading the entire file and discarding the body: 114 ms
139
+ // measured, for a 10 MB file, to send zero bytes.
140
+ //
141
+ // IT STILL HONOURS `Range`, and that is not pedantry about RFC 9110's "same headers a GET would
142
+ // send". A HEAD carrying `Range: bytes=0-` is how a client ASKS whether this server does ranges,
143
+ // and DuckDB-Wasm's own words for the answer are `if (contentLength !== null && status == 206)`.
144
+ // An earlier version of this function short-circuited before reading the Range header, so that
145
+ // probe got 200 and the full length. DuckDB read it as "no ranges here" and downloaded an 8.45 MB
146
+ // Parquet file in one request to answer a two-column aggregate — and with full reads disabled it
147
+ // refused to open the file at all. A fast HEAD that lies about ranges is worse than a slow one.
148
+ if (opts.headOnly) {
149
+ if (verdict.kind === 'unsatisfiable') {
150
+ rangeNotSatisfiable(res, file.size, verdict.reason);
151
+ return true;
152
+ }
153
+ setStoredFileHeaders(res, described);
154
+ setAcceptRanges(res);
155
+ if (verdict.kind === 'partial') {
156
+ res.status(206);
157
+ res.setHeader('Content-Range', `bytes ${verdict.start}-${verdict.end}/${file.size}`);
158
+ res.setHeader('Content-Length', verdict.end - verdict.start + 1);
159
+ }
160
+ else {
161
+ res.setHeader('Content-Length', file.size);
162
+ }
163
+ res.end();
164
+ return true;
165
+ }
166
+ if (verdict.kind === 'unsatisfiable') {
167
+ rangeNotSatisfiable(res, file.size, verdict.reason);
168
+ return true;
169
+ }
170
+ if (verdict.kind === 'partial') {
171
+ // When the file is already in hand there is nothing to gain from asking the database for a
172
+ // slice of it, so the second read is skipped rather than repeated.
173
+ const chunk = whole
174
+ ? whole.subarray(verdict.start, verdict.end + 1)
175
+ : await read.range(verdict.start, verdict.end - verdict.start + 1);
176
+ if (!chunk)
177
+ return false;
178
+ sendPartialContent(res, described, verdict, chunk);
179
+ return true;
180
+ }
181
+ const data = whole ?? await read.all();
182
+ if (!data)
183
+ return false;
184
+ setStoredFileHeaders(res, { ...described, data });
185
+ setAcceptRanges(res);
186
+ res.setHeader('Content-Length', file.size);
187
+ res.end(data);
188
+ return true;
189
+ }
190
+ //# sourceMappingURL=http-range.js.map