@noodleseed/one 0.124.0 → 0.126.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/cli.d.ts.map +1 -1
- package/dist/cli.js +3 -0
- package/dist/cli.js.map +1 -1
- package/dist/commands/catalog-data-account.d.ts +2 -3
- package/dist/commands/catalog-data-account.d.ts.map +1 -1
- package/dist/commands/catalog-data-account.js +2 -310
- package/dist/commands/catalog-data-account.js.map +1 -1
- package/dist/commands/catalog-data-assistant.d.ts +2 -3
- package/dist/commands/catalog-data-assistant.d.ts.map +1 -1
- package/dist/commands/catalog-data-assistant.js +2 -259
- package/dist/commands/catalog-data-assistant.js.map +1 -1
- package/dist/commands/catalog-data-auth-discovery.d.ts +2 -3
- package/dist/commands/catalog-data-auth-discovery.d.ts.map +1 -1
- package/dist/commands/catalog-data-auth-discovery.js +2 -357
- package/dist/commands/catalog-data-auth-discovery.js.map +1 -1
- package/dist/commands/catalog-data-billing.d.ts +2 -3
- package/dist/commands/catalog-data-billing.d.ts.map +1 -1
- package/dist/commands/catalog-data-billing.js +2 -311
- package/dist/commands/catalog-data-billing.js.map +1 -1
- package/dist/commands/catalog-data-bootstrap-authoring.d.ts +2 -3
- package/dist/commands/catalog-data-bootstrap-authoring.d.ts.map +1 -1
- package/dist/commands/catalog-data-bootstrap-authoring.js +2 -381
- package/dist/commands/catalog-data-bootstrap-authoring.js.map +1 -1
- package/dist/commands/catalog-data-bootstrap-pre-auth.d.ts +2 -3
- package/dist/commands/catalog-data-bootstrap-pre-auth.d.ts.map +1 -1
- package/dist/commands/catalog-data-bootstrap-pre-auth.js +2 -388
- package/dist/commands/catalog-data-bootstrap-pre-auth.js.map +1 -1
- package/dist/commands/catalog-data-config.d.ts +2 -6
- package/dist/commands/catalog-data-config.d.ts.map +1 -1
- package/dist/commands/catalog-data-config.js +2 -266
- package/dist/commands/catalog-data-config.js.map +1 -1
- package/dist/commands/catalog-data-core.d.ts +2 -5
- package/dist/commands/catalog-data-core.d.ts.map +1 -1
- package/dist/commands/catalog-data-core.js +2 -86
- package/dist/commands/catalog-data-core.js.map +1 -1
- package/dist/commands/catalog-data-distributions.d.ts +3 -0
- package/dist/commands/catalog-data-distributions.d.ts.map +1 -0
- package/dist/commands/catalog-data-distributions.js +3 -0
- package/dist/commands/catalog-data-distributions.js.map +1 -0
- package/dist/commands/catalog-data-hosted-deployment.d.ts +2 -3
- package/dist/commands/catalog-data-hosted-deployment.d.ts.map +1 -1
- package/dist/commands/catalog-data-hosted-deployment.js +2 -329
- package/dist/commands/catalog-data-hosted-deployment.js.map +1 -1
- package/dist/commands/catalog-data-hosted-governance.d.ts +2 -3
- package/dist/commands/catalog-data-hosted-governance.d.ts.map +1 -1
- package/dist/commands/catalog-data-hosted-governance.js +2 -3
- package/dist/commands/catalog-data-hosted-governance.js.map +1 -1
- package/dist/commands/catalog-data-hosted-observability.d.ts +2 -3
- package/dist/commands/catalog-data-hosted-observability.d.ts.map +1 -1
- package/dist/commands/catalog-data-hosted-observability.js +2 -453
- package/dist/commands/catalog-data-hosted-observability.js.map +1 -1
- package/dist/commands/catalog-data-local-authoring.d.ts +2 -3
- package/dist/commands/catalog-data-local-authoring.d.ts.map +1 -1
- package/dist/commands/catalog-data-local-authoring.js +2 -293
- package/dist/commands/catalog-data-local-authoring.js.map +1 -1
- package/dist/commands/catalog-data-platform-auth.d.ts +2 -6
- package/dist/commands/catalog-data-platform-auth.d.ts.map +1 -1
- package/dist/commands/catalog-data-platform-auth.js +2 -332
- package/dist/commands/catalog-data-platform-auth.js.map +1 -1
- package/dist/commands/catalog-data-policy.d.ts +2 -3
- package/dist/commands/catalog-data-policy.d.ts.map +1 -1
- package/dist/commands/catalog-data-policy.js +2 -327
- package/dist/commands/catalog-data-policy.js.map +1 -1
- package/dist/commands/catalog-data-tenant-admin.d.ts +2 -3
- package/dist/commands/catalog-data-tenant-admin.d.ts.map +1 -1
- package/dist/commands/catalog-data-tenant-admin.js +2 -478
- package/dist/commands/catalog-data-tenant-admin.js.map +1 -1
- package/dist/commands/catalog-data-tenant-resources.d.ts +2 -3
- package/dist/commands/catalog-data-tenant-resources.d.ts.map +1 -1
- package/dist/commands/catalog-data-tenant-resources.js +2 -222
- package/dist/commands/catalog-data-tenant-resources.js.map +1 -1
- package/dist/commands/catalog-types.d.ts +2 -103
- package/dist/commands/catalog-types.d.ts.map +1 -1
- package/dist/commands/catalog-types.js +0 -5
- package/dist/commands/catalog-types.js.map +1 -1
- package/dist/commands/catalog.d.ts.map +1 -1
- package/dist/commands/catalog.js +3 -0
- package/dist/commands/catalog.js.map +1 -1
- package/dist/commands/distribution-lifecycle-ops.d.ts +3 -0
- package/dist/commands/distribution-lifecycle-ops.d.ts.map +1 -0
- package/dist/commands/distribution-lifecycle-ops.js +200 -0
- package/dist/commands/distribution-lifecycle-ops.js.map +1 -0
- package/dist/commands/distribution-ops-support.d.ts +36 -0
- package/dist/commands/distribution-ops-support.d.ts.map +1 -0
- package/dist/commands/distribution-ops-support.js +109 -0
- package/dist/commands/distribution-ops-support.js.map +1 -0
- package/dist/commands/distributions-ops.d.ts +3 -0
- package/dist/commands/distributions-ops.d.ts.map +1 -0
- package/dist/commands/distributions-ops.js +272 -0
- package/dist/commands/distributions-ops.js.map +1 -0
- package/dist/control-plane-request.d.ts +24 -0
- package/dist/control-plane-request.d.ts.map +1 -0
- package/dist/control-plane-request.js +124 -0
- package/dist/control-plane-request.js.map +1 -0
- package/dist/control-plane.d.ts +1 -17
- package/dist/control-plane.d.ts.map +1 -1
- package/dist/control-plane.js +1 -112
- package/dist/control-plane.js.map +1 -1
- package/dist/deploy.d.ts.map +1 -1
- package/dist/deploy.js +18 -16
- package/dist/deploy.js.map +1 -1
- package/dist/plugin-mode/plugin-operation-contract.d.ts +9 -9
- package/node_modules/@noodle-borg/agent-kit/dist/curated/command-groups.d.ts.map +1 -1
- package/node_modules/@noodle-borg/agent-kit/dist/curated/command-groups.js +4 -0
- package/node_modules/@noodle-borg/agent-kit/dist/curated/command-groups.js.map +1 -1
- package/node_modules/@noodle-borg/agent-kit/dist/generated/example-files.js +1 -1
- package/node_modules/@noodle-borg/agent-kit/dist/generated/example-files.js.map +1 -1
- package/node_modules/@noodle-borg/agent-kit/dist/generated/surface.d.ts.map +1 -1
- package/node_modules/@noodle-borg/agent-kit/dist/generated/surface.js +1 -0
- package/node_modules/@noodle-borg/agent-kit/dist/generated/surface.js.map +1 -1
- package/node_modules/@noodle-borg/agent-kit/dist/skill-operations-refs.d.ts.map +1 -1
- package/node_modules/@noodle-borg/agent-kit/dist/skill-operations-refs.js +17 -0
- package/node_modules/@noodle-borg/agent-kit/dist/skill-operations-refs.js.map +1 -1
- package/node_modules/@noodle-borg/agent-kit/package.json +1 -1
- package/node_modules/@noodle-borg/cli-catalog/dist/catalog-data-account.d.ts +4 -0
- package/node_modules/@noodle-borg/cli-catalog/dist/catalog-data-account.d.ts.map +1 -0
- package/node_modules/@noodle-borg/cli-catalog/dist/catalog-data-account.js +311 -0
- package/node_modules/@noodle-borg/cli-catalog/dist/catalog-data-account.js.map +1 -0
- package/node_modules/@noodle-borg/cli-catalog/dist/catalog-data-assistant.d.ts +4 -0
- package/node_modules/@noodle-borg/cli-catalog/dist/catalog-data-assistant.d.ts.map +1 -0
- package/node_modules/@noodle-borg/cli-catalog/dist/catalog-data-assistant.js +260 -0
- package/node_modules/@noodle-borg/cli-catalog/dist/catalog-data-assistant.js.map +1 -0
- package/node_modules/@noodle-borg/cli-catalog/dist/catalog-data-auth-discovery.d.ts +4 -0
- package/node_modules/@noodle-borg/cli-catalog/dist/catalog-data-auth-discovery.d.ts.map +1 -0
- package/node_modules/@noodle-borg/cli-catalog/dist/catalog-data-auth-discovery.js +358 -0
- package/node_modules/@noodle-borg/cli-catalog/dist/catalog-data-auth-discovery.js.map +1 -0
- package/node_modules/@noodle-borg/cli-catalog/dist/catalog-data-billing.d.ts +4 -0
- package/node_modules/@noodle-borg/cli-catalog/dist/catalog-data-billing.d.ts.map +1 -0
- package/node_modules/@noodle-borg/cli-catalog/dist/catalog-data-billing.js +312 -0
- package/node_modules/@noodle-borg/cli-catalog/dist/catalog-data-billing.js.map +1 -0
- package/node_modules/@noodle-borg/cli-catalog/dist/catalog-data-bootstrap-authoring.d.ts +4 -0
- package/node_modules/@noodle-borg/cli-catalog/dist/catalog-data-bootstrap-authoring.d.ts.map +1 -0
- package/node_modules/@noodle-borg/cli-catalog/dist/catalog-data-bootstrap-authoring.js +382 -0
- package/node_modules/@noodle-borg/cli-catalog/dist/catalog-data-bootstrap-authoring.js.map +1 -0
- package/node_modules/@noodle-borg/cli-catalog/dist/catalog-data-bootstrap-pre-auth.d.ts +4 -0
- package/node_modules/@noodle-borg/cli-catalog/dist/catalog-data-bootstrap-pre-auth.d.ts.map +1 -0
- package/node_modules/@noodle-borg/cli-catalog/dist/catalog-data-bootstrap-pre-auth.js +389 -0
- package/node_modules/@noodle-borg/cli-catalog/dist/catalog-data-bootstrap-pre-auth.js.map +1 -0
- package/node_modules/@noodle-borg/cli-catalog/dist/catalog-data-config.d.ts +7 -0
- package/node_modules/@noodle-borg/cli-catalog/dist/catalog-data-config.d.ts.map +1 -0
- package/node_modules/@noodle-borg/cli-catalog/dist/catalog-data-config.js +267 -0
- package/node_modules/@noodle-borg/cli-catalog/dist/catalog-data-config.js.map +1 -0
- package/node_modules/@noodle-borg/cli-catalog/dist/catalog-data-core.d.ts +6 -0
- package/node_modules/@noodle-borg/cli-catalog/dist/catalog-data-core.d.ts.map +1 -0
- package/node_modules/@noodle-borg/cli-catalog/dist/catalog-data-core.js +87 -0
- package/node_modules/@noodle-borg/cli-catalog/dist/catalog-data-core.js.map +1 -0
- package/node_modules/@noodle-borg/cli-catalog/dist/catalog-data-distributions.d.ts +4 -0
- package/node_modules/@noodle-borg/cli-catalog/dist/catalog-data-distributions.d.ts.map +1 -0
- package/node_modules/@noodle-borg/cli-catalog/dist/catalog-data-distributions.js +260 -0
- package/node_modules/@noodle-borg/cli-catalog/dist/catalog-data-distributions.js.map +1 -0
- package/node_modules/@noodle-borg/cli-catalog/dist/catalog-data-hosted-deployment.d.ts +4 -0
- package/node_modules/@noodle-borg/cli-catalog/dist/catalog-data-hosted-deployment.d.ts.map +1 -0
- package/node_modules/@noodle-borg/cli-catalog/dist/catalog-data-hosted-deployment.js +330 -0
- package/node_modules/@noodle-borg/cli-catalog/dist/catalog-data-hosted-deployment.js.map +1 -0
- package/node_modules/@noodle-borg/cli-catalog/dist/catalog-data-hosted-governance.d.ts +4 -0
- package/node_modules/@noodle-borg/cli-catalog/dist/catalog-data-hosted-governance.d.ts.map +1 -0
- package/node_modules/@noodle-borg/cli-catalog/dist/catalog-data-hosted-governance.js +4 -0
- package/node_modules/@noodle-borg/cli-catalog/dist/catalog-data-hosted-governance.js.map +1 -0
- package/node_modules/@noodle-borg/cli-catalog/dist/catalog-data-hosted-observability.d.ts +4 -0
- package/node_modules/@noodle-borg/cli-catalog/dist/catalog-data-hosted-observability.d.ts.map +1 -0
- package/node_modules/@noodle-borg/cli-catalog/dist/catalog-data-hosted-observability.js +454 -0
- package/node_modules/@noodle-borg/cli-catalog/dist/catalog-data-hosted-observability.js.map +1 -0
- package/node_modules/@noodle-borg/cli-catalog/dist/catalog-data-local-authoring.d.ts +4 -0
- package/node_modules/@noodle-borg/cli-catalog/dist/catalog-data-local-authoring.d.ts.map +1 -0
- package/node_modules/@noodle-borg/cli-catalog/dist/catalog-data-local-authoring.js +294 -0
- package/node_modules/@noodle-borg/cli-catalog/dist/catalog-data-local-authoring.js.map +1 -0
- package/node_modules/@noodle-borg/cli-catalog/dist/catalog-data-platform-auth.d.ts +7 -0
- package/node_modules/@noodle-borg/cli-catalog/dist/catalog-data-platform-auth.d.ts.map +1 -0
- package/node_modules/@noodle-borg/cli-catalog/dist/catalog-data-platform-auth.js +333 -0
- package/node_modules/@noodle-borg/cli-catalog/dist/catalog-data-platform-auth.js.map +1 -0
- package/node_modules/@noodle-borg/cli-catalog/dist/catalog-data-policy.d.ts +4 -0
- package/node_modules/@noodle-borg/cli-catalog/dist/catalog-data-policy.d.ts.map +1 -0
- package/node_modules/@noodle-borg/cli-catalog/dist/catalog-data-policy.js +328 -0
- package/node_modules/@noodle-borg/cli-catalog/dist/catalog-data-policy.js.map +1 -0
- package/node_modules/@noodle-borg/cli-catalog/dist/catalog-data-tenant-admin.d.ts +4 -0
- package/node_modules/@noodle-borg/cli-catalog/dist/catalog-data-tenant-admin.d.ts.map +1 -0
- package/node_modules/@noodle-borg/cli-catalog/dist/catalog-data-tenant-admin.js +479 -0
- package/node_modules/@noodle-borg/cli-catalog/dist/catalog-data-tenant-admin.js.map +1 -0
- package/node_modules/@noodle-borg/cli-catalog/dist/catalog-data-tenant-resources.d.ts +4 -0
- package/node_modules/@noodle-borg/cli-catalog/dist/catalog-data-tenant-resources.d.ts.map +1 -0
- package/node_modules/@noodle-borg/cli-catalog/dist/catalog-data-tenant-resources.js +223 -0
- package/node_modules/@noodle-borg/cli-catalog/dist/catalog-data-tenant-resources.js.map +1 -0
- package/node_modules/@noodle-borg/cli-catalog/dist/catalog-types.d.ts +104 -0
- package/node_modules/@noodle-borg/cli-catalog/dist/catalog-types.d.ts.map +1 -0
- package/node_modules/@noodle-borg/cli-catalog/dist/catalog-types.js +7 -0
- package/node_modules/@noodle-borg/cli-catalog/dist/catalog-types.js.map +1 -0
- package/node_modules/@noodle-borg/cli-catalog/dist/index.d.ts +19 -0
- package/node_modules/@noodle-borg/cli-catalog/dist/index.d.ts.map +1 -0
- package/node_modules/@noodle-borg/cli-catalog/dist/index.js +19 -0
- package/node_modules/@noodle-borg/cli-catalog/dist/index.js.map +1 -0
- package/node_modules/@noodle-borg/cli-catalog/package.json +97 -0
- package/node_modules/@noodle-borg/deploy-client/dist/deploy-knowledge.d.ts +12 -0
- package/node_modules/@noodle-borg/deploy-client/dist/deploy-knowledge.d.ts.map +1 -1
- package/node_modules/@noodle-borg/deploy-client/dist/deploy-knowledge.js +38 -4
- package/node_modules/@noodle-borg/deploy-client/dist/deploy-knowledge.js.map +1 -1
- package/node_modules/@noodle-borg/deploy-client/dist/index.d.ts +1 -1
- package/node_modules/@noodle-borg/deploy-client/dist/index.d.ts.map +1 -1
- package/node_modules/@noodle-borg/deploy-client/dist/index.js +1 -1
- package/node_modules/@noodle-borg/deploy-client/dist/index.js.map +1 -1
- package/node_modules/@noodle-borg/knowledge/dist/bm25.d.ts.map +1 -1
- package/node_modules/@noodle-borg/knowledge/dist/bm25.js +4 -2
- package/node_modules/@noodle-borg/knowledge/dist/bm25.js.map +1 -1
- package/node_modules/@noodle-borg/knowledge/dist/compile.d.ts.map +1 -1
- package/node_modules/@noodle-borg/knowledge/dist/compile.js +10 -1
- package/node_modules/@noodle-borg/knowledge/dist/compile.js.map +1 -1
- package/node_modules/@noodle-borg/knowledge/dist/google-agent-search.d.ts +7 -0
- package/node_modules/@noodle-borg/knowledge/dist/google-agent-search.d.ts.map +1 -1
- package/node_modules/@noodle-borg/knowledge/dist/google-agent-search.js +75 -17
- package/node_modules/@noodle-borg/knowledge/dist/google-agent-search.js.map +1 -1
- package/node_modules/@noodle-borg/knowledge/dist/limits.d.ts +2 -0
- package/node_modules/@noodle-borg/knowledge/dist/limits.d.ts.map +1 -1
- package/node_modules/@noodle-borg/knowledge/dist/limits.js +2 -0
- package/node_modules/@noodle-borg/knowledge/dist/limits.js.map +1 -1
- package/node_modules/@noodle-borg/knowledge/dist/revision-store.d.ts +12 -1
- package/node_modules/@noodle-borg/knowledge/dist/revision-store.d.ts.map +1 -1
- package/node_modules/@noodle-borg/knowledge/dist/revision-store.js +17 -2
- package/node_modules/@noodle-borg/knowledge/dist/revision-store.js.map +1 -1
- package/node_modules/@noodle-borg/knowledge-operations/dist/executor.d.ts.map +1 -1
- package/node_modules/@noodle-borg/knowledge-operations/dist/executor.js +15 -9
- package/node_modules/@noodle-borg/knowledge-operations/dist/executor.js.map +1 -1
- package/node_modules/@noodle-borg/knowledge-operations/dist/managed-google.d.ts +6 -1
- package/node_modules/@noodle-borg/knowledge-operations/dist/managed-google.d.ts.map +1 -1
- package/node_modules/@noodle-borg/knowledge-operations/dist/managed-google.js +29 -3
- package/node_modules/@noodle-borg/knowledge-operations/dist/managed-google.js.map +1 -1
- package/node_modules/@noodle-borg/knowledge-operations/dist/publication.d.ts.map +1 -1
- package/node_modules/@noodle-borg/knowledge-operations/dist/publication.js +4 -2
- package/node_modules/@noodle-borg/knowledge-operations/dist/publication.js.map +1 -1
- package/node_modules/@noodle-borg/knowledge-operations/dist/routes.d.ts +1 -5
- package/node_modules/@noodle-borg/knowledge-operations/dist/routes.d.ts.map +1 -1
- package/node_modules/@noodle-borg/knowledge-operations/dist/routes.js +5 -5
- package/node_modules/@noodle-borg/knowledge-operations/dist/routes.js.map +1 -1
- package/node_modules/@noodle-borg/knowledge-operations/dist/service-wiring.d.ts +8 -1
- package/node_modules/@noodle-borg/knowledge-operations/dist/service-wiring.d.ts.map +1 -1
- package/node_modules/@noodle-borg/knowledge-operations/dist/service-wiring.js +14 -14
- package/node_modules/@noodle-borg/knowledge-operations/dist/service-wiring.js.map +1 -1
- package/node_modules/@noodle-borg/module/dist/contract.d.ts +67 -0
- package/node_modules/@noodle-borg/module/dist/contract.d.ts.map +1 -1
- package/node_modules/@noodle-borg/module/dist/contract.js.map +1 -1
- package/node_modules/@noodle-borg/plugin-distribution/dist/command.d.ts +1 -0
- package/node_modules/@noodle-borg/plugin-distribution/dist/command.d.ts.map +1 -1
- package/node_modules/@noodle-borg/plugin-distribution/dist/command.js +1 -0
- package/node_modules/@noodle-borg/plugin-distribution/dist/command.js.map +1 -1
- package/node_modules/@noodle-borg/protocol/dist/index.d.ts +1 -0
- package/node_modules/@noodle-borg/protocol/dist/index.d.ts.map +1 -1
- package/node_modules/@noodle-borg/protocol/dist/index.js +1 -0
- package/node_modules/@noodle-borg/protocol/dist/index.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/modules/commercial-modules.d.ts +8 -0
- package/node_modules/@noodle-borg/service/dist/modules/commercial-modules.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/modules/commercial-modules.js +21 -0
- package/node_modules/@noodle-borg/service/dist/modules/commercial-modules.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/modules/route-dispatch.d.ts +30 -0
- package/node_modules/@noodle-borg/service/dist/modules/route-dispatch.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/modules/route-dispatch.js +155 -0
- package/node_modules/@noodle-borg/service/dist/modules/route-dispatch.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/routes/assistant-knowledge.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/routes/assistant-knowledge.js +11 -4
- package/node_modules/@noodle-borg/service/dist/routes/assistant-knowledge.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/serve.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/serve.js +4 -20
- package/node_modules/@noodle-borg/service/dist/serve.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/service.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/service.js +15 -15
- package/node_modules/@noodle-borg/service/dist/service.js.map +1 -1
- package/node_modules/@noodle-borg/service/package.json +1 -1
- package/node_modules/@noodle-borg/wire-contracts/dist/distribution.d.ts +561 -0
- package/node_modules/@noodle-borg/wire-contracts/dist/distribution.d.ts.map +1 -0
- package/node_modules/@noodle-borg/wire-contracts/dist/distribution.js +223 -0
- package/node_modules/@noodle-borg/wire-contracts/dist/distribution.js.map +1 -0
- package/node_modules/@noodle-borg/wire-contracts/dist/index.d.ts +1 -0
- package/node_modules/@noodle-borg/wire-contracts/dist/index.d.ts.map +1 -1
- package/node_modules/@noodle-borg/wire-contracts/dist/index.js +1 -0
- package/node_modules/@noodle-borg/wire-contracts/dist/index.js.map +1 -1
- package/node_modules/@noodle-borg/wire-contracts/dist/knowledge.d.ts +1 -1
- package/node_modules/@noodle-borg/wire-contracts/dist/knowledge.d.ts.map +1 -1
- package/node_modules/@noodle-borg/wire-contracts/dist/knowledge.js +4 -2
- package/node_modules/@noodle-borg/wire-contracts/dist/knowledge.js.map +1 -1
- package/package.json +5 -2
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import type { DistributionLifecycle, DistributionTarget, DistributionVersion } from '@noodle-borg/wire-contracts';
|
|
2
|
+
import type { ConfigLocation } from '../config.js';
|
|
3
|
+
import { type CliFailure } from './shared.js';
|
|
4
|
+
export declare const PUBLISH_USAGE = "noodle distributions publish <deployment-id> [server.ts] --target <openai|claude>";
|
|
5
|
+
export declare const LIST_USAGE = "noodle distributions list <deployment-id> [--target <openai|claude>]";
|
|
6
|
+
export declare const INSPECT_USAGE = "noodle distributions inspect <distribution-id>";
|
|
7
|
+
export declare const DOWNLOAD_USAGE = "noodle distributions download <distribution-id> --output <archive.zip>";
|
|
8
|
+
export interface CommonDistributionArgs {
|
|
9
|
+
readonly org?: string;
|
|
10
|
+
readonly service?: string;
|
|
11
|
+
readonly authToken?: string;
|
|
12
|
+
readonly json: boolean;
|
|
13
|
+
}
|
|
14
|
+
export interface DistributionHostedContext {
|
|
15
|
+
readonly org: string;
|
|
16
|
+
readonly serviceUrl: string;
|
|
17
|
+
readonly token: string;
|
|
18
|
+
}
|
|
19
|
+
export declare function commonDistributionArgs(input: CommonDistributionArgs): CommonDistributionArgs;
|
|
20
|
+
export declare function resolveDistributionHostedContext(common: CommonDistributionArgs, env: NodeJS.ProcessEnv, home: ConfigLocation, command: string): Promise<DistributionHostedContext | number>;
|
|
21
|
+
export declare function distributionDeploymentUrl(context: DistributionHostedContext, deploymentId: string): string;
|
|
22
|
+
export declare function distributionVersionUrl(context: DistributionHostedContext, distributionId: string): string;
|
|
23
|
+
export declare function deploymentDistributionEligibilityFailure(deployment: {
|
|
24
|
+
readonly active: boolean;
|
|
25
|
+
readonly archivedAt?: string | undefined;
|
|
26
|
+
readonly accessMode: string;
|
|
27
|
+
readonly endpointUrl?: string | undefined;
|
|
28
|
+
}, packageActive: boolean): CliFailure | undefined;
|
|
29
|
+
export declare function distributionDownloadMatches(metadata: DistributionVersion, bytes: Uint8Array, headers: Headers): boolean;
|
|
30
|
+
export declare function isDistributionTarget(value: string | undefined): value is DistributionTarget;
|
|
31
|
+
export declare function distributionUsageFailure(message: string, next: string, json: boolean): number;
|
|
32
|
+
export declare function distributionFailure(code: string, message: string, fix: string, next: string, exitCode?: number): CliFailure;
|
|
33
|
+
export declare function printPublishedDistribution(version: DistributionVersion, replayed: boolean): void;
|
|
34
|
+
export declare function printDistributionVersions(versions: readonly DistributionVersion[]): void;
|
|
35
|
+
export declare function printDistributionVersion(version: DistributionVersion, lifecycle?: DistributionLifecycle): void;
|
|
36
|
+
//# sourceMappingURL=distribution-ops-support.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"distribution-ops-support.d.ts","sourceRoot":"","sources":["../../src/commands/distribution-ops-support.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,qBAAqB,EACrB,kBAAkB,EAClB,mBAAmB,EACpB,MAAM,6BAA6B,CAAC;AACrC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAInD,OAAO,EAAE,KAAK,UAAU,EAA+B,MAAM,aAAa,CAAC;AAE3E,eAAO,MAAM,aAAa,sFAC2D,CAAC;AACtF,eAAO,MAAM,UAAU,yEAAyE,CAAC;AACjG,eAAO,MAAM,aAAa,mDAAmD,CAAC;AAC9E,eAAO,MAAM,cAAc,2EAC+C,CAAC;AAE3E,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,sBAAsB,GAAG,sBAAsB,CAO5F;AAED,wBAAsB,gCAAgC,CACpD,MAAM,EAAE,sBAAsB,EAC9B,GAAG,EAAE,MAAM,CAAC,UAAU,EACtB,IAAI,EAAE,cAAc,EACpB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,yBAAyB,GAAG,MAAM,CAAC,CAa7C;AAED,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,yBAAyB,EAClC,YAAY,EAAE,MAAM,GACnB,MAAM,CAKR;AAED,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,yBAAyB,EAClC,cAAc,EAAE,MAAM,GACrB,MAAM,CAKR;AAED,wBAAgB,wCAAwC,CACtD,UAAU,EAAE;IACV,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACzC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC3C,EACD,aAAa,EAAE,OAAO,GACrB,UAAU,GAAG,SAAS,CA0BxB;AAED,wBAAgB,2BAA2B,CACzC,QAAQ,EAAE,mBAAmB,EAC7B,KAAK,EAAE,UAAU,EACjB,OAAO,EAAE,OAAO,GACf,OAAO,CAOT;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,KAAK,IAAI,kBAAkB,CAE3F;AAED,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,MAAM,CAE7F;AAED,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EACf,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,EACZ,QAAQ,GAAE,MAAqB,GAC9B,UAAU,CAEZ;AAED,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,mBAAmB,EAAE,QAAQ,EAAE,OAAO,GAAG,IAAI,CAQhG;AAED,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,SAAS,mBAAmB,EAAE,GAAG,IAAI,CASxF;AAED,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,mBAAmB,EAC5B,SAAS,CAAC,EAAE,qBAAqB,GAChC,IAAI,CAkBN"}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
import { createHash } from 'node:crypto';
|
|
2
|
+
import { resolveControlPlaneToken } from '../control-plane.js';
|
|
3
|
+
import { EXIT } from './output.js';
|
|
4
|
+
import { authRequired, resolveOrgTarget } from './resource-shared.js';
|
|
5
|
+
import { printCliFailure, usageError } from './shared.js';
|
|
6
|
+
export const PUBLISH_USAGE = 'noodle distributions publish <deployment-id> [server.ts] --target <openai|claude>';
|
|
7
|
+
export const LIST_USAGE = 'noodle distributions list <deployment-id> [--target <openai|claude>]';
|
|
8
|
+
export const INSPECT_USAGE = 'noodle distributions inspect <distribution-id>';
|
|
9
|
+
export const DOWNLOAD_USAGE = 'noodle distributions download <distribution-id> --output <archive.zip>';
|
|
10
|
+
export function commonDistributionArgs(input) {
|
|
11
|
+
return {
|
|
12
|
+
...(input.org === undefined ? {} : { org: input.org }),
|
|
13
|
+
...(input.service === undefined ? {} : { service: input.service }),
|
|
14
|
+
...(input.authToken === undefined ? {} : { authToken: input.authToken }),
|
|
15
|
+
json: input.json,
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
export async function resolveDistributionHostedContext(common, env, home, command) {
|
|
19
|
+
const target = resolveOrgTarget(common.org, home);
|
|
20
|
+
if (!target.ok)
|
|
21
|
+
return printCliFailure(command, target.error, common.json);
|
|
22
|
+
const resolved = await resolveControlPlaneToken({
|
|
23
|
+
serviceFlag: common.service ?? target.serviceUrl,
|
|
24
|
+
authFlag: common.authToken,
|
|
25
|
+
env,
|
|
26
|
+
home,
|
|
27
|
+
});
|
|
28
|
+
if (resolved.token === undefined) {
|
|
29
|
+
return printCliFailure(command, authRequired(), common.json);
|
|
30
|
+
}
|
|
31
|
+
return { org: target.org, serviceUrl: resolved.serviceUrl, token: resolved.token };
|
|
32
|
+
}
|
|
33
|
+
export function distributionDeploymentUrl(context, deploymentId) {
|
|
34
|
+
return (`${context.serviceUrl}/v1/orgs/${encodeURIComponent(context.org)}` +
|
|
35
|
+
`/deployments/${encodeURIComponent(deploymentId)}`);
|
|
36
|
+
}
|
|
37
|
+
export function distributionVersionUrl(context, distributionId) {
|
|
38
|
+
return (`${context.serviceUrl}/v1/orgs/${encodeURIComponent(context.org)}` +
|
|
39
|
+
`/distributions/${encodeURIComponent(distributionId)}`);
|
|
40
|
+
}
|
|
41
|
+
export function deploymentDistributionEligibilityFailure(deployment, packageActive) {
|
|
42
|
+
if (!deployment.active || !packageActive || deployment.archivedAt !== undefined) {
|
|
43
|
+
return distributionFailure('distribution_deployment_inactive', 'Only an active, unarchived deployment can be distributed.', 'Select the active deployment or deploy the current project.', 'noodle deployments list');
|
|
44
|
+
}
|
|
45
|
+
if (deployment.accessMode !== 'public') {
|
|
46
|
+
return distributionFailure('distribution_public_access_required', 'Milestone 10 distribution supports only deployments with exact public access.', 'Set the deployment access mode to public before publishing.', 'noodle access set --access public');
|
|
47
|
+
}
|
|
48
|
+
if (deployment.endpointUrl === undefined) {
|
|
49
|
+
return distributionFailure('distribution_mcp_url_unavailable', 'The deployment does not expose an authoritative MCP URL.', 'Wait for deployment readiness or redeploy the project.', 'noodle status');
|
|
50
|
+
}
|
|
51
|
+
return undefined;
|
|
52
|
+
}
|
|
53
|
+
export function distributionDownloadMatches(metadata, bytes, headers) {
|
|
54
|
+
if (bytes.byteLength !== metadata.byteLength)
|
|
55
|
+
return false;
|
|
56
|
+
if (createHash('sha256').update(bytes).digest('hex') !== metadata.archiveSha256)
|
|
57
|
+
return false;
|
|
58
|
+
const etag = headers.get('etag');
|
|
59
|
+
if (etag !== null && etag !== `"${metadata.archiveSha256}"`)
|
|
60
|
+
return false;
|
|
61
|
+
const contentLength = headers.get('content-length');
|
|
62
|
+
return contentLength === null || Number(contentLength) === bytes.byteLength;
|
|
63
|
+
}
|
|
64
|
+
export function isDistributionTarget(value) {
|
|
65
|
+
return value === 'openai' || value === 'claude';
|
|
66
|
+
}
|
|
67
|
+
export function distributionUsageFailure(message, next, json) {
|
|
68
|
+
return printCliFailure('distributions', usageError(message, next), json);
|
|
69
|
+
}
|
|
70
|
+
export function distributionFailure(code, message, fix, next, exitCode = EXIT.FAILURE) {
|
|
71
|
+
return { code, message, cause: message, fix, next, exitCode };
|
|
72
|
+
}
|
|
73
|
+
export function printPublishedDistribution(version, replayed) {
|
|
74
|
+
console.log(`${replayed ? 'reused' : 'published'}: ${version.id}`);
|
|
75
|
+
console.log(`target: ${version.target}`);
|
|
76
|
+
console.log(`version: ${version.version}`);
|
|
77
|
+
console.log(`sha256: ${version.archiveSha256}`);
|
|
78
|
+
console.log(`next: noodle distributions download ${version.id} --output ${version.appSlug}-${version.target}.zip`);
|
|
79
|
+
}
|
|
80
|
+
export function printDistributionVersions(versions) {
|
|
81
|
+
if (versions.length === 0) {
|
|
82
|
+
console.log('No distribution versions found for this deployment.');
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
85
|
+
console.log('DISTRIBUTION\tTARGET\tVERSION\tCREATED');
|
|
86
|
+
for (const version of versions) {
|
|
87
|
+
console.log(`${version.id}\t${version.target}\t${version.version}\t${version.createdAt}`);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
export function printDistributionVersion(version, lifecycle) {
|
|
91
|
+
console.log(`distribution: ${version.id}`);
|
|
92
|
+
console.log(`deployment: ${version.deploymentId}`);
|
|
93
|
+
console.log(`target: ${version.target}`);
|
|
94
|
+
console.log(`version: ${version.version}`);
|
|
95
|
+
console.log(`created: ${version.createdAt}`);
|
|
96
|
+
console.log(`sha256: ${version.archiveSha256}`);
|
|
97
|
+
console.log(`bytes: ${version.byteLength}`);
|
|
98
|
+
if (lifecycle !== undefined) {
|
|
99
|
+
console.log(`readiness: ${lifecycle.readiness.status}`);
|
|
100
|
+
console.log(`disposition: ${lifecycle.disposition.status}`);
|
|
101
|
+
if (lifecycle.review !== undefined)
|
|
102
|
+
console.log(`review: ${lifecycle.review.reportedStatus}`);
|
|
103
|
+
if (lifecycle.release !== undefined) {
|
|
104
|
+
console.log(`release: ${lifecycle.release.id}`);
|
|
105
|
+
console.log(`visibility: ${lifecycle.release.visibility}`);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
//# sourceMappingURL=distribution-ops-support.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"distribution-ops-support.js","sourceRoot":"","sources":["../../src/commands/distribution-ops-support.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"distributions-ops.d.ts","sourceRoot":"","sources":["../../src/commands/distributions-ops.ts"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AA0BnD,wBAAsB,gBAAgB,CACpC,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,GAAG,EAAE,MAAM,CAAC,UAAU,EACtB,IAAI,EAAE,cAAc,GACnB,OAAO,CAAC,MAAM,CAAC,CAajB"}
|
|
@@ -0,0 +1,272 @@
|
|
|
1
|
+
import { renderProductSkillBundle, validateRenderedProductSkillFiles, } from '@noodle-borg/agent-kit';
|
|
2
|
+
import { createAppPackageSnapshotV1 } from '@noodle-borg/app-package';
|
|
3
|
+
import { packageClaudePlugin, packageOpenAiPlugin } from '@noodle-borg/plugin-distribution';
|
|
4
|
+
import { readDistributionAssets, writeDistributionArchiveAtomically, } from '@noodle-borg/plugin-distribution/command';
|
|
5
|
+
import { DeploymentPackageResponseShapeSchema, DeploymentResponseSchema, DistributionListResponseSchema, DistributionPublishRequestSchema, DistributionPublishResponseSchema, DistributionResponseSchema, } from '@noodle-borg/wire-contracts';
|
|
6
|
+
import { serviceBinary, serviceJson } from '../control-plane.js';
|
|
7
|
+
import { compileLocalInput } from '../local-compile.js';
|
|
8
|
+
import { resolveLocalEntrypoint } from '../project.js';
|
|
9
|
+
import { runDistributionLifecycle } from './distribution-lifecycle-ops.js';
|
|
10
|
+
import { commonDistributionArgs, DOWNLOAD_USAGE, deploymentDistributionEligibilityFailure, distributionDeploymentUrl, distributionDownloadMatches, distributionFailure, distributionUsageFailure, distributionVersionUrl, INSPECT_USAGE, isDistributionTarget, LIST_USAGE, PUBLISH_USAGE, printDistributionVersion, printDistributionVersions, printPublishedDistribution, resolveDistributionHostedContext, } from './distribution-ops-support.js';
|
|
11
|
+
import { EXIT, printJsonOk } from './output.js';
|
|
12
|
+
import { parseCommandFlags, printCliFailure, serviceFailure } from './shared.js';
|
|
13
|
+
export async function runDistributions(rest, env, home) {
|
|
14
|
+
const [subcommand, ...tail] = rest;
|
|
15
|
+
if (subcommand === 'publish')
|
|
16
|
+
return publishDistribution(tail, env, home);
|
|
17
|
+
if (subcommand === 'list')
|
|
18
|
+
return listDistributions(tail, env, home);
|
|
19
|
+
if (subcommand === 'inspect')
|
|
20
|
+
return inspectDistribution(tail, env, home);
|
|
21
|
+
if (subcommand === 'download')
|
|
22
|
+
return downloadDistribution(tail, env, home);
|
|
23
|
+
const lifecycle = await runDistributionLifecycle(subcommand, tail, env, home);
|
|
24
|
+
if (lifecycle !== undefined)
|
|
25
|
+
return lifecycle;
|
|
26
|
+
return distributionUsageFailure('noodle distributions requires a publish, read, or lifecycle action', PUBLISH_USAGE, rest.includes('--json'));
|
|
27
|
+
}
|
|
28
|
+
async function publishDistribution(rest, env, home) {
|
|
29
|
+
const parsed = parseCommandFlags(rest, {
|
|
30
|
+
values: {
|
|
31
|
+
'--target': 'target',
|
|
32
|
+
'--category': 'category',
|
|
33
|
+
'--connectors': 'connectors',
|
|
34
|
+
'--org': 'org',
|
|
35
|
+
'--service': 'service',
|
|
36
|
+
'--auth-token': 'authToken',
|
|
37
|
+
},
|
|
38
|
+
booleans: { '--json': 'json' },
|
|
39
|
+
});
|
|
40
|
+
const common = commonDistributionArgs(parsed);
|
|
41
|
+
if (parsed.parseError !== undefined) {
|
|
42
|
+
return distributionUsageFailure(parsed.parseError, PUBLISH_USAGE, common.json);
|
|
43
|
+
}
|
|
44
|
+
const [deploymentId, explicitEntrypoint, ...extra] = parsed.positional;
|
|
45
|
+
if (deploymentId === undefined || extra.length > 0) {
|
|
46
|
+
return distributionUsageFailure('publish requires one deployment id and accepts at most one server.ts entrypoint', PUBLISH_USAGE, common.json);
|
|
47
|
+
}
|
|
48
|
+
if (!isDistributionTarget(parsed.target)) {
|
|
49
|
+
return distributionUsageFailure('publish requires --target openai or claude', PUBLISH_USAGE, common.json);
|
|
50
|
+
}
|
|
51
|
+
if (parsed.target === 'openai' && parsed.category === undefined) {
|
|
52
|
+
return distributionUsageFailure('OpenAI publishing requires --category', PUBLISH_USAGE, common.json);
|
|
53
|
+
}
|
|
54
|
+
if (parsed.target === 'claude' && parsed.category !== undefined) {
|
|
55
|
+
return distributionUsageFailure('--category is only valid with --target openai', PUBLISH_USAGE, common.json);
|
|
56
|
+
}
|
|
57
|
+
const entrypoint = explicitEntrypoint ?? resolveLocalEntrypoint();
|
|
58
|
+
if (entrypoint === undefined) {
|
|
59
|
+
return printCliFailure('distributions publish', distributionFailure('project_entrypoint_required', 'No project entrypoint was found.', 'Pass server.ts explicitly or link the current project.', PUBLISH_USAGE, EXIT.USAGE), common.json);
|
|
60
|
+
}
|
|
61
|
+
const hosted = await resolveDistributionHostedContext(common, env, home, 'distributions publish');
|
|
62
|
+
if (typeof hosted === 'number')
|
|
63
|
+
return hosted;
|
|
64
|
+
try {
|
|
65
|
+
const deploymentUrl = distributionDeploymentUrl(hosted, deploymentId);
|
|
66
|
+
const [deploymentBody, packageBody] = await Promise.all([
|
|
67
|
+
serviceJson(deploymentUrl, hosted.token),
|
|
68
|
+
serviceJson(`${deploymentUrl}/package`, hosted.token),
|
|
69
|
+
]);
|
|
70
|
+
const deployment = DeploymentResponseSchema.parse(deploymentBody).data;
|
|
71
|
+
const deployedPackage = DeploymentPackageResponseShapeSchema.parse(packageBody).data;
|
|
72
|
+
const eligibilityFailure = deploymentDistributionEligibilityFailure(deployment, deployedPackage.active);
|
|
73
|
+
if (eligibilityFailure !== undefined) {
|
|
74
|
+
return printCliFailure('distributions publish', eligibilityFailure, common.json);
|
|
75
|
+
}
|
|
76
|
+
const compiled = await compileLocalInput({
|
|
77
|
+
manifestPath: entrypoint,
|
|
78
|
+
...(parsed.connectors === undefined ? {} : { connectorsPath: parsed.connectors }),
|
|
79
|
+
});
|
|
80
|
+
if (!compiled.ok) {
|
|
81
|
+
return printCliFailure('distributions publish', {
|
|
82
|
+
...distributionFailure('distribution_compile_failed', 'The local project could not be compiled for distribution.', 'Fix the compiler findings, then publish again.', 'noodle validate --json'),
|
|
83
|
+
errors: compiled.errors,
|
|
84
|
+
}, common.json);
|
|
85
|
+
}
|
|
86
|
+
if (compiled.compiled.appPackage === undefined || compiled.distribution === undefined) {
|
|
87
|
+
return printCliFailure('distributions publish', distributionFailure('distribution_unavailable', 'Hosted distribution requires both agentGuide and distribution metadata.', 'Add the missing authoring metadata and validate the project.', 'noodle validate --json'), common.json);
|
|
88
|
+
}
|
|
89
|
+
const localSnapshot = createAppPackageSnapshotV1(compiled.compiled.appPackage, renderProductSkillBundle, validateRenderedProductSkillFiles);
|
|
90
|
+
if (localSnapshot.snapshotSha256 !== deployedPackage.snapshot.snapshotSha256) {
|
|
91
|
+
return printCliFailure('distributions publish', distributionFailure('distribution_source_mismatch', 'Local source does not match the immutable package deployed under this id.', 'Deploy the current source, or publish from the exact source used for this deployment.', `noodle deployments package ${deploymentId} --org ${hosted.org}`), common.json);
|
|
92
|
+
}
|
|
93
|
+
let assets;
|
|
94
|
+
try {
|
|
95
|
+
assets = readDistributionAssets(compiled.distribution, compiled.rootDir);
|
|
96
|
+
}
|
|
97
|
+
catch {
|
|
98
|
+
return printCliFailure('distributions publish', distributionFailure('distribution_assets_invalid', 'Distribution assets could not be read safely.', 'Use existing project-relative image files declared through asset(...).', 'noodle validate --json'), common.json);
|
|
99
|
+
}
|
|
100
|
+
const request = {
|
|
101
|
+
appPackage: compiled.compiled.appPackage,
|
|
102
|
+
distribution: compiled.distribution,
|
|
103
|
+
mcpServer: { url: deployment.endpointUrl, transport: 'streamable-http' },
|
|
104
|
+
assets,
|
|
105
|
+
};
|
|
106
|
+
const packaged = parsed.target === 'openai'
|
|
107
|
+
? packageOpenAiPlugin(request, {
|
|
108
|
+
state: 'submission',
|
|
109
|
+
category: parsed.category,
|
|
110
|
+
})
|
|
111
|
+
: packageClaudePlugin(request);
|
|
112
|
+
if (!packaged.ok) {
|
|
113
|
+
return printCliFailure('distributions publish', {
|
|
114
|
+
...distributionFailure('distribution_package_invalid', `The ${parsed.target} adapter rejected this package.`, 'Resolve each target finding, then publish again.', PUBLISH_USAGE),
|
|
115
|
+
errors: packaged.issues.map(({ code, path, message }) => ({ code, path, message })),
|
|
116
|
+
}, common.json);
|
|
117
|
+
}
|
|
118
|
+
const publishRequest = DistributionPublishRequestSchema.parse({
|
|
119
|
+
schemaVersion: 1,
|
|
120
|
+
target: parsed.target,
|
|
121
|
+
variant: parsed.target === 'openai' ? 'submission' : 'plugin',
|
|
122
|
+
snapshotSha256: localSnapshot.snapshotSha256,
|
|
123
|
+
archive: {
|
|
124
|
+
encoding: 'base64',
|
|
125
|
+
content: Buffer.from(packaged.archive.bytes).toString('base64'),
|
|
126
|
+
byteLength: packaged.archive.byteLength,
|
|
127
|
+
sha256: packaged.archive.sha256,
|
|
128
|
+
treeSha256: packaged.treeSha256,
|
|
129
|
+
adapterVersion: packaged.adapterVersion,
|
|
130
|
+
},
|
|
131
|
+
});
|
|
132
|
+
const response = DistributionPublishResponseSchema.parse(await serviceJson(`${deploymentUrl}/distributions`, hosted.token, {
|
|
133
|
+
method: 'POST',
|
|
134
|
+
headers: { 'content-type': 'application/json' },
|
|
135
|
+
body: JSON.stringify(publishRequest),
|
|
136
|
+
}));
|
|
137
|
+
const data = { distribution: response.data, replayed: response.replayed };
|
|
138
|
+
if (common.json)
|
|
139
|
+
printJsonOk(data);
|
|
140
|
+
else
|
|
141
|
+
printPublishedDistribution(response.data, response.replayed);
|
|
142
|
+
return EXIT.OK;
|
|
143
|
+
}
|
|
144
|
+
catch (error) {
|
|
145
|
+
return printCliFailure('distributions publish', serviceFailure('distributions publish', error, PUBLISH_USAGE), common.json);
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
async function listDistributions(rest, env, home) {
|
|
149
|
+
const parsed = parseCommandFlags(rest, {
|
|
150
|
+
values: {
|
|
151
|
+
'--target': 'target',
|
|
152
|
+
'--org': 'org',
|
|
153
|
+
'--service': 'service',
|
|
154
|
+
'--auth-token': 'authToken',
|
|
155
|
+
},
|
|
156
|
+
booleans: { '--json': 'json' },
|
|
157
|
+
});
|
|
158
|
+
const common = commonDistributionArgs(parsed);
|
|
159
|
+
if (parsed.parseError !== undefined) {
|
|
160
|
+
return distributionUsageFailure(parsed.parseError, LIST_USAGE, common.json);
|
|
161
|
+
}
|
|
162
|
+
const [deploymentId, ...extra] = parsed.positional;
|
|
163
|
+
if (deploymentId === undefined || extra.length > 0) {
|
|
164
|
+
return distributionUsageFailure('list requires exactly one deployment id', LIST_USAGE, common.json);
|
|
165
|
+
}
|
|
166
|
+
if (parsed.target !== undefined && !isDistributionTarget(parsed.target)) {
|
|
167
|
+
return distributionUsageFailure('--target must be openai or claude', LIST_USAGE, common.json);
|
|
168
|
+
}
|
|
169
|
+
const hosted = await resolveDistributionHostedContext(common, env, home, 'distributions list');
|
|
170
|
+
if (typeof hosted === 'number')
|
|
171
|
+
return hosted;
|
|
172
|
+
try {
|
|
173
|
+
const url = new URL(`${distributionDeploymentUrl(hosted, deploymentId)}/distributions`);
|
|
174
|
+
if (parsed.target !== undefined)
|
|
175
|
+
url.searchParams.set('target', parsed.target);
|
|
176
|
+
const response = DistributionListResponseSchema.parse(await serviceJson(url.toString(), hosted.token));
|
|
177
|
+
if (common.json)
|
|
178
|
+
printJsonOk(response.data);
|
|
179
|
+
else
|
|
180
|
+
printDistributionVersions(response.data.versions);
|
|
181
|
+
return EXIT.OK;
|
|
182
|
+
}
|
|
183
|
+
catch (error) {
|
|
184
|
+
return printCliFailure('distributions list', serviceFailure('distributions list', error, LIST_USAGE), common.json);
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
async function inspectDistribution(rest, env, home) {
|
|
188
|
+
const parsed = parseCommandFlags(rest, {
|
|
189
|
+
values: { '--org': 'org', '--service': 'service', '--auth-token': 'authToken' },
|
|
190
|
+
booleans: { '--json': 'json' },
|
|
191
|
+
});
|
|
192
|
+
const common = commonDistributionArgs(parsed);
|
|
193
|
+
if (parsed.parseError !== undefined) {
|
|
194
|
+
return distributionUsageFailure(parsed.parseError, INSPECT_USAGE, common.json);
|
|
195
|
+
}
|
|
196
|
+
const [distributionId, ...extra] = parsed.positional;
|
|
197
|
+
if (distributionId === undefined || extra.length > 0) {
|
|
198
|
+
return distributionUsageFailure('inspect requires exactly one distribution id', INSPECT_USAGE, common.json);
|
|
199
|
+
}
|
|
200
|
+
const hosted = await resolveDistributionHostedContext(common, env, home, 'distributions inspect');
|
|
201
|
+
if (typeof hosted === 'number')
|
|
202
|
+
return hosted;
|
|
203
|
+
try {
|
|
204
|
+
const response = DistributionResponseSchema.parse(await serviceJson(distributionVersionUrl(hosted, distributionId), hosted.token));
|
|
205
|
+
const data = {
|
|
206
|
+
...response.data,
|
|
207
|
+
...(response.lifecycle === undefined ? {} : { lifecycle: response.lifecycle }),
|
|
208
|
+
};
|
|
209
|
+
if (common.json)
|
|
210
|
+
printJsonOk(data);
|
|
211
|
+
else
|
|
212
|
+
printDistributionVersion(response.data, response.lifecycle);
|
|
213
|
+
return EXIT.OK;
|
|
214
|
+
}
|
|
215
|
+
catch (error) {
|
|
216
|
+
return printCliFailure('distributions inspect', serviceFailure('distributions inspect', error, INSPECT_USAGE), common.json);
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
async function downloadDistribution(rest, env, home) {
|
|
220
|
+
const parsed = parseCommandFlags(rest, {
|
|
221
|
+
values: {
|
|
222
|
+
'--output': 'output',
|
|
223
|
+
'--org': 'org',
|
|
224
|
+
'--service': 'service',
|
|
225
|
+
'--auth-token': 'authToken',
|
|
226
|
+
},
|
|
227
|
+
booleans: { '--json': 'json' },
|
|
228
|
+
});
|
|
229
|
+
const common = commonDistributionArgs(parsed);
|
|
230
|
+
if (parsed.parseError !== undefined) {
|
|
231
|
+
return distributionUsageFailure(parsed.parseError, DOWNLOAD_USAGE, common.json);
|
|
232
|
+
}
|
|
233
|
+
const [distributionId, ...extra] = parsed.positional;
|
|
234
|
+
if (distributionId === undefined || extra.length > 0 || parsed.output === undefined) {
|
|
235
|
+
return distributionUsageFailure('download requires one distribution id and --output <archive.zip>', DOWNLOAD_USAGE, common.json);
|
|
236
|
+
}
|
|
237
|
+
const hosted = await resolveDistributionHostedContext(common, env, home, 'distributions download');
|
|
238
|
+
if (typeof hosted === 'number')
|
|
239
|
+
return hosted;
|
|
240
|
+
try {
|
|
241
|
+
const base = distributionVersionUrl(hosted, distributionId);
|
|
242
|
+
const metadata = DistributionResponseSchema.parse(await serviceJson(base, hosted.token)).data;
|
|
243
|
+
const downloaded = await serviceBinary(`${base}/archive`, hosted.token);
|
|
244
|
+
if (!distributionDownloadMatches(metadata, downloaded.bytes, downloaded.headers)) {
|
|
245
|
+
return printCliFailure('distributions download', distributionFailure('distribution_download_integrity_failed', 'Downloaded archive bytes do not match the immutable distribution metadata.', 'Do not use these bytes; retry the download or inspect the distribution.', `noodle distributions inspect ${distributionId} --org ${hosted.org}`), common.json);
|
|
246
|
+
}
|
|
247
|
+
try {
|
|
248
|
+
writeDistributionArchiveAtomically(parsed.output, downloaded.bytes, metadata.target);
|
|
249
|
+
}
|
|
250
|
+
catch {
|
|
251
|
+
return printCliFailure('distributions download', distributionFailure('distribution_download_write_failed', 'The verified archive could not be written.', 'Choose a writable output path and retry.', DOWNLOAD_USAGE), common.json);
|
|
252
|
+
}
|
|
253
|
+
const data = {
|
|
254
|
+
distribution: metadata,
|
|
255
|
+
output: parsed.output,
|
|
256
|
+
archiveSha256: metadata.archiveSha256,
|
|
257
|
+
byteLength: metadata.byteLength,
|
|
258
|
+
};
|
|
259
|
+
if (common.json)
|
|
260
|
+
printJsonOk(data);
|
|
261
|
+
else {
|
|
262
|
+
console.log(`downloaded: ${parsed.output}`);
|
|
263
|
+
console.log(`sha256: ${metadata.archiveSha256}`);
|
|
264
|
+
console.log(`bytes: ${metadata.byteLength}`);
|
|
265
|
+
}
|
|
266
|
+
return EXIT.OK;
|
|
267
|
+
}
|
|
268
|
+
catch (error) {
|
|
269
|
+
return printCliFailure('distributions download', serviceFailure('distributions download', error, DOWNLOAD_USAGE), common.json);
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
//# sourceMappingURL=distributions-ops.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"distributions-ops.js","sourceRoot":"","sources":["../../src/commands/distributions-ops.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
export interface ServiceJsonOptions {
|
|
2
|
+
readonly timeoutMs?: number;
|
|
3
|
+
}
|
|
4
|
+
export interface ServiceBinaryResponse {
|
|
5
|
+
readonly bytes: Uint8Array;
|
|
6
|
+
readonly headers: Headers;
|
|
7
|
+
}
|
|
8
|
+
export declare function serviceJson<T>(url: string, token: string | undefined, init?: RequestInit, fetchImpl?: typeof fetch, options?: ServiceJsonOptions): Promise<T>;
|
|
9
|
+
/** Fetch authenticated service bytes through the same timeout, retry, and redaction seam as JSON. */
|
|
10
|
+
export declare function serviceBinary(url: string, token: string | undefined, init?: RequestInit, fetchImpl?: typeof fetch, options?: ServiceJsonOptions): Promise<ServiceBinaryResponse>;
|
|
11
|
+
export declare class ServiceRequestError extends Error {
|
|
12
|
+
readonly status: number;
|
|
13
|
+
readonly code?: string;
|
|
14
|
+
readonly requestId?: string;
|
|
15
|
+
readonly retryAfterSeconds?: number;
|
|
16
|
+
constructor(input: {
|
|
17
|
+
readonly status: number;
|
|
18
|
+
readonly message: string;
|
|
19
|
+
readonly code?: string;
|
|
20
|
+
readonly requestId?: string;
|
|
21
|
+
readonly retryAfterSeconds?: number;
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=control-plane-request.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"control-plane-request.d.ts","sourceRoot":"","sources":["../src/control-plane-request.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;IAC3B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;CAC3B;AAID,wBAAsB,WAAW,CAAC,CAAC,EACjC,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,GAAG,SAAS,EACzB,IAAI,GAAE,WAAgB,EACtB,SAAS,GAAE,OAAO,KAAa,EAC/B,OAAO,GAAE,kBAAuB,GAC/B,OAAO,CAAC,CAAC,CAAC,CAaZ;AAED,qGAAqG;AACrG,wBAAsB,aAAa,CACjC,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,GAAG,SAAS,EACzB,IAAI,GAAE,WAAgB,EACtB,SAAS,GAAE,OAAO,KAAa,EAC/B,OAAO,GAAE,kBAAuB,GAC/B,OAAO,CAAC,qBAAqB,CAAC,CAahC;AA4GD,qBAAa,mBAAoB,SAAQ,KAAK;IAC5C,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC;gBAExB,KAAK,EAAE;QACjB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;QACxB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;QACzB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QACvB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;QAC5B,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC;KACrC;CAQF"}
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
import { currentCliVersion } from './update.js';
|
|
2
|
+
const DEFAULT_SERVICE_TIMEOUT_MS = 15_000;
|
|
3
|
+
export async function serviceJson(url, token, init = {}, fetchImpl = fetch, options = {}) {
|
|
4
|
+
return serviceRequest(url, token, init, fetchImpl, options, 'application/json', async (response) => {
|
|
5
|
+
if (response.status === 204)
|
|
6
|
+
return undefined;
|
|
7
|
+
return (await response.json());
|
|
8
|
+
});
|
|
9
|
+
}
|
|
10
|
+
/** Fetch authenticated service bytes through the same timeout, retry, and redaction seam as JSON. */
|
|
11
|
+
export async function serviceBinary(url, token, init = {}, fetchImpl = fetch, options = {}) {
|
|
12
|
+
return serviceRequest(url, token, init, fetchImpl, options, 'application/zip', async (response) => ({
|
|
13
|
+
bytes: new Uint8Array(await response.arrayBuffer()),
|
|
14
|
+
headers: response.headers,
|
|
15
|
+
}));
|
|
16
|
+
}
|
|
17
|
+
async function serviceRequest(url, token, init, fetchImpl, options, accept, read) {
|
|
18
|
+
const timeoutMs = options.timeoutMs ?? DEFAULT_SERVICE_TIMEOUT_MS;
|
|
19
|
+
const method = (init.method ?? 'GET').toUpperCase();
|
|
20
|
+
const maxAttempts = method === 'GET' ? 2 : 1;
|
|
21
|
+
let lastError;
|
|
22
|
+
for (let attempt = 1; attempt <= maxAttempts; attempt++) {
|
|
23
|
+
try {
|
|
24
|
+
const response = await fetchService(url, token, init, fetchImpl, timeoutMs, accept);
|
|
25
|
+
if (response.ok)
|
|
26
|
+
return await read(response);
|
|
27
|
+
const error = await serviceErrorFromResponse(response, token);
|
|
28
|
+
if (attempt < maxAttempts && isTransientStatus(error.status)) {
|
|
29
|
+
lastError = error;
|
|
30
|
+
continue;
|
|
31
|
+
}
|
|
32
|
+
throw error;
|
|
33
|
+
}
|
|
34
|
+
catch (error) {
|
|
35
|
+
const normalized = error instanceof ServiceRequestError
|
|
36
|
+
? error
|
|
37
|
+
: new ServiceRequestError({
|
|
38
|
+
status: 0,
|
|
39
|
+
message: error instanceof Error && error.name === 'AbortError'
|
|
40
|
+
? `request timed out after ${timeoutMs}ms`
|
|
41
|
+
: redactKnown(error instanceof Error ? error.message : String(error), token),
|
|
42
|
+
});
|
|
43
|
+
if (attempt < maxAttempts && isTransientStatus(normalized.status)) {
|
|
44
|
+
lastError = normalized;
|
|
45
|
+
continue;
|
|
46
|
+
}
|
|
47
|
+
throw normalized;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
throw lastError ?? new ServiceRequestError({ status: 0, message: 'request failed' });
|
|
51
|
+
}
|
|
52
|
+
async function fetchService(url, token, init, fetchImpl, timeoutMs, accept) {
|
|
53
|
+
const headers = new Headers(init.headers);
|
|
54
|
+
headers.set('accept', accept);
|
|
55
|
+
headers.set('x-noodle-cli-version', currentCliVersion());
|
|
56
|
+
if (token !== undefined)
|
|
57
|
+
headers.set('authorization', `Bearer ${token}`);
|
|
58
|
+
const controller = new AbortController();
|
|
59
|
+
const timer = setTimeout(() => controller.abort(), timeoutMs);
|
|
60
|
+
try {
|
|
61
|
+
return await fetchImpl(url, { ...init, headers, signal: controller.signal });
|
|
62
|
+
}
|
|
63
|
+
finally {
|
|
64
|
+
clearTimeout(timer);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
async function serviceErrorFromResponse(response, token) {
|
|
68
|
+
let message = `request failed (${response.status})`;
|
|
69
|
+
let code;
|
|
70
|
+
try {
|
|
71
|
+
const body = (await response.json());
|
|
72
|
+
if (typeof body.error === 'string')
|
|
73
|
+
message = body.error;
|
|
74
|
+
if (typeof body.code === 'string')
|
|
75
|
+
code = body.code;
|
|
76
|
+
}
|
|
77
|
+
catch { }
|
|
78
|
+
const requestId = response.headers.get('x-request-id') ?? response.headers.get('x-correlation-id') ?? undefined;
|
|
79
|
+
const retryAfterSeconds = parseRetryAfterSeconds(response.headers.get('retry-after'));
|
|
80
|
+
return new ServiceRequestError({
|
|
81
|
+
status: response.status,
|
|
82
|
+
message: redactKnown(message, token),
|
|
83
|
+
...(code !== undefined ? { code } : {}),
|
|
84
|
+
...(requestId !== undefined ? { requestId } : {}),
|
|
85
|
+
...(retryAfterSeconds !== undefined ? { retryAfterSeconds } : {}),
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
function parseRetryAfterSeconds(value) {
|
|
89
|
+
if (value === null)
|
|
90
|
+
return undefined;
|
|
91
|
+
const seconds = Number(value);
|
|
92
|
+
if (Number.isFinite(seconds) && seconds >= 0)
|
|
93
|
+
return Math.ceil(seconds);
|
|
94
|
+
const at = Date.parse(value);
|
|
95
|
+
if (!Number.isFinite(at))
|
|
96
|
+
return undefined;
|
|
97
|
+
return Math.max(0, Math.ceil((at - Date.now()) / 1000));
|
|
98
|
+
}
|
|
99
|
+
function isTransientStatus(status) {
|
|
100
|
+
return status === 0 || status === 408 || status === 429 || status >= 500;
|
|
101
|
+
}
|
|
102
|
+
function redactKnown(message, token) {
|
|
103
|
+
if (!token)
|
|
104
|
+
return message;
|
|
105
|
+
return message.split(token).join('[redacted]');
|
|
106
|
+
}
|
|
107
|
+
export class ServiceRequestError extends Error {
|
|
108
|
+
status;
|
|
109
|
+
code;
|
|
110
|
+
requestId;
|
|
111
|
+
retryAfterSeconds;
|
|
112
|
+
constructor(input) {
|
|
113
|
+
super(input.message);
|
|
114
|
+
this.name = 'ServiceRequestError';
|
|
115
|
+
this.status = input.status;
|
|
116
|
+
if (input.code !== undefined)
|
|
117
|
+
this.code = input.code;
|
|
118
|
+
if (input.requestId !== undefined)
|
|
119
|
+
this.requestId = input.requestId;
|
|
120
|
+
if (input.retryAfterSeconds !== undefined)
|
|
121
|
+
this.retryAfterSeconds = input.retryAfterSeconds;
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
//# sourceMappingURL=control-plane-request.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"control-plane-request.js","sourceRoot":"","sources":["../src/control-plane-request.ts"],"names":[],"mappings":"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"}
|