@noodleseed/one 0.162.0 → 0.164.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/banner.d.ts +6 -0
- package/dist/banner.d.ts.map +1 -0
- package/dist/banner.js +29 -0
- package/dist/banner.js.map +1 -0
- package/dist/commands/billing-catalog-ops.d.ts +4 -0
- package/dist/commands/billing-catalog-ops.d.ts.map +1 -0
- package/dist/commands/billing-catalog-ops.js +58 -0
- package/dist/commands/billing-catalog-ops.js.map +1 -0
- package/dist/commands/billing-ops.d.ts.map +1 -1
- package/dist/commands/billing-ops.js +3 -0
- package/dist/commands/billing-ops.js.map +1 -1
- package/dist/commands/catalog.d.ts.map +1 -1
- package/dist/commands/catalog.js +2 -0
- package/dist/commands/catalog.js.map +1 -1
- package/dist/commands/config-values.d.ts.map +1 -1
- package/dist/commands/config-values.js +16 -0
- package/dist/commands/config-values.js.map +1 -1
- package/dist/commands/installation-variables.d.ts +26 -0
- package/dist/commands/installation-variables.d.ts.map +1 -0
- package/dist/commands/installation-variables.js +171 -0
- package/dist/commands/installation-variables.js.map +1 -0
- package/dist/commands/project-setup.d.ts.map +1 -1
- package/dist/commands/project-setup.js +2 -0
- package/dist/commands/project-setup.js.map +1 -1
- package/dist/commands/solutions-activity.d.ts +5 -0
- package/dist/commands/solutions-activity.d.ts.map +1 -0
- package/dist/commands/solutions-activity.js +116 -0
- package/dist/commands/solutions-activity.js.map +1 -0
- package/dist/commands/solutions-connections.d.ts +7 -0
- package/dist/commands/solutions-connections.d.ts.map +1 -0
- package/dist/commands/solutions-connections.js +88 -0
- package/dist/commands/solutions-connections.js.map +1 -0
- package/dist/commands/solutions-installation-options.d.ts +5 -0
- package/dist/commands/solutions-installation-options.d.ts.map +1 -0
- package/dist/commands/solutions-installation-options.js +52 -0
- package/dist/commands/solutions-installation-options.js.map +1 -0
- package/dist/commands/solutions-onboarding.d.ts +5 -0
- package/dist/commands/solutions-onboarding.d.ts.map +1 -0
- package/dist/commands/solutions-onboarding.js +113 -0
- package/dist/commands/solutions-onboarding.js.map +1 -0
- package/dist/commands/solutions-ops.d.ts.map +1 -1
- package/dist/commands/solutions-ops.js +278 -17
- package/dist/commands/solutions-ops.js.map +1 -1
- package/dist/first-run.d.ts.map +1 -1
- package/dist/first-run.js +2 -0
- package/dist/first-run.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/node_modules/@noodle-borg/admission-limits/dist/counter-store.d.ts +21 -2
- package/node_modules/@noodle-borg/admission-limits/dist/counter-store.js +10 -1
- package/node_modules/@noodle-borg/admission-limits/dist/in-memory-counter-store.d.ts +5 -1
- package/node_modules/@noodle-borg/admission-limits/dist/in-memory-counter-store.js +31 -2
- package/node_modules/@noodle-borg/admission-limits/dist/portable.d.ts +3 -0
- package/node_modules/@noodle-borg/admission-limits/dist/portable.js +3 -0
- package/node_modules/@noodle-borg/admission-limits/dist/public-admission-assertion.d.ts +28 -0
- package/node_modules/@noodle-borg/admission-limits/dist/public-admission-assertion.js +124 -0
- package/node_modules/@noodle-borg/admission-limits/dist/public-record-admission.d.ts +54 -0
- package/node_modules/@noodle-borg/admission-limits/dist/public-record-admission.js +74 -0
- package/node_modules/@noodle-borg/admission-limits/dist/request-attribution.d.ts +11 -0
- package/node_modules/@noodle-borg/admission-limits/dist/request-attribution.js +19 -0
- package/node_modules/@noodle-borg/agent-kit/dist/curated/error-fixes.js +2 -0
- package/node_modules/@noodle-borg/agent-kit/dist/generated/example-files.js +5 -5
- package/node_modules/@noodle-borg/agent-kit/dist/generated/surface.js +3 -0
- package/node_modules/@noodle-borg/agent-kit/dist/index.d.ts +1 -0
- package/node_modules/@noodle-borg/agent-kit/dist/index.js +1 -0
- package/node_modules/@noodle-borg/agent-kit/dist/plugin-bootstrap-skill.js +10 -0
- package/node_modules/@noodle-borg/agent-kit/dist/skill-authoring-refs.js +15 -3
- package/node_modules/@noodle-borg/agent-kit/dist/skill-content.js +1 -1
- package/node_modules/@noodle-borg/agent-kit/dist/welcome-wordmark.d.ts +3 -0
- package/node_modules/@noodle-borg/agent-kit/dist/welcome-wordmark.js +10 -0
- package/node_modules/@noodle-borg/agent-kit/package.json +1 -1
- package/node_modules/@noodle-borg/assistant-gateway/dist/assistant-configuration.d.ts +9 -1
- package/node_modules/@noodle-borg/assistant-gateway/dist/assistant-configuration.js +33 -2
- package/node_modules/@noodle-borg/assistant-gateway/dist/assistant-execution-bound.d.ts +3 -0
- package/node_modules/@noodle-borg/assistant-gateway/dist/assistant-execution-bound.js +29 -0
- package/node_modules/@noodle-borg/assistant-gateway/dist/assistant-interaction-state.d.ts +5 -3
- package/node_modules/@noodle-borg/assistant-gateway/dist/assistant-interaction-state.js +21 -10
- package/node_modules/@noodle-borg/assistant-gateway/dist/assistant-store.d.ts +1 -1
- package/node_modules/@noodle-borg/assistant-gateway/dist/assistant-store.js +3 -3
- package/node_modules/@noodle-borg/assistant-gateway/dist/portable.d.ts +1 -0
- package/node_modules/@noodle-borg/assistant-gateway/dist/portable.js +1 -0
- package/node_modules/@noodle-borg/assistant-gateway/dist/session-target.js +5 -4
- package/node_modules/@noodle-borg/assistant-gateway/package.json +1 -1
- package/node_modules/@noodle-borg/authoring/dist/config.d.ts +20 -0
- package/node_modules/@noodle-borg/authoring/dist/config.js +29 -2
- package/node_modules/@noodle-borg/authoring/dist/connectors.d.ts +6 -1
- package/node_modules/@noodle-borg/authoring/dist/connectors.js +5 -0
- package/node_modules/@noodle-borg/authoring/dist/index.d.ts +2 -2
- package/node_modules/@noodle-borg/authoring/dist/json-schema.d.ts +1 -1
- package/node_modules/@noodle-borg/authoring/dist/json-schema.js +15 -2
- package/node_modules/@noodle-borg/authoring/dist/load-authored.js +1 -1
- package/node_modules/@noodle-borg/authoring/dist/managed-collection.d.ts +18 -4
- package/node_modules/@noodle-borg/authoring/dist/managed-collection.js +22 -3
- package/node_modules/@noodle-borg/authoring/dist/platform.d.ts +3 -0
- package/node_modules/@noodle-borg/authoring/dist/platform.js +4 -0
- package/node_modules/@noodle-borg/authoring/dist/server-presentation.js +43 -0
- package/node_modules/@noodle-borg/authoring/dist/server.d.ts +3 -1
- package/node_modules/@noodle-borg/authoring/dist/server.js +4 -44
- package/node_modules/@noodle-borg/cli-catalog/dist/catalog-data-billing.js +18 -0
- package/node_modules/@noodle-borg/cli-catalog/dist/catalog-data-config.js +31 -4
- package/node_modules/@noodle-borg/cli-catalog/dist/catalog-data-solutions.js +778 -0
- package/node_modules/@noodle-borg/cli-catalog/dist/catalog-data-tenant-resources.js +0 -241
- package/node_modules/@noodle-borg/cli-catalog/dist/catalog-types.js +7 -0
- package/node_modules/@noodle-borg/cli-catalog/dist/index.js +20 -0
- package/node_modules/@noodle-borg/compiler/dist/artifact/assemble.js +2 -1
- package/node_modules/@noodle-borg/compiler/dist/artifact/catalog-emission.js +3 -1
- package/node_modules/@noodle-borg/compiler/dist/artifact/config.js +3 -0
- package/node_modules/@noodle-borg/compiler/dist/artifact/types.d.ts +17 -1
- package/node_modules/@noodle-borg/compiler/dist/artifact/version.d.ts +6 -1
- package/node_modules/@noodle-borg/compiler/dist/artifact/version.js +6 -1
- package/node_modules/@noodle-borg/compiler/dist/business-variables.d.ts +27 -0
- package/node_modules/@noodle-borg/compiler/dist/business-variables.js +230 -0
- package/node_modules/@noodle-borg/compiler/dist/compile.js +7 -1
- package/node_modules/@noodle-borg/compiler/dist/errors.d.ts +1 -1
- package/node_modules/@noodle-borg/compiler/dist/index.d.ts +3 -0
- package/node_modules/@noodle-borg/compiler/dist/index.js +3 -0
- package/node_modules/@noodle-borg/compiler/dist/managed-collection-controls.d.ts +52 -0
- package/node_modules/@noodle-borg/compiler/dist/managed-collection-controls.js +92 -0
- package/node_modules/@noodle-borg/compiler/dist/managed-collections.d.ts +26 -1
- package/node_modules/@noodle-borg/compiler/dist/managed-collections.js +190 -1
- package/node_modules/@noodle-borg/compiler/dist/manifest/schema.d.ts +100 -36
- package/node_modules/@noodle-borg/compiler/dist/manifest/schema.js +2 -0
- package/node_modules/@noodle-borg/compiler/dist/native-record-operations.d.ts +7 -0
- package/node_modules/@noodle-borg/compiler/dist/native-record-operations.js +59 -0
- package/node_modules/@noodle-borg/connector-defs/dist/compile-http.js +83 -8
- package/node_modules/@noodle-borg/connector-defs/dist/schema.d.ts +31 -1
- package/node_modules/@noodle-borg/connector-defs/dist/schema.js +16 -0
- package/node_modules/@noodle-borg/connector-http/dist/http-connector.d.ts +12 -3
- package/node_modules/@noodle-borg/connector-http/dist/http-connector.js +41 -2
- package/node_modules/@noodle-borg/connector-http/dist/http-response.js +3 -2
- package/node_modules/@noodle-borg/connector-http/dist/mcp/config.js +1 -1
- package/node_modules/@noodle-borg/connector-http/dist/url-resolution.js +1 -1
- package/node_modules/@noodle-borg/control-plane/dist/contracts.d.ts +4 -1
- package/node_modules/@noodle-borg/control-plane/dist/deploy-gates.js +1 -0
- package/node_modules/@noodle-borg/control-plane/dist/in-memory-organization-store.d.ts +3 -0
- package/node_modules/@noodle-borg/control-plane/dist/in-memory-organization-store.js +11 -0
- package/node_modules/@noodle-borg/control-plane/dist/organization-agreements.d.ts +45 -0
- package/node_modules/@noodle-borg/control-plane/dist/organization-agreements.js +74 -0
- package/node_modules/@noodle-borg/control-plane/dist/portable.d.ts +1 -0
- package/node_modules/@noodle-borg/control-plane/dist/portable.js +1 -0
- package/node_modules/@noodle-borg/module/dist/contract.d.ts +22 -0
- package/node_modules/@noodle-borg/module/dist/platform-human-identity.d.ts +2 -0
- package/node_modules/@noodle-borg/protocol/dist/request-deps.js +1 -0
- package/node_modules/@noodle-borg/protocol/dist/request-state.d.ts +1 -0
- package/node_modules/@noodle-borg/protocol/dist/request-state.js +11 -2
- package/node_modules/@noodle-borg/protocol/dist/sdk-server.d.ts +2 -0
- package/node_modules/@noodle-borg/protocol/dist/v2/input-required.js +2 -1
- package/node_modules/@noodle-borg/protocol/dist/v2/server.js +2 -1
- package/node_modules/@noodle-borg/runtime/dist/ambient-context.js +6 -1
- package/node_modules/@noodle-borg/runtime/dist/broker/types.d.ts +2 -0
- package/node_modules/@noodle-borg/runtime/dist/business-variables.d.ts +15 -0
- package/node_modules/@noodle-borg/runtime/dist/business-variables.js +75 -0
- package/node_modules/@noodle-borg/runtime/dist/confirmation-continuation.js +2 -1
- package/node_modules/@noodle-borg/runtime/dist/confirmation.js +23 -3
- package/node_modules/@noodle-borg/runtime/dist/connector/types.d.ts +17 -1
- package/node_modules/@noodle-borg/runtime/dist/connector-snapshot.js +6 -0
- package/node_modules/@noodle-borg/runtime/dist/execute.d.ts +18 -3
- package/node_modules/@noodle-borg/runtime/dist/execute.js +13 -3
- package/node_modules/@noodle-borg/runtime/dist/index.d.ts +2 -0
- package/node_modules/@noodle-borg/runtime/dist/index.js +1 -0
- package/node_modules/@noodle-borg/runtime/dist/interactive.js +11 -0
- package/node_modules/@noodle-borg/runtime/dist/managed-origins.d.ts +3 -1
- package/node_modules/@noodle-borg/runtime/dist/managed-origins.js +32 -7
- package/node_modules/@noodle-borg/runtime/dist/operation-credential.js +6 -0
- package/node_modules/@noodle-borg/runtime/dist/operation-evidence.d.ts +30 -0
- package/node_modules/@noodle-borg/runtime/dist/operation-evidence.js +68 -0
- package/node_modules/@noodle-borg/runtime/dist/operation-execution.d.ts +2 -2
- package/node_modules/@noodle-borg/runtime/dist/operation-execution.js +142 -71
- package/node_modules/@noodle-borg/runtime/dist/result.d.ts +6 -4
- package/node_modules/@noodle-borg/runtime/dist/tool-dispatch.d.ts +7 -0
- package/node_modules/@noodle-borg/runtime/dist/tool-dispatch.js +48 -4
- package/node_modules/@noodle-borg/service/dist/admission.js +2 -1
- package/node_modules/@noodle-borg/service/dist/application-activity.js +236 -0
- package/node_modules/@noodle-borg/service/dist/application-business-notice.js +28 -0
- package/node_modules/@noodle-borg/service/dist/application-runtime-target.js +141 -0
- package/node_modules/@noodle-borg/service/dist/application-settings-targets.js +72 -0
- package/node_modules/@noodle-borg/service/dist/application-settings.js +210 -0
- package/node_modules/@noodle-borg/service/dist/business-api-admission.js +121 -0
- package/node_modules/@noodle-borg/service/dist/business-information/activity-pagination.js +73 -0
- package/node_modules/@noodle-borg/service/dist/business-information/business-notice.d.ts +24 -0
- package/node_modules/@noodle-borg/service/dist/business-information/business-notice.js +18 -0
- package/node_modules/@noodle-borg/service/dist/business-information/collection-controls.js +51 -0
- package/node_modules/@noodle-borg/service/dist/business-information/contracts.d.ts +439 -0
- package/node_modules/@noodle-borg/service/dist/business-information/definition-resolver.js +94 -0
- package/node_modules/@noodle-borg/service/dist/business-information/in-memory-installation-lifecycle.js +136 -0
- package/node_modules/@noodle-borg/service/dist/business-information/in-memory-invitations.js +160 -0
- package/node_modules/@noodle-borg/service/dist/business-information/in-memory-locks.js +23 -0
- package/node_modules/@noodle-borg/service/dist/business-information/in-memory-store.js +287 -132
- package/node_modules/@noodle-borg/service/dist/business-information/installation-capacity.js +10 -0
- package/node_modules/@noodle-borg/service/dist/business-information/invitations.js +68 -0
- package/node_modules/@noodle-borg/service/dist/business-information/legacy-request-migration.js +60 -0
- package/node_modules/@noodle-borg/service/dist/business-information/managed-releases.js +245 -0
- package/node_modules/@noodle-borg/service/dist/business-information/managed-solution-blueprints.js +51 -0
- package/node_modules/@noodle-borg/service/dist/business-information/managed-solution-executable.js +76 -0
- package/node_modules/@noodle-borg/service/dist/business-information/model.js +124 -23
- package/node_modules/@noodle-borg/service/dist/business-information/native-query.js +162 -0
- package/node_modules/@noodle-borg/service/dist/business-information/native-storage-budget.js +60 -0
- package/node_modules/@noodle-borg/service/dist/business-information/pagination.js +28 -0
- package/node_modules/@noodle-borg/service/dist/business-information/portable.js +9 -0
- package/node_modules/@noodle-borg/service/dist/business-information/principal-authority.d.ts +11 -0
- package/node_modules/@noodle-borg/service/dist/business-information/principal-authority.js +42 -0
- package/node_modules/@noodle-borg/service/dist/business-information/profiles.js +137 -6
- package/node_modules/@noodle-borg/service/dist/business-information/reader-floor.js +26 -0
- package/node_modules/@noodle-borg/service/dist/business-information/source-credential-fence.js +79 -0
- package/node_modules/@noodle-borg/service/dist/business-information/source-custody-budget.js +30 -0
- package/node_modules/@noodle-borg/service/dist/business-information/source-custody-memory.js +122 -0
- package/node_modules/@noodle-borg/service/dist/business-information/source-executor.js +191 -0
- package/node_modules/@noodle-borg/service/dist/business-information/source-ingestion-contracts.js +2 -0
- package/node_modules/@noodle-borg/service/dist/business-information/source-ingestion-coordinator.js +136 -0
- package/node_modules/@noodle-borg/service/dist/business-information/source-ingestion-failures.js +32 -0
- package/node_modules/@noodle-borg/service/dist/business-information/source-ingestion-memory-state.js +154 -0
- package/node_modules/@noodle-borg/service/dist/business-information/source-ingestion-memory-store.js +568 -0
- package/node_modules/@noodle-borg/service/dist/business-information/source-ingestion-memory-types.js +26 -0
- package/node_modules/@noodle-borg/service/dist/business-information/source-ingestion-memory-values.js +59 -0
- package/node_modules/@noodle-borg/service/dist/business-information/source-ingestion-pagination.js +54 -0
- package/node_modules/@noodle-borg/service/dist/business-information/source-ingestion-validation.js +163 -0
- package/node_modules/@noodle-borg/service/dist/business-information/source-refresh-retention.js +29 -0
- package/node_modules/@noodle-borg/service/dist/business-information-runtime.js +80 -0
- package/node_modules/@noodle-borg/service/dist/business-onboarding.js +73 -0
- package/node_modules/@noodle-borg/service/dist/connections/types.js +8 -0
- package/node_modules/@noodle-borg/service/dist/credential-binding-index.js +38 -33
- package/node_modules/@noodle-borg/service/dist/deployment-execution.js +275 -0
- package/node_modules/@noodle-borg/service/dist/external-credential-binding-broker.js +19 -1
- package/node_modules/@noodle-borg/service/dist/external-credential-exchange.d.ts +16 -1
- package/node_modules/@noodle-borg/service/dist/modules/host.js +4 -1
- package/node_modules/@noodle-borg/service/dist/native-record-connector.d.ts +20 -0
- package/node_modules/@noodle-borg/service/dist/native-record-connector.js +206 -0
- package/node_modules/@noodle-borg/service/dist/oauth/store.d.ts +3 -0
- package/node_modules/@noodle-borg/service/dist/operation-evidence.js +89 -0
- package/node_modules/@noodle-borg/service/dist/recovery-quarantine.js +49 -0
- package/node_modules/@noodle-borg/service/dist/registry-compile.js +60 -11
- package/node_modules/@noodle-borg/service/dist/registry-deploy-transaction.js +18 -0
- package/node_modules/@noodle-borg/service/dist/registry-rollback.js +2 -1
- package/node_modules/@noodle-borg/service/dist/registry-state.d.ts +1 -1
- package/node_modules/@noodle-borg/service/dist/registry-state.js +6 -3
- package/node_modules/@noodle-borg/service/dist/registry-targets.js +49 -0
- package/node_modules/@noodle-borg/service/dist/registry-types.d.ts +2 -0
- package/node_modules/@noodle-borg/service/dist/registry.d.ts +15 -3
- package/node_modules/@noodle-borg/service/dist/registry.js +177 -137
- package/node_modules/@noodle-borg/service/dist/routes/assistant-appearance.js +3 -2
- package/node_modules/@noodle-borg/service/dist/routes/assistant-clients.js +2 -1
- package/node_modules/@noodle-borg/service/dist/routes/assistant-doctor.js +2 -1
- package/node_modules/@noodle-borg/service/dist/routes/assistant-embeds.js +8 -3
- package/node_modules/@noodle-borg/service/dist/routes/assistant-interaction-replay.js +1 -1
- package/node_modules/@noodle-borg/service/dist/routes/assistant-interactions.js +48 -36
- package/node_modules/@noodle-borg/service/dist/routes/assistant-public-configuration.js +3 -2
- package/node_modules/@noodle-borg/service/dist/routes/assistant-public-session.js +10 -10
- package/node_modules/@noodle-borg/service/dist/routes/assistant-session-target.js +32 -3
- package/node_modules/@noodle-borg/service/dist/routes/assistant-suggestions.js +1 -1
- package/node_modules/@noodle-borg/service/dist/routes/assistant-transcript.js +1 -1
- package/node_modules/@noodle-borg/service/dist/routes/assistant.js +10 -10
- package/node_modules/@noodle-borg/service/dist/routes/business-information-activity.js +83 -0
- package/node_modules/@noodle-borg/service/dist/routes/business-information-admission.js +26 -0
- package/node_modules/@noodle-borg/service/dist/routes/business-information-channels.js +153 -0
- package/node_modules/@noodle-borg/service/dist/routes/business-information-connections.js +107 -0
- package/node_modules/@noodle-borg/service/dist/routes/business-information-dispatch.js +87 -4
- package/node_modules/@noodle-borg/service/dist/routes/business-information-external.js +79 -0
- package/node_modules/@noodle-borg/service/dist/routes/business-information-installation.js +24 -0
- package/node_modules/@noodle-borg/service/dist/routes/business-information-notice.js +69 -0
- package/node_modules/@noodle-borg/service/dist/routes/business-information-onboarding.js +58 -0
- package/node_modules/@noodle-borg/service/dist/routes/business-information-paths.js +76 -0
- package/node_modules/@noodle-borg/service/dist/routes/business-information-public.js +151 -0
- package/node_modules/@noodle-borg/service/dist/routes/business-information-reader-floor.js +15 -0
- package/node_modules/@noodle-borg/service/dist/routes/business-information-record-create.js +29 -0
- package/node_modules/@noodle-borg/service/dist/routes/business-information-record-reads.js +36 -0
- package/node_modules/@noodle-borg/service/dist/routes/business-information-request.js +64 -0
- package/node_modules/@noodle-borg/service/dist/routes/business-information-settings.js +64 -0
- package/node_modules/@noodle-borg/service/dist/routes/business-information-source.js +249 -0
- package/node_modules/@noodle-borg/service/dist/routes/business-information-staff.js +258 -0
- package/node_modules/@noodle-borg/service/dist/routes/business-information-wire.js +226 -26
- package/node_modules/@noodle-borg/service/dist/routes/business-information.js +238 -197
- package/node_modules/@noodle-borg/service/dist/routes/config-values-dispatch.js +1 -1
- package/node_modules/@noodle-borg/service/dist/routes/config-values.js +26 -4
- package/node_modules/@noodle-borg/service/dist/routes/control-plane.js +33 -234
- package/node_modules/@noodle-borg/service/dist/routes/deployment-activation-response.js +13 -4
- package/node_modules/@noodle-borg/service/dist/service-resource-cleanup.js +4 -0
- package/node_modules/@noodle-borg/service/dist/service.js +57 -11
- package/node_modules/@noodle-borg/service/dist/solution-installation-activation.js +149 -0
- package/node_modules/@noodle-borg/service/dist/source-configuration-authority.js +94 -0
- package/node_modules/@noodle-borg/service/dist/state-catalog.js +6 -5
- package/node_modules/@noodle-borg/service/dist/store/config-values.d.ts +42 -17
- package/node_modules/@noodle-borg/service/dist/store/config-values.js +123 -24
- package/node_modules/@noodle-borg/service/dist/store/in-memory.d.ts +1 -0
- package/node_modules/@noodle-borg/service/dist/store/in-memory.js +3 -0
- package/node_modules/@noodle-borg/service/dist/store/json-file.d.ts +1 -0
- package/node_modules/@noodle-borg/service/dist/store/json-file.js +3 -0
- package/node_modules/@noodle-borg/service/dist/store.d.ts +3 -1
- package/node_modules/@noodle-borg/service/package.json +2 -2
- package/node_modules/@noodle-borg/transport-http/dist/serve-request.js +9 -0
- package/node_modules/@noodle-borg/transport-http/package.json +1 -0
- package/node_modules/@noodle-borg/wire-contracts/dist/application-activity.d.ts +143 -0
- package/node_modules/@noodle-borg/wire-contracts/dist/application-activity.js +90 -0
- package/node_modules/@noodle-borg/wire-contracts/dist/application-channels.d.ts +130 -0
- package/node_modules/@noodle-borg/wire-contracts/dist/application-channels.js +77 -0
- package/node_modules/@noodle-borg/wire-contracts/dist/application-connections.d.ts +105 -0
- package/node_modules/@noodle-borg/wire-contracts/dist/application-connections.js +67 -0
- package/node_modules/@noodle-borg/wire-contracts/dist/application-onboarding.d.ts +27 -0
- package/node_modules/@noodle-borg/wire-contracts/dist/application-onboarding.js +28 -0
- package/node_modules/@noodle-borg/wire-contracts/dist/application-settings.d.ts +112 -0
- package/node_modules/@noodle-borg/wire-contracts/dist/application-settings.js +88 -0
- package/node_modules/@noodle-borg/wire-contracts/dist/assistant.d.ts +1 -1
- package/node_modules/@noodle-borg/wire-contracts/dist/billing-catalog.d.ts +62 -0
- package/node_modules/@noodle-borg/wire-contracts/dist/billing-catalog.js +57 -0
- package/node_modules/@noodle-borg/wire-contracts/dist/billing-enforcement.d.ts +12 -12
- package/node_modules/@noodle-borg/wire-contracts/dist/billing-metering.d.ts +4 -4
- package/node_modules/@noodle-borg/wire-contracts/dist/billing-org-transfer.d.ts +3 -3
- package/node_modules/@noodle-borg/wire-contracts/dist/business-information-query.d.ts +25 -0
- package/node_modules/@noodle-borg/wire-contracts/dist/business-information-query.js +37 -0
- package/node_modules/@noodle-borg/wire-contracts/dist/business-information.d.ts +1816 -158
- package/node_modules/@noodle-borg/wire-contracts/dist/business-information.js +416 -41
- package/node_modules/@noodle-borg/wire-contracts/dist/control-plane.d.ts +2 -2
- package/node_modules/@noodle-borg/wire-contracts/dist/distribution.d.ts +5 -5
- package/node_modules/@noodle-borg/wire-contracts/dist/index.d.ts +8 -0
- package/node_modules/@noodle-borg/wire-contracts/dist/index.js +8 -0
- package/node_modules/@noodle-borg/wire-contracts/dist/knowledge.d.ts +3 -3
- package/node_modules/@noodle-borg/wire-contracts/dist/managed-assistant-sponsorship.d.ts +7 -7
- package/node_modules/@noodle-borg/wire-contracts/dist/platform-account-reset.d.ts +5 -0
- package/node_modules/@noodle-borg/wire-contracts/dist/platform-account-reset.js +1 -0
- package/node_modules/@noodle-borg/wire-contracts/dist/platform-auth.d.ts +66 -66
- package/node_modules/@noodle-borg/wire-contracts/dist/solution-onboarding.d.ts +143 -0
- package/node_modules/@noodle-borg/wire-contracts/dist/solution-onboarding.js +94 -0
- package/node_modules/@noodleseed/assistant/README.md +5 -0
- package/node_modules/@noodleseed/assistant/package.json +1 -1
- package/package.json +2 -2
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { resolveVariableEnvironment, validateVariableContinuation } from './business-variables.js';
|
|
1
2
|
import { preflightFulfilmentCustomerRoutes } from './customer-routing.js';
|
|
2
3
|
import { validateElicitationContent } from './elicitation-response.js';
|
|
3
4
|
import { ExpressionEvalError, evaluateCondition } from './eval/evaluate.js';
|
|
@@ -13,6 +14,10 @@ export async function executeToolInteractive(artifact, toolName, input, deps) {
|
|
|
13
14
|
const tool = artifact.tools.find((candidate) => candidate.name === toolName);
|
|
14
15
|
if (!tool)
|
|
15
16
|
return interactiveFail('unknown_tool', `no tool named "${toolName}"`);
|
|
17
|
+
const variables = resolveVariableEnvironment(artifact.server.variables ?? [], await resolveEnv(deps), toolName);
|
|
18
|
+
if (!variables.ok)
|
|
19
|
+
return { status: 'failed', error: variables.error };
|
|
20
|
+
deps = { ...deps, env: variables.env };
|
|
16
21
|
if (tool.fulfilment.kind !== 'flow' || !tool.fulfilment.steps.some((s) => s.kind === 'elicit')) {
|
|
17
22
|
return toInteractive(await runFulfilment(tool.fulfilment, input, toolName, deps, deps.beforeDispatch));
|
|
18
23
|
}
|
|
@@ -32,6 +37,12 @@ export async function resumeTool(artifact, continuation, response, deps) {
|
|
|
32
37
|
}
|
|
33
38
|
if (response.action !== 'accept')
|
|
34
39
|
return { status: 'stopped', action: response.action };
|
|
40
|
+
if ((artifact.server.variables?.length ?? 0) > 0) {
|
|
41
|
+
const variables = resolveVariableEnvironment(artifact.server.variables ?? [], await resolveEnv(deps), continuation.toolName);
|
|
42
|
+
const configurationError = validateVariableContinuation(artifact, continuation.env, variables);
|
|
43
|
+
if (configurationError)
|
|
44
|
+
return { status: 'failed', error: configurationError };
|
|
45
|
+
}
|
|
35
46
|
const validated = validateElicitationContent(response.content ?? {}, continuation.pending.requestedSchema, `steps.${continuation.pending.id}`);
|
|
36
47
|
if (!validated.ok)
|
|
37
48
|
return { status: 'failed', error: validated.error };
|
|
@@ -11,6 +11,8 @@ export type ManagedOriginResolutionResult = {
|
|
|
11
11
|
readonly errors: readonly ManagedOriginError[];
|
|
12
12
|
};
|
|
13
13
|
/** Bind operator-owned exact origins into every runtime authority and host projection. */
|
|
14
|
-
export declare function resolveManagedOrigins(artifact: RuntimeArtifact, variables: Readonly<Record<string,
|
|
14
|
+
export declare function resolveManagedOrigins(artifact: RuntimeArtifact, variables: Readonly<Record<string, unknown>>, options?: {
|
|
15
|
+
readonly allowUnconfiguredPortal?: boolean;
|
|
16
|
+
}): ManagedOriginResolutionResult;
|
|
15
17
|
export {};
|
|
16
18
|
//# sourceMappingURL=managed-origins.d.ts.map
|
|
@@ -1,9 +1,10 @@
|
|
|
1
|
+
import { resolveVariableEnvironment } from './business-variables.js';
|
|
1
2
|
const MANAGED_ORIGIN = /^\$\{env\.([A-Za-z0-9_]+)\}$/;
|
|
2
3
|
/** Bind operator-owned exact origins into every runtime authority and host projection. */
|
|
3
|
-
export function resolveManagedOrigins(artifact, variables) {
|
|
4
|
+
export function resolveManagedOrigins(artifact, variables, options = {}) {
|
|
4
5
|
const errors = [];
|
|
5
6
|
const replacements = new Map();
|
|
6
|
-
const resolveList = (values, path, allowLoopback) => values.
|
|
7
|
+
const resolveList = (values, path, allowLoopback) => values.flatMap((value, index) => resolveManagedOrigin(value, variables, `${path}.${index}`, allowLoopback, replacements, errors, artifact.server.variables?.find((declaration) => declaration.name === MANAGED_ORIGIN.exec(value)?.[1]), options.allowUnconfiguredPortal === true));
|
|
7
8
|
const assistant = artifact.server.assistant;
|
|
8
9
|
const resolvedAssistant = assistant === undefined
|
|
9
10
|
? undefined
|
|
@@ -26,6 +27,21 @@ export function resolveManagedOrigins(artifact, variables) {
|
|
|
26
27
|
...handoff,
|
|
27
28
|
allowedDomains: resolveList(handoff.allowedDomains, 'handoff.allowedDomains', false),
|
|
28
29
|
};
|
|
30
|
+
const owners = new Map();
|
|
31
|
+
resolvedAssistant?.surfaces?.forEach((surface, index) => {
|
|
32
|
+
for (const origin of surface.origins) {
|
|
33
|
+
const prior = owners.get(origin);
|
|
34
|
+
if (prior !== undefined && prior !== index)
|
|
35
|
+
errors.push({
|
|
36
|
+
code: 'invalid_shape',
|
|
37
|
+
path: `server.assistant.surfaces.${index}.origins`,
|
|
38
|
+
variableName: '',
|
|
39
|
+
reason: 'invalid',
|
|
40
|
+
message: 'Assistant surfaces must have distinct configured origins.',
|
|
41
|
+
});
|
|
42
|
+
owners.set(origin, index);
|
|
43
|
+
}
|
|
44
|
+
});
|
|
29
45
|
if (errors.length > 0)
|
|
30
46
|
return { ok: false, errors };
|
|
31
47
|
return {
|
|
@@ -45,12 +61,17 @@ export function resolveManagedOrigins(artifact, variables) {
|
|
|
45
61
|
},
|
|
46
62
|
};
|
|
47
63
|
}
|
|
48
|
-
function resolveManagedOrigin(value, variables, path, allowLoopback, replacements, errors) {
|
|
64
|
+
function resolveManagedOrigin(value, variables, path, allowLoopback, replacements, errors, declaration, allowUnconfiguredPortal) {
|
|
49
65
|
const match = MANAGED_ORIGIN.exec(value);
|
|
50
66
|
if (match?.[1] === undefined)
|
|
51
67
|
return value;
|
|
52
|
-
const
|
|
53
|
-
|
|
68
|
+
const decoded = declaration === undefined ? undefined : resolveVariableEnvironment([declaration], variables);
|
|
69
|
+
const resolved = decoded?.ok ? decoded.env[match[1]] : variables[match[1]];
|
|
70
|
+
if (resolved === undefined && decoded?.ok !== false) {
|
|
71
|
+
if (allowUnconfiguredPortal && declaration?.portal !== undefined) {
|
|
72
|
+
replacements.set(value, '');
|
|
73
|
+
return [];
|
|
74
|
+
}
|
|
54
75
|
errors.push({
|
|
55
76
|
code: 'invalid_shape',
|
|
56
77
|
variableName: match[1],
|
|
@@ -60,7 +81,9 @@ function resolveManagedOrigin(value, variables, path, allowLoopback, replacement
|
|
|
60
81
|
});
|
|
61
82
|
return value;
|
|
62
83
|
}
|
|
63
|
-
if (
|
|
84
|
+
if (decoded?.ok === false ||
|
|
85
|
+
typeof resolved !== 'string' ||
|
|
86
|
+
!isCanonicalOrigin(resolved, allowLoopback)) {
|
|
64
87
|
errors.push({
|
|
65
88
|
code: 'invalid_shape',
|
|
66
89
|
variableName: match[1],
|
|
@@ -94,7 +117,9 @@ function replaceValue(value, replacements) {
|
|
|
94
117
|
if (typeof value === 'string')
|
|
95
118
|
return replaceStrings(value, replacements);
|
|
96
119
|
if (Array.isArray(value))
|
|
97
|
-
return value.
|
|
120
|
+
return value.flatMap((item) => typeof item === 'string' && replacements.get(item) === ''
|
|
121
|
+
? []
|
|
122
|
+
: [replaceValue(item, replacements)]);
|
|
98
123
|
if (value !== null && typeof value === 'object') {
|
|
99
124
|
return Object.fromEntries(Object.entries(value).map(([key, item]) => [key, replaceValue(item, replacements)]));
|
|
100
125
|
}
|
|
@@ -7,6 +7,12 @@ export async function acquireOperationCredential(ref, deps, customerRoute) {
|
|
|
7
7
|
connectorVersion: ref.connectorVersion,
|
|
8
8
|
operation: ref.operation,
|
|
9
9
|
...(ref.credentialBinding ?? {}),
|
|
10
|
+
...(ref.credentialBinding?.connectionId === undefined ||
|
|
11
|
+
deps.executionBinding?.connections[ref.credentialBinding.connectionId] === undefined
|
|
12
|
+
? {}
|
|
13
|
+
: {
|
|
14
|
+
expectedConnectionGeneration: deps.executionBinding.connections[ref.credentialBinding.connectionId],
|
|
15
|
+
}),
|
|
10
16
|
...(deps.tenantId !== undefined ? { tenantId: deps.tenantId } : {}),
|
|
11
17
|
...(deps.deploymentId !== undefined ? { deploymentId: deps.deploymentId } : {}),
|
|
12
18
|
...(deps.caller !== undefined ? { caller: deps.caller } : {}),
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { ResolvedOperationRef } from '@noodle-borg/compiler';
|
|
2
|
+
import type { CallerIdentity } from './connector/types.js';
|
|
3
|
+
import type { ExecutionResult } from './result.js';
|
|
4
|
+
/** Explicit connector evidence. A returned tool result alone does not prove a business task completed. */
|
|
5
|
+
export interface OperationEvidence {
|
|
6
|
+
readonly outcome: 'completed' | 'rejected' | 'accepted' | 'unknown' | 'returned';
|
|
7
|
+
/** Opaque provider resource/job reference; protected by the service, never an authorization grant. */
|
|
8
|
+
readonly reference?: string;
|
|
9
|
+
}
|
|
10
|
+
export interface OperationEvidenceIntent {
|
|
11
|
+
readonly id: string;
|
|
12
|
+
readonly tool: string;
|
|
13
|
+
readonly operation: ResolvedOperationRef;
|
|
14
|
+
readonly arguments: Readonly<Record<string, unknown>>;
|
|
15
|
+
readonly executionRevision?: string;
|
|
16
|
+
readonly executionBoundMs?: number;
|
|
17
|
+
readonly caller?: CallerIdentity;
|
|
18
|
+
}
|
|
19
|
+
/** Hosting-owned durable intent/evidence authority. No provider transport or business-record custody. */
|
|
20
|
+
export interface OperationEvidencePort {
|
|
21
|
+
/** Atomically claims an original invocation before I/O; undefined means it was already spent. */
|
|
22
|
+
begin(intent: OperationEvidenceIntent): Promise<{
|
|
23
|
+
finish(evidence: OperationEvidence): Promise<void>;
|
|
24
|
+
} | undefined>;
|
|
25
|
+
}
|
|
26
|
+
/** Shared by every connector action, including nested calls; persistence failure cannot enable I/O. */
|
|
27
|
+
export declare function withOperationEvidence(port: OperationEvidencePort | undefined, intent: OperationEvidenceIntent, work: (report: (evidence: OperationEvidence) => void) => Promise<ExecutionResult>): Promise<ExecutionResult>;
|
|
28
|
+
/** Invalid or credential-like reference mappings never become success evidence or retained payloads. */
|
|
29
|
+
export declare function safeOperationEvidence(value: OperationEvidence): OperationEvidence;
|
|
30
|
+
//# sourceMappingURL=operation-evidence.d.ts.map
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/** Shared by every connector action, including nested calls; persistence failure cannot enable I/O. */
|
|
2
|
+
export async function withOperationEvidence(port, intent, work) {
|
|
3
|
+
let claimed;
|
|
4
|
+
try {
|
|
5
|
+
claimed = await port?.begin(intent);
|
|
6
|
+
}
|
|
7
|
+
catch {
|
|
8
|
+
return {
|
|
9
|
+
ok: false,
|
|
10
|
+
error: {
|
|
11
|
+
code: 'execution_admission_error',
|
|
12
|
+
message: 'Operation evidence unavailable; no action dispatched.',
|
|
13
|
+
},
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
if (port && !claimed)
|
|
17
|
+
return {
|
|
18
|
+
ok: false,
|
|
19
|
+
error: {
|
|
20
|
+
code: 'duplicate_execution_suppressed',
|
|
21
|
+
message: 'This operation was already dispatched. Verify its original outcome before making a new request.',
|
|
22
|
+
},
|
|
23
|
+
};
|
|
24
|
+
let evidence;
|
|
25
|
+
let result;
|
|
26
|
+
try {
|
|
27
|
+
result = await work((value) => {
|
|
28
|
+
evidence = safeOperationEvidence(value);
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
catch {
|
|
32
|
+
result = {
|
|
33
|
+
ok: false,
|
|
34
|
+
error: {
|
|
35
|
+
code: 'connector_error',
|
|
36
|
+
reason: 'operation_outcome_unknown',
|
|
37
|
+
message: 'Operation outcome is unknown; verify the original effect before trying again.',
|
|
38
|
+
},
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
try {
|
|
42
|
+
await claimed?.finish(evidence ?? { outcome: result.ok ? 'returned' : 'unknown' });
|
|
43
|
+
}
|
|
44
|
+
catch {
|
|
45
|
+
return {
|
|
46
|
+
ok: false,
|
|
47
|
+
error: {
|
|
48
|
+
code: 'connector_error',
|
|
49
|
+
reason: 'operation_outcome_unknown',
|
|
50
|
+
message: 'Operation outcome could not be recorded. Do not repeat the write; verify its original outcome.',
|
|
51
|
+
},
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
return result;
|
|
55
|
+
}
|
|
56
|
+
/** Invalid or credential-like reference mappings never become success evidence or retained payloads. */
|
|
57
|
+
export function safeOperationEvidence(value) {
|
|
58
|
+
if (!['completed', 'rejected', 'accepted', 'unknown', 'returned'].includes(value.outcome))
|
|
59
|
+
return { outcome: 'unknown' };
|
|
60
|
+
if (value.reference !== undefined &&
|
|
61
|
+
(!/^[A-Za-z0-9._:@/-]{1,256}$/.test(value.reference) || value.reference.includes('://')))
|
|
62
|
+
return { outcome: 'unknown' };
|
|
63
|
+
return Object.freeze({
|
|
64
|
+
outcome: value.outcome,
|
|
65
|
+
...(value.reference === undefined ? {} : { reference: value.reference }),
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=operation-evidence.js.map
|
|
@@ -13,7 +13,7 @@ import { type ToolDispatchHook } from './tool-dispatch.js';
|
|
|
13
13
|
/** @internal Shared with the suspension-aware flow executor. */
|
|
14
14
|
export declare function runOperation(ref: ResolvedOperationRef | {
|
|
15
15
|
resolved: false;
|
|
16
|
-
}, argsAst: ExprMap, scope: EvalScope, toolName: string, deps: ExecuteDeps, policy: PolicyGate, host: ConnectorCallHost, env: Record<string,
|
|
16
|
+
}, argsAst: ExprMap, scope: EvalScope, toolName: string, deps: ExecuteDeps, policy: PolicyGate, host: ConnectorCallHost, env: Record<string, unknown>, argsPath: string, outputPath: string, reviewedAction?: PreparedOperationAction, beforeDispatch?: ToolDispatchHook): Promise<ExecutionResult>;
|
|
17
17
|
type PreparedOperationActionResult = {
|
|
18
18
|
readonly ok: true;
|
|
19
19
|
readonly action: PreparedOperationAction;
|
|
@@ -28,7 +28,7 @@ export declare function prepareOperationAction(ref: ResolvedOperationRef | {
|
|
|
28
28
|
resolved: false;
|
|
29
29
|
}, argsAst: ExprMap, scope: EvalScope, deps: ExecuteDeps, argsPath: string, additionalOperationCount?: number): PreparedOperationActionResult;
|
|
30
30
|
/** @internal Shared with the suspension-aware flow executor. */
|
|
31
|
-
export declare function createHost(toolName: string, deps: ExecuteDeps, policy: PolicyGate, env: Record<string,
|
|
31
|
+
export declare function createHost(toolName: string, deps: ExecuteDeps, policy: PolicyGate, env: Record<string, unknown>, callStack: string[], beforeDispatch?: ToolDispatchHook): ConnectorCallHost;
|
|
32
32
|
export declare function fail(code: ExecutionError['code'], message: string, pathOrDetails?: string | Pick<ExecutionError, 'reason' | 'fix' | 'next' | 'connector'>): ExecutionResult;
|
|
33
33
|
export {};
|
|
34
34
|
//# sourceMappingURL=operation-execution.d.ts.map
|
|
@@ -1,13 +1,15 @@
|
|
|
1
|
+
import { createHash, randomUUID } from 'node:crypto';
|
|
1
2
|
import { sanitizeConnectorFailureDetails } from './connector/failure-details.js';
|
|
2
3
|
import { isConnectorInvocationError } from './connector/types.js';
|
|
3
4
|
import { preflightOperationCustomerRoutes, resolveCustomerActionRouteBindings, resolveCustomerConnectorRoute, } from './customer-routing.js';
|
|
4
5
|
import { ExpressionEvalError } from './eval/evaluate.js';
|
|
5
6
|
import { acquireOperationCredential } from './operation-credential.js';
|
|
7
|
+
import { withOperationEvidence } from './operation-evidence.js';
|
|
6
8
|
import { checkSignature, evalExprMap, validateAgainstSchema } from './operation-validation.js';
|
|
7
9
|
import { samePreparedAction } from './prepared-action-match.js';
|
|
8
10
|
import { splitResultMeta } from './result-meta.js';
|
|
9
11
|
import { cloneRoutedOutput } from './routed-output-guard.js';
|
|
10
|
-
import { admitToolDispatch } from './tool-dispatch.js';
|
|
12
|
+
import { admitToolDispatch, admittedExecutionSignal, executionCancellation, } from './tool-dispatch.js';
|
|
11
13
|
/**
|
|
12
14
|
* Run one connector operation end to end: resolve the connector, verify the signature has not
|
|
13
15
|
* drifted, gate with policy, evaluate + validate arguments, mint a downstream credential, invoke,
|
|
@@ -111,11 +113,15 @@ export function prepareOperationAction(ref, argsAst, scope, deps, argsPath, addi
|
|
|
111
113
|
* manifest operation steps and host-mediated sandbox calls.
|
|
112
114
|
*/
|
|
113
115
|
async function invokeOperation(ref, args, sig, toolName, deps, policy, host, env, argsPath, outputPath, beforeDispatch) {
|
|
116
|
+
const initialCancellation = executionCancellation(deps.signal, beforeDispatch);
|
|
117
|
+
if (initialCancellation)
|
|
118
|
+
return { ok: false, error: initialCancellation };
|
|
114
119
|
const callKey = operationKey(ref);
|
|
115
120
|
if (hostCallStack(host).includes(callKey)) {
|
|
116
121
|
return fail('circular_call_dependency', `circular connector operation call detected at ${callKey}`, outputPath);
|
|
117
122
|
}
|
|
118
123
|
hostCallStack(host).push(callKey);
|
|
124
|
+
let disposeSignal;
|
|
119
125
|
try {
|
|
120
126
|
const connector = deps.connectors.resolve(ref);
|
|
121
127
|
if (!connector) {
|
|
@@ -143,6 +149,9 @@ async function invokeOperation(ref, args, sig, toolName, deps, policy, host, env
|
|
|
143
149
|
}
|
|
144
150
|
if (!decision.allow)
|
|
145
151
|
return fail('policy_denied', decision.reason);
|
|
152
|
+
const cancellation = executionCancellation(deps.signal, beforeDispatch);
|
|
153
|
+
if (cancellation)
|
|
154
|
+
return { ok: false, error: cancellation };
|
|
146
155
|
const acquired = await acquireOperationCredential(ref, deps, customerRoute);
|
|
147
156
|
if (!acquired.ok)
|
|
148
157
|
return { ok: false, error: acquired.error };
|
|
@@ -157,89 +166,133 @@ async function invokeOperation(ref, args, sig, toolName, deps, policy, host, env
|
|
|
157
166
|
const admissionError = await admitToolDispatch(beforeDispatch, { toolName });
|
|
158
167
|
if (admissionError !== null)
|
|
159
168
|
return { ok: false, error: admissionError };
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
})
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
deps.trace?.record({
|
|
187
|
-
kind: 'connector',
|
|
188
|
-
connectorId: ref.connectorId,
|
|
189
|
-
connectorVersion: ref.connectorVersion,
|
|
169
|
+
const admitted = admittedExecutionSignal(deps.signal);
|
|
170
|
+
disposeSignal = admitted.dispose;
|
|
171
|
+
const execution = operationIdentity(host, deps, toolName, ref, argsPath);
|
|
172
|
+
const executionBoundMs = connector.executionBoundMs?.(ref.operation);
|
|
173
|
+
const deadline = executionBoundMs === undefined ? undefined : AbortSignal.timeout(executionBoundMs);
|
|
174
|
+
const signal = deadline === undefined
|
|
175
|
+
? admitted.signal
|
|
176
|
+
: admitted.signal === undefined
|
|
177
|
+
? deadline
|
|
178
|
+
: AbortSignal.any([deadline, admitted.signal]);
|
|
179
|
+
return await withOperationEvidence(sig.type === 'action' ? deps.operationEvidence : undefined, {
|
|
180
|
+
id: execution.id,
|
|
181
|
+
tool: toolName,
|
|
182
|
+
operation: ref,
|
|
183
|
+
arguments: connectorArgs,
|
|
184
|
+
...(deps.caller === undefined ? {} : { caller: deps.caller }),
|
|
185
|
+
...(deps.executionBinding === undefined
|
|
186
|
+
? {}
|
|
187
|
+
: { executionRevision: deps.executionBinding.revision }),
|
|
188
|
+
...(executionBoundMs === undefined ? {} : { executionBoundMs }),
|
|
189
|
+
}, async (reportOutcome) => {
|
|
190
|
+
let output;
|
|
191
|
+
try {
|
|
192
|
+
if (signal?.aborted)
|
|
193
|
+
return fail('execution_cancelled', 'Execution deadline elapsed before connector dispatch.');
|
|
194
|
+
output = await connector.invoke({
|
|
190
195
|
operation: ref.operation,
|
|
191
|
-
|
|
196
|
+
execution,
|
|
197
|
+
reportOutcome,
|
|
198
|
+
...(deps.publicAdmission === undefined
|
|
199
|
+
? {}
|
|
200
|
+
: { publicAdmission: deps.publicAdmission }),
|
|
201
|
+
args: connectorArgs,
|
|
202
|
+
env,
|
|
203
|
+
...(signal === undefined ? {} : { signal }),
|
|
204
|
+
credential,
|
|
205
|
+
acquireTransportCredential: async () => {
|
|
206
|
+
const { credentialBinding: _accountBinding, ...transportRef } = ref;
|
|
207
|
+
const transport = await acquireOperationCredential(transportRef, deps, customerRoute);
|
|
208
|
+
if (!transport.ok)
|
|
209
|
+
throw new Error('Independent transport credential unavailable');
|
|
210
|
+
return transport.credential;
|
|
211
|
+
},
|
|
212
|
+
...(ref.credentialBinding === undefined
|
|
213
|
+
? {}
|
|
214
|
+
: { credentialPresentation: ref.credentialBinding.presentation }),
|
|
215
|
+
...(deps.caller !== undefined ? { caller: deps.caller } : {}),
|
|
216
|
+
...(customerRoute === undefined ? {} : { route: customerRoute }),
|
|
217
|
+
host,
|
|
218
|
+
...(deps.trace === undefined ? {} : { trace: deps.trace }),
|
|
192
219
|
});
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
const
|
|
220
|
+
}
|
|
221
|
+
catch (error) {
|
|
222
|
+
const hostCall = hostCallErrorSnapshot(error);
|
|
223
|
+
if (hostCall !== undefined) {
|
|
224
|
+
return fail(hostCall.code, hostCall.message, hostCall.path);
|
|
225
|
+
}
|
|
226
|
+
if (isConnectorInvocationError(error)) {
|
|
227
|
+
const failureDetails = sanitizeConnectorFailureDetails(error, {
|
|
228
|
+
includeResponseExcerpt: customerRoute === undefined,
|
|
229
|
+
});
|
|
230
|
+
deps.trace?.record({
|
|
231
|
+
kind: 'connector',
|
|
232
|
+
connectorId: ref.connectorId,
|
|
233
|
+
connectorVersion: ref.connectorVersion,
|
|
234
|
+
operation: ref.operation,
|
|
235
|
+
...failureDetails,
|
|
236
|
+
});
|
|
237
|
+
// Attribution keeps the sanitized classification (never the excerpt) so analytics can name
|
|
238
|
+
// the failing connector/operation/stage while the wire result stays generic (#1309).
|
|
239
|
+
const status = statusClass(failureDetails.status);
|
|
240
|
+
const reason = failureDetails.status === 401 || failureDetails.status === 403
|
|
241
|
+
? 'upstream_authentication_lost'
|
|
242
|
+
: failureDetails.category;
|
|
243
|
+
return fail('connector_error', `connector failed for operation "${ref.operation}"`, {
|
|
244
|
+
...(reason === undefined ? {} : { reason }),
|
|
245
|
+
connector: {
|
|
246
|
+
connectorId: ref.connectorId,
|
|
247
|
+
connectorVersion: ref.connectorVersion,
|
|
248
|
+
operation: ref.operation,
|
|
249
|
+
...(failureDetails.category === undefined
|
|
250
|
+
? {}
|
|
251
|
+
: { category: failureDetails.category }),
|
|
252
|
+
...(status === undefined ? {} : { statusClass: status }),
|
|
253
|
+
...(failureDetails.attempts === undefined
|
|
254
|
+
? {}
|
|
255
|
+
: { attempts: failureDetails.attempts }),
|
|
256
|
+
...(failureDetails.retryable === undefined
|
|
257
|
+
? {}
|
|
258
|
+
: { retryable: failureDetails.retryable }),
|
|
259
|
+
},
|
|
260
|
+
});
|
|
261
|
+
}
|
|
262
|
+
// Normalize connector failures; never surface backend internals or credentials.
|
|
196
263
|
return fail('connector_error', `connector failed for operation "${ref.operation}"`, {
|
|
197
|
-
...(failureDetails.category === undefined ? {} : { reason: failureDetails.category }),
|
|
198
264
|
connector: {
|
|
199
265
|
connectorId: ref.connectorId,
|
|
200
266
|
connectorVersion: ref.connectorVersion,
|
|
201
267
|
operation: ref.operation,
|
|
202
|
-
...(failureDetails.category === undefined ? {} : { category: failureDetails.category }),
|
|
203
|
-
...(status === undefined ? {} : { statusClass: status }),
|
|
204
|
-
...(failureDetails.attempts === undefined ? {} : { attempts: failureDetails.attempts }),
|
|
205
|
-
...(failureDetails.retryable === undefined
|
|
206
|
-
? {}
|
|
207
|
-
: { retryable: failureDetails.retryable }),
|
|
208
268
|
},
|
|
209
269
|
});
|
|
210
270
|
}
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
},
|
|
218
|
-
});
|
|
219
|
-
}
|
|
220
|
-
if (customerRoute !== undefined) {
|
|
221
|
-
const cloned = cloneRoutedOutput(output, customerRoute.baseUrl);
|
|
222
|
-
if (!cloned.ok) {
|
|
223
|
-
return fail('connector_error', `connector failed for operation "${ref.operation}"`);
|
|
271
|
+
if (customerRoute !== undefined) {
|
|
272
|
+
const cloned = cloneRoutedOutput(output, customerRoute.baseUrl);
|
|
273
|
+
if (!cloned.ok) {
|
|
274
|
+
return fail('connector_error', `connector failed for operation "${ref.operation}"`);
|
|
275
|
+
}
|
|
276
|
+
output = cloned.value;
|
|
224
277
|
}
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
return { ok: true, output: redacted };
|
|
278
|
+
let redacted;
|
|
279
|
+
try {
|
|
280
|
+
redacted = await policy.after(context, output);
|
|
281
|
+
}
|
|
282
|
+
catch {
|
|
283
|
+
return fail('policy_error', 'policy after hook failed');
|
|
284
|
+
}
|
|
285
|
+
// Projection metadata is a reserved runtime envelope, not part of the connector's visible output
|
|
286
|
+
// contract. Validate the visible value deeply while preserving policy-processed metadata for the
|
|
287
|
+
// flow/result projection channel.
|
|
288
|
+
const outputError = validateAgainstSchema(splitResultMeta(redacted).visible, sig.output, outputPath, 'output_invalid', 'output field');
|
|
289
|
+
if (outputError)
|
|
290
|
+
return { ok: false, error: outputError };
|
|
291
|
+
return { ok: true, output: redacted };
|
|
292
|
+
});
|
|
241
293
|
}
|
|
242
294
|
finally {
|
|
295
|
+
disposeSignal?.();
|
|
243
296
|
hostCallStack(host).pop();
|
|
244
297
|
}
|
|
245
298
|
}
|
|
@@ -247,6 +300,7 @@ async function invokeOperation(ref, args, sig, toolName, deps, policy, host, env
|
|
|
247
300
|
export function createHost(toolName, deps, policy, env, callStack, beforeDispatch) {
|
|
248
301
|
const host = {
|
|
249
302
|
[CALL_STACK]: callStack,
|
|
303
|
+
[INVOCATION]: { id: deps.invocationId ?? randomUUID(), occurrences: new Map() },
|
|
250
304
|
async callOperation(ref, args, path) {
|
|
251
305
|
const connector = deps.connectors.resolve(ref);
|
|
252
306
|
if (!connector)
|
|
@@ -269,6 +323,23 @@ export function createHost(toolName, deps, policy, env, callStack, beforeDispatc
|
|
|
269
323
|
return host;
|
|
270
324
|
}
|
|
271
325
|
const CALL_STACK = Symbol('noodle.connectorCallStack');
|
|
326
|
+
const INVOCATION = Symbol('noodle.connectorInvocation');
|
|
327
|
+
function operationIdentity(host, deps, tool, ref, path) {
|
|
328
|
+
const invocation = host[INVOCATION];
|
|
329
|
+
const location = JSON.stringify([hostCallStack(host), path]);
|
|
330
|
+
const occurrence = invocation.occurrences.get(location) ?? 0;
|
|
331
|
+
invocation.occurrences.set(location, occurrence + 1);
|
|
332
|
+
const binding = [
|
|
333
|
+
invocation.id,
|
|
334
|
+
deps.tenantId,
|
|
335
|
+
deps.deploymentId,
|
|
336
|
+
tool,
|
|
337
|
+
operationKey(ref),
|
|
338
|
+
location,
|
|
339
|
+
occurrence,
|
|
340
|
+
];
|
|
341
|
+
return Object.freeze({ id: createHash('sha256').update(JSON.stringify(binding)).digest('hex') });
|
|
342
|
+
}
|
|
272
343
|
function operationKey(ref) {
|
|
273
344
|
return JSON.stringify([ref.connectorId, ref.connectorVersion, ref.operation]);
|
|
274
345
|
}
|
|
@@ -2,7 +2,7 @@ import type { CredentialProfile } from '@noodle-borg/compiler';
|
|
|
2
2
|
import type { ConnectorFailureCategory } from './connector/types.js';
|
|
3
3
|
import type { CustomerRouteBinding } from './customer-routing.js';
|
|
4
4
|
/** Why a tool call could not be fulfilled. Protocol and embedded adapters map this internal contract. */
|
|
5
|
-
export type ExecutionErrorCode = 'shape_only_artifact' | 'unknown_tool' | 'unknown_resource' | 'unknown_prompt' | 'unsupported_fulfilment' | 'connector_unavailable' | 'connector_route_unavailable' | 'credential_unavailable' | 'signature_drift' | 'policy_denied' | 'policy_error' | 'dispatch_denied' | 'usage_limit_exceeded' | 'duplicate_execution_suppressed' | 'execution_admission_error' | 'execution_cancelled' | 'arg_invalid' | 'invalid_continuation' | 'invalid_elicitation_flow' | 'invalid_confirmation_flow' | 'expression_error' | 'circular_call_dependency' | 'connector_error' | 'output_invalid';
|
|
5
|
+
export type ExecutionErrorCode = 'shape_only_artifact' | 'unknown_tool' | 'unknown_resource' | 'unknown_prompt' | 'configuration_required' | 'configuration_invalid' | 'configuration_changed' | 'unsupported_fulfilment' | 'connector_unavailable' | 'connector_route_unavailable' | 'credential_unavailable' | 'signature_drift' | 'policy_denied' | 'policy_error' | 'dispatch_denied' | 'usage_limit_exceeded' | 'duplicate_execution_suppressed' | 'execution_admission_error' | 'execution_cancelled' | 'arg_invalid' | 'invalid_continuation' | 'invalid_elicitation_flow' | 'invalid_confirmation_flow' | 'expression_error' | 'circular_call_dependency' | 'connector_error' | 'output_invalid';
|
|
6
6
|
/**
|
|
7
7
|
* Safe connector failure attribution for operator analytics (issue #1309): platform identifiers and
|
|
8
8
|
* bounded classification only — never an upstream message, response body, credential, or exact URL.
|
|
@@ -72,7 +72,7 @@ export interface ToolContinuation {
|
|
|
72
72
|
readonly nextStepIndex: number;
|
|
73
73
|
readonly completedSteps: Readonly<Record<string, unknown>>;
|
|
74
74
|
readonly resultMetas: readonly Readonly<Record<string, unknown>>[];
|
|
75
|
-
readonly env: Readonly<Record<string,
|
|
75
|
+
readonly env: Readonly<Record<string, unknown>>;
|
|
76
76
|
readonly pending: ElicitationRequest;
|
|
77
77
|
}
|
|
78
78
|
interface ContinuationArtifactIdentity {
|
|
@@ -94,7 +94,7 @@ export interface ToolPreparationContinuation {
|
|
|
94
94
|
readonly nextStepIndex: number;
|
|
95
95
|
readonly completedSteps: Readonly<Record<string, unknown>>;
|
|
96
96
|
readonly elicited: Readonly<Record<string, unknown>>;
|
|
97
|
-
readonly env: Readonly<Record<string,
|
|
97
|
+
readonly env: Readonly<Record<string, unknown>>;
|
|
98
98
|
readonly pending: ElicitationRequest;
|
|
99
99
|
}
|
|
100
100
|
/**
|
|
@@ -103,6 +103,8 @@ export interface ToolPreparationContinuation {
|
|
|
103
103
|
*/
|
|
104
104
|
export interface PreparedToolContinuation {
|
|
105
105
|
readonly kind: 'prepared_confirmation';
|
|
106
|
+
/** Private hosting snapshot; never projected into a model-visible confirmation. */
|
|
107
|
+
readonly executionRevision?: string;
|
|
106
108
|
readonly version: 1;
|
|
107
109
|
readonly artifact: ContinuationArtifactIdentity;
|
|
108
110
|
readonly toolName: string;
|
|
@@ -110,7 +112,7 @@ export interface PreparedToolContinuation {
|
|
|
110
112
|
/** First flow step not evaluated during preparation; zero for a single-operation fulfilment. */
|
|
111
113
|
readonly nextStepIndex: number;
|
|
112
114
|
readonly completedSteps: Readonly<Record<string, unknown>>;
|
|
113
|
-
readonly env: Readonly<Record<string,
|
|
115
|
+
readonly env: Readonly<Record<string, unknown>>;
|
|
114
116
|
/** Exact first connector invocation approved by the user; absent for a pure flow. */
|
|
115
117
|
readonly reviewedAction?: PreparedOperationAction;
|
|
116
118
|
}
|
|
@@ -6,6 +6,13 @@ export interface ToolDispatchContext {
|
|
|
6
6
|
}
|
|
7
7
|
/** Called at connector boundaries and successful connector-free completion; latched once per logical call. */
|
|
8
8
|
export type ToolDispatchHook = (context: ToolDispatchContext) => ToolDispatchDecision | Promise<ToolDispatchDecision>;
|
|
9
|
+
/** Client cancellation stops unadmitted work; a host execution deadline remains authoritative. */
|
|
10
|
+
export declare function executionCancellation(signal: AbortSignal | undefined, admission: ToolDispatchHook | undefined): ExecutionError | null;
|
|
11
|
+
/** After admission a client disconnect cannot cancel the effect, but a hard deadline still can. */
|
|
12
|
+
export declare function admittedExecutionSignal(parent: AbortSignal | undefined): {
|
|
13
|
+
readonly signal: AbortSignal | undefined;
|
|
14
|
+
dispose(): void;
|
|
15
|
+
};
|
|
9
16
|
/** Latch cancellation and admission once for every logical protocol operation. */
|
|
10
17
|
export declare function latchToolDispatchAdmission(hook: ToolDispatchHook | undefined, signal: AbortSignal | undefined): ToolDispatchHook | undefined;
|
|
11
18
|
/** Apply a hook as a fail-closed runtime admission decision without exposing implementation errors. */
|