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.
- package/dist/.env.example +58 -1
- package/dist/build-stamp.json +4 -4
- package/dist/locales/en.json +9225 -9103
- package/dist/locales/es.json +9217 -9095
- package/dist/locales/fi.json +9225 -9103
- package/dist/public/changelog.json +12 -0
- package/dist/public/css/views/admin.css +11 -0
- package/dist/public/css/views/chat.css +388 -0
- package/dist/public/css/views/profile.css +41 -0
- package/dist/public/js/services/admin.js +346 -331
- package/dist/public/js/services/chat.js +190 -0
- package/dist/public/js/services/organism-roles.js +51 -0
- package/dist/public/js/services/organisms.js +5 -25
- 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 +9 -1
- package/dist/public/views/admin/organism-ownership-tab.js +124 -0
- package/dist/public/views/admin/owners-tab.js +15 -4
- package/dist/public/views/admin/usage-tab.calls.js +120 -0
- package/dist/public/views/admin/usage-tab.js +18 -4
- package/dist/public/views/admin.js +2 -0
- 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 -296
- package/dist/public/views/profile/landing-page.cards.js +1 -0
- package/dist/public/views/profile/organisms/home.js +3 -1
- package/dist/public/views/profile/organisms/members.js +29 -4
- package/dist/public/views/profile/usage-tab.js +204 -0
- package/dist/public/views/profile.js +2 -0
- package/dist/scripts/audit-mcp-schemas.js +41 -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.js +11 -0
- package/dist/scripts/check-ai-disclosure.js.map +1 -1
- package/dist/scripts/check-commit-msg.d.ts +8 -0
- package/dist/scripts/check-commit-msg.d.ts.map +1 -0
- package/dist/scripts/check-commit-msg.js +118 -0
- package/dist/scripts/check-commit-msg.js.map +1 -0
- 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-liaison-surface.js +27 -2
- package/dist/scripts/check-liaison-surface.js.map +1 -1
- package/dist/scripts/check-locales.js +38 -0
- package/dist/scripts/check-locales.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-route-scopes.d.ts.map +1 -1
- package/dist/scripts/check-route-scopes.js +33 -4
- package/dist/scripts/check-route-scopes.js.map +1 -1
- package/dist/scripts/check-shared-implementation.js +28 -11
- package/dist/scripts/check-shared-implementation.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/check-trusted-keys.d.ts +90 -1
- package/dist/scripts/check-trusted-keys.d.ts.map +1 -1
- package/dist/scripts/check-trusted-keys.js +521 -52
- package/dist/scripts/check-trusted-keys.js.map +1 -1
- package/dist/scripts/indexnow.js +9 -7
- package/dist/scripts/indexnow.js.map +1 -1
- package/dist/src/auth/middleware.d.ts +69 -6
- package/dist/src/auth/middleware.d.ts.map +1 -1
- package/dist/src/auth/middleware.js +130 -28
- package/dist/src/auth/middleware.js.map +1 -1
- package/dist/src/cli/connect/mcp/tools/agent-tasks.d.ts +5 -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 +20 -2
- package/dist/src/cli/connect/mcp/tools/agent-tasks.js.map +1 -1
- package/dist/src/cli/connect/mcp/tools/agent-telemetry.d.ts +7 -1
- package/dist/src/cli/connect/mcp/tools/agent-telemetry.d.ts.map +1 -1
- package/dist/src/cli/connect/mcp/tools/agent-telemetry.js +24 -0
- package/dist/src/cli/connect/mcp/tools/agent-telemetry.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/mcp/tools/organisms.d.ts +2 -0
- package/dist/src/cli/connect/mcp/tools/organisms.d.ts.map +1 -1
- package/dist/src/cli/connect/mcp/tools/organisms.js +16 -0
- package/dist/src/cli/connect/mcp/tools/organisms.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 +1 -0
- package/dist/src/cli/connect/tool-call-defs-agent.d.ts.map +1 -1
- package/dist/src/cli/connect/tool-call-defs-agent.js +6 -0
- 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-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 +30 -0
- package/dist/src/cli/connect/tool-call-defs-core.js.map +1 -1
- package/dist/src/cli/connect/tool-call.d.ts.map +1 -1
- package/dist/src/cli/connect/tool-call.js +2 -0
- 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/appdev-pitfalls.d.ts +1 -0
- package/dist/src/data/appdev-pitfalls.d.ts.map +1 -1
- package/dist/src/data/appdev-pitfalls.js +11 -0
- package/dist/src/data/appdev-pitfalls.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 +2251 -102
- 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 +21 -1
- package/dist/src/index-start.js.map +1 -1
- package/dist/src/mcp/agent-tasks.d.ts +16 -0
- package/dist/src/mcp/agent-tasks.d.ts.map +1 -1
- package/dist/src/mcp/agent-tasks.js +84 -54
- package/dist/src/mcp/agent-tasks.js.map +1 -1
- package/dist/src/mcp/agent-telemetry.d.ts +6 -1
- package/dist/src/mcp/agent-telemetry.d.ts.map +1 -1
- package/dist/src/mcp/agent-telemetry.js +37 -1
- package/dist/src/mcp/agent-telemetry.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 +23 -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/agent-messaging.d.ts.map +1 -1
- package/dist/src/mcp/catalog/definitions/agent-messaging.js +18 -0
- package/dist/src/mcp/catalog/definitions/agent-messaging.js.map +1 -1
- 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 +59 -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 +96 -2
- package/dist/src/mcp/catalog/definitions/organisms-workspaces-apps.js.map +1 -1
- package/dist/src/mcp/catalog/definitions/schedules-tasks-memory.d.ts +2 -0
- package/dist/src/mcp/catalog/definitions/schedules-tasks-memory.d.ts.map +1 -1
- package/dist/src/mcp/catalog/definitions/schedules-tasks-memory.js +7 -3
- 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 +34 -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 +26 -7
- package/dist/src/mcp/catalog/surfaces.js.map +1 -1
- package/dist/src/mcp/core-admin.d.ts +7 -3
- package/dist/src/mcp/core-admin.d.ts.map +1 -1
- package/dist/src/mcp/core-admin.js +60 -3
- package/dist/src/mcp/core-admin.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 +43 -2
- package/dist/src/mcp/index.js.map +1 -1
- package/dist/src/mcp/organisms-email-invites.d.ts.map +1 -1
- package/dist/src/mcp/organisms-email-invites.js +2 -1
- package/dist/src/mcp/organisms-email-invites.js.map +1 -1
- package/dist/src/mcp/organisms-name-invites.d.ts.map +1 -1
- package/dist/src/mcp/organisms-name-invites.js +40 -1
- package/dist/src/mcp/organisms-name-invites.js.map +1 -1
- package/dist/src/mcp/organisms.d.ts.map +1 -1
- package/dist/src/mcp/organisms.js +6 -1
- package/dist/src/mcp/organisms.js.map +1 -1
- package/dist/src/mcp/tool-usage-wrap.d.ts +9 -0
- package/dist/src/mcp/tool-usage-wrap.d.ts.map +1 -0
- package/dist/src/mcp/tool-usage-wrap.js +87 -0
- package/dist/src/mcp/tool-usage-wrap.js.map +1 -0
- package/dist/src/mcp/workspaces.d.ts.map +1 -1
- package/dist/src/mcp/workspaces.js +9 -0
- package/dist/src/mcp/workspaces.js.map +1 -1
- package/dist/src/middleware/idempotency.d.ts +6 -0
- package/dist/src/middleware/idempotency.d.ts.map +1 -1
- package/dist/src/middleware/idempotency.js +23 -2
- package/dist/src/middleware/idempotency.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/webhook-schemas.d.ts +2 -2
- 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/admin-monitoring.d.ts +2 -0
- package/dist/src/routes/admin-monitoring.d.ts.map +1 -1
- package/dist/src/routes/admin-monitoring.js +32 -0
- package/dist/src/routes/admin-monitoring.js.map +1 -1
- package/dist/src/routes/admin-organisms.d.ts +28 -0
- package/dist/src/routes/admin-organisms.d.ts.map +1 -0
- package/dist/src/routes/admin-organisms.js +99 -0
- package/dist/src/routes/admin-organisms.js.map +1 -0
- package/dist/src/routes/admin-usage.d.ts +33 -0
- package/dist/src/routes/admin-usage.d.ts.map +1 -0
- package/dist/src/routes/admin-usage.js +198 -0
- package/dist/src/routes/admin-usage.js.map +1 -0
- 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/completion.d.ts +5 -0
- package/dist/src/routes/agent-tasks/completion.d.ts.map +1 -1
- package/dist/src/routes/agent-tasks/completion.js +35 -54
- package/dist/src/routes/agent-tasks/completion.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/agents/device-auth.d.ts.map +1 -1
- package/dist/src/routes/agents/device-auth.js +27 -4
- package/dist/src/routes/agents/device-auth.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 +51 -1
- 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 +4 -0
- package/dist/src/routes/apps/read.d.ts.map +1 -1
- package/dist/src/routes/apps/read.js +47 -2
- 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/capabilities.d.ts +17 -0
- package/dist/src/routes/capabilities.d.ts.map +1 -1
- package/dist/src/routes/capabilities.js +187 -4
- package/dist/src/routes/capabilities.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 +27 -0
- package/dist/src/routes/disputes.d.ts.map +1 -1
- package/dist/src/routes/disputes.js +74 -79
- 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/messaging.d.ts +6 -0
- package/dist/src/routes/federation-sync/messaging.d.ts.map +1 -1
- package/dist/src/routes/federation-sync/messaging.js +22 -1
- package/dist/src/routes/federation-sync/messaging.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 +7 -0
- package/dist/src/routes/instances/install.d.ts.map +1 -1
- package/dist/src/routes/instances/install.js +31 -24
- package/dist/src/routes/instances/install.js.map +1 -1
- package/dist/src/routes/library-packs.d.ts +7 -0
- package/dist/src/routes/library-packs.d.ts.map +1 -1
- package/dist/src/routes/library-packs.js +32 -8
- package/dist/src/routes/library-packs.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/markdown-mirrors.js +1 -1
- package/dist/src/routes/markdown-mirrors.js.map +1 -1
- package/dist/src/routes/messages.d.ts +6 -0
- package/dist/src/routes/messages.d.ts.map +1 -1
- package/dist/src/routes/messages.js +15 -3
- package/dist/src/routes/messages.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/crud.d.ts +4 -0
- package/dist/src/routes/organisms/crud.d.ts.map +1 -1
- package/dist/src/routes/organisms/crud.js +25 -7
- package/dist/src/routes/organisms/crud.js.map +1 -1
- package/dist/src/routes/organisms/gates.d.ts.map +1 -1
- package/dist/src/routes/organisms/gates.js +19 -2
- package/dist/src/routes/organisms/gates.js.map +1 -1
- package/dist/src/routes/organisms/membership.d.ts +4 -0
- package/dist/src/routes/organisms/membership.d.ts.map +1 -1
- package/dist/src/routes/organisms/membership.js +88 -36
- package/dist/src/routes/organisms/membership.js.map +1 -1
- package/dist/src/routes/organisms/shared.d.ts.map +1 -1
- package/dist/src/routes/organisms/shared.js +2 -1
- package/dist/src/routes/organisms/shared.js.map +1 -1
- package/dist/src/routes/organisms/workspace-access.d.ts +5 -0
- package/dist/src/routes/organisms/workspace-access.d.ts.map +1 -1
- package/dist/src/routes/organisms/workspace-access.js +41 -2
- package/dist/src/routes/organisms/workspace-access.js.map +1 -1
- package/dist/src/routes/organisms/workspace-ops.d.ts +2 -0
- package/dist/src/routes/organisms/workspace-ops.d.ts.map +1 -1
- package/dist/src/routes/organisms/workspace-ops.js +10 -6
- package/dist/src/routes/organisms/workspace-ops.js.map +1 -1
- package/dist/src/routes/organisms/workspace-read.d.ts +3 -0
- package/dist/src/routes/organisms/workspace-read.d.ts.map +1 -1
- package/dist/src/routes/organisms/workspace-read.js +13 -7
- package/dist/src/routes/organisms/workspace-read.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/subdomains.d.ts +9 -1
- package/dist/src/routes/subdomains.d.ts.map +1 -1
- package/dist/src/routes/subdomains.js +55 -1
- package/dist/src/routes/subdomains.js.map +1 -1
- package/dist/src/routes/usage-reports.d.ts +31 -0
- package/dist/src/routes/usage-reports.d.ts.map +1 -0
- package/dist/src/routes/usage-reports.js +107 -0
- package/dist/src/routes/usage-reports.js.map +1 -0
- package/dist/src/routes/validate.d.ts.map +1 -1
- package/dist/src/routes/validate.js +1 -0
- package/dist/src/routes/validate.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 +32 -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/agent-task-fanout.d.ts +61 -0
- package/dist/src/services/agent-task-fanout.d.ts.map +1 -1
- package/dist/src/services/agent-task-fanout.js +114 -2
- package/dist/src/services/agent-task-fanout.js.map +1 -1
- package/dist/src/services/agent-task-write.d.ts.map +1 -1
- package/dist/src/services/agent-task-write.js +6 -0
- package/dist/src/services/agent-task-write.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 +39 -0
- package/dist/src/services/ai-completion.d.ts.map +1 -1
- package/dist/src/services/ai-completion.js +77 -10
- 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 +10 -2
- package/dist/src/services/ai-transcription.js.map +1 -1
- package/dist/src/services/ai-usage-admin.d.ts +19 -8
- package/dist/src/services/ai-usage-admin.d.ts.map +1 -1
- package/dist/src/services/ai-usage-admin.js +30 -35
- package/dist/src/services/ai-usage-admin.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-artifact-lint.d.ts +4 -0
- package/dist/src/services/app-artifact-lint.d.ts.map +1 -1
- package/dist/src/services/app-artifact-lint.js +49 -0
- package/dist/src/services/app-artifact-lint.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/app-spec-gate.d.ts +4 -0
- package/dist/src/services/app-spec-gate.d.ts.map +1 -1
- package/dist/src/services/app-spec-gate.js +16 -1
- package/dist/src/services/app-spec-gate.js.map +1 -1
- package/dist/src/services/attachment-duplication.d.ts +4 -0
- package/dist/src/services/attachment-duplication.d.ts.map +1 -1
- package/dist/src/services/attachment-duplication.js +15 -0
- package/dist/src/services/attachment-duplication.js.map +1 -1
- 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/capability-record.d.ts.map +1 -1
- package/dist/src/services/capability-record.js +22 -9
- package/dist/src/services/capability-record.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/core-jobs.d.ts +2 -0
- package/dist/src/services/core-jobs.d.ts.map +1 -1
- package/dist/src/services/core-jobs.js +11 -0
- package/dist/src/services/core-jobs.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/invitations.d.ts +0 -20
- package/dist/src/services/invitations.d.ts.map +1 -1
- package/dist/src/services/invitations.js +30 -0
- package/dist/src/services/invitations.js.map +1 -1
- package/dist/src/services/job-seeding.d.ts +1 -0
- package/dist/src/services/job-seeding.d.ts.map +1 -1
- package/dist/src/services/job-seeding.js +6 -0
- package/dist/src/services/job-seeding.js.map +1 -1
- package/dist/src/services/ledger-admin.d.ts +18 -4
- package/dist/src/services/ledger-admin.d.ts.map +1 -1
- package/dist/src/services/ledger-admin.js +47 -33
- package/dist/src/services/ledger-admin.js.map +1 -1
- package/dist/src/services/markdown-negotiation.js +1 -1
- package/dist/src/services/markdown-negotiation.js.map +1 -1
- package/dist/src/services/message-broadcast.d.ts.map +1 -1
- package/dist/src/services/message-broadcast.js +29 -1
- package/dist/src/services/message-broadcast.js.map +1 -1
- package/dist/src/services/metered-access.d.ts +9 -2
- package/dist/src/services/metered-access.d.ts.map +1 -1
- package/dist/src/services/metered-access.js +92 -12
- package/dist/src/services/metered-access.js.map +1 -1
- package/dist/src/services/openrouter.d.ts +20 -1
- package/dist/src/services/openrouter.d.ts.map +1 -1
- package/dist/src/services/openrouter.js +66 -0
- package/dist/src/services/openrouter.js.map +1 -1
- package/dist/src/services/organism-import.d.ts.map +1 -1
- package/dist/src/services/organism-import.js +4 -1
- package/dist/src/services/organism-import.js.map +1 -1
- package/dist/src/services/organism-lifecycle.d.ts.map +1 -1
- package/dist/src/services/organism-lifecycle.js +5 -1
- package/dist/src/services/organism-lifecycle.js.map +1 -1
- package/dist/src/services/organism-ownership.d.ts +56 -0
- package/dist/src/services/organism-ownership.d.ts.map +1 -0
- package/dist/src/services/organism-ownership.js +174 -0
- package/dist/src/services/organism-ownership.js.map +1 -0
- package/dist/src/services/organism-privacy.d.ts.map +1 -1
- package/dist/src/services/organism-privacy.js +2 -1
- package/dist/src/services/organism-privacy.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 +54 -1
- package/dist/src/services/scope-vocabulary-migration.d.ts.map +1 -1
- package/dist/src/services/scope-vocabulary-migration.js +101 -6
- 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/usage/archive-job.d.ts +25 -0
- package/dist/src/services/usage/archive-job.d.ts.map +1 -0
- package/dist/src/services/usage/archive-job.js +36 -0
- package/dist/src/services/usage/archive-job.js.map +1 -0
- package/dist/src/services/usage/record-app-open.d.ts +8 -0
- package/dist/src/services/usage/record-app-open.d.ts.map +1 -0
- package/dist/src/services/usage/record-app-open.js +52 -0
- package/dist/src/services/usage/record-app-open.js.map +1 -0
- package/dist/src/services/usage/rollup-cuts.d.ts +44 -0
- package/dist/src/services/usage/rollup-cuts.d.ts.map +1 -0
- package/dist/src/services/usage/rollup-cuts.js +81 -0
- package/dist/src/services/usage/rollup-cuts.js.map +1 -0
- package/dist/src/services/usage/rollup-engine.d.ts +71 -0
- package/dist/src/services/usage/rollup-engine.d.ts.map +1 -0
- package/dist/src/services/usage/rollup-engine.js +237 -0
- package/dist/src/services/usage/rollup-engine.js.map +1 -0
- package/dist/src/services/usage/usage-buffer.d.ts +25 -0
- package/dist/src/services/usage/usage-buffer.d.ts.map +1 -0
- package/dist/src/services/usage/usage-buffer.js +146 -0
- package/dist/src/services/usage/usage-buffer.js.map +1 -0
- package/dist/src/services/usage/usage-read.d.ts +115 -0
- package/dist/src/services/usage/usage-read.d.ts.map +1 -0
- package/dist/src/services/usage/usage-read.js +246 -0
- package/dist/src/services/usage/usage-read.js.map +1 -0
- package/dist/src/services/usage-metering.d.ts +5 -0
- package/dist/src/services/usage-metering.d.ts.map +1 -1
- package/dist/src/services/usage-metering.js +7 -0
- package/dist/src/services/usage-metering.js.map +1 -1
- 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/interface.d.ts +4 -1
- package/dist/src/storage/interface.d.ts.map +1 -1
- package/dist/src/storage/interface.js +1 -0
- package/dist/src/storage/interface.js.map +1 -1
- package/dist/src/storage/providers/postgres-kysely/db-types.d.ts +119 -0
- package/dist/src/storage/providers/postgres-kysely/db-types.d.ts.map +1 -1
- package/dist/src/storage/providers/postgres-kysely/index.d.ts.map +1 -1
- package/dist/src/storage/providers/postgres-kysely/index.js +2 -1
- package/dist/src/storage/providers/postgres-kysely/index.js.map +1 -1
- package/dist/src/storage/providers/postgres-kysely/methods/agent-tasks.d.ts.map +1 -1
- package/dist/src/storage/providers/postgres-kysely/methods/agent-tasks.js +3 -0
- package/dist/src/storage/providers/postgres-kysely/methods/agent-tasks.js.map +1 -1
- package/dist/src/storage/providers/postgres-kysely/methods/agent-usage.d.ts.map +1 -1
- package/dist/src/storage/providers/postgres-kysely/methods/agent-usage.js +4 -0
- package/dist/src/storage/providers/postgres-kysely/methods/agent-usage.js.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/organisms.d.ts.map +1 -1
- package/dist/src/storage/providers/postgres-kysely/methods/organisms.js +11 -2
- package/dist/src/storage/providers/postgres-kysely/methods/organisms.js.map +1 -1
- package/dist/src/storage/providers/postgres-kysely/methods/usage.d.ts +32 -0
- package/dist/src/storage/providers/postgres-kysely/methods/usage.d.ts.map +1 -0
- package/dist/src/storage/providers/postgres-kysely/methods/usage.js +336 -0
- package/dist/src/storage/providers/postgres-kysely/methods/usage.js.map +1 -0
- package/dist/src/storage/providers/postgres-kysely/migrations/0036_usage_telemetry.sql +181 -0
- package/dist/src/storage/providers/postgres-kysely/migrations/0037_task_created_by.sql +18 -0
- package/dist/src/storage/providers/postgres-kysely/migrations/0038_organism_owners.sql +31 -0
- 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 +3 -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/governance.d.ts +2 -0
- package/dist/src/storage/providers/sqlite/methods/governance.d.ts.map +1 -1
- package/dist/src/storage/providers/sqlite/methods/governance.js +25 -4
- package/dist/src/storage/providers/sqlite/methods/governance.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/usage.d.ts +43 -0
- package/dist/src/storage/providers/sqlite/methods/usage.d.ts.map +1 -0
- package/dist/src/storage/providers/sqlite/methods/usage.js +37 -0
- package/dist/src/storage/providers/sqlite/methods/usage.js.map +1 -0
- package/dist/src/storage/providers/sqlite/repos/agent-task.d.ts +1 -0
- package/dist/src/storage/providers/sqlite/repos/agent-task.d.ts.map +1 -1
- package/dist/src/storage/providers/sqlite/repos/agent-task.js +4 -2
- package/dist/src/storage/providers/sqlite/repos/agent-task.js.map +1 -1
- package/dist/src/storage/providers/sqlite/repos/agent-usage.d.ts.map +1 -1
- package/dist/src/storage/providers/sqlite/repos/agent-usage.js +4 -2
- package/dist/src/storage/providers/sqlite/repos/agent-usage.js.map +1 -1
- package/dist/src/storage/providers/sqlite/repos/community.d.ts.map +1 -1
- package/dist/src/storage/providers/sqlite/repos/community.js +20 -0
- package/dist/src/storage/providers/sqlite/repos/community.js.map +1 -1
- package/dist/src/storage/providers/sqlite/repos/usage.d.ts +35 -0
- package/dist/src/storage/providers/sqlite/repos/usage.d.ts.map +1 -0
- package/dist/src/storage/providers/sqlite/repos/usage.js +352 -0
- package/dist/src/storage/providers/sqlite/repos/usage.js.map +1 -0
- package/dist/src/storage/providers/sqlite/schema-tables-1.d.ts.map +1 -1
- package/dist/src/storage/providers/sqlite/schema-tables-1.js +2 -0
- package/dist/src/storage/providers/sqlite/schema-tables-1.js.map +1 -1
- package/dist/src/storage/providers/sqlite/schema-tables-3.d.ts +1 -0
- package/dist/src/storage/providers/sqlite/schema-tables-3.d.ts.map +1 -1
- package/dist/src/storage/providers/sqlite/schema-tables-3.js +1 -0
- package/dist/src/storage/providers/sqlite/schema-tables-3.js.map +1 -1
- package/dist/src/storage/providers/sqlite/schema-tables-4.d.ts +2 -0
- package/dist/src/storage/providers/sqlite/schema-tables-4.d.ts.map +1 -1
- package/dist/src/storage/providers/sqlite/schema-tables-4.js +131 -0
- package/dist/src/storage/providers/sqlite/schema-tables-4.js.map +1 -1
- package/dist/src/storage/providers/sqlite/schema.d.ts +2 -0
- package/dist/src/storage/providers/sqlite/schema.d.ts.map +1 -1
- package/dist/src/storage/providers/sqlite/schema.js +155 -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/repositories/usage.repository.d.ts +80 -0
- package/dist/src/storage/repositories/usage.repository.d.ts.map +1 -0
- package/dist/src/storage/repositories/usage.repository.js +23 -0
- package/dist/src/storage/repositories/usage.repository.js.map +1 -0
- package/dist/src/storage/types/agents-messaging.d.ts +24 -0
- package/dist/src/storage/types/agents-messaging.d.ts.map +1 -1
- package/dist/src/storage/types/agents-messaging.js +1 -0
- package/dist/src/storage/types/agents-messaging.js.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/storage/types/organisms-federation.d.ts +21 -0
- package/dist/src/storage/types/organisms-federation.d.ts.map +1 -1
- package/dist/src/storage/types/usage.d.ts +186 -0
- package/dist/src/storage/types/usage.d.ts.map +1 -0
- package/dist/src/storage/types/usage.js +24 -0
- package/dist/src/storage/types/usage.js.map +1 -0
- 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/src/utils/scope-coverage.d.ts +21 -0
- package/dist/src/utils/scope-coverage.d.ts.map +1 -1
- package/dist/src/utils/scope-coverage.js +22 -1
- package/dist/src/utils/scope-coverage.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 +13 -2
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
/** The Frictionless field types this node reads and writes. Deliberately small: a type nobody can
|
|
2
|
+
* serialise deterministically is a type that produces two different files from one table. */
|
|
3
|
+
export type FieldType = 'string' | 'integer' | 'number' | 'boolean' | 'date' | 'datetime' | 'any';
|
|
4
|
+
export interface SchemaField {
|
|
5
|
+
name: string;
|
|
6
|
+
type: FieldType;
|
|
7
|
+
/** Present when inference saw no value at all for the field — the publisher should look. */
|
|
8
|
+
description?: string;
|
|
9
|
+
}
|
|
10
|
+
export interface TableSchema {
|
|
11
|
+
fields: SchemaField[];
|
|
12
|
+
/** Field names that must be present and non-empty on every row. */
|
|
13
|
+
primaryKey?: string[];
|
|
14
|
+
}
|
|
15
|
+
/** One tabular resource as a producer hands it over: rows plus either a schema or a request to infer. */
|
|
16
|
+
export interface ResourceInput {
|
|
17
|
+
name: string;
|
|
18
|
+
rows: Array<Record<string, unknown>>;
|
|
19
|
+
/** 'infer' proposes types from the rows; a TableSchema declares them. See INFERENCE IS A PROPOSAL. */
|
|
20
|
+
schema: 'infer' | TableSchema;
|
|
21
|
+
title?: string;
|
|
22
|
+
description?: string;
|
|
23
|
+
}
|
|
24
|
+
/** The AIMEAT extension block — one root key, so a Frictionless reader that knows nothing about this
|
|
25
|
+
* node still parses the descriptor and simply carries an object it does not interpret. */
|
|
26
|
+
export interface AimeatBlock {
|
|
27
|
+
packageId: string;
|
|
28
|
+
contentHash: string;
|
|
29
|
+
/** REQUIRED. What changed against the previous version and why. A version nobody explained is a
|
|
30
|
+
* version a consumer cannot decide about. */
|
|
31
|
+
changes: string;
|
|
32
|
+
producer: {
|
|
33
|
+
kind: 'workflow' | 'extension' | 'agent' | 'app' | 'manual';
|
|
34
|
+
ref?: string;
|
|
35
|
+
schedule?: string;
|
|
36
|
+
};
|
|
37
|
+
producedBy: {
|
|
38
|
+
gaii: string;
|
|
39
|
+
run?: string;
|
|
40
|
+
at: string;
|
|
41
|
+
};
|
|
42
|
+
/** Whether the Table Schemas were declared by the producer or proposed by inference. A consumer
|
|
43
|
+
* reading `inferred` knows the types are a guess nobody has confirmed yet. */
|
|
44
|
+
schemaSource: 'declared' | 'inferred' | 'mixed';
|
|
45
|
+
parameters?: Record<string, unknown>;
|
|
46
|
+
sources?: Array<{
|
|
47
|
+
url?: string;
|
|
48
|
+
title?: string;
|
|
49
|
+
retrievedAt?: string;
|
|
50
|
+
role?: string;
|
|
51
|
+
}>;
|
|
52
|
+
lineage?: string[];
|
|
53
|
+
transformations?: Array<{
|
|
54
|
+
by: string;
|
|
55
|
+
what: string;
|
|
56
|
+
}>;
|
|
57
|
+
legalBasis?: string;
|
|
58
|
+
consentStatus?: string;
|
|
59
|
+
retention?: string;
|
|
60
|
+
license?: string;
|
|
61
|
+
supersedes?: string;
|
|
62
|
+
retentionPolicy?: {
|
|
63
|
+
keep: number;
|
|
64
|
+
unit: 'versions' | 'months';
|
|
65
|
+
};
|
|
66
|
+
/**
|
|
67
|
+
* The addressable `aimeat.provenance/v1` record for THIS version, when one was minted — an agent
|
|
68
|
+
* publishing is model-touched output and TARGET-058 says that gets declared rather than inferred.
|
|
69
|
+
*
|
|
70
|
+
* Deliberately OUTSIDE the content hash (see contentHashOf's allowlist). A provenance id is a
|
|
71
|
+
* freshly minted UUID, so putting it in the identity would make two identical runs produce two
|
|
72
|
+
* versions and destroy the determinism the whole format leans on. It is a fact ABOUT the version.
|
|
73
|
+
*/
|
|
74
|
+
aiProvenanceId?: string;
|
|
75
|
+
}
|
|
76
|
+
export interface DescriptorResource {
|
|
77
|
+
name: string;
|
|
78
|
+
path: string;
|
|
79
|
+
profile: 'tabular-data-resource';
|
|
80
|
+
format: 'csv';
|
|
81
|
+
mediatype: 'text/csv';
|
|
82
|
+
encoding: 'utf-8';
|
|
83
|
+
schema: TableSchema;
|
|
84
|
+
/** Rows in the resource, so a consumer can size a fetch before making it. */
|
|
85
|
+
rowCount: number;
|
|
86
|
+
bytes: number;
|
|
87
|
+
/** sha256 of the canonical bytes of THIS resource. */
|
|
88
|
+
hash: string;
|
|
89
|
+
title?: string;
|
|
90
|
+
description?: string;
|
|
91
|
+
}
|
|
92
|
+
export interface Descriptor {
|
|
93
|
+
name: string;
|
|
94
|
+
profile: 'tabular-data-package';
|
|
95
|
+
resources: DescriptorResource[];
|
|
96
|
+
title?: string;
|
|
97
|
+
description?: string;
|
|
98
|
+
licenses?: Array<{
|
|
99
|
+
name: string;
|
|
100
|
+
path?: string;
|
|
101
|
+
}>;
|
|
102
|
+
created: string;
|
|
103
|
+
aimeat: AimeatBlock;
|
|
104
|
+
}
|
|
105
|
+
/** What a producer hands to `publish`, on every road. */
|
|
106
|
+
export interface PublishInput {
|
|
107
|
+
name: string;
|
|
108
|
+
changes: string;
|
|
109
|
+
resources: ResourceInput[];
|
|
110
|
+
title?: string;
|
|
111
|
+
description?: string;
|
|
112
|
+
producer?: Partial<AimeatBlock['producer']>;
|
|
113
|
+
parameters?: Record<string, unknown>;
|
|
114
|
+
provenance?: Pick<AimeatBlock, 'sources' | 'lineage' | 'transformations' | 'legalBasis' | 'consentStatus' | 'retention' | 'license' | 'supersedes'>;
|
|
115
|
+
retentionPolicy?: AimeatBlock['retentionPolicy'];
|
|
116
|
+
/** What the caller said about how this was made (TARGET-058). Threaded to provenanceForWrite. */
|
|
117
|
+
declaredProvenance?: unknown;
|
|
118
|
+
/** An existing provenance record the caller asks to attach instead of minting a new one. */
|
|
119
|
+
declaredProvenanceId?: string;
|
|
120
|
+
}
|
|
121
|
+
/** A package name is an address segment, so it is constrained like one. */
|
|
122
|
+
export declare const PACKAGE_NAME_RE: RegExp;
|
|
123
|
+
/** A resource name becomes a file name under data/. */
|
|
124
|
+
export declare const RESOURCE_NAME_RE: RegExp;
|
|
125
|
+
export declare function validateName(name: string): string | null;
|
|
126
|
+
/** `datapkg/{name}` — everything about one package lives under this. */
|
|
127
|
+
export declare const packageKeyRoot: (name: string) => string;
|
|
128
|
+
/** The IMMUTABLE address of one version's descriptor. */
|
|
129
|
+
export declare const descriptorKey: (name: string, contentHash: string) => string;
|
|
130
|
+
/** The IMMUTABLE address of one version's resource bytes. Matches `resources[].path` relative to
|
|
131
|
+
* the descriptor, which is what makes a plain Frictionless client resolve it unaided. */
|
|
132
|
+
export declare const resourceKey: (name: string, contentHash: string, resource: string) => string;
|
|
133
|
+
/** The relative path recorded IN the descriptor. */
|
|
134
|
+
export declare const resourcePath: (resource: string) => string;
|
|
135
|
+
/** The MUTABLE pointer for a consumer following the newest version. */
|
|
136
|
+
export declare const latestKey: (name: string) => string;
|
|
137
|
+
/** `sha256:abc…` → `abc…`. Every key uses the bare digest; every field carries the prefix. */
|
|
138
|
+
export declare function bare(hash: string): string;
|
|
139
|
+
/** The public, permanent, auth-free URL of a stored key under an owner. */
|
|
140
|
+
export declare function publicUrl(baseUrl: string, ownerGhii: string, key: string): string;
|
|
141
|
+
/** `pkg:{owner}/{name}` — the package's stable identity, independent of any one version. */
|
|
142
|
+
export declare const packageId: (ownerName: string, name: string) => string;
|
|
143
|
+
/**
|
|
144
|
+
* THE VERSION IS THE CONTENT HASH, and this is the one function that decides it.
|
|
145
|
+
*
|
|
146
|
+
* Computed over the descriptor serialised with object keys sorted (utils/stable-json.ts), so a round
|
|
147
|
+
* trip through Postgres `jsonb` — which normalises key order — cannot change a package's identity.
|
|
148
|
+
* Each resource's own bytes are already summarised by `resources[].hash`, so hashing the descriptor
|
|
149
|
+
* covers both the schema and the data: change one value in one row and the resource hash moves,
|
|
150
|
+
* which moves this one.
|
|
151
|
+
*
|
|
152
|
+
* WHAT IS DELIBERATELY OUTSIDE IT, and why each one:
|
|
153
|
+
*
|
|
154
|
+
* - `created` and `producedBy.at`. Two identical runs of a deterministic producer must agree, or
|
|
155
|
+
* "same input, same output" is a claim the node itself breaks every time a clock fires.
|
|
156
|
+
*
|
|
157
|
+
* - THE WHOLE PRODUCER BLOCK — `producer` and `producedBy`. This one was learned the hard way: with
|
|
158
|
+
* it inside, the same rows published by a schedule and by a workflow step hashed differently, so
|
|
159
|
+
* they landed at two addresses and "the producer is interchangeable" was false. The E2E that
|
|
160
|
+
* asserts a second producer reaches the SAME version is what caught it. WHO made a version is a
|
|
161
|
+
* fact ABOUT the version, not part of what the version IS — the same table is the same table
|
|
162
|
+
* whether a clock, a workflow, an agent or a person produced it.
|
|
163
|
+
*
|
|
164
|
+
* The consequence is deliberate and is what makes the address immutable: a later identical run
|
|
165
|
+
* finds the descriptor already stored, answers `unchanged`, and does NOT rewrite it. So the
|
|
166
|
+
* producer recorded at an address is whoever produced it FIRST, and one address can never hold
|
|
167
|
+
* two different byte sequences.
|
|
168
|
+
*
|
|
169
|
+
* - `supersedes`, for exactly the same reason one step further on. It names the version this one
|
|
170
|
+
* REPLACED, which is a fact about where this version sits in a history rather than about what it
|
|
171
|
+
* contains. With it inside the identity, republishing the same rows a second time would hash
|
|
172
|
+
* differently purely because a previous version now existed, and the same table would land at two
|
|
173
|
+
* addresses — the defect the producer block already taught us, wearing a different hat.
|
|
174
|
+
*
|
|
175
|
+
* What IS inside: the data, every Table Schema, the change description (a version is partly its
|
|
176
|
+
* explanation), the provenance block, and `schemaSource` — because "declared" and "inferred" are a
|
|
177
|
+
* real difference to whoever reads the types.
|
|
178
|
+
*/
|
|
179
|
+
export declare function contentHashOf(descriptor: Omit<Descriptor, 'aimeat'> & {
|
|
180
|
+
aimeat: Omit<AimeatBlock, 'contentHash'>;
|
|
181
|
+
}): string;
|
|
182
|
+
/** sha256 of one resource's canonical bytes. */
|
|
183
|
+
export declare function bytesHash(data: Buffer): string;
|
|
184
|
+
/** What `latest.json` holds — small on purpose, so following the newest version is one cheap GET. */
|
|
185
|
+
export interface LatestPointer {
|
|
186
|
+
packageId: string;
|
|
187
|
+
name: string;
|
|
188
|
+
contentHash: string;
|
|
189
|
+
descriptorUrl: string;
|
|
190
|
+
updatedAt: string;
|
|
191
|
+
/** The last run that FAILED, if the newest attempt did. The package stays on the version below,
|
|
192
|
+
* and this is how a consumer learns the difference between "unchanged" and "broken". */
|
|
193
|
+
lastError?: {
|
|
194
|
+
at: string;
|
|
195
|
+
message: string;
|
|
196
|
+
};
|
|
197
|
+
}
|
|
198
|
+
//# sourceMappingURL=contract.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contract.d.ts","sourceRoot":"","sources":["../../../../src/services/datapackage/contract.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file src/services/datapackage/contract.ts
|
|
3
|
+
* @description THE AIMEAT Data Package contract: what a package is, where it lives, and what its
|
|
4
|
+
* version is called. Everything else in this directory implements it, and the three bindings
|
|
5
|
+
* (ctx.datapackage, the browser library, the MCP tools) are doors onto that one implementation.
|
|
6
|
+
*
|
|
7
|
+
* WHY ONE IMPLEMENTATION AND NOT THREE. A package's identity is a content hash. Two pieces of code
|
|
8
|
+
* that compute it differently produce two identities for the same bytes, and every consumer pinned
|
|
9
|
+
* to a hash breaks silently. This node has already paid for that shape once — an app and its
|
|
10
|
+
* extension hashed the same spreadsheet inputs differently, so every value the app computed looked
|
|
11
|
+
* stale to the server forever (see EXT_HASH_REFERENCE_JS in services/extension-runtime.ts). So the
|
|
12
|
+
* hash, the schema inference, the validation and the CSV serialisation live HERE, on the server,
|
|
13
|
+
* and a browser app reaches them over `/v1/datapackages` rather than reimplementing them.
|
|
14
|
+
*
|
|
15
|
+
* THE FORMAT is Frictionless Data Package: `datapackage.json` with a Table Schema per tabular
|
|
16
|
+
* resource, extended under one `aimeat` root key. Nothing is stored twice — the ODPS descriptor,
|
|
17
|
+
* the OData metadata and an XLSX header row are all projections of the Table Schema, so they
|
|
18
|
+
* cannot drift from it.
|
|
19
|
+
*
|
|
20
|
+
* THE ADDRESS is `datapkg/{name}/{contentHash}/datapackage.json`, with `resources[].path` a
|
|
21
|
+
* sibling relative path (`data/rows.csv`) exactly as Frictionless expects, so `frictionless-py`,
|
|
22
|
+
* R and the JS client resolve it with no AIMEAT knowledge at all. The hash IS in the path, which
|
|
23
|
+
* is what makes a published version immutable for free: the same address can never answer with
|
|
24
|
+
* different bytes. A separate, MUTABLE `datapkg/{name}/latest.json` is the pointer for a consumer
|
|
25
|
+
* who follows the newest version rather than pinning one.
|
|
26
|
+
*
|
|
27
|
+
* IT IS ALWAYS THE OWNER'S NAMESPACE. Not the agent's, not `scheduler@node`, not `ext/{name}/`.
|
|
28
|
+
* A package produced from the app, on a clock, by a workflow step or by an agent has to land at
|
|
29
|
+
* ONE permanent URL, or "the producer is interchangeable" is not true.
|
|
30
|
+
* @structure DataPackageInput/Descriptor/TableSchema/Field types · packageKeyRoot · descriptorKey ·
|
|
31
|
+
* resourceKey · latestKey · publicUrl · contentHashOf · buildDescriptor
|
|
32
|
+
* @usage
|
|
33
|
+
* import { buildDescriptor, contentHashOf, descriptorKey } from './contract.js';
|
|
34
|
+
* @version-history
|
|
35
|
+
* v1.0.0 -- 2026-08-15 -- Initial (TARGET-063 vaihe 1, A4/B1/B2).
|
|
36
|
+
*/
|
|
37
|
+
import { createHash } from 'node:crypto';
|
|
38
|
+
import { stableStringify } from '../../utils/stable-json.js';
|
|
39
|
+
/** A package name is an address segment, so it is constrained like one. */
|
|
40
|
+
export const PACKAGE_NAME_RE = /^[a-z0-9][a-z0-9-]{0,62}[a-z0-9]$/;
|
|
41
|
+
/** A resource name becomes a file name under data/. */
|
|
42
|
+
export const RESOURCE_NAME_RE = /^[a-z0-9][a-z0-9-]{0,62}[a-z0-9]$/;
|
|
43
|
+
export function validateName(name) {
|
|
44
|
+
if (!PACKAGE_NAME_RE.test(name)) {
|
|
45
|
+
return `package name "${name}" must be lowercase letters, digits and dashes, 2-64 characters`;
|
|
46
|
+
}
|
|
47
|
+
return null;
|
|
48
|
+
}
|
|
49
|
+
/** `datapkg/{name}` — everything about one package lives under this. */
|
|
50
|
+
export const packageKeyRoot = (name) => `datapkg/${name}`;
|
|
51
|
+
/** The IMMUTABLE address of one version's descriptor. */
|
|
52
|
+
export const descriptorKey = (name, contentHash) => `${packageKeyRoot(name)}/${bare(contentHash)}/datapackage.json`;
|
|
53
|
+
/** The IMMUTABLE address of one version's resource bytes. Matches `resources[].path` relative to
|
|
54
|
+
* the descriptor, which is what makes a plain Frictionless client resolve it unaided. */
|
|
55
|
+
export const resourceKey = (name, contentHash, resource) => `${packageKeyRoot(name)}/${bare(contentHash)}/${resourcePath(resource)}`;
|
|
56
|
+
/** The relative path recorded IN the descriptor. */
|
|
57
|
+
export const resourcePath = (resource) => `data/${resource}.csv`;
|
|
58
|
+
/** The MUTABLE pointer for a consumer following the newest version. */
|
|
59
|
+
export const latestKey = (name) => `${packageKeyRoot(name)}/latest.json`;
|
|
60
|
+
/** `sha256:abc…` → `abc…`. Every key uses the bare digest; every field carries the prefix. */
|
|
61
|
+
export function bare(hash) {
|
|
62
|
+
return hash.replace(/^sha256:/, '');
|
|
63
|
+
}
|
|
64
|
+
/** The public, permanent, auth-free URL of a stored key under an owner. */
|
|
65
|
+
export function publicUrl(baseUrl, ownerGhii, key) {
|
|
66
|
+
const path = key.split('/').map(encodeURIComponent).join('/');
|
|
67
|
+
return `${baseUrl.replace(/\/+$/, '')}/v1/pub/${encodeURIComponent(ownerGhii)}/${path}`;
|
|
68
|
+
}
|
|
69
|
+
/** `pkg:{owner}/{name}` — the package's stable identity, independent of any one version. */
|
|
70
|
+
export const packageId = (ownerName, name) => `pkg:${ownerName}/${name}`;
|
|
71
|
+
/**
|
|
72
|
+
* THE VERSION IS THE CONTENT HASH, and this is the one function that decides it.
|
|
73
|
+
*
|
|
74
|
+
* Computed over the descriptor serialised with object keys sorted (utils/stable-json.ts), so a round
|
|
75
|
+
* trip through Postgres `jsonb` — which normalises key order — cannot change a package's identity.
|
|
76
|
+
* Each resource's own bytes are already summarised by `resources[].hash`, so hashing the descriptor
|
|
77
|
+
* covers both the schema and the data: change one value in one row and the resource hash moves,
|
|
78
|
+
* which moves this one.
|
|
79
|
+
*
|
|
80
|
+
* WHAT IS DELIBERATELY OUTSIDE IT, and why each one:
|
|
81
|
+
*
|
|
82
|
+
* - `created` and `producedBy.at`. Two identical runs of a deterministic producer must agree, or
|
|
83
|
+
* "same input, same output" is a claim the node itself breaks every time a clock fires.
|
|
84
|
+
*
|
|
85
|
+
* - THE WHOLE PRODUCER BLOCK — `producer` and `producedBy`. This one was learned the hard way: with
|
|
86
|
+
* it inside, the same rows published by a schedule and by a workflow step hashed differently, so
|
|
87
|
+
* they landed at two addresses and "the producer is interchangeable" was false. The E2E that
|
|
88
|
+
* asserts a second producer reaches the SAME version is what caught it. WHO made a version is a
|
|
89
|
+
* fact ABOUT the version, not part of what the version IS — the same table is the same table
|
|
90
|
+
* whether a clock, a workflow, an agent or a person produced it.
|
|
91
|
+
*
|
|
92
|
+
* The consequence is deliberate and is what makes the address immutable: a later identical run
|
|
93
|
+
* finds the descriptor already stored, answers `unchanged`, and does NOT rewrite it. So the
|
|
94
|
+
* producer recorded at an address is whoever produced it FIRST, and one address can never hold
|
|
95
|
+
* two different byte sequences.
|
|
96
|
+
*
|
|
97
|
+
* - `supersedes`, for exactly the same reason one step further on. It names the version this one
|
|
98
|
+
* REPLACED, which is a fact about where this version sits in a history rather than about what it
|
|
99
|
+
* contains. With it inside the identity, republishing the same rows a second time would hash
|
|
100
|
+
* differently purely because a previous version now existed, and the same table would land at two
|
|
101
|
+
* addresses — the defect the producer block already taught us, wearing a different hat.
|
|
102
|
+
*
|
|
103
|
+
* What IS inside: the data, every Table Schema, the change description (a version is partly its
|
|
104
|
+
* explanation), the provenance block, and `schemaSource` — because "declared" and "inferred" are a
|
|
105
|
+
* real difference to whoever reads the types.
|
|
106
|
+
*/
|
|
107
|
+
export function contentHashOf(descriptor) {
|
|
108
|
+
// Rebuilt by naming what IS in the identity, rather than by removing what is not: a field added
|
|
109
|
+
// to AimeatBlock later must be considered on purpose, and an allowlist forces that. A denylist
|
|
110
|
+
// would quietly pull the next field in and move every existing version's hash.
|
|
111
|
+
const a = descriptor.aimeat;
|
|
112
|
+
const canonical = {
|
|
113
|
+
name: descriptor.name,
|
|
114
|
+
profile: descriptor.profile,
|
|
115
|
+
resources: descriptor.resources,
|
|
116
|
+
title: descriptor.title,
|
|
117
|
+
description: descriptor.description,
|
|
118
|
+
licenses: descriptor.licenses,
|
|
119
|
+
aimeat: {
|
|
120
|
+
packageId: a.packageId,
|
|
121
|
+
changes: a.changes,
|
|
122
|
+
schemaSource: a.schemaSource,
|
|
123
|
+
parameters: a.parameters,
|
|
124
|
+
sources: a.sources,
|
|
125
|
+
lineage: a.lineage,
|
|
126
|
+
transformations: a.transformations,
|
|
127
|
+
legalBasis: a.legalBasis,
|
|
128
|
+
consentStatus: a.consentStatus,
|
|
129
|
+
retention: a.retention,
|
|
130
|
+
license: a.license,
|
|
131
|
+
retentionPolicy: a.retentionPolicy,
|
|
132
|
+
},
|
|
133
|
+
};
|
|
134
|
+
return 'sha256:' + createHash('sha256').update(stableStringify(canonical)).digest('hex');
|
|
135
|
+
}
|
|
136
|
+
/** sha256 of one resource's canonical bytes. */
|
|
137
|
+
export function bytesHash(data) {
|
|
138
|
+
return 'sha256:' + createHash('sha256').update(data).digest('hex');
|
|
139
|
+
}
|
|
140
|
+
//# sourceMappingURL=contract.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contract.js","sourceRoot":"","sources":["../../../../src/services/datapackage/contract.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AA4G7D,2EAA2E;AAC3E,MAAM,CAAC,MAAM,eAAe,GAAG,mCAAmC,CAAC;AACnE,uDAAuD;AACvD,MAAM,CAAC,MAAM,gBAAgB,GAAG,mCAAmC,CAAC;AAEpE,MAAM,UAAU,YAAY,CAAC,IAAY;IACrC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAC9B,OAAO,iBAAiB,IAAI,iEAAiE,CAAC;IAClG,CAAC;IACD,OAAO,IAAI,CAAC;AAChB,CAAC;AAED,wEAAwE;AACxE,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,IAAY,EAAU,EAAE,CAAC,WAAW,IAAI,EAAE,CAAC;AAC1E,yDAAyD;AACzD,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,IAAY,EAAE,WAAmB,EAAU,EAAE,CACvE,GAAG,cAAc,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,WAAW,CAAC,mBAAmB,CAAC;AACpE;0FAC0F;AAC1F,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,IAAY,EAAE,WAAmB,EAAE,QAAgB,EAAU,EAAE,CACvF,GAAG,cAAc,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,YAAY,CAAC,QAAQ,CAAC,EAAE,CAAC;AAC7E,oDAAoD;AACpD,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,QAAgB,EAAU,EAAE,CAAC,QAAQ,QAAQ,MAAM,CAAC;AACjF,uEAAuE;AACvE,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,IAAY,EAAU,EAAE,CAAC,GAAG,cAAc,CAAC,IAAI,CAAC,cAAc,CAAC;AAEzF,8FAA8F;AAC9F,MAAM,UAAU,IAAI,CAAC,IAAY;IAC7B,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;AACxC,CAAC;AAED,2EAA2E;AAC3E,MAAM,UAAU,SAAS,CAAC,OAAe,EAAE,SAAiB,EAAE,GAAW;IACrE,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC9D,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,WAAW,kBAAkB,CAAC,SAAS,CAAC,IAAI,IAAI,EAAE,CAAC;AAC5F,CAAC;AAED,4FAA4F;AAC5F,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,SAAiB,EAAE,IAAY,EAAU,EAAE,CAAC,OAAO,SAAS,IAAI,IAAI,EAAE,CAAC;AAEjG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,MAAM,UAAU,aAAa,CAAC,UAAqF;IAC/G,gGAAgG;IAChG,+FAA+F;IAC/F,+EAA+E;IAC/E,MAAM,CAAC,GAAG,UAAU,CAAC,MAAM,CAAC;IAC5B,MAAM,SAAS,GAAG;QACd,IAAI,EAAE,UAAU,CAAC,IAAI;QACrB,OAAO,EAAE,UAAU,CAAC,OAAO;QAC3B,SAAS,EAAE,UAAU,CAAC,SAAS;QAC/B,KAAK,EAAE,UAAU,CAAC,KAAK;QACvB,WAAW,EAAE,UAAU,CAAC,WAAW;QACnC,QAAQ,EAAE,UAAU,CAAC,QAAQ;QAC7B,MAAM,EAAE;YACJ,SAAS,EAAE,CAAC,CAAC,SAAS;YACtB,OAAO,EAAE,CAAC,CAAC,OAAO;YAClB,YAAY,EAAE,CAAC,CAAC,YAAY;YAC5B,UAAU,EAAE,CAAC,CAAC,UAAU;YACxB,OAAO,EAAE,CAAC,CAAC,OAAO;YAClB,OAAO,EAAE,CAAC,CAAC,OAAO;YAClB,eAAe,EAAE,CAAC,CAAC,eAAe;YAClC,UAAU,EAAE,CAAC,CAAC,UAAU;YACxB,aAAa,EAAE,CAAC,CAAC,aAAa;YAC9B,SAAS,EAAE,CAAC,CAAC,SAAS;YACtB,OAAO,EAAE,CAAC,CAAC,OAAO;YAClB,eAAe,EAAE,CAAC,CAAC,eAAe;SACrC;KACJ,CAAC;IACF,OAAO,SAAS,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC7F,CAAC;AAED,gDAAgD;AAChD,MAAM,UAAU,SAAS,CAAC,IAAY;IAClC,OAAO,SAAS,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACvE,CAAC"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file src/services/datapackage/ext-capability.ts
|
|
3
|
+
* @description `ctx.datapackage` — the data-package contract as a HOST capability, because a
|
|
4
|
+
* sandboxed extension cannot load a shared library and the deterministic producers live there.
|
|
5
|
+
*
|
|
6
|
+
* WHY A HOST CAPABILITY AND NOT A LIBRARY. Extension actions run in QuickJS with no module
|
|
7
|
+
* loader: the guest sees `ctx` and nothing else, and `ctx.fetch` answers with `text`, so even
|
|
8
|
+
* pulling the library over HTTP and eval'ing it is not a road. That was the open question in the
|
|
9
|
+
* spec, and this is the decided answer — the library's WORK (schema inference, validation, the
|
|
10
|
+
* content hash, canonical CSV, the storage writes, the catalogue entry) happens on the host, and
|
|
11
|
+
* the guest calls it. The browser binding and the MCP tools reach the SAME functions in
|
|
12
|
+
* ./store.js, so a package built by an extension, an app and an agent is byte-identical.
|
|
13
|
+
*
|
|
14
|
+
* PUBLISH THROWS WHEN THE GATE REFUSES. It does not return `{ ok: false }`, and that is not an
|
|
15
|
+
* ergonomic preference: the scheduler and the workflow engine both record a normal return as a
|
|
16
|
+
* successful run, so a producer whose data failed validation would show green having published
|
|
17
|
+
* nothing. A throw is the only shape that reaches the owner on every road. `validate()` is the
|
|
18
|
+
* separate, non-throwing call for a producer that wants to look before it leaps.
|
|
19
|
+
*
|
|
20
|
+
* THE SIZE CEILING IS THE BRIDGE, not the file limit. Rows cross as one JSON string through
|
|
21
|
+
* `vm.getString`, inside a sandbox whose memory ceiling is tens of megabytes, so the payload is
|
|
22
|
+
* capped at the same 8 MB as `ctx.files` — one number for "what may cross in one call", refused
|
|
23
|
+
* with a message naming the alternative rather than left to exhaust the VM.
|
|
24
|
+
* @structure makeExtensionDataPackage — the ctx.datapackage factory
|
|
25
|
+
* @usage
|
|
26
|
+
* const datapackage = makeExtensionDataPackage({ storage, config, ownerGhii, producedBy });
|
|
27
|
+
* const ctx = buildExtensionCtx({ …, datapackage });
|
|
28
|
+
* @version-history
|
|
29
|
+
* v1.0.0 -- 2026-08-15 -- Initial (TARGET-063 vaihe 1, A4).
|
|
30
|
+
*/
|
|
31
|
+
import type { AimeatConfig } from '../../config.js';
|
|
32
|
+
import type { Storage } from '../../storage/interface.js';
|
|
33
|
+
import type { PublishInput, TableSchema } from './contract.js';
|
|
34
|
+
import { type ValidationIssue } from './table.js';
|
|
35
|
+
import { type ProducedBy } from './store.js';
|
|
36
|
+
/** What may cross the sandbox bridge in one call, as serialised JSON. Same number as ctx.files. */
|
|
37
|
+
export declare const MAX_DATAPACKAGE_PAYLOAD_BYTES: number;
|
|
38
|
+
export interface ExtensionDataPackage {
|
|
39
|
+
publish(input: PublishInput): Promise<{
|
|
40
|
+
packageId: string;
|
|
41
|
+
contentHash: string;
|
|
42
|
+
descriptorUrl: string;
|
|
43
|
+
unchanged: boolean;
|
|
44
|
+
resources: Array<{
|
|
45
|
+
name: string;
|
|
46
|
+
url: string;
|
|
47
|
+
rowCount: number;
|
|
48
|
+
bytes: number;
|
|
49
|
+
}>;
|
|
50
|
+
}>;
|
|
51
|
+
validate(resources: Array<{
|
|
52
|
+
name: string;
|
|
53
|
+
rows: Array<Record<string, unknown>>;
|
|
54
|
+
schema: 'infer' | TableSchema;
|
|
55
|
+
}>): Promise<{
|
|
56
|
+
ok: boolean;
|
|
57
|
+
issues: ValidationIssue[];
|
|
58
|
+
schemas: Record<string, TableSchema>;
|
|
59
|
+
}>;
|
|
60
|
+
inferSchema(rows: Array<Record<string, unknown>>): Promise<TableSchema>;
|
|
61
|
+
open(ref: string): Promise<unknown | null>;
|
|
62
|
+
rows(ref: string, resource: string, opts?: {
|
|
63
|
+
offset?: number;
|
|
64
|
+
limit?: number;
|
|
65
|
+
select?: string[];
|
|
66
|
+
}): Promise<{
|
|
67
|
+
rows: Array<Record<string, unknown>>;
|
|
68
|
+
total: number;
|
|
69
|
+
schema: TableSchema;
|
|
70
|
+
} | null>;
|
|
71
|
+
fail(name: string, message: string): Promise<void>;
|
|
72
|
+
}
|
|
73
|
+
export declare function makeExtensionDataPackage(deps: {
|
|
74
|
+
config: AimeatConfig;
|
|
75
|
+
storage: Storage;
|
|
76
|
+
/**
|
|
77
|
+
* WHOSE package this is. Always the owner's GHII, on every road — never the agent GAII and never
|
|
78
|
+
* `scheduler@node`. A package produced from the app, on a clock, by a workflow step or by an
|
|
79
|
+
* agent must land at ONE permanent address, or the producer is not interchangeable.
|
|
80
|
+
*/
|
|
81
|
+
ownerGhii: string;
|
|
82
|
+
/** Who actually produced it, for the provenance block. The exact principal, not the owner. */
|
|
83
|
+
producedBy: ProducedBy;
|
|
84
|
+
}): ExtensionDataPackage;
|
|
85
|
+
//# sourceMappingURL=ext-capability.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ext-capability.d.ts","sourceRoot":"","sources":["../../../../src/services/datapackage/ext-capability.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC/D,OAAO,EAA6B,KAAK,eAAe,EAAE,MAAM,YAAY,CAAC;AAC7E,OAAO,EAAwD,KAAK,UAAU,EAAE,MAAM,YAAY,CAAC;AAEnG,mGAAmG;AACnG,eAAO,MAAM,6BAA6B,QAAkB,CAAC;AAE7D,MAAM,WAAW,oBAAoB;IACjC,OAAO,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC;QAClC,SAAS,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,OAAO,CAAC;QAClF,SAAS,EAAE,KAAK,CAAC;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,GAAG,EAAE,MAAM,CAAC;YAAC,QAAQ,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;KACpF,CAAC,CAAC;IACH,QAAQ,CAAC,SAAS,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;QAAC,MAAM,EAAE,OAAO,GAAG,WAAW,CAAA;KAAE,CAAC,GAC5G,OAAO,CAAC;QAAE,EAAE,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,eAAe,EAAE,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAA;KAAE,CAAC,CAAC;IAC9F,WAAW,CAAC,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IACxE,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;IAC3C,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,GAC7F,OAAO,CAAC;QAAE,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,WAAW,CAAA;KAAE,GAAG,IAAI,CAAC,CAAC;IACjG,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACtD;AAaD,wBAAgB,wBAAwB,CAAC,IAAI,EAAE;IAC3C,MAAM,EAAE,YAAY,CAAC;IACrB,OAAO,EAAE,OAAO,CAAC;IACjB;;;;OAIG;IACH,SAAS,EAAE,MAAM,CAAC;IAClB,8FAA8F;IAC9F,UAAU,EAAE,UAAU,CAAC;CAC1B,GAAG,oBAAoB,CA+DvB"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { inferSchema, validateRows } from './table.js';
|
|
2
|
+
import { openPackage, publishPackage, readRows, recordFailure } from './store.js';
|
|
3
|
+
/** What may cross the sandbox bridge in one call, as serialised JSON. Same number as ctx.files. */
|
|
4
|
+
export const MAX_DATAPACKAGE_PAYLOAD_BYTES = 8 * 1024 * 1024;
|
|
5
|
+
/** Refuse an oversized payload at the boundary, naming what to do instead. */
|
|
6
|
+
function guardSize(what, value) {
|
|
7
|
+
const bytes = Buffer.byteLength(JSON.stringify(value ?? null), 'utf8');
|
|
8
|
+
if (bytes > MAX_DATAPACKAGE_PAYLOAD_BYTES) {
|
|
9
|
+
throw new Error(`${what} is ${Math.round(bytes / 1024)} kB, over the ${MAX_DATAPACKAGE_PAYLOAD_BYTES / 1024 / 1024} MB sandbox `
|
|
10
|
+
+ 'bridge limit. Publish the table in periods (one package version per window) rather than one '
|
|
11
|
+
+ 'unbounded version, or produce it from a road with no sandbox between it and the data.');
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
export function makeExtensionDataPackage(deps) {
|
|
15
|
+
const { config, storage, ownerGhii, producedBy } = deps;
|
|
16
|
+
const store = { storage, config };
|
|
17
|
+
return {
|
|
18
|
+
async publish(input) {
|
|
19
|
+
guardSize('the package payload', input);
|
|
20
|
+
const out = await publishPackage(store, ownerGhii, input, producedBy);
|
|
21
|
+
if (!out.ok) {
|
|
22
|
+
// THROW, do not return a verdict. See the file header: an unattended road records a
|
|
23
|
+
// normal return as success, so a returned refusal is a green run that published
|
|
24
|
+
// nothing. The first coordinates travel in the message because a producer reading a
|
|
25
|
+
// log needs the row and the column, not a count.
|
|
26
|
+
const head = out.issues.slice(0, 5)
|
|
27
|
+
.map(i => `${i.resource} row ${i.row}, ${i.field}: ${i.message}`)
|
|
28
|
+
.join('; ');
|
|
29
|
+
throw new Error(`${out.code}: ${out.message}${head ? ` — ${head}` : ''}`);
|
|
30
|
+
}
|
|
31
|
+
return {
|
|
32
|
+
packageId: out.descriptor.aimeat.packageId,
|
|
33
|
+
contentHash: out.contentHash,
|
|
34
|
+
descriptorUrl: out.descriptorUrl,
|
|
35
|
+
unchanged: out.unchanged,
|
|
36
|
+
resources: out.resources,
|
|
37
|
+
};
|
|
38
|
+
},
|
|
39
|
+
async validate(resources) {
|
|
40
|
+
guardSize('the resources to validate', resources);
|
|
41
|
+
const issues = [];
|
|
42
|
+
const schemas = {};
|
|
43
|
+
for (const r of Array.isArray(resources) ? resources : []) {
|
|
44
|
+
const schema = r.schema === 'infer' ? inferSchema(r.rows ?? []) : r.schema;
|
|
45
|
+
schemas[r.name] = schema;
|
|
46
|
+
issues.push(...validateRows(r.name, r.rows ?? [], schema));
|
|
47
|
+
}
|
|
48
|
+
return { ok: issues.length === 0, issues, schemas };
|
|
49
|
+
},
|
|
50
|
+
async inferSchema(rows) {
|
|
51
|
+
guardSize('the rows to infer from', rows);
|
|
52
|
+
// A PROPOSAL. It is returned so the producer can look at it, adjust it and declare it;
|
|
53
|
+
// publishing with `schema: 'infer'` records `schemaSource: 'inferred'` in the descriptor
|
|
54
|
+
// so a consumer can see that nobody confirmed the types.
|
|
55
|
+
return inferSchema(Array.isArray(rows) ? rows : []);
|
|
56
|
+
},
|
|
57
|
+
async open(ref) {
|
|
58
|
+
const opened = await openPackage(store, String(ref || ''), config.nodeId);
|
|
59
|
+
return opened ? { ...opened.descriptor, descriptorUrl: opened.descriptorUrl } : null;
|
|
60
|
+
},
|
|
61
|
+
async rows(ref, resource, opts) {
|
|
62
|
+
return readRows(store, String(ref || ''), config.nodeId, String(resource || ''), opts ?? {});
|
|
63
|
+
},
|
|
64
|
+
async fail(name, message) {
|
|
65
|
+
// The producer saying so itself, for the case it can detect and the road cannot: an
|
|
66
|
+
// upstream that answered with an empty body, a source that returned yesterday's file.
|
|
67
|
+
// The run should ALSO throw; this is what leaves the reason on the package.
|
|
68
|
+
await recordFailure(store, ownerGhii, String(name || ''), String(message || 'the run failed'));
|
|
69
|
+
},
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=ext-capability.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ext-capability.js","sourceRoot":"","sources":["../../../../src/services/datapackage/ext-capability.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file src/services/datapackage/odata.ts
|
|
3
|
+
* @description The OData v4 projection of a data package: CSDL metadata from the Table Schema, and
|
|
4
|
+
* the readable subset of the query language applied to rows. Pure — no HTTP, no storage.
|
|
5
|
+
*
|
|
6
|
+
* WHY OData AT ALL, when the CSV already sits at a permanent address. Excel, Power BI and Tableau
|
|
7
|
+
* have a native "OData feed" connector: a person pastes one URL and the workbook REFRESHES ITSELF
|
|
8
|
+
* afterwards. A CSV link is a download, and a download is a copy that starts going stale the moment
|
|
9
|
+
* it lands. This is the difference between a dataset somebody uses once and one they keep.
|
|
10
|
+
*
|
|
11
|
+
* AN UNSUPPORTED QUERY OPTION IS AN ERROR, NEVER AN IGNORED ONE. This is the rule the whole file
|
|
12
|
+
* is shaped around. If a client sends `$filter=weird(x)` and the server ignores it, the client
|
|
13
|
+
* receives MORE ROWS THAN IT ASKED FOR and treats them as the answer — a silent wrong result that
|
|
14
|
+
* looks exactly like a right one. So anything this implementation does not understand answers 501
|
|
15
|
+
* naming what it does understand. A visibly missing feature is cheap; a filter that quietly did
|
|
16
|
+
* nothing is a wrong number in somebody's report.
|
|
17
|
+
*
|
|
18
|
+
* ONE SCHEMA, MANY PROJECTIONS. The Table Schema in the descriptor is the only place columns and
|
|
19
|
+
* types are declared. The CSDL here, the CSV header, the ODPS product sheet and an agent's view of
|
|
20
|
+
* the package are all derived from it, so none of them can drift from the data.
|
|
21
|
+
* @structure toCsdl · parseQuery · applyQuery · ODATA_SUPPORTED
|
|
22
|
+
* @usage
|
|
23
|
+
* const xml = toCsdl(descriptor, 'https://…/v1/odata/alice/pkg');
|
|
24
|
+
* const q = parseQuery(searchParams, resource.schema);
|
|
25
|
+
* if (!q.ok) return 501;
|
|
26
|
+
* const page = applyQuery(rows, q.value);
|
|
27
|
+
* @version-history
|
|
28
|
+
* v1.0.0 -- 2026-08-15 -- Initial (TARGET-063 vaihe 1, the OData surface).
|
|
29
|
+
*/
|
|
30
|
+
import type { Descriptor, TableSchema } from './contract.js';
|
|
31
|
+
/** Every system query option this implementation honours. Anything else is refused by name. */
|
|
32
|
+
export declare const ODATA_SUPPORTED: readonly ["$select", "$top", "$skip", "$filter", "$orderby", "$count", "$format"];
|
|
33
|
+
/** The synthetic key. A CSV row has no identity of its own, and OData requires an entity key — so
|
|
34
|
+
* one is supplied rather than a natural column being promoted to a role it cannot fill. It is the
|
|
35
|
+
* row's ordinal WITHIN THIS IMMUTABLE VERSION, which is stable precisely because the version is. */
|
|
36
|
+
export declare const ROW_KEY = "RowId";
|
|
37
|
+
/** A CSDL identifier: letters, digits and underscore, not starting with a digit. A column called
|
|
38
|
+
* `first name` or `2026` is legal in a CSV and illegal here, so it is mapped rather than rejected —
|
|
39
|
+
* and the mapping is recorded in the descriptor's own field name, which does not change. */
|
|
40
|
+
export declare function edmName(raw: string): string;
|
|
41
|
+
/**
|
|
42
|
+
* The CSDL v4 document (`$metadata`) for one package version.
|
|
43
|
+
*
|
|
44
|
+
* `Nullable="true"` on every property except the key, deliberately: a Table Schema's `primaryKey` is
|
|
45
|
+
* the only statement anybody made about required-ness, and claiming a column is non-nullable because
|
|
46
|
+
* it happened to be full in this version would be a promise the next version breaks.
|
|
47
|
+
*/
|
|
48
|
+
export declare function toCsdl(descriptor: Descriptor, namespace: string): string;
|
|
49
|
+
export interface FilterNode {
|
|
50
|
+
field: string;
|
|
51
|
+
op: 'eq' | 'ne' | 'gt' | 'ge' | 'lt' | 'le' | 'contains' | 'startswith' | 'endswith';
|
|
52
|
+
value: string | number | boolean | null;
|
|
53
|
+
}
|
|
54
|
+
export interface ParsedQuery {
|
|
55
|
+
select?: string[];
|
|
56
|
+
top?: number;
|
|
57
|
+
skip: number;
|
|
58
|
+
/** ANDed together. `or` is not supported, and saying so is the point — see the file header. */
|
|
59
|
+
filters: FilterNode[];
|
|
60
|
+
orderby: Array<{
|
|
61
|
+
field: string;
|
|
62
|
+
desc: boolean;
|
|
63
|
+
}>;
|
|
64
|
+
count: boolean;
|
|
65
|
+
}
|
|
66
|
+
export type ParseResult = {
|
|
67
|
+
ok: true;
|
|
68
|
+
value: ParsedQuery;
|
|
69
|
+
} | {
|
|
70
|
+
ok: false;
|
|
71
|
+
code: 'NOT_IMPLEMENTED' | 'BAD_REQUEST';
|
|
72
|
+
message: string;
|
|
73
|
+
};
|
|
74
|
+
/**
|
|
75
|
+
* Read the system query options, refusing everything not understood.
|
|
76
|
+
*
|
|
77
|
+
* The `edmName` mapping runs in both directions here: a client saw `first_name` in the metadata and
|
|
78
|
+
* sends `$filter=first_name eq 'x'`, while the row still holds `first name`. Resolving through the
|
|
79
|
+
* schema means the client only ever has to know the names the metadata gave it.
|
|
80
|
+
*/
|
|
81
|
+
export declare function parseQuery(params: URLSearchParams, schema: TableSchema): ParseResult;
|
|
82
|
+
export interface QueryPage {
|
|
83
|
+
rows: Array<Record<string, unknown>>;
|
|
84
|
+
/** Rows matching the filter, BEFORE $top/$skip — what `$count=true` reports. */
|
|
85
|
+
matched: number;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Apply the parsed query. `RowId` is assigned before filtering, so a row keeps the same key whatever
|
|
89
|
+
* a client asks for — a key that shifted with the query would make the entity identity meaningless.
|
|
90
|
+
*/
|
|
91
|
+
export declare function applyQuery(rows: Array<Record<string, unknown>>, q: ParsedQuery, schema: TableSchema): QueryPage;
|
|
92
|
+
//# sourceMappingURL=odata.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"odata.d.ts","sourceRoot":"","sources":["../../../../src/services/datapackage/odata.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,OAAO,KAAK,EAAE,UAAU,EAAiC,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5F,+FAA+F;AAC/F,eAAO,MAAM,eAAe,mFAAoF,CAAC;AAajH;;qGAEqG;AACrG,eAAO,MAAM,OAAO,UAAU,CAAC;AAQ/B;;6FAE6F;AAC7F,wBAAgB,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAG3C;AAED;;;;;;GAMG;AACH,wBAAgB,MAAM,CAAC,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAqBxE;AAeD,MAAM,WAAW,UAAU;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,EAAE,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,UAAU,GAAG,YAAY,GAAG,UAAU,CAAC;IACrF,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC;CAC3C;AAED,MAAM,WAAW,WAAW;IACxB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,+FAA+F;IAC/F,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB,OAAO,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;IACjD,KAAK,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,MAAM,WAAW,GACjB;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,WAAW,CAAA;CAAE,GAChC;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,IAAI,EAAE,iBAAiB,GAAG,aAAa,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAiB9E;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,eAAe,EAAE,MAAM,EAAE,WAAW,GAAG,WAAW,CAsFpF;AAmDD,MAAM,WAAW,SAAS;IACtB,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACrC,gFAAgF;IAChF,OAAO,EAAE,MAAM,CAAC;CACnB;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,WAAW,EAAE,MAAM,EAAE,WAAW,GAAG,SAAS,CAqB/G"}
|