noodleseed-cli 0.1.4
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/LICENSE +176 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +625 -0
- package/dist/cli.js.map +1 -0
- package/dist/config.d.ts +52 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +77 -0
- package/dist/config.js.map +1 -0
- package/dist/control-plane.d.ts +33 -0
- package/dist/control-plane.d.ts.map +1 -0
- package/dist/control-plane.js +223 -0
- package/dist/control-plane.js.map +1 -0
- package/dist/deploy.d.ts +62 -0
- package/dist/deploy.d.ts.map +1 -0
- package/dist/deploy.js +182 -0
- package/dist/deploy.js.map +1 -0
- package/dist/dev.d.ts +50 -0
- package/dist/dev.d.ts.map +1 -0
- package/dist/dev.js +223 -0
- package/dist/dev.js.map +1 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -0
- package/dist/validate.d.ts +37 -0
- package/dist/validate.d.ts.map +1 -0
- package/dist/validate.js +46 -0
- package/dist/validate.js.map +1 -0
- package/node_modules/@noodle-borg/auth/dist/index.d.ts +14 -0
- package/node_modules/@noodle-borg/auth/dist/index.d.ts.map +1 -0
- package/node_modules/@noodle-borg/auth/dist/index.js +14 -0
- package/node_modules/@noodle-borg/auth/dist/index.js.map +1 -0
- package/node_modules/@noodle-borg/auth/dist/jwt-issuer.d.ts +21 -0
- package/node_modules/@noodle-borg/auth/dist/jwt-issuer.d.ts.map +1 -0
- package/node_modules/@noodle-borg/auth/dist/jwt-issuer.js +24 -0
- package/node_modules/@noodle-borg/auth/dist/jwt-issuer.js.map +1 -0
- package/node_modules/@noodle-borg/auth/dist/metadata.d.ts +27 -0
- package/node_modules/@noodle-borg/auth/dist/metadata.d.ts.map +1 -0
- package/node_modules/@noodle-borg/auth/dist/metadata.js +21 -0
- package/node_modules/@noodle-borg/auth/dist/metadata.js.map +1 -0
- package/node_modules/@noodle-borg/auth/dist/signer.d.ts +45 -0
- package/node_modules/@noodle-borg/auth/dist/signer.d.ts.map +1 -0
- package/node_modules/@noodle-borg/auth/dist/signer.js +47 -0
- package/node_modules/@noodle-borg/auth/dist/signer.js.map +1 -0
- package/node_modules/@noodle-borg/auth/dist/verify.d.ts +42 -0
- package/node_modules/@noodle-borg/auth/dist/verify.d.ts.map +1 -0
- package/node_modules/@noodle-borg/auth/dist/verify.js +48 -0
- package/node_modules/@noodle-borg/auth/dist/verify.js.map +1 -0
- package/node_modules/@noodle-borg/auth/package.json +27 -0
- package/node_modules/@noodle-borg/authoring/dist/index.d.ts +200 -0
- package/node_modules/@noodle-borg/authoring/dist/index.d.ts.map +1 -0
- package/node_modules/@noodle-borg/authoring/dist/index.js +504 -0
- package/node_modules/@noodle-borg/authoring/dist/index.js.map +1 -0
- package/node_modules/@noodle-borg/authoring/package.json +29 -0
- package/node_modules/@noodle-borg/compiler/dist/artifact/types.d.ts +203 -0
- package/node_modules/@noodle-borg/compiler/dist/artifact/types.d.ts.map +1 -0
- package/node_modules/@noodle-borg/compiler/dist/artifact/types.js +20 -0
- package/node_modules/@noodle-borg/compiler/dist/artifact/types.js.map +1 -0
- package/node_modules/@noodle-borg/compiler/dist/catalog/in-memory.d.ts +13 -0
- package/node_modules/@noodle-borg/compiler/dist/catalog/in-memory.d.ts.map +1 -0
- package/node_modules/@noodle-borg/compiler/dist/catalog/in-memory.js +19 -0
- package/node_modules/@noodle-borg/compiler/dist/catalog/in-memory.js.map +1 -0
- package/node_modules/@noodle-borg/compiler/dist/catalog/signature.d.ts +11 -0
- package/node_modules/@noodle-borg/compiler/dist/catalog/signature.d.ts.map +1 -0
- package/node_modules/@noodle-borg/compiler/dist/catalog/signature.js +31 -0
- package/node_modules/@noodle-borg/compiler/dist/catalog/signature.js.map +1 -0
- package/node_modules/@noodle-borg/compiler/dist/catalog/types.d.ts +43 -0
- package/node_modules/@noodle-borg/compiler/dist/catalog/types.d.ts.map +1 -0
- package/node_modules/@noodle-borg/compiler/dist/catalog/types.js +11 -0
- package/node_modules/@noodle-borg/compiler/dist/catalog/types.js.map +1 -0
- package/node_modules/@noodle-borg/compiler/dist/cli.d.ts +3 -0
- package/node_modules/@noodle-borg/compiler/dist/cli.d.ts.map +1 -0
- package/node_modules/@noodle-borg/compiler/dist/cli.js +19 -0
- package/node_modules/@noodle-borg/compiler/dist/cli.js.map +1 -0
- package/node_modules/@noodle-borg/compiler/dist/compile.d.ts +50 -0
- package/node_modules/@noodle-borg/compiler/dist/compile.d.ts.map +1 -0
- package/node_modules/@noodle-borg/compiler/dist/compile.js +719 -0
- package/node_modules/@noodle-borg/compiler/dist/compile.js.map +1 -0
- package/node_modules/@noodle-borg/compiler/dist/errors.d.ts +27 -0
- package/node_modules/@noodle-borg/compiler/dist/errors.d.ts.map +1 -0
- package/node_modules/@noodle-borg/compiler/dist/errors.js +2 -0
- package/node_modules/@noodle-borg/compiler/dist/errors.js.map +1 -0
- package/node_modules/@noodle-borg/compiler/dist/index.d.ts +13 -0
- package/node_modules/@noodle-borg/compiler/dist/index.d.ts.map +1 -0
- package/node_modules/@noodle-borg/compiler/dist/index.js +11 -0
- package/node_modules/@noodle-borg/compiler/dist/index.js.map +1 -0
- package/node_modules/@noodle-borg/compiler/dist/manifest/expression.d.ts +136 -0
- package/node_modules/@noodle-borg/compiler/dist/manifest/expression.d.ts.map +1 -0
- package/node_modules/@noodle-borg/compiler/dist/manifest/expression.js +552 -0
- package/node_modules/@noodle-borg/compiler/dist/manifest/expression.js.map +1 -0
- package/node_modules/@noodle-borg/compiler/dist/manifest/naming.d.ts +14 -0
- package/node_modules/@noodle-borg/compiler/dist/manifest/naming.d.ts.map +1 -0
- package/node_modules/@noodle-borg/compiler/dist/manifest/naming.js +18 -0
- package/node_modules/@noodle-borg/compiler/dist/manifest/naming.js.map +1 -0
- package/node_modules/@noodle-borg/compiler/dist/manifest/schema-refs.d.ts +24 -0
- package/node_modules/@noodle-borg/compiler/dist/manifest/schema-refs.d.ts.map +1 -0
- package/node_modules/@noodle-borg/compiler/dist/manifest/schema-refs.js +149 -0
- package/node_modules/@noodle-borg/compiler/dist/manifest/schema-refs.js.map +1 -0
- package/node_modules/@noodle-borg/compiler/dist/manifest/schema.d.ts +97 -0
- package/node_modules/@noodle-borg/compiler/dist/manifest/schema.d.ts.map +1 -0
- package/node_modules/@noodle-borg/compiler/dist/manifest/schema.js +157 -0
- package/node_modules/@noodle-borg/compiler/dist/manifest/schema.js.map +1 -0
- package/node_modules/@noodle-borg/compiler/dist/schema-export.d.ts +6 -0
- package/node_modules/@noodle-borg/compiler/dist/schema-export.d.ts.map +1 -0
- package/node_modules/@noodle-borg/compiler/dist/schema-export.js +28 -0
- package/node_modules/@noodle-borg/compiler/dist/schema-export.js.map +1 -0
- package/node_modules/@noodle-borg/compiler/dist/suggest.d.ts +41 -0
- package/node_modules/@noodle-borg/compiler/dist/suggest.d.ts.map +1 -0
- package/node_modules/@noodle-borg/compiler/dist/suggest.js +105 -0
- package/node_modules/@noodle-borg/compiler/dist/suggest.js.map +1 -0
- package/node_modules/@noodle-borg/compiler/dist/uri-template.d.ts +33 -0
- package/node_modules/@noodle-borg/compiler/dist/uri-template.d.ts.map +1 -0
- package/node_modules/@noodle-borg/compiler/dist/uri-template.js +83 -0
- package/node_modules/@noodle-borg/compiler/dist/uri-template.js.map +1 -0
- package/node_modules/@noodle-borg/compiler/package.json +32 -0
- package/node_modules/@noodle-borg/compute/dist/code-connector.d.ts +45 -0
- package/node_modules/@noodle-borg/compute/dist/code-connector.d.ts.map +1 -0
- package/node_modules/@noodle-borg/compute/dist/code-connector.js +53 -0
- package/node_modules/@noodle-borg/compute/dist/code-connector.js.map +1 -0
- package/node_modules/@noodle-borg/compute/dist/engine.d.ts +73 -0
- package/node_modules/@noodle-borg/compute/dist/engine.d.ts.map +1 -0
- package/node_modules/@noodle-borg/compute/dist/engine.js +31 -0
- package/node_modules/@noodle-borg/compute/dist/engine.js.map +1 -0
- package/node_modules/@noodle-borg/compute/dist/index.d.ts +4 -0
- package/node_modules/@noodle-borg/compute/dist/index.d.ts.map +1 -0
- package/node_modules/@noodle-borg/compute/dist/index.js +4 -0
- package/node_modules/@noodle-borg/compute/dist/index.js.map +1 -0
- package/node_modules/@noodle-borg/compute/dist/quickjs-engine.d.ts +31 -0
- package/node_modules/@noodle-borg/compute/dist/quickjs-engine.d.ts.map +1 -0
- package/node_modules/@noodle-borg/compute/dist/quickjs-engine.js +271 -0
- package/node_modules/@noodle-borg/compute/dist/quickjs-engine.js.map +1 -0
- package/node_modules/@noodle-borg/compute/package.json +29 -0
- package/node_modules/@noodle-borg/connector-defs/dist/compile.d.ts +46 -0
- package/node_modules/@noodle-borg/connector-defs/dist/compile.d.ts.map +1 -0
- package/node_modules/@noodle-borg/connector-defs/dist/compile.js +289 -0
- package/node_modules/@noodle-borg/connector-defs/dist/compile.js.map +1 -0
- package/node_modules/@noodle-borg/connector-defs/dist/index.d.ts +3 -0
- package/node_modules/@noodle-borg/connector-defs/dist/index.d.ts.map +1 -0
- package/node_modules/@noodle-borg/connector-defs/dist/index.js +3 -0
- package/node_modules/@noodle-borg/connector-defs/dist/index.js.map +1 -0
- package/node_modules/@noodle-borg/connector-defs/dist/schema.d.ts +332 -0
- package/node_modules/@noodle-borg/connector-defs/dist/schema.d.ts.map +1 -0
- package/node_modules/@noodle-borg/connector-defs/dist/schema.js +105 -0
- package/node_modules/@noodle-borg/connector-defs/dist/schema.js.map +1 -0
- package/node_modules/@noodle-borg/connector-defs/package.json +32 -0
- package/node_modules/@noodle-borg/connector-http/dist/http-connector.d.ts +86 -0
- package/node_modules/@noodle-borg/connector-http/dist/http-connector.d.ts.map +1 -0
- package/node_modules/@noodle-borg/connector-http/dist/http-connector.js +138 -0
- package/node_modules/@noodle-borg/connector-http/dist/http-connector.js.map +1 -0
- package/node_modules/@noodle-borg/connector-http/dist/index.d.ts +3 -0
- package/node_modules/@noodle-borg/connector-http/dist/index.d.ts.map +1 -0
- package/node_modules/@noodle-borg/connector-http/dist/index.js +3 -0
- package/node_modules/@noodle-borg/connector-http/dist/index.js.map +1 -0
- package/node_modules/@noodle-borg/connector-http/dist/ssrf.d.ts +45 -0
- package/node_modules/@noodle-borg/connector-http/dist/ssrf.d.ts.map +1 -0
- package/node_modules/@noodle-borg/connector-http/dist/ssrf.js +57 -0
- package/node_modules/@noodle-borg/connector-http/dist/ssrf.js.map +1 -0
- package/node_modules/@noodle-borg/connector-http/package.json +30 -0
- package/node_modules/@noodle-borg/protocol/dist/adapter.d.ts +73 -0
- package/node_modules/@noodle-borg/protocol/dist/adapter.d.ts.map +1 -0
- package/node_modules/@noodle-borg/protocol/dist/adapter.js +2 -0
- package/node_modules/@noodle-borg/protocol/dist/adapter.js.map +1 -0
- package/node_modules/@noodle-borg/protocol/dist/adapters/mcp-2025-11-25.d.ts +19 -0
- package/node_modules/@noodle-borg/protocol/dist/adapters/mcp-2025-11-25.d.ts.map +1 -0
- package/node_modules/@noodle-borg/protocol/dist/adapters/mcp-2025-11-25.js +34 -0
- package/node_modules/@noodle-borg/protocol/dist/adapters/mcp-2025-11-25.js.map +1 -0
- package/node_modules/@noodle-borg/protocol/dist/index.d.ts +5 -0
- package/node_modules/@noodle-borg/protocol/dist/index.d.ts.map +1 -0
- package/node_modules/@noodle-borg/protocol/dist/index.js +5 -0
- package/node_modules/@noodle-borg/protocol/dist/index.js.map +1 -0
- package/node_modules/@noodle-borg/protocol/dist/jsonrpc.d.ts +19 -0
- package/node_modules/@noodle-borg/protocol/dist/jsonrpc.d.ts.map +1 -0
- package/node_modules/@noodle-borg/protocol/dist/jsonrpc.js +14 -0
- package/node_modules/@noodle-borg/protocol/dist/jsonrpc.js.map +1 -0
- package/node_modules/@noodle-borg/protocol/dist/mapping.d.ts +133 -0
- package/node_modules/@noodle-borg/protocol/dist/mapping.d.ts.map +1 -0
- package/node_modules/@noodle-borg/protocol/dist/mapping.js +181 -0
- package/node_modules/@noodle-borg/protocol/dist/mapping.js.map +1 -0
- package/node_modules/@noodle-borg/protocol/dist/negotiate.d.ts +13 -0
- package/node_modules/@noodle-borg/protocol/dist/negotiate.d.ts.map +1 -0
- package/node_modules/@noodle-borg/protocol/dist/negotiate.js +18 -0
- package/node_modules/@noodle-borg/protocol/dist/negotiate.js.map +1 -0
- package/node_modules/@noodle-borg/protocol/dist/registry.d.ts +17 -0
- package/node_modules/@noodle-borg/protocol/dist/registry.d.ts.map +1 -0
- package/node_modules/@noodle-borg/protocol/dist/registry.js +33 -0
- package/node_modules/@noodle-borg/protocol/dist/registry.js.map +1 -0
- package/node_modules/@noodle-borg/protocol/dist/sdk-server.d.ts +22 -0
- package/node_modules/@noodle-borg/protocol/dist/sdk-server.d.ts.map +1 -0
- package/node_modules/@noodle-borg/protocol/dist/sdk-server.js +91 -0
- package/node_modules/@noodle-borg/protocol/dist/sdk-server.js.map +1 -0
- package/node_modules/@noodle-borg/protocol/dist/server.d.ts +38 -0
- package/node_modules/@noodle-borg/protocol/dist/server.d.ts.map +1 -0
- package/node_modules/@noodle-borg/protocol/dist/server.js +89 -0
- package/node_modules/@noodle-borg/protocol/dist/server.js.map +1 -0
- package/node_modules/@noodle-borg/protocol/dist/stateless.d.ts +14 -0
- package/node_modules/@noodle-borg/protocol/dist/stateless.d.ts.map +1 -0
- package/node_modules/@noodle-borg/protocol/dist/stateless.js +28 -0
- package/node_modules/@noodle-borg/protocol/dist/stateless.js.map +1 -0
- package/node_modules/@noodle-borg/protocol/dist/widget/bootstrap.d.ts +24 -0
- package/node_modules/@noodle-borg/protocol/dist/widget/bootstrap.d.ts.map +1 -0
- package/node_modules/@noodle-borg/protocol/dist/widget/bootstrap.js +165 -0
- package/node_modules/@noodle-borg/protocol/dist/widget/bootstrap.js.map +1 -0
- package/node_modules/@noodle-borg/protocol/dist/widget/ext-apps-bundle.d.ts +4 -0
- package/node_modules/@noodle-borg/protocol/dist/widget/ext-apps-bundle.d.ts.map +1 -0
- package/node_modules/@noodle-borg/protocol/dist/widget/ext-apps-bundle.js +10 -0
- package/node_modules/@noodle-borg/protocol/dist/widget/ext-apps-bundle.js.map +1 -0
- package/node_modules/@noodle-borg/protocol/dist/widget/inject.d.ts +8 -0
- package/node_modules/@noodle-borg/protocol/dist/widget/inject.d.ts.map +1 -0
- package/node_modules/@noodle-borg/protocol/dist/widget/inject.js +36 -0
- package/node_modules/@noodle-borg/protocol/dist/widget/inject.js.map +1 -0
- package/node_modules/@noodle-borg/protocol/package.json +29 -0
- package/node_modules/@noodle-borg/runtime/dist/broker/map.d.ts +29 -0
- package/node_modules/@noodle-borg/runtime/dist/broker/map.d.ts.map +1 -0
- package/node_modules/@noodle-borg/runtime/dist/broker/map.js +38 -0
- package/node_modules/@noodle-borg/runtime/dist/broker/map.js.map +1 -0
- package/node_modules/@noodle-borg/runtime/dist/broker/secret-box.d.ts +103 -0
- package/node_modules/@noodle-borg/runtime/dist/broker/secret-box.d.ts.map +1 -0
- package/node_modules/@noodle-borg/runtime/dist/broker/secret-box.js +118 -0
- package/node_modules/@noodle-borg/runtime/dist/broker/secret-box.js.map +1 -0
- package/node_modules/@noodle-borg/runtime/dist/broker/static.d.ts +12 -0
- package/node_modules/@noodle-borg/runtime/dist/broker/static.d.ts.map +1 -0
- package/node_modules/@noodle-borg/runtime/dist/broker/static.js +15 -0
- package/node_modules/@noodle-borg/runtime/dist/broker/static.js.map +1 -0
- package/node_modules/@noodle-borg/runtime/dist/broker/types.d.ts +28 -0
- package/node_modules/@noodle-borg/runtime/dist/broker/types.d.ts.map +1 -0
- package/node_modules/@noodle-borg/runtime/dist/broker/types.js +2 -0
- package/node_modules/@noodle-borg/runtime/dist/broker/types.js.map +1 -0
- package/node_modules/@noodle-borg/runtime/dist/connector/in-memory.d.ts +29 -0
- package/node_modules/@noodle-borg/runtime/dist/connector/in-memory.d.ts.map +1 -0
- package/node_modules/@noodle-borg/runtime/dist/connector/in-memory.js +37 -0
- package/node_modules/@noodle-borg/runtime/dist/connector/in-memory.js.map +1 -0
- package/node_modules/@noodle-borg/runtime/dist/connector/types.d.ts +41 -0
- package/node_modules/@noodle-borg/runtime/dist/connector/types.d.ts.map +1 -0
- package/node_modules/@noodle-borg/runtime/dist/connector/types.js +2 -0
- package/node_modules/@noodle-borg/runtime/dist/connector/types.js.map +1 -0
- package/node_modules/@noodle-borg/runtime/dist/eval/evaluate.d.ts +39 -0
- package/node_modules/@noodle-borg/runtime/dist/eval/evaluate.d.ts.map +1 -0
- package/node_modules/@noodle-borg/runtime/dist/eval/evaluate.js +117 -0
- package/node_modules/@noodle-borg/runtime/dist/eval/evaluate.js.map +1 -0
- package/node_modules/@noodle-borg/runtime/dist/execute.d.ts +47 -0
- package/node_modules/@noodle-borg/runtime/dist/execute.d.ts.map +1 -0
- package/node_modules/@noodle-borg/runtime/dist/execute.js +297 -0
- package/node_modules/@noodle-borg/runtime/dist/execute.js.map +1 -0
- package/node_modules/@noodle-borg/runtime/dist/index.d.ts +12 -0
- package/node_modules/@noodle-borg/runtime/dist/index.d.ts.map +1 -0
- package/node_modules/@noodle-borg/runtime/dist/index.js +8 -0
- package/node_modules/@noodle-borg/runtime/dist/index.js.map +1 -0
- package/node_modules/@noodle-borg/runtime/dist/policy/allow-all.d.ts +10 -0
- package/node_modules/@noodle-borg/runtime/dist/policy/allow-all.d.ts.map +1 -0
- package/node_modules/@noodle-borg/runtime/dist/policy/allow-all.js +13 -0
- package/node_modules/@noodle-borg/runtime/dist/policy/allow-all.js.map +1 -0
- package/node_modules/@noodle-borg/runtime/dist/policy/types.d.ts +25 -0
- package/node_modules/@noodle-borg/runtime/dist/policy/types.d.ts.map +1 -0
- package/node_modules/@noodle-borg/runtime/dist/policy/types.js +2 -0
- package/node_modules/@noodle-borg/runtime/dist/policy/types.js.map +1 -0
- package/node_modules/@noodle-borg/runtime/dist/result.d.ts +19 -0
- package/node_modules/@noodle-borg/runtime/dist/result.d.ts.map +1 -0
- package/node_modules/@noodle-borg/runtime/dist/result.js +2 -0
- package/node_modules/@noodle-borg/runtime/dist/result.js.map +1 -0
- package/node_modules/@noodle-borg/runtime/package.json +27 -0
- package/node_modules/@noodle-borg/service/dist/auth/deploy-gate.d.ts +48 -0
- package/node_modules/@noodle-borg/service/dist/auth/deploy-gate.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/auth/deploy-gate.js +79 -0
- package/node_modules/@noodle-borg/service/dist/auth/deploy-gate.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/index.d.ts +7 -0
- package/node_modules/@noodle-borg/service/dist/index.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/index.js +7 -0
- package/node_modules/@noodle-borg/service/dist/index.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/main.d.ts +3 -0
- package/node_modules/@noodle-borg/service/dist/main.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/main.js +171 -0
- package/node_modules/@noodle-borg/service/dist/main.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/oauth/app.d.ts +14 -0
- package/node_modules/@noodle-borg/service/dist/oauth/app.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/oauth/app.js +48 -0
- package/node_modules/@noodle-borg/service/dist/oauth/app.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/oauth/consent.d.ts +18 -0
- package/node_modules/@noodle-borg/service/dist/oauth/consent.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/oauth/consent.js +55 -0
- package/node_modules/@noodle-borg/service/dist/oauth/consent.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/oauth/google.d.ts +31 -0
- package/node_modules/@noodle-borg/service/dist/oauth/google.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/oauth/google.js +39 -0
- package/node_modules/@noodle-borg/service/dist/oauth/google.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/oauth/paths.d.ts +3 -0
- package/node_modules/@noodle-borg/service/dist/oauth/paths.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/oauth/paths.js +19 -0
- package/node_modules/@noodle-borg/service/dist/oauth/paths.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/oauth/provider.d.ts +61 -0
- package/node_modules/@noodle-borg/service/dist/oauth/provider.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/oauth/provider.js +313 -0
- package/node_modules/@noodle-borg/service/dist/oauth/provider.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/oauth/store-postgres.d.ts +29 -0
- package/node_modules/@noodle-borg/service/dist/oauth/store-postgres.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/oauth/store-postgres.js +176 -0
- package/node_modules/@noodle-borg/service/dist/oauth/store-postgres.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/oauth/store.d.ts +85 -0
- package/node_modules/@noodle-borg/service/dist/oauth/store.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/oauth/store.js +57 -0
- package/node_modules/@noodle-borg/service/dist/oauth/store.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/oauth/tokens.d.ts +8 -0
- package/node_modules/@noodle-borg/service/dist/oauth/tokens.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/oauth/tokens.js +13 -0
- package/node_modules/@noodle-borg/service/dist/oauth/tokens.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/secret/kms-master-key.d.ts +36 -0
- package/node_modules/@noodle-borg/service/dist/secret/kms-master-key.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/secret/kms-master-key.js +51 -0
- package/node_modules/@noodle-borg/service/dist/secret/kms-master-key.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/service.d.ts +221 -0
- package/node_modules/@noodle-borg/service/dist/service.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/service.js +1163 -0
- package/node_modules/@noodle-borg/service/dist/service.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/store/cloudsql-pool.d.ts +34 -0
- package/node_modules/@noodle-borg/service/dist/store/cloudsql-pool.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/store/cloudsql-pool.js +38 -0
- package/node_modules/@noodle-borg/service/dist/store/cloudsql-pool.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/store/postgres.d.ts +56 -0
- package/node_modules/@noodle-borg/service/dist/store/postgres.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/store/postgres.js +372 -0
- package/node_modules/@noodle-borg/service/dist/store/postgres.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/store.d.ts +192 -0
- package/node_modules/@noodle-borg/service/dist/store.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/store.js +230 -0
- package/node_modules/@noodle-borg/service/dist/store.js.map +1 -0
- package/node_modules/@noodle-borg/service/package.json +44 -0
- package/node_modules/@noodle-borg/transport-http/dist/caller-auth.d.ts +15 -0
- package/node_modules/@noodle-borg/transport-http/dist/caller-auth.d.ts.map +1 -0
- package/node_modules/@noodle-borg/transport-http/dist/caller-auth.js +38 -0
- package/node_modules/@noodle-borg/transport-http/dist/caller-auth.js.map +1 -0
- package/node_modules/@noodle-borg/transport-http/dist/examples/serve-demo.d.ts +2 -0
- package/node_modules/@noodle-borg/transport-http/dist/examples/serve-demo.d.ts.map +1 -0
- package/node_modules/@noodle-borg/transport-http/dist/examples/serve-demo.js +129 -0
- package/node_modules/@noodle-borg/transport-http/dist/examples/serve-demo.js.map +1 -0
- package/node_modules/@noodle-borg/transport-http/dist/front-door.d.ts +46 -0
- package/node_modules/@noodle-borg/transport-http/dist/front-door.d.ts.map +1 -0
- package/node_modules/@noodle-borg/transport-http/dist/front-door.js +75 -0
- package/node_modules/@noodle-borg/transport-http/dist/front-door.js.map +1 -0
- package/node_modules/@noodle-borg/transport-http/dist/handler.d.ts +142 -0
- package/node_modules/@noodle-borg/transport-http/dist/handler.d.ts.map +1 -0
- package/node_modules/@noodle-borg/transport-http/dist/handler.js +387 -0
- package/node_modules/@noodle-borg/transport-http/dist/handler.js.map +1 -0
- package/node_modules/@noodle-borg/transport-http/dist/index.d.ts +6 -0
- package/node_modules/@noodle-borg/transport-http/dist/index.d.ts.map +1 -0
- package/node_modules/@noodle-borg/transport-http/dist/index.js +6 -0
- package/node_modules/@noodle-borg/transport-http/dist/index.js.map +1 -0
- package/node_modules/@noodle-borg/transport-http/dist/logging.d.ts +41 -0
- package/node_modules/@noodle-borg/transport-http/dist/logging.d.ts.map +1 -0
- package/node_modules/@noodle-borg/transport-http/dist/logging.js +71 -0
- package/node_modules/@noodle-borg/transport-http/dist/logging.js.map +1 -0
- package/node_modules/@noodle-borg/transport-http/dist/serve.d.ts +22 -0
- package/node_modules/@noodle-borg/transport-http/dist/serve.d.ts.map +1 -0
- package/node_modules/@noodle-borg/transport-http/dist/serve.js +25 -0
- package/node_modules/@noodle-borg/transport-http/dist/serve.js.map +1 -0
- package/node_modules/@noodle-borg/transport-http/package.json +30 -0
- package/package.json +78 -0
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { Mcp20251125Adapter } from './adapters/mcp-2025-11-25.js';
|
|
2
|
+
import { err, isRequest, JSON_RPC, ok, } from './jsonrpc.js';
|
|
3
|
+
import { negotiate } from './negotiate.js';
|
|
4
|
+
import { ProtocolRegistry } from './registry.js';
|
|
5
|
+
/** Per-connection state: the protocol version negotiated at `initialize`. */
|
|
6
|
+
export class McpSession {
|
|
7
|
+
adapter = undefined;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* A transport-agnostic MCP server for one resolved artifact. `handleMessage` maps a parsed JSON-RPC
|
|
11
|
+
* message to a response (or `null` for notifications), dispatching to the session's negotiated
|
|
12
|
+
* protocol adapter. A stdio/HTTP transport that frames bytes and carries the `MCP-Protocol-Version`
|
|
13
|
+
* header is a separate, later layer.
|
|
14
|
+
*/
|
|
15
|
+
export class McpServer {
|
|
16
|
+
#artifact;
|
|
17
|
+
#deps;
|
|
18
|
+
#registry;
|
|
19
|
+
constructor(options) {
|
|
20
|
+
this.#artifact = options.artifact;
|
|
21
|
+
this.#deps = options.deps;
|
|
22
|
+
this.#registry = options.registry ?? new ProtocolRegistry([new Mcp20251125Adapter()]);
|
|
23
|
+
}
|
|
24
|
+
/** Open a new session (one per client connection). */
|
|
25
|
+
createSession() {
|
|
26
|
+
return new McpSession();
|
|
27
|
+
}
|
|
28
|
+
async handleMessage(session, message) {
|
|
29
|
+
// Notifications (no id) get no response. `notifications/initialized` and any other are no-ops.
|
|
30
|
+
if (!isRequest(message))
|
|
31
|
+
return null;
|
|
32
|
+
const { id, method } = message;
|
|
33
|
+
if (method === 'initialize') {
|
|
34
|
+
const params = (message.params ?? {});
|
|
35
|
+
const adapter = negotiate(this.#registry, params.protocolVersion);
|
|
36
|
+
session.adapter = adapter;
|
|
37
|
+
return ok(id, adapter.initializeResult(this.#artifact, params));
|
|
38
|
+
}
|
|
39
|
+
if (method === 'ping')
|
|
40
|
+
return ok(id, {});
|
|
41
|
+
if (method === 'tools/list' || method === 'tools/call') {
|
|
42
|
+
if (!session.adapter) {
|
|
43
|
+
return err(id, JSON_RPC.INVALID_REQUEST, `received "${method}" before initialization`);
|
|
44
|
+
}
|
|
45
|
+
if (method === 'tools/list') {
|
|
46
|
+
return ok(id, session.adapter.listTools(this.#artifact));
|
|
47
|
+
}
|
|
48
|
+
const paramsRecord = message.params;
|
|
49
|
+
if (!isRecord(paramsRecord)) {
|
|
50
|
+
return err(id, JSON_RPC.INVALID_PARAMS, '"tools/call" params must be an object');
|
|
51
|
+
}
|
|
52
|
+
if (typeof paramsRecord.name !== 'string') {
|
|
53
|
+
return err(id, JSON_RPC.INVALID_PARAMS, '"tools/call" requires a string "name"');
|
|
54
|
+
}
|
|
55
|
+
if (paramsRecord.arguments !== undefined && !isRecord(paramsRecord.arguments)) {
|
|
56
|
+
return err(id, JSON_RPC.INVALID_PARAMS, '"tools/call" arguments must be an object');
|
|
57
|
+
}
|
|
58
|
+
const params = paramsRecord.arguments === undefined
|
|
59
|
+
? { name: paramsRecord.name }
|
|
60
|
+
: { name: paramsRecord.name, arguments: paramsRecord.arguments };
|
|
61
|
+
const outcome = await session.adapter.callTool(this.#artifact, params, this.#deps);
|
|
62
|
+
return 'result' in outcome
|
|
63
|
+
? ok(id, outcome.result)
|
|
64
|
+
: { jsonrpc: '2.0', id, error: outcome.error };
|
|
65
|
+
}
|
|
66
|
+
return err(id, JSON_RPC.METHOD_NOT_FOUND, `unknown method "${method}"`);
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Handle a single message without a caller-held session — for stateless transports (e.g. remote
|
|
70
|
+
* HTTP). `initialize` negotiates from the message body; every other request negotiates from
|
|
71
|
+
* `requestedVersion` (the transport's `MCP-Protocol-Version` header), defaulting to the stable
|
|
72
|
+
* latest when absent. No session state is retained between calls.
|
|
73
|
+
*/
|
|
74
|
+
async handleStateless(message, requestedVersion) {
|
|
75
|
+
const session = new McpSession();
|
|
76
|
+
if (isRequest(message) && message.method !== 'initialize') {
|
|
77
|
+
session.adapter = negotiate(this.#registry, requestedVersion);
|
|
78
|
+
}
|
|
79
|
+
return this.handleMessage(session, message);
|
|
80
|
+
}
|
|
81
|
+
/** Whether the server supports a given protocol version (an exact registered adapter). */
|
|
82
|
+
supports(version) {
|
|
83
|
+
return this.#registry.get(version) !== undefined;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
function isRecord(value) {
|
|
87
|
+
return value !== null && typeof value === 'object' && !Array.isArray(value);
|
|
88
|
+
}
|
|
89
|
+
//# sourceMappingURL=server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { IncomingMessage, ServerResponse } from 'node:http';
|
|
2
|
+
import { type ServedArtifact } from './sdk-server.js';
|
|
3
|
+
/**
|
|
4
|
+
* Serve a single already-parsed JSON-RPC request for one {@link ServedArtifact} over the MCP
|
|
5
|
+
* **Streamable HTTP** transport, statelessly. A fresh SDK server + transport are built per request
|
|
6
|
+
* (`sessionIdGenerator: undefined`), so no session state is retained between calls; `enableJsonResponse`
|
|
7
|
+
* returns one `application/json` JSON-RPC response rather than an SSE stream. The transport owns version
|
|
8
|
+
* negotiation and framing; the caller's HTTP front-door owns origin/method/size guards.
|
|
9
|
+
*
|
|
10
|
+
* `parsedBody` is the JSON already read by the front-door (so its body-size guard still applies). The
|
|
11
|
+
* transport writes the full HTTP response (status + headers + body), including `202` for a notification.
|
|
12
|
+
*/
|
|
13
|
+
export declare function handleStatelessHttp(target: ServedArtifact, req: IncomingMessage, res: ServerResponse, parsedBody: unknown): Promise<void>;
|
|
14
|
+
//# sourceMappingURL=stateless.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stateless.d.ts","sourceRoot":"","sources":["../src/stateless.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAGjE,OAAO,EAAkB,KAAK,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAEtE;;;;;;;;;GASG;AACH,wBAAsB,mBAAmB,CACvC,MAAM,EAAE,cAAc,EACtB,GAAG,EAAE,eAAe,EACpB,GAAG,EAAE,cAAc,EACnB,UAAU,EAAE,OAAO,GAClB,OAAO,CAAC,IAAI,CAAC,CAcf"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { StreamableHTTPServerTransport } from '@modelcontextprotocol/sdk/server/streamableHttp.js';
|
|
2
|
+
import { buildMcpServer } from './sdk-server.js';
|
|
3
|
+
/**
|
|
4
|
+
* Serve a single already-parsed JSON-RPC request for one {@link ServedArtifact} over the MCP
|
|
5
|
+
* **Streamable HTTP** transport, statelessly. A fresh SDK server + transport are built per request
|
|
6
|
+
* (`sessionIdGenerator: undefined`), so no session state is retained between calls; `enableJsonResponse`
|
|
7
|
+
* returns one `application/json` JSON-RPC response rather than an SSE stream. The transport owns version
|
|
8
|
+
* negotiation and framing; the caller's HTTP front-door owns origin/method/size guards.
|
|
9
|
+
*
|
|
10
|
+
* `parsedBody` is the JSON already read by the front-door (so its body-size guard still applies). The
|
|
11
|
+
* transport writes the full HTTP response (status + headers + body), including `202` for a notification.
|
|
12
|
+
*/
|
|
13
|
+
export async function handleStatelessHttp(target, req, res, parsedBody) {
|
|
14
|
+
const server = buildMcpServer(target);
|
|
15
|
+
// Omitting `sessionIdGenerator` selects stateless mode; `enableJsonResponse` returns one JSON-RPC
|
|
16
|
+
// object rather than an SSE stream. (We can't pass `sessionIdGenerator: undefined` explicitly under
|
|
17
|
+
// `exactOptionalPropertyTypes`.)
|
|
18
|
+
const transport = new StreamableHTTPServerTransport({ enableJsonResponse: true });
|
|
19
|
+
res.on('close', () => {
|
|
20
|
+
void transport.close();
|
|
21
|
+
void server.close();
|
|
22
|
+
});
|
|
23
|
+
// The SDK transport's optional `onclose`/`onerror`/`onmessage` are `T | undefined`, which trips
|
|
24
|
+
// `exactOptionalPropertyTypes` against the `Transport` interface; it is a valid Transport at runtime.
|
|
25
|
+
await server.connect(transport);
|
|
26
|
+
await transport.handleRequest(req, res, parsedBody);
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=stateless.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stateless.js","sourceRoot":"","sources":["../src/stateless.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,6BAA6B,EAAE,MAAM,oDAAoD,CAAC;AAEnG,OAAO,EAAE,cAAc,EAAuB,MAAM,iBAAiB,CAAC;AAEtE;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,MAAsB,EACtB,GAAoB,EACpB,GAAmB,EACnB,UAAmB;IAEnB,MAAM,MAAM,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;IACtC,kGAAkG;IAClG,oGAAoG;IACpG,iCAAiC;IACjC,MAAM,SAAS,GAAG,IAAI,6BAA6B,CAAC,EAAE,kBAAkB,EAAE,IAAI,EAAE,CAAC,CAAC;IAClF,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;QACnB,KAAK,SAAS,CAAC,KAAK,EAAE,CAAC;QACvB,KAAK,MAAM,CAAC,KAAK,EAAE,CAAC;IACtB,CAAC,CAAC,CAAC;IACH,gGAAgG;IAChG,sGAAsG;IACtG,MAAM,MAAM,CAAC,OAAO,CAAC,SAAsB,CAAC,CAAC;IAC7C,MAAM,SAAS,CAAC,aAAa,CAAC,GAAG,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC;AACtD,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The widget runtime bootstrap — the single source of truth for the script that runs INSIDE a widget's
|
|
3
|
+
* sandboxed iframe, after the vendored `@modelcontextprotocol/ext-apps` bundle. It is exported as a string
|
|
4
|
+
* (`WIDGET_BOOTSTRAP_SOURCE`) so that:
|
|
5
|
+
* 1. `./inject.ts` concatenates it after the bundle into one inline `<script type="module">` at serve time
|
|
6
|
+
* (shared runtime infrastructure — never stored per artifact, never counted against the author cap), and
|
|
7
|
+
* 2. `../../test/widget-runtime.test.ts` `eval`s the EXACT shipped source against a happy-dom document + a
|
|
8
|
+
* mock host, so the runtime is regression-tested with zero drift and without a build step.
|
|
9
|
+
*
|
|
10
|
+
* It opens the host bridge (so the host reveals + sizes the frame), applies the host theme, surfaces the
|
|
11
|
+
* tool-call result AND input into the author's declarative `[data-bind*]` elements, and dispatches CSP-safe
|
|
12
|
+
* `[data-action]` buttons to the host bridge. The shapes here are pinned to ext-apps v1.7.4 / SEP-1865:
|
|
13
|
+
* `ontoolinput.params.arguments`, `ontoolresult.params` = `CallToolResult`, `callServerTool({name,arguments})`
|
|
14
|
+
* → `CallToolResult`, `openLink({url})`, `requestDisplayMode({mode})`,
|
|
15
|
+
* `downloadFile({contents:[EmbeddedResource]})`. See docs/spec/apps-and-authoring.md and
|
|
16
|
+
* docs/decisions/0022-adopt-mcp-ui-for-apps-widgets.md (W2.5).
|
|
17
|
+
*
|
|
18
|
+
* CONSTRAINTS (enforced by review + tests): contains NO `</script>` (it is concatenated raw, not escaped) and
|
|
19
|
+
* NO `${...}` (it lives inside a TypeScript template literal — `${` would be interpolated). Author-facing
|
|
20
|
+
* placeholders use `{{dotted.path}}`, resolved client-side against the bound tool result, so the server-side
|
|
21
|
+
* widget body stays a constant literal and our `${...}` expression language never touches widget HTML.
|
|
22
|
+
*/
|
|
23
|
+
export declare const WIDGET_BOOTSTRAP_SOURCE: string;
|
|
24
|
+
//# sourceMappingURL=bootstrap.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bootstrap.d.ts","sourceRoot":"","sources":["../../src/widget/bootstrap.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,eAAO,MAAM,uBAAuB,EAAE,MA6IrC,CAAC"}
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The widget runtime bootstrap — the single source of truth for the script that runs INSIDE a widget's
|
|
3
|
+
* sandboxed iframe, after the vendored `@modelcontextprotocol/ext-apps` bundle. It is exported as a string
|
|
4
|
+
* (`WIDGET_BOOTSTRAP_SOURCE`) so that:
|
|
5
|
+
* 1. `./inject.ts` concatenates it after the bundle into one inline `<script type="module">` at serve time
|
|
6
|
+
* (shared runtime infrastructure — never stored per artifact, never counted against the author cap), and
|
|
7
|
+
* 2. `../../test/widget-runtime.test.ts` `eval`s the EXACT shipped source against a happy-dom document + a
|
|
8
|
+
* mock host, so the runtime is regression-tested with zero drift and without a build step.
|
|
9
|
+
*
|
|
10
|
+
* It opens the host bridge (so the host reveals + sizes the frame), applies the host theme, surfaces the
|
|
11
|
+
* tool-call result AND input into the author's declarative `[data-bind*]` elements, and dispatches CSP-safe
|
|
12
|
+
* `[data-action]` buttons to the host bridge. The shapes here are pinned to ext-apps v1.7.4 / SEP-1865:
|
|
13
|
+
* `ontoolinput.params.arguments`, `ontoolresult.params` = `CallToolResult`, `callServerTool({name,arguments})`
|
|
14
|
+
* → `CallToolResult`, `openLink({url})`, `requestDisplayMode({mode})`,
|
|
15
|
+
* `downloadFile({contents:[EmbeddedResource]})`. See docs/spec/apps-and-authoring.md and
|
|
16
|
+
* docs/decisions/0022-adopt-mcp-ui-for-apps-widgets.md (W2.5).
|
|
17
|
+
*
|
|
18
|
+
* CONSTRAINTS (enforced by review + tests): contains NO `</script>` (it is concatenated raw, not escaped) and
|
|
19
|
+
* NO `${...}` (it lives inside a TypeScript template literal — `${` would be interpolated). Author-facing
|
|
20
|
+
* placeholders use `{{dotted.path}}`, resolved client-side against the bound tool result, so the server-side
|
|
21
|
+
* widget body stays a constant literal and our `${...}` expression language never touches widget HTML.
|
|
22
|
+
*/
|
|
23
|
+
export const WIDGET_BOOTSTRAP_SOURCE = `
|
|
24
|
+
(async () => {
|
|
25
|
+
const E = globalThis.ExtApps;
|
|
26
|
+
if (!E || !E.App) return;
|
|
27
|
+
const app = new E.App({ name: 'noodle-widget', version: '1' }, {}, { autoResize: true });
|
|
28
|
+
|
|
29
|
+
const get = (o, p) => String(p).split('.').reduce((x, k) => (x == null ? undefined : x[k]), o);
|
|
30
|
+
|
|
31
|
+
// Resolve {{dotted.path}} placeholders in a string against the current bound data (no regex: avoids
|
|
32
|
+
// template-literal escaping, and is robust to stray braces).
|
|
33
|
+
function tmpl(s, data) {
|
|
34
|
+
s = String(s);
|
|
35
|
+
let out = '';
|
|
36
|
+
let i = 0;
|
|
37
|
+
while (i < s.length) {
|
|
38
|
+
const open = s.indexOf('{{', i);
|
|
39
|
+
if (open === -1) { out += s.slice(i); break; }
|
|
40
|
+
out += s.slice(i, open);
|
|
41
|
+
const close = s.indexOf('}}', open + 2);
|
|
42
|
+
if (close === -1) { out += s.slice(open); break; }
|
|
43
|
+
const v = get(data, s.slice(open + 2, close).trim());
|
|
44
|
+
out += (v == null ? '' : String(v));
|
|
45
|
+
i = close + 2;
|
|
46
|
+
}
|
|
47
|
+
return out;
|
|
48
|
+
}
|
|
49
|
+
// Resolve {{...}} throughout a parsed-JSON args value (string leaves only).
|
|
50
|
+
function resolveArgs(v, data) {
|
|
51
|
+
if (typeof v === 'string') return tmpl(v, data);
|
|
52
|
+
if (Array.isArray(v)) return v.map((x) => resolveArgs(x, data));
|
|
53
|
+
if (v && typeof v === 'object') {
|
|
54
|
+
const out = {};
|
|
55
|
+
for (const k of Object.keys(v)) out[k] = resolveArgs(v[k], data);
|
|
56
|
+
return out;
|
|
57
|
+
}
|
|
58
|
+
return v;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
// Tool RESULT (structuredContent, else the first text block as JSON) → [data-bind] / [data-bind-if].
|
|
62
|
+
function bind(data) {
|
|
63
|
+
if (data == null) return;
|
|
64
|
+
globalThis.__noodleData = data;
|
|
65
|
+
for (const el of document.querySelectorAll('[data-bind]')) {
|
|
66
|
+
const v = get(data, el.getAttribute('data-bind'));
|
|
67
|
+
if (v !== undefined && v !== null) el.textContent = String(v);
|
|
68
|
+
}
|
|
69
|
+
for (const el of document.querySelectorAll('[data-bind-if]')) {
|
|
70
|
+
const v = get(data, el.getAttribute('data-bind-if'));
|
|
71
|
+
el.hidden = !(v !== undefined && v !== null && v !== false && v !== '');
|
|
72
|
+
}
|
|
73
|
+
try { globalThis.dispatchEvent(new CustomEvent('noodle:data', { detail: data })); } catch (e) {}
|
|
74
|
+
}
|
|
75
|
+
// Tool-call ARGUMENTS (what the model passed) → [data-bind-input] (mirrors bind()).
|
|
76
|
+
function bindInput(args) {
|
|
77
|
+
if (args == null) return;
|
|
78
|
+
globalThis.__noodleInput = args;
|
|
79
|
+
for (const el of document.querySelectorAll('[data-bind-input]')) {
|
|
80
|
+
const v = get(args, el.getAttribute('data-bind-input'));
|
|
81
|
+
if (v !== undefined && v !== null) el.textContent = String(v);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
function fromResult(r) {
|
|
85
|
+
if (!r) return null;
|
|
86
|
+
if (r.structuredContent != null) return r.structuredContent;
|
|
87
|
+
const t = r.content && r.content[0] && r.content[0].text;
|
|
88
|
+
if (typeof t === 'string') { try { return JSON.parse(t); } catch (e) { return null; } }
|
|
89
|
+
return null;
|
|
90
|
+
}
|
|
91
|
+
function theme(ctx) {
|
|
92
|
+
try {
|
|
93
|
+
// host-context-changed may be a PARTIAL update (theme/styles independently optional) — only touch the
|
|
94
|
+
// theme class when 'theme' is actually present, so a styles-only update never flips a dark widget back
|
|
95
|
+
// to light.
|
|
96
|
+
if (ctx && ctx.theme !== undefined) {
|
|
97
|
+
document.documentElement.classList.toggle('dark', ctx.theme === 'dark');
|
|
98
|
+
}
|
|
99
|
+
const styles = ctx && ctx.styles;
|
|
100
|
+
if (styles && styles.variables && E.applyHostStyleVariables) E.applyHostStyleVariables(styles.variables);
|
|
101
|
+
if (styles && styles.css && styles.css.fonts && E.applyHostFonts) E.applyHostFonts(styles.css.fonts);
|
|
102
|
+
} catch (e) {}
|
|
103
|
+
}
|
|
104
|
+
function clearBusy() {
|
|
105
|
+
for (const el of document.querySelectorAll('[aria-busy="true"]')) {
|
|
106
|
+
el.disabled = false; el.removeAttribute('aria-busy');
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
// CSP-safe declarative actions (no inline handlers). A [data-action] element drives the host bridge:
|
|
111
|
+
// send|context → conversation; call → server tools/call (re-binds the result in place);
|
|
112
|
+
// open → external link; display → display mode; download → host-mediated file export.
|
|
113
|
+
function actOnce(el) {
|
|
114
|
+
const action = el.getAttribute('data-action');
|
|
115
|
+
const text = el.getAttribute('data-action-text') || el.textContent || '';
|
|
116
|
+
const data = globalThis.__noodleData;
|
|
117
|
+
try {
|
|
118
|
+
if (action === 'send') {
|
|
119
|
+
app.sendMessage({ role: 'user', content: [{ type: 'text', text }] });
|
|
120
|
+
} else if (action === 'context') {
|
|
121
|
+
app.updateModelContext({ content: [{ type: 'text', text }] });
|
|
122
|
+
} else if (action === 'call') {
|
|
123
|
+
const name = el.getAttribute('data-action-tool');
|
|
124
|
+
if (!name) return;
|
|
125
|
+
let args = {};
|
|
126
|
+
const raw = el.getAttribute('data-action-args');
|
|
127
|
+
if (raw) { try { args = resolveArgs(JSON.parse(raw), data); } catch (e) { args = {}; } }
|
|
128
|
+
el.disabled = true; el.setAttribute('aria-busy', 'true');
|
|
129
|
+
Promise.resolve(app.callServerTool({ name, arguments: args }))
|
|
130
|
+
.then((r) => bind(fromResult(r)))
|
|
131
|
+
.catch(() => {})
|
|
132
|
+
.then(() => { el.disabled = false; el.removeAttribute('aria-busy'); });
|
|
133
|
+
} else if (action === 'open') {
|
|
134
|
+
const url = el.getAttribute('data-action-href');
|
|
135
|
+
if (url) app.openLink({ url });
|
|
136
|
+
} else if (action === 'display') {
|
|
137
|
+
app.requestDisplayMode({ mode: el.getAttribute('data-action-mode') || 'fullscreen' });
|
|
138
|
+
} else if (action === 'download') {
|
|
139
|
+
const file = el.getAttribute('data-action-file') || 'download.txt';
|
|
140
|
+
const mimeType = el.getAttribute('data-action-mime') || 'text/plain';
|
|
141
|
+
const content = tmpl(el.getAttribute('data-action-content') || '', data);
|
|
142
|
+
app.downloadFile({
|
|
143
|
+
contents: [{ type: 'resource', resource: { uri: 'ui://download/' + file, mimeType, text: content } }],
|
|
144
|
+
});
|
|
145
|
+
}
|
|
146
|
+
} catch (e) {}
|
|
147
|
+
}
|
|
148
|
+
function wireActions() {
|
|
149
|
+
for (const el of document.querySelectorAll('[data-action]')) {
|
|
150
|
+
el.addEventListener('click', () => actOnce(el));
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
// Register handlers BEFORE connect() so no one-shot host notification is missed.
|
|
155
|
+
app.ontoolresult = (p) => bind(fromResult(p));
|
|
156
|
+
app.ontoolinput = (p) => bindInput(p && p.arguments);
|
|
157
|
+
app.ontoolcancelled = () => clearBusy();
|
|
158
|
+
app.onhostcontextchanged = theme;
|
|
159
|
+
app.onteardown = () => { try { clearBusy(); } catch (e) {} return {}; };
|
|
160
|
+
wireActions();
|
|
161
|
+
try { await app.connect(); } catch (e) {}
|
|
162
|
+
try { theme(app.getHostContext && app.getHostContext()); } catch (e) {}
|
|
163
|
+
})();
|
|
164
|
+
`;
|
|
165
|
+
//# sourceMappingURL=bootstrap.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bootstrap.js","sourceRoot":"","sources":["../../src/widget/bootstrap.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6I9C,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ext-apps-bundle.d.ts","sourceRoot":"","sources":["../../src/widget/ext-apps-bundle.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,gBAAgB,UAAU,CAAC;AAExC,sFAAsF;AACtF,eAAO,MAAM,eAAe,EAAE,MAAmtkU,CAAC"}
|