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,146 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file src/services/usage/usage-buffer.ts
|
|
3
|
+
* @description The one write door for the usage call stream. Every measured call anywhere in the
|
|
4
|
+
* node goes through `recordUsageCall`, which buffers in memory and flushes on an interval.
|
|
5
|
+
* Design: docs/internal/telemetria/02-design.md
|
|
6
|
+
*
|
|
7
|
+
* WHY BUFFERED, AND WHY THIS IS NOT THE BILLING PATH. A call must never wait on a metrics write,
|
|
8
|
+
* and a metrics write must never be able to fail a call. That trade means at most one flush
|
|
9
|
+
* window is lost on a hard kill, which is fine for reporting and is exactly why the money paths
|
|
10
|
+
* (AgentUsageDaily, the budget alerts, the morsel settlement) stay synchronous and do not move
|
|
11
|
+
* behind this buffer. Reporting may be approximate at the edge; a ledger may not.
|
|
12
|
+
*
|
|
13
|
+
* WHY IT IS SYNCHRONOUS AND RETURNS VOID. A door that could `await` this would eventually be
|
|
14
|
+
* written to `await` it inside a request path, and then a slow database would be a slow node. The
|
|
15
|
+
* signature refuses that: there is nothing to await and nothing to catch.
|
|
16
|
+
* @structure
|
|
17
|
+
* - initUsageBuffer(storage) -- wire storage + start the flush interval
|
|
18
|
+
* - recordUsageCall(input) -- buffer one call (fire and forget, never throws)
|
|
19
|
+
* - pendingUsageCalls(filter) -- the unflushed tail, so a just-made call is not invisible
|
|
20
|
+
* - flushUsageBuffer() -- write the buffer out
|
|
21
|
+
* - shutdownUsageBuffer() -- stop the interval + final flush
|
|
22
|
+
* @usage
|
|
23
|
+
* import { recordUsageCall } from '../services/usage/usage-buffer.js';
|
|
24
|
+
* recordUsageCall({ ownerGhii, surface: 'mcp', coordinate: toolName, outcome: 'ok', durationMs });
|
|
25
|
+
* @version-history
|
|
26
|
+
* v1.0.0 — 2026-08-14 — Initial: the buffered ingest door for the usage call stream.
|
|
27
|
+
*/
|
|
28
|
+
import { randomUUID } from 'node:crypto';
|
|
29
|
+
import { logger } from '../../utils/logger.js';
|
|
30
|
+
/** Flush cadence. A dashboard reading raw calls is at most this stale, plus the fold's own lag. */
|
|
31
|
+
const FLUSH_INTERVAL_MS = Number(process.env.AIMEAT_USAGE_BUFFER_MS) || 15_000;
|
|
32
|
+
/**
|
|
33
|
+
* Hard ceiling on the unflushed buffer. If storage is down, telemetry must degrade rather than grow
|
|
34
|
+
* until the process dies: past this, the OLDEST entries drop. Losing the oldest reporting rows is a
|
|
35
|
+
* gap in a chart; running out of memory takes the node with it.
|
|
36
|
+
*/
|
|
37
|
+
const MAX_BUFFERED = 20_000;
|
|
38
|
+
let storageRef = null;
|
|
39
|
+
let flushTimer = null;
|
|
40
|
+
let flushing = false;
|
|
41
|
+
let buffer = [];
|
|
42
|
+
let droppedSinceLastWarning = 0;
|
|
43
|
+
/**
|
|
44
|
+
* Buffer one call. Never throws and never blocks: a door records what happened and gets on with
|
|
45
|
+
* answering the request.
|
|
46
|
+
*/
|
|
47
|
+
export function recordUsageCall(input) {
|
|
48
|
+
try {
|
|
49
|
+
buffer.push({
|
|
50
|
+
id: randomUUID(),
|
|
51
|
+
ts: input.ts ?? new Date().toISOString(),
|
|
52
|
+
ownerGhii: input.ownerGhii,
|
|
53
|
+
actorGaii: input.actorGaii ?? '',
|
|
54
|
+
actorKind: input.actorKind ?? 'owner',
|
|
55
|
+
surface: input.surface,
|
|
56
|
+
coordinate: input.coordinate,
|
|
57
|
+
appId: input.appId ?? '',
|
|
58
|
+
counterpartyGhii: input.counterpartyGhii ?? '',
|
|
59
|
+
outcome: input.outcome ?? 'ok',
|
|
60
|
+
reason: input.reason ?? '',
|
|
61
|
+
durationMs: Math.max(0, Math.round(input.durationMs ?? 0)),
|
|
62
|
+
chargedUnits: Math.max(0, Math.round(input.chargedUnits ?? 0)),
|
|
63
|
+
unit: input.unit ?? '',
|
|
64
|
+
currency: input.currency ?? '',
|
|
65
|
+
entitlementId: input.entitlementId ?? '',
|
|
66
|
+
runId: input.runId ?? '',
|
|
67
|
+
meta: input.meta ?? {},
|
|
68
|
+
});
|
|
69
|
+
if (buffer.length > MAX_BUFFERED) {
|
|
70
|
+
const overflow = buffer.length - MAX_BUFFERED;
|
|
71
|
+
buffer.splice(0, overflow);
|
|
72
|
+
droppedSinceLastWarning += overflow;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
catch (err) {
|
|
76
|
+
// Recording a call must never be able to fail the call. There is no retry that helps here:
|
|
77
|
+
// whatever went wrong is in this process, and the row is not worth a second attempt.
|
|
78
|
+
logger.warn('usage-buffer: dropped one call record', { error: String(err) });
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* The unflushed tail, filtered the same way `listUsageCalls` filters storage. Reader and writer
|
|
83
|
+
* share a process, so there is no reason to make an operator wait out a flush interval to see a
|
|
84
|
+
* call that has already happened: an empty view they cannot explain is what makes a UI look broken.
|
|
85
|
+
*/
|
|
86
|
+
export function pendingUsageCalls(filter) {
|
|
87
|
+
return buffer.filter(r => (!filter.ownerGhii || r.ownerGhii === filter.ownerGhii)
|
|
88
|
+
&& (!filter.actorGaii || r.actorGaii === filter.actorGaii)
|
|
89
|
+
&& (!filter.surface || r.surface === filter.surface)
|
|
90
|
+
&& (!filter.appId || r.appId === filter.appId)
|
|
91
|
+
&& (!filter.outcome || r.outcome === filter.outcome)
|
|
92
|
+
&& (!filter.from || r.ts >= filter.from)
|
|
93
|
+
&& (!filter.to || r.ts <= filter.to));
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Write the buffer out. Snapshot-and-clear up front so calls arriving mid-flush accumulate for the
|
|
97
|
+
* next window. At-most-once by choice: a failed write drops that window rather than risking a
|
|
98
|
+
* double count, which matches what this stream is for.
|
|
99
|
+
*/
|
|
100
|
+
export async function flushUsageBuffer() {
|
|
101
|
+
if (!storageRef || flushing || buffer.length === 0)
|
|
102
|
+
return;
|
|
103
|
+
flushing = true;
|
|
104
|
+
const batch = buffer;
|
|
105
|
+
buffer = [];
|
|
106
|
+
if (droppedSinceLastWarning > 0) {
|
|
107
|
+
logger.warn('usage-buffer: dropped oldest records to stay under the memory ceiling', {
|
|
108
|
+
dropped: droppedSinceLastWarning, ceiling: MAX_BUFFERED,
|
|
109
|
+
});
|
|
110
|
+
droppedSinceLastWarning = 0;
|
|
111
|
+
}
|
|
112
|
+
try {
|
|
113
|
+
await storageRef.appendUsageCall(batch);
|
|
114
|
+
}
|
|
115
|
+
catch (err) {
|
|
116
|
+
logger.warn('usage-buffer: flush failed, this window is lost', {
|
|
117
|
+
count: batch.length, error: String(err),
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
finally {
|
|
121
|
+
flushing = false;
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
/** Wire storage and start the flush interval. Idempotent. */
|
|
125
|
+
export function initUsageBuffer(storage) {
|
|
126
|
+
storageRef = storage;
|
|
127
|
+
if (flushTimer)
|
|
128
|
+
return;
|
|
129
|
+
flushTimer = setInterval(() => { void flushUsageBuffer(); }, FLUSH_INTERVAL_MS);
|
|
130
|
+
// Don't keep the process alive solely for the flush timer (matters for in-process tests).
|
|
131
|
+
flushTimer.unref?.();
|
|
132
|
+
}
|
|
133
|
+
/** Stop the interval and perform one final flush. Called from graceful shutdown. */
|
|
134
|
+
export async function shutdownUsageBuffer() {
|
|
135
|
+
if (flushTimer) {
|
|
136
|
+
clearInterval(flushTimer);
|
|
137
|
+
flushTimer = null;
|
|
138
|
+
}
|
|
139
|
+
await flushUsageBuffer();
|
|
140
|
+
}
|
|
141
|
+
/** Test seam: drop everything in flight. Not used by the running node. */
|
|
142
|
+
export function resetUsageBuffer() {
|
|
143
|
+
buffer = [];
|
|
144
|
+
droppedSinceLastWarning = 0;
|
|
145
|
+
}
|
|
146
|
+
//# sourceMappingURL=usage-buffer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"usage-buffer.js","sourceRoot":"","sources":["../../../../src/services/usage/usage-buffer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file src/services/usage/usage-read.ts
|
|
3
|
+
* @description The one read path over the serving layer. A caller names a REPORT and a scope; this
|
|
4
|
+
* resolves it to a declared cut, queries the precomputed rows, and returns them already grouped,
|
|
5
|
+
* sorted and totalled. Design: docs/internal/telemetria/02-design.md
|
|
6
|
+
*
|
|
7
|
+
* WHY A REPORT NAME RATHER THAN A CUT NAME. A cut is an internal storage decision — which
|
|
8
|
+
* dimension set was materialised. A report is what someone wants to see. Keeping them apart means
|
|
9
|
+
* a cut can be split, renamed or given a finer grain without breaking a URL anyone bookmarked,
|
|
10
|
+
* and it means the owner and operator versions of the same question ("which models get used")
|
|
11
|
+
* resolve to DIFFERENT cuts behind ONE name, so neither door has to know about the other's.
|
|
12
|
+
*
|
|
13
|
+
* OWNER SCOPING IS STRUCTURAL, NOT A FILTER SOMEONE REMEMBERED. An owner-scoped read resolves to
|
|
14
|
+
* a cut that carries ownerGhii and is always queried with it set. There is no code path here that
|
|
15
|
+
* takes an ownerGhii from a caller and trusts it: the route passes the resolved identity, and the
|
|
16
|
+
* cross-owner variants are separate report keys the operator door alone can reach.
|
|
17
|
+
* @structure
|
|
18
|
+
* - OWNER_REPORTS / NODE_REPORTS -- report name to cut, per scope
|
|
19
|
+
* - readUsageReport(storage, args) -- the query, grouped and totalled
|
|
20
|
+
* - usageComputedThrough(storage) -- how fresh the serving layer is
|
|
21
|
+
* @usage
|
|
22
|
+
* const report = await readUsageReport(storage, { report: 'model', ownerGhii, from, to });
|
|
23
|
+
* @version-history
|
|
24
|
+
* v1.0.0 — 2026-08-14 — Initial: one read service over the precomputed rollups.
|
|
25
|
+
*/
|
|
26
|
+
import type { Storage, UsageRollupRow, UsageRollupFilter } from '../../storage/interface.js';
|
|
27
|
+
import { type UsageDim } from './rollup-cuts.js';
|
|
28
|
+
/** Reports an owner may ask about their OWN usage. Every cut here carries ownerGhii. */
|
|
29
|
+
export declare const OWNER_REPORTS: Record<string, string>;
|
|
30
|
+
/** Reports across every owner. Operator-only: the calling route MUST gate on the operator role. */
|
|
31
|
+
export declare const NODE_REPORTS: Record<string, string>;
|
|
32
|
+
export interface UsageGroup {
|
|
33
|
+
/** Display label for this row: the dimension that names it, or the bucket for a time series. */
|
|
34
|
+
key: string;
|
|
35
|
+
/** Every dimension this cut keyed on, so a client can drill without parsing `key`. */
|
|
36
|
+
dims: Partial<Record<UsageDim, string>>;
|
|
37
|
+
calls: number;
|
|
38
|
+
errors: number;
|
|
39
|
+
refusals: number;
|
|
40
|
+
tokens_in: number;
|
|
41
|
+
tokens_out: number;
|
|
42
|
+
total_tokens: number;
|
|
43
|
+
cost_usd: number;
|
|
44
|
+
unpriced_calls: number;
|
|
45
|
+
charged_units: number;
|
|
46
|
+
duration_ms_avg: number;
|
|
47
|
+
duration_ms_max: number;
|
|
48
|
+
/** Distinct actors, undercounted across fold batches. Never use for billing. */
|
|
49
|
+
actors_seen_approx: number;
|
|
50
|
+
}
|
|
51
|
+
export interface UsageReport {
|
|
52
|
+
report: string;
|
|
53
|
+
cut: string;
|
|
54
|
+
grain: 'hour' | 'day';
|
|
55
|
+
from: string;
|
|
56
|
+
to: string;
|
|
57
|
+
scope: 'owner' | 'node';
|
|
58
|
+
owner: string | null;
|
|
59
|
+
/** Buckets in chronological order, for a chart. Empty unless `series` was asked for. */
|
|
60
|
+
series: Array<{
|
|
61
|
+
bucket: string;
|
|
62
|
+
calls: number;
|
|
63
|
+
cost_usd: number;
|
|
64
|
+
total_tokens: number;
|
|
65
|
+
}>;
|
|
66
|
+
groups: UsageGroup[];
|
|
67
|
+
totals: Omit<UsageGroup, 'key' | 'dims'>;
|
|
68
|
+
/**
|
|
69
|
+
* The oldest point both raw streams have been folded through. Everything after it may be missing
|
|
70
|
+
* from these numbers. Stated rather than implied, because a dashboard that silently lags is a
|
|
71
|
+
* dashboard people stop trusting the first time they notice.
|
|
72
|
+
*/
|
|
73
|
+
computed_through: string | null;
|
|
74
|
+
/** True when the request asked for a window the archive holds and the hot tables no longer do. */
|
|
75
|
+
beyond_hot_window: boolean;
|
|
76
|
+
}
|
|
77
|
+
/** YYYY-MM-DD `days` before today, UTC. */
|
|
78
|
+
export declare function dayNDaysAgo(days: number): string;
|
|
79
|
+
export interface ReadUsageArgs {
|
|
80
|
+
report: string;
|
|
81
|
+
scope: 'owner' | 'node';
|
|
82
|
+
/** Required when scope is 'owner'. Ignored — deliberately — when scope is 'node'. */
|
|
83
|
+
ownerGhii?: string;
|
|
84
|
+
from?: string;
|
|
85
|
+
to?: string;
|
|
86
|
+
grain?: 'hour' | 'day';
|
|
87
|
+
/** Also return the per-bucket series (a chart wants it; a table does not). */
|
|
88
|
+
series?: boolean;
|
|
89
|
+
limit?: number;
|
|
90
|
+
}
|
|
91
|
+
export declare class UnknownReportError extends Error {
|
|
92
|
+
available: string[];
|
|
93
|
+
constructor(report: string, available: string[]);
|
|
94
|
+
}
|
|
95
|
+
/** The oldest point both streams have been folded through; null before the first fold. */
|
|
96
|
+
export declare function usageComputedThrough(storage: Storage): Promise<string | null>;
|
|
97
|
+
/**
|
|
98
|
+
* Read a cut INCLUDING what the fold has not caught up on yet.
|
|
99
|
+
*
|
|
100
|
+
* The stored rows answer the history; the pending deltas answer the last few minutes. Merging them
|
|
101
|
+
* here rather than making every caller do it is what lets both the owner reports and the two
|
|
102
|
+
* operator aggregates be live and bounded at the same time — the alternative was either a stale
|
|
103
|
+
* dashboard or the full-table scan this whole layer replaced.
|
|
104
|
+
*
|
|
105
|
+
* Exported because the operator aggregates (ledger-admin, ai-usage-admin) compose their own shapes
|
|
106
|
+
* from the same cuts and must not accidentally read only the folded half.
|
|
107
|
+
*/
|
|
108
|
+
export declare function queryUsageRollupLive(storage: Storage, filter: UsageRollupFilter, stream: 'llm' | 'call'): Promise<UsageRollupRow[]>;
|
|
109
|
+
/**
|
|
110
|
+
* Read one report. The window defaults to the trailing 30 days; a `grain` the cut does not
|
|
111
|
+
* materialise falls back to the one it does, rather than answering with an empty chart the caller
|
|
112
|
+
* has no way to explain.
|
|
113
|
+
*/
|
|
114
|
+
export declare function readUsageReport(storage: Storage, args: ReadUsageArgs): Promise<UsageReport>;
|
|
115
|
+
//# sourceMappingURL=usage-read.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"usage-read.d.ts","sourceRoot":"","sources":["../../../../src/services/usage/usage-read.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,OAAO,KAAK,EACV,OAAO,EAAE,cAAc,EAAoB,iBAAiB,EAC7D,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAW,KAAK,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAI1D,wFAAwF;AACxF,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAUhD,CAAC;AAEF,mGAAmG;AACnG,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAY/C,CAAC;AAsBF,MAAM,WAAW,UAAU;IACzB,gGAAgG;IAChG,GAAG,EAAE,MAAM,CAAC;IACZ,sFAAsF;IACtF,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC;IACxC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,EAAE,MAAM,CAAC;IACxB,eAAe,EAAE,MAAM,CAAC;IACxB,gFAAgF;IAChF,kBAAkB,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,GAAG,KAAK,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,OAAO,GAAG,MAAM,CAAC;IACxB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,wFAAwF;IACxF,MAAM,EAAE,KAAK,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACzF,MAAM,EAAE,UAAU,EAAE,CAAC;IACrB,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,KAAK,GAAG,MAAM,CAAC,CAAC;IACzC;;;;OAIG;IACH,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,kGAAkG;IAClG,iBAAiB,EAAE,OAAO,CAAC;CAC5B;AAUD,2CAA2C;AAC3C,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEhD;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,OAAO,GAAG,MAAM,CAAC;IACxB,qFAAqF;IACrF,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;IACvB,8EAA8E;IAC9E,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,qBAAa,kBAAmB,SAAQ,KAAK;IAC3C,SAAS,EAAE,MAAM,EAAE,CAAC;gBACR,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE;CAKhD;AAED,0FAA0F;AAC1F,wBAAsB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAUnF;AAmBD;;;;;;;;;;GAUG;AACH,wBAAsB,oBAAoB,CACxC,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,iBAAiB,EACzB,MAAM,EAAE,KAAK,GAAG,MAAM,GACrB,OAAO,CAAC,cAAc,EAAE,CAAC,CAQ3B;AAmBD;;;;GAIG;AACH,wBAAsB,eAAe,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,WAAW,CAAC,CA8GjG"}
|
|
@@ -0,0 +1,246 @@
|
|
|
1
|
+
import { findCut } from './rollup-cuts.js';
|
|
2
|
+
import { pendingRollupDeltas } from './rollup-engine.js';
|
|
3
|
+
import { pendingUsageCalls } from './usage-buffer.js';
|
|
4
|
+
/** Reports an owner may ask about their OWN usage. Every cut here carries ownerGhii. */
|
|
5
|
+
export const OWNER_REPORTS = {
|
|
6
|
+
day: 'llm.owner',
|
|
7
|
+
model: 'llm.owner.model',
|
|
8
|
+
app: 'llm.owner.app',
|
|
9
|
+
agent: 'llm.actor',
|
|
10
|
+
tool: 'call.owner.tool',
|
|
11
|
+
surface: 'call.owner.surface',
|
|
12
|
+
'apps-used': 'call.owner.app',
|
|
13
|
+
activity: 'call.owner',
|
|
14
|
+
sold: 'call.provider.coordinate',
|
|
15
|
+
};
|
|
16
|
+
/** Reports across every owner. Operator-only: the calling route MUST gate on the operator role. */
|
|
17
|
+
export const NODE_REPORTS = {
|
|
18
|
+
day: 'llm.node',
|
|
19
|
+
model: 'llm.model',
|
|
20
|
+
app: 'llm.app',
|
|
21
|
+
'app-model': 'llm.app.model',
|
|
22
|
+
agent: 'llm.actor',
|
|
23
|
+
user: 'llm.owner',
|
|
24
|
+
tool: 'call.tool',
|
|
25
|
+
surface: 'call.surface',
|
|
26
|
+
'apps-used': 'call.app',
|
|
27
|
+
activity: 'call.node',
|
|
28
|
+
provider: 'call.provider.coordinate',
|
|
29
|
+
};
|
|
30
|
+
/**
|
|
31
|
+
* The separator inside an in-memory grouping key. A dimension value can contain a space, a slash or
|
|
32
|
+
* a colon (`apptool:alice/app.html`, an owner GHII, a model id), so a printable separator would let
|
|
33
|
+
* two DIFFERENT dimension tuples collide into one bucket and silently merge two rows' numbers. A
|
|
34
|
+
* control character cannot appear in any of them. Written as an escape rather than a literal, so it
|
|
35
|
+
* stays visible in an editor and the file stays text to grep.
|
|
36
|
+
*/
|
|
37
|
+
const DIM_SEPARATOR = '\u0000';
|
|
38
|
+
/**
|
|
39
|
+
* Which dimension NAMES a row, for the display label. First match wins.
|
|
40
|
+
*
|
|
41
|
+
* `outcome` is deliberately absent. It qualifies a row rather than identifying one, and having it
|
|
42
|
+
* as a fallback made an app-opens table label an unattributed row "ok" — a heading that reads like
|
|
43
|
+
* an app name and is not one. A row none of these can name is honestly "(unattributed)".
|
|
44
|
+
*/
|
|
45
|
+
const LABEL_ORDER = [
|
|
46
|
+
'model', 'appId', 'coordinate', 'actorGaii', 'surface', 'ownerGhii', 'counterpartyGhii', 'provider',
|
|
47
|
+
];
|
|
48
|
+
function emptyTotals() {
|
|
49
|
+
return {
|
|
50
|
+
calls: 0, errors: 0, refusals: 0, tokens_in: 0, tokens_out: 0, total_tokens: 0,
|
|
51
|
+
cost_usd: 0, unpriced_calls: 0, charged_units: 0,
|
|
52
|
+
duration_ms_avg: 0, duration_ms_max: 0, actors_seen_approx: 0,
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
/** YYYY-MM-DD `days` before today, UTC. */
|
|
56
|
+
export function dayNDaysAgo(days) {
|
|
57
|
+
return new Date(Date.now() - days * 86_400_000).toISOString().slice(0, 10);
|
|
58
|
+
}
|
|
59
|
+
export class UnknownReportError extends Error {
|
|
60
|
+
available;
|
|
61
|
+
constructor(report, available) {
|
|
62
|
+
super(`Unknown report "${report}". Available: ${available.join(', ')}`);
|
|
63
|
+
this.name = 'UnknownReportError';
|
|
64
|
+
this.available = available;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
/** The oldest point both streams have been folded through; null before the first fold. */
|
|
68
|
+
export async function usageComputedThrough(storage) {
|
|
69
|
+
const [llm, call] = await Promise.all([
|
|
70
|
+
storage.getUsageCursor('llm'),
|
|
71
|
+
storage.getUsageCursor('call'),
|
|
72
|
+
]);
|
|
73
|
+
const points = [llm?.lastTs, call?.lastTs].filter((t) => !!t);
|
|
74
|
+
if (points.length === 0)
|
|
75
|
+
return null;
|
|
76
|
+
// The OLDER of the two: a report is only as fresh as its least fresh input, and claiming the
|
|
77
|
+
// newer would overstate exactly when one stream has fallen behind.
|
|
78
|
+
return points.sort()[0];
|
|
79
|
+
}
|
|
80
|
+
/** A delta carries no id or updatedAt; a reader only ever sums, so both are cosmetic here. */
|
|
81
|
+
function deltaAsRow(d) {
|
|
82
|
+
return { ...d, id: '', extra: d.extra ?? {}, updatedAt: '' };
|
|
83
|
+
}
|
|
84
|
+
/** Does a not-yet-folded delta belong in the answer this filter asked for? */
|
|
85
|
+
function deltaMatches(d, filter, grain) {
|
|
86
|
+
if (d.cut !== filter.cut || d.grain !== grain)
|
|
87
|
+
return false;
|
|
88
|
+
if (filter.from && d.bucket < filter.from)
|
|
89
|
+
return false;
|
|
90
|
+
if (filter.to && d.bucket > filter.to)
|
|
91
|
+
return false;
|
|
92
|
+
if (filter.ownerGhii && d.ownerGhii !== filter.ownerGhii)
|
|
93
|
+
return false;
|
|
94
|
+
if (filter.appId && d.appId !== filter.appId)
|
|
95
|
+
return false;
|
|
96
|
+
if (filter.actorGaii && d.actorGaii !== filter.actorGaii)
|
|
97
|
+
return false;
|
|
98
|
+
if (filter.counterpartyGhii && d.counterpartyGhii !== filter.counterpartyGhii)
|
|
99
|
+
return false;
|
|
100
|
+
return true;
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Read a cut INCLUDING what the fold has not caught up on yet.
|
|
104
|
+
*
|
|
105
|
+
* The stored rows answer the history; the pending deltas answer the last few minutes. Merging them
|
|
106
|
+
* here rather than making every caller do it is what lets both the owner reports and the two
|
|
107
|
+
* operator aggregates be live and bounded at the same time — the alternative was either a stale
|
|
108
|
+
* dashboard or the full-table scan this whole layer replaced.
|
|
109
|
+
*
|
|
110
|
+
* Exported because the operator aggregates (ledger-admin, ai-usage-admin) compose their own shapes
|
|
111
|
+
* from the same cuts and must not accidentally read only the folded half.
|
|
112
|
+
*/
|
|
113
|
+
export async function queryUsageRollupLive(storage, filter, stream) {
|
|
114
|
+
const grain = filter.grain ?? 'day';
|
|
115
|
+
const [stored, pending] = await Promise.all([
|
|
116
|
+
storage.queryUsageRollup({ ...filter, grain }),
|
|
117
|
+
pendingRollupDeltas(storage, stream, stream === 'call' ? pendingUsageCalls({}) : []),
|
|
118
|
+
]);
|
|
119
|
+
const extra = pending.filter(d => deltaMatches(d, filter, grain)).map(deltaAsRow);
|
|
120
|
+
return extra.length ? [...stored, ...extra] : stored;
|
|
121
|
+
}
|
|
122
|
+
/** Fold one stored row into a group accumulator. */
|
|
123
|
+
function addRow(target, r, durationCalls) {
|
|
124
|
+
target.calls += r.calls;
|
|
125
|
+
target.errors += r.errors;
|
|
126
|
+
target.refusals += r.refusals;
|
|
127
|
+
target.tokens_in += r.tokensIn;
|
|
128
|
+
target.tokens_out += r.tokensOut;
|
|
129
|
+
target.total_tokens += r.tokensIn + r.tokensOut;
|
|
130
|
+
target.cost_usd += r.costUsd;
|
|
131
|
+
target.unpriced_calls += r.unpricedCalls;
|
|
132
|
+
target.charged_units += r.chargedUnits;
|
|
133
|
+
target.actors_seen_approx += r.actorsSeen;
|
|
134
|
+
if (r.durationMsMax > target.duration_ms_max)
|
|
135
|
+
target.duration_ms_max = r.durationMsMax;
|
|
136
|
+
durationCalls.n += r.calls;
|
|
137
|
+
durationCalls.sum += r.durationMsSum;
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Read one report. The window defaults to the trailing 30 days; a `grain` the cut does not
|
|
141
|
+
* materialise falls back to the one it does, rather than answering with an empty chart the caller
|
|
142
|
+
* has no way to explain.
|
|
143
|
+
*/
|
|
144
|
+
export async function readUsageReport(storage, args) {
|
|
145
|
+
const table = args.scope === 'owner' ? OWNER_REPORTS : NODE_REPORTS;
|
|
146
|
+
const cutName = table[args.report];
|
|
147
|
+
if (!cutName)
|
|
148
|
+
throw new UnknownReportError(args.report, Object.keys(table));
|
|
149
|
+
const cut = findCut(cutName);
|
|
150
|
+
if (!cut)
|
|
151
|
+
throw new UnknownReportError(args.report, Object.keys(table));
|
|
152
|
+
const grain = args.grain && cut.grains.includes(args.grain)
|
|
153
|
+
? args.grain
|
|
154
|
+
: (cut.grains.includes('day') ? 'day' : cut.grains[0]);
|
|
155
|
+
const from = args.from ?? dayNDaysAgo(30);
|
|
156
|
+
const to = args.to ?? dayNDaysAgo(0);
|
|
157
|
+
const rows = await queryUsageRollupLive(storage, {
|
|
158
|
+
cut: cutName,
|
|
159
|
+
grain,
|
|
160
|
+
from,
|
|
161
|
+
to: grain === 'hour' ? `${to}T23` : to,
|
|
162
|
+
// The whole reason owner scoping is safe here: an owner report is a cut that CARRIES ownerGhii,
|
|
163
|
+
// and the value comes from the route's resolved identity, never from a query parameter.
|
|
164
|
+
ownerGhii: args.scope === 'owner' ? args.ownerGhii : undefined,
|
|
165
|
+
limit: 50_000,
|
|
166
|
+
}, cut.stream);
|
|
167
|
+
// ── Group by the cut's dimension tuple ──
|
|
168
|
+
const groups = new Map();
|
|
169
|
+
const totals = emptyTotals();
|
|
170
|
+
const totalDuration = { n: 0, sum: 0 };
|
|
171
|
+
const series = new Map();
|
|
172
|
+
// The dimensions a row is actually GROUPED by, after two removals.
|
|
173
|
+
//
|
|
174
|
+
// ownerGhii, when the scope already pinned it. An owner-scoped read of `llm.owner` pins the only
|
|
175
|
+
// dimension that cut has, so what is left to distinguish one row from another is time — which is
|
|
176
|
+
// why "spend per day" groups by bucket instead of showing one row labelled with the reader's own
|
|
177
|
+
// identity.
|
|
178
|
+
//
|
|
179
|
+
// outcome, always. It QUALIFIES a call, it does not identify one, and `refusals` and `errors`
|
|
180
|
+
// are already metrics on every row. Grouping by it too split one surface into an ok row and an
|
|
181
|
+
// error row that both read "mcp", which is a table that answers no question anyone asked.
|
|
182
|
+
//
|
|
183
|
+
// Derived rather than declared per report, so a new cut gets the right shape with nothing for its
|
|
184
|
+
// author to remember.
|
|
185
|
+
const groupDims = cut.dims.filter(d => d !== 'outcome' && !(d === 'ownerGhii' && args.scope === 'owner'));
|
|
186
|
+
const isTimeSeries = groupDims.length === 0;
|
|
187
|
+
for (const r of rows) {
|
|
188
|
+
const dims = {};
|
|
189
|
+
for (const d of groupDims) {
|
|
190
|
+
const value = r[d];
|
|
191
|
+
if (value)
|
|
192
|
+
dims[d] = value;
|
|
193
|
+
}
|
|
194
|
+
const key = isTimeSeries
|
|
195
|
+
// Nothing but time distinguishes these rows, so the bucket IS the row's identity.
|
|
196
|
+
? r.bucket
|
|
197
|
+
: (LABEL_ORDER.map(d => dims[d]).find(v => !!v) ?? '(unattributed)');
|
|
198
|
+
const groupKey = isTimeSeries ? r.bucket : groupDims.map(d => r[d]).join(DIM_SEPARATOR);
|
|
199
|
+
let entry = groups.get(groupKey);
|
|
200
|
+
if (!entry) {
|
|
201
|
+
entry = { g: { key, dims, ...emptyTotals() }, d: { n: 0, sum: 0 } };
|
|
202
|
+
groups.set(groupKey, entry);
|
|
203
|
+
}
|
|
204
|
+
addRow(entry.g, r, entry.d);
|
|
205
|
+
addRow(totals, r, totalDuration);
|
|
206
|
+
if (args.series) {
|
|
207
|
+
const s = series.get(r.bucket) ?? { bucket: r.bucket, calls: 0, cost_usd: 0, total_tokens: 0 };
|
|
208
|
+
s.calls += r.calls;
|
|
209
|
+
s.cost_usd += r.costUsd;
|
|
210
|
+
s.total_tokens += r.tokensIn + r.tokensOut;
|
|
211
|
+
series.set(r.bucket, s);
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
for (const { g, d } of groups.values()) {
|
|
215
|
+
g.duration_ms_avg = d.n > 0 ? Math.round(d.sum / d.n) : 0;
|
|
216
|
+
}
|
|
217
|
+
totals.duration_ms_avg = totalDuration.n > 0 ? Math.round(totalDuration.sum / totalDuration.n) : 0;
|
|
218
|
+
const limit = Math.min(Math.max(args.limit ?? 200, 1), 2000);
|
|
219
|
+
const ordered = [...groups.values()].map(e => e.g).sort((a, b) => {
|
|
220
|
+
// A time series reads chronologically; everything else reads worst-or-biggest first, which is
|
|
221
|
+
// what someone opening a usage report is actually looking for.
|
|
222
|
+
if (isTimeSeries)
|
|
223
|
+
return a.key.localeCompare(b.key);
|
|
224
|
+
if (b.cost_usd !== a.cost_usd)
|
|
225
|
+
return b.cost_usd - a.cost_usd;
|
|
226
|
+
return b.calls - a.calls;
|
|
227
|
+
}).slice(0, limit);
|
|
228
|
+
const hotWindowStart = dayNDaysAgo(Number(process.env.AIMEAT_USAGE_HOT_DAYS) || 90);
|
|
229
|
+
return {
|
|
230
|
+
report: args.report,
|
|
231
|
+
cut: cutName,
|
|
232
|
+
grain,
|
|
233
|
+
from,
|
|
234
|
+
to,
|
|
235
|
+
scope: args.scope,
|
|
236
|
+
owner: args.scope === 'owner' ? (args.ownerGhii ?? null) : null,
|
|
237
|
+
series: [...series.values()].sort((a, b) => a.bucket.localeCompare(b.bucket)),
|
|
238
|
+
groups: ordered,
|
|
239
|
+
totals,
|
|
240
|
+
computed_through: await usageComputedThrough(storage),
|
|
241
|
+
// The rollups themselves go back further than raw does. Saying so is what stops someone
|
|
242
|
+
// drilling into an old month and reading an empty raw list as "nothing happened".
|
|
243
|
+
beyond_hot_window: from < hotWindowStart,
|
|
244
|
+
};
|
|
245
|
+
}
|
|
246
|
+
//# sourceMappingURL=usage-read.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"usage-read.js","sourceRoot":"","sources":["../../../../src/services/usage/usage-read.ts"],"names":[],"mappings":"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"}
|
|
@@ -42,6 +42,10 @@ export interface UsageEventInput {
|
|
|
42
42
|
/** The AI provenance record this call produced (TARGET-058), so a spend can be joined to what it
|
|
43
43
|
* made. Optional — every existing caller keeps working without it. */
|
|
44
44
|
provenanceId?: string;
|
|
45
|
+
/** Which app spent this, as `owner/filename`. Empty for an agent's own call. */
|
|
46
|
+
appId?: string;
|
|
47
|
+
/** Which door the spend came through: 'app', 'mcp', 'schedule', ''. Matches UsageCall.surface. */
|
|
48
|
+
surface?: string;
|
|
45
49
|
/** Override the record timestamp (defaults to now). */
|
|
46
50
|
ts?: string;
|
|
47
51
|
}
|
|
@@ -71,6 +75,7 @@ export declare function extractUsageFields(data: Record<string, unknown>): {
|
|
|
71
75
|
capabilityId?: string;
|
|
72
76
|
consumerGhii?: string;
|
|
73
77
|
provenanceId?: string;
|
|
78
|
+
appId?: string;
|
|
74
79
|
} | null;
|
|
75
80
|
/**
|
|
76
81
|
* Turn one telemetry event into a priced usage event, when it carries what pricing needs.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"usage-metering.d.ts","sourceRoot":"","sources":["../../../src/services/usage-metering.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAGH,OAAO,KAAK,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAMxE,MAAM,WAAW,eAAe;IAC9B,iEAAiE;IACjE,SAAS,EAAE,MAAM,CAAC;IAClB,0BAA0B;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,6EAA6E;IAC7E,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,8FAA8F;IAC9F,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,0DAA0D;IAC1D,MAAM,EAAE,MAAM,CAAC;IACf,oEAAoE;IACpE,WAAW,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC;IAC7B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,+EAA+E;IAC/E,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;2EACuE;IACvE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,uDAAuD;IACvD,EAAE,CAAC,EAAE,MAAM,CAAC;CACb;AAMD;;;;;GAKG;AACH,wBAAsB,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,eAAe,CAAC,
|
|
1
|
+
{"version":3,"file":"usage-metering.d.ts","sourceRoot":"","sources":["../../../src/services/usage-metering.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAGH,OAAO,KAAK,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAMxE,MAAM,WAAW,eAAe;IAC9B,iEAAiE;IACjE,SAAS,EAAE,MAAM,CAAC;IAClB,0BAA0B;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,6EAA6E;IAC7E,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,8FAA8F;IAC9F,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,0DAA0D;IAC1D,MAAM,EAAE,MAAM,CAAC;IACf,oEAAoE;IACpE,WAAW,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC;IAC7B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,+EAA+E;IAC/E,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;2EACuE;IACvE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,gFAAgF;IAChF,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,kGAAkG;IAClG,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,uDAAuD;IACvD,EAAE,CAAC,EAAE,MAAM,CAAC;CACb;AAMD;;;;;GAKG;AACH,wBAAsB,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,eAAe,CAAC,CA2EzG;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG;IACjE,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,EAAE,MAAM,CAAC;IACzB,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC;IAC7B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,GAAG,IAAI,CAsCP;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,oBAAoB,CACtC,OAAO,EAAE,OAAO,EAChB,GAAG,EAAE;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,EAC9D,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,GAC1C,OAAO,CAAC,IAAI,CAAC,CAiBf"}
|
|
@@ -61,6 +61,8 @@ export async function recordUsageEvent(storage, input) {
|
|
|
61
61
|
capabilityId: input.capabilityId,
|
|
62
62
|
consumerGhii: input.consumerGhii,
|
|
63
63
|
provenanceId: input.provenanceId,
|
|
64
|
+
appId: input.appId ?? '',
|
|
65
|
+
surface: input.surface ?? '',
|
|
64
66
|
};
|
|
65
67
|
// 1. Source of truth — must persist (billing audit, TARGET-019). Let failures propagate.
|
|
66
68
|
await storage.appendUsageEvent(event);
|
|
@@ -133,6 +135,11 @@ export function extractUsageFields(data) {
|
|
|
133
135
|
// This is a CLAIM by the agent, stored on the agent's own row — it grants nothing: resolving
|
|
134
136
|
// that id still goes through the authorized /v1/provenance/:id, which checks ownership itself.
|
|
135
137
|
provenanceId: str(data.provenance_id),
|
|
138
|
+
// Which app this call was made FOR. Same class of field as organism_id and capability_id above:
|
|
139
|
+
// a CLAIM by the reporting agent, stored on its own row, granting nothing. It is what makes an
|
|
140
|
+
// agent's work on behalf of an app show up in the per-app view instead of vanishing into
|
|
141
|
+
// "unattributed" — the app is what the spend was for, whichever door reported it.
|
|
142
|
+
appId: str(data.app_id),
|
|
136
143
|
};
|
|
137
144
|
}
|
|
138
145
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"usage-metering.js","sourceRoot":"","sources":["../../../src/services/usage-metering.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"usage-metering.js","sourceRoot":"","sources":["../../../src/services/usage-metering.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,6 +6,13 @@
|
|
|
6
6
|
* Extracted from engine.ts to satisfy max-file-lines.
|
|
7
7
|
* @usage import { validateHumanAnswer, applyHumanAnswer } from './engine-human.js';
|
|
8
8
|
* @version-history
|
|
9
|
+
* v1.2.0 — 2026-08-15 — The upgrade requires a PERSON, which the paragraph guarding it always
|
|
10
|
+
* said and the code never asked. An agent could call aimeat_workflow_answer on the step holding
|
|
11
|
+
* its own draft and the node stamped that content 'editorial-control' with the note "reviewed
|
|
12
|
+
* by <the agent>", turning the public disclosure label from "no human editorial review" into
|
|
13
|
+
* the reviewed wording with nobody having read the bytes. `byIsHuman` is set by the door that
|
|
14
|
+
* knows the principal class and absent everywhere else, so agents keep answering and stop
|
|
15
|
+
* upgrading. E2E test-quality audit finding A18.
|
|
9
16
|
* v1.1.0 — 2026-08-01 — TARGET-058 Phase 4: a human-input step that names `reviews_key` re-stamps
|
|
10
17
|
* the reviewed content with humanInvolvement 'editorial-control'. This is the ONLY place in
|
|
11
18
|
* the engine that may upgrade that field, and a watchdog timeout default never does — nobody
|
|
@@ -20,6 +27,14 @@ export interface HumanAnswerValue {
|
|
|
20
27
|
pick: string;
|
|
21
28
|
other?: string;
|
|
22
29
|
by: string;
|
|
30
|
+
/**
|
|
31
|
+
* Was the answerer a PERSON? Absent means no, deliberately: the upgrade below is the one thing in
|
|
32
|
+
* the engine that can turn "no human editorial review" into "reviewed by a person", so a caller
|
|
33
|
+
* has to say so on purpose. `by` alone cannot answer it — an agent's GAII and a human's GHII are
|
|
34
|
+
* both just strings here, and inferring humanness from their shape would break the moment a new
|
|
35
|
+
* principal class arrives.
|
|
36
|
+
*/
|
|
37
|
+
byIsHuman?: boolean;
|
|
23
38
|
}
|
|
24
39
|
/**
|
|
25
40
|
* Validate an incoming answer against the question PINNED at ask time (not the current def — a
|