@harrylabsj/kiwi 0.6.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/LICENSE +201 -0
- package/README.md +150 -0
- package/contracts/candidate-agent-dto-1.0.README.md +39 -0
- package/contracts/candidate-agent-dto-1.0.schema.json +172 -0
- package/contracts/interop/kiwi-buyer-message-send.json +43 -0
- package/contracts/interop/knp-data-part-examples.json +243 -0
- package/contracts/kiwi-catalog/1.0/agent-record.schema.json +78 -0
- package/contracts/kiwi-catalog/1.0/listing-record.schema.json +88 -0
- package/contracts/kiwi-catalog/1.0/listing-search-result.schema.json +60 -0
- package/contracts/negotiation/1.0/schema.json +501 -0
- package/contracts/shopping.negotiation/0.1/capabilities.schema.json +47 -0
- package/contracts/shopping.negotiation/0.1/decision.schema.json +120 -0
- package/contracts/shopping.negotiation/0.1/policy-result.schema.json +52 -0
- package/contracts/shopping.negotiation/0.1/snapshot.schema.json +172 -0
- package/dist/a2a/client/client.d.ts +33 -0
- package/dist/a2a/client/client.js +161 -0
- package/dist/a2a/client/client.js.map +1 -0
- package/dist/a2a/client/error.d.ts +35 -0
- package/dist/a2a/client/error.js +34 -0
- package/dist/a2a/client/error.js.map +1 -0
- package/dist/a2a/client/index.d.ts +29 -0
- package/dist/a2a/client/index.js +26 -0
- package/dist/a2a/client/index.js.map +1 -0
- package/dist/a2a/client/jsonrpc.d.ts +49 -0
- package/dist/a2a/client/jsonrpc.js +85 -0
- package/dist/a2a/client/jsonrpc.js.map +1 -0
- package/dist/a2a/client/parse.d.ts +18 -0
- package/dist/a2a/client/parse.js +134 -0
- package/dist/a2a/client/parse.js.map +1 -0
- package/dist/a2a/client/types.d.ts +102 -0
- package/dist/a2a/client/types.js +26 -0
- package/dist/a2a/client/types.js.map +1 -0
- package/dist/a2a/client/url-policy.d.ts +44 -0
- package/dist/a2a/client/url-policy.js +242 -0
- package/dist/a2a/client/url-policy.js.map +1 -0
- package/dist/a2a/negotiate.d.ts +68 -0
- package/dist/a2a/negotiate.js +288 -0
- package/dist/a2a/negotiate.js.map +1 -0
- package/dist/a2a/node.d.ts +37 -0
- package/dist/a2a/node.js +155 -0
- package/dist/a2a/node.js.map +1 -0
- package/dist/a2a/server/auth.d.ts +38 -0
- package/dist/a2a/server/auth.js +112 -0
- package/dist/a2a/server/auth.js.map +1 -0
- package/dist/a2a/server/card.d.ts +19 -0
- package/dist/a2a/server/card.js +81 -0
- package/dist/a2a/server/card.js.map +1 -0
- package/dist/a2a/server/errors.d.ts +109 -0
- package/dist/a2a/server/errors.js +178 -0
- package/dist/a2a/server/errors.js.map +1 -0
- package/dist/a2a/server/handler.d.ts +22 -0
- package/dist/a2a/server/handler.js +57 -0
- package/dist/a2a/server/handler.js.map +1 -0
- package/dist/a2a/server/inbound-message.d.ts +37 -0
- package/dist/a2a/server/inbound-message.js +104 -0
- package/dist/a2a/server/inbound-message.js.map +1 -0
- package/dist/a2a/server/index.d.ts +43 -0
- package/dist/a2a/server/index.js +42 -0
- package/dist/a2a/server/index.js.map +1 -0
- package/dist/a2a/server/merchant-handler.d.ts +69 -0
- package/dist/a2a/server/merchant-handler.js +316 -0
- package/dist/a2a/server/merchant-handler.js.map +1 -0
- package/dist/a2a/server/pipeline.d.ts +69 -0
- package/dist/a2a/server/pipeline.js +329 -0
- package/dist/a2a/server/pipeline.js.map +1 -0
- package/dist/a2a/server/server.d.ts +64 -0
- package/dist/a2a/server/server.js +420 -0
- package/dist/a2a/server/server.js.map +1 -0
- package/dist/a2a/server/task-registry.d.ts +31 -0
- package/dist/a2a/server/task-registry.js +67 -0
- package/dist/a2a/server/task-registry.js.map +1 -0
- package/dist/a2a/server/throttle.d.ts +154 -0
- package/dist/a2a/server/throttle.js +289 -0
- package/dist/a2a/server/throttle.js.map +1 -0
- package/dist/a2a/server/types.d.ts +191 -0
- package/dist/a2a/server/types.js +17 -0
- package/dist/a2a/server/types.js.map +1 -0
- package/dist/a2a/server/ucp.d.ts +49 -0
- package/dist/a2a/server/ucp.js +85 -0
- package/dist/a2a/server/ucp.js.map +1 -0
- package/dist/a2a/task/index.d.ts +24 -0
- package/dist/a2a/task/index.js +22 -0
- package/dist/a2a/task/index.js.map +1 -0
- package/dist/a2a/task/ledger.d.ts +48 -0
- package/dist/a2a/task/ledger.js +65 -0
- package/dist/a2a/task/ledger.js.map +1 -0
- package/dist/a2a/task/poller.d.ts +93 -0
- package/dist/a2a/task/poller.js +184 -0
- package/dist/a2a/task/poller.js.map +1 -0
- package/dist/a2a/task/state.d.ts +72 -0
- package/dist/a2a/task/state.js +119 -0
- package/dist/a2a/task/state.js.map +1 -0
- package/dist/a2a/ucp-agent.d.ts +49 -0
- package/dist/a2a/ucp-agent.js +78 -0
- package/dist/a2a/ucp-agent.js.map +1 -0
- package/dist/agent/agent-db.d.ts +31 -0
- package/dist/agent/agent-db.js +91 -0
- package/dist/agent/agent-db.js.map +1 -0
- package/dist/agent/buyer/buyer-tools.d.ts +70 -0
- package/dist/agent/buyer/buyer-tools.js +1353 -0
- package/dist/agent/buyer/buyer-tools.js.map +1 -0
- package/dist/agent/buyer/ranker.d.ts +53 -0
- package/dist/agent/buyer/ranker.js +153 -0
- package/dist/agent/buyer/ranker.js.map +1 -0
- package/dist/agent/buyer/scheduler.d.ts +58 -0
- package/dist/agent/buyer/scheduler.js +317 -0
- package/dist/agent/buyer/scheduler.js.map +1 -0
- package/dist/agent/buyer/search-loop.d.ts +42 -0
- package/dist/agent/buyer/search-loop.js +280 -0
- package/dist/agent/buyer/search-loop.js.map +1 -0
- package/dist/agent/buyer/task-store.d.ts +178 -0
- package/dist/agent/buyer/task-store.js +637 -0
- package/dist/agent/buyer/task-store.js.map +1 -0
- package/dist/agent/buyer/types.d.ts +222 -0
- package/dist/agent/buyer/types.js +124 -0
- package/dist/agent/buyer/types.js.map +1 -0
- package/dist/agent/chat-tools.d.ts +41 -0
- package/dist/agent/chat-tools.js +193 -0
- package/dist/agent/chat-tools.js.map +1 -0
- package/dist/agent/chat-tui.d.ts +49 -0
- package/dist/agent/chat-tui.js +314 -0
- package/dist/agent/chat-tui.js.map +1 -0
- package/dist/agent/connector/fake-connector.d.ts +50 -0
- package/dist/agent/connector/fake-connector.js +138 -0
- package/dist/agent/connector/fake-connector.js.map +1 -0
- package/dist/agent/connector/http-connector.d.ts +49 -0
- package/dist/agent/connector/http-connector.js +208 -0
- package/dist/agent/connector/http-connector.js.map +1 -0
- package/dist/agent/connector/types.d.ts +103 -0
- package/dist/agent/connector/types.js +97 -0
- package/dist/agent/connector/types.js.map +1 -0
- package/dist/agent/fake-chat-model.d.ts +22 -0
- package/dist/agent/fake-chat-model.js +134 -0
- package/dist/agent/fake-chat-model.js.map +1 -0
- package/dist/agent/kernel.d.ts +258 -0
- package/dist/agent/kernel.js +1099 -0
- package/dist/agent/kernel.js.map +1 -0
- package/dist/agent/memory/schema.d.ts +32 -0
- package/dist/agent/memory/schema.js +291 -0
- package/dist/agent/memory/schema.js.map +1 -0
- package/dist/agent/memory/store.d.ts +193 -0
- package/dist/agent/memory/store.js +881 -0
- package/dist/agent/memory/store.js.map +1 -0
- package/dist/agent/memory/types.d.ts +139 -0
- package/dist/agent/memory/types.js +119 -0
- package/dist/agent/memory/types.js.map +1 -0
- package/dist/agent/memory/vault.d.ts +49 -0
- package/dist/agent/memory/vault.js +125 -0
- package/dist/agent/memory/vault.js.map +1 -0
- package/dist/agent/merchant/action-candidate.d.ts +106 -0
- package/dist/agent/merchant/action-candidate.js +241 -0
- package/dist/agent/merchant/action-candidate.js.map +1 -0
- package/dist/agent/merchant/credential-broker.d.ts +67 -0
- package/dist/agent/merchant/credential-broker.js +76 -0
- package/dist/agent/merchant/credential-broker.js.map +1 -0
- package/dist/agent/merchant/fake-merchant-client.d.ts +47 -0
- package/dist/agent/merchant/fake-merchant-client.js +143 -0
- package/dist/agent/merchant/fake-merchant-client.js.map +1 -0
- package/dist/agent/merchant/merchant-client.d.ts +49 -0
- package/dist/agent/merchant/merchant-client.js +186 -0
- package/dist/agent/merchant/merchant-client.js.map +1 -0
- package/dist/agent/merchant/merchant-tools.d.ts +74 -0
- package/dist/agent/merchant/merchant-tools.js +582 -0
- package/dist/agent/merchant/merchant-tools.js.map +1 -0
- package/dist/agent/merchant/types.d.ts +119 -0
- package/dist/agent/merchant/types.js +133 -0
- package/dist/agent/merchant/types.js.map +1 -0
- package/dist/agent/mode.d.ts +32 -0
- package/dist/agent/mode.js +34 -0
- package/dist/agent/mode.js.map +1 -0
- package/dist/agent/negotiation-chat.d.ts +81 -0
- package/dist/agent/negotiation-chat.js +330 -0
- package/dist/agent/negotiation-chat.js.map +1 -0
- package/dist/agent/session.d.ts +22 -0
- package/dist/agent/session.js +164 -0
- package/dist/agent/session.js.map +1 -0
- package/dist/agent/system-prompt.d.ts +26 -0
- package/dist/agent/system-prompt.js +77 -0
- package/dist/agent/system-prompt.js.map +1 -0
- package/dist/agent/write-gate.d.ts +98 -0
- package/dist/agent/write-gate.js +76 -0
- package/dist/agent/write-gate.js.map +1 -0
- package/dist/cli.d.ts +18 -0
- package/dist/cli.js +1139 -0
- package/dist/cli.js.map +1 -0
- package/dist/commerce/data-source.d.ts +88 -0
- package/dist/commerce/data-source.js +25 -0
- package/dist/commerce/data-source.js.map +1 -0
- package/dist/commerce/erp-source.d.ts +51 -0
- package/dist/commerce/erp-source.js +184 -0
- package/dist/commerce/erp-source.js.map +1 -0
- package/dist/commerce/fake-client.d.ts +167 -0
- package/dist/commerce/fake-client.js +549 -0
- package/dist/commerce/fake-client.js.map +1 -0
- package/dist/commerce/http-client.d.ts +73 -0
- package/dist/commerce/http-client.js +284 -0
- package/dist/commerce/http-client.js.map +1 -0
- package/dist/commerce/local-db-source.d.ts +50 -0
- package/dist/commerce/local-db-source.js +162 -0
- package/dist/commerce/local-db-source.js.map +1 -0
- package/dist/commerce/shopping-cli-source.d.ts +57 -0
- package/dist/commerce/shopping-cli-source.js +206 -0
- package/dist/commerce/shopping-cli-source.js.map +1 -0
- package/dist/commerce/types.d.ts +146 -0
- package/dist/commerce/types.js +31 -0
- package/dist/commerce/types.js.map +1 -0
- package/dist/config/profile.d.ts +122 -0
- package/dist/config/profile.js +386 -0
- package/dist/config/profile.js.map +1 -0
- package/dist/contracts/negotiation-schema.d.ts +28 -0
- package/dist/contracts/negotiation-schema.js +101 -0
- package/dist/contracts/negotiation-schema.js.map +1 -0
- package/dist/contracts/schemas.d.ts +31 -0
- package/dist/contracts/schemas.js +122 -0
- package/dist/contracts/schemas.js.map +1 -0
- package/dist/counterparty/a2a-direct/index.d.ts +41 -0
- package/dist/counterparty/a2a-direct/index.js +330 -0
- package/dist/counterparty/a2a-direct/index.js.map +1 -0
- package/dist/counterparty/channel.d.ts +200 -0
- package/dist/counterparty/channel.js +61 -0
- package/dist/counterparty/channel.js.map +1 -0
- package/dist/counterparty/index.d.ts +28 -0
- package/dist/counterparty/index.js +24 -0
- package/dist/counterparty/index.js.map +1 -0
- package/dist/counterparty/platform-api/index.d.ts +41 -0
- package/dist/counterparty/platform-api/index.js +65 -0
- package/dist/counterparty/platform-api/index.js.map +1 -0
- package/dist/counterparty/registry.d.ts +51 -0
- package/dist/counterparty/registry.js +71 -0
- package/dist/counterparty/registry.js.map +1 -0
- package/dist/counterparty/shopping-cli-hosted/index.d.ts +36 -0
- package/dist/counterparty/shopping-cli-hosted/index.js +337 -0
- package/dist/counterparty/shopping-cli-hosted/index.js.map +1 -0
- package/dist/discovery/agent-card/error.d.ts +28 -0
- package/dist/discovery/agent-card/error.js +31 -0
- package/dist/discovery/agent-card/error.js.map +1 -0
- package/dist/discovery/agent-card/extensions.d.ts +20 -0
- package/dist/discovery/agent-card/extensions.js +59 -0
- package/dist/discovery/agent-card/extensions.js.map +1 -0
- package/dist/discovery/agent-card/index.d.ts +29 -0
- package/dist/discovery/agent-card/index.js +38 -0
- package/dist/discovery/agent-card/index.js.map +1 -0
- package/dist/discovery/agent-card/secrets.d.ts +30 -0
- package/dist/discovery/agent-card/secrets.js +240 -0
- package/dist/discovery/agent-card/secrets.js.map +1 -0
- package/dist/discovery/agent-card/types.d.ts +110 -0
- package/dist/discovery/agent-card/types.js +37 -0
- package/dist/discovery/agent-card/types.js.map +1 -0
- package/dist/discovery/agent-card/validate.d.ts +31 -0
- package/dist/discovery/agent-card/validate.js +210 -0
- package/dist/discovery/agent-card/validate.js.map +1 -0
- package/dist/discovery/capability/error.d.ts +23 -0
- package/dist/discovery/capability/error.js +28 -0
- package/dist/discovery/capability/error.js.map +1 -0
- package/dist/discovery/capability/index.d.ts +21 -0
- package/dist/discovery/capability/index.js +21 -0
- package/dist/discovery/capability/index.js.map +1 -0
- package/dist/discovery/capability/intersect.d.ts +56 -0
- package/dist/discovery/capability/intersect.js +137 -0
- package/dist/discovery/capability/intersect.js.map +1 -0
- package/dist/discovery/catalog-source/errors.d.ts +32 -0
- package/dist/discovery/catalog-source/errors.js +41 -0
- package/dist/discovery/catalog-source/errors.js.map +1 -0
- package/dist/discovery/catalog-source/index.d.ts +30 -0
- package/dist/discovery/catalog-source/index.js +29 -0
- package/dist/discovery/catalog-source/index.js.map +1 -0
- package/dist/discovery/catalog-source/kiwi-record.d.ts +183 -0
- package/dist/discovery/catalog-source/kiwi-record.js +72 -0
- package/dist/discovery/catalog-source/kiwi-record.js.map +1 -0
- package/dist/discovery/catalog-source/kiwi-schema.d.ts +33 -0
- package/dist/discovery/catalog-source/kiwi-schema.js +106 -0
- package/dist/discovery/catalog-source/kiwi-schema.js.map +1 -0
- package/dist/discovery/catalog-source/kiwi-source.d.ts +38 -0
- package/dist/discovery/catalog-source/kiwi-source.js +318 -0
- package/dist/discovery/catalog-source/kiwi-source.js.map +1 -0
- package/dist/discovery/catalog-source/register.d.ts +48 -0
- package/dist/discovery/catalog-source/register.js +83 -0
- package/dist/discovery/catalog-source/register.js.map +1 -0
- package/dist/discovery/catalog-source/schema.d.ts +21 -0
- package/dist/discovery/catalog-source/schema.js +63 -0
- package/dist/discovery/catalog-source/schema.js.map +1 -0
- package/dist/discovery/catalog-source/source.d.ts +45 -0
- package/dist/discovery/catalog-source/source.js +197 -0
- package/dist/discovery/catalog-source/source.js.map +1 -0
- package/dist/discovery/catalog-source/types.d.ts +122 -0
- package/dist/discovery/catalog-source/types.js +30 -0
- package/dist/discovery/catalog-source/types.js.map +1 -0
- package/dist/discovery/index.d.ts +25 -0
- package/dist/discovery/index.js +25 -0
- package/dist/discovery/index.js.map +1 -0
- package/dist/discovery/resolve.d.ts +175 -0
- package/dist/discovery/resolve.js +367 -0
- package/dist/discovery/resolve.js.map +1 -0
- package/dist/discovery/ucp/error.d.ts +25 -0
- package/dist/discovery/ucp/error.js +27 -0
- package/dist/discovery/ucp/error.js.map +1 -0
- package/dist/discovery/ucp/index.d.ts +33 -0
- package/dist/discovery/ucp/index.js +28 -0
- package/dist/discovery/ucp/index.js.map +1 -0
- package/dist/discovery/ucp/intersect.d.ts +148 -0
- package/dist/discovery/ucp/intersect.js +312 -0
- package/dist/discovery/ucp/intersect.js.map +1 -0
- package/dist/discovery/ucp/resolver.d.ts +62 -0
- package/dist/discovery/ucp/resolver.js +214 -0
- package/dist/discovery/ucp/resolver.js.map +1 -0
- package/dist/discovery/ucp/types.d.ts +97 -0
- package/dist/discovery/ucp/types.js +103 -0
- package/dist/discovery/ucp/types.js.map +1 -0
- package/dist/discovery/ucp/validate.d.ts +38 -0
- package/dist/discovery/ucp/validate.js +232 -0
- package/dist/discovery/ucp/validate.js.map +1 -0
- package/dist/discovery/ucp/vendor.d.ts +60 -0
- package/dist/discovery/ucp/vendor.js +61 -0
- package/dist/discovery/ucp/vendor.js.map +1 -0
- package/dist/doctor.d.ts +26 -0
- package/dist/doctor.js +113 -0
- package/dist/doctor.js.map +1 -0
- package/dist/exit-codes.d.ts +26 -0
- package/dist/exit-codes.js +27 -0
- package/dist/exit-codes.js.map +1 -0
- package/dist/fanout/disclosure.d.ts +138 -0
- package/dist/fanout/disclosure.js +188 -0
- package/dist/fanout/disclosure.js.map +1 -0
- package/dist/fanout/index.d.ts +32 -0
- package/dist/fanout/index.js +30 -0
- package/dist/fanout/index.js.map +1 -0
- package/dist/fanout/orchestrator.d.ts +153 -0
- package/dist/fanout/orchestrator.js +439 -0
- package/dist/fanout/orchestrator.js.map +1 -0
- package/dist/fanout/policy.d.ts +128 -0
- package/dist/fanout/policy.js +130 -0
- package/dist/fanout/policy.js.map +1 -0
- package/dist/handoff/acp-commerce.d.ts +58 -0
- package/dist/handoff/acp-commerce.js +69 -0
- package/dist/handoff/acp-commerce.js.map +1 -0
- package/dist/handoff/authorization.d.ts +127 -0
- package/dist/handoff/authorization.js +107 -0
- package/dist/handoff/authorization.js.map +1 -0
- package/dist/handoff/candidate.d.ts +94 -0
- package/dist/handoff/candidate.js +172 -0
- package/dist/handoff/candidate.js.map +1 -0
- package/dist/handoff/channel.d.ts +88 -0
- package/dist/handoff/channel.js +189 -0
- package/dist/handoff/channel.js.map +1 -0
- package/dist/handoff/completion.d.ts +44 -0
- package/dist/handoff/completion.js +136 -0
- package/dist/handoff/completion.js.map +1 -0
- package/dist/handoff/delivery.d.ts +59 -0
- package/dist/handoff/delivery.js +185 -0
- package/dist/handoff/delivery.js.map +1 -0
- package/dist/handoff/destination.d.ts +39 -0
- package/dist/handoff/destination.js +99 -0
- package/dist/handoff/destination.js.map +1 -0
- package/dist/handoff/errors.d.ts +34 -0
- package/dist/handoff/errors.js +47 -0
- package/dist/handoff/errors.js.map +1 -0
- package/dist/handoff/idempotency.d.ts +51 -0
- package/dist/handoff/idempotency.js +168 -0
- package/dist/handoff/idempotency.js.map +1 -0
- package/dist/handoff/index.d.ts +46 -0
- package/dist/handoff/index.js +48 -0
- package/dist/handoff/index.js.map +1 -0
- package/dist/handoff/ledger.d.ts +94 -0
- package/dist/handoff/ledger.js +195 -0
- package/dist/handoff/ledger.js.map +1 -0
- package/dist/handoff/lifecycle.d.ts +29 -0
- package/dist/handoff/lifecycle.js +102 -0
- package/dist/handoff/lifecycle.js.map +1 -0
- package/dist/handoff/metrics.d.ts +56 -0
- package/dist/handoff/metrics.js +78 -0
- package/dist/handoff/metrics.js.map +1 -0
- package/dist/handoff/operator-approval.d.ts +143 -0
- package/dist/handoff/operator-approval.js +287 -0
- package/dist/handoff/operator-approval.js.map +1 -0
- package/dist/handoff/order-record.d.ts +104 -0
- package/dist/handoff/order-record.js +235 -0
- package/dist/handoff/order-record.js.map +1 -0
- package/dist/handoff/package.d.ts +102 -0
- package/dist/handoff/package.js +132 -0
- package/dist/handoff/package.js.map +1 -0
- package/dist/handoff/transaction.d.ts +96 -0
- package/dist/handoff/transaction.js +263 -0
- package/dist/handoff/transaction.js.map +1 -0
- package/dist/handoff/ucp-checkout/cart-channel.d.ts +111 -0
- package/dist/handoff/ucp-checkout/cart-channel.js +370 -0
- package/dist/handoff/ucp-checkout/cart-channel.js.map +1 -0
- package/dist/handoff/ucp-checkout/cart-parse.d.ts +22 -0
- package/dist/handoff/ucp-checkout/cart-parse.js +102 -0
- package/dist/handoff/ucp-checkout/cart-parse.js.map +1 -0
- package/dist/handoff/ucp-checkout/cart-types.d.ts +93 -0
- package/dist/handoff/ucp-checkout/cart-types.js +38 -0
- package/dist/handoff/ucp-checkout/cart-types.js.map +1 -0
- package/dist/handoff/ucp-checkout/channel.d.ts +159 -0
- package/dist/handoff/ucp-checkout/channel.js +636 -0
- package/dist/handoff/ucp-checkout/channel.js.map +1 -0
- package/dist/handoff/ucp-checkout/client.d.ts +88 -0
- package/dist/handoff/ucp-checkout/client.js +228 -0
- package/dist/handoff/ucp-checkout/client.js.map +1 -0
- package/dist/handoff/ucp-checkout/endpoint.d.ts +36 -0
- package/dist/handoff/ucp-checkout/endpoint.js +145 -0
- package/dist/handoff/ucp-checkout/endpoint.js.map +1 -0
- package/dist/handoff/ucp-checkout/index.d.ts +35 -0
- package/dist/handoff/ucp-checkout/index.js +36 -0
- package/dist/handoff/ucp-checkout/index.js.map +1 -0
- package/dist/handoff/ucp-checkout/parse.d.ts +71 -0
- package/dist/handoff/ucp-checkout/parse.js +349 -0
- package/dist/handoff/ucp-checkout/parse.js.map +1 -0
- package/dist/handoff/ucp-checkout/totals.d.ts +41 -0
- package/dist/handoff/ucp-checkout/totals.js +36 -0
- package/dist/handoff/ucp-checkout/totals.js.map +1 -0
- package/dist/handoff/ucp-checkout/types.d.ts +149 -0
- package/dist/handoff/ucp-checkout/types.js +58 -0
- package/dist/handoff/ucp-checkout/types.js.map +1 -0
- package/dist/handoff/url-safety.d.ts +44 -0
- package/dist/handoff/url-safety.js +121 -0
- package/dist/handoff/url-safety.js.map +1 -0
- package/dist/i18n.d.ts +24 -0
- package/dist/i18n.js +27 -0
- package/dist/i18n.js.map +1 -0
- package/dist/negotiation/action-candidate.d.ts +97 -0
- package/dist/negotiation/action-candidate.js +160 -0
- package/dist/negotiation/action-candidate.js.map +1 -0
- package/dist/negotiation/condition/evaluator.d.ts +36 -0
- package/dist/negotiation/condition/evaluator.js +123 -0
- package/dist/negotiation/condition/evaluator.js.map +1 -0
- package/dist/negotiation/context-map/index.d.ts +23 -0
- package/dist/negotiation/context-map/index.js +22 -0
- package/dist/negotiation/context-map/index.js.map +1 -0
- package/dist/negotiation/context-map/store.d.ts +51 -0
- package/dist/negotiation/context-map/store.js +186 -0
- package/dist/negotiation/context-map/store.js.map +1 -0
- package/dist/negotiation/context-map/types.d.ts +29 -0
- package/dist/negotiation/context-map/types.js +57 -0
- package/dist/negotiation/context-map/types.js.map +1 -0
- package/dist/negotiation/domain/common.d.ts +95 -0
- package/dist/negotiation/domain/common.js +216 -0
- package/dist/negotiation/domain/common.js.map +1 -0
- package/dist/negotiation/domain/envelope.d.ts +55 -0
- package/dist/negotiation/domain/envelope.js +110 -0
- package/dist/negotiation/domain/envelope.js.map +1 -0
- package/dist/negotiation/domain/identifiers.d.ts +65 -0
- package/dist/negotiation/domain/identifiers.js +130 -0
- package/dist/negotiation/domain/identifiers.js.map +1 -0
- package/dist/negotiation/domain/objects.d.ts +149 -0
- package/dist/negotiation/domain/objects.js +335 -0
- package/dist/negotiation/domain/objects.js.map +1 -0
- package/dist/negotiation/idempotency/index.d.ts +26 -0
- package/dist/negotiation/idempotency/index.js +25 -0
- package/dist/negotiation/idempotency/index.js.map +1 -0
- package/dist/negotiation/idempotency/store.d.ts +52 -0
- package/dist/negotiation/idempotency/store.js +189 -0
- package/dist/negotiation/idempotency/store.js.map +1 -0
- package/dist/negotiation/idempotency/types.d.ts +102 -0
- package/dist/negotiation/idempotency/types.js +47 -0
- package/dist/negotiation/idempotency/types.js.map +1 -0
- package/dist/negotiation/jcs.d.ts +21 -0
- package/dist/negotiation/jcs.js +114 -0
- package/dist/negotiation/jcs.js.map +1 -0
- package/dist/negotiation/ledger/event.d.ts +142 -0
- package/dist/negotiation/ledger/event.js +206 -0
- package/dist/negotiation/ledger/event.js.map +1 -0
- package/dist/negotiation/ledger/index.d.ts +26 -0
- package/dist/negotiation/ledger/index.js +25 -0
- package/dist/negotiation/ledger/index.js.map +1 -0
- package/dist/negotiation/ledger/store.d.ts +97 -0
- package/dist/negotiation/ledger/store.js +338 -0
- package/dist/negotiation/ledger/store.js.map +1 -0
- package/dist/negotiation/prompt.d.ts +34 -0
- package/dist/negotiation/prompt.js +113 -0
- package/dist/negotiation/prompt.js.map +1 -0
- package/dist/negotiation/recovery/index.d.ts +26 -0
- package/dist/negotiation/recovery/index.js +24 -0
- package/dist/negotiation/recovery/index.js.map +1 -0
- package/dist/negotiation/recovery/outbound.d.ts +49 -0
- package/dist/negotiation/recovery/outbound.js +34 -0
- package/dist/negotiation/recovery/outbound.js.map +1 -0
- package/dist/negotiation/recovery/recover.d.ts +59 -0
- package/dist/negotiation/recovery/recover.js +486 -0
- package/dist/negotiation/recovery/recover.js.map +1 -0
- package/dist/negotiation/recovery/types.d.ts +85 -0
- package/dist/negotiation/recovery/types.js +17 -0
- package/dist/negotiation/recovery/types.js.map +1 -0
- package/dist/negotiation/state/phase.d.ts +70 -0
- package/dist/negotiation/state/phase.js +200 -0
- package/dist/negotiation/state/phase.js.map +1 -0
- package/dist/negotiation/types.d.ts +139 -0
- package/dist/negotiation/types.js +24 -0
- package/dist/negotiation/types.js.map +1 -0
- package/dist/net/safe-http.d.ts +54 -0
- package/dist/net/safe-http.js +116 -0
- package/dist/net/safe-http.js.map +1 -0
- package/dist/operator/controller.d.ts +181 -0
- package/dist/operator/controller.js +784 -0
- package/dist/operator/controller.js.map +1 -0
- package/dist/operator/runner.d.ts +128 -0
- package/dist/operator/runner.js +248 -0
- package/dist/operator/runner.js.map +1 -0
- package/dist/operator/store.d.ts +39 -0
- package/dist/operator/store.js +169 -0
- package/dist/operator/store.js.map +1 -0
- package/dist/operator/strategy.d.ts +54 -0
- package/dist/operator/strategy.js +249 -0
- package/dist/operator/strategy.js.map +1 -0
- package/dist/operator/tui.d.ts +27 -0
- package/dist/operator/tui.js +395 -0
- package/dist/operator/tui.js.map +1 -0
- package/dist/operator/types.d.ts +224 -0
- package/dist/operator/types.js +17 -0
- package/dist/operator/types.js.map +1 -0
- package/dist/product-buyer.d.ts +74 -0
- package/dist/product-buyer.js +161 -0
- package/dist/product-buyer.js.map +1 -0
- package/dist/product-cli.d.ts +56 -0
- package/dist/product-cli.js +175 -0
- package/dist/product-cli.js.map +1 -0
- package/dist/product-compat.d.ts +50 -0
- package/dist/product-compat.js +63 -0
- package/dist/product-compat.js.map +1 -0
- package/dist/product-init.d.ts +73 -0
- package/dist/product-init.js +203 -0
- package/dist/product-init.js.map +1 -0
- package/dist/product-publish.d.ts +85 -0
- package/dist/product-publish.js +216 -0
- package/dist/product-publish.js.map +1 -0
- package/dist/protocol/legacy-shopping-negotiation/adapter.d.ts +42 -0
- package/dist/protocol/legacy-shopping-negotiation/adapter.js +561 -0
- package/dist/protocol/legacy-shopping-negotiation/adapter.js.map +1 -0
- package/dist/protocol/legacy-shopping-negotiation/mapping.d.ts +78 -0
- package/dist/protocol/legacy-shopping-negotiation/mapping.js +321 -0
- package/dist/protocol/legacy-shopping-negotiation/mapping.js.map +1 -0
- package/dist/protocol/legacy-shopping-negotiation/money.d.ts +49 -0
- package/dist/protocol/legacy-shopping-negotiation/money.js +70 -0
- package/dist/protocol/legacy-shopping-negotiation/money.js.map +1 -0
- package/dist/protocol/legacy-shopping-negotiation/types.d.ts +107 -0
- package/dist/protocol/legacy-shopping-negotiation/types.js +34 -0
- package/dist/protocol/legacy-shopping-negotiation/types.js.map +1 -0
- package/dist/runtime/buyer-policy.d.ts +58 -0
- package/dist/runtime/buyer-policy.js +89 -0
- package/dist/runtime/buyer-policy.js.map +1 -0
- package/dist/runtime/fake-model.d.ts +77 -0
- package/dist/runtime/fake-model.js +307 -0
- package/dist/runtime/fake-model.js.map +1 -0
- package/dist/runtime/foreground.d.ts +56 -0
- package/dist/runtime/foreground.js +97 -0
- package/dist/runtime/foreground.js.map +1 -0
- package/dist/runtime/heartbeat.d.ts +36 -0
- package/dist/runtime/heartbeat.js +49 -0
- package/dist/runtime/heartbeat.js.map +1 -0
- package/dist/runtime/merchant-turn.d.ts +35 -0
- package/dist/runtime/merchant-turn.js +20 -0
- package/dist/runtime/merchant-turn.js.map +1 -0
- package/dist/runtime/model.d.ts +40 -0
- package/dist/runtime/model.js +86 -0
- package/dist/runtime/model.js.map +1 -0
- package/dist/runtime/negotiation-turn.d.ts +101 -0
- package/dist/runtime/negotiation-turn.js +317 -0
- package/dist/runtime/negotiation-turn.js.map +1 -0
- package/dist/runtime/tools.d.ts +64 -0
- package/dist/runtime/tools.js +236 -0
- package/dist/runtime/tools.js.map +1 -0
- package/dist/supervisor/init.d.ts +31 -0
- package/dist/supervisor/init.js +222 -0
- package/dist/supervisor/init.js.map +1 -0
- package/dist/supervisor/logs.d.ts +28 -0
- package/dist/supervisor/logs.js +101 -0
- package/dist/supervisor/logs.js.map +1 -0
- package/dist/supervisor/manage.d.ts +72 -0
- package/dist/supervisor/manage.js +419 -0
- package/dist/supervisor/manage.js.map +1 -0
- package/dist/supervisor/manifest.d.ts +69 -0
- package/dist/supervisor/manifest.js +209 -0
- package/dist/supervisor/manifest.js.map +1 -0
- package/dist/supervisor/stack-config.d.ts +79 -0
- package/dist/supervisor/stack-config.js +262 -0
- package/dist/supervisor/stack-config.js.map +1 -0
- package/dist/supervisor/wrapper.d.ts +17 -0
- package/dist/supervisor/wrapper.js +138 -0
- package/dist/supervisor/wrapper.js.map +1 -0
- package/dist/trust/identity/auth-verifier.d.ts +96 -0
- package/dist/trust/identity/auth-verifier.js +166 -0
- package/dist/trust/identity/auth-verifier.js.map +1 -0
- package/dist/trust/identity/identity-binding.d.ts +63 -0
- package/dist/trust/identity/identity-binding.js +59 -0
- package/dist/trust/identity/identity-binding.js.map +1 -0
- package/dist/trust/identity/index.d.ts +38 -0
- package/dist/trust/identity/index.js +31 -0
- package/dist/trust/identity/index.js.map +1 -0
- package/dist/trust/identity/jws.d.ts +64 -0
- package/dist/trust/identity/jws.js +178 -0
- package/dist/trust/identity/jws.js.map +1 -0
- package/dist/trust/identity/keys.d.ts +71 -0
- package/dist/trust/identity/keys.js +118 -0
- package/dist/trust/identity/keys.js.map +1 -0
- package/dist/trust/identity/message-signature.d.ts +105 -0
- package/dist/trust/identity/message-signature.js +297 -0
- package/dist/trust/identity/message-signature.js.map +1 -0
- package/dist/trust/identity/nonce.d.ts +45 -0
- package/dist/trust/identity/nonce.js +50 -0
- package/dist/trust/identity/nonce.js.map +1 -0
- package/dist/trust/identity/signature-base.d.ts +84 -0
- package/dist/trust/identity/signature-base.js +261 -0
- package/dist/trust/identity/signature-base.js.map +1 -0
- package/dist/trust/identity/trust-policy.d.ts +92 -0
- package/dist/trust/identity/trust-policy.js +95 -0
- package/dist/trust/identity/trust-policy.js.map +1 -0
- package/dist/trust/index.d.ts +21 -0
- package/dist/trust/index.js +22 -0
- package/dist/trust/index.js.map +1 -0
- package/dist/trust/records/evaluator.d.ts +76 -0
- package/dist/trust/records/evaluator.js +122 -0
- package/dist/trust/records/evaluator.js.map +1 -0
- package/dist/trust/records/index.d.ts +28 -0
- package/dist/trust/records/index.js +26 -0
- package/dist/trust/records/index.js.map +1 -0
- package/dist/trust/records/store.d.ts +75 -0
- package/dist/trust/records/store.js +339 -0
- package/dist/trust/records/store.js.map +1 -0
- package/dist/trust/records/types.d.ts +159 -0
- package/dist/trust/records/types.js +40 -0
- package/dist/trust/records/types.js.map +1 -0
- package/dist/tui/banner.d.ts +46 -0
- package/dist/tui/banner.js +99 -0
- package/dist/tui/banner.js.map +1 -0
- package/dist/tui/styles.d.ts +70 -0
- package/dist/tui/styles.js +197 -0
- package/dist/tui/styles.js.map +1 -0
- package/dist/tui/theme.d.ts +63 -0
- package/dist/tui/theme.js +136 -0
- package/dist/tui/theme.js.map +1 -0
- package/examples/profiles/buyer.deepseek.yaml +34 -0
- package/examples/profiles/buyer.fake.yaml +36 -0
- package/examples/profiles/buyer.local.yaml +40 -0
- package/examples/profiles/merchant.deepseek.yaml +32 -0
- package/examples/profiles/merchant.fake.yaml +31 -0
- package/examples/profiles/merchant.local.yaml +34 -0
- package/package.json +55 -0
|
@@ -0,0 +1,240 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright 2026 harrylabsj
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
/**
|
|
17
|
+
* Agent Card secret 扫描(基线 §26 MUST NOT 子句 + 安全不变量 24)。
|
|
18
|
+
*
|
|
19
|
+
* Agent Card / public metadata 不得包含:静态 bearer token、API key、password、
|
|
20
|
+
* 私钥、Merchant cost/floor 数据、Principal 私有状态。本扫描器对原始 JSON
|
|
21
|
+
* (含未知/扩展字段)做启发式拒绝,任何命中即视为不可用的 card。
|
|
22
|
+
*
|
|
23
|
+
* 设计取舍:安全扫描宁可误报(fail-closed)也不漏报。合法 card 的常见字符串
|
|
24
|
+
* (name/description 散文、URL、版本号、binding 名、skill id、credential 引用)
|
|
25
|
+
* 均不会命中以下规则。
|
|
26
|
+
*/
|
|
27
|
+
import { AgentCardError } from "./error.js";
|
|
28
|
+
/** PEM 私钥块。 */
|
|
29
|
+
const PRIVATE_KEY_RE = /-----BEGIN [A-Z0-9 ]*PRIVATE KEY-----/;
|
|
30
|
+
/** 已知厂商 token 前缀(整串或 word-boundary 片段)。 */
|
|
31
|
+
const TOKEN_PREFIX_RE = /^(sk-|sk_live_|rk_live_|pk_live_|pk_test_|AKIA|ASIA|ghp_|gho_|ghu_|ghs_|ghr_|xox[baprs]-|ya29\.|eyJ[A-Za-z0-9_-]{6,}\.)/;
|
|
32
|
+
/** 内嵌在散文中的 token 片段(整串扫描之外的二次兜底)。 */
|
|
33
|
+
const EMBEDDED_TOKEN_RE = /\b(sk-[A-Za-z0-9_-]{8,}|sk_live_[A-Za-z0-9]{10,}|pk_live_[A-Za-z0-9]{10,}|ghp_[A-Za-z0-9]{20,}|AKIA[0-9A-Z]{16}|eyJ[A-Za-z0-9_-]{8,}\.[A-Za-z0-9_-]{4,})\b/;
|
|
34
|
+
/** 显式 Bearer 头。 */
|
|
35
|
+
const BEARER_RE = /^Bearer\s+\S/;
|
|
36
|
+
/** 安全引用/占位符:env 引用、${VAR}、$VAR、<placeholder>。 */
|
|
37
|
+
const PLACEHOLDER_RE = /^(env:[A-Za-z_][A-Za-z0-9_]*|\$\{[A-Za-z_][A-Za-z0-9_]*\}|\$[A-Za-z_][A-Za-z0-9_]*|<[^>]*>)$/;
|
|
38
|
+
/** 字段名直接命中即拒绝的敏感键(值非占位符时)。 */
|
|
39
|
+
const SENSITIVE_FIELD_NAMES = new Set([
|
|
40
|
+
"password",
|
|
41
|
+
"passwd",
|
|
42
|
+
"client_secret",
|
|
43
|
+
"secret_key",
|
|
44
|
+
"private_key",
|
|
45
|
+
"access_token",
|
|
46
|
+
"refresh_token",
|
|
47
|
+
"bearer_token",
|
|
48
|
+
"api_key",
|
|
49
|
+
"apikey",
|
|
50
|
+
"api-key",
|
|
51
|
+
"x-api-key",
|
|
52
|
+
"x-auth-token",
|
|
53
|
+
"authorization",
|
|
54
|
+
"proxy-authorization",
|
|
55
|
+
"authorizationheader",
|
|
56
|
+
]);
|
|
57
|
+
/** Merchant cost/floor 与 Principal 私有阈值字段名(基线 §4.4 Private by default)。 */
|
|
58
|
+
const PRIVATE_COMMERCE_KEYS = new Set([
|
|
59
|
+
"cost",
|
|
60
|
+
"costs",
|
|
61
|
+
"unit_cost",
|
|
62
|
+
"cost_price",
|
|
63
|
+
"total_cost",
|
|
64
|
+
"floor",
|
|
65
|
+
"floor_price",
|
|
66
|
+
"price_floor",
|
|
67
|
+
"min_price",
|
|
68
|
+
"minimum_price",
|
|
69
|
+
"min_unit_price",
|
|
70
|
+
"margin",
|
|
71
|
+
"markup",
|
|
72
|
+
"cogs",
|
|
73
|
+
"breakeven",
|
|
74
|
+
"reserve_price",
|
|
75
|
+
"max_budget",
|
|
76
|
+
"budget_limit",
|
|
77
|
+
"max_total_price",
|
|
78
|
+
"max_unit_price",
|
|
79
|
+
"private_threshold",
|
|
80
|
+
]);
|
|
81
|
+
/** Principal 私有状态键名。 */
|
|
82
|
+
const PRINCIPAL_PRIVATE_KEYS = new Set([
|
|
83
|
+
"private_memory",
|
|
84
|
+
"principal_memory",
|
|
85
|
+
"principal_private",
|
|
86
|
+
"personal_details",
|
|
87
|
+
]);
|
|
88
|
+
const RFC3339 = /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(\.\d+)?(Z|[+-]\d{2}:\d{2})$/;
|
|
89
|
+
function looksLikeUrl(value) {
|
|
90
|
+
try {
|
|
91
|
+
const url = new URL(value);
|
|
92
|
+
return ((url.protocol === "https:" || url.protocol === "http:") &&
|
|
93
|
+
url.username === "" &&
|
|
94
|
+
url.password === "");
|
|
95
|
+
}
|
|
96
|
+
catch {
|
|
97
|
+
return false;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
function charClasses(value) {
|
|
101
|
+
let count = 0;
|
|
102
|
+
if (/[a-z]/.test(value))
|
|
103
|
+
count += 1;
|
|
104
|
+
if (/[A-Z]/.test(value))
|
|
105
|
+
count += 1;
|
|
106
|
+
if (/[0-9]/.test(value))
|
|
107
|
+
count += 1;
|
|
108
|
+
if (/[^A-Za-z0-9]/.test(value))
|
|
109
|
+
count += 1;
|
|
110
|
+
return count;
|
|
111
|
+
}
|
|
112
|
+
/** 高熵 token 启发式:长、无空白、非 URL/时间戳、至少 3 个字符类或大写字+数字。 */
|
|
113
|
+
function looksLikeToken(value) {
|
|
114
|
+
if (value.length < 24)
|
|
115
|
+
return false;
|
|
116
|
+
if (/\s/.test(value))
|
|
117
|
+
return false;
|
|
118
|
+
if (looksLikeUrl(value))
|
|
119
|
+
return false;
|
|
120
|
+
if (RFC3339.test(value))
|
|
121
|
+
return false;
|
|
122
|
+
if (PLACEHOLDER_RE.test(value))
|
|
123
|
+
return false;
|
|
124
|
+
return charClasses(value) >= 3 || (/[A-Z]/.test(value) && /[0-9]/.test(value));
|
|
125
|
+
}
|
|
126
|
+
function detectKindForValue(value) {
|
|
127
|
+
if (PRIVATE_KEY_RE.test(value))
|
|
128
|
+
return "private_key";
|
|
129
|
+
if (BEARER_RE.test(value))
|
|
130
|
+
return "bearer_token";
|
|
131
|
+
return "api_key";
|
|
132
|
+
}
|
|
133
|
+
function kindForSensitiveField(key) {
|
|
134
|
+
const lower = key.toLowerCase();
|
|
135
|
+
if (lower === "authorization" ||
|
|
136
|
+
lower === "proxy-authorization" ||
|
|
137
|
+
lower === "authorizationheader") {
|
|
138
|
+
return "authorization_header";
|
|
139
|
+
}
|
|
140
|
+
if (lower === "password" || lower === "passwd" || lower === "client_secret") {
|
|
141
|
+
return "password";
|
|
142
|
+
}
|
|
143
|
+
if (lower === "private_key" || lower === "secret_key") {
|
|
144
|
+
return "private_key";
|
|
145
|
+
}
|
|
146
|
+
return "api_key";
|
|
147
|
+
}
|
|
148
|
+
function scanString(value, path, findings) {
|
|
149
|
+
if (PRIVATE_KEY_RE.test(value) || BEARER_RE.test(value) || TOKEN_PREFIX_RE.test(value)) {
|
|
150
|
+
findings.push({
|
|
151
|
+
path,
|
|
152
|
+
kind: detectKindForValue(value),
|
|
153
|
+
detail: "string matches a known secret shape",
|
|
154
|
+
});
|
|
155
|
+
return;
|
|
156
|
+
}
|
|
157
|
+
if (EMBEDDED_TOKEN_RE.test(value)) {
|
|
158
|
+
findings.push({
|
|
159
|
+
path,
|
|
160
|
+
kind: "api_key",
|
|
161
|
+
detail: "prose contains an embedded token-shaped substring",
|
|
162
|
+
});
|
|
163
|
+
return;
|
|
164
|
+
}
|
|
165
|
+
if (looksLikeToken(value)) {
|
|
166
|
+
findings.push({
|
|
167
|
+
path,
|
|
168
|
+
kind: "high_entropy_token",
|
|
169
|
+
detail: "string is a long high-entropy token-shaped value",
|
|
170
|
+
});
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
/** 拼接 JSON Pointer 风格路径:根路径 "/" 不产生双斜杠。 */
|
|
174
|
+
function joinPath(path, segment) {
|
|
175
|
+
return path === "/" ? `/${segment}` : `${path}/${segment}`;
|
|
176
|
+
}
|
|
177
|
+
function scanValue(value, path, findings) {
|
|
178
|
+
if (value === null || value === undefined)
|
|
179
|
+
return;
|
|
180
|
+
if (typeof value === "string") {
|
|
181
|
+
scanString(value, path, findings);
|
|
182
|
+
return;
|
|
183
|
+
}
|
|
184
|
+
if (Array.isArray(value)) {
|
|
185
|
+
value.forEach((item, index) => scanValue(item, joinPath(path, String(index)), findings));
|
|
186
|
+
return;
|
|
187
|
+
}
|
|
188
|
+
if (typeof value === "object") {
|
|
189
|
+
const record = value;
|
|
190
|
+
for (const [key, child] of Object.entries(record)) {
|
|
191
|
+
const childPath = joinPath(path, key);
|
|
192
|
+
const lower = key.toLowerCase();
|
|
193
|
+
if (PRIVATE_COMMERCE_KEYS.has(lower) &&
|
|
194
|
+
child !== undefined &&
|
|
195
|
+
child !== null &&
|
|
196
|
+
child !== "") {
|
|
197
|
+
findings.push({
|
|
198
|
+
path: childPath,
|
|
199
|
+
kind: "merchant_private_data",
|
|
200
|
+
detail: `key "${key}" may carry private cost/floor data (baseline §4.4)`,
|
|
201
|
+
});
|
|
202
|
+
}
|
|
203
|
+
if (PRINCIPAL_PRIVATE_KEYS.has(lower) &&
|
|
204
|
+
child !== undefined &&
|
|
205
|
+
child !== null &&
|
|
206
|
+
child !== "") {
|
|
207
|
+
findings.push({
|
|
208
|
+
path: childPath,
|
|
209
|
+
kind: "principal_private_state",
|
|
210
|
+
detail: `key "${key}" may carry principal private state`,
|
|
211
|
+
});
|
|
212
|
+
}
|
|
213
|
+
if (SENSITIVE_FIELD_NAMES.has(lower) && typeof child === "string") {
|
|
214
|
+
if (child.length > 0 && !PLACEHOLDER_RE.test(child)) {
|
|
215
|
+
findings.push({
|
|
216
|
+
path: childPath,
|
|
217
|
+
kind: kindForSensitiveField(key),
|
|
218
|
+
detail: `key "${key}" holds a static secret-shaped value`,
|
|
219
|
+
});
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
scanValue(child, childPath, findings);
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
/** 扫描任意 JSON 值(原始 card 含未知/扩展字段)。纯函数,不抛错。 */
|
|
227
|
+
export function scanAgentCardSecrets(value) {
|
|
228
|
+
const findings = [];
|
|
229
|
+
scanValue(value, "/", findings);
|
|
230
|
+
return { ok: findings.length === 0, findings };
|
|
231
|
+
}
|
|
232
|
+
/** 若命中任一 secret 类发现则抛 AgentCardError("secret_found")。 */
|
|
233
|
+
export function assertNoAgentCardSecrets(value) {
|
|
234
|
+
const result = scanAgentCardSecrets(value);
|
|
235
|
+
if (!result.ok) {
|
|
236
|
+
const first = result.findings[0];
|
|
237
|
+
throw new AgentCardError("secret_found", `Agent Card rejected: ${first?.detail ?? "static secret detected"} at ${first?.path ?? "/"}`, first?.path ?? "/");
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
//# sourceMappingURL=secrets.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"secrets.js","sourceRoot":"","sources":["../../../src/discovery/agent-card/secrets.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright 2026 harrylabsj
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
/**
|
|
17
|
+
* A2A Agent Card 领域类型(基线 §26,外部标准 pin §43:A2A v1.0.x)。
|
|
18
|
+
*
|
|
19
|
+
* 形状以架构基线 §26 的完整示例为准:`supportedInterfaces` 是数组,每一项至少
|
|
20
|
+
* 含 `url` + `protocolBinding` + `protocolVersion`。`protocolBinding` 的 core 值
|
|
21
|
+
* 对齐 A2A 1.0 核心 binding:JSONRPC / GRPC / HTTP+JSON;未来 compliant binding
|
|
22
|
+
* 使用正式 URI namespace(§26)。本模块不拒绝未知 binding 值,但 capability
|
|
23
|
+
* intersection 不选择它们(§3.1)。
|
|
24
|
+
*
|
|
25
|
+
* 安全不变量 24:Agent Card / public metadata 不得包含静态 secret。结构校验只
|
|
26
|
+
* 负责字段形状;secret 扫描由 secrets.ts 单独负责(含 merchant cost/floor 等
|
|
27
|
+
* 私有数据,基线 §4.4)。
|
|
28
|
+
*/
|
|
29
|
+
/** A2A 1.0 核心 protocol binding 集合(基线 §3.1 / §26 / §43)。 */
|
|
30
|
+
export declare const CORE_PROTOCOL_BINDINGS: readonly ["JSONRPC", "GRPC", "HTTP+JSON"];
|
|
31
|
+
export type CoreProtocolBinding = (typeof CORE_PROTOCOL_BINDINGS)[number];
|
|
32
|
+
/** Kiwi Negotiation A2A Extension URI 路径(基线 §8.2)。 */
|
|
33
|
+
export declare const KIWI_NEGOTIATION_EXTENSION_PATH = "/a2a/extensions/negotiation/1.0";
|
|
34
|
+
/** 判断一个 binding 值是否是 A2A 1.0 核心 binding。未知 binding 不拒绝但不选择。 */
|
|
35
|
+
export declare function isCoreProtocolBinding(value: string): value is CoreProtocolBinding;
|
|
36
|
+
/**
|
|
37
|
+
* 单个 binding 的端点声明。§26 示例:
|
|
38
|
+
* `{ "url": "https://merchant.example/a2a", "protocolBinding": "JSONRPC", "protocolVersion": "1.0" }`
|
|
39
|
+
*/
|
|
40
|
+
export interface AgentInterface {
|
|
41
|
+
/** 该 binding 的端点 URL。连接时由 a2a client 做 SSRF/URL 安全校验。 */
|
|
42
|
+
url: string;
|
|
43
|
+
/** JSONRPC | GRPC | HTTP+JSON,或未来 compliant binding 的正式 URI。 */
|
|
44
|
+
protocolBinding: string;
|
|
45
|
+
/** binding 协议版本,例如 "1.0"。未知版本 fail-closed(§4.6)。 */
|
|
46
|
+
protocolVersion: string;
|
|
47
|
+
}
|
|
48
|
+
export interface AgentProvider {
|
|
49
|
+
organization: string;
|
|
50
|
+
/** 组织主页(可选)。 */
|
|
51
|
+
url?: string;
|
|
52
|
+
}
|
|
53
|
+
/** capabilities.extensions 或顶层 extensions 中的扩展引用。 */
|
|
54
|
+
export interface AgentExtension {
|
|
55
|
+
uri: string;
|
|
56
|
+
required: boolean;
|
|
57
|
+
}
|
|
58
|
+
export interface AgentCapabilities {
|
|
59
|
+
streaming?: boolean;
|
|
60
|
+
pushNotifications?: boolean;
|
|
61
|
+
stateTransitionHistory?: boolean;
|
|
62
|
+
/** true 表示允许 card 含未冻结的扩展字段(A2A extendedAgentCard)。 */
|
|
63
|
+
extendedAgentCard?: boolean;
|
|
64
|
+
/** 扩展引用;Kiwi 通过 isNegotiationExtensionUri 识别 negotiation extension(§8.2)。 */
|
|
65
|
+
extensions?: AgentExtension[];
|
|
66
|
+
}
|
|
67
|
+
export interface AgentSkill {
|
|
68
|
+
id: string;
|
|
69
|
+
name: string;
|
|
70
|
+
description?: string;
|
|
71
|
+
tags?: string[];
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* securitySchemes 的单个值(A2A v1.0)。`type` 为 scheme 类型;其余字段按类型
|
|
75
|
+
* 各异。本模块宽松建模(未知 scheme type 允许),静态 secret 由 secrets.ts 拒绝。
|
|
76
|
+
*/
|
|
77
|
+
export interface AgentSecurityScheme {
|
|
78
|
+
type: string;
|
|
79
|
+
[key: string]: unknown;
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* security 项:`scheme` 引用 securitySchemes 中的名字;`credential` /
|
|
83
|
+
* `credentials` 是凭据标识的引用(不是 secret 本身)。A2A 规范禁止在 card 中
|
|
84
|
+
* 携带真实凭据(不变量 24)。两种拼写都接受以兼容不同 A2A 实现。
|
|
85
|
+
*/
|
|
86
|
+
export interface AgentSecurityRequirement {
|
|
87
|
+
scheme: string;
|
|
88
|
+
credential?: string;
|
|
89
|
+
credentials?: string;
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* A2A Agent Card(基线 §26 字段清单)。字段集合允许未来扩展(extendedAgentCard),
|
|
93
|
+
* 因此结构校验只约束已知字段,未知顶层字段按 forward-compat 保留。
|
|
94
|
+
*/
|
|
95
|
+
export interface AgentCard {
|
|
96
|
+
name: string;
|
|
97
|
+
description: string;
|
|
98
|
+
provider: AgentProvider;
|
|
99
|
+
version: string;
|
|
100
|
+
/** 标准 Agent Card 的 canonical URL(可选;连接走 supportedInterfaces)。 */
|
|
101
|
+
url?: string;
|
|
102
|
+
documentationUrl?: string;
|
|
103
|
+
supportedInterfaces: AgentInterface[];
|
|
104
|
+
securitySchemes?: Record<string, AgentSecurityScheme>;
|
|
105
|
+
security?: AgentSecurityRequirement[];
|
|
106
|
+
capabilities?: AgentCapabilities;
|
|
107
|
+
skills?: AgentSkill[];
|
|
108
|
+
/** §26 字段清单中的顶层 extensions;capabilities.extensions 是规范位置。 */
|
|
109
|
+
extensions?: AgentExtension[];
|
|
110
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright 2026 harrylabsj
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
/**
|
|
17
|
+
* A2A Agent Card 领域类型(基线 §26,外部标准 pin §43:A2A v1.0.x)。
|
|
18
|
+
*
|
|
19
|
+
* 形状以架构基线 §26 的完整示例为准:`supportedInterfaces` 是数组,每一项至少
|
|
20
|
+
* 含 `url` + `protocolBinding` + `protocolVersion`。`protocolBinding` 的 core 值
|
|
21
|
+
* 对齐 A2A 1.0 核心 binding:JSONRPC / GRPC / HTTP+JSON;未来 compliant binding
|
|
22
|
+
* 使用正式 URI namespace(§26)。本模块不拒绝未知 binding 值,但 capability
|
|
23
|
+
* intersection 不选择它们(§3.1)。
|
|
24
|
+
*
|
|
25
|
+
* 安全不变量 24:Agent Card / public metadata 不得包含静态 secret。结构校验只
|
|
26
|
+
* 负责字段形状;secret 扫描由 secrets.ts 单独负责(含 merchant cost/floor 等
|
|
27
|
+
* 私有数据,基线 §4.4)。
|
|
28
|
+
*/
|
|
29
|
+
/** A2A 1.0 核心 protocol binding 集合(基线 §3.1 / §26 / §43)。 */
|
|
30
|
+
export const CORE_PROTOCOL_BINDINGS = ["JSONRPC", "GRPC", "HTTP+JSON"];
|
|
31
|
+
/** Kiwi Negotiation A2A Extension URI 路径(基线 §8.2)。 */
|
|
32
|
+
export const KIWI_NEGOTIATION_EXTENSION_PATH = "/a2a/extensions/negotiation/1.0";
|
|
33
|
+
/** 判断一个 binding 值是否是 A2A 1.0 核心 binding。未知 binding 不拒绝但不选择。 */
|
|
34
|
+
export function isCoreProtocolBinding(value) {
|
|
35
|
+
return CORE_PROTOCOL_BINDINGS.includes(value);
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/discovery/agent-card/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH;;;;;;;;;;;;GAYG;AAEH,2DAA2D;AAC3D,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,CAAU,CAAC;AAGhF,sDAAsD;AACtD,MAAM,CAAC,MAAM,+BAA+B,GAAG,iCAAiC,CAAC;AAEjF,+DAA+D;AAC/D,MAAM,UAAU,qBAAqB,CAAC,KAAa;IACjD,OAAQ,sBAA4C,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AACvE,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright 2026 harrylabsj
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
/**
|
|
17
|
+
* A2A Agent Card 运行时校验(基线 §26 / §43)。
|
|
18
|
+
*
|
|
19
|
+
* 校验采用 fail-closed(§4.6):无法证明合法即为非法。已知字段严格校验类型,
|
|
20
|
+
* 未知顶层字段保留(extendedAgentCard / forward-compat),但未知不自动通过——
|
|
21
|
+
* 结构校验之外还要过 secret 扫描(secrets.ts)才能被接受为可用 card。
|
|
22
|
+
*/
|
|
23
|
+
import { AgentCardError } from "./error.js";
|
|
24
|
+
import type { AgentCard } from "./types.js";
|
|
25
|
+
/**
|
|
26
|
+
* 结构校验。校验通过返回规范化后的 AgentCard;失败抛 AgentCardError。
|
|
27
|
+
* 注意:此函数只做结构校验,secret 扫描由 parseAgentCard 组合执行。
|
|
28
|
+
*/
|
|
29
|
+
export declare function validateAgentCard(value: unknown): AgentCard;
|
|
30
|
+
/** 结构校验错误的便捷断言(供调用方诊断)。 */
|
|
31
|
+
export declare function isAgentCardError(err: unknown): err is AgentCardError;
|
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright 2026 harrylabsj
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
/**
|
|
17
|
+
* A2A Agent Card 运行时校验(基线 §26 / §43)。
|
|
18
|
+
*
|
|
19
|
+
* 校验采用 fail-closed(§4.6):无法证明合法即为非法。已知字段严格校验类型,
|
|
20
|
+
* 未知顶层字段保留(extendedAgentCard / forward-compat),但未知不自动通过——
|
|
21
|
+
* 结构校验之外还要过 secret 扫描(secrets.ts)才能被接受为可用 card。
|
|
22
|
+
*/
|
|
23
|
+
import { AgentCardError, schemaError } from "./error.js";
|
|
24
|
+
function requireObject(value, path) {
|
|
25
|
+
if (value === null || typeof value !== "object" || Array.isArray(value)) {
|
|
26
|
+
throw schemaError(path, `${path} must be an object`);
|
|
27
|
+
}
|
|
28
|
+
return value;
|
|
29
|
+
}
|
|
30
|
+
function requireArray(value, path) {
|
|
31
|
+
if (!Array.isArray(value)) {
|
|
32
|
+
throw schemaError(path, `${path} must be an array`);
|
|
33
|
+
}
|
|
34
|
+
return value;
|
|
35
|
+
}
|
|
36
|
+
function requireString(value, path) {
|
|
37
|
+
if (typeof value !== "string") {
|
|
38
|
+
throw schemaError(path, `${path} must be a string`);
|
|
39
|
+
}
|
|
40
|
+
return value;
|
|
41
|
+
}
|
|
42
|
+
function requireNonEmptyString(value, path) {
|
|
43
|
+
const s = requireString(value, path);
|
|
44
|
+
if (s.length === 0) {
|
|
45
|
+
throw schemaError(path, `${path} must be a non-empty string`);
|
|
46
|
+
}
|
|
47
|
+
return s;
|
|
48
|
+
}
|
|
49
|
+
function optionalString(value, path) {
|
|
50
|
+
return value === undefined ? undefined : requireString(value, path);
|
|
51
|
+
}
|
|
52
|
+
function optionalBoolean(value, path) {
|
|
53
|
+
if (value === undefined)
|
|
54
|
+
return undefined;
|
|
55
|
+
if (typeof value !== "boolean") {
|
|
56
|
+
throw schemaError(path, `${path} must be a boolean`);
|
|
57
|
+
}
|
|
58
|
+
return value;
|
|
59
|
+
}
|
|
60
|
+
/** 端点 URL 的结构校验:可解析且仅 http(s)。SSRF 由 a2a client 连接时执行。 */
|
|
61
|
+
function validateEndpointUrl(value, path) {
|
|
62
|
+
const url = requireNonEmptyString(value, path);
|
|
63
|
+
let parsed;
|
|
64
|
+
try {
|
|
65
|
+
parsed = new URL(url);
|
|
66
|
+
}
|
|
67
|
+
catch {
|
|
68
|
+
throw schemaError(path, `${path} must be a valid URL`);
|
|
69
|
+
}
|
|
70
|
+
if (parsed.protocol !== "https:" && parsed.protocol !== "http:") {
|
|
71
|
+
throw schemaError(path, `${path} must use http or https (got ${parsed.protocol})`);
|
|
72
|
+
}
|
|
73
|
+
if (parsed.username !== "" || parsed.password !== "") {
|
|
74
|
+
throw schemaError(path, `${path} must not embed credentials (userinfo)`);
|
|
75
|
+
}
|
|
76
|
+
return url;
|
|
77
|
+
}
|
|
78
|
+
function validateInterface(value, path) {
|
|
79
|
+
const obj = requireObject(value, path);
|
|
80
|
+
return {
|
|
81
|
+
url: validateEndpointUrl(obj.url, `${path}/url`),
|
|
82
|
+
protocolBinding: requireNonEmptyString(obj.protocolBinding, `${path}/protocolBinding`),
|
|
83
|
+
protocolVersion: requireNonEmptyString(obj.protocolVersion, `${path}/protocolVersion`),
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
function validateProvider(value, path) {
|
|
87
|
+
const obj = requireObject(value, path);
|
|
88
|
+
const provider = {
|
|
89
|
+
organization: requireNonEmptyString(obj.organization, `${path}/organization`),
|
|
90
|
+
};
|
|
91
|
+
const url = optionalString(obj.url, `${path}/url`);
|
|
92
|
+
if (url !== undefined) {
|
|
93
|
+
provider.url = validateEndpointUrl(url, `${path}/url`);
|
|
94
|
+
}
|
|
95
|
+
return provider;
|
|
96
|
+
}
|
|
97
|
+
function validateExtension(value, path) {
|
|
98
|
+
const obj = requireObject(value, path);
|
|
99
|
+
return {
|
|
100
|
+
uri: requireNonEmptyString(obj.uri, `${path}/uri`),
|
|
101
|
+
required: (() => {
|
|
102
|
+
if (typeof obj.required !== "boolean") {
|
|
103
|
+
throw schemaError(`${path}/required`, `${path}/required must be a boolean`);
|
|
104
|
+
}
|
|
105
|
+
return obj.required;
|
|
106
|
+
})(),
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
function validateExtensions(value, path) {
|
|
110
|
+
return requireArray(value, path).map((item, i) => validateExtension(item, `${path}/${i}`));
|
|
111
|
+
}
|
|
112
|
+
function validateCapabilities(value, path) {
|
|
113
|
+
const obj = requireObject(value, path);
|
|
114
|
+
const capabilities = {};
|
|
115
|
+
for (const key of [
|
|
116
|
+
"streaming",
|
|
117
|
+
"pushNotifications",
|
|
118
|
+
"stateTransitionHistory",
|
|
119
|
+
"extendedAgentCard",
|
|
120
|
+
]) {
|
|
121
|
+
const v = optionalBoolean(obj[key], `${path}/${key}`);
|
|
122
|
+
if (v !== undefined)
|
|
123
|
+
capabilities[key] = v;
|
|
124
|
+
}
|
|
125
|
+
if (obj.extensions !== undefined) {
|
|
126
|
+
capabilities.extensions = validateExtensions(obj.extensions, `${path}/extensions`);
|
|
127
|
+
}
|
|
128
|
+
return capabilities;
|
|
129
|
+
}
|
|
130
|
+
function validateSkill(value, path) {
|
|
131
|
+
const obj = requireObject(value, path);
|
|
132
|
+
const skill = {
|
|
133
|
+
id: requireNonEmptyString(obj.id, `${path}/id`),
|
|
134
|
+
name: requireNonEmptyString(obj.name, `${path}/name`),
|
|
135
|
+
};
|
|
136
|
+
const description = optionalString(obj.description, `${path}/description`);
|
|
137
|
+
if (description !== undefined)
|
|
138
|
+
skill.description = description;
|
|
139
|
+
if (obj.tags !== undefined) {
|
|
140
|
+
skill.tags = requireArray(obj.tags, `${path}/tags`).map((t, i) => requireNonEmptyString(t, `${path}/tags/${i}`));
|
|
141
|
+
}
|
|
142
|
+
return skill;
|
|
143
|
+
}
|
|
144
|
+
function validateSecurityScheme(value, path) {
|
|
145
|
+
const obj = requireObject(value, path);
|
|
146
|
+
return { ...obj, type: requireNonEmptyString(obj.type, `${path}/type`) };
|
|
147
|
+
}
|
|
148
|
+
function validateSecurityRequirement(value, path) {
|
|
149
|
+
const obj = requireObject(value, path);
|
|
150
|
+
const requirement = {
|
|
151
|
+
scheme: requireNonEmptyString(obj.scheme, `${path}/scheme`),
|
|
152
|
+
};
|
|
153
|
+
const credential = optionalString(obj.credential, `${path}/credential`);
|
|
154
|
+
if (credential !== undefined)
|
|
155
|
+
requirement.credential = credential;
|
|
156
|
+
const credentials = optionalString(obj.credentials, `${path}/credentials`);
|
|
157
|
+
if (credentials !== undefined)
|
|
158
|
+
requirement.credentials = credentials;
|
|
159
|
+
return requirement;
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* 结构校验。校验通过返回规范化后的 AgentCard;失败抛 AgentCardError。
|
|
163
|
+
* 注意:此函数只做结构校验,secret 扫描由 parseAgentCard 组合执行。
|
|
164
|
+
*/
|
|
165
|
+
export function validateAgentCard(value) {
|
|
166
|
+
const obj = requireObject(value, "/");
|
|
167
|
+
const card = {
|
|
168
|
+
name: requireNonEmptyString(obj.name, "/name"),
|
|
169
|
+
description: requireNonEmptyString(obj.description, "/description"),
|
|
170
|
+
provider: validateProvider(obj.provider, "/provider"),
|
|
171
|
+
version: requireNonEmptyString(obj.version, "/version"),
|
|
172
|
+
supportedInterfaces: requireArray(obj.supportedInterfaces, "/supportedInterfaces").map((item, i) => validateInterface(item, `/supportedInterfaces/${i}`)),
|
|
173
|
+
};
|
|
174
|
+
if (card.supportedInterfaces.length === 0) {
|
|
175
|
+
throw schemaError("/supportedInterfaces", "supportedInterfaces must not be empty");
|
|
176
|
+
}
|
|
177
|
+
const url = optionalString(obj.url, "/url");
|
|
178
|
+
if (url !== undefined)
|
|
179
|
+
card.url = validateEndpointUrl(url, "/url");
|
|
180
|
+
const documentationUrl = optionalString(obj.documentationUrl, "/documentationUrl");
|
|
181
|
+
if (documentationUrl !== undefined) {
|
|
182
|
+
card.documentationUrl = validateEndpointUrl(documentationUrl, "/documentationUrl");
|
|
183
|
+
}
|
|
184
|
+
if (obj.securitySchemes !== undefined) {
|
|
185
|
+
const schemes = requireObject(obj.securitySchemes, "/securitySchemes");
|
|
186
|
+
const out = {};
|
|
187
|
+
for (const key of Object.keys(schemes)) {
|
|
188
|
+
out[key] = validateSecurityScheme(schemes[key], `/securitySchemes/${key}`);
|
|
189
|
+
}
|
|
190
|
+
card.securitySchemes = out;
|
|
191
|
+
}
|
|
192
|
+
if (obj.security !== undefined) {
|
|
193
|
+
card.security = requireArray(obj.security, "/security").map((item, i) => validateSecurityRequirement(item, `/security/${i}`));
|
|
194
|
+
}
|
|
195
|
+
if (obj.capabilities !== undefined) {
|
|
196
|
+
card.capabilities = validateCapabilities(obj.capabilities, "/capabilities");
|
|
197
|
+
}
|
|
198
|
+
if (obj.skills !== undefined) {
|
|
199
|
+
card.skills = requireArray(obj.skills, "/skills").map((item, i) => validateSkill(item, `/skills/${i}`));
|
|
200
|
+
}
|
|
201
|
+
if (obj.extensions !== undefined) {
|
|
202
|
+
card.extensions = validateExtensions(obj.extensions, "/extensions");
|
|
203
|
+
}
|
|
204
|
+
return card;
|
|
205
|
+
}
|
|
206
|
+
/** 结构校验错误的便捷断言(供调用方诊断)。 */
|
|
207
|
+
export function isAgentCardError(err) {
|
|
208
|
+
return err instanceof AgentCardError;
|
|
209
|
+
}
|
|
210
|
+
//# sourceMappingURL=validate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validate.js","sourceRoot":"","sources":["../../../src/discovery/agent-card/validate.ts"],"names":[],"mappings":"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"}
|