aimeat 3.2.0 → 3.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/.env.example +58 -1
- package/dist/build-stamp.json +4 -4
- package/dist/locales/en.json +41 -1
- package/dist/locales/es.json +41 -1
- package/dist/locales/fi.json +43 -3
- package/dist/public/changelog.json +12 -0
- package/dist/public/css/views/chat.css +388 -0
- package/dist/public/js/services/chat.js +190 -0
- package/dist/public/js/services/speech-reader.js +26 -0
- package/dist/public/lib/VENDORED.md +1 -0
- package/dist/public/lib/duckdb-wasm@1.32.0/duckdb-browser-eh.worker.js +14 -0
- package/dist/public/lib/duckdb-wasm@1.32.0/duckdb-browser.js +23 -0
- package/dist/public/lib/duckdb-wasm@1.32.0/duckdb-eh.wasm +0 -0
- package/dist/public/lib/duckdb-wasm@1.32.0/extensions/v1.4.3/wasm_eh/parquet.duckdb_extension.wasm +0 -0
- package/dist/public/lib/vendored-assets.json +19 -0
- package/dist/public/llms-full-template.txt +2706 -0
- package/dist/public/llms-index-template.txt +60 -0
- package/dist/public/robots.node.txt +64 -23
- package/dist/public/spa.html +8 -1
- package/dist/public/views/chat/parts.js +257 -0
- package/dist/public/views/chat.js +327 -0
- package/dist/public/views/landing.js +24 -1
- package/dist/public/views/profile/agents/scope-model.js +320 -315
- package/dist/scripts/audit-mcp-schemas.js +50 -0
- package/dist/scripts/audit-mcp-schemas.js.map +1 -1
- package/dist/scripts/build-sdk-libs.d.ts.map +1 -1
- package/dist/scripts/build-sdk-libs.js +1 -0
- package/dist/scripts/build-sdk-libs.js.map +1 -1
- package/dist/scripts/check-ai-disclosure.d.ts +1 -1
- package/dist/scripts/check-ai-disclosure.d.ts.map +1 -1
- package/dist/scripts/check-ai-disclosure.js +30 -3
- package/dist/scripts/check-ai-disclosure.js.map +1 -1
- package/dist/scripts/check-denial-coverage.d.ts +29 -0
- package/dist/scripts/check-denial-coverage.d.ts.map +1 -0
- package/dist/scripts/check-denial-coverage.js +237 -0
- package/dist/scripts/check-denial-coverage.js.map +1 -0
- package/dist/scripts/check-ext-entrypoints.js +14 -2
- package/dist/scripts/check-ext-entrypoints.js.map +1 -1
- package/dist/scripts/check-outbound-fetch.d.ts.map +1 -1
- package/dist/scripts/check-outbound-fetch.js +16 -2
- package/dist/scripts/check-outbound-fetch.js.map +1 -1
- package/dist/scripts/check-sse-parity.js +14 -0
- package/dist/scripts/check-sse-parity.js.map +1 -1
- package/dist/scripts/indexnow.js +9 -7
- package/dist/scripts/indexnow.js.map +1 -1
- package/dist/src/auth/ai-gate.d.ts +25 -0
- package/dist/src/auth/ai-gate.d.ts.map +1 -0
- package/dist/src/auth/ai-gate.js +21 -0
- package/dist/src/auth/ai-gate.js.map +1 -0
- package/dist/src/auth/middleware.d.ts +7 -0
- package/dist/src/auth/middleware.d.ts.map +1 -1
- package/dist/src/auth/middleware.js +15 -21
- package/dist/src/auth/middleware.js.map +1 -1
- package/dist/src/cli/connect/mcp/tools/agent-tasks.d.ts +4 -0
- package/dist/src/cli/connect/mcp/tools/agent-tasks.d.ts.map +1 -1
- package/dist/src/cli/connect/mcp/tools/agent-tasks.js +11 -1
- package/dist/src/cli/connect/mcp/tools/agent-tasks.js.map +1 -1
- package/dist/src/cli/connect/mcp/tools/apps.d.ts.map +1 -1
- package/dist/src/cli/connect/mcp/tools/apps.js +88 -0
- package/dist/src/cli/connect/mcp/tools/apps.js.map +1 -1
- package/dist/src/cli/connect/mcp/tools/core.d.ts +7 -0
- package/dist/src/cli/connect/mcp/tools/core.d.ts.map +1 -1
- package/dist/src/cli/connect/mcp/tools/core.js +83 -4
- package/dist/src/cli/connect/mcp/tools/core.js.map +1 -1
- package/dist/src/cli/connect/onboarding-prompt.js +1 -1
- package/dist/src/cli/connect/skill-bundle.js +1 -1
- package/dist/src/cli/connect/tool-call-defs-agent.d.ts.map +1 -1
- package/dist/src/cli/connect/tool-call-defs-agent.js +38 -9
- package/dist/src/cli/connect/tool-call-defs-agent.js.map +1 -1
- package/dist/src/cli/connect/tool-call-defs-app-draft-edit.d.ts +21 -0
- package/dist/src/cli/connect/tool-call-defs-app-draft-edit.d.ts.map +1 -0
- package/dist/src/cli/connect/tool-call-defs-app-draft-edit.js +137 -0
- package/dist/src/cli/connect/tool-call-defs-app-draft-edit.js.map +1 -0
- package/dist/src/cli/connect/tool-call-defs-apps.d.ts.map +1 -1
- package/dist/src/cli/connect/tool-call-defs-apps.js +114 -25
- package/dist/src/cli/connect/tool-call-defs-apps.js.map +1 -1
- package/dist/src/cli/connect/tool-call-defs-core.d.ts +1 -0
- package/dist/src/cli/connect/tool-call-defs-core.d.ts.map +1 -1
- package/dist/src/cli/connect/tool-call-defs-core.js +179 -26
- package/dist/src/cli/connect/tool-call-defs-core.js.map +1 -1
- package/dist/src/cli/connect/tool-call-defs-organism.d.ts.map +1 -1
- package/dist/src/cli/connect/tool-call-defs-organism.js +20 -3
- package/dist/src/cli/connect/tool-call-defs-organism.js.map +1 -1
- package/dist/src/cli/connect/tool-call.d.ts.map +1 -1
- package/dist/src/cli/connect/tool-call.js +52 -1
- package/dist/src/cli/connect/tool-call.js.map +1 -1
- package/dist/src/config-types-ai.d.ts +76 -0
- package/dist/src/config-types-ai.d.ts.map +1 -0
- package/dist/src/config-types-ai.js +15 -0
- package/dist/src/config-types-ai.js.map +1 -0
- package/dist/src/config-types.d.ts +11 -2
- package/dist/src/config-types.d.ts.map +1 -1
- package/dist/src/config.d.ts.map +1 -1
- package/dist/src/config.js +25 -4
- package/dist/src/config.js.map +1 -1
- package/dist/src/data/builtin-skills.d.ts.map +1 -1
- package/dist/src/data/builtin-skills.js +3 -2
- package/dist/src/data/builtin-skills.js.map +1 -1
- package/dist/src/data/digital-signage-package.js +1 -1
- package/dist/src/data/library-packs/sdk.d.ts.map +1 -1
- package/dist/src/data/library-packs/sdk.js +76 -0
- package/dist/src/data/library-packs/sdk.js.map +1 -1
- package/dist/src/data/library-packs/vendored.d.ts.map +1 -1
- package/dist/src/data/library-packs/vendored.js +81 -0
- package/dist/src/data/library-packs/vendored.js.map +1 -1
- package/dist/src/data/library-packs.d.ts +2 -2
- package/dist/src/data/library-packs.js +2 -2
- package/dist/src/data/public-pages.d.ts +13 -0
- package/dist/src/data/public-pages.d.ts.map +1 -1
- package/dist/src/data/public-pages.js +153 -113
- package/dist/src/data/public-pages.js.map +1 -1
- package/dist/src/generated/api-types.d.ts +1808 -36
- package/dist/src/generated/api-types.d.ts.map +1 -1
- package/dist/src/index-start.d.ts.map +1 -1
- package/dist/src/index-start.js +3 -0
- package/dist/src/index-start.js.map +1 -1
- package/dist/src/mcp/agent-tasks.d.ts.map +1 -1
- package/dist/src/mcp/agent-tasks.js +5 -0
- package/dist/src/mcp/agent-tasks.js.map +1 -1
- package/dist/src/mcp/ai-image.d.ts +22 -0
- package/dist/src/mcp/ai-image.d.ts.map +1 -0
- package/dist/src/mcp/ai-image.js +60 -0
- package/dist/src/mcp/ai-image.js.map +1 -0
- package/dist/src/mcp/annotations.d.ts +5 -0
- package/dist/src/mcp/annotations.d.ts.map +1 -1
- package/dist/src/mcp/annotations.js +18 -0
- package/dist/src/mcp/annotations.js.map +1 -1
- package/dist/src/mcp/apps-draft-edit.d.ts +28 -0
- package/dist/src/mcp/apps-draft-edit.d.ts.map +1 -0
- package/dist/src/mcp/apps-draft-edit.js +164 -0
- package/dist/src/mcp/apps-draft-edit.js.map +1 -0
- package/dist/src/mcp/apps-screenshot.d.ts +26 -0
- package/dist/src/mcp/apps-screenshot.d.ts.map +1 -0
- package/dist/src/mcp/apps-screenshot.js +39 -0
- package/dist/src/mcp/apps-screenshot.js.map +1 -0
- package/dist/src/mcp/catalog/definitions/discovery-work-boards.d.ts +1 -0
- package/dist/src/mcp/catalog/definitions/discovery-work-boards.d.ts.map +1 -1
- package/dist/src/mcp/catalog/definitions/discovery-work-boards.js +40 -0
- package/dist/src/mcp/catalog/definitions/discovery-work-boards.js.map +1 -1
- package/dist/src/mcp/catalog/definitions/organisms-workspaces-apps.d.ts +3 -0
- package/dist/src/mcp/catalog/definitions/organisms-workspaces-apps.d.ts.map +1 -1
- package/dist/src/mcp/catalog/definitions/organisms-workspaces-apps.js +74 -0
- package/dist/src/mcp/catalog/definitions/organisms-workspaces-apps.js.map +1 -1
- package/dist/src/mcp/catalog/definitions/schedules-tasks-memory.d.ts.map +1 -1
- package/dist/src/mcp/catalog/definitions/schedules-tasks-memory.js +1 -0
- package/dist/src/mcp/catalog/definitions/schedules-tasks-memory.js.map +1 -1
- package/dist/src/mcp/catalog/scopes.d.ts.map +1 -1
- package/dist/src/mcp/catalog/scopes.js +19 -1
- package/dist/src/mcp/catalog/scopes.js.map +1 -1
- package/dist/src/mcp/catalog/surfaces.d.ts.map +1 -1
- package/dist/src/mcp/catalog/surfaces.js +18 -4
- package/dist/src/mcp/catalog/surfaces.js.map +1 -1
- package/dist/src/mcp/core-datapackage.d.ts +32 -0
- package/dist/src/mcp/core-datapackage.d.ts.map +1 -0
- package/dist/src/mcp/core-datapackage.js +188 -0
- package/dist/src/mcp/core-datapackage.js.map +1 -0
- package/dist/src/mcp/core-storage.d.ts +7 -3
- package/dist/src/mcp/core-storage.d.ts.map +1 -1
- package/dist/src/mcp/core-storage.js +27 -4
- package/dist/src/mcp/core-storage.js.map +1 -1
- package/dist/src/mcp/core.d.ts.map +1 -1
- package/dist/src/mcp/core.js +3 -0
- package/dist/src/mcp/core.js.map +1 -1
- package/dist/src/mcp/extensions.d.ts.map +1 -1
- package/dist/src/mcp/extensions.js +11 -1
- package/dist/src/mcp/extensions.js.map +1 -1
- package/dist/src/mcp/index.d.ts +9 -0
- package/dist/src/mcp/index.d.ts.map +1 -1
- package/dist/src/mcp/index.js +34 -0
- package/dist/src/mcp/index.js.map +1 -1
- package/dist/src/models/agent-task-schemas.d.ts.map +1 -1
- package/dist/src/models/agent-task-schemas.js +12 -1
- package/dist/src/models/agent-task-schemas.js.map +1 -1
- package/dist/src/models/workflow-schemas.d.ts +178 -1
- package/dist/src/models/workflow-schemas.d.ts.map +1 -1
- package/dist/src/models/workflow-schemas.js +75 -0
- package/dist/src/models/workflow-schemas.js.map +1 -1
- package/dist/src/routes/admin-extensions.d.ts +4 -0
- package/dist/src/routes/admin-extensions.d.ts.map +1 -1
- package/dist/src/routes/admin-extensions.js +135 -142
- package/dist/src/routes/admin-extensions.js.map +1 -1
- package/dist/src/routes/agent-conventions.d.ts.map +1 -1
- package/dist/src/routes/agent-conventions.js +4 -2
- package/dist/src/routes/agent-conventions.js.map +1 -1
- package/dist/src/routes/agent-docs.d.ts +4 -4
- package/dist/src/routes/agent-docs.js +145 -145
- package/dist/src/routes/agent-docs.js.map +1 -1
- package/dist/src/routes/agent-messages.d.ts +6 -0
- package/dist/src/routes/agent-messages.d.ts.map +1 -1
- package/dist/src/routes/agent-messages.js +23 -1
- package/dist/src/routes/agent-messages.js.map +1 -1
- package/dist/src/routes/agent-tasks/create-read.d.ts.map +1 -1
- package/dist/src/routes/agent-tasks/create-read.js +8 -1
- package/dist/src/routes/agent-tasks/create-read.js.map +1 -1
- package/dist/src/routes/agent-tasks/lifecycle.d.ts +4 -1
- package/dist/src/routes/agent-tasks/lifecycle.d.ts.map +1 -1
- package/dist/src/routes/agent-tasks/lifecycle.js +80 -2
- package/dist/src/routes/agent-tasks/lifecycle.js.map +1 -1
- package/dist/src/routes/ai.d.ts +5 -0
- package/dist/src/routes/ai.d.ts.map +1 -1
- package/dist/src/routes/ai.js +55 -16
- package/dist/src/routes/ai.js.map +1 -1
- package/dist/src/routes/app-grants.d.ts.map +1 -1
- package/dist/src/routes/app-grants.js +5 -0
- package/dist/src/routes/app-grants.js.map +1 -1
- package/dist/src/routes/apps/drafts.d.ts +6 -0
- package/dist/src/routes/apps/drafts.d.ts.map +1 -1
- package/dist/src/routes/apps/drafts.js +133 -1
- package/dist/src/routes/apps/drafts.js.map +1 -1
- package/dist/src/routes/apps/read.d.ts.map +1 -1
- package/dist/src/routes/apps/read.js +38 -1
- package/dist/src/routes/apps/read.js.map +1 -1
- package/dist/src/routes/auth-otk.d.ts +28 -0
- package/dist/src/routes/auth-otk.d.ts.map +1 -0
- package/dist/src/routes/auth-otk.js +190 -0
- package/dist/src/routes/auth-otk.js.map +1 -0
- package/dist/src/routes/auth.d.ts +17 -0
- package/dist/src/routes/auth.d.ts.map +1 -1
- package/dist/src/routes/auth.js +44 -153
- package/dist/src/routes/auth.js.map +1 -1
- package/dist/src/routes/bootstrap.d.ts +6 -0
- package/dist/src/routes/bootstrap.d.ts.map +1 -1
- package/dist/src/routes/bootstrap.js +47 -20
- package/dist/src/routes/bootstrap.js.map +1 -1
- package/dist/src/routes/chat.d.ts +23 -0
- package/dist/src/routes/chat.d.ts.map +1 -0
- package/dist/src/routes/chat.js +165 -0
- package/dist/src/routes/chat.js.map +1 -0
- package/dist/src/routes/commerce.js +4 -4
- package/dist/src/routes/commerce.js.map +1 -1
- package/dist/src/routes/datapackages.d.ts +35 -0
- package/dist/src/routes/datapackages.d.ts.map +1 -0
- package/dist/src/routes/datapackages.js +217 -0
- package/dist/src/routes/datapackages.js.map +1 -0
- package/dist/src/routes/disputes.d.ts +8 -0
- package/dist/src/routes/disputes.d.ts.map +1 -1
- package/dist/src/routes/disputes.js +52 -1
- package/dist/src/routes/disputes.js.map +1 -1
- package/dist/src/routes/ecosystem-apps-advisories.d.ts +16 -0
- package/dist/src/routes/ecosystem-apps-advisories.d.ts.map +1 -0
- package/dist/src/routes/ecosystem-apps-advisories.js +104 -0
- package/dist/src/routes/ecosystem-apps-advisories.js.map +1 -0
- package/dist/src/routes/ecosystem-apps.d.ts +6 -0
- package/dist/src/routes/ecosystem-apps.d.ts.map +1 -1
- package/dist/src/routes/ecosystem-apps.js +31 -99
- package/dist/src/routes/ecosystem-apps.js.map +1 -1
- package/dist/src/routes/extensions/actions.d.ts.map +1 -1
- package/dist/src/routes/extensions/actions.js +29 -1
- package/dist/src/routes/extensions/actions.js.map +1 -1
- package/dist/src/routes/federation-sync/routing.d.ts.map +1 -1
- package/dist/src/routes/federation-sync/routing.js +12 -3
- package/dist/src/routes/federation-sync/routing.js.map +1 -1
- package/dist/src/routes/glossary.js +1 -1
- package/dist/src/routes/glossary.js.map +1 -1
- package/dist/src/routes/home/track.d.ts +5 -1
- package/dist/src/routes/home/track.d.ts.map +1 -1
- package/dist/src/routes/home/track.js +20 -6
- package/dist/src/routes/home/track.js.map +1 -1
- package/dist/src/routes/instances/install.d.ts +3 -0
- package/dist/src/routes/instances/install.d.ts.map +1 -1
- package/dist/src/routes/instances/install.js +17 -24
- package/dist/src/routes/instances/install.js.map +1 -1
- package/dist/src/routes/libs.js +1 -1
- package/dist/src/routes/libs.js.map +1 -1
- package/dist/src/routes/llm-proxy.d.ts +34 -0
- package/dist/src/routes/llm-proxy.d.ts.map +1 -0
- package/dist/src/routes/llm-proxy.js +258 -0
- package/dist/src/routes/llm-proxy.js.map +1 -0
- package/dist/src/routes/markdown-mirrors.js +1 -1
- package/dist/src/routes/markdown-mirrors.js.map +1 -1
- package/dist/src/routes/odata.d.ts +36 -0
- package/dist/src/routes/odata.d.ts.map +1 -0
- package/dist/src/routes/odata.js +143 -0
- package/dist/src/routes/odata.js.map +1 -0
- package/dist/src/routes/openrouter.d.ts +4 -0
- package/dist/src/routes/openrouter.d.ts.map +1 -1
- package/dist/src/routes/openrouter.js +10 -1
- package/dist/src/routes/openrouter.js.map +1 -1
- package/dist/src/routes/organisms/gates.d.ts.map +1 -1
- package/dist/src/routes/organisms/gates.js +9 -2
- package/dist/src/routes/organisms/gates.js.map +1 -1
- package/dist/src/routes/portal.d.ts +1 -0
- package/dist/src/routes/portal.d.ts.map +1 -1
- package/dist/src/routes/portal.js +13 -0
- package/dist/src/routes/portal.js.map +1 -1
- package/dist/src/routes/schedules.d.ts +4 -0
- package/dist/src/routes/schedules.d.ts.map +1 -1
- package/dist/src/routes/schedules.js +9 -1
- package/dist/src/routes/schedules.js.map +1 -1
- package/dist/src/routes/storage-files.d.ts +23 -0
- package/dist/src/routes/storage-files.d.ts.map +1 -1
- package/dist/src/routes/storage-files.js +103 -82
- package/dist/src/routes/storage-files.js.map +1 -1
- package/dist/src/routes/workflows.d.ts.map +1 -1
- package/dist/src/routes/workflows.js +9 -1
- package/dist/src/routes/workflows.js.map +1 -1
- package/dist/src/server-bootstrap/routes-loader.d.ts +2 -0
- package/dist/src/server-bootstrap/routes-loader.d.ts.map +1 -1
- package/dist/src/server-bootstrap/routes-loader.js +22 -2
- package/dist/src/server-bootstrap/routes-loader.js.map +1 -1
- package/dist/src/server-bootstrap/service-init.d.ts.map +1 -1
- package/dist/src/server-bootstrap/service-init.js +12 -7
- package/dist/src/server-bootstrap/service-init.js.map +1 -1
- package/dist/src/server-bootstrap/static-files.d.ts.map +1 -1
- package/dist/src/server-bootstrap/static-files.js +44 -10
- package/dist/src/server-bootstrap/static-files.js.map +1 -1
- package/dist/src/services/ai-allowance.d.ts +82 -0
- package/dist/src/services/ai-allowance.d.ts.map +1 -0
- package/dist/src/services/ai-allowance.js +117 -0
- package/dist/src/services/ai-allowance.js.map +1 -0
- package/dist/src/services/ai-completion.d.ts +102 -0
- package/dist/src/services/ai-completion.d.ts.map +1 -1
- package/dist/src/services/ai-completion.js +131 -67
- package/dist/src/services/ai-completion.js.map +1 -1
- package/dist/src/services/ai-image.d.ts +70 -0
- package/dist/src/services/ai-image.d.ts.map +1 -0
- package/dist/src/services/ai-image.js +104 -0
- package/dist/src/services/ai-image.js.map +1 -0
- package/dist/src/services/ai-model-defaults.d.ts +45 -0
- package/dist/src/services/ai-model-defaults.d.ts.map +1 -0
- package/dist/src/services/ai-model-defaults.js +42 -0
- package/dist/src/services/ai-model-defaults.js.map +1 -0
- package/dist/src/services/ai-tool-setup.d.ts +5 -1
- package/dist/src/services/ai-tool-setup.d.ts.map +1 -1
- package/dist/src/services/ai-tool-setup.js +36 -0
- package/dist/src/services/ai-tool-setup.js.map +1 -1
- package/dist/src/services/ai-transcription.d.ts +5 -0
- package/dist/src/services/ai-transcription.d.ts.map +1 -1
- package/dist/src/services/ai-transcription.js +5 -2
- package/dist/src/services/ai-transcription.js.map +1 -1
- package/dist/src/services/app-agent-surfaces.js +4 -4
- package/dist/src/services/app-agent-surfaces.js.map +1 -1
- package/dist/src/services/app-draft-edit.d.ts +144 -0
- package/dist/src/services/app-draft-edit.d.ts.map +1 -0
- package/dist/src/services/app-draft-edit.js +203 -0
- package/dist/src/services/app-draft-edit.js.map +1 -0
- package/dist/src/services/auth-md.js +2 -2
- package/dist/src/services/auth-md.js.map +1 -1
- package/dist/src/services/board-write.d.ts +11 -3
- package/dist/src/services/board-write.d.ts.map +1 -1
- package/dist/src/services/board-write.js +24 -3
- package/dist/src/services/board-write.js.map +1 -1
- package/dist/src/services/chat-agent.d.ts +36 -0
- package/dist/src/services/chat-agent.d.ts.map +1 -0
- package/dist/src/services/chat-agent.js +123 -0
- package/dist/src/services/chat-agent.js.map +1 -0
- package/dist/src/services/chat-session.d.ts +58 -0
- package/dist/src/services/chat-session.d.ts.map +1 -0
- package/dist/src/services/chat-session.js +151 -0
- package/dist/src/services/chat-session.js.map +1 -0
- package/dist/src/services/chat-threads.d.ts +61 -0
- package/dist/src/services/chat-threads.d.ts.map +1 -0
- package/dist/src/services/chat-threads.js +137 -0
- package/dist/src/services/chat-threads.js.map +1 -0
- package/dist/src/services/config-schema.d.ts.map +1 -1
- package/dist/src/services/config-schema.js +2 -1
- package/dist/src/services/config-schema.js.map +1 -1
- package/dist/src/services/datapackage/contract.d.ts +198 -0
- package/dist/src/services/datapackage/contract.d.ts.map +1 -0
- package/dist/src/services/datapackage/contract.js +140 -0
- package/dist/src/services/datapackage/contract.js.map +1 -0
- package/dist/src/services/datapackage/ext-capability.d.ts +85 -0
- package/dist/src/services/datapackage/ext-capability.d.ts.map +1 -0
- package/dist/src/services/datapackage/ext-capability.js +72 -0
- package/dist/src/services/datapackage/ext-capability.js.map +1 -0
- package/dist/src/services/datapackage/odata.d.ts +92 -0
- package/dist/src/services/datapackage/odata.d.ts.map +1 -0
- package/dist/src/services/datapackage/odata.js +256 -0
- package/dist/src/services/datapackage/odata.js.map +1 -0
- package/dist/src/services/datapackage/odps.d.ts +24 -0
- package/dist/src/services/datapackage/odps.d.ts.map +1 -0
- package/dist/src/services/datapackage/odps.js +183 -0
- package/dist/src/services/datapackage/odps.js.map +1 -0
- package/dist/src/services/datapackage/store.d.ts +143 -0
- package/dist/src/services/datapackage/store.d.ts.map +1 -0
- package/dist/src/services/datapackage/store.js +533 -0
- package/dist/src/services/datapackage/store.js.map +1 -0
- package/dist/src/services/datapackage/table.d.ts +67 -0
- package/dist/src/services/datapackage/table.d.ts.map +1 -0
- package/dist/src/services/datapackage/table.js +0 -0
- package/dist/src/services/datapackage/table.js.map +1 -0
- package/dist/src/services/extension-ctx.d.ts +1 -0
- package/dist/src/services/extension-ctx.d.ts.map +1 -1
- package/dist/src/services/extension-ctx.js +31 -6
- package/dist/src/services/extension-ctx.js.map +1 -1
- package/dist/src/services/extension-files.d.ts +20 -0
- package/dist/src/services/extension-files.d.ts.map +1 -1
- package/dist/src/services/extension-files.js +9 -2
- package/dist/src/services/extension-files.js.map +1 -1
- package/dist/src/services/extension-lifecycle.d.ts +3 -0
- package/dist/src/services/extension-lifecycle.d.ts.map +1 -1
- package/dist/src/services/extension-lifecycle.js +2 -26
- package/dist/src/services/extension-lifecycle.js.map +1 -1
- package/dist/src/services/extension-runtime.d.ts +28 -2
- package/dist/src/services/extension-runtime.d.ts.map +1 -1
- package/dist/src/services/extension-runtime.js +22 -0
- package/dist/src/services/extension-runtime.js.map +1 -1
- package/dist/src/services/extension-schedules.d.ts +90 -0
- package/dist/src/services/extension-schedules.d.ts.map +1 -0
- package/dist/src/services/extension-schedules.js +123 -0
- package/dist/src/services/extension-schedules.js.map +1 -0
- package/dist/src/services/extension-system-run.d.ts +91 -0
- package/dist/src/services/extension-system-run.d.ts.map +1 -0
- package/dist/src/services/extension-system-run.js +100 -0
- package/dist/src/services/extension-system-run.js.map +1 -0
- package/dist/src/services/extension-upsert.d.ts +2 -0
- package/dist/src/services/extension-upsert.d.ts.map +1 -1
- package/dist/src/services/extension-upsert.js +6 -24
- package/dist/src/services/extension-upsert.js.map +1 -1
- package/dist/src/services/goose-acp.d.ts +84 -0
- package/dist/src/services/goose-acp.d.ts.map +1 -0
- package/dist/src/services/goose-acp.js +304 -0
- package/dist/src/services/goose-acp.js.map +1 -0
- package/dist/src/services/markdown-negotiation.js +1 -1
- package/dist/src/services/markdown-negotiation.js.map +1 -1
- package/dist/src/services/openrouter.d.ts +43 -1
- package/dist/src/services/openrouter.d.ts.map +1 -1
- package/dist/src/services/openrouter.js +98 -1
- package/dist/src/services/openrouter.js.map +1 -1
- package/dist/src/services/prompt-defaults/tiers-core.js +4 -4
- package/dist/src/services/scheduler-extension-job.d.ts +29 -6
- package/dist/src/services/scheduler-extension-job.d.ts.map +1 -1
- package/dist/src/services/scheduler-extension-job.js +29 -75
- package/dist/src/services/scheduler-extension-job.js.map +1 -1
- package/dist/src/services/scope-vocabulary-migration.d.ts +34 -1
- package/dist/src/services/scope-vocabulary-migration.d.ts.map +1 -1
- package/dist/src/services/scope-vocabulary-migration.js +60 -0
- package/dist/src/services/scope-vocabulary-migration.js.map +1 -1
- package/dist/src/services/screenshot-capture.d.ts +40 -1
- package/dist/src/services/screenshot-capture.d.ts.map +1 -1
- package/dist/src/services/screenshot-capture.js +142 -60
- package/dist/src/services/screenshot-capture.js.map +1 -1
- package/dist/src/services/skill-bundle/generator.js +1 -1
- package/dist/src/services/skill-bundle/generic-adapter.js +1 -1
- package/dist/src/services/skill-bundle/hermes-adapter.js +1 -1
- package/dist/src/services/storage-file-write.d.ts +36 -1
- package/dist/src/services/storage-file-write.d.ts.map +1 -1
- package/dist/src/services/storage-file-write.js +49 -3
- package/dist/src/services/storage-file-write.js.map +1 -1
- package/dist/src/services/task-outcome.d.ts +53 -0
- package/dist/src/services/task-outcome.d.ts.map +1 -0
- package/dist/src/services/task-outcome.js +28 -0
- package/dist/src/services/task-outcome.js.map +1 -0
- package/dist/src/services/workflow/engine-human.d.ts +15 -0
- package/dist/src/services/workflow/engine-human.d.ts.map +1 -1
- package/dist/src/services/workflow/engine-human.js +10 -1
- package/dist/src/services/workflow/engine-human.js.map +1 -1
- package/dist/src/services/workflow/engine-steps.d.ts +48 -3
- package/dist/src/services/workflow/engine-steps.d.ts.map +1 -1
- package/dist/src/services/workflow/engine-steps.js +361 -0
- package/dist/src/services/workflow/engine-steps.js.map +1 -1
- package/dist/src/services/workflow/engine.d.ts +1 -0
- package/dist/src/services/workflow/engine.d.ts.map +1 -1
- package/dist/src/services/workflow/engine.js +2 -1
- package/dist/src/services/workflow/engine.js.map +1 -1
- package/dist/src/services/workflow/store.d.ts.map +1 -1
- package/dist/src/services/workflow/store.js +60 -4
- package/dist/src/services/workflow/store.js.map +1 -1
- package/dist/src/services/write-guards.d.ts +27 -1
- package/dist/src/services/write-guards.d.ts.map +1 -1
- package/dist/src/services/write-guards.js +39 -9
- package/dist/src/services/write-guards.js.map +1 -1
- package/dist/src/storage/providers/postgres-kysely/db-types.d.ts +1 -0
- package/dist/src/storage/providers/postgres-kysely/db-types.d.ts.map +1 -1
- package/dist/src/storage/providers/postgres-kysely/methods/app-grants.d.ts +1 -0
- package/dist/src/storage/providers/postgres-kysely/methods/app-grants.d.ts.map +1 -1
- package/dist/src/storage/providers/postgres-kysely/methods/app-grants.js +3 -0
- package/dist/src/storage/providers/postgres-kysely/methods/app-grants.js.map +1 -1
- package/dist/src/storage/providers/postgres-kysely/methods/files.d.ts +2 -0
- package/dist/src/storage/providers/postgres-kysely/methods/files.d.ts.map +1 -1
- package/dist/src/storage/providers/postgres-kysely/methods/files.js +34 -2
- package/dist/src/storage/providers/postgres-kysely/methods/files.js.map +1 -1
- package/dist/src/storage/providers/postgres-kysely/methods/wallet.d.ts.map +1 -1
- package/dist/src/storage/providers/postgres-kysely/methods/wallet.js +23 -4
- package/dist/src/storage/providers/postgres-kysely/methods/wallet.js.map +1 -1
- package/dist/src/storage/providers/postgres-kysely/migrations/0039_storage_file_utf8_verified.sql +19 -0
- package/dist/src/storage/providers/sqlite/index.d.ts.map +1 -1
- package/dist/src/storage/providers/sqlite/index.js +2 -1
- package/dist/src/storage/providers/sqlite/index.js.map +1 -1
- package/dist/src/storage/providers/sqlite/methods/apps.d.ts +1 -0
- package/dist/src/storage/providers/sqlite/methods/apps.d.ts.map +1 -1
- package/dist/src/storage/providers/sqlite/methods/apps.js +33 -28
- package/dist/src/storage/providers/sqlite/methods/apps.js.map +1 -1
- package/dist/src/storage/providers/sqlite/methods/identity-nodes.d.ts +1 -12
- package/dist/src/storage/providers/sqlite/methods/identity-nodes.d.ts.map +1 -1
- package/dist/src/storage/providers/sqlite/methods/identity-nodes.js +28 -135
- package/dist/src/storage/providers/sqlite/methods/identity-nodes.js.map +1 -1
- package/dist/src/storage/providers/sqlite/methods/storage-files.d.ts +38 -0
- package/dist/src/storage/providers/sqlite/methods/storage-files.d.ts.map +1 -0
- package/dist/src/storage/providers/sqlite/methods/storage-files.js +109 -0
- package/dist/src/storage/providers/sqlite/methods/storage-files.js.map +1 -0
- package/dist/src/storage/providers/sqlite/methods/work.d.ts +5 -0
- package/dist/src/storage/providers/sqlite/methods/work.d.ts.map +1 -1
- package/dist/src/storage/providers/sqlite/methods/work.js +34 -22
- package/dist/src/storage/providers/sqlite/methods/work.js.map +1 -1
- package/dist/src/storage/providers/sqlite/schema.d.ts.map +1 -1
- package/dist/src/storage/providers/sqlite/schema.js +134 -130
- package/dist/src/storage/providers/sqlite/schema.js.map +1 -1
- package/dist/src/storage/repositories/app-grant.repository.d.ts +11 -0
- package/dist/src/storage/repositories/app-grant.repository.d.ts.map +1 -1
- package/dist/src/storage/repositories/file.repository.d.ts +13 -0
- package/dist/src/storage/repositories/file.repository.d.ts.map +1 -1
- package/dist/src/storage/types/commerce.d.ts +6 -0
- package/dist/src/storage/types/commerce.d.ts.map +1 -1
- package/dist/src/utils/agent-footer.d.ts.map +1 -1
- package/dist/src/utils/agent-footer.js +1 -0
- package/dist/src/utils/agent-footer.js.map +1 -1
- package/dist/src/utils/app-content-type.d.ts +57 -3
- package/dist/src/utils/app-content-type.d.ts.map +1 -1
- package/dist/src/utils/app-content-type.js +81 -12
- package/dist/src/utils/app-content-type.js.map +1 -1
- package/dist/src/utils/env-config/sections-features.d.ts.map +1 -1
- package/dist/src/utils/env-config/sections-features.js +9 -3
- package/dist/src/utils/env-config/sections-features.js.map +1 -1
- package/dist/src/utils/file-download-headers.d.ts +5 -3
- package/dist/src/utils/file-download-headers.d.ts.map +1 -1
- package/dist/src/utils/file-download-headers.js +18 -5
- package/dist/src/utils/file-download-headers.js.map +1 -1
- package/dist/src/utils/http-range.d.ts +151 -0
- package/dist/src/utils/http-range.d.ts.map +1 -0
- package/dist/src/utils/http-range.js +190 -0
- package/dist/src/utils/http-range.js.map +1 -0
- package/dist/src/utils/page-head.d.ts +5 -0
- package/dist/src/utils/page-head.d.ts.map +1 -1
- package/dist/src/utils/page-head.js +10 -1
- package/dist/src/utils/page-head.js.map +1 -1
- package/dist/src/utils/reserved-keys.d.ts +4 -1
- package/dist/src/utils/reserved-keys.d.ts.map +1 -1
- package/dist/src/utils/reserved-keys.js +4 -1
- package/dist/src/utils/reserved-keys.js.map +1 -1
- package/dist/static/sdk-libs/datapackage/index.js +336 -0
- package/dist/static/sdk-libs/dist/aimeat-datapackage.js +305 -0
- package/package.json +10 -2
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file app-draft-edit.ts
|
|
3
|
+
* @description Incremental editing of an app's draft slot, so an agent can build and iterate on a
|
|
4
|
+
* 400 kB app without a filesystem and without pushing the whole file through its context.
|
|
5
|
+
*
|
|
6
|
+
* The problem this solves is not size. A 400 kB app fits every body limit on this node. It is that
|
|
7
|
+
* no model emits 400 kB in one response, so a local agent writes the file to disk in pieces with
|
|
8
|
+
* its editor tools and uploads it afterwards. A server-side agent has no disk and is deliberately
|
|
9
|
+
* given no shell, because one process serves many owners. The draft slot is already a database row
|
|
10
|
+
* with a byte buffer on both backends, so it is the disk: append to it, do targeted replacements
|
|
11
|
+
* in it, read slices of it, and seed it from a published version.
|
|
12
|
+
*
|
|
13
|
+
* Every write goes through stageAppDraft(), which is the same function PUT /v1/apps/:owner/:file/draft
|
|
14
|
+
* and aimeat_app_draft_save call. That keeps the filename rule, the size ceiling and the manifest
|
|
15
|
+
* inheritance in one place, and it is why the size check happens BEFORE anything is written.
|
|
16
|
+
*
|
|
17
|
+
* Content is plain UTF-8 text, not base64. An app is HTML, the model emits it as text either way,
|
|
18
|
+
* and base64 would inflate the tool call by a third for nothing.
|
|
19
|
+
* @structure
|
|
20
|
+
* - writeAppDraft() — append to, or replace, the draft's bytes
|
|
21
|
+
* - replaceInAppDraft() — targeted old→new replacement with a uniqueness check
|
|
22
|
+
* - readAppDraft() — a line range, never the whole file by accident
|
|
23
|
+
* - seedAppDraft() — copy a published version's bytes into the draft, server-side
|
|
24
|
+
* @usage
|
|
25
|
+
* const out = await writeAppDraft(storage, config, {
|
|
26
|
+
* ownerName, ownerGhii, filename: 'pong.html', content: '<!doctype html>…', mode: 'append',
|
|
27
|
+
* });
|
|
28
|
+
* if ('refusal' in out) { res.status(out.refusal.status).json(error(...)); return; }
|
|
29
|
+
* @version-history
|
|
30
|
+
* v1.0.0 — 2026-08-16 — Initial implementation. Four operations so a hosted agent can build an app
|
|
31
|
+
* larger than one model response, and continue one it published a week ago (aimeat_app_get does
|
|
32
|
+
* not return source, and stageAppDraft only ever took bytes from its caller).
|
|
33
|
+
*/
|
|
34
|
+
import type { AimeatConfig } from '../config.js';
|
|
35
|
+
import type { Storage } from '../storage/interface.js';
|
|
36
|
+
import type { PublishAppRefusal } from './app-publish.js';
|
|
37
|
+
import { type DraftManifestRequest, type StagedAppDraft } from './app-lifecycle.js';
|
|
38
|
+
/** The owner whose draft slot is being edited, already resolved from the principal at the door. */
|
|
39
|
+
export interface AppDraftEditScope {
|
|
40
|
+
ownerName: string;
|
|
41
|
+
ownerGhii: string;
|
|
42
|
+
}
|
|
43
|
+
/** Default number of lines readAppDraft() returns when the caller does not say. */
|
|
44
|
+
export declare const DRAFT_READ_DEFAULT_LINES = 400;
|
|
45
|
+
/** Hard ceiling on lines per read, so one call cannot pull a whole app into context. */
|
|
46
|
+
export declare const DRAFT_READ_MAX_LINES = 2000;
|
|
47
|
+
/**
|
|
48
|
+
* Hard ceiling on characters per read. Below the MCP layer's own 100k truncation on purpose: a slice
|
|
49
|
+
* that gets cut by the transport loses its tail silently, and a caller doing a replacement against a
|
|
50
|
+
* silently truncated read would target text it never actually saw.
|
|
51
|
+
*/
|
|
52
|
+
export declare const DRAFT_READ_MAX_CHARS = 60000;
|
|
53
|
+
export interface WriteAppDraftInput extends AppDraftEditScope {
|
|
54
|
+
filename: string;
|
|
55
|
+
/** The text to write. UTF-8, not base64. */
|
|
56
|
+
content: string;
|
|
57
|
+
/** `append` adds to the end (the default); `replace` overwrites the whole draft. */
|
|
58
|
+
mode?: 'append' | 'replace';
|
|
59
|
+
/**
|
|
60
|
+
* Optional lost-update guard: the size the caller believes the draft currently has. A mismatch
|
|
61
|
+
* refuses instead of writing, which is the only way a caller building a file across many calls can
|
|
62
|
+
* notice that something else moved underneath it.
|
|
63
|
+
*/
|
|
64
|
+
expectedSizeBytes?: number;
|
|
65
|
+
/** Manifest fields, only meaningful when the draft is being created. */
|
|
66
|
+
requested?: DraftManifestRequest;
|
|
67
|
+
}
|
|
68
|
+
export interface ReplaceInAppDraftInput extends AppDraftEditScope {
|
|
69
|
+
filename: string;
|
|
70
|
+
oldString: string;
|
|
71
|
+
newString: string;
|
|
72
|
+
/** Replace every occurrence instead of requiring exactly one. */
|
|
73
|
+
replaceAll?: boolean;
|
|
74
|
+
}
|
|
75
|
+
export interface ReadAppDraftInput extends AppDraftEditScope {
|
|
76
|
+
filename: string;
|
|
77
|
+
/** First line to return, 1-based. Defaults to 1. */
|
|
78
|
+
offset?: number;
|
|
79
|
+
/** How many lines to return. Defaults to DRAFT_READ_DEFAULT_LINES. */
|
|
80
|
+
limit?: number;
|
|
81
|
+
}
|
|
82
|
+
export interface SeedAppDraftInput extends AppDraftEditScope {
|
|
83
|
+
/** The draft to write into. */
|
|
84
|
+
filename: string;
|
|
85
|
+
/** The published app to copy from. Defaults to `filename`. */
|
|
86
|
+
fromFilename?: string;
|
|
87
|
+
/** Which published version. Defaults to the newest. */
|
|
88
|
+
version?: number;
|
|
89
|
+
}
|
|
90
|
+
export interface AppDraftSlice {
|
|
91
|
+
filename: string;
|
|
92
|
+
sizeBytes: number;
|
|
93
|
+
totalLines: number;
|
|
94
|
+
/** 1-based, inclusive. */
|
|
95
|
+
fromLine: number;
|
|
96
|
+
toLine: number;
|
|
97
|
+
/** True when lines remain after `toLine`, or when the slice hit the character ceiling. */
|
|
98
|
+
hasMore: boolean;
|
|
99
|
+
content: string;
|
|
100
|
+
mimeType: string;
|
|
101
|
+
updatedAt: string;
|
|
102
|
+
}
|
|
103
|
+
export interface ReplacedAppDraft extends StagedAppDraft {
|
|
104
|
+
/** How many occurrences were actually replaced. */
|
|
105
|
+
replacements: number;
|
|
106
|
+
}
|
|
107
|
+
export interface SeededAppDraft extends StagedAppDraft {
|
|
108
|
+
seededFrom: string;
|
|
109
|
+
seededVersion: number;
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Append to, or replace, the draft's bytes.
|
|
113
|
+
*
|
|
114
|
+
* The size ceiling is enforced by stageAppDraft() before it writes, so a chunk that would push the
|
|
115
|
+
* draft past the limit leaves the previous content intact rather than truncating it.
|
|
116
|
+
*/
|
|
117
|
+
export declare function writeAppDraft(storage: Storage, config: AimeatConfig, input: WriteAppDraftInput): Promise<StagedAppDraft | PublishAppRefusal>;
|
|
118
|
+
/**
|
|
119
|
+
* Replace `oldString` with `newString` inside the draft.
|
|
120
|
+
*
|
|
121
|
+
* Without `replaceAll` the match must be unique. Both refusals carry the actual count, because the
|
|
122
|
+
* caller's next move differs: zero means the text is not there at all, and more than one means it
|
|
123
|
+
* has to widen the surrounding context until the target is unambiguous. A count-free "did not work"
|
|
124
|
+
* turns that into guessing.
|
|
125
|
+
*/
|
|
126
|
+
export declare function replaceInAppDraft(storage: Storage, config: AimeatConfig, input: ReplaceInAppDraftInput): Promise<ReplacedAppDraft | PublishAppRefusal>;
|
|
127
|
+
/**
|
|
128
|
+
* Return a line range of the draft.
|
|
129
|
+
*
|
|
130
|
+
* Bounded twice on purpose. A caller that asks for everything gets the first page and a `hasMore`
|
|
131
|
+
* flag rather than a whole app in its context, and a slice that would exceed the character ceiling
|
|
132
|
+
* is cut at a line boundary with the same flag set, so a later replacement is never aimed at text
|
|
133
|
+
* the caller only half received.
|
|
134
|
+
*/
|
|
135
|
+
export declare function readAppDraft(storage: Storage, input: ReadAppDraftInput): Promise<AppDraftSlice | PublishAppRefusal>;
|
|
136
|
+
/**
|
|
137
|
+
* Copy a published version's bytes into the draft slot.
|
|
138
|
+
*
|
|
139
|
+
* The bytes never leave the server. Without this an app published a week ago cannot be continued at
|
|
140
|
+
* all through MCP: aimeat_app_get returns the manifest and no source, and stageAppDraft has always
|
|
141
|
+
* taken its bytes from the caller.
|
|
142
|
+
*/
|
|
143
|
+
export declare function seedAppDraft(storage: Storage, config: AimeatConfig, input: SeedAppDraftInput): Promise<SeededAppDraft | PublishAppRefusal>;
|
|
144
|
+
//# sourceMappingURL=app-draft-edit.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app-draft-edit.d.ts","sourceRoot":"","sources":["../../../src/services/app-draft-edit.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
import { stageAppDraft, } from './app-lifecycle.js';
|
|
2
|
+
/** Default number of lines readAppDraft() returns when the caller does not say. */
|
|
3
|
+
export const DRAFT_READ_DEFAULT_LINES = 400;
|
|
4
|
+
/** Hard ceiling on lines per read, so one call cannot pull a whole app into context. */
|
|
5
|
+
export const DRAFT_READ_MAX_LINES = 2000;
|
|
6
|
+
/**
|
|
7
|
+
* Hard ceiling on characters per read. Below the MCP layer's own 100k truncation on purpose: a slice
|
|
8
|
+
* that gets cut by the transport loses its tail silently, and a caller doing a replacement against a
|
|
9
|
+
* silently truncated read would target text it never actually saw.
|
|
10
|
+
*/
|
|
11
|
+
export const DRAFT_READ_MAX_CHARS = 60_000;
|
|
12
|
+
function refuse(status, code, message) {
|
|
13
|
+
return { refusal: { status, code, message } };
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Load the draft, or refuse with an answer that says what to do about it. Every operation except
|
|
17
|
+
* the creating write needs a draft to exist, and "not found" is the most common state a caller hits
|
|
18
|
+
* on its first attempt, so the message names both ways out.
|
|
19
|
+
*/
|
|
20
|
+
async function requireDraft(storage, ownerGhii, filename) {
|
|
21
|
+
const draft = await storage.getAppDraft(ownerGhii, filename);
|
|
22
|
+
if (!draft) {
|
|
23
|
+
return refuse(404, 'NO_DRAFT', `No draft for "${filename}". Start one with a write in mode "replace", or copy the published `
|
|
24
|
+
+ 'version into the slot first.');
|
|
25
|
+
}
|
|
26
|
+
return draft;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Carry the draft's own manifest forward. stageAppDraft() falls back to the LIVE app's manifest,
|
|
30
|
+
* which is right on the publish path and wrong here: a draft created before the app was ever
|
|
31
|
+
* published has a manifest of its own, and an append that did not pass it would quietly rename the
|
|
32
|
+
* app back to its filename on the second chunk.
|
|
33
|
+
*/
|
|
34
|
+
function carryManifest(draft, requested) {
|
|
35
|
+
const base = draft?.manifest;
|
|
36
|
+
const carried = {
|
|
37
|
+
name: requested?.name ?? base?.name,
|
|
38
|
+
description: requested?.description ?? base?.description,
|
|
39
|
+
category: requested?.category ?? base?.category,
|
|
40
|
+
tags: requested?.tags ?? base?.tags,
|
|
41
|
+
icon: requested?.icon ?? base?.icon,
|
|
42
|
+
usesCortex: requested?.usesCortex ?? base?.usesCortex,
|
|
43
|
+
protection: requested?.protection ?? base?.protection,
|
|
44
|
+
mimeType: requested?.mimeType ?? draft?.mimeType,
|
|
45
|
+
};
|
|
46
|
+
return carried;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Append to, or replace, the draft's bytes.
|
|
50
|
+
*
|
|
51
|
+
* The size ceiling is enforced by stageAppDraft() before it writes, so a chunk that would push the
|
|
52
|
+
* draft past the limit leaves the previous content intact rather than truncating it.
|
|
53
|
+
*/
|
|
54
|
+
export async function writeAppDraft(storage, config, input) {
|
|
55
|
+
const { ownerName, ownerGhii, filename, content } = input;
|
|
56
|
+
const mode = input.mode ?? 'append';
|
|
57
|
+
if (typeof content !== 'string') {
|
|
58
|
+
return refuse(400, 'INVALID_CONTENT', 'content must be a string of UTF-8 text.');
|
|
59
|
+
}
|
|
60
|
+
const draft = await storage.getAppDraft(ownerGhii, filename);
|
|
61
|
+
const current = draft?.data ?? Buffer.alloc(0);
|
|
62
|
+
if (input.expectedSizeBytes !== undefined && input.expectedSizeBytes !== current.length) {
|
|
63
|
+
return refuse(409, 'DRAFT_CHANGED', `Draft is ${current.length} bytes, not the expected ${input.expectedSizeBytes}. `
|
|
64
|
+
+ 'Read it again before writing.');
|
|
65
|
+
}
|
|
66
|
+
const addition = Buffer.from(content, 'utf8');
|
|
67
|
+
const next = mode === 'append' ? Buffer.concat([current, addition]) : addition;
|
|
68
|
+
return stageAppDraft(storage, config, {
|
|
69
|
+
ownerName, ownerGhii, filename,
|
|
70
|
+
data: next,
|
|
71
|
+
requested: carryManifest(draft, input.requested),
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Replace `oldString` with `newString` inside the draft.
|
|
76
|
+
*
|
|
77
|
+
* Without `replaceAll` the match must be unique. Both refusals carry the actual count, because the
|
|
78
|
+
* caller's next move differs: zero means the text is not there at all, and more than one means it
|
|
79
|
+
* has to widen the surrounding context until the target is unambiguous. A count-free "did not work"
|
|
80
|
+
* turns that into guessing.
|
|
81
|
+
*/
|
|
82
|
+
export async function replaceInAppDraft(storage, config, input) {
|
|
83
|
+
const { ownerName, ownerGhii, filename, oldString, newString } = input;
|
|
84
|
+
if (!oldString) {
|
|
85
|
+
return refuse(400, 'INVALID_MATCH', 'old_string must not be empty.');
|
|
86
|
+
}
|
|
87
|
+
if (oldString === newString) {
|
|
88
|
+
return refuse(400, 'INVALID_MATCH', 'old_string and new_string are identical; nothing to do.');
|
|
89
|
+
}
|
|
90
|
+
const found = await requireDraft(storage, ownerGhii, filename);
|
|
91
|
+
if ('refusal' in found)
|
|
92
|
+
return found;
|
|
93
|
+
const text = found.data.toString('utf8');
|
|
94
|
+
const parts = text.split(oldString);
|
|
95
|
+
const occurrences = parts.length - 1;
|
|
96
|
+
if (occurrences === 0) {
|
|
97
|
+
return refuse(404, 'NOT_FOUND', `old_string does not appear in the draft for "${filename}". Read the surrounding lines and `
|
|
98
|
+
+ 'match the text exactly, including indentation.');
|
|
99
|
+
}
|
|
100
|
+
if (occurrences > 1 && !input.replaceAll) {
|
|
101
|
+
return refuse(409, 'NOT_UNIQUE', `old_string appears ${occurrences} times in "${filename}". Include more surrounding text so `
|
|
102
|
+
+ 'the match is unique, or set replace_all.');
|
|
103
|
+
}
|
|
104
|
+
const replacements = input.replaceAll ? occurrences : 1;
|
|
105
|
+
const nextText = input.replaceAll
|
|
106
|
+
? parts.join(newString)
|
|
107
|
+
: text.replace(oldString, newString);
|
|
108
|
+
const staged = await stageAppDraft(storage, config, {
|
|
109
|
+
ownerName, ownerGhii, filename,
|
|
110
|
+
data: Buffer.from(nextText, 'utf8'),
|
|
111
|
+
requested: carryManifest(found),
|
|
112
|
+
});
|
|
113
|
+
if ('refusal' in staged)
|
|
114
|
+
return staged;
|
|
115
|
+
return { ...staged, replacements };
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Return a line range of the draft.
|
|
119
|
+
*
|
|
120
|
+
* Bounded twice on purpose. A caller that asks for everything gets the first page and a `hasMore`
|
|
121
|
+
* flag rather than a whole app in its context, and a slice that would exceed the character ceiling
|
|
122
|
+
* is cut at a line boundary with the same flag set, so a later replacement is never aimed at text
|
|
123
|
+
* the caller only half received.
|
|
124
|
+
*/
|
|
125
|
+
export async function readAppDraft(storage, input) {
|
|
126
|
+
const { ownerGhii, filename } = input;
|
|
127
|
+
const found = await requireDraft(storage, ownerGhii, filename);
|
|
128
|
+
if ('refusal' in found)
|
|
129
|
+
return found;
|
|
130
|
+
const text = found.data.toString('utf8');
|
|
131
|
+
const lines = text.split('\n');
|
|
132
|
+
const totalLines = lines.length;
|
|
133
|
+
const rawOffset = Math.trunc(input.offset ?? 1);
|
|
134
|
+
if (Number.isNaN(rawOffset) || rawOffset < 1) {
|
|
135
|
+
return refuse(400, 'INVALID_RANGE', 'offset is a 1-based line number and must be at least 1.');
|
|
136
|
+
}
|
|
137
|
+
const rawLimit = Math.trunc(input.limit ?? DRAFT_READ_DEFAULT_LINES);
|
|
138
|
+
if (Number.isNaN(rawLimit) || rawLimit < 1) {
|
|
139
|
+
return refuse(400, 'INVALID_RANGE', 'limit must be at least 1.');
|
|
140
|
+
}
|
|
141
|
+
const fromLine = Math.min(rawOffset, totalLines);
|
|
142
|
+
const limit = Math.min(rawLimit, DRAFT_READ_MAX_LINES);
|
|
143
|
+
const slice = [];
|
|
144
|
+
let chars = 0;
|
|
145
|
+
let toLine = fromLine - 1;
|
|
146
|
+
for (let i = fromLine - 1; i < totalLines && slice.length < limit; i++) {
|
|
147
|
+
const line = lines[i];
|
|
148
|
+
// +1 for the newline that rejoins them; stop BEFORE exceeding so the slice is whole lines.
|
|
149
|
+
if (chars > 0 && chars + line.length + 1 > DRAFT_READ_MAX_CHARS)
|
|
150
|
+
break;
|
|
151
|
+
slice.push(line);
|
|
152
|
+
chars += line.length + 1;
|
|
153
|
+
toLine = i + 1;
|
|
154
|
+
}
|
|
155
|
+
return {
|
|
156
|
+
filename,
|
|
157
|
+
sizeBytes: found.size,
|
|
158
|
+
totalLines,
|
|
159
|
+
fromLine,
|
|
160
|
+
toLine,
|
|
161
|
+
hasMore: toLine < totalLines,
|
|
162
|
+
content: slice.join('\n'),
|
|
163
|
+
mimeType: found.mimeType,
|
|
164
|
+
updatedAt: found.updatedAt,
|
|
165
|
+
};
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* Copy a published version's bytes into the draft slot.
|
|
169
|
+
*
|
|
170
|
+
* The bytes never leave the server. Without this an app published a week ago cannot be continued at
|
|
171
|
+
* all through MCP: aimeat_app_get returns the manifest and no source, and stageAppDraft has always
|
|
172
|
+
* taken its bytes from the caller.
|
|
173
|
+
*/
|
|
174
|
+
export async function seedAppDraft(storage, config, input) {
|
|
175
|
+
const { ownerName, ownerGhii, filename } = input;
|
|
176
|
+
const from = input.fromFilename ?? filename;
|
|
177
|
+
const live = await storage.getApp(ownerGhii, from, input.version);
|
|
178
|
+
if (!live) {
|
|
179
|
+
return refuse(404, 'NOT_FOUND', input.version
|
|
180
|
+
? `No version ${input.version} of "${from}" in your catalogue.`
|
|
181
|
+
: `No published app "${from}" in your catalogue.`);
|
|
182
|
+
}
|
|
183
|
+
// The SOURCE app's manifest is the base, which matters when seeding under a different filename:
|
|
184
|
+
// stageAppDraft would otherwise inherit from whatever lives at the destination name.
|
|
185
|
+
const staged = await stageAppDraft(storage, config, {
|
|
186
|
+
ownerName, ownerGhii, filename,
|
|
187
|
+
data: live.data,
|
|
188
|
+
requested: {
|
|
189
|
+
name: live.manifest.name,
|
|
190
|
+
description: live.manifest.description,
|
|
191
|
+
category: live.manifest.category,
|
|
192
|
+
tags: live.manifest.tags,
|
|
193
|
+
icon: live.manifest.icon,
|
|
194
|
+
usesCortex: live.manifest.usesCortex,
|
|
195
|
+
protection: live.manifest.protection,
|
|
196
|
+
mimeType: live.mimeType,
|
|
197
|
+
},
|
|
198
|
+
});
|
|
199
|
+
if ('refusal' in staged)
|
|
200
|
+
return staged;
|
|
201
|
+
return { ...staged, seededFrom: from, seededVersion: live.versionNumber };
|
|
202
|
+
}
|
|
203
|
+
//# sourceMappingURL=app-draft-edit.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app-draft-edit.js","sourceRoot":"","sources":["../../../src/services/app-draft-edit.ts"],"names":[],"mappings":"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"}
|
|
@@ -150,7 +150,7 @@ rejected with \`INVALID_SCOPES\`. Ask for the least privilege your purpose needs
|
|
|
150
150
|
|
|
151
151
|
External applications connect with the same consent guarantees:
|
|
152
152
|
\`POST ${b}/v1/ecosystem-apps/hello\` → the owner approves (scopes + data-area allowlist)
|
|
153
|
-
→ \`POST ${b}/v1/ecosystem-apps/token\`. Full guide: the node's llms.txt.
|
|
153
|
+
→ \`POST ${b}/v1/ecosystem-apps/token\`. Full guide: the node's llms-full.txt.
|
|
154
154
|
|
|
155
155
|
## Error handling
|
|
156
156
|
|
|
@@ -171,7 +171,7 @@ Retry transient failures (\`429\`, \`5xx\`) with backoff; treat \`access_denied\
|
|
|
171
171
|
1. \`GET ${b}/v1/agents/{your-name}/skill-bundle\` — your configuration + API reference.
|
|
172
172
|
2. \`GET ${b}/v1/agents/me/handbook\` — your operating handbook (directives, tasks, economy).
|
|
173
173
|
3. \`GET ${b}/v1/agents/{your-name}/onboarding\` — pending onboarding steps from your owner.
|
|
174
|
-
4. \`GET ${b}/llms.txt\` and \`GET ${b}/.well-known/agent-skills/index.json\` — the full manual
|
|
174
|
+
4. \`GET ${b}/llms-full.txt\` and \`GET ${b}/.well-known/agent-skills/index.json\` — the full manual
|
|
175
175
|
and this node's public skills.
|
|
176
176
|
`;
|
|
177
177
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth-md.js","sourceRoot":"","sources":["../../../src/services/auth-md.ts"],"names":[],"mappings":"AAgCA;;;;GAIG;AACH,MAAM,UAAU,sBAAsB,CAAC,MAAoB;IACzD,MAAM,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC;IACzB,OAAO;QACL,KAAK,EAAE,GAAG,CAAC,UAAU;QACrB,aAAa,EAAE,GAAG,CAAC,UAAU;QAC7B,YAAY,EAAE,GAAG,CAAC,6BAA6B;QAC/C,SAAS,EAAE,GAAG,CAAC,yBAAyB;QACxC,gBAAgB,EAAE,GAAG,CAAC,mBAAmB;QACzC,SAAS,EAAE,GAAG,CAAC,gBAAgB;QAC/B,cAAc,EAAE,GAAG,CAAC,iBAAiB;QACrC,qBAAqB,EAAE,CAAC,8CAA8C,CAAC;QACvE,0BAA0B,EAAE,CAAC,iBAAiB,EAAE,YAAY,CAAC;QAC7D,sFAAsF;QACtF,gFAAgF;QAChF,iFAAiF;QACjF,oFAAoF;QACpF,6EAA6E;QAC7E,qEAAqE;QACrE,wBAAwB,EAAE,CAAC,WAAW,CAAC;QACvC,SAAS,EAAE;YACT,YAAY,EAAE,GAAG,CAAC,6BAA6B;YAC/C,SAAS,EAAE,GAAG,CAAC,yBAAyB;YACxC,0BAA0B,EAAE,CAAC,iBAAiB,EAAE,YAAY,CAAC;SAC9D;QACD,QAAQ,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,CAAC,aAAa,EAAE;QACnE,cAAc,EAAE,MAAM,CAAC,kBAAkB;QACzC,8EAA8E;QAC9E,4EAA4E;QAC5E,oDAAoD;QACpD,qBAAqB,EAAE;YACrB;gBACE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,mBAAmB,EAAE,SAAS,EAAE,aAAa;gBACnE,YAAY,EAAE,GAAG,CAAC,YAAY;aAC/B;YACD;gBACE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,2BAA2B,EAAE,SAAS,EAAE,UAAU;gBACxE,YAAY,EAAE,GAAG,CAAC,6BAA6B;gBAC/C,SAAS,EAAE,GAAG,CAAC,yBAAyB;aACzC;YACD;gBACE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,6BAA6B,EAAE,SAAS,EAAE,eAAe;gBAC/E,YAAY,EAAE,GAAG,CAAC,0BAA0B;gBAC5C,SAAS,EAAE,GAAG,CAAC,0BAA0B;aAC1C;SACF;KACF,CAAC;AACJ,CAAC;AAED,4FAA4F;AAC5F,MAAM,UAAU,WAAW,CAAC,MAAoB;IAC9C,MAAM,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC;IACzB,MAAM,MAAM,GAAG,MAAM,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACpD,MAAM,aAAa,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,UAAU,EAAE,sBAAsB,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IAC9F,OAAO,sDAAsD,MAAM,CAAC,MAAM;;8DAEd,CAAC;;;;;;;;oCAQ3B,CAAC;;;EAGnC,aAAa;;;;;;;qEAOsD,CAAC;;;;;;;;;OAS/D,CAAC;;;;;;;;;;;;;;KAcH,CAAC;;;;;;OAMC,CAAC;;;;;;;;;;;;;;;gBAeQ,CAAC;;;;;;;;OAQV,CAAC;;;qCAG6B,MAAM,CAAC,MAAM;;;;;;;wCAOV,MAAM;;;;;iBAK7B,CAAC;;;;;;;SAOT,CAAC;WACC,CAAC;;;;;;;;;;;;;;;;;;WAkBD,CAAC;WACD,CAAC;WACD,CAAC;WACD,CAAC,
|
|
1
|
+
{"version":3,"file":"auth-md.js","sourceRoot":"","sources":["../../../src/services/auth-md.ts"],"names":[],"mappings":"AAgCA;;;;GAIG;AACH,MAAM,UAAU,sBAAsB,CAAC,MAAoB;IACzD,MAAM,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC;IACzB,OAAO;QACL,KAAK,EAAE,GAAG,CAAC,UAAU;QACrB,aAAa,EAAE,GAAG,CAAC,UAAU;QAC7B,YAAY,EAAE,GAAG,CAAC,6BAA6B;QAC/C,SAAS,EAAE,GAAG,CAAC,yBAAyB;QACxC,gBAAgB,EAAE,GAAG,CAAC,mBAAmB;QACzC,SAAS,EAAE,GAAG,CAAC,gBAAgB;QAC/B,cAAc,EAAE,GAAG,CAAC,iBAAiB;QACrC,qBAAqB,EAAE,CAAC,8CAA8C,CAAC;QACvE,0BAA0B,EAAE,CAAC,iBAAiB,EAAE,YAAY,CAAC;QAC7D,sFAAsF;QACtF,gFAAgF;QAChF,iFAAiF;QACjF,oFAAoF;QACpF,6EAA6E;QAC7E,qEAAqE;QACrE,wBAAwB,EAAE,CAAC,WAAW,CAAC;QACvC,SAAS,EAAE;YACT,YAAY,EAAE,GAAG,CAAC,6BAA6B;YAC/C,SAAS,EAAE,GAAG,CAAC,yBAAyB;YACxC,0BAA0B,EAAE,CAAC,iBAAiB,EAAE,YAAY,CAAC;SAC9D;QACD,QAAQ,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,CAAC,aAAa,EAAE;QACnE,cAAc,EAAE,MAAM,CAAC,kBAAkB;QACzC,8EAA8E;QAC9E,4EAA4E;QAC5E,oDAAoD;QACpD,qBAAqB,EAAE;YACrB;gBACE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,mBAAmB,EAAE,SAAS,EAAE,aAAa;gBACnE,YAAY,EAAE,GAAG,CAAC,YAAY;aAC/B;YACD;gBACE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,2BAA2B,EAAE,SAAS,EAAE,UAAU;gBACxE,YAAY,EAAE,GAAG,CAAC,6BAA6B;gBAC/C,SAAS,EAAE,GAAG,CAAC,yBAAyB;aACzC;YACD;gBACE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,6BAA6B,EAAE,SAAS,EAAE,eAAe;gBAC/E,YAAY,EAAE,GAAG,CAAC,0BAA0B;gBAC5C,SAAS,EAAE,GAAG,CAAC,0BAA0B;aAC1C;SACF;KACF,CAAC;AACJ,CAAC;AAED,4FAA4F;AAC5F,MAAM,UAAU,WAAW,CAAC,MAAoB;IAC9C,MAAM,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC;IACzB,MAAM,MAAM,GAAG,MAAM,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACpD,MAAM,aAAa,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,UAAU,EAAE,sBAAsB,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IAC9F,OAAO,sDAAsD,MAAM,CAAC,MAAM;;8DAEd,CAAC;;;;;;;;oCAQ3B,CAAC;;;EAGnC,aAAa;;;;;;;qEAOsD,CAAC;;;;;;;;;OAS/D,CAAC;;;;;;;;;;;;;;KAcH,CAAC;;;;;;OAMC,CAAC;;;;;;;;;;;;;;;gBAeQ,CAAC;;;;;;;;OAQV,CAAC;;;qCAG6B,MAAM,CAAC,MAAM;;;;;;;wCAOV,MAAM;;;;;iBAK7B,CAAC;;;;;;;SAOT,CAAC;WACC,CAAC;;;;;;;;;;;;;;;;;;WAkBD,CAAC;WACD,CAAC;WACD,CAAC;WACD,CAAC,8BAA8B,CAAC;;CAE1C,CAAC;AACF,CAAC"}
|
|
@@ -62,9 +62,17 @@ export type BoardReactionResult = {
|
|
|
62
62
|
/**
|
|
63
63
|
* React to a post.
|
|
64
64
|
*
|
|
65
|
-
*
|
|
66
|
-
*
|
|
67
|
-
*
|
|
65
|
+
* The board is loaded and the READ rule applied, which is a change from how both doors behaved until
|
|
66
|
+
* 2026-08-15. Before that neither door loaded the board, so a reaction landed on any post whose ids
|
|
67
|
+
* the caller knew — a principal holding social:write could write their own GAII onto a post on a
|
|
68
|
+
* private board they cannot read, post to or reply on, and could use the 200-versus-404 answer to
|
|
69
|
+
* probe which post ids exist there. That was recorded as a known state rather than decided, and it is
|
|
70
|
+
* decided now (E2E test-quality audit finding A30).
|
|
71
|
+
*
|
|
72
|
+
* The READ rule and not the POST rule, and the difference is the whole blast radius: boardVisibleTo
|
|
73
|
+
* leaves public and system boards open to everyone, so reacting on a public board — the normal case,
|
|
74
|
+
* and the only one any caller in this repo performs — is untouched. What closes is the private and
|
|
75
|
+
* shared case, where reacting was a write onto somebody else's surface.
|
|
68
76
|
*/
|
|
69
77
|
export declare function reactToBoardPost(deps: BoardWriteDeps, caller: BoardWriteCaller, input: {
|
|
70
78
|
boardId: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"board-write.d.ts","sourceRoot":"","sources":["../../../src/services/board-write.ts"],"names":[],"mappings":"AAgDA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAI7F,mFAAmF;AACnF,eAAO,MAAM,YAAY;;;;CAIf,CAAC;AAEX,MAAM,WAAW,cAAc;IAC3B,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,YAAY,CAAC;CACxB;AAED,MAAM,WAAW,gBAAgB;IAC7B,kDAAkD;IAClD,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,iBAAiB;IAC9B,EAAE,EAAE,KAAK,CAAC;IACV,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACnB;AAID;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAC1B,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,YAAY,GAAG,WAAW,GAAG,cAAc,CAAC,EACrE,IAAI,EAAE,MAAM,GACb,OAAO,CAKT;AAED,MAAM,MAAM,iBAAiB,GAAG;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,WAAW,CAAA;CAAE,GAAG,iBAAiB,CAAC;AAErF,MAAM,WAAW,gBAAgB;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,WAAW,CAAC,YAAY,CAAC,CAAC;IACtC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,wGAAwG;AACxG,wBAAsB,WAAW,CAC7B,IAAI,EAAE,cAAc,EACpB,MAAM,EAAE,gBAAgB,EACxB,KAAK,EAAE,gBAAgB,GACxB,OAAO,CAAC,iBAAiB,CAAC,CAmC5B;AAED,MAAM,MAAM,oBAAoB,GAAG;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,YAAY,EAAE,uBAAuB,CAAA;CAAE,GAAG,iBAAiB,CAAC;AAE3G,oDAAoD;AACpD,wBAAsB,gBAAgB,CAClC,IAAI,EAAE,cAAc,EACpB,MAAM,EAAE,gBAAgB,EACxB,KAAK,EAAE;IACH,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE;QAAE,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;CACxD,GACF,OAAO,CAAC,oBAAoB,CAAC,CA4B/B;AAED,MAAM,MAAM,mBAAmB,GAAG;IAAE,EAAE,EAAE,IAAI,CAAA;CAAE,GAAG,iBAAiB,CAAC;AAEnE
|
|
1
|
+
{"version":3,"file":"board-write.d.ts","sourceRoot":"","sources":["../../../src/services/board-write.ts"],"names":[],"mappings":"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"}
|
|
@@ -134,9 +134,17 @@ export async function subscribeToBoard(deps, caller, input) {
|
|
|
134
134
|
/**
|
|
135
135
|
* React to a post.
|
|
136
136
|
*
|
|
137
|
-
*
|
|
138
|
-
*
|
|
139
|
-
*
|
|
137
|
+
* The board is loaded and the READ rule applied, which is a change from how both doors behaved until
|
|
138
|
+
* 2026-08-15. Before that neither door loaded the board, so a reaction landed on any post whose ids
|
|
139
|
+
* the caller knew — a principal holding social:write could write their own GAII onto a post on a
|
|
140
|
+
* private board they cannot read, post to or reply on, and could use the 200-versus-404 answer to
|
|
141
|
+
* probe which post ids exist there. That was recorded as a known state rather than decided, and it is
|
|
142
|
+
* decided now (E2E test-quality audit finding A30).
|
|
143
|
+
*
|
|
144
|
+
* The READ rule and not the POST rule, and the difference is the whole blast radius: boardVisibleTo
|
|
145
|
+
* leaves public and system boards open to everyone, so reacting on a public board — the normal case,
|
|
146
|
+
* and the only one any caller in this repo performs — is untouched. What closes is the private and
|
|
147
|
+
* shared case, where reacting was a write onto somebody else's surface.
|
|
140
148
|
*/
|
|
141
149
|
export async function reactToBoardPost(deps, caller, input) {
|
|
142
150
|
const { storage } = deps;
|
|
@@ -144,6 +152,19 @@ export async function reactToBoardPost(deps, caller, input) {
|
|
|
144
152
|
if (!reaction || reaction.length > BOARD_LIMITS.reactionMax) {
|
|
145
153
|
return { ok: false, status: 400, code: 'VALIDATION_ERROR', message: `reaction must be 1-${BOARD_LIMITS.reactionMax} characters` };
|
|
146
154
|
}
|
|
155
|
+
// 404 rather than 403 for a board the caller cannot see: the same answer a post that does not
|
|
156
|
+
// exist gets, so the refusal does not become the probe it was closing.
|
|
157
|
+
//
|
|
158
|
+
// The same-owner clause is not decoration, and the E2E suite is what found it: boardVisibleTo
|
|
159
|
+
// grants same-owner access only for `shared` boards, so on a PRIVATE board it refuses the
|
|
160
|
+
// owner's own second agent — which is one person's two agents on one person's board, and
|
|
161
|
+
// exactly the arrangement this node is built around. isSameOwner is the test the rest of the
|
|
162
|
+
// codebase makes for that, so it is the test here.
|
|
163
|
+
const board = await storage.getBoard(input.boardId);
|
|
164
|
+
const mayReact = !!board && (boardVisibleTo(board, caller.gaii) || isSameOwner(board.ownerGaii, caller.gaii));
|
|
165
|
+
if (!mayReact) {
|
|
166
|
+
return { ok: false, status: 404, code: 'NOT_FOUND', message: 'Post not found' };
|
|
167
|
+
}
|
|
147
168
|
const stored = await storage.addReaction(input.boardId, input.postId, reaction, caller.gaii);
|
|
148
169
|
if (!stored) {
|
|
149
170
|
return { ok: false, status: 404, code: 'NOT_FOUND', message: 'Post not found' };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"board-write.js","sourceRoot":"","sources":["../../../src/services/board-write.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"board-write.js","sourceRoot":"","sources":["../../../src/services/board-write.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import type { AimeatConfig } from '../config.js';
|
|
2
|
+
import type { Storage } from '../storage/interface.js';
|
|
3
|
+
/** The agent's name component. One place, because it appears in a GAII, a UI and a log line. */
|
|
4
|
+
export declare const CHAT_AGENT_NAME = "chat";
|
|
5
|
+
export interface ChatAgentIdentity {
|
|
6
|
+
gaii: string;
|
|
7
|
+
ownerName: string;
|
|
8
|
+
scopes: string[];
|
|
9
|
+
created: boolean;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Find, or create, this owner's chat agent.
|
|
13
|
+
*
|
|
14
|
+
* The scopes come from the standard profile rather than from the owner's own roles. That is
|
|
15
|
+
* invariant 12: a role is granted, never inherited at mint time, and a mint that copied the owner's
|
|
16
|
+
* list would hand a scope-limited surface an unscoped credential. The owner can widen or narrow it
|
|
17
|
+
* afterwards in the Agents tab, which is the point of it being a real agent.
|
|
18
|
+
*/
|
|
19
|
+
export declare function ensureChatAgent(storage: Storage, config: AimeatConfig, ownerName: string): Promise<ChatAgentIdentity>;
|
|
20
|
+
export interface ChatAgentToken {
|
|
21
|
+
token: string;
|
|
22
|
+
sessionId: string;
|
|
23
|
+
expiresAt: string;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Mint an MCP credential for one chat session.
|
|
27
|
+
*
|
|
28
|
+
* The session row is what makes it revocable: requireAuth checks the token's `jti` against it, and a
|
|
29
|
+
* token whose session row never existed answers "not revoked" forever. That was a real hole on the
|
|
30
|
+
* device-authorization path once, and this is the same shape of credential.
|
|
31
|
+
*
|
|
32
|
+
* `mcp_client` marks where the session came from, which is what makes the chat show up in the
|
|
33
|
+
* owner's connected-clients list as itself rather than as an anonymous agent.
|
|
34
|
+
*/
|
|
35
|
+
export declare function mintChatAgentToken(storage: Storage, config: AimeatConfig, agent: ChatAgentIdentity): Promise<ChatAgentToken>;
|
|
36
|
+
//# sourceMappingURL=chat-agent.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chat-agent.d.ts","sourceRoot":"","sources":["../../../src/services/chat-agent.ts"],"names":[],"mappings":"AA4BA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,KAAK,EAAE,OAAO,EAAe,MAAM,yBAAyB,CAAC;AAQpE,gGAAgG;AAChG,eAAO,MAAM,eAAe,SAAS,CAAC;AAEtC,MAAM,WAAW,iBAAiB;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;CACpB;AAED;;;;;;;GAOG;AACH,wBAAsB,eAAe,CACjC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,GAC1D,OAAO,CAAC,iBAAiB,CAAC,CAwC5B;AAYD,MAAM,WAAW,cAAc;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACrB;AAED;;;;;;;;;GASG;AACH,wBAAsB,kBAAkB,CACpC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,iBAAiB,GACjE,OAAO,CAAC,cAAc,CAAC,CAuBzB"}
|