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,336 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file src/storage/providers/postgres-kysely/methods/usage.ts
|
|
3
|
+
* @description Postgres implementation of usage telemetry's three layers: the hot call stream, the
|
|
4
|
+
* archive sweep, and the discriminated serving rollup with its transactional fold.
|
|
5
|
+
* Design: docs/internal/telemetria/02-design.md
|
|
6
|
+
*
|
|
7
|
+
* BIGINT ARRIVES AS A STRING. node-postgres returns int8 as text to avoid silent precision loss,
|
|
8
|
+
* so every metric read goes through `num()`. Reading them raw would put "42" where 42 belongs and
|
|
9
|
+
* turn a sum into concatenation, which is exactly the kind of defect a chart makes look plausible.
|
|
10
|
+
* @structure
|
|
11
|
+
* - usageMethods.appendUsageCall / listUsageCalls / *ForFold
|
|
12
|
+
* - usageMethods.archiveUsageRows
|
|
13
|
+
* - usageMethods.getUsageCursor / setUsageCursor / advanceUsageRollup
|
|
14
|
+
* - usageMethods.queryUsageRollup / clearUsageRollupRange
|
|
15
|
+
* @usage Object.assign(PostgresKyselyStorage.prototype, usageMethods) in ../index.ts
|
|
16
|
+
* @version-history
|
|
17
|
+
* v1.0.0 — 2026-08-14 — Initial: three-layer usage telemetry substrate.
|
|
18
|
+
*/
|
|
19
|
+
import { randomUUID } from 'node:crypto';
|
|
20
|
+
import { sql } from 'kysely';
|
|
21
|
+
/** int8 comes back as a string; anything unparseable is 0 rather than NaN reaching a chart. */
|
|
22
|
+
function num(v) {
|
|
23
|
+
if (typeof v === 'number')
|
|
24
|
+
return Number.isFinite(v) ? v : 0;
|
|
25
|
+
if (typeof v === 'bigint')
|
|
26
|
+
return Number(v);
|
|
27
|
+
if (typeof v === 'string') {
|
|
28
|
+
const n = Number(v);
|
|
29
|
+
return Number.isFinite(n) ? n : 0;
|
|
30
|
+
}
|
|
31
|
+
return 0;
|
|
32
|
+
}
|
|
33
|
+
function obj(v) {
|
|
34
|
+
return v && typeof v === 'object' && !Array.isArray(v) ? v : {};
|
|
35
|
+
}
|
|
36
|
+
function numObj(v) {
|
|
37
|
+
const out = {};
|
|
38
|
+
for (const [k, val] of Object.entries(obj(v)))
|
|
39
|
+
out[k] = num(val);
|
|
40
|
+
return out;
|
|
41
|
+
}
|
|
42
|
+
function toCall(r) {
|
|
43
|
+
return {
|
|
44
|
+
id: r.id,
|
|
45
|
+
ts: r.ts,
|
|
46
|
+
ownerGhii: r.ownerGhii,
|
|
47
|
+
actorGaii: r.actorGaii ?? '',
|
|
48
|
+
actorKind: (r.actorKind || 'owner'),
|
|
49
|
+
surface: r.surface,
|
|
50
|
+
coordinate: r.coordinate ?? '',
|
|
51
|
+
appId: r.appId ?? '',
|
|
52
|
+
counterpartyGhii: r.counterpartyGhii ?? '',
|
|
53
|
+
outcome: (r.outcome || 'ok'),
|
|
54
|
+
reason: r.reason ?? '',
|
|
55
|
+
durationMs: num(r.durationMs),
|
|
56
|
+
chargedUnits: num(r.chargedUnits),
|
|
57
|
+
unit: (r.unit ?? ''),
|
|
58
|
+
currency: r.currency ?? '',
|
|
59
|
+
entitlementId: r.entitlementId ?? '',
|
|
60
|
+
runId: r.runId ?? '',
|
|
61
|
+
meta: obj(r.meta),
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
function toRollup(r) {
|
|
65
|
+
return {
|
|
66
|
+
id: r.id,
|
|
67
|
+
cut: r.cut,
|
|
68
|
+
grain: r.grain,
|
|
69
|
+
bucket: r.bucket,
|
|
70
|
+
ownerGhii: r.ownerGhii ?? '',
|
|
71
|
+
actorGaii: r.actorGaii ?? '',
|
|
72
|
+
appId: r.appId ?? '',
|
|
73
|
+
model: r.model ?? '',
|
|
74
|
+
provider: r.provider ?? '',
|
|
75
|
+
surface: r.surface ?? '',
|
|
76
|
+
outcome: r.outcome ?? '',
|
|
77
|
+
coordinate: r.coordinate ?? '',
|
|
78
|
+
counterpartyGhii: r.counterpartyGhii ?? '',
|
|
79
|
+
calls: num(r.calls),
|
|
80
|
+
errors: num(r.errors),
|
|
81
|
+
refusals: num(r.refusals),
|
|
82
|
+
tokensIn: num(r.tokensIn),
|
|
83
|
+
tokensOut: num(r.tokensOut),
|
|
84
|
+
costUsd: num(r.costUsd),
|
|
85
|
+
unpricedCalls: num(r.unpricedCalls),
|
|
86
|
+
chargedUnits: num(r.chargedUnits),
|
|
87
|
+
durationMsSum: num(r.durationMsSum),
|
|
88
|
+
durationMsMax: num(r.durationMsMax),
|
|
89
|
+
actorsSeen: num(r.actorsSeen),
|
|
90
|
+
extra: numObj(r.extra),
|
|
91
|
+
updatedAt: r.updatedAt,
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
/** The LLM-ledger row shape the fold consumes. Kept local — the ledger's own mapper is private. */
|
|
95
|
+
function toEvent(r) {
|
|
96
|
+
return {
|
|
97
|
+
id: r.id,
|
|
98
|
+
ts: r.ts,
|
|
99
|
+
agentGaii: r.agentGaii,
|
|
100
|
+
ownerGhii: r.ownerGhii,
|
|
101
|
+
runId: r.runId ?? undefined,
|
|
102
|
+
model: r.model,
|
|
103
|
+
provider: r.provider,
|
|
104
|
+
promptTokens: num(r.promptTokens),
|
|
105
|
+
completionTokens: num(r.completionTokens),
|
|
106
|
+
costUsd: r.costUsd == null ? null : num(r.costUsd),
|
|
107
|
+
priceRef: r.priceRef ?? null,
|
|
108
|
+
source: r.source,
|
|
109
|
+
apiKeyScope: r.apiKeyScope,
|
|
110
|
+
organismId: r.organismId ?? undefined,
|
|
111
|
+
workspaceId: r.workspaceId ?? undefined,
|
|
112
|
+
capabilityId: r.capabilityId ?? undefined,
|
|
113
|
+
consumerGhii: r.consumerGhii ?? undefined,
|
|
114
|
+
provenanceId: r.provenanceId ?? undefined,
|
|
115
|
+
appId: r.appId ?? '',
|
|
116
|
+
surface: r.surface ?? '',
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
export const usageMethods = {
|
|
120
|
+
// ── Layer 1 ──
|
|
121
|
+
async appendUsageCall(rows) {
|
|
122
|
+
if (!rows.length)
|
|
123
|
+
return;
|
|
124
|
+
await this.db.insertInto('UsageCall').values(rows.map(r => ({
|
|
125
|
+
id: r.id, ts: r.ts, ownerGhii: r.ownerGhii,
|
|
126
|
+
actorGaii: r.actorGaii, actorKind: r.actorKind, surface: r.surface,
|
|
127
|
+
coordinate: r.coordinate, appId: r.appId, counterpartyGhii: r.counterpartyGhii,
|
|
128
|
+
outcome: r.outcome, reason: r.reason, durationMs: r.durationMs,
|
|
129
|
+
chargedUnits: r.chargedUnits, unit: r.unit, currency: r.currency,
|
|
130
|
+
entitlementId: r.entitlementId, runId: r.runId,
|
|
131
|
+
meta: JSON.stringify(r.meta),
|
|
132
|
+
}))).execute();
|
|
133
|
+
},
|
|
134
|
+
async listUsageCalls(filter) {
|
|
135
|
+
// NOT owner-scoped unless the filter says so: the route gates this on the operator role and
|
|
136
|
+
// records its own inspection (design: the audit rule).
|
|
137
|
+
let q = this.db.selectFrom('UsageCall').selectAll();
|
|
138
|
+
if (filter.ownerGhii)
|
|
139
|
+
q = q.where('ownerGhii', '=', filter.ownerGhii);
|
|
140
|
+
if (filter.actorGaii)
|
|
141
|
+
q = q.where('actorGaii', '=', filter.actorGaii);
|
|
142
|
+
if (filter.surface)
|
|
143
|
+
q = q.where('surface', '=', filter.surface);
|
|
144
|
+
if (filter.appId)
|
|
145
|
+
q = q.where('appId', '=', filter.appId);
|
|
146
|
+
if (filter.outcome)
|
|
147
|
+
q = q.where('outcome', '=', filter.outcome);
|
|
148
|
+
if (filter.from)
|
|
149
|
+
q = q.where('ts', '>=', filter.from);
|
|
150
|
+
if (filter.to)
|
|
151
|
+
q = q.where('ts', '<=', filter.to);
|
|
152
|
+
const limit = Math.min(Math.max(filter.limit ?? 200, 1), 2000);
|
|
153
|
+
const rows = await q.orderBy('ts', 'desc').limit(limit).execute();
|
|
154
|
+
return rows.map(r => toCall(r));
|
|
155
|
+
},
|
|
156
|
+
async listUsageCallsForFold(c) {
|
|
157
|
+
// Strictly AFTER (lastTs, lastId) in the stream's total order. A row-value comparison, so the
|
|
158
|
+
// second field only decides ties — the plain `ts > x OR (ts = x AND id > y)` written out.
|
|
159
|
+
const rows = await this.db.selectFrom('UsageCall').selectAll()
|
|
160
|
+
.where(sql `("ts", "id") > (${c.lastTs}, ${c.lastId})`)
|
|
161
|
+
.orderBy('ts', 'asc').orderBy('id', 'asc')
|
|
162
|
+
.limit(Math.min(Math.max(c.limit, 1), 20_000))
|
|
163
|
+
.execute();
|
|
164
|
+
return rows.map(r => toCall(r));
|
|
165
|
+
},
|
|
166
|
+
async listUsageEventsForFold(c) {
|
|
167
|
+
const rows = await this.db.selectFrom('AgentUsageEvent').selectAll()
|
|
168
|
+
.where(sql `("ts", "id") > (${c.lastTs}, ${c.lastId})`)
|
|
169
|
+
.orderBy('ts', 'asc').orderBy('id', 'asc')
|
|
170
|
+
.limit(Math.min(Math.max(c.limit, 1), 20_000))
|
|
171
|
+
.execute();
|
|
172
|
+
return rows.map(r => toEvent(r));
|
|
173
|
+
},
|
|
174
|
+
// ── Layer 2 ──
|
|
175
|
+
async archiveUsageRows(args) {
|
|
176
|
+
const batch = Math.min(Math.max(args.batch, 1), 20_000);
|
|
177
|
+
const archivedAt = new Date().toISOString();
|
|
178
|
+
// INSERT … SELECT then DELETE, per table, inside one transaction each: a crash between the two
|
|
179
|
+
// halves must not leave a row in both places or in neither. `ON CONFLICT DO NOTHING` makes a
|
|
180
|
+
// replayed batch idempotent (the id is the archive's primary key too).
|
|
181
|
+
//
|
|
182
|
+
// COLUMNS ARE NAMED, not `SELECT *`. A positional copy works until someone ALTERs the hot table,
|
|
183
|
+
// and then it either fails loudly or, if the new column happens to type-match, writes values
|
|
184
|
+
// into the wrong columns of a table nobody looks at.
|
|
185
|
+
const usageCalls = await this.transaction(async () => {
|
|
186
|
+
const picked = await this.db.selectFrom('UsageCall').select('id')
|
|
187
|
+
.where('ts', '<', args.before).orderBy('ts', 'asc').limit(batch).execute();
|
|
188
|
+
const ids = picked.map(p => p.id);
|
|
189
|
+
if (!ids.length)
|
|
190
|
+
return 0;
|
|
191
|
+
await sql `
|
|
192
|
+
INSERT INTO "UsageCallArchive" (
|
|
193
|
+
"id","ts","ownerGhii","actorGaii","actorKind","surface","coordinate","appId",
|
|
194
|
+
"counterpartyGhii","outcome","reason","durationMs","chargedUnits","unit","currency",
|
|
195
|
+
"entitlementId","runId","meta","archivedAt")
|
|
196
|
+
SELECT
|
|
197
|
+
"id","ts","ownerGhii","actorGaii","actorKind","surface","coordinate","appId",
|
|
198
|
+
"counterpartyGhii","outcome","reason","durationMs","chargedUnits","unit","currency",
|
|
199
|
+
"entitlementId","runId","meta", ${archivedAt}
|
|
200
|
+
FROM "UsageCall" WHERE "id" = ANY(${ids})
|
|
201
|
+
ON CONFLICT ("id") DO NOTHING
|
|
202
|
+
`.execute(this.db);
|
|
203
|
+
await this.db.deleteFrom('UsageCall').where('id', 'in', ids).execute();
|
|
204
|
+
return ids.length;
|
|
205
|
+
});
|
|
206
|
+
const usageEvents = await this.transaction(async () => {
|
|
207
|
+
const picked = await this.db.selectFrom('AgentUsageEvent').select('id')
|
|
208
|
+
.where('ts', '<', args.before).orderBy('ts', 'asc').limit(batch).execute();
|
|
209
|
+
const ids = picked.map(p => p.id);
|
|
210
|
+
if (!ids.length)
|
|
211
|
+
return 0;
|
|
212
|
+
await sql `
|
|
213
|
+
INSERT INTO "AgentUsageEventArchive" (
|
|
214
|
+
"id","ts","agentGaii","ownerGhii","runId","model","provider","promptTokens",
|
|
215
|
+
"completionTokens","costUsd","priceRef","source","apiKeyScope","organismId",
|
|
216
|
+
"workspaceId","capabilityId","consumerGhii","provenanceId","appId","surface","archivedAt")
|
|
217
|
+
SELECT
|
|
218
|
+
"id","ts","agentGaii","ownerGhii","runId","model","provider","promptTokens",
|
|
219
|
+
"completionTokens","costUsd","priceRef","source","apiKeyScope","organismId",
|
|
220
|
+
"workspaceId","capabilityId","consumerGhii","provenanceId","appId","surface", ${archivedAt}
|
|
221
|
+
FROM "AgentUsageEvent" WHERE "id" = ANY(${ids})
|
|
222
|
+
ON CONFLICT ("id") DO NOTHING
|
|
223
|
+
`.execute(this.db);
|
|
224
|
+
await this.db.deleteFrom('AgentUsageEvent').where('id', 'in', ids).execute();
|
|
225
|
+
return ids.length;
|
|
226
|
+
});
|
|
227
|
+
// Hour-grain rollups are the live-dashboard resolution and are not kept: the day grain carries
|
|
228
|
+
// the history. Deleted rather than archived — it is derived data, rebuildable from raw.
|
|
229
|
+
const pruned = await this.db.deleteFrom('UsageRollup')
|
|
230
|
+
.where('grain', '=', 'hour').where('bucket', '<', args.pruneHourBefore)
|
|
231
|
+
.executeTakeFirst();
|
|
232
|
+
return { usageCalls, usageEvents, hourRollupsPruned: Number(pruned?.numDeletedRows ?? 0) };
|
|
233
|
+
},
|
|
234
|
+
async pruneUsageArchive(before) {
|
|
235
|
+
const calls = await this.db.deleteFrom('UsageCallArchive').where('ts', '<', before).executeTakeFirst();
|
|
236
|
+
const events = await this.db.deleteFrom('AgentUsageEventArchive').where('ts', '<', before).executeTakeFirst();
|
|
237
|
+
return {
|
|
238
|
+
usageCalls: Number(calls?.numDeletedRows ?? 0),
|
|
239
|
+
usageEvents: Number(events?.numDeletedRows ?? 0),
|
|
240
|
+
};
|
|
241
|
+
},
|
|
242
|
+
// ── Layer 3 ──
|
|
243
|
+
async getUsageCursor(stream) {
|
|
244
|
+
const row = await this.db.selectFrom('UsageRollupState').selectAll()
|
|
245
|
+
.where('stream', '=', stream).executeTakeFirst();
|
|
246
|
+
if (!row)
|
|
247
|
+
return null;
|
|
248
|
+
return { stream, lastTs: row.lastTs, lastId: row.lastId, updatedAt: row.updatedAt };
|
|
249
|
+
},
|
|
250
|
+
async setUsageCursor(stream, lastTs, lastId) {
|
|
251
|
+
const updatedAt = new Date().toISOString();
|
|
252
|
+
await this.db.insertInto('UsageRollupState')
|
|
253
|
+
.values({ stream, lastTs, lastId, updatedAt })
|
|
254
|
+
.onConflict(oc => oc.column('stream').doUpdateSet({ lastTs, lastId, updatedAt }))
|
|
255
|
+
.execute();
|
|
256
|
+
},
|
|
257
|
+
async advanceUsageRollup(args) {
|
|
258
|
+
const updatedAt = new Date().toISOString();
|
|
259
|
+
// ONE transaction, and that is the whole exactly-once guarantee. A crash before commit replays
|
|
260
|
+
// these rows; a crash after commit continues past them. Split the two halves and one of those
|
|
261
|
+
// outcomes becomes a double count.
|
|
262
|
+
await this.transaction(async () => {
|
|
263
|
+
for (const d of args.deltas) {
|
|
264
|
+
await this.db.insertInto('UsageRollup').values({
|
|
265
|
+
id: randomUUID(),
|
|
266
|
+
cut: d.cut, grain: d.grain, bucket: d.bucket,
|
|
267
|
+
ownerGhii: d.ownerGhii, actorGaii: d.actorGaii, appId: d.appId,
|
|
268
|
+
model: d.model, provider: d.provider, surface: d.surface,
|
|
269
|
+
outcome: d.outcome, coordinate: d.coordinate, counterpartyGhii: d.counterpartyGhii,
|
|
270
|
+
calls: d.calls, errors: d.errors, refusals: d.refusals,
|
|
271
|
+
tokensIn: d.tokensIn, tokensOut: d.tokensOut, costUsd: d.costUsd,
|
|
272
|
+
unpricedCalls: d.unpricedCalls, chargedUnits: d.chargedUnits,
|
|
273
|
+
durationMsSum: d.durationMsSum, durationMsMax: d.durationMsMax,
|
|
274
|
+
actorsSeen: d.actorsSeen,
|
|
275
|
+
extra: JSON.stringify(d.extra ?? {}),
|
|
276
|
+
updatedAt,
|
|
277
|
+
}).onConflict(oc => oc
|
|
278
|
+
.columns(['cut', 'grain', 'bucket', 'ownerGhii', 'actorGaii', 'appId', 'model',
|
|
279
|
+
'provider', 'surface', 'outcome', 'coordinate', 'counterpartyGhii'])
|
|
280
|
+
.doUpdateSet({
|
|
281
|
+
calls: sql `"UsageRollup"."calls" + ${d.calls}`,
|
|
282
|
+
errors: sql `"UsageRollup"."errors" + ${d.errors}`,
|
|
283
|
+
refusals: sql `"UsageRollup"."refusals" + ${d.refusals}`,
|
|
284
|
+
tokensIn: sql `"UsageRollup"."tokensIn" + ${d.tokensIn}`,
|
|
285
|
+
tokensOut: sql `"UsageRollup"."tokensOut" + ${d.tokensOut}`,
|
|
286
|
+
costUsd: sql `"UsageRollup"."costUsd" + ${d.costUsd}`,
|
|
287
|
+
unpricedCalls: sql `"UsageRollup"."unpricedCalls" + ${d.unpricedCalls}`,
|
|
288
|
+
chargedUnits: sql `"UsageRollup"."chargedUnits" + ${d.chargedUnits}`,
|
|
289
|
+
durationMsSum: sql `"UsageRollup"."durationMsSum" + ${d.durationMsSum}`,
|
|
290
|
+
// A maximum is not a sum. This is the one metric that does not add.
|
|
291
|
+
durationMsMax: sql `GREATEST("UsageRollup"."durationMsMax", ${d.durationMsMax})`,
|
|
292
|
+
actorsSeen: sql `"UsageRollup"."actorsSeen" + ${d.actorsSeen}`,
|
|
293
|
+
extra: sql `"UsageRollup"."extra" || ${JSON.stringify(d.extra ?? {})}::jsonb`,
|
|
294
|
+
updatedAt,
|
|
295
|
+
})).execute();
|
|
296
|
+
}
|
|
297
|
+
await this.db.insertInto('UsageRollupState')
|
|
298
|
+
.values({ stream: args.stream, lastTs: args.lastTs, lastId: args.lastId, updatedAt })
|
|
299
|
+
.onConflict(oc => oc.column('stream')
|
|
300
|
+
.doUpdateSet({ lastTs: args.lastTs, lastId: args.lastId, updatedAt }))
|
|
301
|
+
.execute();
|
|
302
|
+
});
|
|
303
|
+
},
|
|
304
|
+
async queryUsageRollup(filter) {
|
|
305
|
+
let q = this.db.selectFrom('UsageRollup').selectAll().where('cut', '=', filter.cut);
|
|
306
|
+
if (filter.grain)
|
|
307
|
+
q = q.where('grain', '=', filter.grain);
|
|
308
|
+
if (filter.from)
|
|
309
|
+
q = q.where('bucket', '>=', filter.from);
|
|
310
|
+
if (filter.to)
|
|
311
|
+
q = q.where('bucket', '<=', filter.to);
|
|
312
|
+
if (filter.ownerGhii)
|
|
313
|
+
q = q.where('ownerGhii', '=', filter.ownerGhii);
|
|
314
|
+
if (filter.appId)
|
|
315
|
+
q = q.where('appId', '=', filter.appId);
|
|
316
|
+
if (filter.actorGaii)
|
|
317
|
+
q = q.where('actorGaii', '=', filter.actorGaii);
|
|
318
|
+
if (filter.counterpartyGhii)
|
|
319
|
+
q = q.where('counterpartyGhii', '=', filter.counterpartyGhii);
|
|
320
|
+
const limit = Math.min(Math.max(filter.limit ?? 5000, 1), 50_000);
|
|
321
|
+
const rows = await q.orderBy('bucket', 'asc').limit(limit).execute();
|
|
322
|
+
return rows.map(r => toRollup(r));
|
|
323
|
+
},
|
|
324
|
+
async clearUsageRollupRange(args) {
|
|
325
|
+
let q = this.db.deleteFrom('UsageRollup');
|
|
326
|
+
if (args.grain)
|
|
327
|
+
q = q.where('grain', '=', args.grain);
|
|
328
|
+
if (args.from)
|
|
329
|
+
q = q.where('bucket', '>=', args.from);
|
|
330
|
+
if (args.to)
|
|
331
|
+
q = q.where('bucket', '<=', args.to);
|
|
332
|
+
const res = await q.executeTakeFirst();
|
|
333
|
+
return Number(res?.numDeletedRows ?? 0);
|
|
334
|
+
},
|
|
335
|
+
};
|
|
336
|
+
//# sourceMappingURL=usage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"usage.js","sourceRoot":"","sources":["../../../../../../src/storage/providers/postgres-kysely/methods/usage.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,GAAG,EAAE,MAAM,QAAQ,CAAC;AAiB7B,+FAA+F;AAC/F,SAAS,GAAG,CAAC,CAAU;IACrB,IAAI,OAAO,CAAC,KAAK,QAAQ;QAAE,OAAO,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7D,IAAI,OAAO,CAAC,KAAK,QAAQ;QAAE,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC;IAC5C,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE,CAAC;QAAC,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QAAC,OAAO,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAAC,CAAC;IACtF,OAAO,CAAC,CAAC;AACX,CAAC;AAED,SAAS,GAAG,CAAC,CAAU;IACrB,OAAO,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAE,CAA6B,CAAC,CAAC,CAAC,EAAE,CAAC;AAC/F,CAAC;AAED,SAAS,MAAM,CAAC,CAAU;IACxB,MAAM,GAAG,GAA2B,EAAE,CAAC;IACvC,KAAK,MAAM,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAAE,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;IACjE,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,MAAM,CAAC,CAA0B;IACxC,OAAO;QACL,EAAE,EAAE,CAAC,CAAC,EAAY;QAClB,EAAE,EAAE,CAAC,CAAC,EAAY;QAClB,SAAS,EAAE,CAAC,CAAC,SAAmB;QAChC,SAAS,EAAG,CAAC,CAAC,SAAoB,IAAI,EAAE;QACxC,SAAS,EAAE,CAAE,CAAC,CAAC,SAAoB,IAAI,OAAO,CAAmB;QACjE,OAAO,EAAE,CAAC,CAAC,OAAuB;QAClC,UAAU,EAAG,CAAC,CAAC,UAAqB,IAAI,EAAE;QAC1C,KAAK,EAAG,CAAC,CAAC,KAAgB,IAAI,EAAE;QAChC,gBAAgB,EAAG,CAAC,CAAC,gBAA2B,IAAI,EAAE;QACtD,OAAO,EAAE,CAAE,CAAC,CAAC,OAAkB,IAAI,IAAI,CAAiB;QACxD,MAAM,EAAG,CAAC,CAAC,MAAiB,IAAI,EAAE;QAClC,UAAU,EAAE,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC;QAC7B,YAAY,EAAE,GAAG,CAAC,CAAC,CAAC,YAAY,CAAC;QACjC,IAAI,EAAE,CAAE,CAAC,CAAC,IAAe,IAAI,EAAE,CAA4B;QAC3D,QAAQ,EAAG,CAAC,CAAC,QAAmB,IAAI,EAAE;QACtC,aAAa,EAAG,CAAC,CAAC,aAAwB,IAAI,EAAE;QAChD,KAAK,EAAG,CAAC,CAAC,KAAgB,IAAI,EAAE;QAChC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;KAClB,CAAC;AACJ,CAAC;AAED,SAAS,QAAQ,CAAC,CAA0B;IAC1C,OAAO;QACL,EAAE,EAAE,CAAC,CAAC,EAAY;QAClB,GAAG,EAAE,CAAC,CAAC,GAAa;QACpB,KAAK,EAAE,CAAC,CAAC,KAAuB;QAChC,MAAM,EAAE,CAAC,CAAC,MAAgB;QAC1B,SAAS,EAAG,CAAC,CAAC,SAAoB,IAAI,EAAE;QACxC,SAAS,EAAG,CAAC,CAAC,SAAoB,IAAI,EAAE;QACxC,KAAK,EAAG,CAAC,CAAC,KAAgB,IAAI,EAAE;QAChC,KAAK,EAAG,CAAC,CAAC,KAAgB,IAAI,EAAE;QAChC,QAAQ,EAAG,CAAC,CAAC,QAAmB,IAAI,EAAE;QACtC,OAAO,EAAG,CAAC,CAAC,OAAkB,IAAI,EAAE;QACpC,OAAO,EAAG,CAAC,CAAC,OAAkB,IAAI,EAAE;QACpC,UAAU,EAAG,CAAC,CAAC,UAAqB,IAAI,EAAE;QAC1C,gBAAgB,EAAG,CAAC,CAAC,gBAA2B,IAAI,EAAE;QACtD,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC;QACnB,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC;QACrB,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC;QACzB,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC;QACzB,SAAS,EAAE,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC;QAC3B,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC;QACvB,aAAa,EAAE,GAAG,CAAC,CAAC,CAAC,aAAa,CAAC;QACnC,YAAY,EAAE,GAAG,CAAC,CAAC,CAAC,YAAY,CAAC;QACjC,aAAa,EAAE,GAAG,CAAC,CAAC,CAAC,aAAa,CAAC;QACnC,aAAa,EAAE,GAAG,CAAC,CAAC,CAAC,aAAa,CAAC;QACnC,UAAU,EAAE,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC;QAC7B,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC;QACtB,SAAS,EAAE,CAAC,CAAC,SAAmB;KACjC,CAAC;AACJ,CAAC;AAED,mGAAmG;AACnG,SAAS,OAAO,CAAC,CAA0B;IACzC,OAAO;QACL,EAAE,EAAE,CAAC,CAAC,EAAY;QAClB,EAAE,EAAE,CAAC,CAAC,EAAY;QAClB,SAAS,EAAE,CAAC,CAAC,SAAmB;QAChC,SAAS,EAAE,CAAC,CAAC,SAAmB;QAChC,KAAK,EAAG,CAAC,CAAC,KAAuB,IAAI,SAAS;QAC9C,KAAK,EAAE,CAAC,CAAC,KAAe;QACxB,QAAQ,EAAE,CAAC,CAAC,QAAkB;QAC9B,YAAY,EAAE,GAAG,CAAC,CAAC,CAAC,YAAY,CAAC;QACjC,gBAAgB,EAAE,GAAG,CAAC,CAAC,CAAC,gBAAgB,CAAC;QACzC,OAAO,EAAE,CAAC,CAAC,OAAO,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC;QAClD,QAAQ,EAAG,CAAC,CAAC,QAA0B,IAAI,IAAI;QAC/C,MAAM,EAAE,CAAC,CAAC,MAAgB;QAC1B,WAAW,EAAE,CAAC,CAAC,WAA6B;QAC5C,UAAU,EAAG,CAAC,CAAC,UAA4B,IAAI,SAAS;QACxD,WAAW,EAAG,CAAC,CAAC,WAA6B,IAAI,SAAS;QAC1D,YAAY,EAAG,CAAC,CAAC,YAA8B,IAAI,SAAS;QAC5D,YAAY,EAAG,CAAC,CAAC,YAA8B,IAAI,SAAS;QAC5D,YAAY,EAAG,CAAC,CAAC,YAA8B,IAAI,SAAS;QAC5D,KAAK,EAAG,CAAC,CAAC,KAAgB,IAAI,EAAE;QAChC,OAAO,EAAG,CAAC,CAAC,OAAkB,IAAI,EAAE;KACrC,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,gBAAgB;IAEhB,KAAK,CAAC,eAAe,CAA8B,IAAuB;QACxE,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,OAAO;QACzB,MAAM,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YAC1D,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC,SAAS;YAC1C,SAAS,EAAE,CAAC,CAAC,SAAS,EAAE,SAAS,EAAE,CAAC,CAAC,SAAS,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO;YAClE,UAAU,EAAE,CAAC,CAAC,UAAU,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,gBAAgB,EAAE,CAAC,CAAC,gBAAgB;YAC9E,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,UAAU,EAAE,CAAC,CAAC,UAAU;YAC9D,YAAY,EAAE,CAAC,CAAC,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ;YAChE,aAAa,EAAE,CAAC,CAAC,aAAa,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK;YAC9C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC;SAC7B,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;IACjB,CAAC;IAED,KAAK,CAAC,cAAc,CAA8B,MAAuB;QACvE,4FAA4F;QAC5F,uDAAuD;QACvD,IAAI,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,SAAS,EAAE,CAAC;QACpD,IAAI,MAAM,CAAC,SAAS;YAAE,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,GAAG,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;QACtE,IAAI,MAAM,CAAC,SAAS;YAAE,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,GAAG,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;QACtE,IAAI,MAAM,CAAC,OAAO;YAAE,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,SAAS,EAAE,GAAG,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;QAChE,IAAI,MAAM,CAAC,KAAK;YAAE,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;QAC1D,IAAI,MAAM,CAAC,OAAO;YAAE,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,SAAS,EAAE,GAAG,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;QAChE,IAAI,MAAM,CAAC,IAAI;YAAE,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;QACtD,IAAI,MAAM,CAAC,EAAE;YAAE,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;QAClD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,IAAI,GAAG,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;QAC/D,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC;QAClE,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAuC,CAAC,CAAC,CAAC;IACxE,CAAC;IAED,KAAK,CAAC,qBAAqB,CAA8B,CAAkB;QACzE,8FAA8F;QAC9F,0FAA0F;QAC1F,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,SAAS,EAAE;aAC3D,KAAK,CAAC,GAAG,CAAS,mBAAmB,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC;aAC9D,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC;aACzC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;aAC7C,OAAO,EAAE,CAAC;QACb,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAuC,CAAC,CAAC,CAAC;IACxE,CAAC;IAED,KAAK,CAAC,sBAAsB,CAA8B,CAAkB;QAC1E,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC,SAAS,EAAE;aACjE,KAAK,CAAC,GAAG,CAAS,mBAAmB,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC;aAC9D,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC;aACzC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;aAC7C,OAAO,EAAE,CAAC;QACb,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,CAAuC,CAAC,CAAC,CAAC;IACzE,CAAC;IAED,gBAAgB;IAEhB,KAAK,CAAC,gBAAgB,CAEpB,IAAgE;QAEhE,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;QACxD,MAAM,UAAU,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAE5C,+FAA+F;QAC/F,6FAA6F;QAC7F,uEAAuE;QACvE,EAAE;QACF,iGAAiG;QACjG,6FAA6F;QAC7F,qDAAqD;QACrD,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,KAAK,IAAI,EAAE;YACnD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC;iBAC9D,KAAK,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC;YAC7E,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YAClC,IAAI,CAAC,GAAG,CAAC,MAAM;gBAAE,OAAO,CAAC,CAAC;YAC1B,MAAM,GAAG,CAAA;;;;;;;;4CAQ6B,UAAU;4CACV,GAAG;;OAExC,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACnB,MAAM,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC;YACvE,OAAO,GAAG,CAAC,MAAM,CAAC;QACpB,CAAC,CAAC,CAAC;QAEH,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,KAAK,IAAI,EAAE;YACpD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC;iBACpE,KAAK,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC;YAC7E,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YAClC,IAAI,CAAC,GAAG,CAAC,MAAM;gBAAE,OAAO,CAAC,CAAC;YAC1B,MAAM,GAAG,CAAA;;;;;;;;0FAQ2E,UAAU;kDAClD,GAAG;;OAE9C,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACnB,MAAM,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC;YAC7E,OAAO,GAAG,CAAC,MAAM,CAAC;QACpB,CAAC,CAAC,CAAC;QAEH,+FAA+F;QAC/F,wFAAwF;QACxF,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC;aACnD,KAAK,CAAC,OAAO,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC,KAAK,CAAC,QAAQ,EAAE,GAAG,EAAE,IAAI,CAAC,eAAe,CAAC;aACtE,gBAAgB,EAAE,CAAC;QAEtB,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,IAAI,CAAC,CAAC,EAAE,CAAC;IAC7F,CAAC;IAED,KAAK,CAAC,iBAAiB,CACQ,MAAc;QAE3C,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,kBAAkB,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC,gBAAgB,EAAE,CAAC;QACvG,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,wBAAwB,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC,gBAAgB,EAAE,CAAC;QAC9G,OAAO;YACL,UAAU,EAAE,MAAM,CAAC,KAAK,EAAE,cAAc,IAAI,CAAC,CAAC;YAC9C,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,IAAI,CAAC,CAAC;SACjD,CAAC;IACJ,CAAC;IAED,gBAAgB;IAEhB,KAAK,CAAC,cAAc,CAA8B,MAAsB;QACtE,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,kBAAkB,CAAC,CAAC,SAAS,EAAE;aACjE,KAAK,CAAC,QAAQ,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC,gBAAgB,EAAE,CAAC;QACnD,IAAI,CAAC,GAAG;YAAE,OAAO,IAAI,CAAC;QACtB,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,CAAC,SAAS,EAAE,CAAC;IACtF,CAAC;IAED,KAAK,CAAC,cAAc,CAA8B,MAAsB,EAAE,MAAc,EAAE,MAAc;QACtG,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAC3C,MAAM,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,kBAAkB,CAAC;aACzC,MAAM,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;aAC7C,UAAU,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,WAAW,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;aAChF,OAAO,EAAE,CAAC;IACf,CAAC;IAED,KAAK,CAAC,kBAAkB,CAEtB,IAA4F;QAE5F,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAC3C,+FAA+F;QAC/F,8FAA8F;QAC9F,mCAAmC;QACnC,MAAM,IAAI,CAAC,WAAW,CAAC,KAAK,IAAI,EAAE;YAChC,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;gBAC5B,MAAM,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC,MAAM,CAAC;oBAC7C,EAAE,EAAE,UAAU,EAAE;oBAChB,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM;oBAC5C,SAAS,EAAE,CAAC,CAAC,SAAS,EAAE,SAAS,EAAE,CAAC,CAAC,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK;oBAC9D,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO;oBACxD,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,UAAU,EAAE,CAAC,CAAC,UAAU,EAAE,gBAAgB,EAAE,CAAC,CAAC,gBAAgB;oBAClF,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ;oBACtD,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,SAAS,EAAE,CAAC,CAAC,SAAS,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO;oBAChE,aAAa,EAAE,CAAC,CAAC,aAAa,EAAE,YAAY,EAAE,CAAC,CAAC,YAAY;oBAC5D,aAAa,EAAE,CAAC,CAAC,aAAa,EAAE,aAAa,EAAE,CAAC,CAAC,aAAa;oBAC9D,UAAU,EAAE,CAAC,CAAC,UAAU;oBACxB,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;oBACpC,SAAS;iBACV,CAAC,CAAC,UAAU,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;qBACnB,OAAO,CAAC,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,WAAW,EAAE,OAAO,EAAE,OAAO;oBACpE,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,YAAY,EAAE,kBAAkB,CAAC,CAAC;qBAC7E,WAAW,CAAC;oBACX,KAAK,EAAE,GAAG,CAAA,2BAA2B,CAAC,CAAC,KAAK,EAAE;oBAC9C,MAAM,EAAE,GAAG,CAAA,4BAA4B,CAAC,CAAC,MAAM,EAAE;oBACjD,QAAQ,EAAE,GAAG,CAAA,8BAA8B,CAAC,CAAC,QAAQ,EAAE;oBACvD,QAAQ,EAAE,GAAG,CAAA,8BAA8B,CAAC,CAAC,QAAQ,EAAE;oBACvD,SAAS,EAAE,GAAG,CAAA,+BAA+B,CAAC,CAAC,SAAS,EAAE;oBAC1D,OAAO,EAAE,GAAG,CAAA,6BAA6B,CAAC,CAAC,OAAO,EAAE;oBACpD,aAAa,EAAE,GAAG,CAAA,mCAAmC,CAAC,CAAC,aAAa,EAAE;oBACtE,YAAY,EAAE,GAAG,CAAA,kCAAkC,CAAC,CAAC,YAAY,EAAE;oBACnE,aAAa,EAAE,GAAG,CAAA,mCAAmC,CAAC,CAAC,aAAa,EAAE;oBACtE,oEAAoE;oBACpE,aAAa,EAAE,GAAG,CAAA,2CAA2C,CAAC,CAAC,aAAa,GAAG;oBAC/E,UAAU,EAAE,GAAG,CAAA,gCAAgC,CAAC,CAAC,UAAU,EAAE;oBAC7D,KAAK,EAAE,GAAG,CAAA,4BAA4B,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC,SAAS;oBAC5E,SAAS;iBACV,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;YAClB,CAAC;YACD,MAAM,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,kBAAkB,CAAC;iBACzC,MAAM,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE,CAAC;iBACpF,UAAU,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC;iBAClC,WAAW,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;iBACvE,OAAO,EAAE,CAAC;QACf,CAAC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,gBAAgB,CAA8B,MAAyB;QAC3E,IAAI,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC,SAAS,EAAE,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;QACpF,IAAI,MAAM,CAAC,KAAK;YAAE,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;QAC1D,IAAI,MAAM,CAAC,IAAI;YAAE,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,QAAQ,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;QAC1D,IAAI,MAAM,CAAC,EAAE;YAAE,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,QAAQ,EAAE,IAAI,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;QACtD,IAAI,MAAM,CAAC,SAAS;YAAE,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,GAAG,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;QACtE,IAAI,MAAM,CAAC,KAAK;YAAE,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;QAC1D,IAAI,MAAM,CAAC,SAAS;YAAE,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,GAAG,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;QACtE,IAAI,MAAM,CAAC,gBAAgB;YAAE,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,kBAAkB,EAAE,GAAG,EAAE,MAAM,CAAC,gBAAgB,CAAC,CAAC;QAC3F,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;QAClE,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC;QACrE,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAuC,CAAC,CAAC,CAAC;IAC1E,CAAC;IAED,KAAK,CAAC,qBAAqB,CAEzB,IAA4D;QAE5D,IAAI,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;QAC1C,IAAI,IAAI,CAAC,KAAK;YAAE,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QACtD,IAAI,IAAI,CAAC,IAAI;YAAE,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,QAAQ,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QACtD,IAAI,IAAI,CAAC,EAAE;YAAE,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,QAAQ,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;QAClD,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,gBAAgB,EAAE,CAAC;QACvC,OAAO,MAAM,CAAC,GAAG,EAAE,cAAc,IAAI,CAAC,CAAC,CAAC;IAC1C,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
-- 0036_usage_telemetry.sql
|
|
2
|
+
--
|
|
3
|
+
-- Usage telemetry, three layers. Design: docs/internal/telemetria/02-design.md
|
|
4
|
+
--
|
|
5
|
+
-- LAYER 1, hot raw UsageCall + the existing AgentUsageEvent. Append-only, 90 days.
|
|
6
|
+
-- LAYER 2, cold UsageCallArchive + AgentUsageEventArchive. Storage, never a data source.
|
|
7
|
+
-- LAYER 3, serving UsageRollup. Everything a dashboard reads, precomputed incrementally.
|
|
8
|
+
--
|
|
9
|
+
-- WHY A DISCRIMINATED ROLLUP RATHER THAN A TABLE PER REPORT. One table per report is fast and
|
|
10
|
+
-- unextendable: each new question costs a migration on both backends. A fully generic
|
|
11
|
+
-- (scope, key, metrics JSONB) table is extendable and unqueryable: a metric inside JSONB cannot be
|
|
12
|
+
-- summed or ordered by in SQL. So: fixed dimension columns, fixed metric columns, and a `cut` naming
|
|
13
|
+
-- which dimensions THIS row is keyed by. A new report is a new cut in rollup-cuts.ts plus a backfill.
|
|
14
|
+
--
|
|
15
|
+
-- '' IS NOT NULL. A dimension outside the cut holds the empty string, so the unique index is total
|
|
16
|
+
-- and the upsert is a plain ON CONFLICT DO UPDATE SET x = x + excluded.x. A nullable dimension would
|
|
17
|
+
-- make the conflict target unreachable, which is the same trap AgentUsageDaily already documents.
|
|
18
|
+
|
|
19
|
+
-- ── Layer 1: one row per observable call ────────────────────────────────────────────────────────
|
|
20
|
+
-- The point of this table is `outcome` and `reason`. A refused call is the record that a capability
|
|
21
|
+
-- was wanted and not delivered, and before this table that record did not exist anywhere.
|
|
22
|
+
CREATE TABLE IF NOT EXISTS "UsageCall" (
|
|
23
|
+
"id" TEXT NOT NULL,
|
|
24
|
+
"ts" TEXT NOT NULL,
|
|
25
|
+
-- The human whose account this belongs to: the payer for a priced call, the app owner's user for
|
|
26
|
+
-- an app open. Never a bare owner name — always a GHII, so it joins the ledger.
|
|
27
|
+
"ownerGhii" TEXT NOT NULL,
|
|
28
|
+
-- The exact principal: GHII, GAII, GEAI, or an app grant's gaii. ownerGhii answers "whose",
|
|
29
|
+
-- actorGaii answers "which of theirs".
|
|
30
|
+
"actorGaii" TEXT NOT NULL DEFAULT '',
|
|
31
|
+
"actorKind" TEXT NOT NULL DEFAULT 'owner',
|
|
32
|
+
"surface" TEXT NOT NULL,
|
|
33
|
+
"coordinate" TEXT NOT NULL DEFAULT '',
|
|
34
|
+
"appId" TEXT NOT NULL DEFAULT '',
|
|
35
|
+
-- The provider being bought from on an exchange call, and the inspected owner on an operator
|
|
36
|
+
-- drill — in both cases "the other party to this call".
|
|
37
|
+
"counterpartyGhii" TEXT NOT NULL DEFAULT '',
|
|
38
|
+
"outcome" TEXT NOT NULL DEFAULT 'ok',
|
|
39
|
+
"reason" TEXT NOT NULL DEFAULT '',
|
|
40
|
+
"durationMs" INTEGER NOT NULL DEFAULT 0,
|
|
41
|
+
"chargedUnits" BIGINT NOT NULL DEFAULT 0,
|
|
42
|
+
"unit" TEXT NOT NULL DEFAULT '',
|
|
43
|
+
"currency" TEXT NOT NULL DEFAULT '',
|
|
44
|
+
"entitlementId" TEXT NOT NULL DEFAULT '',
|
|
45
|
+
"runId" TEXT NOT NULL DEFAULT '',
|
|
46
|
+
-- Detail the fold never reads. Anything the rollup aggregates gets a column instead.
|
|
47
|
+
"meta" JSONB NOT NULL DEFAULT '{}'::jsonb,
|
|
48
|
+
CONSTRAINT "UsageCall_pkey" PRIMARY KEY ("id")
|
|
49
|
+
);
|
|
50
|
+
|
|
51
|
+
-- The fold's cursor. (ts, id) is a total order over the stream, so the watermark can resume exactly.
|
|
52
|
+
CREATE INDEX IF NOT EXISTS "UsageCall_cursor_idx" ON "UsageCall"("ts", "id");
|
|
53
|
+
-- The operator drill and the archive sweep.
|
|
54
|
+
CREATE INDEX IF NOT EXISTS "UsageCall_owner_ts_idx" ON "UsageCall"("ownerGhii", "ts" DESC);
|
|
55
|
+
|
|
56
|
+
-- ── Layer 1: two dimensions onto the existing LLM ledger ────────────────────────────────────────
|
|
57
|
+
-- Without appId, /v1/ai/complete cannot write into the ledger, which is why app-side model and
|
|
58
|
+
-- provider reporting had no data behind it rather than merely no UI.
|
|
59
|
+
ALTER TABLE "AgentUsageEvent" ADD COLUMN IF NOT EXISTS "appId" TEXT NOT NULL DEFAULT '';
|
|
60
|
+
ALTER TABLE "AgentUsageEvent" ADD COLUMN IF NOT EXISTS "surface" TEXT NOT NULL DEFAULT '';
|
|
61
|
+
CREATE INDEX IF NOT EXISTS "AgentUsageEvent_cursor_idx" ON "AgentUsageEvent"("ts", "id");
|
|
62
|
+
|
|
63
|
+
-- "AgentUsageDaily" IS DELIBERATELY UNTOUCHED. It is the LIVE counter the daily AI budget and the
|
|
64
|
+
-- threshold alerts read at the metering chokepoint, so it must stay synchronous and it must stay
|
|
65
|
+
-- cheap. Per-app daily totals come from the fold instead (cuts llm.app / llm.owner.app), which costs
|
|
66
|
+
-- no write on the call path. Widening its key would also mean rebuilding the SQLite table, whose
|
|
67
|
+
-- composite PRIMARY KEY cannot take a new column by ALTER.
|
|
68
|
+
|
|
69
|
+
-- ── Layer 2: archive. Column-identical plus archivedAt. Nothing queries these except an export. ──
|
|
70
|
+
CREATE TABLE IF NOT EXISTS "UsageCallArchive" (
|
|
71
|
+
"id" TEXT NOT NULL,
|
|
72
|
+
"ts" TEXT NOT NULL,
|
|
73
|
+
"ownerGhii" TEXT NOT NULL,
|
|
74
|
+
"actorGaii" TEXT NOT NULL DEFAULT '',
|
|
75
|
+
"actorKind" TEXT NOT NULL DEFAULT 'owner',
|
|
76
|
+
"surface" TEXT NOT NULL,
|
|
77
|
+
"coordinate" TEXT NOT NULL DEFAULT '',
|
|
78
|
+
"appId" TEXT NOT NULL DEFAULT '',
|
|
79
|
+
"counterpartyGhii" TEXT NOT NULL DEFAULT '',
|
|
80
|
+
"outcome" TEXT NOT NULL DEFAULT 'ok',
|
|
81
|
+
"reason" TEXT NOT NULL DEFAULT '',
|
|
82
|
+
"durationMs" INTEGER NOT NULL DEFAULT 0,
|
|
83
|
+
"chargedUnits" BIGINT NOT NULL DEFAULT 0,
|
|
84
|
+
"unit" TEXT NOT NULL DEFAULT '',
|
|
85
|
+
"currency" TEXT NOT NULL DEFAULT '',
|
|
86
|
+
"entitlementId" TEXT NOT NULL DEFAULT '',
|
|
87
|
+
"runId" TEXT NOT NULL DEFAULT '',
|
|
88
|
+
"meta" JSONB NOT NULL DEFAULT '{}'::jsonb,
|
|
89
|
+
"archivedAt" TEXT NOT NULL,
|
|
90
|
+
CONSTRAINT "UsageCallArchive_pkey" PRIMARY KEY ("id")
|
|
91
|
+
);
|
|
92
|
+
CREATE INDEX IF NOT EXISTS "UsageCallArchive_owner_ts_idx" ON "UsageCallArchive"("ownerGhii", "ts");
|
|
93
|
+
|
|
94
|
+
CREATE TABLE IF NOT EXISTS "AgentUsageEventArchive" (
|
|
95
|
+
"id" TEXT NOT NULL,
|
|
96
|
+
"ts" TEXT NOT NULL,
|
|
97
|
+
"agentGaii" TEXT NOT NULL,
|
|
98
|
+
"ownerGhii" TEXT NOT NULL,
|
|
99
|
+
"runId" TEXT,
|
|
100
|
+
"model" TEXT NOT NULL,
|
|
101
|
+
"provider" TEXT NOT NULL,
|
|
102
|
+
"promptTokens" INTEGER NOT NULL DEFAULT 0,
|
|
103
|
+
"completionTokens" INTEGER NOT NULL DEFAULT 0,
|
|
104
|
+
"costUsd" DOUBLE PRECISION,
|
|
105
|
+
"priceRef" TEXT,
|
|
106
|
+
"source" TEXT NOT NULL,
|
|
107
|
+
"apiKeyScope" TEXT NOT NULL DEFAULT 'own',
|
|
108
|
+
"organismId" TEXT,
|
|
109
|
+
"workspaceId" TEXT,
|
|
110
|
+
"capabilityId" TEXT,
|
|
111
|
+
"consumerGhii" TEXT,
|
|
112
|
+
"provenanceId" TEXT,
|
|
113
|
+
"appId" TEXT NOT NULL DEFAULT '',
|
|
114
|
+
"surface" TEXT NOT NULL DEFAULT '',
|
|
115
|
+
"archivedAt" TEXT NOT NULL,
|
|
116
|
+
CONSTRAINT "AgentUsageEventArchive_pkey" PRIMARY KEY ("id")
|
|
117
|
+
);
|
|
118
|
+
CREATE INDEX IF NOT EXISTS "AgentUsageEventArchive_owner_ts_idx" ON "AgentUsageEventArchive"("ownerGhii", "ts");
|
|
119
|
+
|
|
120
|
+
-- ── Layer 3: the one table every dashboard reads ────────────────────────────────────────────────
|
|
121
|
+
CREATE TABLE IF NOT EXISTS "UsageRollup" (
|
|
122
|
+
"id" TEXT NOT NULL,
|
|
123
|
+
-- Which dimension set this row is keyed by, e.g. 'llm.owner.model'. Declared in rollup-cuts.ts.
|
|
124
|
+
"cut" TEXT NOT NULL,
|
|
125
|
+
"grain" TEXT NOT NULL,
|
|
126
|
+
-- 'YYYY-MM-DD' at day grain, 'YYYY-MM-DDTHH' at hour grain. Sorts chronologically as text.
|
|
127
|
+
"bucket" TEXT NOT NULL,
|
|
128
|
+
|
|
129
|
+
-- Dimensions. '' means "not part of this cut", i.e. rolled over.
|
|
130
|
+
"ownerGhii" TEXT NOT NULL DEFAULT '',
|
|
131
|
+
"actorGaii" TEXT NOT NULL DEFAULT '',
|
|
132
|
+
"appId" TEXT NOT NULL DEFAULT '',
|
|
133
|
+
"model" TEXT NOT NULL DEFAULT '',
|
|
134
|
+
"provider" TEXT NOT NULL DEFAULT '',
|
|
135
|
+
"surface" TEXT NOT NULL DEFAULT '',
|
|
136
|
+
"outcome" TEXT NOT NULL DEFAULT '',
|
|
137
|
+
"coordinate" TEXT NOT NULL DEFAULT '',
|
|
138
|
+
"counterpartyGhii" TEXT NOT NULL DEFAULT '',
|
|
139
|
+
|
|
140
|
+
-- Metrics. Every one of these ADDS on conflict except durationMsMax, which takes the greater.
|
|
141
|
+
"calls" BIGINT NOT NULL DEFAULT 0,
|
|
142
|
+
"errors" BIGINT NOT NULL DEFAULT 0,
|
|
143
|
+
"refusals" BIGINT NOT NULL DEFAULT 0,
|
|
144
|
+
"tokensIn" BIGINT NOT NULL DEFAULT 0,
|
|
145
|
+
"tokensOut" BIGINT NOT NULL DEFAULT 0,
|
|
146
|
+
"costUsd" DOUBLE PRECISION NOT NULL DEFAULT 0,
|
|
147
|
+
"unpricedCalls" BIGINT NOT NULL DEFAULT 0,
|
|
148
|
+
"chargedUnits" BIGINT NOT NULL DEFAULT 0,
|
|
149
|
+
"durationMsSum" BIGINT NOT NULL DEFAULT 0,
|
|
150
|
+
"durationMsMax" BIGINT NOT NULL DEFAULT 0,
|
|
151
|
+
-- Distinct actors within one fold batch, summed across batches: an approximation FROM BELOW.
|
|
152
|
+
-- Labelled as such wherever it is served, and never used for billing.
|
|
153
|
+
"actorsSeen" BIGINT NOT NULL DEFAULT 0,
|
|
154
|
+
|
|
155
|
+
-- A future metric that does not deserve a column yet. The fold merges it additively by key.
|
|
156
|
+
"extra" JSONB NOT NULL DEFAULT '{}'::jsonb,
|
|
157
|
+
"updatedAt" TEXT NOT NULL,
|
|
158
|
+
CONSTRAINT "UsageRollup_pkey" PRIMARY KEY ("id")
|
|
159
|
+
);
|
|
160
|
+
|
|
161
|
+
-- The conflict target. Total by construction (no nullable dimension), which is what makes the
|
|
162
|
+
-- upsert-add work at all.
|
|
163
|
+
CREATE UNIQUE INDEX IF NOT EXISTS "UsageRollup_key" ON "UsageRollup"(
|
|
164
|
+
"cut", "grain", "bucket", "ownerGhii", "actorGaii", "appId", "model", "provider",
|
|
165
|
+
"surface", "outcome", "coordinate", "counterpartyGhii"
|
|
166
|
+
);
|
|
167
|
+
-- The two read shapes: a whole cut over a range, and one owner's slice of it.
|
|
168
|
+
CREATE INDEX IF NOT EXISTS "UsageRollup_read_idx" ON "UsageRollup"("cut", "grain", "bucket");
|
|
169
|
+
CREATE INDEX IF NOT EXISTS "UsageRollup_owner_idx" ON "UsageRollup"("cut", "ownerGhii", "grain", "bucket");
|
|
170
|
+
|
|
171
|
+
-- ── The fold's watermark ────────────────────────────────────────────────────────────────────────
|
|
172
|
+
-- One row per raw stream. Advanced in the SAME transaction as the deltas it accounts for, which is
|
|
173
|
+
-- what makes the fold exactly-once: a crash before commit replays those rows, a crash after commit
|
|
174
|
+
-- continues past them, and neither double-counts.
|
|
175
|
+
CREATE TABLE IF NOT EXISTS "UsageRollupState" (
|
|
176
|
+
"stream" TEXT NOT NULL,
|
|
177
|
+
"lastTs" TEXT NOT NULL DEFAULT '',
|
|
178
|
+
"lastId" TEXT NOT NULL DEFAULT '',
|
|
179
|
+
"updatedAt" TEXT NOT NULL,
|
|
180
|
+
CONSTRAINT "UsageRollupState_pkey" PRIMARY KEY ("stream")
|
|
181
|
+
);
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
-- 0037_task_created_by.sql
|
|
2
|
+
--
|
|
3
|
+
-- Who ordered this task.
|
|
4
|
+
--
|
|
5
|
+
-- The node knew it at write time on every door and stored it nowhere. That was harmless while a
|
|
6
|
+
-- task was something an owner gave their own agent, and stopped being harmless the moment one agent
|
|
7
|
+
-- started commissioning another: `aimeat_task_get` authorises against `agentGaii`, which is the
|
|
8
|
+
-- RECEIVER, so the party that placed a commission could not read it back.
|
|
9
|
+
--
|
|
10
|
+
-- The cost showed up on 2026-08-15. A chat ordered a build from a fleet concierge, the build
|
|
11
|
+
-- produced nothing and said nothing, and the only record of the attempt was invisible to the one
|
|
12
|
+
-- party waiting on it. A published guide's "watch the task until it completes" step was
|
|
13
|
+
-- unexecutable by anyone, and the failure could not be diagnosed from either side.
|
|
14
|
+
--
|
|
15
|
+
-- Null on every task that predates this column, which is why the read rule treats an absent value
|
|
16
|
+
-- as "not yours" rather than as a match.
|
|
17
|
+
|
|
18
|
+
ALTER TABLE "AgentTask" ADD COLUMN IF NOT EXISTS "createdBy" TEXT;
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
-- 0038_organism_owners.sql
|
|
2
|
+
--
|
|
3
|
+
-- An organism had one owner, and the column holding them held two different facts.
|
|
4
|
+
--
|
|
5
|
+
-- `creatorGhii` answered both "who made this" and "who holds this". The first is history and cannot
|
|
6
|
+
-- change; the second is a role, and a role that only one account can hold has no way back when that
|
|
7
|
+
-- account becomes unreachable. A handover wrote the single column, so moving authority also rewrote
|
|
8
|
+
-- the past: this node's own development organism spent a month claiming it was created by an account
|
|
9
|
+
-- that joined it five weeks after it existed.
|
|
10
|
+
--
|
|
11
|
+
-- Splitting them costs two columns.
|
|
12
|
+
--
|
|
13
|
+
-- createdBy — immutable. A handover never touches it again.
|
|
14
|
+
-- owners — the authority, plural. Never empty; the last owner cannot be removed, only replaced.
|
|
15
|
+
--
|
|
16
|
+
-- BACKFILL. Both start from `creatorGhii`, because it is the only answer the node ever recorded.
|
|
17
|
+
-- For `owners` that is exactly right. For `createdBy` it is right on every organism that never
|
|
18
|
+
-- changed hands, and wrong on the ones that did — there is no record of who held it before a
|
|
19
|
+
-- handover, so this backfill cannot recover it. The alternative, leaving the column null, would put
|
|
20
|
+
-- the same wrong answer in front of every reader anyway (`createdBy ?? creatorGhii`) while also
|
|
21
|
+
-- losing the ones it gets right. Where the true creator is known it is corrected by hand.
|
|
22
|
+
--
|
|
23
|
+
-- `creatorGhii` stays, as a MIRROR of owners[0] maintained by services/organism-ownership.ts, so
|
|
24
|
+
-- federation payloads, exports and v4 clients keep reading a field that is still true. It is
|
|
25
|
+
-- deprecated as of 2026-08-15 and removed in v5.0; nothing new should compare against it.
|
|
26
|
+
|
|
27
|
+
ALTER TABLE "Organism" ADD COLUMN IF NOT EXISTS "createdBy" TEXT;
|
|
28
|
+
ALTER TABLE "Organism" ADD COLUMN IF NOT EXISTS "owners" TEXT[];
|
|
29
|
+
|
|
30
|
+
UPDATE "Organism" SET "createdBy" = "creatorGhii" WHERE "createdBy" IS NULL;
|
|
31
|
+
UPDATE "Organism" SET "owners" = ARRAY["creatorGhii"] WHERE "owners" IS NULL OR cardinality("owners") = 0;
|
package/dist/src/storage/providers/postgres-kysely/migrations/0039_storage_file_utf8_verified.sql
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
-- TARGET-063: record, once per write, whether a stored file's bytes decode as UTF-8.
|
|
2
|
+
--
|
|
3
|
+
-- WHY A COLUMN AND NOT A READ. The served Content-Type of an uploaded text file depends on a strict
|
|
4
|
+
-- UTF-8 decode of the WHOLE file, and until now every response ran that decode: it needed the bytes,
|
|
5
|
+
-- so it read them. Serving a byte range is where that design breaks, because not reading the file is
|
|
6
|
+
-- the entire point of a range. Measured on this backend: an 8-byte suffix range out of a 25 MB file
|
|
7
|
+
-- costs 181 ms as a whole-row read and 3 ms as a database-side substring. The decode belongs on the
|
|
8
|
+
-- write, where the bytes are already in hand and the answer is a property of the file.
|
|
9
|
+
--
|
|
10
|
+
-- NO BACKFILL, DELIBERATELY. There is no UTF-8 validity predicate in SQL that does not raise on the
|
|
11
|
+
-- first bad byte and take the whole UPDATE with it (convert_from raises; pg_input_is_valid does not
|
|
12
|
+
-- cover bytea to text). So existing rows keep NULL, and a range read of one loads the file exactly
|
|
13
|
+
-- as it does today — the same header, the same cost, no guess. Each row settles itself the next time
|
|
14
|
+
-- it is written. Nothing published after this migration is affected, which is the case that matters.
|
|
15
|
+
--
|
|
16
|
+
-- NULL means "not established", never "not UTF-8". utils/app-content-type.ts treats the two the same
|
|
17
|
+
-- way on purpose: both say nothing about the charset and serve the file as it is served today.
|
|
18
|
+
|
|
19
|
+
ALTER TABLE "StorageFile" ADD COLUMN IF NOT EXISTS "utf8Verified" BOOLEAN;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/storage/providers/sqlite/index.ts"],"names":[],"mappings":"AAkCA,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AAGtC,OAAO,KAAK,EAAE,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAGvE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/storage/providers/sqlite/index.ts"],"names":[],"mappings":"AAkCA,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AAGtC,OAAO,KAAK,EAAE,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAGvE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AA+B7D,qBAAa,aAAa;IACxB,EAAE,EAAE,QAAQ,CAAC,QAAQ,CAAC;IACtB,cAAc,mCAA0C;IAExD;;;;OAIG;IACH,OAAO,CAAC,OAAO,CAAK;IACpB;;;OAGG;IACH,OAAO,CAAC,OAAO,CAAuC;gBAE1C,MAAM,EAAE,MAAM;IAS1B;;;;OAIG;IACH,IAAI,iBAAiB,IAAI,OAAO,CAE/B;IAED,gGAAgG;IAChG,oBAAoB,IAAI,OAAO,CAAC,OAAO,CAAC;IAIxC;;;;;OAKG;IACG,WAAW,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAyBtD,oCAAoC;IACpC,KAAK,IAAI,IAAI;CAGd;AAgCD,MAAM,WAAW,aAAc,SAAQ,OAAO,EAAE,eAAe;CAAG"}
|