aimeat 3.2.0 → 3.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/.env.example +58 -1
- package/dist/build-stamp.json +4 -4
- package/dist/locales/en.json +41 -1
- package/dist/locales/es.json +41 -1
- package/dist/locales/fi.json +43 -3
- package/dist/public/changelog.json +12 -0
- package/dist/public/css/views/chat.css +388 -0
- package/dist/public/js/services/chat.js +190 -0
- package/dist/public/js/services/speech-reader.js +26 -0
- package/dist/public/lib/VENDORED.md +1 -0
- package/dist/public/lib/duckdb-wasm@1.32.0/duckdb-browser-eh.worker.js +14 -0
- package/dist/public/lib/duckdb-wasm@1.32.0/duckdb-browser.js +23 -0
- package/dist/public/lib/duckdb-wasm@1.32.0/duckdb-eh.wasm +0 -0
- package/dist/public/lib/duckdb-wasm@1.32.0/extensions/v1.4.3/wasm_eh/parquet.duckdb_extension.wasm +0 -0
- package/dist/public/lib/vendored-assets.json +19 -0
- package/dist/public/llms-full-template.txt +2706 -0
- package/dist/public/llms-index-template.txt +60 -0
- package/dist/public/robots.node.txt +64 -23
- package/dist/public/spa.html +8 -1
- package/dist/public/views/chat/parts.js +257 -0
- package/dist/public/views/chat.js +327 -0
- package/dist/public/views/landing.js +24 -1
- package/dist/public/views/profile/agents/scope-model.js +320 -315
- package/dist/scripts/audit-mcp-schemas.js +50 -0
- package/dist/scripts/audit-mcp-schemas.js.map +1 -1
- package/dist/scripts/build-sdk-libs.d.ts.map +1 -1
- package/dist/scripts/build-sdk-libs.js +1 -0
- package/dist/scripts/build-sdk-libs.js.map +1 -1
- package/dist/scripts/check-ai-disclosure.d.ts +1 -1
- package/dist/scripts/check-ai-disclosure.d.ts.map +1 -1
- package/dist/scripts/check-ai-disclosure.js +30 -3
- package/dist/scripts/check-ai-disclosure.js.map +1 -1
- package/dist/scripts/check-denial-coverage.d.ts +29 -0
- package/dist/scripts/check-denial-coverage.d.ts.map +1 -0
- package/dist/scripts/check-denial-coverage.js +237 -0
- package/dist/scripts/check-denial-coverage.js.map +1 -0
- package/dist/scripts/check-ext-entrypoints.js +14 -2
- package/dist/scripts/check-ext-entrypoints.js.map +1 -1
- package/dist/scripts/check-outbound-fetch.d.ts.map +1 -1
- package/dist/scripts/check-outbound-fetch.js +16 -2
- package/dist/scripts/check-outbound-fetch.js.map +1 -1
- package/dist/scripts/check-sse-parity.js +14 -0
- package/dist/scripts/check-sse-parity.js.map +1 -1
- package/dist/scripts/indexnow.js +9 -7
- package/dist/scripts/indexnow.js.map +1 -1
- package/dist/src/auth/ai-gate.d.ts +25 -0
- package/dist/src/auth/ai-gate.d.ts.map +1 -0
- package/dist/src/auth/ai-gate.js +21 -0
- package/dist/src/auth/ai-gate.js.map +1 -0
- package/dist/src/auth/middleware.d.ts +7 -0
- package/dist/src/auth/middleware.d.ts.map +1 -1
- package/dist/src/auth/middleware.js +15 -21
- package/dist/src/auth/middleware.js.map +1 -1
- package/dist/src/cli/connect/mcp/tools/agent-tasks.d.ts +4 -0
- package/dist/src/cli/connect/mcp/tools/agent-tasks.d.ts.map +1 -1
- package/dist/src/cli/connect/mcp/tools/agent-tasks.js +11 -1
- package/dist/src/cli/connect/mcp/tools/agent-tasks.js.map +1 -1
- package/dist/src/cli/connect/mcp/tools/apps.d.ts.map +1 -1
- package/dist/src/cli/connect/mcp/tools/apps.js +88 -0
- package/dist/src/cli/connect/mcp/tools/apps.js.map +1 -1
- package/dist/src/cli/connect/mcp/tools/core.d.ts +7 -0
- package/dist/src/cli/connect/mcp/tools/core.d.ts.map +1 -1
- package/dist/src/cli/connect/mcp/tools/core.js +83 -4
- package/dist/src/cli/connect/mcp/tools/core.js.map +1 -1
- package/dist/src/cli/connect/onboarding-prompt.js +1 -1
- package/dist/src/cli/connect/skill-bundle.js +1 -1
- package/dist/src/cli/connect/tool-call-defs-agent.d.ts.map +1 -1
- package/dist/src/cli/connect/tool-call-defs-agent.js +38 -9
- package/dist/src/cli/connect/tool-call-defs-agent.js.map +1 -1
- package/dist/src/cli/connect/tool-call-defs-app-draft-edit.d.ts +21 -0
- package/dist/src/cli/connect/tool-call-defs-app-draft-edit.d.ts.map +1 -0
- package/dist/src/cli/connect/tool-call-defs-app-draft-edit.js +137 -0
- package/dist/src/cli/connect/tool-call-defs-app-draft-edit.js.map +1 -0
- package/dist/src/cli/connect/tool-call-defs-apps.d.ts.map +1 -1
- package/dist/src/cli/connect/tool-call-defs-apps.js +114 -25
- package/dist/src/cli/connect/tool-call-defs-apps.js.map +1 -1
- package/dist/src/cli/connect/tool-call-defs-core.d.ts +1 -0
- package/dist/src/cli/connect/tool-call-defs-core.d.ts.map +1 -1
- package/dist/src/cli/connect/tool-call-defs-core.js +179 -26
- package/dist/src/cli/connect/tool-call-defs-core.js.map +1 -1
- package/dist/src/cli/connect/tool-call-defs-organism.d.ts.map +1 -1
- package/dist/src/cli/connect/tool-call-defs-organism.js +20 -3
- package/dist/src/cli/connect/tool-call-defs-organism.js.map +1 -1
- package/dist/src/cli/connect/tool-call.d.ts.map +1 -1
- package/dist/src/cli/connect/tool-call.js +52 -1
- package/dist/src/cli/connect/tool-call.js.map +1 -1
- package/dist/src/config-types-ai.d.ts +76 -0
- package/dist/src/config-types-ai.d.ts.map +1 -0
- package/dist/src/config-types-ai.js +15 -0
- package/dist/src/config-types-ai.js.map +1 -0
- package/dist/src/config-types.d.ts +11 -2
- package/dist/src/config-types.d.ts.map +1 -1
- package/dist/src/config.d.ts.map +1 -1
- package/dist/src/config.js +25 -4
- package/dist/src/config.js.map +1 -1
- package/dist/src/data/builtin-skills.d.ts.map +1 -1
- package/dist/src/data/builtin-skills.js +3 -2
- package/dist/src/data/builtin-skills.js.map +1 -1
- package/dist/src/data/digital-signage-package.js +1 -1
- package/dist/src/data/library-packs/sdk.d.ts.map +1 -1
- package/dist/src/data/library-packs/sdk.js +76 -0
- package/dist/src/data/library-packs/sdk.js.map +1 -1
- package/dist/src/data/library-packs/vendored.d.ts.map +1 -1
- package/dist/src/data/library-packs/vendored.js +81 -0
- package/dist/src/data/library-packs/vendored.js.map +1 -1
- package/dist/src/data/library-packs.d.ts +2 -2
- package/dist/src/data/library-packs.js +2 -2
- package/dist/src/data/public-pages.d.ts +13 -0
- package/dist/src/data/public-pages.d.ts.map +1 -1
- package/dist/src/data/public-pages.js +153 -113
- package/dist/src/data/public-pages.js.map +1 -1
- package/dist/src/generated/api-types.d.ts +1808 -36
- package/dist/src/generated/api-types.d.ts.map +1 -1
- package/dist/src/index-start.d.ts.map +1 -1
- package/dist/src/index-start.js +3 -0
- package/dist/src/index-start.js.map +1 -1
- package/dist/src/mcp/agent-tasks.d.ts.map +1 -1
- package/dist/src/mcp/agent-tasks.js +5 -0
- package/dist/src/mcp/agent-tasks.js.map +1 -1
- package/dist/src/mcp/ai-image.d.ts +22 -0
- package/dist/src/mcp/ai-image.d.ts.map +1 -0
- package/dist/src/mcp/ai-image.js +60 -0
- package/dist/src/mcp/ai-image.js.map +1 -0
- package/dist/src/mcp/annotations.d.ts +5 -0
- package/dist/src/mcp/annotations.d.ts.map +1 -1
- package/dist/src/mcp/annotations.js +18 -0
- package/dist/src/mcp/annotations.js.map +1 -1
- package/dist/src/mcp/apps-draft-edit.d.ts +28 -0
- package/dist/src/mcp/apps-draft-edit.d.ts.map +1 -0
- package/dist/src/mcp/apps-draft-edit.js +164 -0
- package/dist/src/mcp/apps-draft-edit.js.map +1 -0
- package/dist/src/mcp/apps-screenshot.d.ts +26 -0
- package/dist/src/mcp/apps-screenshot.d.ts.map +1 -0
- package/dist/src/mcp/apps-screenshot.js +39 -0
- package/dist/src/mcp/apps-screenshot.js.map +1 -0
- package/dist/src/mcp/catalog/definitions/discovery-work-boards.d.ts +1 -0
- package/dist/src/mcp/catalog/definitions/discovery-work-boards.d.ts.map +1 -1
- package/dist/src/mcp/catalog/definitions/discovery-work-boards.js +40 -0
- package/dist/src/mcp/catalog/definitions/discovery-work-boards.js.map +1 -1
- package/dist/src/mcp/catalog/definitions/organisms-workspaces-apps.d.ts +3 -0
- package/dist/src/mcp/catalog/definitions/organisms-workspaces-apps.d.ts.map +1 -1
- package/dist/src/mcp/catalog/definitions/organisms-workspaces-apps.js +74 -0
- package/dist/src/mcp/catalog/definitions/organisms-workspaces-apps.js.map +1 -1
- package/dist/src/mcp/catalog/definitions/schedules-tasks-memory.d.ts.map +1 -1
- package/dist/src/mcp/catalog/definitions/schedules-tasks-memory.js +1 -0
- package/dist/src/mcp/catalog/definitions/schedules-tasks-memory.js.map +1 -1
- package/dist/src/mcp/catalog/scopes.d.ts.map +1 -1
- package/dist/src/mcp/catalog/scopes.js +19 -1
- package/dist/src/mcp/catalog/scopes.js.map +1 -1
- package/dist/src/mcp/catalog/surfaces.d.ts.map +1 -1
- package/dist/src/mcp/catalog/surfaces.js +18 -4
- package/dist/src/mcp/catalog/surfaces.js.map +1 -1
- package/dist/src/mcp/core-datapackage.d.ts +32 -0
- package/dist/src/mcp/core-datapackage.d.ts.map +1 -0
- package/dist/src/mcp/core-datapackage.js +188 -0
- package/dist/src/mcp/core-datapackage.js.map +1 -0
- package/dist/src/mcp/core-storage.d.ts +7 -3
- package/dist/src/mcp/core-storage.d.ts.map +1 -1
- package/dist/src/mcp/core-storage.js +27 -4
- package/dist/src/mcp/core-storage.js.map +1 -1
- package/dist/src/mcp/core.d.ts.map +1 -1
- package/dist/src/mcp/core.js +3 -0
- package/dist/src/mcp/core.js.map +1 -1
- package/dist/src/mcp/extensions.d.ts.map +1 -1
- package/dist/src/mcp/extensions.js +11 -1
- package/dist/src/mcp/extensions.js.map +1 -1
- package/dist/src/mcp/index.d.ts +9 -0
- package/dist/src/mcp/index.d.ts.map +1 -1
- package/dist/src/mcp/index.js +34 -0
- package/dist/src/mcp/index.js.map +1 -1
- package/dist/src/models/agent-task-schemas.d.ts.map +1 -1
- package/dist/src/models/agent-task-schemas.js +12 -1
- package/dist/src/models/agent-task-schemas.js.map +1 -1
- package/dist/src/models/workflow-schemas.d.ts +178 -1
- package/dist/src/models/workflow-schemas.d.ts.map +1 -1
- package/dist/src/models/workflow-schemas.js +75 -0
- package/dist/src/models/workflow-schemas.js.map +1 -1
- package/dist/src/routes/admin-extensions.d.ts +4 -0
- package/dist/src/routes/admin-extensions.d.ts.map +1 -1
- package/dist/src/routes/admin-extensions.js +135 -142
- package/dist/src/routes/admin-extensions.js.map +1 -1
- package/dist/src/routes/agent-conventions.d.ts.map +1 -1
- package/dist/src/routes/agent-conventions.js +4 -2
- package/dist/src/routes/agent-conventions.js.map +1 -1
- package/dist/src/routes/agent-docs.d.ts +4 -4
- package/dist/src/routes/agent-docs.js +145 -145
- package/dist/src/routes/agent-docs.js.map +1 -1
- package/dist/src/routes/agent-messages.d.ts +6 -0
- package/dist/src/routes/agent-messages.d.ts.map +1 -1
- package/dist/src/routes/agent-messages.js +23 -1
- package/dist/src/routes/agent-messages.js.map +1 -1
- package/dist/src/routes/agent-tasks/create-read.d.ts.map +1 -1
- package/dist/src/routes/agent-tasks/create-read.js +8 -1
- package/dist/src/routes/agent-tasks/create-read.js.map +1 -1
- package/dist/src/routes/agent-tasks/lifecycle.d.ts +4 -1
- package/dist/src/routes/agent-tasks/lifecycle.d.ts.map +1 -1
- package/dist/src/routes/agent-tasks/lifecycle.js +80 -2
- package/dist/src/routes/agent-tasks/lifecycle.js.map +1 -1
- package/dist/src/routes/ai.d.ts +5 -0
- package/dist/src/routes/ai.d.ts.map +1 -1
- package/dist/src/routes/ai.js +55 -16
- package/dist/src/routes/ai.js.map +1 -1
- package/dist/src/routes/app-grants.d.ts.map +1 -1
- package/dist/src/routes/app-grants.js +5 -0
- package/dist/src/routes/app-grants.js.map +1 -1
- package/dist/src/routes/apps/drafts.d.ts +6 -0
- package/dist/src/routes/apps/drafts.d.ts.map +1 -1
- package/dist/src/routes/apps/drafts.js +133 -1
- package/dist/src/routes/apps/drafts.js.map +1 -1
- package/dist/src/routes/apps/read.d.ts.map +1 -1
- package/dist/src/routes/apps/read.js +38 -1
- package/dist/src/routes/apps/read.js.map +1 -1
- package/dist/src/routes/auth-otk.d.ts +28 -0
- package/dist/src/routes/auth-otk.d.ts.map +1 -0
- package/dist/src/routes/auth-otk.js +190 -0
- package/dist/src/routes/auth-otk.js.map +1 -0
- package/dist/src/routes/auth.d.ts +17 -0
- package/dist/src/routes/auth.d.ts.map +1 -1
- package/dist/src/routes/auth.js +44 -153
- package/dist/src/routes/auth.js.map +1 -1
- package/dist/src/routes/bootstrap.d.ts +6 -0
- package/dist/src/routes/bootstrap.d.ts.map +1 -1
- package/dist/src/routes/bootstrap.js +47 -20
- package/dist/src/routes/bootstrap.js.map +1 -1
- package/dist/src/routes/chat.d.ts +23 -0
- package/dist/src/routes/chat.d.ts.map +1 -0
- package/dist/src/routes/chat.js +165 -0
- package/dist/src/routes/chat.js.map +1 -0
- package/dist/src/routes/commerce.js +4 -4
- package/dist/src/routes/commerce.js.map +1 -1
- package/dist/src/routes/datapackages.d.ts +35 -0
- package/dist/src/routes/datapackages.d.ts.map +1 -0
- package/dist/src/routes/datapackages.js +217 -0
- package/dist/src/routes/datapackages.js.map +1 -0
- package/dist/src/routes/disputes.d.ts +8 -0
- package/dist/src/routes/disputes.d.ts.map +1 -1
- package/dist/src/routes/disputes.js +52 -1
- package/dist/src/routes/disputes.js.map +1 -1
- package/dist/src/routes/ecosystem-apps-advisories.d.ts +16 -0
- package/dist/src/routes/ecosystem-apps-advisories.d.ts.map +1 -0
- package/dist/src/routes/ecosystem-apps-advisories.js +104 -0
- package/dist/src/routes/ecosystem-apps-advisories.js.map +1 -0
- package/dist/src/routes/ecosystem-apps.d.ts +6 -0
- package/dist/src/routes/ecosystem-apps.d.ts.map +1 -1
- package/dist/src/routes/ecosystem-apps.js +31 -99
- package/dist/src/routes/ecosystem-apps.js.map +1 -1
- package/dist/src/routes/extensions/actions.d.ts.map +1 -1
- package/dist/src/routes/extensions/actions.js +29 -1
- package/dist/src/routes/extensions/actions.js.map +1 -1
- package/dist/src/routes/federation-sync/routing.d.ts.map +1 -1
- package/dist/src/routes/federation-sync/routing.js +12 -3
- package/dist/src/routes/federation-sync/routing.js.map +1 -1
- package/dist/src/routes/glossary.js +1 -1
- package/dist/src/routes/glossary.js.map +1 -1
- package/dist/src/routes/home/track.d.ts +5 -1
- package/dist/src/routes/home/track.d.ts.map +1 -1
- package/dist/src/routes/home/track.js +20 -6
- package/dist/src/routes/home/track.js.map +1 -1
- package/dist/src/routes/instances/install.d.ts +3 -0
- package/dist/src/routes/instances/install.d.ts.map +1 -1
- package/dist/src/routes/instances/install.js +17 -24
- package/dist/src/routes/instances/install.js.map +1 -1
- package/dist/src/routes/libs.js +1 -1
- package/dist/src/routes/libs.js.map +1 -1
- package/dist/src/routes/llm-proxy.d.ts +34 -0
- package/dist/src/routes/llm-proxy.d.ts.map +1 -0
- package/dist/src/routes/llm-proxy.js +258 -0
- package/dist/src/routes/llm-proxy.js.map +1 -0
- package/dist/src/routes/markdown-mirrors.js +1 -1
- package/dist/src/routes/markdown-mirrors.js.map +1 -1
- package/dist/src/routes/odata.d.ts +36 -0
- package/dist/src/routes/odata.d.ts.map +1 -0
- package/dist/src/routes/odata.js +143 -0
- package/dist/src/routes/odata.js.map +1 -0
- package/dist/src/routes/openrouter.d.ts +4 -0
- package/dist/src/routes/openrouter.d.ts.map +1 -1
- package/dist/src/routes/openrouter.js +10 -1
- package/dist/src/routes/openrouter.js.map +1 -1
- package/dist/src/routes/organisms/gates.d.ts.map +1 -1
- package/dist/src/routes/organisms/gates.js +9 -2
- package/dist/src/routes/organisms/gates.js.map +1 -1
- package/dist/src/routes/portal.d.ts +1 -0
- package/dist/src/routes/portal.d.ts.map +1 -1
- package/dist/src/routes/portal.js +13 -0
- package/dist/src/routes/portal.js.map +1 -1
- package/dist/src/routes/schedules.d.ts +4 -0
- package/dist/src/routes/schedules.d.ts.map +1 -1
- package/dist/src/routes/schedules.js +9 -1
- package/dist/src/routes/schedules.js.map +1 -1
- package/dist/src/routes/storage-files.d.ts +23 -0
- package/dist/src/routes/storage-files.d.ts.map +1 -1
- package/dist/src/routes/storage-files.js +103 -82
- package/dist/src/routes/storage-files.js.map +1 -1
- package/dist/src/routes/workflows.d.ts.map +1 -1
- package/dist/src/routes/workflows.js +9 -1
- package/dist/src/routes/workflows.js.map +1 -1
- package/dist/src/server-bootstrap/routes-loader.d.ts +2 -0
- package/dist/src/server-bootstrap/routes-loader.d.ts.map +1 -1
- package/dist/src/server-bootstrap/routes-loader.js +22 -2
- package/dist/src/server-bootstrap/routes-loader.js.map +1 -1
- package/dist/src/server-bootstrap/service-init.d.ts.map +1 -1
- package/dist/src/server-bootstrap/service-init.js +12 -7
- package/dist/src/server-bootstrap/service-init.js.map +1 -1
- package/dist/src/server-bootstrap/static-files.d.ts.map +1 -1
- package/dist/src/server-bootstrap/static-files.js +44 -10
- package/dist/src/server-bootstrap/static-files.js.map +1 -1
- package/dist/src/services/ai-allowance.d.ts +82 -0
- package/dist/src/services/ai-allowance.d.ts.map +1 -0
- package/dist/src/services/ai-allowance.js +117 -0
- package/dist/src/services/ai-allowance.js.map +1 -0
- package/dist/src/services/ai-completion.d.ts +102 -0
- package/dist/src/services/ai-completion.d.ts.map +1 -1
- package/dist/src/services/ai-completion.js +131 -67
- package/dist/src/services/ai-completion.js.map +1 -1
- package/dist/src/services/ai-image.d.ts +70 -0
- package/dist/src/services/ai-image.d.ts.map +1 -0
- package/dist/src/services/ai-image.js +104 -0
- package/dist/src/services/ai-image.js.map +1 -0
- package/dist/src/services/ai-model-defaults.d.ts +45 -0
- package/dist/src/services/ai-model-defaults.d.ts.map +1 -0
- package/dist/src/services/ai-model-defaults.js +42 -0
- package/dist/src/services/ai-model-defaults.js.map +1 -0
- package/dist/src/services/ai-tool-setup.d.ts +5 -1
- package/dist/src/services/ai-tool-setup.d.ts.map +1 -1
- package/dist/src/services/ai-tool-setup.js +36 -0
- package/dist/src/services/ai-tool-setup.js.map +1 -1
- package/dist/src/services/ai-transcription.d.ts +5 -0
- package/dist/src/services/ai-transcription.d.ts.map +1 -1
- package/dist/src/services/ai-transcription.js +5 -2
- package/dist/src/services/ai-transcription.js.map +1 -1
- package/dist/src/services/app-agent-surfaces.js +4 -4
- package/dist/src/services/app-agent-surfaces.js.map +1 -1
- package/dist/src/services/app-draft-edit.d.ts +144 -0
- package/dist/src/services/app-draft-edit.d.ts.map +1 -0
- package/dist/src/services/app-draft-edit.js +203 -0
- package/dist/src/services/app-draft-edit.js.map +1 -0
- package/dist/src/services/auth-md.js +2 -2
- package/dist/src/services/auth-md.js.map +1 -1
- package/dist/src/services/board-write.d.ts +11 -3
- package/dist/src/services/board-write.d.ts.map +1 -1
- package/dist/src/services/board-write.js +24 -3
- package/dist/src/services/board-write.js.map +1 -1
- package/dist/src/services/chat-agent.d.ts +36 -0
- package/dist/src/services/chat-agent.d.ts.map +1 -0
- package/dist/src/services/chat-agent.js +123 -0
- package/dist/src/services/chat-agent.js.map +1 -0
- package/dist/src/services/chat-session.d.ts +58 -0
- package/dist/src/services/chat-session.d.ts.map +1 -0
- package/dist/src/services/chat-session.js +151 -0
- package/dist/src/services/chat-session.js.map +1 -0
- package/dist/src/services/chat-threads.d.ts +61 -0
- package/dist/src/services/chat-threads.d.ts.map +1 -0
- package/dist/src/services/chat-threads.js +137 -0
- package/dist/src/services/chat-threads.js.map +1 -0
- package/dist/src/services/config-schema.d.ts.map +1 -1
- package/dist/src/services/config-schema.js +2 -1
- package/dist/src/services/config-schema.js.map +1 -1
- package/dist/src/services/datapackage/contract.d.ts +198 -0
- package/dist/src/services/datapackage/contract.d.ts.map +1 -0
- package/dist/src/services/datapackage/contract.js +140 -0
- package/dist/src/services/datapackage/contract.js.map +1 -0
- package/dist/src/services/datapackage/ext-capability.d.ts +85 -0
- package/dist/src/services/datapackage/ext-capability.d.ts.map +1 -0
- package/dist/src/services/datapackage/ext-capability.js +72 -0
- package/dist/src/services/datapackage/ext-capability.js.map +1 -0
- package/dist/src/services/datapackage/odata.d.ts +92 -0
- package/dist/src/services/datapackage/odata.d.ts.map +1 -0
- package/dist/src/services/datapackage/odata.js +256 -0
- package/dist/src/services/datapackage/odata.js.map +1 -0
- package/dist/src/services/datapackage/odps.d.ts +24 -0
- package/dist/src/services/datapackage/odps.d.ts.map +1 -0
- package/dist/src/services/datapackage/odps.js +183 -0
- package/dist/src/services/datapackage/odps.js.map +1 -0
- package/dist/src/services/datapackage/store.d.ts +143 -0
- package/dist/src/services/datapackage/store.d.ts.map +1 -0
- package/dist/src/services/datapackage/store.js +533 -0
- package/dist/src/services/datapackage/store.js.map +1 -0
- package/dist/src/services/datapackage/table.d.ts +67 -0
- package/dist/src/services/datapackage/table.d.ts.map +1 -0
- package/dist/src/services/datapackage/table.js +0 -0
- package/dist/src/services/datapackage/table.js.map +1 -0
- package/dist/src/services/extension-ctx.d.ts +1 -0
- package/dist/src/services/extension-ctx.d.ts.map +1 -1
- package/dist/src/services/extension-ctx.js +31 -6
- package/dist/src/services/extension-ctx.js.map +1 -1
- package/dist/src/services/extension-files.d.ts +20 -0
- package/dist/src/services/extension-files.d.ts.map +1 -1
- package/dist/src/services/extension-files.js +9 -2
- package/dist/src/services/extension-files.js.map +1 -1
- package/dist/src/services/extension-lifecycle.d.ts +3 -0
- package/dist/src/services/extension-lifecycle.d.ts.map +1 -1
- package/dist/src/services/extension-lifecycle.js +2 -26
- package/dist/src/services/extension-lifecycle.js.map +1 -1
- package/dist/src/services/extension-runtime.d.ts +28 -2
- package/dist/src/services/extension-runtime.d.ts.map +1 -1
- package/dist/src/services/extension-runtime.js +22 -0
- package/dist/src/services/extension-runtime.js.map +1 -1
- package/dist/src/services/extension-schedules.d.ts +90 -0
- package/dist/src/services/extension-schedules.d.ts.map +1 -0
- package/dist/src/services/extension-schedules.js +123 -0
- package/dist/src/services/extension-schedules.js.map +1 -0
- package/dist/src/services/extension-system-run.d.ts +91 -0
- package/dist/src/services/extension-system-run.d.ts.map +1 -0
- package/dist/src/services/extension-system-run.js +100 -0
- package/dist/src/services/extension-system-run.js.map +1 -0
- package/dist/src/services/extension-upsert.d.ts +2 -0
- package/dist/src/services/extension-upsert.d.ts.map +1 -1
- package/dist/src/services/extension-upsert.js +6 -24
- package/dist/src/services/extension-upsert.js.map +1 -1
- package/dist/src/services/goose-acp.d.ts +84 -0
- package/dist/src/services/goose-acp.d.ts.map +1 -0
- package/dist/src/services/goose-acp.js +304 -0
- package/dist/src/services/goose-acp.js.map +1 -0
- package/dist/src/services/markdown-negotiation.js +1 -1
- package/dist/src/services/markdown-negotiation.js.map +1 -1
- package/dist/src/services/openrouter.d.ts +43 -1
- package/dist/src/services/openrouter.d.ts.map +1 -1
- package/dist/src/services/openrouter.js +98 -1
- package/dist/src/services/openrouter.js.map +1 -1
- package/dist/src/services/prompt-defaults/tiers-core.js +4 -4
- package/dist/src/services/scheduler-extension-job.d.ts +29 -6
- package/dist/src/services/scheduler-extension-job.d.ts.map +1 -1
- package/dist/src/services/scheduler-extension-job.js +29 -75
- package/dist/src/services/scheduler-extension-job.js.map +1 -1
- package/dist/src/services/scope-vocabulary-migration.d.ts +34 -1
- package/dist/src/services/scope-vocabulary-migration.d.ts.map +1 -1
- package/dist/src/services/scope-vocabulary-migration.js +60 -0
- package/dist/src/services/scope-vocabulary-migration.js.map +1 -1
- package/dist/src/services/screenshot-capture.d.ts +40 -1
- package/dist/src/services/screenshot-capture.d.ts.map +1 -1
- package/dist/src/services/screenshot-capture.js +142 -60
- package/dist/src/services/screenshot-capture.js.map +1 -1
- package/dist/src/services/skill-bundle/generator.js +1 -1
- package/dist/src/services/skill-bundle/generic-adapter.js +1 -1
- package/dist/src/services/skill-bundle/hermes-adapter.js +1 -1
- package/dist/src/services/storage-file-write.d.ts +36 -1
- package/dist/src/services/storage-file-write.d.ts.map +1 -1
- package/dist/src/services/storage-file-write.js +49 -3
- package/dist/src/services/storage-file-write.js.map +1 -1
- package/dist/src/services/task-outcome.d.ts +53 -0
- package/dist/src/services/task-outcome.d.ts.map +1 -0
- package/dist/src/services/task-outcome.js +28 -0
- package/dist/src/services/task-outcome.js.map +1 -0
- package/dist/src/services/workflow/engine-human.d.ts +15 -0
- package/dist/src/services/workflow/engine-human.d.ts.map +1 -1
- package/dist/src/services/workflow/engine-human.js +10 -1
- package/dist/src/services/workflow/engine-human.js.map +1 -1
- package/dist/src/services/workflow/engine-steps.d.ts +48 -3
- package/dist/src/services/workflow/engine-steps.d.ts.map +1 -1
- package/dist/src/services/workflow/engine-steps.js +361 -0
- package/dist/src/services/workflow/engine-steps.js.map +1 -1
- package/dist/src/services/workflow/engine.d.ts +1 -0
- package/dist/src/services/workflow/engine.d.ts.map +1 -1
- package/dist/src/services/workflow/engine.js +2 -1
- package/dist/src/services/workflow/engine.js.map +1 -1
- package/dist/src/services/workflow/store.d.ts.map +1 -1
- package/dist/src/services/workflow/store.js +60 -4
- package/dist/src/services/workflow/store.js.map +1 -1
- package/dist/src/services/write-guards.d.ts +27 -1
- package/dist/src/services/write-guards.d.ts.map +1 -1
- package/dist/src/services/write-guards.js +39 -9
- package/dist/src/services/write-guards.js.map +1 -1
- package/dist/src/storage/providers/postgres-kysely/db-types.d.ts +1 -0
- package/dist/src/storage/providers/postgres-kysely/db-types.d.ts.map +1 -1
- package/dist/src/storage/providers/postgres-kysely/methods/app-grants.d.ts +1 -0
- package/dist/src/storage/providers/postgres-kysely/methods/app-grants.d.ts.map +1 -1
- package/dist/src/storage/providers/postgres-kysely/methods/app-grants.js +3 -0
- package/dist/src/storage/providers/postgres-kysely/methods/app-grants.js.map +1 -1
- package/dist/src/storage/providers/postgres-kysely/methods/files.d.ts +2 -0
- package/dist/src/storage/providers/postgres-kysely/methods/files.d.ts.map +1 -1
- package/dist/src/storage/providers/postgres-kysely/methods/files.js +34 -2
- package/dist/src/storage/providers/postgres-kysely/methods/files.js.map +1 -1
- package/dist/src/storage/providers/postgres-kysely/methods/wallet.d.ts.map +1 -1
- package/dist/src/storage/providers/postgres-kysely/methods/wallet.js +23 -4
- package/dist/src/storage/providers/postgres-kysely/methods/wallet.js.map +1 -1
- package/dist/src/storage/providers/postgres-kysely/migrations/0039_storage_file_utf8_verified.sql +19 -0
- package/dist/src/storage/providers/sqlite/index.d.ts.map +1 -1
- package/dist/src/storage/providers/sqlite/index.js +2 -1
- package/dist/src/storage/providers/sqlite/index.js.map +1 -1
- package/dist/src/storage/providers/sqlite/methods/apps.d.ts +1 -0
- package/dist/src/storage/providers/sqlite/methods/apps.d.ts.map +1 -1
- package/dist/src/storage/providers/sqlite/methods/apps.js +33 -28
- package/dist/src/storage/providers/sqlite/methods/apps.js.map +1 -1
- package/dist/src/storage/providers/sqlite/methods/identity-nodes.d.ts +1 -12
- package/dist/src/storage/providers/sqlite/methods/identity-nodes.d.ts.map +1 -1
- package/dist/src/storage/providers/sqlite/methods/identity-nodes.js +28 -135
- package/dist/src/storage/providers/sqlite/methods/identity-nodes.js.map +1 -1
- package/dist/src/storage/providers/sqlite/methods/storage-files.d.ts +38 -0
- package/dist/src/storage/providers/sqlite/methods/storage-files.d.ts.map +1 -0
- package/dist/src/storage/providers/sqlite/methods/storage-files.js +109 -0
- package/dist/src/storage/providers/sqlite/methods/storage-files.js.map +1 -0
- package/dist/src/storage/providers/sqlite/methods/work.d.ts +5 -0
- package/dist/src/storage/providers/sqlite/methods/work.d.ts.map +1 -1
- package/dist/src/storage/providers/sqlite/methods/work.js +34 -22
- package/dist/src/storage/providers/sqlite/methods/work.js.map +1 -1
- package/dist/src/storage/providers/sqlite/schema.d.ts.map +1 -1
- package/dist/src/storage/providers/sqlite/schema.js +134 -130
- package/dist/src/storage/providers/sqlite/schema.js.map +1 -1
- package/dist/src/storage/repositories/app-grant.repository.d.ts +11 -0
- package/dist/src/storage/repositories/app-grant.repository.d.ts.map +1 -1
- package/dist/src/storage/repositories/file.repository.d.ts +13 -0
- package/dist/src/storage/repositories/file.repository.d.ts.map +1 -1
- package/dist/src/storage/types/commerce.d.ts +6 -0
- package/dist/src/storage/types/commerce.d.ts.map +1 -1
- package/dist/src/utils/agent-footer.d.ts.map +1 -1
- package/dist/src/utils/agent-footer.js +1 -0
- package/dist/src/utils/agent-footer.js.map +1 -1
- package/dist/src/utils/app-content-type.d.ts +57 -3
- package/dist/src/utils/app-content-type.d.ts.map +1 -1
- package/dist/src/utils/app-content-type.js +81 -12
- package/dist/src/utils/app-content-type.js.map +1 -1
- package/dist/src/utils/env-config/sections-features.d.ts.map +1 -1
- package/dist/src/utils/env-config/sections-features.js +9 -3
- package/dist/src/utils/env-config/sections-features.js.map +1 -1
- package/dist/src/utils/file-download-headers.d.ts +5 -3
- package/dist/src/utils/file-download-headers.d.ts.map +1 -1
- package/dist/src/utils/file-download-headers.js +18 -5
- package/dist/src/utils/file-download-headers.js.map +1 -1
- package/dist/src/utils/http-range.d.ts +151 -0
- package/dist/src/utils/http-range.d.ts.map +1 -0
- package/dist/src/utils/http-range.js +190 -0
- package/dist/src/utils/http-range.js.map +1 -0
- package/dist/src/utils/page-head.d.ts +5 -0
- package/dist/src/utils/page-head.d.ts.map +1 -1
- package/dist/src/utils/page-head.js +10 -1
- package/dist/src/utils/page-head.js.map +1 -1
- package/dist/src/utils/reserved-keys.d.ts +4 -1
- package/dist/src/utils/reserved-keys.d.ts.map +1 -1
- package/dist/src/utils/reserved-keys.js +4 -1
- package/dist/src/utils/reserved-keys.js.map +1 -1
- package/dist/static/sdk-libs/datapackage/index.js +336 -0
- package/dist/static/sdk-libs/dist/aimeat-datapackage.js +305 -0
- package/package.json +10 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"install.js","sourceRoot":"","sources":["../../../../src/routes/instances/install.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"install.js","sourceRoot":"","sources":["../../../../src/routes/instances/install.ts"],"names":[],"mappings":"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"}
|
package/dist/src/routes/libs.js
CHANGED
|
@@ -163,7 +163,7 @@ import { buildLibsCatalogue } from '../data/library-packs.js';
|
|
|
163
163
|
const SDK_LIB_NAMES = [
|
|
164
164
|
'speech', 'data', 'wallet', 'ai', 'capabilities', 'agents', 'agentface', 'intake', 'organism',
|
|
165
165
|
'workflows', 'header', 'editor', 'live', 'storage', 'social', 'work', 'commerce', 'exchange',
|
|
166
|
-
'webmcp', 'markdown', 'audio', 'tunnel', 'game', 'iam', 'connect',
|
|
166
|
+
'webmcp', 'markdown', 'audio', 'tunnel', 'game', 'iam', 'connect', 'datapackage',
|
|
167
167
|
];
|
|
168
168
|
function sendJavascriptLibrary(res, source) {
|
|
169
169
|
res.set('Cache-Control', 'no-store');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"libs.js","sourceRoot":"","sources":["../../../src/routes/libs.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyJG;AACH,OAAO,EAAE,MAAM,EAAiB,MAAM,SAAS,CAAC;AAGhD,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACjF,OAAO,EAAE,uBAAuB,EAAE,MAAM,+BAA+B,CAAC;AACxE,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAE9D,qGAAqG;AACrG,mGAAmG;AACnG,mGAAmG;AACnG,uGAAuG;AACvG,MAAM,aAAa,GAAG;IACpB,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,cAAc,EAAE,QAAQ,EAAE,WAAW,EAAE,QAAQ,EAAE,UAAU;IAC7F,WAAW,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU;IAC5F,QAAQ,EAAE,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS;
|
|
1
|
+
{"version":3,"file":"libs.js","sourceRoot":"","sources":["../../../src/routes/libs.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file src/routes/llm-proxy.ts
|
|
3
|
+
* @description An OpenAI-compatible door in front of the node's own AI decisions, so an agent that
|
|
4
|
+
* speaks that dialect spends money under the same rules as everything else here.
|
|
5
|
+
*
|
|
6
|
+
* WHY THIS EXISTS. The built-in chat runs on goose, and goose talks to a model provider directly.
|
|
7
|
+
* Its provider key is process-wide, so every person's turn would arrive on the node's key with
|
|
8
|
+
* nothing between them and it: no allowance, no daily budget, no per-app quota, no usage record,
|
|
9
|
+
* no free-model fallback when the allowance runs out. This route is that something. Point the
|
|
10
|
+
* agent's provider at it and every turn goes through the same gate `/v1/ai/complete` goes through.
|
|
11
|
+
*
|
|
12
|
+
* IT DECIDES NOTHING ITSELF. Which pocket pays, which model answers, whether the allowance is
|
|
13
|
+
* spent and a free model has to answer instead of a refusal: `prepareAiCall` decides all of it,
|
|
14
|
+
* and `settleAiCall` records what happened. This file translates between OpenAI's request shape
|
|
15
|
+
* and those two, and moves bytes. A second copy of the key choice or the budget test is exactly
|
|
16
|
+
* the defect this is built to prevent.
|
|
17
|
+
*
|
|
18
|
+
* THE MODEL IS THE NODE'S CHOICE, NOT THE CALLER'S. A caller naming a model is asking the node to
|
|
19
|
+
* spend on it, and the node is the one that knows whose money this is and how much is left. The
|
|
20
|
+
* owner's own preference decides, then the node's default for the role — the same order every
|
|
21
|
+
* other AI surface uses — and the answer says which model actually ran. Honouring the caller's
|
|
22
|
+
* name instead would also disable the free-model fallback, because an explicit model is
|
|
23
|
+
* deliberately left alone by `prepareAiCall`.
|
|
24
|
+
* @structure
|
|
25
|
+
* - llmProxyRouter(config, storage) — POST /v1/llm/chat/completions, GET /v1/llm/models
|
|
26
|
+
* @usage mounted in server-bootstrap/routes-loader.ts; an agent uses <node>/v1/llm as its base URL
|
|
27
|
+
* @version-history
|
|
28
|
+
* v1.0.0 — 2026-08-16 — Initial.
|
|
29
|
+
*/
|
|
30
|
+
import { Router } from 'express';
|
|
31
|
+
import type { AimeatConfig } from '../config.js';
|
|
32
|
+
import type { Storage } from '../storage/interface.js';
|
|
33
|
+
export declare function llmProxyRouter(config: AimeatConfig, storage: Storage): Router;
|
|
34
|
+
//# sourceMappingURL=llm-proxy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"llm-proxy.d.ts","sourceRoot":"","sources":["../../../src/routes/llm-proxy.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,OAAO,EAAE,MAAM,EAA+B,MAAM,SAAS,CAAC;AAC9D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AA2BvD,wBAAgB,cAAc,CAAC,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,OAAO,GAAG,MAAM,CAuH7E"}
|
|
@@ -0,0 +1,258 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file src/routes/llm-proxy.ts
|
|
3
|
+
* @description An OpenAI-compatible door in front of the node's own AI decisions, so an agent that
|
|
4
|
+
* speaks that dialect spends money under the same rules as everything else here.
|
|
5
|
+
*
|
|
6
|
+
* WHY THIS EXISTS. The built-in chat runs on goose, and goose talks to a model provider directly.
|
|
7
|
+
* Its provider key is process-wide, so every person's turn would arrive on the node's key with
|
|
8
|
+
* nothing between them and it: no allowance, no daily budget, no per-app quota, no usage record,
|
|
9
|
+
* no free-model fallback when the allowance runs out. This route is that something. Point the
|
|
10
|
+
* agent's provider at it and every turn goes through the same gate `/v1/ai/complete` goes through.
|
|
11
|
+
*
|
|
12
|
+
* IT DECIDES NOTHING ITSELF. Which pocket pays, which model answers, whether the allowance is
|
|
13
|
+
* spent and a free model has to answer instead of a refusal: `prepareAiCall` decides all of it,
|
|
14
|
+
* and `settleAiCall` records what happened. This file translates between OpenAI's request shape
|
|
15
|
+
* and those two, and moves bytes. A second copy of the key choice or the budget test is exactly
|
|
16
|
+
* the defect this is built to prevent.
|
|
17
|
+
*
|
|
18
|
+
* THE MODEL IS THE NODE'S CHOICE, NOT THE CALLER'S. A caller naming a model is asking the node to
|
|
19
|
+
* spend on it, and the node is the one that knows whose money this is and how much is left. The
|
|
20
|
+
* owner's own preference decides, then the node's default for the role — the same order every
|
|
21
|
+
* other AI surface uses — and the answer says which model actually ran. Honouring the caller's
|
|
22
|
+
* name instead would also disable the free-model fallback, because an explicit model is
|
|
23
|
+
* deliberately left alone by `prepareAiCall`.
|
|
24
|
+
* @structure
|
|
25
|
+
* - llmProxyRouter(config, storage) — POST /v1/llm/chat/completions, GET /v1/llm/models
|
|
26
|
+
* @usage mounted in server-bootstrap/routes-loader.ts; an agent uses <node>/v1/llm as its base URL
|
|
27
|
+
* @version-history
|
|
28
|
+
* v1.0.0 — 2026-08-16 — Initial.
|
|
29
|
+
*/
|
|
30
|
+
import { Router } from 'express';
|
|
31
|
+
import { requireAuth, requireScope } from '../auth/middleware.js';
|
|
32
|
+
import { rateLimit } from '../middleware/rate-limit.js';
|
|
33
|
+
import { assertAiUseAllowed } from '../auth/ai-gate.js';
|
|
34
|
+
import { error } from '../middleware/envelope.js';
|
|
35
|
+
import { resolveIdentity } from '../utils/gaii.js';
|
|
36
|
+
import { prepareAiCall, settleAiCall, estimateCostUsd, AiCompletionError, } from '../services/ai-completion.js';
|
|
37
|
+
import { chatCompletionRaw, listModels } from '../services/openrouter.js';
|
|
38
|
+
import { logger } from '../utils/logger.js';
|
|
39
|
+
/** A turn can take minutes when the model is reasoning; the default socket timeout is not enough. */
|
|
40
|
+
const TURN_TIMEOUT_MS = 10 * 60_000;
|
|
41
|
+
export function llmProxyRouter(config, storage) {
|
|
42
|
+
const router = Router();
|
|
43
|
+
// The same ceiling the other AI doors run under. A proxy without one is the cheapest way to
|
|
44
|
+
// spend an operator's money, and it reads the same operator setting as /v1/ai/complete.
|
|
45
|
+
const aiRateLimit = rateLimit(config.rateLimits.openrouter);
|
|
46
|
+
/**
|
|
47
|
+
* GET /v1/llm/models — the models this node will actually run.
|
|
48
|
+
*
|
|
49
|
+
* An OpenAI-shaped client asks this before it asks for anything else. The list comes from the
|
|
50
|
+
* provider through the same service the model pickers use, so a model that appears here is one
|
|
51
|
+
* the node can genuinely reach.
|
|
52
|
+
*/
|
|
53
|
+
router.get('/v1/llm/models', requireAuth(), requireScope('ai:use'), aiRateLimit, async (req, res) => {
|
|
54
|
+
if (!assertAiUseAllowed(req, res, config.nodeId))
|
|
55
|
+
return;
|
|
56
|
+
const gaii = resolveIdentity(req.auth, config.nodeId);
|
|
57
|
+
try {
|
|
58
|
+
const plan = await prepareAiCall(storage, config, gaii, { appId: 'llm-proxy' });
|
|
59
|
+
const models = await listModels(plan.key, plan.baseUrl, 'chat');
|
|
60
|
+
// OpenAI's shape, because that is what a client asking this URL parses.
|
|
61
|
+
res.json({
|
|
62
|
+
object: 'list',
|
|
63
|
+
data: models.map((m) => ({ id: m.id, object: 'model', owned_by: plan.provider })),
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
catch (err) {
|
|
67
|
+
sendError(res, config.nodeId, err);
|
|
68
|
+
}
|
|
69
|
+
});
|
|
70
|
+
/**
|
|
71
|
+
* POST /v1/llm/chat/completions — one completion, streamed or whole.
|
|
72
|
+
*
|
|
73
|
+
* `requireScope('ai:use')` sits in the middleware chain and `assertAiUseAllowed` runs in the
|
|
74
|
+
* handler, and they are not redundant: owner sessions bypass scopes entirely, so the middleware
|
|
75
|
+
* alone would let a mirrored agent token through, and the in-handler test alone is invisible to
|
|
76
|
+
* the route-authorization gate. Together they admit exactly one set of callers.
|
|
77
|
+
*
|
|
78
|
+
* The gate runs before the provider is touched and the accounting runs after it answers, which
|
|
79
|
+
* is the order that matters: a call that was refused must never have been paid for, and a call
|
|
80
|
+
* that was paid for must never go unrecorded.
|
|
81
|
+
*/
|
|
82
|
+
router.post('/v1/llm/chat/completions', requireAuth(), requireScope('ai:use'), aiRateLimit, async (req, res) => {
|
|
83
|
+
if (!assertAiUseAllowed(req, res, config.nodeId))
|
|
84
|
+
return;
|
|
85
|
+
const gaii = resolveIdentity(req.auth, config.nodeId);
|
|
86
|
+
const body = (req.body ?? {});
|
|
87
|
+
if (!Array.isArray(body.messages) || body.messages.length === 0) {
|
|
88
|
+
res.status(400).json(error(config.nodeId, 'INVALID_BODY', 'messages is required.'));
|
|
89
|
+
return;
|
|
90
|
+
}
|
|
91
|
+
let plan;
|
|
92
|
+
try {
|
|
93
|
+
// `model` is deliberately not passed through: see the file header. The node decides.
|
|
94
|
+
plan = await prepareAiCall(storage, config, gaii, { appId: 'llm-proxy' });
|
|
95
|
+
}
|
|
96
|
+
catch (err) {
|
|
97
|
+
sendError(res, config.nodeId, err);
|
|
98
|
+
return;
|
|
99
|
+
}
|
|
100
|
+
const upstream = {
|
|
101
|
+
model: plan.model,
|
|
102
|
+
messages: body.messages,
|
|
103
|
+
...(body.temperature !== undefined ? { temperature: body.temperature } : {}),
|
|
104
|
+
...(body.top_p !== undefined ? { top_p: body.top_p } : {}),
|
|
105
|
+
...(body.max_tokens !== undefined ? { max_tokens: body.max_tokens } : {}),
|
|
106
|
+
// Tool calling is the whole point for an agent: passed through untouched, because the
|
|
107
|
+
// node has no opinion about which tools a caller offers its own model.
|
|
108
|
+
...(body.tools !== undefined ? { tools: body.tools } : {}),
|
|
109
|
+
...(body.tool_choice !== undefined ? { tool_choice: body.tool_choice } : {}),
|
|
110
|
+
...(body.response_format !== undefined ? { response_format: body.response_format } : {}),
|
|
111
|
+
...(body.stream ? { stream: true, stream_options: { include_usage: true } } : {}),
|
|
112
|
+
};
|
|
113
|
+
req.setTimeout(TURN_TIMEOUT_MS);
|
|
114
|
+
res.setTimeout(TURN_TIMEOUT_MS);
|
|
115
|
+
const controller = new AbortController();
|
|
116
|
+
req.on('close', () => controller.abort());
|
|
117
|
+
let provider;
|
|
118
|
+
try {
|
|
119
|
+
// Through the openrouter service, never straight out of this file. That file is the
|
|
120
|
+
// node's only HTTP transport to a model provider, checked by `pnpm check:llm-transport`,
|
|
121
|
+
// and a second place speaking to a provider is a second place that can forget to meter.
|
|
122
|
+
provider = await chatCompletionRaw(plan.key, plan.baseUrl, upstream, controller.signal);
|
|
123
|
+
}
|
|
124
|
+
catch (err) {
|
|
125
|
+
sendError(res, config.nodeId, new AiCompletionError('PROVIDER_ERROR', 502, err.message));
|
|
126
|
+
return;
|
|
127
|
+
}
|
|
128
|
+
if (!provider.ok) {
|
|
129
|
+
// eslint-disable-next-line aimeat/no-silent-catch -- the body only enriches an error already being reported; an unreadable one is honestly reported as empty
|
|
130
|
+
const detail = await provider.text().catch(() => '');
|
|
131
|
+
sendError(res, config.nodeId, providerFailure(provider.status, detail));
|
|
132
|
+
return;
|
|
133
|
+
}
|
|
134
|
+
try {
|
|
135
|
+
const outcome = body.stream
|
|
136
|
+
? await pipeStream(provider, res, plan)
|
|
137
|
+
: await passWhole(provider, res, plan);
|
|
138
|
+
await settleAiCall(storage, config, gaii, plan, {
|
|
139
|
+
...outcome, appId: 'llm-proxy', source: 'llm-proxy',
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
catch (err) {
|
|
143
|
+
// The provider may already have written half an answer, so there is nothing to send but
|
|
144
|
+
// the log line. Never swallowed: an operator seeing this knows a turn was spent and not
|
|
145
|
+
// recorded, which is the one bookkeeping failure that matters.
|
|
146
|
+
logger.warn(`[llm-proxy] ${gaii}: ${err.message}`);
|
|
147
|
+
if (!res.headersSent)
|
|
148
|
+
sendError(res, config.nodeId, err);
|
|
149
|
+
else
|
|
150
|
+
res.end();
|
|
151
|
+
}
|
|
152
|
+
});
|
|
153
|
+
return router;
|
|
154
|
+
}
|
|
155
|
+
/** A provider status turned into the node's own vocabulary, so a caller sees a named cause. */
|
|
156
|
+
function providerFailure(status, detail) {
|
|
157
|
+
const short = detail.slice(0, 300);
|
|
158
|
+
if (status === 401 || status === 403) {
|
|
159
|
+
return new AiCompletionError('INVALID_API_KEY', 401, `The provider rejected the key. ${short}`);
|
|
160
|
+
}
|
|
161
|
+
if (status === 429) {
|
|
162
|
+
// The one a free model hits first: the free tier's request ceiling depends on what the
|
|
163
|
+
// account has bought, so this is a quota answer and not a fault in the request.
|
|
164
|
+
return new AiCompletionError('RATE_LIMITED', 429, `The model is rate limited right now. Free models hit this first. ${short}`);
|
|
165
|
+
}
|
|
166
|
+
if (status === 502 || status === 503) {
|
|
167
|
+
return new AiCompletionError('PROVIDER_ERROR', 502, `The model is overloaded or unavailable. ${short}`);
|
|
168
|
+
}
|
|
169
|
+
return new AiCompletionError('PROVIDER_ERROR', 502, `The provider answered ${status}. ${short}`);
|
|
170
|
+
}
|
|
171
|
+
/** Send whatever went wrong in the node's envelope, with its own code. */
|
|
172
|
+
function sendError(res, nodeId, err) {
|
|
173
|
+
const e = err;
|
|
174
|
+
const status = typeof e?.status === 'number' ? e.status : 500;
|
|
175
|
+
const code = typeof e?.code === 'string' ? e.code : 'INTERNAL_ERROR';
|
|
176
|
+
res.status(status).json(error(nodeId, code, e?.message || 'The completion failed.'));
|
|
177
|
+
}
|
|
178
|
+
/** Whole-response: hand it on unchanged, and read the accounting out of it. */
|
|
179
|
+
async function passWhole(provider, res, plan) {
|
|
180
|
+
const json = await provider.json();
|
|
181
|
+
res.json(json);
|
|
182
|
+
return readUsage(json.model ?? plan.model, json.choices?.[0]?.message?.content ?? '', json.usage);
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* Streamed: the provider's own frames, byte for byte, while the text and the usage are read out of
|
|
186
|
+
* them on the way past.
|
|
187
|
+
*
|
|
188
|
+
* The frames are not rewritten. A client that understands OpenAI's stream understands this one, and
|
|
189
|
+
* anything the node invented in the middle would be a second dialect to keep in step.
|
|
190
|
+
*/
|
|
191
|
+
async function pipeStream(provider, res, plan) {
|
|
192
|
+
res.writeHead(200, {
|
|
193
|
+
'Content-Type': 'text/event-stream',
|
|
194
|
+
'Cache-Control': 'no-cache',
|
|
195
|
+
'Connection': 'keep-alive',
|
|
196
|
+
'X-Accel-Buffering': 'no',
|
|
197
|
+
});
|
|
198
|
+
const reader = provider.body?.getReader();
|
|
199
|
+
if (!reader)
|
|
200
|
+
throw new AiCompletionError('PROVIDER_ERROR', 502, 'The provider sent no body.');
|
|
201
|
+
const decoder = new TextDecoder();
|
|
202
|
+
let buffer = '';
|
|
203
|
+
let content = '';
|
|
204
|
+
let model = plan.model;
|
|
205
|
+
let usage;
|
|
206
|
+
for (;;) {
|
|
207
|
+
const { done, value } = await reader.read();
|
|
208
|
+
if (done)
|
|
209
|
+
break;
|
|
210
|
+
const chunk = decoder.decode(value, { stream: true });
|
|
211
|
+
res.write(chunk);
|
|
212
|
+
res.flush?.();
|
|
213
|
+
buffer += chunk;
|
|
214
|
+
let cut;
|
|
215
|
+
while ((cut = buffer.indexOf('\n\n')) !== -1) {
|
|
216
|
+
const frame = buffer.slice(0, cut);
|
|
217
|
+
buffer = buffer.slice(cut + 2);
|
|
218
|
+
for (const line of frame.split('\n')) {
|
|
219
|
+
if (!line.startsWith('data:'))
|
|
220
|
+
continue;
|
|
221
|
+
const payload = line.slice(5).trim();
|
|
222
|
+
if (!payload || payload === '[DONE]')
|
|
223
|
+
continue;
|
|
224
|
+
let parsed;
|
|
225
|
+
try {
|
|
226
|
+
parsed = JSON.parse(payload);
|
|
227
|
+
}
|
|
228
|
+
catch (err) {
|
|
229
|
+
// The frame was already forwarded verbatim above, so the client is unaffected;
|
|
230
|
+
// only the node's own reading of it failed, and only the accounting depends on
|
|
231
|
+
// that. Said out loud rather than dropped.
|
|
232
|
+
logger.warn(`[llm-proxy] unreadable frame: ${err.message}`);
|
|
233
|
+
continue;
|
|
234
|
+
}
|
|
235
|
+
if (parsed.model)
|
|
236
|
+
model = parsed.model;
|
|
237
|
+
const delta = parsed.choices?.[0]?.delta?.content;
|
|
238
|
+
if (typeof delta === 'string')
|
|
239
|
+
content += delta;
|
|
240
|
+
// OpenRouter puts the totals in the last frame when include_usage is set, which is
|
|
241
|
+
// why it is set: without it the node would have to guess what the turn cost.
|
|
242
|
+
if (parsed.usage)
|
|
243
|
+
usage = parsed.usage;
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
res.end();
|
|
248
|
+
return readUsage(model, content, usage);
|
|
249
|
+
}
|
|
250
|
+
/** Tokens and cost, with the same estimate the rest of the node falls back to. */
|
|
251
|
+
function readUsage(model, content, usage) {
|
|
252
|
+
const promptTokens = usage?.prompt_tokens ?? 0;
|
|
253
|
+
const completionTokens = usage?.completion_tokens ?? 0;
|
|
254
|
+
const totalTokens = usage?.total_tokens ?? (promptTokens + completionTokens);
|
|
255
|
+
const costUsd = typeof usage?.cost === 'number' ? usage.cost : estimateCostUsd(promptTokens, completionTokens);
|
|
256
|
+
return { model, content, promptTokens, completionTokens, totalTokens, costUsd };
|
|
257
|
+
}
|
|
258
|
+
//# sourceMappingURL=llm-proxy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"llm-proxy.js","sourceRoot":"","sources":["../../../src/routes/llm-proxy.ts"],"names":[],"mappings":"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"}
|
|
@@ -56,7 +56,7 @@ ${sub(page.markdown ?? page.description)}
|
|
|
56
56
|
## Sitemap
|
|
57
57
|
|
|
58
58
|
${siteMap}
|
|
59
|
-
- [Full manual](${b}/llms.txt) · [Glossary](${b}/v1/glossary.md) · [API contract](${b}/v1/spec)
|
|
59
|
+
- [Full manual](${b}/llms-full.txt) · [Glossary](${b}/v1/glossary.md) · [API contract](${b}/v1/spec)
|
|
60
60
|
- [AI transparency](${b}/v1/ai-transparency.md) — how this node marks content a model wrote
|
|
61
61
|
`;
|
|
62
62
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"markdown-mirrors.js","sourceRoot":"","sources":["../../../src/routes/markdown-mirrors.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAGjC,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACtE,OAAO,EAAE,YAAY,EAAE,MAAM,qCAAqC,CAAC;AACnE,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAE3C,2FAA2F;AAC3F,MAAM,UAAU,UAAU,CAAC,IAAgB;IACzC,OAAO,IAAI,CAAC,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,KAAK,CAAC;AAC7D,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,kBAAkB,CAAC,IAAgB,EAAE,MAAoB;IACvE,MAAM,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IAC5C,MAAM,GAAG,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,aAAa,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;IACpG,MAAM,OAAO,GAAG,YAAY,EAAE;SAC3B,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC;SACnC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,KAAK,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC;SAC3C,IAAI,CAAC,IAAI,CAAC,CAAC;IAEd,OAAO;SACA,IAAI,CAAC,KAAK;eACJ,IAAI,CAAC,WAAW;OACxB,CAAC,GAAG,IAAI,CAAC,IAAI;QACZ,MAAM,CAAC,MAAM;;;IAGjB,IAAI,CAAC,KAAK;;EAEZ,GAAG,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,WAAW,CAAC;;;;EAItC,OAAO;kBACS,CAAC,
|
|
1
|
+
{"version":3,"file":"markdown-mirrors.js","sourceRoot":"","sources":["../../../src/routes/markdown-mirrors.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAGjC,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACtE,OAAO,EAAE,YAAY,EAAE,MAAM,qCAAqC,CAAC;AACnE,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAE3C,2FAA2F;AAC3F,MAAM,UAAU,UAAU,CAAC,IAAgB;IACzC,OAAO,IAAI,CAAC,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,KAAK,CAAC;AAC7D,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,kBAAkB,CAAC,IAAgB,EAAE,MAAoB;IACvE,MAAM,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IAC5C,MAAM,GAAG,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,aAAa,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;IACpG,MAAM,OAAO,GAAG,YAAY,EAAE;SAC3B,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC;SACnC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,KAAK,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC;SAC3C,IAAI,CAAC,IAAI,CAAC,CAAC;IAEd,OAAO;SACA,IAAI,CAAC,KAAK;eACJ,IAAI,CAAC,WAAW;OACxB,CAAC,GAAG,IAAI,CAAC,IAAI;QACZ,MAAM,CAAC,MAAM;;;IAGjB,IAAI,CAAC,KAAK;;EAEZ,GAAG,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,WAAW,CAAC;;;;EAItC,OAAO;kBACS,CAAC,gCAAgC,CAAC,qCAAqC,CAAC;sBACpE,CAAC;CACtB,CAAC;AACF,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,MAAoB;IACxD,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC;IAExB,KAAK,MAAM,IAAI,IAAI,aAAa,EAAE,EAAE,CAAC;QACnC,4FAA4F;QAC5F,0FAA0F;QAC1F,8EAA8E;QAC9E,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;QAC7E,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE;YACxC,uFAAuF;YACvF,mEAAmE;YACnE,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,IAAI,oBAAoB,CAAC,CAAC;YACvF,GAAG,CAAC,GAAG,CAAC,6BAA6B,EAAE,GAAG,CAAC,CAAC;YAC5C,YAAY,CAAC,GAAG,EAAE,kBAAkB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;QACtD,CAAC,CAAC,CAAC;IACL,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file src/routes/odata.ts
|
|
3
|
+
* @description The OData v4 feed for a data package — the surface Excel, Power BI and Tableau
|
|
4
|
+
* connect to natively and then REFRESH BY THEMSELVES.
|
|
5
|
+
*
|
|
6
|
+
* WHY THIS IS A CORE ROUTE. It was measured before it was written: an extension cannot serve this.
|
|
7
|
+
* The whole extension HTTP surface is two POST routes behind requireAuth, the sandbox is handed
|
|
8
|
+
* `req.body` and never the query string, and the answer is wrapped in the node's success envelope.
|
|
9
|
+
* OData needs GET, needs `$filter` and friends off the query string, needs XML for `$metadata` and
|
|
10
|
+
* needs an unwrapped JSON body with `@odata.context`. Four of those are impossible there, so the
|
|
11
|
+
* feed lives here — and this file stays a projection: the CSDL and the query language are
|
|
12
|
+
* services/datapackage/odata.ts, the bytes are the same ones the CSV address serves.
|
|
13
|
+
*
|
|
14
|
+
* IT IS AS OPEN AS THE BYTES IT SERVES, AND NO MORE. A published package's CSV is world-readable
|
|
15
|
+
* at a permanent address, so a feed over the same rows is world-readable too. Putting a token in
|
|
16
|
+
* front of the feed while the CSV stays public would be theatre, not a control.
|
|
17
|
+
*
|
|
18
|
+
* NOT METERED, AND SAYING SO. The design note for this target wants each feed request to be a
|
|
19
|
+
* billable event, and that is genuinely attractive — a downloaded file escapes measurement the
|
|
20
|
+
* moment it lands, and a feed does not. But metering needs an authenticated caller and an
|
|
21
|
+
* entitlement coordinate, which is a different door from this one, and a half-built meter that
|
|
22
|
+
* counted anonymous reads as free would misreport rather than under-report. So: no meter here, and
|
|
23
|
+
* the paid feed is a separate authenticated surface when it is built.
|
|
24
|
+
* @structure
|
|
25
|
+
* - GET /v1/odata/:owner/:name the service document
|
|
26
|
+
* - GET /v1/odata/:owner/:name/$metadata CSDL XML
|
|
27
|
+
* - GET /v1/odata/:owner/:name/:resource the entity set
|
|
28
|
+
* @usage app.use(odataRouter(config, storage))
|
|
29
|
+
* @version-history
|
|
30
|
+
* v1.0.0 -- 2026-08-15 -- Initial (TARGET-063 vaihe 1, the OData surface).
|
|
31
|
+
*/
|
|
32
|
+
import { Router } from 'express';
|
|
33
|
+
import type { AimeatConfig } from '../config.js';
|
|
34
|
+
import type { Storage } from '../storage/interface.js';
|
|
35
|
+
export declare function odataRouter(config: AimeatConfig, storage: Storage): Router;
|
|
36
|
+
//# sourceMappingURL=odata.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"odata.d.ts","sourceRoot":"","sources":["../../../src/routes/odata.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAEjC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAuBvD,wBAAgB,WAAW,CAAC,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,OAAO,GAAG,MAAM,CAwF1E"}
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file src/routes/odata.ts
|
|
3
|
+
* @description The OData v4 feed for a data package — the surface Excel, Power BI and Tableau
|
|
4
|
+
* connect to natively and then REFRESH BY THEMSELVES.
|
|
5
|
+
*
|
|
6
|
+
* WHY THIS IS A CORE ROUTE. It was measured before it was written: an extension cannot serve this.
|
|
7
|
+
* The whole extension HTTP surface is two POST routes behind requireAuth, the sandbox is handed
|
|
8
|
+
* `req.body` and never the query string, and the answer is wrapped in the node's success envelope.
|
|
9
|
+
* OData needs GET, needs `$filter` and friends off the query string, needs XML for `$metadata` and
|
|
10
|
+
* needs an unwrapped JSON body with `@odata.context`. Four of those are impossible there, so the
|
|
11
|
+
* feed lives here — and this file stays a projection: the CSDL and the query language are
|
|
12
|
+
* services/datapackage/odata.ts, the bytes are the same ones the CSV address serves.
|
|
13
|
+
*
|
|
14
|
+
* IT IS AS OPEN AS THE BYTES IT SERVES, AND NO MORE. A published package's CSV is world-readable
|
|
15
|
+
* at a permanent address, so a feed over the same rows is world-readable too. Putting a token in
|
|
16
|
+
* front of the feed while the CSV stays public would be theatre, not a control.
|
|
17
|
+
*
|
|
18
|
+
* NOT METERED, AND SAYING SO. The design note for this target wants each feed request to be a
|
|
19
|
+
* billable event, and that is genuinely attractive — a downloaded file escapes measurement the
|
|
20
|
+
* moment it lands, and a feed does not. But metering needs an authenticated caller and an
|
|
21
|
+
* entitlement coordinate, which is a different door from this one, and a half-built meter that
|
|
22
|
+
* counted anonymous reads as free would misreport rather than under-report. So: no meter here, and
|
|
23
|
+
* the paid feed is a separate authenticated surface when it is built.
|
|
24
|
+
* @structure
|
|
25
|
+
* - GET /v1/odata/:owner/:name the service document
|
|
26
|
+
* - GET /v1/odata/:owner/:name/$metadata CSDL XML
|
|
27
|
+
* - GET /v1/odata/:owner/:name/:resource the entity set
|
|
28
|
+
* @usage app.use(odataRouter(config, storage))
|
|
29
|
+
* @version-history
|
|
30
|
+
* v1.0.0 -- 2026-08-15 -- Initial (TARGET-063 vaihe 1, the OData surface).
|
|
31
|
+
*/
|
|
32
|
+
import { Router } from 'express';
|
|
33
|
+
import { openPackage, readRows } from '../services/datapackage/store.js';
|
|
34
|
+
import { toCsdl, parseQuery, applyQuery, edmName, ODATA_SUPPORTED } from '../services/datapackage/odata.js';
|
|
35
|
+
/**
|
|
36
|
+
* OData errors have their own shape, and a client renders it. The node envelope would be a body this
|
|
37
|
+
* connector does not read, so a genuine refusal would surface in Excel as "something went wrong".
|
|
38
|
+
*/
|
|
39
|
+
function odataError(res, status, code, message) {
|
|
40
|
+
res.status(status)
|
|
41
|
+
.type('application/json;odata.metadata=minimal')
|
|
42
|
+
.send(JSON.stringify({ error: { code, message } }, null, 2));
|
|
43
|
+
}
|
|
44
|
+
/** Every OData response says which version it is, and none of them may be cached as a document: the
|
|
45
|
+
* feed follows `latest` unless a version is pinned, and a stale answer is a wrong report. */
|
|
46
|
+
function odataHeaders(res, pinned) {
|
|
47
|
+
res.setHeader('OData-Version', '4.0');
|
|
48
|
+
res.setHeader('Access-Control-Allow-Origin', '*');
|
|
49
|
+
res.setHeader('Cache-Control', pinned ? 'public, max-age=300' : 'no-cache');
|
|
50
|
+
}
|
|
51
|
+
export function odataRouter(config, storage) {
|
|
52
|
+
const router = Router();
|
|
53
|
+
const store = { storage, config };
|
|
54
|
+
/** `pkg:owner/name[@version]` from the path plus the optional `version` query parameter. */
|
|
55
|
+
const refOf = (req) => {
|
|
56
|
+
const v = typeof req.query.version === 'string' && req.query.version.trim()
|
|
57
|
+
? `@${req.query.version.trim()}` : '';
|
|
58
|
+
return `pkg:${req.params.owner}/${req.params.name}${v}`;
|
|
59
|
+
};
|
|
60
|
+
const serviceRoot = (req) => `${config.baseUrl.replace(/\/+$/, '')}/v1/odata/${encodeURIComponent(req.params.owner)}`
|
|
61
|
+
+ `/${encodeURIComponent(req.params.name)}`;
|
|
62
|
+
/** The service document: which entity sets this feed offers. What Excel reads first. */
|
|
63
|
+
router.get('/v1/odata/:owner/:name', async (req, res) => {
|
|
64
|
+
const opened = await openPackage(store, refOf(req), config.nodeId);
|
|
65
|
+
if (!opened) {
|
|
66
|
+
odataError(res, 404, 'NotFound', `No such data package: ${refOf(req)}`);
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
odataHeaders(res, !!req.query.version);
|
|
70
|
+
res.type('application/json;odata.metadata=minimal').send(JSON.stringify({
|
|
71
|
+
'@odata.context': `${serviceRoot(req)}/$metadata`,
|
|
72
|
+
value: opened.descriptor.resources.map(r => ({
|
|
73
|
+
name: edmName(r.name), kind: 'EntitySet', url: edmName(r.name),
|
|
74
|
+
})),
|
|
75
|
+
}, null, 2));
|
|
76
|
+
});
|
|
77
|
+
/**
|
|
78
|
+
* CSDL. XML, not JSON, because that is what the v4 metadata document is and what every native
|
|
79
|
+
* connector parses — a JSON approximation here would fail inside Excel with no useful message.
|
|
80
|
+
*/
|
|
81
|
+
router.get('/v1/odata/:owner/:name/\\$metadata', async (req, res) => {
|
|
82
|
+
const opened = await openPackage(store, refOf(req), config.nodeId);
|
|
83
|
+
if (!opened) {
|
|
84
|
+
odataError(res, 404, 'NotFound', `No such data package: ${refOf(req)}`);
|
|
85
|
+
return;
|
|
86
|
+
}
|
|
87
|
+
odataHeaders(res, !!req.query.version);
|
|
88
|
+
res.type('application/xml; charset=utf-8')
|
|
89
|
+
.send(toCsdl(opened.descriptor, namespaceFor(opened.descriptor)));
|
|
90
|
+
});
|
|
91
|
+
/** One entity set: the rows, with the readable subset of the query language applied. */
|
|
92
|
+
router.get('/v1/odata/:owner/:name/:resource', async (req, res) => {
|
|
93
|
+
const ref = refOf(req);
|
|
94
|
+
const opened = await openPackage(store, ref, config.nodeId);
|
|
95
|
+
if (!opened) {
|
|
96
|
+
odataError(res, 404, 'NotFound', `No such data package: ${ref}`);
|
|
97
|
+
return;
|
|
98
|
+
}
|
|
99
|
+
// The client addresses the set by the name the METADATA published, which may differ from the
|
|
100
|
+
// descriptor's own field-legal-but-not-CSDL-legal name.
|
|
101
|
+
const resource = opened.descriptor.resources.find(r => edmName(r.name) === req.params.resource);
|
|
102
|
+
if (!resource) {
|
|
103
|
+
odataError(res, 404, 'NotFound', `No entity set "${req.params.resource}". This feed offers: `
|
|
104
|
+
+ opened.descriptor.resources.map(r => edmName(r.name)).join(', '));
|
|
105
|
+
return;
|
|
106
|
+
}
|
|
107
|
+
const parsed = parseQuery(new URLSearchParams(req.url.split('?')[1] ?? ''), resource.schema);
|
|
108
|
+
if (!parsed.ok) {
|
|
109
|
+
// 501 for "this feed does not do that", 400 for "you asked for something that is not
|
|
110
|
+
// there". Both are refusals; neither quietly returns the unfiltered set.
|
|
111
|
+
odataError(res, parsed.code === 'NOT_IMPLEMENTED' ? 501 : 400, parsed.code === 'NOT_IMPLEMENTED' ? 'NotImplemented' : 'BadRequest', parsed.message);
|
|
112
|
+
return;
|
|
113
|
+
}
|
|
114
|
+
// The whole resource is read and filtered here. That is honest for the sizes this format is
|
|
115
|
+
// built for and it is the thing to revisit first when a package outgrows it: the query is
|
|
116
|
+
// parsed into a shape a storage-side implementation could execute, so the seam already exists.
|
|
117
|
+
const all = await readRows(store, ref, config.nodeId, resource.name, { offset: 0, limit: 5000 });
|
|
118
|
+
if (!all) {
|
|
119
|
+
odataError(res, 404, 'NotFound', `Could not read ${resource.name} of ${ref}`);
|
|
120
|
+
return;
|
|
121
|
+
}
|
|
122
|
+
const page = applyQuery(all.rows, parsed.value, resource.schema);
|
|
123
|
+
odataHeaders(res, !!req.query.version);
|
|
124
|
+
const body = {
|
|
125
|
+
'@odata.context': `${serviceRoot(req)}/$metadata#${edmName(resource.name)}`,
|
|
126
|
+
...(parsed.value.count ? { '@odata.count': page.matched } : {}),
|
|
127
|
+
value: page.rows,
|
|
128
|
+
};
|
|
129
|
+
res.type('application/json;odata.metadata=minimal').send(JSON.stringify(body, null, 2));
|
|
130
|
+
});
|
|
131
|
+
/** What a caller gets for asking about a feed that does not exist as a whole. */
|
|
132
|
+
router.get('/v1/odata', (_req, res) => {
|
|
133
|
+
odataError(res, 400, 'BadRequest', 'An OData service root is one data package: /v1/odata/{owner}/{package}. '
|
|
134
|
+
+ `Supported query options on an entity set: ${ODATA_SUPPORTED.join(', ')}.`);
|
|
135
|
+
});
|
|
136
|
+
return router;
|
|
137
|
+
}
|
|
138
|
+
/** The CSDL namespace for one package — its own id, so two packages' metadata cannot collide in a
|
|
139
|
+
* client that has both open. */
|
|
140
|
+
function namespaceFor(d) {
|
|
141
|
+
return `AIMEAT.${d.name}`;
|
|
142
|
+
}
|
|
143
|
+
//# sourceMappingURL=odata.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"odata.js","sourceRoot":"","sources":["../../../src/routes/odata.ts"],"names":[],"mappings":"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"}
|
|
@@ -12,6 +12,10 @@
|
|
|
12
12
|
* - POST /v1/openrouter/test — test API key validity
|
|
13
13
|
* - POST /v1/openrouter/complete — run AI completion for generator step
|
|
14
14
|
* @version-history
|
|
15
|
+
* v1.9.0 — 2026-08-16 — `imageModel` persists beside the other roles, for POST /v1/ai/image. It is
|
|
16
|
+
* read through services/ai-model-defaults.ts like the rest, so an owner who sets nothing gets
|
|
17
|
+
* the node's default and a node that sets nothing refuses by name rather than handing an image
|
|
18
|
+
* request to a chat model.
|
|
15
19
|
* v1.8.0 — 2026-08-01 — Speech-to-text settings: `sttModel` + `sttLanguage` persist alongside
|
|
16
20
|
* visionModel, and GET /models takes `?modality=`. The modality is load-bearing rather than
|
|
17
21
|
* cosmetic — OpenRouter's default catalogue has no transcription models in it, so without the
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openrouter.d.ts","sourceRoot":"","sources":["../../../src/routes/openrouter.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"openrouter.d.ts","sourceRoot":"","sources":["../../../src/routes/openrouter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoDG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAEjC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAkDvD,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,OAAO,GAAG,MAAM,CAyV/E"}
|