aimeat 2.1.0 → 2.2.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 +9 -4
- package/dist/locales/en.json +28 -0
- package/dist/locales/fi.json +28 -0
- package/dist/public/cortex-bundled/aimeat-charts.js +158 -10
- package/dist/public/cortex-bundled/aimeat-charts.yaml +1 -1
- package/dist/public/cortex-bundled/aimeat-dag.js +515 -173
- package/dist/public/cortex-bundled/aimeat-dag.yaml +1 -1
- package/dist/public/cortex-bundled/aimeat-i18n.js +6 -1
- package/dist/public/cortex-bundled/aimeat-i18n.yaml +1 -1
- package/dist/public/cortex-bundled/aimeat-surface.js +577 -0
- package/dist/public/cortex-bundled/aimeat-surface.yaml +107 -0
- package/dist/public/cortex-bundled/aimeat-viewport.js +405 -0
- package/dist/public/cortex-bundled/aimeat-viewport.yaml +100 -0
- package/dist/public/css/views/inbox.css +1 -1
- package/dist/public/css/views/profile.css +9 -0
- package/dist/public/lib/VENDORED.md +6 -3
- package/dist/public/lib/aimeat-daisyui-bridge.css +39 -2
- package/dist/public/lib/aimeat-theme.css +538 -0
- package/dist/public/lib/fonts/LICENSE.md +11 -4
- package/dist/public/lib/fonts/fraunces-var-latin-ext.woff2 +0 -0
- package/dist/public/lib/fonts/fraunces-var-latin.woff2 +0 -0
- package/dist/public/lib/fonts/inter-var-latin-ext.woff2 +0 -0
- package/dist/public/lib/fonts/inter-var-latin.woff2 +0 -0
- package/dist/public/lib/fonts/jetbrains-mono-var-latin-ext.woff2 +0 -0
- package/dist/public/lib/fonts/jetbrains-mono-var-latin.woff2 +0 -0
- package/dist/public/lib/fonts/space-grotesk-var-latin-ext.woff2 +0 -0
- package/dist/public/lib/fonts/space-grotesk-var-latin.woff2 +0 -0
- package/dist/public/lib/samples/theme-check.html +92 -0
- package/dist/public/lib/samples/themes-boot.js +20 -0
- package/dist/public/lib/samples/themes.html +154 -0
- package/dist/public/lib/samples/themes.js +60 -0
- package/dist/public/views/profile/access-tab/connected-apps.js +81 -5
- package/dist/public/views/profile/extensions-tab.maturity.js +4 -1
- package/dist/public/views/profile/inbox-tab/components.js +17 -1
- package/dist/public/views/profile/inbox-tab/use-thread-ux.js +29 -2
- package/dist/public/views/profile/libraries-tab.js +10 -2
- package/dist/public/views/profile/wallet-tab.js +64 -0
- package/dist/scripts/check-openapi.d.ts +2 -0
- package/dist/scripts/check-openapi.d.ts.map +1 -0
- package/dist/scripts/check-openapi.js +139 -0
- package/dist/scripts/check-openapi.js.map +1 -0
- package/dist/scripts/embed-viewport.d.ts +23 -0
- package/dist/scripts/embed-viewport.d.ts.map +1 -0
- package/dist/scripts/embed-viewport.js +116 -0
- package/dist/scripts/embed-viewport.js.map +1 -0
- package/dist/src/auth/sse-domain-scopes.d.ts +50 -0
- package/dist/src/auth/sse-domain-scopes.d.ts.map +1 -0
- package/dist/src/auth/sse-domain-scopes.js +111 -0
- package/dist/src/auth/sse-domain-scopes.js.map +1 -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 +4 -1
- package/dist/src/cli/connect/mcp/tools/agent-tasks.js.map +1 -1
- package/dist/src/cli/connect/mcp/tools/core.d.ts.map +1 -1
- package/dist/src/cli/connect/mcp/tools/core.js +14 -3
- package/dist/src/cli/connect/mcp/tools/core.js.map +1 -1
- package/dist/src/cli/connect/mcp/tools/workspaces.d.ts +3 -0
- package/dist/src/cli/connect/mcp/tools/workspaces.d.ts.map +1 -1
- package/dist/src/cli/connect/mcp/tools/workspaces.js +4 -2
- package/dist/src/cli/connect/mcp/tools/workspaces.js.map +1 -1
- package/dist/src/cli/connect/tool-call-defs-core.d.ts.map +1 -1
- package/dist/src/cli/connect/tool-call-defs-core.js +13 -1
- package/dist/src/cli/connect/tool-call-defs-core.js.map +1 -1
- package/dist/src/commerce/__tests__/x402-registry.test.d.ts +2 -0
- package/dist/src/commerce/__tests__/x402-registry.test.d.ts.map +1 -0
- package/dist/src/commerce/__tests__/x402-registry.test.js +105 -0
- package/dist/src/commerce/__tests__/x402-registry.test.js.map +1 -0
- package/dist/src/commerce/evm-address.d.ts +21 -0
- package/dist/src/commerce/evm-address.d.ts.map +1 -0
- package/dist/src/commerce/evm-address.js +94 -0
- package/dist/src/commerce/evm-address.js.map +1 -0
- package/dist/src/commerce/money.d.ts +18 -5
- package/dist/src/commerce/money.d.ts.map +1 -1
- package/dist/src/commerce/money.js +27 -6
- package/dist/src/commerce/money.js.map +1 -1
- package/dist/src/commerce/x402-facilitator.d.ts +64 -13
- package/dist/src/commerce/x402-facilitator.d.ts.map +1 -1
- package/dist/src/commerce/x402-facilitator.js +71 -19
- package/dist/src/commerce/x402-facilitator.js.map +1 -1
- package/dist/src/commerce/x402-handler.d.ts +13 -7
- package/dist/src/commerce/x402-handler.d.ts.map +1 -1
- package/dist/src/commerce/x402-handler.js +23 -10
- package/dist/src/commerce/x402-handler.js.map +1 -1
- package/dist/src/commerce/x402.d.ts +11 -6
- package/dist/src/commerce/x402.d.ts.map +1 -1
- package/dist/src/commerce/x402.js +10 -7
- package/dist/src/commerce/x402.js.map +1 -1
- package/dist/src/config-types.d.ts +12 -0
- package/dist/src/config-types.d.ts.map +1 -1
- package/dist/src/config.d.ts.map +1 -1
- package/dist/src/config.js +8 -0
- package/dist/src/config.js.map +1 -1
- package/dist/src/data/app-templates/shells.d.ts +11 -3
- package/dist/src/data/app-templates/shells.d.ts.map +1 -1
- package/dist/src/data/app-templates/shells.js +87 -6
- package/dist/src/data/app-templates/shells.js.map +1 -1
- package/dist/src/data/app-templates.js +2 -2
- package/dist/src/data/app-templates.js.map +1 -1
- package/dist/src/data/library-packs/cortex.d.ts.map +1 -1
- package/dist/src/data/library-packs/cortex.js +108 -5
- package/dist/src/data/library-packs/cortex.js.map +1 -1
- package/dist/src/data/library-packs/sdk.d.ts.map +1 -1
- package/dist/src/data/library-packs/sdk.js +32 -8
- 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 +83 -6
- package/dist/src/data/library-packs/vendored.js.map +1 -1
- package/dist/src/generated/api-types.d.ts +478 -19
- package/dist/src/generated/api-types.d.ts.map +1 -1
- package/dist/src/mcp/agent-tasks.d.ts +4 -0
- package/dist/src/mcp/agent-tasks.d.ts.map +1 -1
- package/dist/src/mcp/agent-tasks.js +20 -2
- package/dist/src/mcp/agent-tasks.js.map +1 -1
- package/dist/src/mcp/capabilities.d.ts +7 -1
- package/dist/src/mcp/capabilities.d.ts.map +1 -1
- package/dist/src/mcp/capabilities.js +5 -2
- package/dist/src/mcp/capabilities.js.map +1 -1
- package/dist/src/mcp/catalog/definitions/commerce.d.ts.map +1 -1
- package/dist/src/mcp/catalog/definitions/commerce.js +4 -2
- package/dist/src/mcp/catalog/definitions/commerce.js.map +1 -1
- package/dist/src/mcp/catalog/definitions/discovery-work-boards.d.ts.map +1 -1
- package/dist/src/mcp/catalog/definitions/discovery-work-boards.js +4 -3
- package/dist/src/mcp/catalog/definitions/discovery-work-boards.js.map +1 -1
- package/dist/src/mcp/catalog/definitions/organisms-workspaces-apps.js +1 -1
- 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 +3 -2
- package/dist/src/mcp/catalog/definitions/schedules-tasks-memory.js.map +1 -1
- package/dist/src/mcp/catalog/output-schemas.d.ts +6 -1
- package/dist/src/mcp/catalog/output-schemas.d.ts.map +1 -1
- package/dist/src/mcp/catalog/output-schemas.js +6 -1
- package/dist/src/mcp/catalog/output-schemas.js.map +1 -1
- package/dist/src/mcp/commerce.d.ts.map +1 -1
- package/dist/src/mcp/commerce.js +15 -3
- package/dist/src/mcp/commerce.js.map +1 -1
- package/dist/src/mcp/core-storage.d.ts +23 -0
- package/dist/src/mcp/core-storage.d.ts.map +1 -0
- package/dist/src/mcp/core-storage.js +157 -0
- package/dist/src/mcp/core-storage.js.map +1 -0
- package/dist/src/mcp/core.d.ts +16 -0
- package/dist/src/mcp/core.d.ts.map +1 -1
- package/dist/src/mcp/core.js +75 -119
- package/dist/src/mcp/core.js.map +1 -1
- package/dist/src/mcp/dm-messages.d.ts +4 -0
- package/dist/src/mcp/dm-messages.d.ts.map +1 -1
- package/dist/src/mcp/dm-messages.js +43 -2
- package/dist/src/mcp/dm-messages.js.map +1 -1
- package/dist/src/mcp/exchange.d.ts.map +1 -1
- package/dist/src/mcp/exchange.js +3 -2
- package/dist/src/mcp/exchange.js.map +1 -1
- package/dist/src/mcp/extensions.d.ts.map +1 -1
- package/dist/src/mcp/extensions.js +6 -2
- package/dist/src/mcp/extensions.js.map +1 -1
- package/dist/src/mcp/index.d.ts +5 -0
- package/dist/src/mcp/index.d.ts.map +1 -1
- package/dist/src/mcp/index.js +23 -4
- package/dist/src/mcp/index.js.map +1 -1
- package/dist/src/mcp/memory-namespace-hints.d.ts +33 -0
- package/dist/src/mcp/memory-namespace-hints.d.ts.map +1 -0
- package/dist/src/mcp/memory-namespace-hints.js +60 -0
- package/dist/src/mcp/memory-namespace-hints.js.map +1 -0
- package/dist/src/mcp/workspaces.d.ts +5 -0
- package/dist/src/mcp/workspaces.d.ts.map +1 -1
- package/dist/src/mcp/workspaces.js +5 -3
- package/dist/src/mcp/workspaces.js.map +1 -1
- package/dist/src/models/agent-task-schemas.d.ts +25 -3
- package/dist/src/models/agent-task-schemas.d.ts.map +1 -1
- package/dist/src/models/agent-task-schemas.js +16 -0
- package/dist/src/models/agent-task-schemas.js.map +1 -1
- package/dist/src/models/app-tool-schemas.d.ts +518 -1
- package/dist/src/models/app-tool-schemas.d.ts.map +1 -1
- package/dist/src/models/app-tool-schemas.js +53 -1
- package/dist/src/models/app-tool-schemas.js.map +1 -1
- package/dist/src/models/odps-schemas.d.ts +305 -0
- package/dist/src/models/odps-schemas.d.ts.map +1 -0
- package/dist/src/models/odps-schemas.js +182 -0
- package/dist/src/models/odps-schemas.js.map +1 -0
- package/dist/src/models/offer-schemas.d.ts +357 -2
- package/dist/src/models/offer-schemas.d.ts.map +1 -1
- package/dist/src/models/offer-schemas.js +37 -0
- package/dist/src/models/offer-schemas.js.map +1 -1
- package/dist/src/models/schemas.d.ts +6 -3
- package/dist/src/models/schemas.d.ts.map +1 -1
- package/dist/src/models/schemas.js +10 -1
- package/dist/src/models/schemas.js.map +1 -1
- package/dist/src/models/webhook-schemas.d.ts +8 -8
- package/dist/src/routes/agent-tasks/create-read.d.ts +4 -0
- package/dist/src/routes/agent-tasks/create-read.d.ts.map +1 -1
- package/dist/src/routes/agent-tasks/create-read.js +20 -1
- package/dist/src/routes/agent-tasks/create-read.js.map +1 -1
- package/dist/src/routes/agent-tasks/lifecycle.d.ts.map +1 -1
- package/dist/src/routes/agent-tasks/lifecycle.js +10 -0
- package/dist/src/routes/agent-tasks/lifecycle.js.map +1 -1
- package/dist/src/routes/agents/offers.d.ts +2 -0
- package/dist/src/routes/agents/offers.d.ts.map +1 -1
- package/dist/src/routes/agents/offers.js +0 -0
- package/dist/src/routes/agents/offers.js.map +1 -1
- package/dist/src/routes/app-grants.d.ts +6 -0
- package/dist/src/routes/app-grants.d.ts.map +1 -1
- package/dist/src/routes/app-grants.js +55 -25
- package/dist/src/routes/app-grants.js.map +1 -1
- package/dist/src/routes/apps/drafts.d.ts +3 -0
- package/dist/src/routes/apps/drafts.d.ts.map +1 -1
- package/dist/src/routes/apps/drafts.js +63 -1
- package/dist/src/routes/apps/drafts.js.map +1 -1
- package/dist/src/routes/apps/publish.d.ts +2 -0
- package/dist/src/routes/apps/publish.d.ts.map +1 -1
- package/dist/src/routes/apps/publish.js +17 -2
- package/dist/src/routes/apps/publish.js.map +1 -1
- package/dist/src/routes/commerce.d.ts.map +1 -1
- package/dist/src/routes/commerce.js +122 -2
- package/dist/src/routes/commerce.js.map +1 -1
- package/dist/src/routes/exchange-market.d.ts +6 -2
- package/dist/src/routes/exchange-market.d.ts.map +1 -1
- package/dist/src/routes/exchange-market.js +154 -28
- package/dist/src/routes/exchange-market.js.map +1 -1
- package/dist/src/routes/exchange.d.ts.map +1 -1
- package/dist/src/routes/exchange.js +5 -2
- package/dist/src/routes/exchange.js.map +1 -1
- package/dist/src/routes/extensions/actions.d.ts.map +1 -1
- package/dist/src/routes/extensions/actions.js +18 -0
- package/dist/src/routes/extensions/actions.js.map +1 -1
- package/dist/src/routes/extensions/crud.d.ts.map +1 -1
- package/dist/src/routes/extensions/crud.js +36 -3
- package/dist/src/routes/extensions/crud.js.map +1 -1
- package/dist/src/routes/extensions/entitlement-gate.d.ts.map +1 -1
- package/dist/src/routes/extensions/entitlement-gate.js +13 -0
- package/dist/src/routes/extensions/entitlement-gate.js.map +1 -1
- package/dist/src/routes/extensions/manifest.d.ts +6 -0
- package/dist/src/routes/extensions/manifest.d.ts.map +1 -1
- package/dist/src/routes/extensions/manifest.js +68 -1
- package/dist/src/routes/extensions/manifest.js.map +1 -1
- package/dist/src/routes/extensions/pacing.d.ts +31 -0
- package/dist/src/routes/extensions/pacing.d.ts.map +1 -0
- package/dist/src/routes/extensions/pacing.js +73 -0
- package/dist/src/routes/extensions/pacing.js.map +1 -0
- package/dist/src/routes/extensions/paywall.d.ts.map +1 -1
- package/dist/src/routes/extensions/paywall.js +17 -17
- package/dist/src/routes/extensions/paywall.js.map +1 -1
- package/dist/src/routes/memory/crud.d.ts.map +1 -1
- package/dist/src/routes/memory/crud.js +10 -0
- package/dist/src/routes/memory/crud.js.map +1 -1
- package/dist/src/routes/organisms/crud.d.ts +3 -0
- package/dist/src/routes/organisms/crud.d.ts.map +1 -1
- package/dist/src/routes/organisms/crud.js +5 -2
- package/dist/src/routes/organisms/crud.js.map +1 -1
- package/dist/src/routes/organisms/workspace-read.d.ts.map +1 -1
- package/dist/src/routes/organisms/workspace-read.js +7 -2
- package/dist/src/routes/organisms/workspace-read.js.map +1 -1
- package/dist/src/routes/public-stats.d.ts +7 -0
- package/dist/src/routes/public-stats.d.ts.map +1 -1
- package/dist/src/routes/public-stats.js +28 -7
- package/dist/src/routes/public-stats.js.map +1 -1
- package/dist/src/routes/sse.d.ts +7 -0
- package/dist/src/routes/sse.d.ts.map +1 -1
- package/dist/src/routes/sse.js +36 -6
- package/dist/src/routes/sse.js.map +1 -1
- package/dist/src/routes/storage-files.d.ts +11 -0
- package/dist/src/routes/storage-files.d.ts.map +1 -1
- package/dist/src/routes/storage-files.js +58 -51
- package/dist/src/routes/storage-files.js.map +1 -1
- package/dist/src/routes/subdomains.d.ts +4 -0
- package/dist/src/routes/subdomains.d.ts.map +1 -1
- package/dist/src/routes/subdomains.js +42 -5
- package/dist/src/routes/subdomains.js.map +1 -1
- package/dist/src/routes/upload.d.ts +11 -0
- package/dist/src/routes/upload.d.ts.map +1 -1
- package/dist/src/routes/upload.js +108 -28
- package/dist/src/routes/upload.js.map +1 -1
- package/dist/src/routes/webmcp.d.ts.map +1 -1
- package/dist/src/routes/webmcp.js +4 -0
- package/dist/src/routes/webmcp.js.map +1 -1
- package/dist/src/schemas/knowledge-package.d.ts +1 -1
- package/dist/src/server-bootstrap/static-files.d.ts +4 -0
- package/dist/src/server-bootstrap/static-files.d.ts.map +1 -1
- package/dist/src/server-bootstrap/static-files.js +11 -0
- package/dist/src/server-bootstrap/static-files.js.map +1 -1
- package/dist/src/services/build-app-prompt.d.ts +19 -0
- package/dist/src/services/build-app-prompt.d.ts.map +1 -1
- package/dist/src/services/build-app-prompt.js +97 -11
- package/dist/src/services/build-app-prompt.js.map +1 -1
- package/dist/src/services/call-timing.d.ts +51 -0
- package/dist/src/services/call-timing.d.ts.map +1 -0
- package/dist/src/services/call-timing.js +91 -0
- package/dist/src/services/call-timing.js.map +1 -0
- package/dist/src/services/capability-invoke.d.ts +2 -0
- package/dist/src/services/capability-invoke.d.ts.map +1 -1
- package/dist/src/services/capability-invoke.js +10 -0
- package/dist/src/services/capability-invoke.js.map +1 -1
- package/dist/src/services/config-schema.d.ts.map +1 -1
- package/dist/src/services/config-schema.js +6 -0
- package/dist/src/services/config-schema.js.map +1 -1
- package/dist/src/services/draft-token.d.ts +22 -2
- package/dist/src/services/draft-token.d.ts.map +1 -1
- package/dist/src/services/draft-token.js +52 -3
- package/dist/src/services/draft-token.js.map +1 -1
- package/dist/src/services/exchange-market.d.ts +41 -8
- package/dist/src/services/exchange-market.d.ts.map +1 -1
- package/dist/src/services/exchange-market.js +24 -2
- package/dist/src/services/exchange-market.js.map +1 -1
- package/dist/src/services/exchange-odps.d.ts +58 -0
- package/dist/src/services/exchange-odps.d.ts.map +1 -0
- package/dist/src/services/exchange-odps.js +400 -0
- package/dist/src/services/exchange-odps.js.map +1 -0
- package/dist/src/services/exchange-projection.d.ts +61 -0
- package/dist/src/services/exchange-projection.d.ts.map +1 -0
- package/dist/src/services/exchange-projection.js +504 -0
- package/dist/src/services/exchange-projection.js.map +1 -0
- package/dist/src/services/exchange-proposals.d.ts.map +1 -1
- package/dist/src/services/exchange-proposals.js +2 -0
- package/dist/src/services/exchange-proposals.js.map +1 -1
- package/dist/src/services/extension-files.d.ts +64 -0
- package/dist/src/services/extension-files.d.ts.map +1 -0
- package/dist/src/services/extension-files.js +88 -0
- package/dist/src/services/extension-files.js.map +1 -0
- package/dist/src/services/extension-runtime.d.ts +33 -0
- package/dist/src/services/extension-runtime.d.ts.map +1 -1
- package/dist/src/services/extension-runtime.js +52 -0
- package/dist/src/services/extension-runtime.js.map +1 -1
- package/dist/src/services/file-refs.d.ts +105 -0
- package/dist/src/services/file-refs.d.ts.map +1 -0
- package/dist/src/services/file-refs.js +106 -0
- package/dist/src/services/file-refs.js.map +1 -0
- package/dist/src/services/metered-entitlements.d.ts +7 -0
- package/dist/src/services/metered-entitlements.d.ts.map +1 -1
- package/dist/src/services/metered-entitlements.js +4 -0
- package/dist/src/services/metered-entitlements.js.map +1 -1
- package/dist/src/services/owner-memory.d.ts +14 -1
- package/dist/src/services/owner-memory.d.ts.map +1 -1
- package/dist/src/services/owner-memory.js +8 -14
- package/dist/src/services/owner-memory.js.map +1 -1
- package/dist/src/services/task-files.d.ts +51 -0
- package/dist/src/services/task-files.d.ts.map +1 -0
- package/dist/src/services/task-files.js +58 -0
- package/dist/src/services/task-files.js.map +1 -0
- package/dist/src/services/upload-token.d.ts +29 -0
- package/dist/src/services/upload-token.d.ts.map +1 -1
- package/dist/src/services/upload-token.js +37 -0
- package/dist/src/services/upload-token.js.map +1 -1
- package/dist/src/services/upload-zip.d.ts +2 -0
- package/dist/src/services/upload-zip.d.ts.map +1 -1
- package/dist/src/services/upload-zip.js +5 -1
- package/dist/src/services/upload-zip.js.map +1 -1
- package/dist/src/services/workspace-meta.d.ts +15 -0
- package/dist/src/services/workspace-meta.d.ts.map +1 -1
- package/dist/src/services/workspace-meta.js +17 -0
- package/dist/src/services/workspace-meta.js.map +1 -1
- package/dist/src/services/workspace-provision.d.ts +3 -0
- package/dist/src/services/workspace-provision.d.ts.map +1 -1
- package/dist/src/services/workspace-provision.js +5 -3
- package/dist/src/services/workspace-provision.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 +10 -0
- package/dist/src/storage/providers/postgres-kysely/methods/app-grants.js.map +1 -1
- package/dist/src/storage/providers/postgres-kysely/methods/memory.d.ts +2 -0
- package/dist/src/storage/providers/postgres-kysely/methods/memory.d.ts.map +1 -1
- package/dist/src/storage/providers/postgres-kysely/methods/memory.js +12 -1
- package/dist/src/storage/providers/postgres-kysely/methods/memory.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 +5 -1
- package/dist/src/storage/providers/postgres-kysely/methods/organisms.js.map +1 -1
- package/dist/src/storage/providers/postgres-kysely/migrations/0012_unique_live_app_grant.sql +29 -0
- package/dist/src/storage/providers/sqlite/methods/apps.d.ts +3 -0
- package/dist/src/storage/providers/sqlite/methods/apps.d.ts.map +1 -1
- package/dist/src/storage/providers/sqlite/methods/apps.js +7 -0
- package/dist/src/storage/providers/sqlite/methods/apps.js.map +1 -1
- package/dist/src/storage/providers/sqlite/methods/governance.d.ts +1 -0
- package/dist/src/storage/providers/sqlite/methods/governance.d.ts.map +1 -1
- package/dist/src/storage/providers/sqlite/methods/governance.js +4 -1
- package/dist/src/storage/providers/sqlite/methods/governance.js.map +1 -1
- package/dist/src/storage/providers/sqlite/methods/owner.d.ts +5 -0
- package/dist/src/storage/providers/sqlite/methods/owner.d.ts.map +1 -1
- package/dist/src/storage/providers/sqlite/methods/owner.js +8 -0
- package/dist/src/storage/providers/sqlite/methods/owner.js.map +1 -1
- package/dist/src/storage/providers/sqlite/schema.d.ts +3 -0
- package/dist/src/storage/providers/sqlite/schema.d.ts.map +1 -1
- package/dist/src/storage/providers/sqlite/schema.js +20 -0
- package/dist/src/storage/providers/sqlite/schema.js.map +1 -1
- package/dist/src/storage/repositories/app-grant.repository.d.ts +9 -1
- package/dist/src/storage/repositories/app-grant.repository.d.ts.map +1 -1
- package/dist/src/storage/repositories/memory.repository.d.ts +14 -0
- package/dist/src/storage/repositories/memory.repository.d.ts.map +1 -1
- package/dist/src/storage/repositories-impl/memory-repository.d.ts +8 -1
- package/dist/src/storage/repositories-impl/memory-repository.d.ts.map +1 -1
- package/dist/src/storage/repositories-impl/memory-repository.js +15 -4
- package/dist/src/storage/repositories-impl/memory-repository.js.map +1 -1
- package/dist/src/storage/types/agents-messaging.d.ts +19 -0
- package/dist/src/storage/types/agents-messaging.d.ts.map +1 -1
- package/dist/src/storage/types/agents-messaging.js.map +1 -1
- package/dist/src/storage/types/organisms-federation.d.ts +29 -0
- package/dist/src/storage/types/organisms-federation.d.ts.map +1 -1
- package/dist/src/utils/app-badge.d.ts.map +1 -1
- package/dist/src/utils/app-badge.js +7 -3
- package/dist/src/utils/app-badge.js.map +1 -1
- package/dist/static/app-catalog/_template.html +6 -5
- package/dist/static/app-catalog/js/cortex.js +3 -1
- package/dist/static/app-catalog/js/detail.js +411 -36
- package/dist/static/app-catalog/js/i18n-data.js +279 -3
- package/dist/static/app-catalog/js/main.js +28 -37
- package/dist/static/app-catalog/js/monetize.js +204 -16
- package/dist/static/app-catalog/js/odps.js +489 -0
- package/dist/static/app-catalog/js/render.js +3 -0
- package/dist/static/app-catalog/js/workcopy.js +198 -0
- package/dist/static/app-catalog/styles/app-catalog.css +60 -0
- package/dist/static/app-catalog.html +1450 -137
- package/dist/static/sdk-libs/agents/index.js +45 -7
- package/dist/static/sdk-libs/auth/cluster.js +97 -0
- package/dist/static/sdk-libs/auth/index.js +25 -1
- package/dist/static/sdk-libs/auth/locale.js +151 -0
- package/dist/static/sdk-libs/auth/modal.js +11 -2
- package/dist/static/sdk-libs/auth/palette.js +172 -0
- package/dist/static/sdk-libs/auth/pill.js +37 -6
- package/dist/static/sdk-libs/auth/theme.js +61 -20
- package/dist/static/sdk-libs/data/index.js +70 -8
- package/dist/static/sdk-libs/dist/aimeat-agents.js +41 -8
- package/dist/static/sdk-libs/dist/aimeat-auth.js +422 -21
- package/dist/static/sdk-libs/dist/aimeat-data.js +50 -8
- package/dist/static/sdk-libs/dist/aimeat-live.js +54 -2
- package/dist/static/sdk-libs/dist/aimeat-markdown.js +32 -1
- package/dist/static/sdk-libs/live/index.js +71 -4
- package/dist/static/sdk-libs/markdown/index.js +49 -1
- package/package.json +6 -2
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file src/services/extension-files.ts
|
|
3
|
+
* @description The file half of the extension sandbox: ctx.files.read / ctx.files.write. An
|
|
4
|
+
* extension could hold memory records and make outbound text requests, and had no way to touch a
|
|
5
|
+
* stored FILE — so every capability that works on bytes (an image, a PDF, an audio clip) had to
|
|
6
|
+
* take base64 in its arguments and hand base64 back in its result. ctx.fetch cannot stand in for
|
|
7
|
+
* it either: it answers with `text`, so binary read through it is corrupt by construction.
|
|
8
|
+
*
|
|
9
|
+
* Two rules make this safe to hand to sandboxed code:
|
|
10
|
+
* READ — authorized as the CALLER, through the same authorizeRead() the /v1/pub route uses. An
|
|
11
|
+
* extension can read exactly what the person invoking it could read, never more.
|
|
12
|
+
* WRITE — lands in the caller's own storage under a reserved `ext/{name}/` prefix. The result
|
|
13
|
+
* belongs to the person who paid for it and shows up in their files, and no extension
|
|
14
|
+
* can overwrite something they wrote themselves.
|
|
15
|
+
* Both are size-capped before any base64 crosses the QuickJS bridge, and a write goes through the
|
|
16
|
+
* ordinary per-file limit and storage quota.
|
|
17
|
+
* @structure MAX_FILE_BYTES · parseRef · makeExtensionFiles (the ctx.files factory)
|
|
18
|
+
* @usage const files = makeExtensionFiles({ config, storage, callerGaii, extName });
|
|
19
|
+
* const ctx: ExtensionCtx = { …, files };
|
|
20
|
+
* @version-history
|
|
21
|
+
* v1.0.0 — 2026-07-26 — Initial: ctx.files.read/write so a capability can take a file REFERENCE
|
|
22
|
+
* instead of its bytes (image pipelines, MCP-safe handoff).
|
|
23
|
+
* v1.1.0 — 2026-07-26 — parseRef delegates to services/file-refs.ts: the same reference form now
|
|
24
|
+
* serves MCP tools, DM attachments and task attachments, and there is one implementation of it.
|
|
25
|
+
*/
|
|
26
|
+
import type { AimeatConfig } from '../config.js';
|
|
27
|
+
import type { Storage } from '../storage/interface.js';
|
|
28
|
+
import { parseFileRef } from './file-refs.js';
|
|
29
|
+
/** What may cross the sandbox bridge in one call, in decoded bytes. */
|
|
30
|
+
export declare const MAX_EXT_FILE_BYTES: number;
|
|
31
|
+
export interface ExtensionFileRef {
|
|
32
|
+
/** "<gaii>/<key>", or a bare key meaning the caller's own storage. */
|
|
33
|
+
ref: string;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Split "<gaii>/<key>" into its parts. A GAII always carries an @node, so the first path segment
|
|
37
|
+
* is an owner only when it looks like one; anything else is a plain key belonging to the caller.
|
|
38
|
+
* Kept as a named export here (the sandbox's vocabulary) over the shared implementation.
|
|
39
|
+
*/
|
|
40
|
+
export declare const parseRef: typeof parseFileRef;
|
|
41
|
+
export declare function makeExtensionFiles(deps: {
|
|
42
|
+
config: AimeatConfig;
|
|
43
|
+
storage: Storage;
|
|
44
|
+
callerGaii: string;
|
|
45
|
+
callerOwner?: string;
|
|
46
|
+
extName: string;
|
|
47
|
+
}): {
|
|
48
|
+
read(ref: string): Promise<{
|
|
49
|
+
base64: string;
|
|
50
|
+
mime: string;
|
|
51
|
+
size: number;
|
|
52
|
+
key: string;
|
|
53
|
+
} | null>;
|
|
54
|
+
write(key: string, base64: string, opts?: {
|
|
55
|
+
mime?: string;
|
|
56
|
+
visibility?: string;
|
|
57
|
+
}): Promise<{
|
|
58
|
+
key: string;
|
|
59
|
+
gaii: string;
|
|
60
|
+
url: string;
|
|
61
|
+
size: number;
|
|
62
|
+
}>;
|
|
63
|
+
};
|
|
64
|
+
//# sourceMappingURL=extension-files.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extension-files.d.ts","sourceRoot":"","sources":["../../../src/services/extension-files.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAEvD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAG9C,uEAAuE;AACvE,eAAO,MAAM,kBAAkB,QAAkB,CAAC;AAElD,MAAM,WAAW,gBAAgB;IAC7B,sEAAsE;IACtE,GAAG,EAAE,MAAM,CAAC;CACf;AAED;;;;GAIG;AACH,eAAO,MAAM,QAAQ,qBAAe,CAAC;AAErC,wBAAgB,kBAAkB,CAAC,IAAI,EAAE;IACrC,MAAM,EAAE,YAAY,CAAC;IACrB,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;CACnB,GAAG;IACA,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC,CAAC;IAC/F,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE,GAC5E,OAAO,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACzE,CA2EA"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import { authorizeRead } from './access-guard.js';
|
|
2
|
+
import { parseFileRef } from './file-refs.js';
|
|
3
|
+
import { checkStorageQuota } from './quota.js';
|
|
4
|
+
/** What may cross the sandbox bridge in one call, in decoded bytes. */
|
|
5
|
+
export const MAX_EXT_FILE_BYTES = 8 * 1024 * 1024;
|
|
6
|
+
/**
|
|
7
|
+
* Split "<gaii>/<key>" into its parts. A GAII always carries an @node, so the first path segment
|
|
8
|
+
* is an owner only when it looks like one; anything else is a plain key belonging to the caller.
|
|
9
|
+
* Kept as a named export here (the sandbox's vocabulary) over the shared implementation.
|
|
10
|
+
*/
|
|
11
|
+
export const parseRef = parseFileRef;
|
|
12
|
+
export function makeExtensionFiles(deps) {
|
|
13
|
+
const { config, storage, callerGaii, callerOwner, extName } = deps;
|
|
14
|
+
return {
|
|
15
|
+
async read(ref) {
|
|
16
|
+
const { gaii, key } = parseRef(String(ref || ''), callerGaii);
|
|
17
|
+
if (!key)
|
|
18
|
+
return null;
|
|
19
|
+
const file = await storage.getStorageFile(gaii, key);
|
|
20
|
+
if (!file)
|
|
21
|
+
return null;
|
|
22
|
+
// The extension reads AS the caller. A capability must never become a way to see a file
|
|
23
|
+
// the person invoking it could not open themselves.
|
|
24
|
+
const decision = await authorizeRead(storage, config, {
|
|
25
|
+
ownerGaii: gaii,
|
|
26
|
+
accessorGaii: callerGaii,
|
|
27
|
+
resourceKey: `storage:${key}`,
|
|
28
|
+
visibility: file.visibility,
|
|
29
|
+
groupId: file.groupId,
|
|
30
|
+
workspaceRef: file.workspaceRef,
|
|
31
|
+
accessorSub: callerGaii,
|
|
32
|
+
accessorOwner: callerOwner,
|
|
33
|
+
action: 'read',
|
|
34
|
+
});
|
|
35
|
+
if (!decision.allowed) {
|
|
36
|
+
throw new Error(`Access denied for ${gaii}/${key}: ${decision.reason ?? 'not permitted'}`);
|
|
37
|
+
}
|
|
38
|
+
if (file.size > MAX_EXT_FILE_BYTES) {
|
|
39
|
+
throw new Error(`File ${key} is ${Math.round(file.size / 1024)} kB, over the ${MAX_EXT_FILE_BYTES / 1024 / 1024} MB sandbox limit`);
|
|
40
|
+
}
|
|
41
|
+
return {
|
|
42
|
+
base64: Buffer.from(file.data).toString('base64'),
|
|
43
|
+
mime: file.mimeType,
|
|
44
|
+
size: file.size,
|
|
45
|
+
key: `${gaii}/${key}`,
|
|
46
|
+
};
|
|
47
|
+
},
|
|
48
|
+
async write(key, base64, opts) {
|
|
49
|
+
const clean = String(key || '').replace(/^\/+/, '').trim();
|
|
50
|
+
if (!clean)
|
|
51
|
+
throw new Error('write() needs a key');
|
|
52
|
+
// Reserved prefix: the result is attributable to the extension that made it, and no
|
|
53
|
+
// extension can land on top of a file the owner wrote by hand.
|
|
54
|
+
const full = clean.startsWith(`ext/${extName}/`) ? clean : `ext/${extName}/${clean}`;
|
|
55
|
+
const data = Buffer.from(String(base64 || '').replace(/^data:[^;]+;base64,/, ''), 'base64');
|
|
56
|
+
if (!data.length)
|
|
57
|
+
throw new Error('write() got no bytes');
|
|
58
|
+
if (data.length > MAX_EXT_FILE_BYTES) {
|
|
59
|
+
throw new Error(`Refusing ${Math.round(data.length / 1024)} kB: over the ${MAX_EXT_FILE_BYTES / 1024 / 1024} MB sandbox limit`);
|
|
60
|
+
}
|
|
61
|
+
if (data.length > config.storageMaxFileSizeMb * 1024 * 1024) {
|
|
62
|
+
throw new Error(`File size exceeds the node's ${config.storageMaxFileSizeMb}MB limit`);
|
|
63
|
+
}
|
|
64
|
+
const quota = await checkStorageQuota(config, storage, callerGaii, data.length);
|
|
65
|
+
if (!quota.allowed)
|
|
66
|
+
throw new Error(quota.reason ?? 'storage quota exceeded');
|
|
67
|
+
const visibility = opts?.visibility === 'public' ? 'public' : 'private';
|
|
68
|
+
await storage.createStorageFile({
|
|
69
|
+
key: full,
|
|
70
|
+
ownerGaii: callerGaii,
|
|
71
|
+
visibility,
|
|
72
|
+
mimeType: opts?.mime || 'application/octet-stream',
|
|
73
|
+
size: data.length,
|
|
74
|
+
data,
|
|
75
|
+
tags: [`ext:${extName}`],
|
|
76
|
+
createdAt: new Date().toISOString(),
|
|
77
|
+
});
|
|
78
|
+
return {
|
|
79
|
+
key: full,
|
|
80
|
+
gaii: callerGaii,
|
|
81
|
+
// Only meaningful for a public file; a private one is fetched with the owner's token.
|
|
82
|
+
url: `${config.baseUrl}/v1/pub/${encodeURIComponent(callerGaii)}/${full.split('/').map(encodeURIComponent).join('/')}`,
|
|
83
|
+
size: data.length,
|
|
84
|
+
};
|
|
85
|
+
},
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
//# sourceMappingURL=extension-files.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extension-files.js","sourceRoot":"","sources":["../../../src/services/extension-files.ts"],"names":[],"mappings":"AA2BA,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAE/C,uEAAuE;AACvE,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC;AAOlD;;;;GAIG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG,YAAY,CAAC;AAErC,MAAM,UAAU,kBAAkB,CAAC,IAMlC;IAKG,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IAEnE,OAAO;QACH,KAAK,CAAC,IAAI,CAAC,GAAG;YACV,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,QAAQ,CAAC,MAAM,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,UAAU,CAAC,CAAC;YAC9D,IAAI,CAAC,GAAG;gBAAE,OAAO,IAAI,CAAC;YACtB,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,cAAc,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;YACrD,IAAI,CAAC,IAAI;gBAAE,OAAO,IAAI,CAAC;YAEvB,wFAAwF;YACxF,oDAAoD;YACpD,MAAM,QAAQ,GAAG,MAAM,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE;gBAClD,SAAS,EAAE,IAAI;gBACf,YAAY,EAAE,UAAU;gBACxB,WAAW,EAAE,WAAW,GAAG,EAAE;gBAC7B,UAAU,EAAE,IAAI,CAAC,UAAU;gBAC3B,OAAO,EAAE,IAAI,CAAC,OAAO;gBACrB,YAAY,EAAE,IAAI,CAAC,YAAY;gBAC/B,WAAW,EAAE,UAAU;gBACvB,aAAa,EAAE,WAAW;gBAC1B,MAAM,EAAE,MAAM;aACjB,CAAC,CAAC;YACH,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;gBACpB,MAAM,IAAI,KAAK,CAAC,qBAAqB,IAAI,IAAI,GAAG,KAAK,QAAQ,CAAC,MAAM,IAAI,eAAe,EAAE,CAAC,CAAC;YAC/F,CAAC;YACD,IAAI,IAAI,CAAC,IAAI,GAAG,kBAAkB,EAAE,CAAC;gBACjC,MAAM,IAAI,KAAK,CAAC,QAAQ,GAAG,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,iBAAiB,kBAAkB,GAAG,IAAI,GAAG,IAAI,mBAAmB,CAAC,CAAC;YACxI,CAAC;YACD,OAAO;gBACH,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC;gBACjD,IAAI,EAAE,IAAI,CAAC,QAAQ;gBACnB,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,GAAG,EAAE,GAAG,IAAI,IAAI,GAAG,EAAE;aACxB,CAAC;QACN,CAAC;QAED,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI;YACzB,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;YAC3D,IAAI,CAAC,KAAK;gBAAE,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;YACnD,oFAAoF;YACpF,+DAA+D;YAC/D,MAAM,IAAI,GAAG,KAAK,CAAC,UAAU,CAAC,OAAO,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,OAAO,IAAI,KAAK,EAAE,CAAC;YAErF,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,qBAAqB,EAAE,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC;YAC5F,IAAI,CAAC,IAAI,CAAC,MAAM;gBAAE,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;YAC1D,IAAI,IAAI,CAAC,MAAM,GAAG,kBAAkB,EAAE,CAAC;gBACnC,MAAM,IAAI,KAAK,CAAC,YAAY,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,iBAAiB,kBAAkB,GAAG,IAAI,GAAG,IAAI,mBAAmB,CAAC,CAAC;YACpI,CAAC;YACD,IAAI,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,oBAAoB,GAAG,IAAI,GAAG,IAAI,EAAE,CAAC;gBAC1D,MAAM,IAAI,KAAK,CAAC,gCAAgC,MAAM,CAAC,oBAAoB,UAAU,CAAC,CAAC;YAC3F,CAAC;YACD,MAAM,KAAK,GAAG,MAAM,iBAAiB,CAAC,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;YAChF,IAAI,CAAC,KAAK,CAAC,OAAO;gBAAE,MAAM,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,IAAI,wBAAwB,CAAC,CAAC;YAE9E,MAAM,UAAU,GAAG,IAAI,EAAE,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;YACxE,MAAM,OAAO,CAAC,iBAAiB,CAAC;gBAC5B,GAAG,EAAE,IAAI;gBACT,SAAS,EAAE,UAAU;gBACrB,UAAU;gBACV,QAAQ,EAAE,IAAI,EAAE,IAAI,IAAI,0BAA0B;gBAClD,IAAI,EAAE,IAAI,CAAC,MAAM;gBACjB,IAAI;gBACJ,IAAI,EAAE,CAAC,OAAO,OAAO,EAAE,CAAC;gBACxB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;aACtC,CAAC,CAAC;YACH,OAAO;gBACH,GAAG,EAAE,IAAI;gBACT,IAAI,EAAE,UAAU;gBAChB,sFAAsF;gBACtF,GAAG,EAAE,GAAG,MAAM,CAAC,OAAO,WAAW,kBAAkB,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;gBACtH,IAAI,EAAE,IAAI,CAAC,MAAM;aACpB,CAAC;QACN,CAAC;KACJ,CAAC;AACN,CAAC"}
|
|
@@ -33,6 +33,25 @@ export interface ExtensionCtx {
|
|
|
33
33
|
text: string;
|
|
34
34
|
headers: Record<string, string>;
|
|
35
35
|
}>;
|
|
36
|
+
/** Stored FILES, by reference. Optional the way notify/email are: a context that cannot offer
|
|
37
|
+
* it (a scheduled run with no caller) simply does not, and the guest sees undefined. */
|
|
38
|
+
files?: {
|
|
39
|
+
read(ref: string): Promise<{
|
|
40
|
+
base64: string;
|
|
41
|
+
mime: string;
|
|
42
|
+
size: number;
|
|
43
|
+
key: string;
|
|
44
|
+
} | null>;
|
|
45
|
+
write(key: string, base64: string, opts?: {
|
|
46
|
+
mime?: string;
|
|
47
|
+
visibility?: string;
|
|
48
|
+
}): Promise<{
|
|
49
|
+
key: string;
|
|
50
|
+
gaii: string;
|
|
51
|
+
url: string;
|
|
52
|
+
size: number;
|
|
53
|
+
}>;
|
|
54
|
+
};
|
|
36
55
|
caller: {
|
|
37
56
|
gaii: string;
|
|
38
57
|
owner: string;
|
|
@@ -55,6 +74,20 @@ export interface ExtensionCtx {
|
|
|
55
74
|
}): Promise<boolean>;
|
|
56
75
|
email?(to: string, subject: string, body: string): Promise<boolean>;
|
|
57
76
|
}
|
|
77
|
+
/**
|
|
78
|
+
* The EXACT source of `ctx.hash`, exported so an app that must agree with an extension on a
|
|
79
|
+
* derived value can run the identical function in the browser.
|
|
80
|
+
*
|
|
81
|
+
* Why this exists: the sandbox has no `crypto.subtle`, so an extension author reaches for a
|
|
82
|
+
* hand-rolled hash while the browser side reaches for SHA-256, and the two silently disagree. That
|
|
83
|
+
* is not hypothetical — it shipped: an app and its extension hashed the same spreadsheet inputs
|
|
84
|
+
* differently, so every value the app computed looked stale to the server and would have been
|
|
85
|
+
* recomputed and re-charged forever. One published function, usable verbatim on both sides.
|
|
86
|
+
*
|
|
87
|
+
* FNV-1a style, 64 bits as two 32-bit lanes. Not cryptographic: use it for cache keys, change
|
|
88
|
+
* detection and content identity, never for signatures or secrets.
|
|
89
|
+
*/
|
|
90
|
+
export declare const EXT_HASH_REFERENCE_JS = "function aimeatHash(s) {\n s = String(s);\n var h1 = 0x811c9dc5, h2 = 0x01000193;\n for (var i = 0; i < s.length; i++) {\n var ch = s.charCodeAt(i);\n h1 = (h1 ^ ch) >>> 0; h1 = Math.imul(h1, 0x01000193) >>> 0;\n h2 = (h2 ^ (ch + i)) >>> 0; h2 = Math.imul(h2, 0x85ebca6b) >>> 0;\n }\n return ('00000000' + h1.toString(16)).slice(-8) + ('00000000' + h2.toString(16)).slice(-8);\n}";
|
|
58
91
|
export interface ExtensionLimits {
|
|
59
92
|
memoryMb: number;
|
|
60
93
|
timeoutMs: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"extension-runtime.d.ts","sourceRoot":"","sources":["../../../src/services/extension-runtime.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"extension-runtime.d.ts","sourceRoot":"","sources":["../../../src/services/extension-runtime.ts"],"names":[],"mappings":"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"}
|
|
@@ -11,10 +11,39 @@
|
|
|
11
11
|
* v2.0.0 -- 2026-04-29 -- Replace isolated-vm with quickjs-emscripten (pure WASM, no C++ build tools)
|
|
12
12
|
* v2.1.0 -- 2026-07-07 -- Await/abort in-flight host calls before disposing the runtime; fixes JS_FreeRuntime gc assertion abort when a script rejects with sibling async calls still pending (e.g. multi-feed fetch, one feed fails)
|
|
13
13
|
* v2.2.0 -- 2026-07-08 -- Self-heal a poisoned WASM engine: detect an emscripten abort and rebuild the module singleton so one abort no longer fails every later run until a process restart
|
|
14
|
+
* v2.4.0 -- 2026-07-26 -- Give the sandbox the two primitives every author was otherwise forced to
|
|
15
|
+
* hand-roll: `ctx.hash(s)` (FNV-1a 64-bit, published as EXT_HASH_REFERENCE_JS so a browser app
|
|
16
|
+
* can compute the SAME value -- there is no crypto.subtle in QuickJS, and an app/extension pair
|
|
17
|
+
* that hashes differently silently recomputes and re-charges everything) and `ctx.now()` (the
|
|
18
|
+
* run's start timestamp, fixed for the whole action so multi-record writes stay consistent).
|
|
19
|
+
* Both are pure guest-side helpers: no host call, no API-budget cost.
|
|
14
20
|
* v2.3.0 -- 2026-07-18 -- transformScript preserves top-level helpers/consts declared ABOVE `export default` (rewrites the export in place instead of wrapping the whole script) -- fixes QuickJS "unexpected token 'const'" for actions that define a helper above the export, which the extension prompt explicitly permits
|
|
15
21
|
*/
|
|
16
22
|
import { getQuickJS, newQuickJSWASMModule, shouldInterruptAfterDeadline } from 'quickjs-emscripten';
|
|
17
23
|
import { safeFetch } from '../utils/url-validator.js';
|
|
24
|
+
/**
|
|
25
|
+
* The EXACT source of `ctx.hash`, exported so an app that must agree with an extension on a
|
|
26
|
+
* derived value can run the identical function in the browser.
|
|
27
|
+
*
|
|
28
|
+
* Why this exists: the sandbox has no `crypto.subtle`, so an extension author reaches for a
|
|
29
|
+
* hand-rolled hash while the browser side reaches for SHA-256, and the two silently disagree. That
|
|
30
|
+
* is not hypothetical — it shipped: an app and its extension hashed the same spreadsheet inputs
|
|
31
|
+
* differently, so every value the app computed looked stale to the server and would have been
|
|
32
|
+
* recomputed and re-charged forever. One published function, usable verbatim on both sides.
|
|
33
|
+
*
|
|
34
|
+
* FNV-1a style, 64 bits as two 32-bit lanes. Not cryptographic: use it for cache keys, change
|
|
35
|
+
* detection and content identity, never for signatures or secrets.
|
|
36
|
+
*/
|
|
37
|
+
export const EXT_HASH_REFERENCE_JS = `function aimeatHash(s) {
|
|
38
|
+
s = String(s);
|
|
39
|
+
var h1 = 0x811c9dc5, h2 = 0x01000193;
|
|
40
|
+
for (var i = 0; i < s.length; i++) {
|
|
41
|
+
var ch = s.charCodeAt(i);
|
|
42
|
+
h1 = (h1 ^ ch) >>> 0; h1 = Math.imul(h1, 0x01000193) >>> 0;
|
|
43
|
+
h2 = (h2 ^ (ch + i)) >>> 0; h2 = Math.imul(h2, 0x85ebca6b) >>> 0;
|
|
44
|
+
}
|
|
45
|
+
return ('00000000' + h1.toString(16)).slice(-8) + ('00000000' + h2.toString(16)).slice(-8);
|
|
46
|
+
}`;
|
|
18
47
|
// ── Internal helpers ─────────────────────────────────────────
|
|
19
48
|
function setStringGlobal(vm, name, value) {
|
|
20
49
|
if (value === null) {
|
|
@@ -106,7 +135,17 @@ ${userFnDecl}
|
|
|
106
135
|
return JSON.parse(raw);
|
|
107
136
|
}
|
|
108
137
|
|
|
138
|
+
// Pure helpers: no host round trip, so they cost no API-call budget and add no latency.
|
|
139
|
+
// ctx.hash is the node's PUBLISHED hash (EXT_HASH_REFERENCE_JS) so a browser app can compute
|
|
140
|
+
// the identical value; the sandbox has no crypto.subtle, and letting each author invent one is
|
|
141
|
+
// how an app and its extension end up disagreeing about what is up to date.
|
|
142
|
+
${EXT_HASH_REFERENCE_JS.replace(/^function aimeatHash/, 'function __hash')}
|
|
143
|
+
|
|
109
144
|
const ctx = {
|
|
145
|
+
// One timestamp for the whole action run: two calls cannot disagree, so an action that
|
|
146
|
+
// stamps several records stays internally consistent and replayable.
|
|
147
|
+
now: () => __runStartedAt,
|
|
148
|
+
hash: (s) => __hash(s),
|
|
110
149
|
memory: {
|
|
111
150
|
get: async (key) => __call(__memory_get, [key]),
|
|
112
151
|
set: async (key, value) => __call(__memory_set, [key, JSON.stringify(value)]),
|
|
@@ -115,6 +154,10 @@ ${userFnDecl}
|
|
|
115
154
|
getPublic: async (namespace, key) => __call(__memory_getPublic, [namespace, key]),
|
|
116
155
|
},
|
|
117
156
|
fetch: async (url, opts) => __call(__fetch, [url, opts ? JSON.stringify(opts) : '{}']),
|
|
157
|
+
files: __files_read ? {
|
|
158
|
+
read: async (ref) => __call(__files_read, [ref]),
|
|
159
|
+
write: async (key, b64, opts) => __call(__files_write, [key, b64, opts ? JSON.stringify(opts) : '{}']),
|
|
160
|
+
} : undefined,
|
|
118
161
|
wallet: {
|
|
119
162
|
consume: __wallet_consume ? (async (amount, reason) => __call(__wallet_consume, [String(amount), reason])) : undefined,
|
|
120
163
|
getBalance: __wallet_balance ? (async () => __call(__wallet_balance, [])) : undefined,
|
|
@@ -220,6 +263,8 @@ export async function executeExtensionAction(scriptContent, ctx, input, limits)
|
|
|
220
263
|
const counter = { count: 0 };
|
|
221
264
|
// ── Serialized data ──────────────────────────────────
|
|
222
265
|
setStringGlobal(vm, '__inputJson', JSON.stringify(input));
|
|
266
|
+
// Captured ONCE here, so ctx.now() is stable across the whole action.
|
|
267
|
+
setStringGlobal(vm, '__runStartedAt', new Date().toISOString());
|
|
223
268
|
setStringGlobal(vm, '__callerJson', JSON.stringify(ctx.caller));
|
|
224
269
|
setStringGlobal(vm, '__configJson', JSON.stringify(ctx.config));
|
|
225
270
|
setStringGlobal(vm, '__instanceJson', ctx.instance ? JSON.stringify(ctx.instance) : null);
|
|
@@ -277,6 +322,13 @@ export async function executeExtensionAction(scriptContent, ctx, input, limits)
|
|
|
277
322
|
resp.headers.forEach((v, k) => { headers[k] = v; });
|
|
278
323
|
return { status: resp.status, ok: resp.ok, text, headers };
|
|
279
324
|
}, counter, limits.maxApiCalls, inflight);
|
|
325
|
+
// ── Files API ─────────────────────────────────────────
|
|
326
|
+
// A capability that works on bytes takes a REFERENCE and answers with one. Both sides are
|
|
327
|
+
// size-capped in the factory before any base64 crosses this bridge.
|
|
328
|
+
registerAsyncHostFn(vm, '__files_read', ctx.files ? async (ref) => ctx.files.read(ref) : null, counter, limits.maxApiCalls, inflight);
|
|
329
|
+
registerAsyncHostFn(vm, '__files_write', ctx.files
|
|
330
|
+
? async (key, b64, optsJson) => ctx.files.write(key, b64, JSON.parse(optsJson || '{}'))
|
|
331
|
+
: null, counter, limits.maxApiCalls, inflight);
|
|
280
332
|
// ── Wallet API ────────────────────────────────────────
|
|
281
333
|
registerAsyncHostFn(vm, '__wallet_consume', ctx.wallet.consume
|
|
282
334
|
? async (amountStr, reason) => ctx.wallet.consume(Number(amountStr), reason)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"extension-runtime.js","sourceRoot":"","sources":["../../../src/services/extension-runtime.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"extension-runtime.js","sourceRoot":"","sources":["../../../src/services/extension-runtime.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file src/services/file-refs.ts
|
|
3
|
+
* @description One place that turns a FILE REFERENCE into either an authorized handle or a legible
|
|
4
|
+
* refusal. A reference is `"<gaii>/<key>"` (a bare key means the caller's own storage) — the same
|
|
5
|
+
* form `ctx.files.read` already takes, so an extension, an MCP tool, a task attachment and a DM
|
|
6
|
+
* attachment all name a file the same way.
|
|
7
|
+
*
|
|
8
|
+
* Why this exists: storage is keyed by (ownerGaii, key), and every agent-facing read path used to
|
|
9
|
+
* look up ONLY the caller's own namespace. A file the owner uploaded answered "not found" to that
|
|
10
|
+
* owner's own agent, so a PDF could be handed to an agent as a reference it could never open. The
|
|
11
|
+
* authorization was never the problem — `visibility:'owner'` and consent grants already cover it;
|
|
12
|
+
* the lookup was. Reads here go through the same authorizeRead() the /v1/pub route uses, as the
|
|
13
|
+
* CALLER, so an agent sees exactly what the principal invoking it could see and nothing more.
|
|
14
|
+
*
|
|
15
|
+
* Bytes never travel through this module: it answers with a presigned, TTL-limited download_url.
|
|
16
|
+
* A FOREIGN file gets a deliberately shorter TTL than the caller's own — the handle outlives a
|
|
17
|
+
* revoked grant until it expires, so the window for someone else's data is kept small.
|
|
18
|
+
* @structure
|
|
19
|
+
* - parseFileRef(ref, callerGaii) — split "<gaii>/<key>" (bare key → caller's namespace)
|
|
20
|
+
* - resolveFileRef(...) — locate + authorize, never throws, returns a typed access verdict
|
|
21
|
+
* - fileHandleFor(...) — resolveFileRef + mint the presigned download handle
|
|
22
|
+
* - OWN_HANDLE_TTL_SECONDS / FOREIGN_HANDLE_TTL_SECONDS
|
|
23
|
+
* @usage
|
|
24
|
+
* import { fileHandleFor } from '../services/file-refs.js';
|
|
25
|
+
* const h = await fileHandleFor(storage, config, `${ownerGhii}/${key}`, { gaii: agentGaii });
|
|
26
|
+
* if (h.access !== 'granted') return refuse(h.reason);
|
|
27
|
+
* @version-history
|
|
28
|
+
* v1.0.0 — 2026-07-26 — Initial: shared file-reference resolution so an agent can read a file it
|
|
29
|
+
* does not own (owner-uploaded PDFs, DM attachments, task attachments) through one guard.
|
|
30
|
+
*/
|
|
31
|
+
import type { AimeatConfig } from '../config.js';
|
|
32
|
+
import type { Storage, StorageFileRecord } from '../storage/interface.js';
|
|
33
|
+
/** A handle for one of the caller's OWN files may live an hour (parity with GET /v1/storage?mode=handle). */
|
|
34
|
+
export declare const OWN_HANDLE_TTL_SECONDS = 3600;
|
|
35
|
+
/** Someone else's file: short enough that a revoked grant stops mattering quickly. */
|
|
36
|
+
export declare const FOREIGN_HANDLE_TTL_SECONDS = 900;
|
|
37
|
+
export interface FileRefAccessor {
|
|
38
|
+
/** The resolved identity of the caller (GHII / GAII / GEAI) — never a client-supplied id. */
|
|
39
|
+
gaii: string;
|
|
40
|
+
/** `req.auth.sub` when there is one (threaded into the workspace read gate). */
|
|
41
|
+
sub?: string;
|
|
42
|
+
/** The caller's bare owner name (threaded into the workspace read gate). */
|
|
43
|
+
owner?: string;
|
|
44
|
+
}
|
|
45
|
+
export type FileRefAccess = 'granted' | 'denied' | 'missing';
|
|
46
|
+
export interface ResolvedFileRef {
|
|
47
|
+
access: FileRefAccess;
|
|
48
|
+
/** Canonical "<gaii>/<key>" form of what was asked for. */
|
|
49
|
+
ref: string;
|
|
50
|
+
ownerGaii: string;
|
|
51
|
+
key: string;
|
|
52
|
+
/** Present only when access === 'granted'. */
|
|
53
|
+
file?: StorageFileRecord;
|
|
54
|
+
/** Machine-readable cause on a non-granted verdict. */
|
|
55
|
+
reason?: string;
|
|
56
|
+
}
|
|
57
|
+
export interface FileHandle {
|
|
58
|
+
access: FileRefAccess;
|
|
59
|
+
ref: string;
|
|
60
|
+
owner_gaii: string;
|
|
61
|
+
key: string;
|
|
62
|
+
mime_type?: string;
|
|
63
|
+
size?: number;
|
|
64
|
+
name?: string;
|
|
65
|
+
/** Presigned, no-auth GET. Absent unless access === 'granted'. */
|
|
66
|
+
download_url?: string;
|
|
67
|
+
expires_in_seconds?: number;
|
|
68
|
+
reason?: string;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Split `"<gaii>/<key>"` into its parts. A GAII always carries an `@node` (and an extension namespace
|
|
72
|
+
* starts with `ext:`), so the first path segment is an owner ONLY when it looks like one — a plain
|
|
73
|
+
* `dm-out/invoice.pdf` stays a key in the caller's own namespace.
|
|
74
|
+
*/
|
|
75
|
+
export declare function parseFileRef(ref: string, callerGaii: string): {
|
|
76
|
+
gaii: string;
|
|
77
|
+
key: string;
|
|
78
|
+
};
|
|
79
|
+
/** Build the canonical reference string for a stored file. */
|
|
80
|
+
export declare function fileRefFor(ownerGaii: string, key: string): string;
|
|
81
|
+
/**
|
|
82
|
+
* Locate the file a reference names and decide whether `accessor` may read it. Never throws: a
|
|
83
|
+
* missing file, an unreadable one and a malformed reference all come back as a verdict, because
|
|
84
|
+
* every caller here is a tool or a route that owes the agent a legible answer rather than a stack
|
|
85
|
+
* trace. Existence is NOT disclosed to a caller who may not read the file — a denied read reports
|
|
86
|
+
* 'denied' whether or not the bytes exist, matching GET /v1/pub.
|
|
87
|
+
*/
|
|
88
|
+
export declare function resolveFileRef(storage: Storage, config: AimeatConfig, ref: string, accessor: FileRefAccessor): Promise<ResolvedFileRef>;
|
|
89
|
+
/**
|
|
90
|
+
* Turn an already-resolved reference into a handle. Split out from fileHandleFor so a caller that
|
|
91
|
+
* needs the record for something else (an inline text read, a byte stream) pays for ONE lookup —
|
|
92
|
+
* getStorageFile loads the data, and resolving twice would read a large file twice.
|
|
93
|
+
*/
|
|
94
|
+
export declare function handleFromResolved(config: AimeatConfig, resolved: ResolvedFileRef, accessorGaii: string, opts?: {
|
|
95
|
+
name?: string;
|
|
96
|
+
}): Promise<FileHandle>;
|
|
97
|
+
/**
|
|
98
|
+
* Resolve a reference and, when the read is allowed, mint the presigned download handle. This is what
|
|
99
|
+
* every agent-facing surface returns: the agent gets a URL it can hand to a fetch, a document parser
|
|
100
|
+
* or a human, and the bytes never enter a model context.
|
|
101
|
+
*/
|
|
102
|
+
export declare function fileHandleFor(storage: Storage, config: AimeatConfig, ref: string, accessor: FileRefAccessor, opts?: {
|
|
103
|
+
name?: string;
|
|
104
|
+
}): Promise<FileHandle>;
|
|
105
|
+
//# sourceMappingURL=file-refs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-refs.d.ts","sourceRoot":"","sources":["../../../src/services/file-refs.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,KAAK,EAAE,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAI1E,6GAA6G;AAC7G,eAAO,MAAM,sBAAsB,OAAO,CAAC;AAC3C,sFAAsF;AACtF,eAAO,MAAM,0BAA0B,MAAM,CAAC;AAE9C,MAAM,WAAW,eAAe;IAC5B,6FAA6F;IAC7F,IAAI,EAAE,MAAM,CAAC;IACb,gFAAgF;IAChF,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,4EAA4E;IAC5E,KAAK,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,MAAM,aAAa,GAAG,SAAS,GAAG,QAAQ,GAAG,SAAS,CAAC;AAE7D,MAAM,WAAW,eAAe;IAC5B,MAAM,EAAE,aAAa,CAAC;IACtB,2DAA2D;IAC3D,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC;IACZ,8CAA8C;IAC9C,IAAI,CAAC,EAAE,iBAAiB,CAAC;IACzB,uDAAuD;IACvD,MAAM,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,UAAU;IACvB,MAAM,EAAE,aAAa,CAAC;IACtB,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,EAAE,MAAM,CAAC;IACnB,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,kEAAkE;IAClE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAS3F;AAED,8DAA8D;AAC9D,wBAAgB,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAEjE;AAED;;;;;;GAMG;AACH,wBAAsB,cAAc,CAChC,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,YAAY,EACpB,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,eAAe,GAC1B,OAAO,CAAC,eAAe,CAAC,CAsC1B;AAED;;;;GAIG;AACH,wBAAsB,kBAAkB,CACpC,MAAM,EAAE,YAAY,EACpB,QAAQ,EAAE,eAAe,EACzB,YAAY,EAAE,MAAM,EACpB,IAAI,CAAC,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GACzB,OAAO,CAAC,UAAU,CAAC,CAyBrB;AAED;;;;GAIG;AACH,wBAAsB,aAAa,CAC/B,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,YAAY,EACpB,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,eAAe,EACzB,IAAI,CAAC,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GACzB,OAAO,CAAC,UAAU,CAAC,CAGrB"}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
import { authorizeRead } from './access-guard.js';
|
|
2
|
+
import { generateDownloadToken } from './download-token.js';
|
|
3
|
+
/** A handle for one of the caller's OWN files may live an hour (parity with GET /v1/storage?mode=handle). */
|
|
4
|
+
export const OWN_HANDLE_TTL_SECONDS = 3600;
|
|
5
|
+
/** Someone else's file: short enough that a revoked grant stops mattering quickly. */
|
|
6
|
+
export const FOREIGN_HANDLE_TTL_SECONDS = 900;
|
|
7
|
+
/**
|
|
8
|
+
* Split `"<gaii>/<key>"` into its parts. A GAII always carries an `@node` (and an extension namespace
|
|
9
|
+
* starts with `ext:`), so the first path segment is an owner ONLY when it looks like one — a plain
|
|
10
|
+
* `dm-out/invoice.pdf` stays a key in the caller's own namespace.
|
|
11
|
+
*/
|
|
12
|
+
export function parseFileRef(ref, callerGaii) {
|
|
13
|
+
const slash = String(ref ?? '').indexOf('/');
|
|
14
|
+
if (slash > 0) {
|
|
15
|
+
const head = ref.slice(0, slash);
|
|
16
|
+
if (head.includes('@') || head.startsWith('ext:')) {
|
|
17
|
+
return { gaii: head, key: ref.slice(slash + 1) };
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
return { gaii: callerGaii, key: String(ref ?? '') };
|
|
21
|
+
}
|
|
22
|
+
/** Build the canonical reference string for a stored file. */
|
|
23
|
+
export function fileRefFor(ownerGaii, key) {
|
|
24
|
+
return `${ownerGaii}/${key}`;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Locate the file a reference names and decide whether `accessor` may read it. Never throws: a
|
|
28
|
+
* missing file, an unreadable one and a malformed reference all come back as a verdict, because
|
|
29
|
+
* every caller here is a tool or a route that owes the agent a legible answer rather than a stack
|
|
30
|
+
* trace. Existence is NOT disclosed to a caller who may not read the file — a denied read reports
|
|
31
|
+
* 'denied' whether or not the bytes exist, matching GET /v1/pub.
|
|
32
|
+
*/
|
|
33
|
+
export async function resolveFileRef(storage, config, ref, accessor) {
|
|
34
|
+
const { gaii, key } = parseFileRef(ref, accessor.gaii);
|
|
35
|
+
const canonical = fileRefFor(gaii, key);
|
|
36
|
+
if (!key) {
|
|
37
|
+
return { access: 'missing', ref: canonical, ownerGaii: gaii, key, reason: 'empty_key' };
|
|
38
|
+
}
|
|
39
|
+
const file = await storage.getStorageFile(gaii, key);
|
|
40
|
+
const own = gaii === accessor.gaii;
|
|
41
|
+
if (!file) {
|
|
42
|
+
return {
|
|
43
|
+
access: 'missing',
|
|
44
|
+
ref: canonical,
|
|
45
|
+
ownerGaii: gaii,
|
|
46
|
+
key,
|
|
47
|
+
// The single most common mistake: naming a bare key for a file that belongs to the OWNER.
|
|
48
|
+
reason: own
|
|
49
|
+
? 'not_found_in_your_namespace'
|
|
50
|
+
: 'not_found',
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
const decision = await authorizeRead(storage, config, {
|
|
54
|
+
ownerGaii: gaii,
|
|
55
|
+
accessorGaii: accessor.gaii,
|
|
56
|
+
resourceKey: `storage:${key}`,
|
|
57
|
+
visibility: file.visibility,
|
|
58
|
+
groupId: file.groupId,
|
|
59
|
+
workspaceRef: file.workspaceRef,
|
|
60
|
+
accessorSub: accessor.sub,
|
|
61
|
+
accessorOwner: accessor.owner,
|
|
62
|
+
action: 'read',
|
|
63
|
+
});
|
|
64
|
+
if (!decision.allowed) {
|
|
65
|
+
return { access: 'denied', ref: canonical, ownerGaii: gaii, key, reason: decision.reason ?? 'not_permitted' };
|
|
66
|
+
}
|
|
67
|
+
return { access: 'granted', ref: canonical, ownerGaii: gaii, key, file };
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Turn an already-resolved reference into a handle. Split out from fileHandleFor so a caller that
|
|
71
|
+
* needs the record for something else (an inline text read, a byte stream) pays for ONE lookup —
|
|
72
|
+
* getStorageFile loads the data, and resolving twice would read a large file twice.
|
|
73
|
+
*/
|
|
74
|
+
export async function handleFromResolved(config, resolved, accessorGaii, opts) {
|
|
75
|
+
const base = {
|
|
76
|
+
access: resolved.access,
|
|
77
|
+
ref: resolved.ref,
|
|
78
|
+
owner_gaii: resolved.ownerGaii,
|
|
79
|
+
key: resolved.key,
|
|
80
|
+
};
|
|
81
|
+
if (opts?.name)
|
|
82
|
+
base.name = opts.name;
|
|
83
|
+
if (resolved.access !== 'granted' || !resolved.file) {
|
|
84
|
+
return { ...base, reason: resolved.reason };
|
|
85
|
+
}
|
|
86
|
+
const file = resolved.file;
|
|
87
|
+
const ttl = resolved.ownerGaii === accessorGaii ? OWN_HANDLE_TTL_SECONDS : FOREIGN_HANDLE_TTL_SECONDS;
|
|
88
|
+
const token = await generateDownloadToken({ sub: file.ownerGaii, key: file.key, mimeType: file.mimeType, size: file.size }, ttl);
|
|
89
|
+
return {
|
|
90
|
+
...base,
|
|
91
|
+
mime_type: file.mimeType,
|
|
92
|
+
size: file.size,
|
|
93
|
+
download_url: `${config.baseUrl}/v1/download/${token}`,
|
|
94
|
+
expires_in_seconds: ttl,
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Resolve a reference and, when the read is allowed, mint the presigned download handle. This is what
|
|
99
|
+
* every agent-facing surface returns: the agent gets a URL it can hand to a fetch, a document parser
|
|
100
|
+
* or a human, and the bytes never enter a model context.
|
|
101
|
+
*/
|
|
102
|
+
export async function fileHandleFor(storage, config, ref, accessor, opts) {
|
|
103
|
+
const resolved = await resolveFileRef(storage, config, ref, accessor);
|
|
104
|
+
return handleFromResolved(config, resolved, accessor.gaii, opts);
|
|
105
|
+
}
|
|
106
|
+
//# sourceMappingURL=file-refs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-refs.js","sourceRoot":"","sources":["../../../src/services/file-refs.ts"],"names":[],"mappings":"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"}
|
|
@@ -95,6 +95,12 @@ export interface MeteredEntitlement {
|
|
|
95
95
|
budget: EntitlementBudget;
|
|
96
96
|
/** Platform cut override (0–100). `null` = use the node's configured marketplace fee. */
|
|
97
97
|
rakePercent: number | null;
|
|
98
|
+
/**
|
|
99
|
+
* Morsels burned per call to PACE this contract, pinned at accept time like the price is. Null
|
|
100
|
+
* means the capability declared none and the node's default applies. A burn, never revenue: it
|
|
101
|
+
* bounds the call RATE, which is the one thing a money budget cannot do.
|
|
102
|
+
*/
|
|
103
|
+
tollMorsels?: number | null;
|
|
98
104
|
/** The sellable surface when this contract is for an app-tool (Gap 1) or agent-work (Gap 2); absent for a
|
|
99
105
|
* raw ext-action. App-tool calls route to the pinned interface binding; agent-work settles on delivery. */
|
|
100
106
|
surface?: SellableSurface | null;
|
|
@@ -137,6 +143,7 @@ export declare function createEntitlement(storage: Storage, input: {
|
|
|
137
143
|
rakePercent?: number | null;
|
|
138
144
|
contractRef: string;
|
|
139
145
|
surface?: SellableSurface | null;
|
|
146
|
+
tollMorsels?: number | null;
|
|
140
147
|
escrowParty?: 'consumer' | 'provider' | null;
|
|
141
148
|
createdBy: string;
|
|
142
149
|
carrySpend?: MeteredEntitlement | null;
|