@noodleseed/one 0.151.1 → 0.153.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/agent-product-skill-state.d.ts +2 -2
- package/dist/agent-product-skill-state.d.ts.map +1 -1
- package/dist/agent-product-skill-state.js.map +1 -1
- package/dist/agent-skills-state.d.ts +2 -2
- package/dist/agent-skills-state.d.ts.map +1 -1
- package/dist/agent-skills-state.js +1 -1
- package/dist/agent-skills-state.js.map +1 -1
- package/dist/agents.d.ts +2 -3
- package/dist/agents.d.ts.map +1 -1
- package/dist/agents.js.map +1 -1
- package/dist/assistant-embed-scaffold-template.d.ts +1 -0
- package/dist/assistant-embed-scaffold-template.d.ts.map +1 -1
- package/dist/assistant-embed-scaffold-template.js +80 -12
- package/dist/assistant-embed-scaffold-template.js.map +1 -1
- package/dist/checklist.d.ts +2 -1
- package/dist/checklist.d.ts.map +1 -1
- package/dist/commands/apps-ops.d.ts +0 -4
- package/dist/commands/apps-ops.d.ts.map +1 -1
- package/dist/commands/apps-ops.js +3 -3
- package/dist/commands/apps-ops.js.map +1 -1
- package/dist/commands/assistant-embed-ops.d.ts.map +1 -1
- package/dist/commands/assistant-embed-ops.js +141 -4
- package/dist/commands/assistant-embed-ops.js.map +1 -1
- package/dist/commands/assistant-ops.js +1 -1
- package/dist/commands/assistant-ops.js.map +1 -1
- package/dist/commands/auth-ops.d.ts +0 -14
- package/dist/commands/auth-ops.d.ts.map +1 -1
- package/dist/commands/auth-ops.js +1 -1
- package/dist/commands/auth-ops.js.map +1 -1
- package/dist/commands/author-loop.d.ts +0 -2
- package/dist/commands/author-loop.d.ts.map +1 -1
- package/dist/commands/author-loop.js +2 -2
- package/dist/commands/author-loop.js.map +1 -1
- package/dist/commands/catalog.d.ts +1 -7
- package/dist/commands/catalog.d.ts.map +1 -1
- package/dist/commands/catalog.js +3 -3
- package/dist/commands/catalog.js.map +1 -1
- package/dist/commands/config-values.d.ts +1 -47
- package/dist/commands/config-values.d.ts.map +1 -1
- package/dist/commands/config-values.js +11 -11
- package/dist/commands/config-values.js.map +1 -1
- package/dist/commands/connect-oauth.d.ts +0 -1
- package/dist/commands/connect-oauth.d.ts.map +1 -1
- package/dist/commands/connect-oauth.js +1 -1
- package/dist/commands/connect-oauth.js.map +1 -1
- package/dist/commands/connect.d.ts +0 -1
- package/dist/commands/connect.d.ts.map +1 -1
- package/dist/commands/connect.js +1 -1
- package/dist/commands/connect.js.map +1 -1
- package/dist/commands/customer-auth-smoke.d.ts +2 -1
- package/dist/commands/customer-auth-smoke.d.ts.map +1 -1
- package/dist/commands/customer-auth-smoke.js +3 -2
- package/dist/commands/customer-auth-smoke.js.map +1 -1
- package/dist/commands/deploy-ops.d.ts +0 -9
- package/dist/commands/deploy-ops.d.ts.map +1 -1
- package/dist/commands/deploy-ops.js +3 -4
- package/dist/commands/deploy-ops.js.map +1 -1
- package/dist/commands/deploy-resume.d.ts +0 -1
- package/dist/commands/deploy-resume.d.ts.map +1 -1
- package/dist/commands/deploy-resume.js +1 -1
- package/dist/commands/deploy-resume.js.map +1 -1
- package/dist/commands/deploy-version-resolution.d.ts +0 -2
- package/dist/commands/deploy-version-resolution.d.ts.map +1 -1
- package/dist/commands/deploy-version-resolution.js +1 -1
- package/dist/commands/deploy-version-resolution.js.map +1 -1
- package/dist/commands/deployments-ops.d.ts +0 -2
- package/dist/commands/deployments-ops.d.ts.map +1 -1
- package/dist/commands/deployments-ops.js +2 -2
- package/dist/commands/deployments-ops.js.map +1 -1
- package/dist/commands/envs-ops.d.ts +0 -3
- package/dist/commands/envs-ops.d.ts.map +1 -1
- package/dist/commands/envs-ops.js +3 -3
- package/dist/commands/envs-ops.js.map +1 -1
- package/dist/commands/feedback-ops.d.ts +0 -8
- package/dist/commands/feedback-ops.d.ts.map +1 -1
- package/dist/commands/feedback-ops.js +1 -1
- package/dist/commands/feedback-ops.js.map +1 -1
- package/dist/commands/github-ops.d.ts +0 -2
- package/dist/commands/github-ops.d.ts.map +1 -1
- package/dist/commands/github-ops.js +2 -2
- package/dist/commands/github-ops.js.map +1 -1
- package/dist/commands/mcp-apps.d.ts +0 -1
- package/dist/commands/mcp-apps.d.ts.map +1 -1
- package/dist/commands/org-admin.d.ts +0 -17
- package/dist/commands/org-admin.d.ts.map +1 -1
- package/dist/commands/org-admin.js +1 -2
- package/dist/commands/org-admin.js.map +1 -1
- package/dist/commands/output.d.ts +3 -12
- package/dist/commands/output.d.ts.map +1 -1
- package/dist/commands/output.js.map +1 -1
- package/dist/commands/platform-account-reset-files.d.ts +0 -3
- package/dist/commands/platform-account-reset-files.d.ts.map +1 -1
- package/dist/commands/platform-account-reset-files.js +1 -1
- package/dist/commands/platform-account-reset-files.js.map +1 -1
- package/dist/commands/platform-auth-rollout-acceleration-files.d.ts +0 -3
- package/dist/commands/platform-auth-rollout-acceleration-files.d.ts.map +1 -1
- package/dist/commands/platform-auth-rollout-acceleration-files.js +1 -1
- package/dist/commands/platform-auth-rollout-acceleration-files.js.map +1 -1
- package/dist/commands/project-setup.d.ts +0 -1
- package/dist/commands/project-setup.d.ts.map +1 -1
- package/dist/commands/project-setup.js +1 -1
- package/dist/commands/project-setup.js.map +1 -1
- package/dist/commands/resource-shared.d.ts +0 -6
- package/dist/commands/resource-shared.d.ts.map +1 -1
- package/dist/commands/resource-shared.js +1 -1
- package/dist/commands/resource-shared.js.map +1 -1
- package/dist/commands/session.d.ts +3 -13
- package/dist/commands/session.d.ts.map +1 -1
- package/dist/commands/session.js +2 -2
- package/dist/commands/session.js.map +1 -1
- package/dist/commands/target-picker.d.ts +0 -2
- package/dist/commands/target-picker.d.ts.map +1 -1
- package/dist/commands/target-picker.js +1 -1
- package/dist/commands/target-picker.js.map +1 -1
- package/dist/commands/update-ops.d.ts +0 -8
- package/dist/commands/update-ops.d.ts.map +1 -1
- package/dist/commands/update-ops.js +1 -1
- package/dist/commands/update-ops.js.map +1 -1
- package/dist/control-plane.d.ts +1 -1
- package/dist/control-plane.d.ts.map +1 -1
- package/dist/control-plane.js.map +1 -1
- package/dist/deploy.d.ts +0 -12
- package/dist/deploy.d.ts.map +1 -1
- package/dist/deploy.js +2 -2
- package/dist/deploy.js.map +1 -1
- package/dist/dev.d.ts.map +1 -1
- package/dist/dev.js +2 -3
- package/dist/dev.js.map +1 -1
- package/dist/devtools-auth-session.d.ts +0 -1
- package/dist/devtools-auth-session.d.ts.map +1 -1
- package/dist/devtools-auth-session.js.map +1 -1
- package/dist/devtools-chat.d.ts +1 -1
- package/dist/devtools-chat.d.ts.map +1 -1
- package/dist/devtools-chat.js.map +1 -1
- package/dist/devtools-delegated-exchange-state.d.ts +1 -1
- package/dist/devtools-delegated-exchange-state.d.ts.map +1 -1
- package/dist/devtools-design-contract.d.ts +3 -3
- package/dist/devtools-design-contract.d.ts.map +1 -1
- package/dist/devtools-design-contract.js +1 -1
- package/dist/devtools-design-contract.js.map +1 -1
- package/dist/devtools-preview.d.ts +1 -1
- package/dist/devtools-preview.d.ts.map +1 -1
- package/dist/devtools-rpc-forwarder.d.ts +2 -1
- package/dist/devtools-rpc-forwarder.d.ts.map +1 -1
- package/dist/devtools-rpc-forwarder.js +11 -12
- package/dist/devtools-rpc-forwarder.js.map +1 -1
- package/dist/gradient.d.ts +0 -3
- package/dist/gradient.d.ts.map +1 -1
- package/dist/gradient.js +1 -3
- package/dist/gradient.js.map +1 -1
- package/dist/local-compile.d.ts +2 -1
- package/dist/local-compile.d.ts.map +1 -1
- package/dist/local-target.d.ts +2 -1
- package/dist/local-target.d.ts.map +1 -1
- package/dist/node-version.d.ts +0 -2
- package/dist/node-version.d.ts.map +1 -1
- package/dist/node-version.js +2 -2
- package/dist/node-version.js.map +1 -1
- package/dist/plugin-mode/build-readiness-tools.d.ts +5 -4
- package/dist/plugin-mode/build-readiness-tools.d.ts.map +1 -1
- package/dist/plugin-mode/plugin-operation-contract.d.ts +0 -35
- package/dist/plugin-mode/plugin-operation-contract.d.ts.map +1 -1
- package/dist/plugin-mode/plugin-operation-contract.js +1 -1
- package/dist/plugin-mode/plugin-operation-contract.js.map +1 -1
- package/dist/project-entrypoint.d.ts +2 -1
- package/dist/project-entrypoint.d.ts.map +1 -1
- package/dist/project.d.ts +3 -3
- package/dist/project.d.ts.map +1 -1
- package/dist/project.js.map +1 -1
- package/dist/skills-update.d.ts +0 -1
- package/dist/skills-update.d.ts.map +1 -1
- package/dist/skills-update.js +1 -1
- package/dist/skills-update.js.map +1 -1
- package/dist/status.d.ts +0 -9
- package/dist/status.d.ts.map +1 -1
- package/dist/status.js +0 -16
- package/dist/status.js.map +1 -1
- package/dist/update-binary.d.ts +3 -2
- package/dist/update-binary.d.ts.map +1 -1
- package/dist/update-check.d.ts +0 -3
- package/dist/update-check.d.ts.map +1 -1
- package/dist/update-check.js +1 -1
- package/dist/update-check.js.map +1 -1
- package/dist/validate.d.ts +2 -1
- package/dist/validate.d.ts.map +1 -1
- package/node_modules/@noodle-borg/agent-kit/dist/behavior-skills.js +10 -10
- package/node_modules/@noodle-borg/agent-kit/dist/generated/example-files.js +11 -8
- package/node_modules/@noodle-borg/agent-kit/dist/index.js +13 -1
- package/node_modules/@noodle-borg/agent-kit/dist/plugin-bootstrap-skill.d.ts +0 -2
- package/node_modules/@noodle-borg/agent-kit/dist/plugin-bootstrap-skill.js +1 -1
- package/node_modules/@noodle-borg/agent-kit/dist/plugin-bundle.d.ts +1 -1
- package/node_modules/@noodle-borg/agent-kit/dist/skill-authoring-refs.js +8 -0
- package/node_modules/@noodle-borg/agent-kit/dist/skill-content.js +6 -6
- package/node_modules/@noodle-borg/agent-kit/dist/skill-embedded-assistant-operations-ref.js +78 -0
- package/node_modules/@noodle-borg/agent-kit/dist/skill-embedded-assistant-ref.js +156 -135
- package/node_modules/@noodle-borg/agent-kit/dist/skill-embedded-assistant-renderer-ref.js +109 -0
- package/node_modules/@noodle-borg/agent-kit/dist/skill-router.d.ts +2 -3
- package/node_modules/@noodle-borg/agent-kit/dist/skill-router.js +1 -1
- package/node_modules/@noodle-borg/agent-kit/package.json +1 -1
- package/node_modules/@noodle-borg/agent-packaging/dist/host-package-assets.js +1 -1
- package/node_modules/@noodle-borg/assistant-gateway/dist/assistant-browser-fields.d.ts +3 -0
- package/node_modules/@noodle-borg/assistant-gateway/dist/assistant-browser-fields.js +15 -0
- package/node_modules/@noodle-borg/assistant-gateway/dist/assistant-configuration.d.ts +1 -1
- package/node_modules/@noodle-borg/assistant-gateway/dist/assistant-configuration.js +3 -2
- package/node_modules/@noodle-borg/assistant-gateway/dist/assistant-store.d.ts +19 -11
- package/node_modules/@noodle-borg/assistant-gateway/dist/assistant-store.js +24 -23
- package/node_modules/@noodle-borg/assistant-gateway/dist/assistant-transcript-events.d.ts +24 -0
- package/node_modules/@noodle-borg/assistant-gateway/dist/assistant-transcript-events.js +39 -0
- package/node_modules/@noodle-borg/assistant-gateway/dist/assistant-transcript.d.ts +6 -2
- package/node_modules/@noodle-borg/assistant-gateway/dist/assistant-transcript.js +11 -0
- package/node_modules/@noodle-borg/assistant-gateway/dist/assistant-view-availability.d.ts +8 -0
- package/node_modules/@noodle-borg/assistant-gateway/dist/assistant-view-availability.js +8 -0
- package/node_modules/@noodle-borg/assistant-gateway/dist/elevation-store.d.ts +3 -0
- package/node_modules/@noodle-borg/assistant-gateway/dist/elevation.d.ts +7 -1
- package/node_modules/@noodle-borg/assistant-gateway/dist/elevation.js +1 -0
- package/node_modules/@noodle-borg/assistant-gateway/dist/in-memory-elevation-store.d.ts +1 -0
- package/node_modules/@noodle-borg/assistant-gateway/dist/in-memory-elevation-store.js +1 -0
- 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/package.json +2 -1
- package/node_modules/@noodle-borg/authoring/dist/assistant.d.ts +2 -1
- package/node_modules/@noodle-borg/authoring/dist/connections.d.ts +0 -2
- package/node_modules/@noodle-borg/authoring/dist/connections.js +1 -1
- package/node_modules/@noodle-borg/authoring/dist/load-authored.js +2 -2
- package/node_modules/@noodle-borg/authoring/dist/react/bridge.d.ts +3 -2
- package/node_modules/@noodle-borg/authoring/dist/react/form-components.d.ts +0 -8
- package/node_modules/@noodle-borg/authoring/dist/react/form-components.js +2 -4
- package/node_modules/@noodle-borg/authoring/dist/react/hooks.d.ts +2 -2
- package/node_modules/@noodle-borg/authoring/dist/server.d.ts +2 -0
- package/node_modules/@noodle-borg/authoring/dist/server.js +3 -0
- package/node_modules/@noodle-borg/compiler/dist/artifact/types.d.ts +12 -11
- package/node_modules/@noodle-borg/compiler/dist/artifact/version.d.ts +4 -1
- package/node_modules/@noodle-borg/compiler/dist/artifact/version.js +4 -1
- package/node_modules/@noodle-borg/compiler/dist/compile.d.ts +0 -1
- package/node_modules/@noodle-borg/compiler/dist/fulfilment-structural.d.ts +1 -1
- package/node_modules/@noodle-borg/compiler/dist/manifest/expression.d.ts +14 -14
- package/node_modules/@noodle-borg/compiler/dist/manifest/naming.d.ts +0 -2
- package/node_modules/@noodle-borg/compiler/dist/manifest/naming.js +1 -1
- package/node_modules/@noodle-borg/compiler/dist/manifest/schema.d.ts +4 -0
- package/node_modules/@noodle-borg/compiler/dist/manifest/schema.js +20 -1
- package/node_modules/@noodle-borg/compiler/dist/manifest/website-projection.d.ts +2 -1
- package/node_modules/@noodle-borg/compiler/dist/state-handles.js +1 -0
- package/node_modules/@noodle-borg/compiler/package.json +1 -4
- package/node_modules/@noodle-borg/connector-defs/dist/credential-profiles.js +1 -1
- package/node_modules/@noodle-borg/connector-defs/dist/schema.d.ts +0 -6
- package/node_modules/@noodle-borg/connector-http/dist/http-connector.d.ts +2 -2
- package/node_modules/@noodle-borg/connector-http/dist/http-response.d.ts +2 -1
- package/node_modules/@noodle-borg/connector-http/dist/mcp/config.js +1 -1
- package/node_modules/@noodle-borg/control-plane/dist/deploy-auth.d.ts +0 -1
- package/node_modules/@noodle-borg/developer-mcp/dist/widgets/shared.js +1 -1
- package/node_modules/@noodle-borg/knowledge-operations/dist/crawl-lifecycle.d.ts +2 -1
- package/node_modules/@noodle-borg/knowledge-operations/package.json +1 -2
- package/node_modules/@noodle-borg/observability/dist/request-events-postgres.js +3 -1
- package/node_modules/@noodle-borg/plugin-distribution/dist/openai-submission-render.js +1 -1
- package/node_modules/@noodle-borg/protocol/dist/index.d.ts +1 -1
- package/node_modules/@noodle-borg/protocol/dist/index.js +1 -1
- package/node_modules/@noodle-borg/protocol/dist/interaction-envelope.js +2 -2
- package/node_modules/@noodle-borg/protocol/dist/jsonrpc.d.ts +1 -1
- package/node_modules/@noodle-borg/protocol/dist/jsonrpc.js +1 -1
- package/node_modules/@noodle-borg/protocol/dist/mapping.d.ts +4 -6
- package/node_modules/@noodle-borg/protocol/dist/mapping.js +1 -1
- package/node_modules/@noodle-borg/protocol/dist/observation.d.ts +0 -9
- package/node_modules/@noodle-borg/protocol/dist/observation.js +1 -1
- package/node_modules/@noodle-borg/protocol/dist/v2/handler.d.ts +2 -1
- package/node_modules/@noodle-borg/protocol/dist/v2/versions.d.ts +4 -0
- package/node_modules/@noodle-borg/protocol/dist/v2/versions.js +2 -0
- package/node_modules/@noodle-borg/protocol/dist/widget/domain-projection.d.ts +2 -1
- package/node_modules/@noodle-borg/protocol/package.json +0 -1
- package/node_modules/@noodle-borg/runtime/dist/broker/types.d.ts +2 -2
- package/node_modules/@noodle-borg/runtime/dist/index.d.ts +1 -0
- package/node_modules/@noodle-borg/runtime/dist/index.js +1 -0
- package/node_modules/@noodle-borg/runtime/dist/state-handle-ownership.d.ts +21 -0
- package/node_modules/@noodle-borg/runtime/dist/state-handle-ownership.js +10 -0
- package/node_modules/@noodle-borg/runtime/package.json +6 -1
- package/node_modules/@noodle-borg/service/dist/app-package-snapshot.d.ts +1 -2
- package/node_modules/@noodle-borg/service/dist/app-package-snapshot.js +1 -2
- package/node_modules/@noodle-borg/service/dist/archive-preflight.js +1 -1
- package/node_modules/@noodle-borg/service/dist/assets.js +1 -1
- package/node_modules/@noodle-borg/service/dist/assistant-bindings.js +2 -2
- package/node_modules/@noodle-borg/service/dist/client-compatibility.js +1 -2
- package/node_modules/@noodle-borg/service/dist/developer-mcp/mount.js +2 -2
- package/node_modules/@noodle-borg/service/dist/external-credential-exchange.d.ts +0 -1
- package/node_modules/@noodle-borg/service/dist/external-credential-exchange.js +1 -1
- package/node_modules/@noodle-borg/service/dist/http-util.js +1 -72
- package/node_modules/@noodle-borg/service/dist/managed-config-expressions.d.ts +0 -1
- package/node_modules/@noodle-borg/service/dist/managed-config-expressions.js +1 -1
- package/node_modules/@noodle-borg/service/dist/oauth/customer-bridge.js +1 -1
- package/node_modules/@noodle-borg/service/dist/oauth/developer-grant.js +2 -2
- package/node_modules/@noodle-borg/service/dist/observability-runtime.js +2 -3
- package/node_modules/@noodle-borg/service/dist/registry-targets.js +3 -3
- package/node_modules/@noodle-borg/service/dist/routes/access-mode.js +0 -4
- package/node_modules/@noodle-borg/service/dist/routes/access.js +1 -1
- package/node_modules/@noodle-borg/service/dist/routes/alerts.js +3 -2
- package/node_modules/@noodle-borg/service/dist/routes/analytics.js +2 -1
- package/node_modules/@noodle-borg/service/dist/routes/apps.js +1 -1
- package/node_modules/@noodle-borg/service/dist/routes/archive.js +2 -1
- package/node_modules/@noodle-borg/service/dist/routes/asset-control-plane.js +2 -1
- package/node_modules/@noodle-borg/service/dist/routes/assistant-agent.js +7 -2
- package/node_modules/@noodle-borg/service/dist/routes/assistant-appearance.js +2 -1
- 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-elevation.js +15 -8
- package/node_modules/@noodle-borg/service/dist/routes/assistant-embeds.js +2 -1
- package/node_modules/@noodle-borg/service/dist/routes/assistant-interaction-replay.js +5 -3
- package/node_modules/@noodle-borg/service/dist/routes/assistant-interactions.js +5 -3
- package/node_modules/@noodle-borg/service/dist/routes/assistant-public-configuration.js +1 -1
- package/node_modules/@noodle-borg/service/dist/routes/assistant-public-session.js +1 -1
- package/node_modules/@noodle-borg/service/dist/routes/assistant-route-http.js +4 -3
- package/node_modules/@noodle-borg/service/dist/routes/assistant-sandbox.js +1 -1
- package/node_modules/@noodle-borg/service/dist/routes/assistant-suggestions.js +1 -1
- package/node_modules/@noodle-borg/service/dist/routes/assistant-transcript.js +48 -9
- package/node_modules/@noodle-borg/service/dist/routes/assistant-usage.js +2 -1
- package/node_modules/@noodle-borg/service/dist/routes/assistant.js +2 -1
- package/node_modules/@noodle-borg/service/dist/routes/auth-discovery.js +2 -2
- package/node_modules/@noodle-borg/service/dist/routes/auth-doctor-live.js +1 -1
- package/node_modules/@noodle-borg/service/dist/routes/config-values-paths.js +1 -1
- package/node_modules/@noodle-borg/service/dist/routes/config-values.js +2 -1
- package/node_modules/@noodle-borg/service/dist/routes/control-plane.js +2 -3
- package/node_modules/@noodle-borg/service/dist/routes/deploy-preflight.js +1 -1
- package/node_modules/@noodle-borg/service/dist/routes/deployment-activation-response.js +1 -1
- package/node_modules/@noodle-borg/service/dist/routes/deployment-lock.js +1 -1
- package/node_modules/@noodle-borg/service/dist/routes/deployment-package.js +1 -1
- package/node_modules/@noodle-borg/service/dist/routes/deployments.js +1 -1
- package/node_modules/@noodle-borg/service/dist/routes/diagnostics.js +2 -1
- package/node_modules/@noodle-borg/service/dist/routes/environment-production.js +2 -1
- package/node_modules/@noodle-borg/service/dist/routes/envs.js +1 -1
- package/node_modules/@noodle-borg/service/dist/routes/google-workload-identity.js +1 -1
- package/node_modules/@noodle-borg/service/dist/routes/intent-capture.js +2 -1
- package/node_modules/@noodle-borg/service/dist/routes/logs.js +2 -1
- package/node_modules/@noodle-borg/service/dist/routes/openai-apps-challenge.js +1 -2
- package/node_modules/@noodle-borg/service/dist/routes/org-admin.js +2 -1
- package/node_modules/@noodle-borg/service/dist/routes/org-domains.js +2 -1
- package/node_modules/@noodle-borg/service/dist/routes/org-mcp-subdomain.js +1 -1
- package/node_modules/@noodle-borg/service/dist/routes/paths.js +0 -39
- package/node_modules/@noodle-borg/service/dist/routes/protected-resource-metadata.js +3 -3
- package/node_modules/@noodle-borg/service/dist/routes/rollback.js +2 -1
- package/node_modules/@noodle-borg/service/dist/routes/service-principals-dispatch.js +2 -3
- package/node_modules/@noodle-borg/service/dist/routes/service-principals.js +1 -1
- package/node_modules/@noodle-borg/service/dist/service-config.d.ts +3 -2
- package/node_modules/@noodle-borg/service/dist/service-config.js +1 -1
- package/node_modules/@noodle-borg/service/dist/service.js +5 -2
- package/node_modules/@noodle-borg/service/dist/store/alert-rules.js +1 -1
- package/node_modules/@noodle-borg/service/dist/store/audit.js +1 -1
- package/node_modules/@noodle-borg/service/dist/store/records.js +1 -1
- package/node_modules/@noodle-borg/service/dist/store/validate.d.ts +1 -1
- package/node_modules/@noodle-borg/service/dist/store/validate.js +1 -1
- package/node_modules/@noodle-borg/service/dist/store.d.ts +2 -2
- package/node_modules/@noodle-borg/service/dist/store.js +1 -1
- package/node_modules/@noodle-borg/service/package.json +1 -1
- package/node_modules/@noodle-borg/transport-http/dist/client-identity.js +1 -1
- package/node_modules/@noodle-borg/transport-http/dist/handler.d.ts +1 -2
- package/node_modules/@noodle-borg/transport-http/dist/identity-authorization.d.ts +51 -0
- package/node_modules/@noodle-borg/transport-http/dist/identity-authorization.js +7 -7
- package/node_modules/@noodle-borg/transport-http/dist/index.d.ts +4 -2
- package/node_modules/@noodle-borg/transport-http/dist/index.js +3 -1
- package/node_modules/@noodle-borg/transport-http/dist/request-body.d.ts +29 -0
- package/node_modules/@noodle-borg/transport-http/dist/request-body.js +64 -0
- package/node_modules/@noodle-borg/transport-http/dist/responses.d.ts +28 -0
- package/node_modules/@noodle-borg/transport-http/dist/routing.d.ts +2 -4
- package/node_modules/@noodle-borg/transport-http/dist/routing.js +3 -3
- package/node_modules/@noodle-borg/transport-http/dist/serve-request.js +2 -13
- package/node_modules/@noodle-borg/transport-http/package.json +0 -1
- package/node_modules/@noodle-borg/wire-contracts/dist/assistant.d.ts +19 -25
- package/node_modules/@noodle-borg/wire-contracts/dist/assistant.js +20 -34
- package/node_modules/@noodleseed/assistant/README.md +1 -1
- package/node_modules/@noodleseed/assistant/package.json +2 -1
- package/package.json +2 -2
- package/dist/commands/catalog-data-billing.d.ts +0 -3
- package/dist/commands/catalog-data-billing.d.ts.map +0 -1
- package/dist/commands/catalog-data-billing.js +0 -3
- package/dist/commands/catalog-data-billing.js.map +0 -1
- package/dist/commands/catalog-data-policy.d.ts +0 -3
- package/dist/commands/catalog-data-policy.d.ts.map +0 -1
- package/dist/commands/catalog-data-policy.js +0 -3
- package/dist/commands/catalog-data-policy.js.map +0 -1
- package/node_modules/@noodle-borg/compiler/dist/artifact/catalog-emission.d.ts +0 -50
- package/node_modules/@noodle-borg/compiler/dist/context-compile.d.ts +0 -17
- package/node_modules/@noodle-borg/transport-http/dist/module-http.d.ts +0 -13
- package/node_modules/@noodle-borg/transport-http/dist/module-http.js +0 -28
|
@@ -11,7 +11,7 @@ export { type ConfigScope, type ConfigStore, type ConfigValueMetadata, InMemoryC
|
|
|
11
11
|
export type { ProductionEnvironmentChange } from './store/environment-production.js';
|
|
12
12
|
export { InMemoryArtifactStore } from './store/in-memory.js';
|
|
13
13
|
export { JsonFileArtifactStore } from './store/json-file.js';
|
|
14
|
-
export { CONFIG_NAME_PATTERN, DEPLOYMENT_ID_PATTERN, DOMAIN_PATTERN,
|
|
14
|
+
export { CONFIG_NAME_PATTERN, DEPLOYMENT_ID_PATTERN, DOMAIN_PATTERN, SLUG_PATTERN, validateConfigName, validateConfigScope, validateDomain, validateOrgMembershipDomain, validateOrgRole, validatePositiveInteger, validateSignupAllowlistKind, validateSlug, validateTenantRef, } from './store/validate.js';
|
|
15
15
|
/**
|
|
16
16
|
* Secret values at rest. The compiled runtime keeps plaintext tokens in memory (the broker), but the
|
|
17
17
|
* *persisted* form is a tagged envelope. `aes-256-gcm` (Slice 26, ADR 0028) holds an AES-256-GCM
|
|
@@ -92,7 +92,7 @@ export interface TenantOidcAuthConfig {
|
|
|
92
92
|
readonly claims?: TenantAuthClaimMap | undefined;
|
|
93
93
|
readonly routing?: ArtifactCustomerAuthRouting | undefined;
|
|
94
94
|
}
|
|
95
|
-
|
|
95
|
+
interface TenantFederatedOidcAuthConfig {
|
|
96
96
|
readonly kind: 'federatedOidc';
|
|
97
97
|
readonly issuers: readonly {
|
|
98
98
|
readonly issuer: string;
|
|
@@ -4,5 +4,5 @@ export { InMemoryConfigStore, resolveConfigScope, scopeChain, } from './store/co
|
|
|
4
4
|
// surface.
|
|
5
5
|
export { InMemoryArtifactStore } from './store/in-memory.js';
|
|
6
6
|
export { JsonFileArtifactStore } from './store/json-file.js';
|
|
7
|
-
export { CONFIG_NAME_PATTERN, DEPLOYMENT_ID_PATTERN, DOMAIN_PATTERN,
|
|
7
|
+
export { CONFIG_NAME_PATTERN, DEPLOYMENT_ID_PATTERN, DOMAIN_PATTERN, SLUG_PATTERN, validateConfigName, validateConfigScope, validateDomain, validateOrgMembershipDomain, validateOrgRole, validatePositiveInteger, validateSignupAllowlistKind, validateSlug, validateTenantRef, } from './store/validate.js';
|
|
8
8
|
//# sourceMappingURL=store.js.map
|
|
@@ -39,7 +39,7 @@
|
|
|
39
39
|
"dependencies": {
|
|
40
40
|
"@modelcontextprotocol/sdk": "^1.29.0",
|
|
41
41
|
"@noodle-borg/admission-limits": "0.0.0",
|
|
42
|
-
"@noodle-borg/agent-kit": "0.
|
|
42
|
+
"@noodle-borg/agent-kit": "0.92.0",
|
|
43
43
|
"@noodle-borg/app-package": "0.0.0",
|
|
44
44
|
"@noodle-borg/assistant-gateway": "0.0.0",
|
|
45
45
|
"@noodle-borg/auth": "0.0.0",
|
|
@@ -38,7 +38,7 @@ const KNOWN_UA_FAMILIES = [
|
|
|
38
38
|
[/mozilla|chrome|safari|firefox|edg/i, 'browser'],
|
|
39
39
|
];
|
|
40
40
|
/** Bound a wire-supplied client identity scalar: printable, trimmed, and length-capped. */
|
|
41
|
-
|
|
41
|
+
function boundedClientScalar(value, max) {
|
|
42
42
|
if (value === undefined)
|
|
43
43
|
return undefined;
|
|
44
44
|
let cleaned = '';
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { IncomingMessage, ServerResponse } from 'node:http';
|
|
2
2
|
import type { AccessMode, AdmissionGate, DataPlaneIdentityAuthorizer, IntentCaptureMode, IntentEventInput, OrgMembershipSource, OwnerTokenVerifier, RequestEventInput, TenantRouteRef } from '@noodle-borg/module';
|
|
3
|
-
import { type ConfirmationNonceLedger, type ProtocolRequestContext, type RequestStateManager, type ServedArtifact } from '@noodle-borg/protocol';
|
|
3
|
+
import { type ConfirmationNonceLedger, type McpProtocolMode, type ProtocolRequestContext, type RequestStateManager, type ServedArtifact } from '@noodle-borg/protocol';
|
|
4
4
|
import { type TlsPosture } from './front-door.js';
|
|
5
5
|
import { type Logger } from './logging.js';
|
|
6
6
|
import { type PublicTenantRouting } from './routing.js';
|
|
@@ -10,7 +10,6 @@ export type { AccessMode, AdmissionCategory, AdmissionContext, AdmissionDecision
|
|
|
10
10
|
export type { PublicTenantRouting } from './routing.js';
|
|
11
11
|
/** Origins allowed to call the endpoint: an explicit list, a predicate, or undefined (allow any). */
|
|
12
12
|
export type OriginPolicy = readonly string[] | ((origin: string) => boolean);
|
|
13
|
-
export type McpProtocolMode = 'dual' | 'legacy-only';
|
|
14
13
|
/** Validated, bounded coordinates from one host request. Never identity or policy input. */
|
|
15
14
|
export interface InvocationClientLocationHint {
|
|
16
15
|
readonly latitude: number;
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import type { IncomingMessage, ServerResponse } from 'node:http';
|
|
2
|
+
import type { AccessMode, DataPlaneIdentityAuthorizer, OrgMembershipSource, OwnerTokenVerifier } from '@noodle-borg/module';
|
|
3
|
+
import { type ProtocolRequestContext } from '@noodle-borg/protocol';
|
|
4
|
+
export interface IdentityAuthorizationOptions {
|
|
5
|
+
readonly accessMode: AccessMode | undefined;
|
|
6
|
+
readonly ownerSubject: string | undefined;
|
|
7
|
+
readonly org: string | undefined;
|
|
8
|
+
readonly orgMembershipSources: readonly OrgMembershipSource[] | undefined;
|
|
9
|
+
readonly verifyOwnerToken: OwnerTokenVerifier | undefined;
|
|
10
|
+
readonly authorizeDataPlaneIdentity: DataPlaneIdentityAuthorizer | undefined;
|
|
11
|
+
/** Whether to trust forwarded-proto when reconstructing the public resource/PRM URLs. */
|
|
12
|
+
readonly trustProxy: boolean;
|
|
13
|
+
/** Public resource URL supplied by a trusted edge for MCP-subdomain routes. */
|
|
14
|
+
readonly publicResourceUrl?: string;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Bounded identity-denial taxonomy retained by request analytics (#1309). Derived structurally at
|
|
18
|
+
* this seam — the token verifier stays opaque — and never carries token material or claims.
|
|
19
|
+
*/
|
|
20
|
+
type IdentityDenialReason = 'missing_token' | 'verifier_unavailable' | 'token_rejected' | 'identity_not_customer' | 'owner_unconfigured' | 'owner_mismatch' | 'org_membership_denied';
|
|
21
|
+
export type IdentityAuthResult = {
|
|
22
|
+
readonly allow: true;
|
|
23
|
+
readonly caller?: NonNullable<ProtocolRequestContext['caller']>;
|
|
24
|
+
readonly customerIssuer?: string;
|
|
25
|
+
readonly customerRouting?: Readonly<Record<string, string>>;
|
|
26
|
+
readonly subject?: string;
|
|
27
|
+
} | {
|
|
28
|
+
readonly allow: false;
|
|
29
|
+
readonly reason: IdentityDenialReason;
|
|
30
|
+
};
|
|
31
|
+
/**
|
|
32
|
+
* Identity gate (OA-1/OA-3): require a verified token and authorize it against the deployment access mode.
|
|
33
|
+
* `allow: true` means the request may proceed, with caller and subject fields when available. `allow: false`
|
|
34
|
+
* means this function already wrote the denial response. Missing tokens and absent verifiers fail closed.
|
|
35
|
+
*/
|
|
36
|
+
export declare function authorizeIdentityMode(req: IncomingMessage, res: ServerResponse, auth: IdentityAuthorizationOptions): Promise<IdentityAuthResult>;
|
|
37
|
+
/**
|
|
38
|
+
* Public endpoints stay anonymous unless a valid service-principal bearer is supplied. Invalid, human,
|
|
39
|
+
* and customer bearers retain the pre-existing public behavior and are ignored rather than challenged.
|
|
40
|
+
*/
|
|
41
|
+
export declare function authorizePublicServiceMode(req: IncomingMessage, auth: IdentityAuthorizationOptions): Promise<IdentityAuthResult>;
|
|
42
|
+
export declare function authorizeMixedMode(req: IncomingMessage, res: ServerResponse, auth: IdentityAuthorizationOptions): Promise<IdentityAuthResult>;
|
|
43
|
+
export declare function isIdentityMode(mode: AccessMode | undefined): boolean;
|
|
44
|
+
/** The credential carried by one `Authorization` header value, or null when it is not a bearer. */
|
|
45
|
+
export declare function bearerToken(headerValue: string | undefined): string | null;
|
|
46
|
+
/** The canonical resource identifier (the tenant MCP URL) a token must be audience-bound to (RFC 8707). */
|
|
47
|
+
export declare function canonicalResourceUrl(req: IncomingMessage, auth: Pick<IdentityAuthorizationOptions, 'trustProxy' | 'publicResourceUrl'>): string;
|
|
48
|
+
/** The RFC 9728 protected-resource-metadata URL for this request (well-known prefix before the path). */
|
|
49
|
+
export declare function protectedResourceMetadataUrl(req: IncomingMessage, auth: IdentityAuthorizationOptions): string;
|
|
50
|
+
export {};
|
|
51
|
+
//# sourceMappingURL=identity-authorization.d.ts.map
|
|
@@ -8,7 +8,7 @@ import { header } from './request-capture.js';
|
|
|
8
8
|
*/
|
|
9
9
|
export async function authorizeIdentityMode(req, res, auth) {
|
|
10
10
|
const challenge = protectedResourceMetadataUrl(req, auth);
|
|
11
|
-
const token = bearerToken(req);
|
|
11
|
+
const token = bearerToken(header(req, 'authorization'));
|
|
12
12
|
if (token === null || auth.verifyOwnerToken === undefined) {
|
|
13
13
|
sendUnauthorized(res, challenge);
|
|
14
14
|
return { allow: false, reason: token === null ? 'missing_token' : 'verifier_unavailable' };
|
|
@@ -75,7 +75,7 @@ export async function authorizeIdentityMode(req, res, auth) {
|
|
|
75
75
|
* and customer bearers retain the pre-existing public behavior and are ignored rather than challenged.
|
|
76
76
|
*/
|
|
77
77
|
export async function authorizePublicServiceMode(req, auth) {
|
|
78
|
-
const token = bearerToken(req);
|
|
78
|
+
const token = bearerToken(header(req, 'authorization'));
|
|
79
79
|
if (token === null || auth.verifyOwnerToken === undefined)
|
|
80
80
|
return { allow: true };
|
|
81
81
|
const verification = await auth.verifyOwnerToken(token, canonicalResourceUrl(req, auth));
|
|
@@ -84,7 +84,7 @@ export async function authorizePublicServiceMode(req, auth) {
|
|
|
84
84
|
: { allow: true };
|
|
85
85
|
}
|
|
86
86
|
export async function authorizeMixedMode(req, res, auth) {
|
|
87
|
-
const token = bearerToken(req);
|
|
87
|
+
const token = bearerToken(header(req, 'authorization'));
|
|
88
88
|
if (token === null)
|
|
89
89
|
return { allow: true };
|
|
90
90
|
const challenge = protectedResourceMetadataUrl(req, auth);
|
|
@@ -114,11 +114,11 @@ export function isIdentityMode(mode) {
|
|
|
114
114
|
mode === 'authenticated' ||
|
|
115
115
|
mode === 'customers');
|
|
116
116
|
}
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
if (!
|
|
117
|
+
/** The credential carried by one `Authorization` header value, or null when it is not a bearer. */
|
|
118
|
+
export function bearerToken(headerValue) {
|
|
119
|
+
if (!headerValue)
|
|
120
120
|
return null;
|
|
121
|
-
const match = /^Bearer\s+(.+)$/i.exec(
|
|
121
|
+
const match = /^Bearer\s+(.+)$/i.exec(headerValue);
|
|
122
122
|
return match?.[1] ?? null;
|
|
123
123
|
}
|
|
124
124
|
/**
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
export { applySecurityHeaders, effectiveProto, enforceHttps, type TlsPosture, } from './front-door.js';
|
|
2
|
-
export { type AccessMode, type AdmissionCategory, type AdmissionContext, type AdmissionDecision, type AdmissionGate, createMcpHttpHandler, createMcpRouter, type DataPlaneAuthorizationResult, type DataPlaneIdentityAuthorizer, type HttpHandlerOptions, type InvocationClientHint, type InvocationClientLocationHint, type InvocationContextResolutionInput, type InvocationContextResolver, type
|
|
2
|
+
export { type AccessMode, type AdmissionCategory, type AdmissionContext, type AdmissionDecision, type AdmissionGate, createMcpHttpHandler, createMcpRouter, type DataPlaneAuthorizationResult, type DataPlaneIdentityAuthorizer, type HttpHandlerOptions, type InvocationClientHint, type InvocationClientLocationHint, type InvocationContextResolutionInput, type InvocationContextResolver, type OriginPolicy, type OwnerTokenVerifier, type ServedTarget, type ServerLookup, type TenantPreflight, type TenantRouteRef, } from './handler.js';
|
|
3
|
+
export { bearerToken } from './identity-authorization.js';
|
|
3
4
|
export { createLogger, type LogFields, type Logger, type LoggerOptions, type LogLevel, type LogSink, noopLogger, stderrSink, stdoutSink, } from './logging.js';
|
|
4
|
-
export { type ModuleJsonBodyResult, readModuleJsonBody, sendModuleJson, } from './module-http.js';
|
|
5
5
|
export { resolveTrustedPublicOrg, resolveTrustedTenantMcpResource, type TrustedPublicOrg, type TrustedPublicRef, type TrustedPublicRouting, type TrustedTenantMcpResource, trustedPublicMcpRef, trustedPublicOrgWellKnownRef, } from './public-routing.js';
|
|
6
|
+
export { readBody, readDeployBody, readJsonBody } from './request-body.js';
|
|
7
|
+
export { sendJson } from './responses.js';
|
|
6
8
|
export { type RunningServer, type ServeOptions, serveHttp } from './serve.js';
|
|
7
9
|
export type { HostedToolAuthorizationObservation, HostedToolAuthorizationObserver, ServicePrincipalToolAuthorizationObservation, } from './service-principal-authorization.js';
|
|
8
10
|
export { preflightServicePrincipalToolCall, sendServicePrincipalToolDenial, } from './service-principal-authorization.js';
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
export { applySecurityHeaders, effectiveProto, enforceHttps, } from './front-door.js';
|
|
2
2
|
export { createMcpHttpHandler, createMcpRouter, } from './handler.js';
|
|
3
|
+
export { bearerToken } from './identity-authorization.js';
|
|
3
4
|
export { createLogger, noopLogger, stderrSink, stdoutSink, } from './logging.js';
|
|
4
|
-
export { readModuleJsonBody, sendModuleJson, } from './module-http.js';
|
|
5
5
|
export { resolveTrustedPublicOrg, resolveTrustedTenantMcpResource, trustedPublicMcpRef, trustedPublicOrgWellKnownRef, } from './public-routing.js';
|
|
6
|
+
export { readBody, readDeployBody, readJsonBody } from './request-body.js';
|
|
7
|
+
export { sendJson } from './responses.js';
|
|
6
8
|
export { serveHttp } from './serve.js';
|
|
7
9
|
export { preflightServicePrincipalToolCall, sendServicePrincipalToolDenial, } from './service-principal-authorization.js';
|
|
8
10
|
export { toWebRequest, writeWebResponse } from './web-bridge.js';
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { IncomingMessage } from 'node:http';
|
|
2
|
+
export declare function readBody(req: IncomingMessage, max: number): Promise<{
|
|
3
|
+
ok: true;
|
|
4
|
+
text: string;
|
|
5
|
+
} | {
|
|
6
|
+
ok: false;
|
|
7
|
+
receivedBytes: number;
|
|
8
|
+
maxBytes: number;
|
|
9
|
+
}>;
|
|
10
|
+
export declare function readDeployBody(req: IncomingMessage, max: number): Promise<{
|
|
11
|
+
ok: true;
|
|
12
|
+
text: string;
|
|
13
|
+
encoding: 'identity' | 'gzip';
|
|
14
|
+
} | {
|
|
15
|
+
ok: false;
|
|
16
|
+
status: 400 | 413 | 415;
|
|
17
|
+
error: string;
|
|
18
|
+
receivedBytes?: number;
|
|
19
|
+
maxBytes?: number;
|
|
20
|
+
}>;
|
|
21
|
+
export declare function readJsonBody(req: IncomingMessage, max: number): Promise<{
|
|
22
|
+
ok: true;
|
|
23
|
+
value: unknown;
|
|
24
|
+
} | {
|
|
25
|
+
ok: false;
|
|
26
|
+
status: 400 | 413;
|
|
27
|
+
error: string;
|
|
28
|
+
}>;
|
|
29
|
+
//# sourceMappingURL=request-body.d.ts.map
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { gunzipSync } from 'node:zlib';
|
|
2
|
+
export async function readBody(req, max) {
|
|
3
|
+
const body = await readBodyBuffer(req, max);
|
|
4
|
+
return body.ok ? { ok: true, text: body.buffer.toString('utf8') } : body;
|
|
5
|
+
}
|
|
6
|
+
async function readBodyBuffer(req, max) {
|
|
7
|
+
const chunks = [];
|
|
8
|
+
let size = 0;
|
|
9
|
+
for await (const chunk of req) {
|
|
10
|
+
const buf = chunk;
|
|
11
|
+
size += buf.length;
|
|
12
|
+
if (size > max)
|
|
13
|
+
return { ok: false, receivedBytes: size, maxBytes: max };
|
|
14
|
+
chunks.push(buf);
|
|
15
|
+
}
|
|
16
|
+
return { ok: true, buffer: Buffer.concat(chunks) };
|
|
17
|
+
}
|
|
18
|
+
export async function readDeployBody(req, max) {
|
|
19
|
+
const encoding = (req.headers['content-encoding'] ?? 'identity').trim().toLowerCase();
|
|
20
|
+
if (encoding !== 'identity' && encoding !== 'gzip') {
|
|
21
|
+
return { ok: false, status: 415, error: `unsupported content encoding "${encoding}"` };
|
|
22
|
+
}
|
|
23
|
+
const body = await readBodyBuffer(req, max);
|
|
24
|
+
if (!body.ok) {
|
|
25
|
+
return {
|
|
26
|
+
ok: false,
|
|
27
|
+
status: 413,
|
|
28
|
+
error: `${encoding === 'gzip' ? 'compressed deploy' : 'deploy'} request exceeds the ${body.maxBytes} byte limit (received at least ${body.receivedBytes} bytes)`,
|
|
29
|
+
receivedBytes: body.receivedBytes,
|
|
30
|
+
maxBytes: body.maxBytes,
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
if (encoding === 'identity') {
|
|
34
|
+
return { ok: true, text: body.buffer.toString('utf8'), encoding };
|
|
35
|
+
}
|
|
36
|
+
try {
|
|
37
|
+
const expanded = gunzipSync(body.buffer, { maxOutputLength: max });
|
|
38
|
+
return { ok: true, text: expanded.toString('utf8'), encoding };
|
|
39
|
+
}
|
|
40
|
+
catch (error) {
|
|
41
|
+
const code = error instanceof Error && 'code' in error ? String(error.code) : '';
|
|
42
|
+
if (code === 'ERR_BUFFER_TOO_LARGE') {
|
|
43
|
+
return {
|
|
44
|
+
ok: false,
|
|
45
|
+
status: 413,
|
|
46
|
+
error: `expanded deploy request exceeds the ${max} byte limit`,
|
|
47
|
+
maxBytes: max,
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
return { ok: false, status: 400, error: 'invalid gzip deploy request' };
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
export async function readJsonBody(req, max) {
|
|
54
|
+
const body = await readBody(req, max);
|
|
55
|
+
if (!body.ok)
|
|
56
|
+
return { ok: false, status: 413, error: 'request body too large' };
|
|
57
|
+
try {
|
|
58
|
+
return { ok: true, value: JSON.parse(body.text) };
|
|
59
|
+
}
|
|
60
|
+
catch (error) {
|
|
61
|
+
return { ok: false, status: 400, error: `invalid JSON: ${error.message}` };
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=request-body.js.map
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { IncomingMessage, ServerResponse } from 'node:http';
|
|
2
|
+
import type { AdmissionContext, AdmissionGate } from '@noodle-borg/module';
|
|
3
|
+
import type { Logger } from './logging.js';
|
|
4
|
+
/** Emit one `mcp.request` lifecycle line with safe scalar fields only. */
|
|
5
|
+
export declare function logRequest(logger: Logger, routeId: string, req: IncomingMessage, res: ServerResponse, start: number): void;
|
|
6
|
+
export declare function guard(res: ServerResponse, fn: Promise<void>): Promise<void>;
|
|
7
|
+
export declare function sendJson(res: ServerResponse, status: number, body: unknown): void;
|
|
8
|
+
/** A transport-level JSON-RPC error response with no id (per the Streamable HTTP spec). */
|
|
9
|
+
export declare function rpcError(code: number, message: string): {
|
|
10
|
+
jsonrpc: '2.0';
|
|
11
|
+
id: null;
|
|
12
|
+
error: {
|
|
13
|
+
code: number;
|
|
14
|
+
message: string;
|
|
15
|
+
};
|
|
16
|
+
};
|
|
17
|
+
export declare function admissionRpcError(context: AdmissionContext, decision: Exclude<Awaited<ReturnType<AdmissionGate>>, {
|
|
18
|
+
allow: true;
|
|
19
|
+
}>): {
|
|
20
|
+
jsonrpc: '2.0';
|
|
21
|
+
id: string | number | null;
|
|
22
|
+
error: {
|
|
23
|
+
code: number;
|
|
24
|
+
message: string;
|
|
25
|
+
data: Record<string, string | number>;
|
|
26
|
+
};
|
|
27
|
+
};
|
|
28
|
+
//# sourceMappingURL=responses.d.ts.map
|
|
@@ -5,7 +5,7 @@ export interface PublicTenantRouting {
|
|
|
5
5
|
readonly edgeToken: string;
|
|
6
6
|
readonly resolveTenant: (ref: PublicMcpRouteRef) => Promise<TenantRouteRef | undefined>;
|
|
7
7
|
}
|
|
8
|
-
|
|
8
|
+
type ParsedRoute = {
|
|
9
9
|
readonly kind: 'tenant';
|
|
10
10
|
readonly ref: TenantRouteRef;
|
|
11
11
|
readonly logId: string;
|
|
@@ -23,7 +23,5 @@ export type RouteResolution = {
|
|
|
23
23
|
readonly status: 403;
|
|
24
24
|
};
|
|
25
25
|
export declare function resolveRoute(req: IncomingMessage, pathname: string, publicTenantRouting: PublicTenantRouting | undefined): Promise<RouteResolution>;
|
|
26
|
-
export
|
|
27
|
-
export declare function tenantLogId(ref: TenantRouteRef): string;
|
|
28
|
-
export declare function safeDecode(value: string): string | null;
|
|
26
|
+
export {};
|
|
29
27
|
//# sourceMappingURL=routing.d.ts.map
|
|
@@ -27,7 +27,7 @@ export async function resolveRoute(req, pathname, publicTenantRouting) {
|
|
|
27
27
|
}
|
|
28
28
|
return { ok: true, route: parseRoute(pathname) };
|
|
29
29
|
}
|
|
30
|
-
|
|
30
|
+
function parseRoute(pathname) {
|
|
31
31
|
const tenant = parseLegacyTenantMcpPath(pathname);
|
|
32
32
|
if (tenant !== undefined) {
|
|
33
33
|
return { kind: 'tenant', ref: tenant, logId: tenantLogId(tenant) };
|
|
@@ -41,10 +41,10 @@ export function parseRoute(pathname) {
|
|
|
41
41
|
}
|
|
42
42
|
return null;
|
|
43
43
|
}
|
|
44
|
-
|
|
44
|
+
function tenantLogId(ref) {
|
|
45
45
|
return `${ref.org}/${ref.app}/${ref.env}${ref.serverVersion !== undefined ? `@${ref.serverVersion}` : ''}`;
|
|
46
46
|
}
|
|
47
|
-
|
|
47
|
+
function safeDecode(value) {
|
|
48
48
|
try {
|
|
49
49
|
return decodeURIComponent(value);
|
|
50
50
|
}
|
|
@@ -3,6 +3,7 @@ import { createDualEraMcpHandler, handleStatelessHttp, JSON_RPC, } from '@noodle
|
|
|
3
3
|
import { admissionContexts, requestsInvocationContext } from './admission-context.js';
|
|
4
4
|
import { authorizeIdentityMode, authorizeMixedMode, authorizePublicServiceMode, canonicalResourceUrl, isIdentityMode, } from './identity-authorization.js';
|
|
5
5
|
import { invocationClientHint } from './invocation-client-hints.js';
|
|
6
|
+
import { readBody } from './request-body.js';
|
|
6
7
|
import { emitDeniedRequestEvent, emitIntentEvents, emitRequestEvent, header, } from './request-capture.js';
|
|
7
8
|
import { admissionRpcError, rpcError, sendJson } from './responses.js';
|
|
8
9
|
import { preflightServicePrincipalToolCall, sendServicePrincipalToolDenial, } from './service-principal-authorization.js';
|
|
@@ -284,21 +285,9 @@ function boundedReason(reason) {
|
|
|
284
285
|
.slice(0, 32);
|
|
285
286
|
return token.length === 0 ? 'denied' : token;
|
|
286
287
|
}
|
|
287
|
-
|
|
288
|
+
function originAllowed(origin, allowed) {
|
|
288
289
|
if (allowed === undefined)
|
|
289
290
|
return true;
|
|
290
291
|
return typeof allowed === 'function' ? allowed(origin) : allowed.includes(origin);
|
|
291
292
|
}
|
|
292
|
-
export async function readBody(req, max) {
|
|
293
|
-
const chunks = [];
|
|
294
|
-
let size = 0;
|
|
295
|
-
for await (const chunk of req) {
|
|
296
|
-
const buf = chunk;
|
|
297
|
-
size += buf.length;
|
|
298
|
-
if (size > max)
|
|
299
|
-
return { ok: false };
|
|
300
|
-
chunks.push(buf);
|
|
301
|
-
}
|
|
302
|
-
return { ok: true, text: Buffer.concat(chunks).toString('utf8') };
|
|
303
|
-
}
|
|
304
293
|
//# sourceMappingURL=serve-request.js.map
|
|
@@ -30,28 +30,9 @@ export declare const assistantSessionResponseSchema: z.ZodObject<{
|
|
|
30
30
|
resume: z.ZodOptional<z.ZodObject<{
|
|
31
31
|
tool: z.ZodString;
|
|
32
32
|
}, z.core.$strip>>;
|
|
33
|
+
continuedAfterAuthentication: z.ZodOptional<z.ZodLiteral<true>>;
|
|
33
34
|
}, z.core.$strip>;
|
|
34
35
|
export type AssistantSessionResponse = z.infer<typeof assistantSessionResponseSchema>;
|
|
35
|
-
/**
|
|
36
|
-
* The bounded visible transcript (ADR 0141/0201 amendments 2026-08-26): only rows that actually
|
|
37
|
-
* appeared in the panel — never tool internals, tickets, or model-facing scaffolding. Bounded by the
|
|
38
|
-
* session history window (40 messages); a read spends no turn budget. Strict, because the service
|
|
39
|
-
* parses its own response before sending, like the session exchange.
|
|
40
|
-
*/
|
|
41
|
-
export declare const assistantTranscriptResponseSchema: z.ZodObject<{
|
|
42
|
-
entries: z.ZodArray<z.ZodObject<{
|
|
43
|
-
role: z.ZodEnum<{
|
|
44
|
-
assistant: "assistant";
|
|
45
|
-
user: "user";
|
|
46
|
-
}>;
|
|
47
|
-
text: z.ZodString;
|
|
48
|
-
}, z.core.$strict>>;
|
|
49
|
-
suggestions: z.ZodOptional<z.ZodObject<{
|
|
50
|
-
phase: z.ZodLiteral<"follow_up">;
|
|
51
|
-
prompts: z.ZodArray<z.ZodString>;
|
|
52
|
-
}, z.core.$strict>>;
|
|
53
|
-
}, z.core.$strict>;
|
|
54
|
-
export type AssistantTranscriptResponse = z.infer<typeof assistantTranscriptResponseSchema>;
|
|
55
36
|
/** MCP-Apps-shaped, author-selected renderer summary included on one assistant turn. */
|
|
56
37
|
export declare const assistantModelContextUpdateSchema: z.ZodObject<{
|
|
57
38
|
content: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
@@ -150,6 +131,19 @@ export type AssistantInteractionRequest = z.infer<typeof assistantInteractionReq
|
|
|
150
131
|
* proposal/completion payloads while clients talking to older services tolerate absent new fields.
|
|
151
132
|
*/
|
|
152
133
|
export declare const assistantWireEventSchema: z.ZodUnion<readonly [z.ZodObject<{
|
|
134
|
+
event: z.ZodLiteral<string>;
|
|
135
|
+
data: z.ZodObject<{
|
|
136
|
+
message: z.ZodString;
|
|
137
|
+
}, z.core.$strip>;
|
|
138
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
139
|
+
event: z.ZodLiteral<string>;
|
|
140
|
+
data: z.ZodObject<{
|
|
141
|
+
tool: z.ZodString;
|
|
142
|
+
}, z.core.$strip>;
|
|
143
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
144
|
+
event: z.ZodLiteral<string>;
|
|
145
|
+
data: z.ZodObject<{}, z.core.$strip>;
|
|
146
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
153
147
|
event: z.ZodLiteral<string>;
|
|
154
148
|
data: z.ZodObject<{
|
|
155
149
|
turnId: z.ZodOptional<z.ZodString>;
|
|
@@ -210,18 +204,18 @@ export declare const assistantWireEventSchema: z.ZodUnion<readonly [z.ZodObject<
|
|
|
210
204
|
}, z.core.$strip>, z.ZodObject<{
|
|
211
205
|
event: z.ZodLiteral<string>;
|
|
212
206
|
data: z.ZodObject<{
|
|
213
|
-
turnId: z.ZodOptional<z.ZodString>;
|
|
214
|
-
id: z.ZodString;
|
|
215
207
|
tool: z.ZodString;
|
|
208
|
+
id: z.ZodString;
|
|
216
209
|
resourceUri: z.ZodString;
|
|
217
210
|
title: z.ZodOptional<z.ZodString>;
|
|
218
211
|
result: z.ZodJSONSchema;
|
|
219
212
|
arguments: z.ZodOptional<z.ZodJSONSchema>;
|
|
220
|
-
html: z.ZodOptional<z.ZodString>;
|
|
221
213
|
resourceMeta: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
222
214
|
allowedOpenDomains: z.ZodOptional<z.ZodArray<z.ZodURL>>;
|
|
215
|
+
turnId: z.ZodOptional<z.ZodString>;
|
|
216
|
+
html: z.ZodOptional<z.ZodString>;
|
|
223
217
|
replayed: z.ZodOptional<z.ZodLiteral<true>>;
|
|
224
|
-
}, z.core.$
|
|
218
|
+
}, z.core.$strict>;
|
|
225
219
|
}, z.core.$strip>, z.ZodObject<{
|
|
226
220
|
event: z.ZodLiteral<string>;
|
|
227
221
|
data: z.ZodObject<{
|
|
@@ -237,8 +231,8 @@ export declare const assistantWireEventSchema: z.ZodUnion<readonly [z.ZodObject<
|
|
|
237
231
|
data: z.ZodObject<{
|
|
238
232
|
turnId: z.ZodOptional<z.ZodString>;
|
|
239
233
|
phase: z.ZodEnum<{
|
|
240
|
-
follow_up: "follow_up";
|
|
241
234
|
initial: "initial";
|
|
235
|
+
follow_up: "follow_up";
|
|
242
236
|
}>;
|
|
243
237
|
prompts: z.ZodArray<z.ZodString>;
|
|
244
238
|
}, z.core.$strip>;
|
|
@@ -44,9 +44,9 @@ export const assistantSessionResponseSchema = z.object({
|
|
|
44
44
|
sandbox: z.url().optional(),
|
|
45
45
|
/**
|
|
46
46
|
* Additive bounded visible-transcript endpoint (ADR 0141/0201 amendments 2026-08-26): a
|
|
47
|
-
* session-token-authenticated POST
|
|
48
|
-
* navigation — the sign-in redirect above all. Absent on older services; the widget then
|
|
49
|
-
*
|
|
47
|
+
* session-token-authenticated POST replaying standard assistant events after a full-page
|
|
48
|
+
* navigation — the sign-in redirect above all. Absent on older services; the widget then starts
|
|
49
|
+
* visually fresh exactly as before.
|
|
50
50
|
*/
|
|
51
51
|
transcript: z.url().optional(),
|
|
52
52
|
/** Additive model-generated prompt suggestions; its presence is the client capability gate. */
|
|
@@ -59,30 +59,21 @@ export const assistantSessionResponseSchema = z.object({
|
|
|
59
59
|
* existing turns endpoint; older widgets strip unknown keys and simply never auto-resume.
|
|
60
60
|
*/
|
|
61
61
|
resume: z.object({ tool: z.string().min(1) }).optional(),
|
|
62
|
+
/** Additive elevation marker; the client renders one bounded continuation status. */
|
|
63
|
+
continuedAfterAuthentication: z.literal(true).optional(),
|
|
62
64
|
});
|
|
63
|
-
|
|
64
|
-
* The bounded visible transcript (ADR 0141/0201 amendments 2026-08-26): only rows that actually
|
|
65
|
-
* appeared in the panel — never tool internals, tickets, or model-facing scaffolding. Bounded by the
|
|
66
|
-
* session history window (40 messages); a read spends no turn budget. Strict, because the service
|
|
67
|
-
* parses its own response before sending, like the session exchange.
|
|
68
|
-
*/
|
|
69
|
-
export const assistantTranscriptResponseSchema = z
|
|
65
|
+
const recoverableViewSchema = z
|
|
70
66
|
.object({
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
phase: z.literal('follow_up'),
|
|
82
|
-
prompts: z.array(z.string().trim().min(1).max(240)).max(3),
|
|
83
|
-
})
|
|
84
|
-
.strict()
|
|
85
|
-
.optional(),
|
|
67
|
+
id: z.string().min(1),
|
|
68
|
+
tool: z.string().min(1),
|
|
69
|
+
resourceUri: z.string().startsWith('ui://'),
|
|
70
|
+
title: z.string().min(1).optional(),
|
|
71
|
+
result: z.json(),
|
|
72
|
+
arguments: z.json().optional(),
|
|
73
|
+
html: z.string().min(1),
|
|
74
|
+
resourceMeta: z.record(z.string(), z.unknown()).optional(),
|
|
75
|
+
allowedOpenDomains: z.array(z.url().startsWith('https://')).optional(),
|
|
76
|
+
replayed: z.literal(true),
|
|
86
77
|
})
|
|
87
78
|
.strict();
|
|
88
79
|
const assistantModelContentPartSchema = z
|
|
@@ -185,6 +176,9 @@ const eventEnvelope = (event, data) => z.object({ event: z.literal(event), data
|
|
|
185
176
|
* proposal/completion payloads while clients talking to older services tolerate absent new fields.
|
|
186
177
|
*/
|
|
187
178
|
export const assistantWireEventSchema = z.union([
|
|
179
|
+
eventEnvelope('message_started', z.object({ message: z.string().min(1) })),
|
|
180
|
+
eventEnvelope('resume_started', z.object({ tool: z.string() })),
|
|
181
|
+
eventEnvelope('message_completed', z.object({})),
|
|
188
182
|
eventEnvelope('content', z.object({ turnId: optionalTurnId, delta: z.string() })),
|
|
189
183
|
eventEnvelope('tool_started', z.object({
|
|
190
184
|
turnId: optionalTurnId,
|
|
@@ -224,17 +218,9 @@ export const assistantWireEventSchema = z.union([
|
|
|
224
218
|
resourceMeta: z.record(z.string(), z.unknown()).optional(),
|
|
225
219
|
replayed: z.literal(true).optional(),
|
|
226
220
|
})),
|
|
227
|
-
eventEnvelope('view_available',
|
|
221
|
+
eventEnvelope('view_available', recoverableViewSchema.omit({ replayed: true }).extend({
|
|
228
222
|
turnId: optionalTurnId,
|
|
229
|
-
id: z.string().min(1),
|
|
230
|
-
tool: z.string().min(1),
|
|
231
|
-
resourceUri: z.string().startsWith('ui://'),
|
|
232
|
-
title: z.string().min(1).optional(),
|
|
233
|
-
result: z.json(),
|
|
234
|
-
arguments: z.json().optional(),
|
|
235
223
|
html: z.string().min(1).optional(),
|
|
236
|
-
resourceMeta: z.record(z.string(), z.unknown()).optional(),
|
|
237
|
-
allowedOpenDomains: z.array(z.url().startsWith('https://')).optional(),
|
|
238
224
|
replayed: z.literal(true).optional(),
|
|
239
225
|
})),
|
|
240
226
|
eventEnvelope('auth_requested', z.object({
|
|
@@ -31,7 +31,7 @@ Runtime requirements: Node.js 20+ for the server helper; the package ships ESM a
|
|
|
31
31
|
export conditions, so bundlers and plain Node resolve it without aliases or type shims.
|
|
32
32
|
|
|
33
33
|
The full, always-current integration guide (access modes, session response contract, framework notes, and
|
|
34
|
-
troubleshooting) lives at <https://docs.noodleseed.dev/guides/embedded-assistant>. Authoring and deploying
|
|
34
|
+
troubleshooting) lives at <https://docs.noodleseed.dev/docs/guides/embedded-assistant>. Authoring and deploying
|
|
35
35
|
the server itself is `@noodleseed/one` (`npm install -g @noodleseed/one`).
|
|
36
36
|
|
|
37
37
|
If your page sends a `Content-Security-Policy`, allow the Noodle service origin in `connect-src` (turns and
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@noodleseed/assistant",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.32.0",
|
|
4
4
|
"description": "Embed the Noodle Seed customer-branded assistant in your web app with managed or framework-owned UI, a framework-neutral MCP App host, a DOM-free client, and a backend session helper. Authoring and deploying the server is @noodleseed/one.",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"repository": {
|
|
@@ -90,6 +90,7 @@
|
|
|
90
90
|
"access": "public"
|
|
91
91
|
},
|
|
92
92
|
"scripts": {
|
|
93
|
+
"attw": "attw --pack . --format json",
|
|
93
94
|
"build": "tsup",
|
|
94
95
|
"typecheck": "tsc -p tsconfig.json --noEmit"
|
|
95
96
|
},
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@noodleseed/one",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.153.0",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "Noodle CLI by Noodle Seed — author, run, and deploy declarative MCP servers. Embedding the assistant in your own web app is @noodleseed/assistant.",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -236,7 +236,7 @@
|
|
|
236
236
|
"@modelcontextprotocol/client": "2.0.0",
|
|
237
237
|
"@modelcontextprotocol/server": "2.0.0",
|
|
238
238
|
"@noodle-borg/admission-limits": "0.0.0",
|
|
239
|
-
"@noodle-borg/agent-kit": "0.
|
|
239
|
+
"@noodle-borg/agent-kit": "0.92.0",
|
|
240
240
|
"@noodle-borg/app-audit": "0.0.0",
|
|
241
241
|
"@noodle-borg/app-package": "0.0.0",
|
|
242
242
|
"@noodle-borg/assistant-gateway": "0.0.0",
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"catalog-data-billing.d.ts","sourceRoot":"","sources":["../../src/commands/catalog-data-billing.ts"],"names":[],"mappings":"AAAA,kFAAkF;AAClF,cAAc,kCAAkC,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"catalog-data-billing.js","sourceRoot":"","sources":["../../src/commands/catalog-data-billing.ts"],"names":[],"mappings":"AAAA,kFAAkF;AAClF,cAAc,kCAAkC,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"catalog-data-policy.d.ts","sourceRoot":"","sources":["../../src/commands/catalog-data-policy.ts"],"names":[],"mappings":"AAAA,kFAAkF;AAClF,cAAc,iCAAiC,CAAC"}
|