@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,102 @@
|
|
|
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
|
+
* HandoffCandidate 生命周期 —— event-sourced 投影(KTH rev0.3 §5.1)。
|
|
18
|
+
*
|
|
19
|
+
* 候选内容不可变;lifecycle 状态**不是**候选 JSON 内的字段,而是
|
|
20
|
+
* Ledger 事件的投影(foldCandidateLifecycle 纯函数)。迁移表:
|
|
21
|
+
*
|
|
22
|
+
* (none) --created--> PROPOSED
|
|
23
|
+
* PROPOSED --ready--> READY (策略/批准通过)
|
|
24
|
+
* PROPOSED/READY --rejected--> REJECTED (终态)
|
|
25
|
+
* PROPOSED/READY --stale--> STALE (绑定输入变化;不可 revive,
|
|
26
|
+
* 需新候选带 supersedes_candidate_id)
|
|
27
|
+
* PROPOSED/READY --expired--> EXPIRED (终态)
|
|
28
|
+
* READY --consumed--> CONSUMED (执行完成,终态)
|
|
29
|
+
*
|
|
30
|
+
* 终态:REJECTED / STALE / EXPIRED / CONSUMED。
|
|
31
|
+
*/
|
|
32
|
+
import { schemaError } from "../negotiation/domain/common.js";
|
|
33
|
+
export const HANDOFF_CANDIDATE_LIFECYCLE_STATES = [
|
|
34
|
+
"PROPOSED",
|
|
35
|
+
"READY",
|
|
36
|
+
"REJECTED",
|
|
37
|
+
"STALE",
|
|
38
|
+
"EXPIRED",
|
|
39
|
+
"CONSUMED",
|
|
40
|
+
];
|
|
41
|
+
/** candidate 生命周期事件 kind(与 LEDGER_EVENT_KINDS 的 handoff_candidate_* 对齐)。 */
|
|
42
|
+
export const HANDOFF_CANDIDATE_EVENT_KINDS = [
|
|
43
|
+
"handoff_candidate_created",
|
|
44
|
+
"handoff_candidate_ready",
|
|
45
|
+
"handoff_candidate_rejected",
|
|
46
|
+
"handoff_candidate_stale",
|
|
47
|
+
"handoff_candidate_expired",
|
|
48
|
+
"handoff_candidate_consumed",
|
|
49
|
+
];
|
|
50
|
+
const TERMINAL_STATES = new Set([
|
|
51
|
+
"REJECTED",
|
|
52
|
+
"STALE",
|
|
53
|
+
"EXPIRED",
|
|
54
|
+
"CONSUMED",
|
|
55
|
+
]);
|
|
56
|
+
/** kind → 投影状态。 */
|
|
57
|
+
const EVENT_KIND_TO_STATE = {
|
|
58
|
+
handoff_candidate_created: "PROPOSED",
|
|
59
|
+
handoff_candidate_ready: "READY",
|
|
60
|
+
handoff_candidate_rejected: "REJECTED",
|
|
61
|
+
handoff_candidate_stale: "STALE",
|
|
62
|
+
handoff_candidate_expired: "EXPIRED",
|
|
63
|
+
handoff_candidate_consumed: "CONSUMED",
|
|
64
|
+
};
|
|
65
|
+
/** 显式迁移表:current → allowed next states。 */
|
|
66
|
+
const TRANSITIONS = {
|
|
67
|
+
"": new Set(["PROPOSED"]),
|
|
68
|
+
PROPOSED: new Set(["READY", "REJECTED", "STALE", "EXPIRED"]),
|
|
69
|
+
READY: new Set(["REJECTED", "STALE", "EXPIRED", "CONSUMED"]),
|
|
70
|
+
REJECTED: new Set(),
|
|
71
|
+
STALE: new Set(),
|
|
72
|
+
EXPIRED: new Set(),
|
|
73
|
+
CONSUMED: new Set(),
|
|
74
|
+
};
|
|
75
|
+
/** 事件 kind 是否 candidate 生命周期事件。 */
|
|
76
|
+
export function isHandoffCandidateEventKind(kind) {
|
|
77
|
+
return HANDOFF_CANDIDATE_EVENT_KINDS.includes(kind);
|
|
78
|
+
}
|
|
79
|
+
/** 从 Ledger 事件序列投影 candidate 生命周期状态(纯函数,最后事件胜出)。 */
|
|
80
|
+
export function foldCandidateLifecycle(events) {
|
|
81
|
+
let state;
|
|
82
|
+
for (const event of events) {
|
|
83
|
+
if (!isHandoffCandidateEventKind(event.event_kind))
|
|
84
|
+
continue;
|
|
85
|
+
state = EVENT_KIND_TO_STATE[event.event_kind];
|
|
86
|
+
}
|
|
87
|
+
return state;
|
|
88
|
+
}
|
|
89
|
+
/** 迁移校验:返回 target 或抛 schemaError(fail-closed)。 */
|
|
90
|
+
export function transitionCandidateLifecycle(current, eventKind) {
|
|
91
|
+
const target = EVENT_KIND_TO_STATE[eventKind];
|
|
92
|
+
const allowed = TRANSITIONS[current ?? ""] ?? new Set();
|
|
93
|
+
if (!allowed.has(target)) {
|
|
94
|
+
throw schemaError("handoff_candidate_lifecycle", `illegal handoff candidate lifecycle transition ${current ?? "(none)"} --${eventKind}--> ${target}`);
|
|
95
|
+
}
|
|
96
|
+
return target;
|
|
97
|
+
}
|
|
98
|
+
/** 终态判定:终态候选不可 revive,必须新建候选(带 supersedes_candidate_id)。 */
|
|
99
|
+
export function isTerminalLifecycleState(state) {
|
|
100
|
+
return TERMINAL_STATES.has(state);
|
|
101
|
+
}
|
|
102
|
+
//# sourceMappingURL=lifecycle.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lifecycle.js","sourceRoot":"","sources":["../../src/handoff/lifecycle.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AAG9D,MAAM,CAAC,MAAM,kCAAkC,GAAG;IAChD,UAAU;IACV,OAAO;IACP,UAAU;IACV,OAAO;IACP,SAAS;IACT,UAAU;CACF,CAAC;AAIX,4EAA4E;AAC5E,MAAM,CAAC,MAAM,6BAA6B,GAAG;IAC3C,2BAA2B;IAC3B,yBAAyB;IACzB,4BAA4B;IAC5B,yBAAyB;IACzB,2BAA2B;IAC3B,4BAA4B;CACpB,CAAC;AAIX,MAAM,eAAe,GAAgD,IAAI,GAAG,CAAC;IAC3E,UAAU;IACV,OAAO;IACP,SAAS;IACT,UAAU;CACX,CAAC,CAAC;AAEH,mBAAmB;AACnB,MAAM,mBAAmB,GAAgF;IACvG,yBAAyB,EAAE,UAAU;IACrC,uBAAuB,EAAE,OAAO;IAChC,0BAA0B,EAAE,UAAU;IACtC,uBAAuB,EAAE,OAAO;IAChC,yBAAyB,EAAE,SAAS;IACpC,0BAA0B,EAAE,UAAU;CACvC,CAAC;AAEF,2CAA2C;AAC3C,MAAM,WAAW,GAA0E;IACzF,EAAE,EAAE,IAAI,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC;IACzB,QAAQ,EAAE,IAAI,GAAG,CAAC,CAAC,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;IAC5D,KAAK,EAAE,IAAI,GAAG,CAAC,CAAC,UAAU,EAAE,OAAO,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;IAC5D,QAAQ,EAAE,IAAI,GAAG,EAAE;IACnB,KAAK,EAAE,IAAI,GAAG,EAAE;IAChB,OAAO,EAAE,IAAI,GAAG,EAAE;IAClB,QAAQ,EAAE,IAAI,GAAG,EAAE;CACpB,CAAC;AAEF,mCAAmC;AACnC,MAAM,UAAU,2BAA2B,CAAC,IAAqB;IAC/D,OAAQ,6BAAmD,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AAC7E,CAAC;AAED,oDAAoD;AACpD,MAAM,UAAU,sBAAsB,CACpC,MAA+E;IAE/E,IAAI,KAAiD,CAAC;IACtD,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,IAAI,CAAC,2BAA2B,CAAC,KAAK,CAAC,UAAU,CAAC;YAAE,SAAS;QAC7D,KAAK,GAAG,mBAAmB,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IAChD,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,kDAAkD;AAClD,MAAM,UAAU,4BAA4B,CAC1C,OAAmD,EACnD,SAAoC;IAEpC,MAAM,MAAM,GAAG,mBAAmB,CAAC,SAAS,CAAC,CAAC;IAC9C,MAAM,OAAO,GAAG,WAAW,CAAC,OAAO,IAAI,EAAE,CAAC,IAAI,IAAI,GAAG,EAAkC,CAAC;IACxF,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;QACzB,MAAM,WAAW,CACf,6BAA6B,EAC7B,kDAAkD,OAAO,IAAI,QAAQ,MAAM,SAAS,OAAO,MAAM,EAAE,CACpG,CAAC;IACJ,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,4DAA4D;AAC5D,MAAM,UAAU,wBAAwB,CAAC,KAAqC;IAC5E,OAAO,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AACpC,CAAC"}
|
|
@@ -0,0 +1,56 @@
|
|
|
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
|
+
* KTH 指标(架构 rev1.4.1 §35A.8 / 完成定义 #21:Negotiation-to-Handoff
|
|
18
|
+
* Rate 可观测)。纯函数:从 Ledger 事件计算,审计即观测源(零新存储)。
|
|
19
|
+
*
|
|
20
|
+
* 口径注记:
|
|
21
|
+
* - "agreements" 以产生 handoff_candidate_created 的候选数为代理
|
|
22
|
+
* (候选创建以 agreement 存在为前提;Ledger 没有独立的 agreement 事件);
|
|
23
|
+
* - `reported_external_conversion` 必须标注为外部报告——Kiwi 没有权威
|
|
24
|
+
* 交易集成时恒为 null(KTH rev0.3 §17:MUST be labeled externally
|
|
25
|
+
* reported unless authoritative integration exists)。
|
|
26
|
+
*/
|
|
27
|
+
import type { LedgerEvent } from "../negotiation/ledger/event.js";
|
|
28
|
+
export interface HandoffMetrics {
|
|
29
|
+
/** 产生过 handoff 候选的 negotiation 数(= 已达成协议的代理口径)。 */
|
|
30
|
+
negotiations_with_candidates: number;
|
|
31
|
+
/** handoff_candidate_created 总数。 */
|
|
32
|
+
candidates_created: number;
|
|
33
|
+
/** handoff_delivered 总数(成功交接的协议数)。 */
|
|
34
|
+
handoffs_delivered: number;
|
|
35
|
+
/** handoff_launched 总数。 */
|
|
36
|
+
launches: number;
|
|
37
|
+
/** handoff_opened_confirmed 总数(仅计有可归属证据的确认)。 */
|
|
38
|
+
opened_confirmed: number;
|
|
39
|
+
/** agreement → handoff 率(delivered / created;无候选时 0)。 */
|
|
40
|
+
agreement_to_handoff_rate: number;
|
|
41
|
+
/** handoff → launch 率(launched / delivered)。 */
|
|
42
|
+
handoff_launch_rate: number;
|
|
43
|
+
/** opened_confirmed 率(opened / delivered——与实现一致的分母;launch 事件可选,不参与分母)。 */
|
|
44
|
+
opened_confirmed_rate: number;
|
|
45
|
+
/** negotiation → handoff 率(delivered / 有候选的 negotiation 数)。 */
|
|
46
|
+
negotiation_to_handoff_rate: number;
|
|
47
|
+
/** created → delivered 中位时长(秒);无样本时 null。 */
|
|
48
|
+
time_to_handoff_seconds: number | null;
|
|
49
|
+
/**
|
|
50
|
+
* 外部报告的外部转化率。Kiwi 无权威交易集成 → 恒 null
|
|
51
|
+
* (绝不从 delivered/opened 推断外部成功,§36-27)。
|
|
52
|
+
*/
|
|
53
|
+
reported_external_conversion: null;
|
|
54
|
+
}
|
|
55
|
+
/** 全部 handoff 相关事件 → 指标(跨 negotiation 聚合)。 */
|
|
56
|
+
export declare function computeHandoffMetrics(eventsByNegotiation: ReadonlyMap<string, readonly LedgerEvent[]>): HandoffMetrics;
|
|
@@ -0,0 +1,78 @@
|
|
|
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
|
+
/** 全部 handoff 相关事件 → 指标(跨 negotiation 聚合)。 */
|
|
17
|
+
export function computeHandoffMetrics(eventsByNegotiation) {
|
|
18
|
+
let candidatesCreated = 0;
|
|
19
|
+
let delivered = 0;
|
|
20
|
+
let launches = 0;
|
|
21
|
+
let openedConfirmed = 0;
|
|
22
|
+
const negotiationsWithCandidates = new Set();
|
|
23
|
+
const timeToHandoff = [];
|
|
24
|
+
for (const [negotiationId, events] of eventsByNegotiation) {
|
|
25
|
+
const createdAt = new Map();
|
|
26
|
+
const deliveredAt = new Map();
|
|
27
|
+
for (const event of events) {
|
|
28
|
+
switch (event.event_kind) {
|
|
29
|
+
case "handoff_candidate_created":
|
|
30
|
+
candidatesCreated += 1;
|
|
31
|
+
negotiationsWithCandidates.add(negotiationId);
|
|
32
|
+
if (event.handoff_candidate_id !== undefined) {
|
|
33
|
+
createdAt.set(event.handoff_candidate_id, Date.parse(event.occurred_at));
|
|
34
|
+
}
|
|
35
|
+
break;
|
|
36
|
+
case "handoff_delivered":
|
|
37
|
+
delivered += 1;
|
|
38
|
+
if (event.handoff_candidate_id !== undefined) {
|
|
39
|
+
deliveredAt.set(event.handoff_candidate_id, Date.parse(event.occurred_at));
|
|
40
|
+
}
|
|
41
|
+
break;
|
|
42
|
+
case "handoff_launched":
|
|
43
|
+
launches += 1;
|
|
44
|
+
break;
|
|
45
|
+
case "handoff_opened_confirmed":
|
|
46
|
+
// 计数所有 opened 事件(事件已由证据门保证可归属——recordOpenEvidence
|
|
47
|
+
// 只落带可归属证据的确认;无证据的 launch 永不产生本事件)。
|
|
48
|
+
openedConfirmed += 1;
|
|
49
|
+
break;
|
|
50
|
+
default:
|
|
51
|
+
break;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
for (const [candidateId, created] of createdAt) {
|
|
55
|
+
const deliveredTs = deliveredAt.get(candidateId);
|
|
56
|
+
if (deliveredTs !== undefined && Number.isFinite(created) && Number.isFinite(deliveredTs)) {
|
|
57
|
+
timeToHandoff.push(Math.max(0, deliveredTs - created) / 1000);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
const timeToHandoffSeconds = timeToHandoff.length > 0
|
|
62
|
+
? [...timeToHandoff].sort((a, b) => a - b)[Math.floor(timeToHandoff.length / 2)] ?? null
|
|
63
|
+
: null;
|
|
64
|
+
return {
|
|
65
|
+
negotiations_with_candidates: negotiationsWithCandidates.size,
|
|
66
|
+
candidates_created: candidatesCreated,
|
|
67
|
+
handoffs_delivered: delivered,
|
|
68
|
+
launches,
|
|
69
|
+
opened_confirmed: openedConfirmed,
|
|
70
|
+
agreement_to_handoff_rate: candidatesCreated > 0 ? delivered / candidatesCreated : 0,
|
|
71
|
+
handoff_launch_rate: delivered > 0 ? launches / delivered : 0,
|
|
72
|
+
opened_confirmed_rate: delivered > 0 ? openedConfirmed / delivered : 0,
|
|
73
|
+
negotiation_to_handoff_rate: negotiationsWithCandidates.size > 0 ? delivered / negotiationsWithCandidates.size : 0,
|
|
74
|
+
time_to_handoff_seconds: timeToHandoffSeconds,
|
|
75
|
+
reported_external_conversion: null,
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
//# sourceMappingURL=metrics.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"metrics.js","sourceRoot":"","sources":["../../src/handoff/metrics.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,143 @@
|
|
|
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
|
+
import { type AuthorizeCheckoutInput, type AuthorizeCheckoutResult, type AuthorizationProvider, type CreateIntentMandateInput, type CreateIntentMandateResult, type UserConfirmationEvidence, type VerifyIntentMandateInput, type VerifyIntentMandateResult } from "./authorization.js";
|
|
17
|
+
import type { HandoffSession } from "./channel.js";
|
|
18
|
+
import type { HandoffPackage } from "./package.js";
|
|
19
|
+
/** 审批记录自身状态(撤销是显式的;过期是时间派生的)。 */
|
|
20
|
+
export declare const OPERATOR_APPROVAL_RECORD_STATUSES: readonly ["approved", "revoked"];
|
|
21
|
+
export type OperatorApprovalRecordStatus = (typeof OPERATOR_APPROVAL_RECORD_STATUSES)[number];
|
|
22
|
+
/** 底层候选生命周期状态(WriteApprovalCandidate status,write-gate 适配)。 */
|
|
23
|
+
export declare const OPERATOR_APPROVAL_SOURCE_STATUSES: readonly ["pending_approval", "approved", "executed", "rejected", "superseded", "expired"];
|
|
24
|
+
export type OperatorApprovalSourceStatus = (typeof OPERATOR_APPROVAL_SOURCE_STATUSES)[number];
|
|
25
|
+
/**
|
|
26
|
+
* 审批面(approval face)上展示的 checkout session 摘要。operator 确认的是
|
|
27
|
+
* 「这个 session + 这些 terms + 这个远端 revision」的组合,任一变化即 stale。
|
|
28
|
+
*/
|
|
29
|
+
export interface CheckoutSessionSummary {
|
|
30
|
+
session_ref: string;
|
|
31
|
+
current_terms_digest: string;
|
|
32
|
+
/** 远端 checkout 的 revision(opaque;变化即 stale)。 */
|
|
33
|
+
remote_revision: string;
|
|
34
|
+
status: string;
|
|
35
|
+
}
|
|
36
|
+
/** 从 HandoffSession 构造审批面摘要;缺省 remote_revision 用 session.updated_at。 */
|
|
37
|
+
export declare function summarizeCheckoutSession(session: Pick<HandoffSession, "session_ref" | "current_terms_digest" | "status" | "updated_at">, remoteRevision?: string): CheckoutSessionSummary;
|
|
38
|
+
/** HandoffPackage 的紧凑身份摘要(审批面确认的对象)。 */
|
|
39
|
+
export declare function digestHandoffPackage(pkg: HandoffPackage): string;
|
|
40
|
+
/**
|
|
41
|
+
* 一条已确认的 operator 审批记录。所有字段只读——状态变化通过替换整条记录实现
|
|
42
|
+
* (revokeApproval),避免原地突变。
|
|
43
|
+
*/
|
|
44
|
+
export interface OperatorApprovalRecord {
|
|
45
|
+
/** 审批 id;与 WriteApprovalCandidate.candidate_id 对齐(opaque)。 */
|
|
46
|
+
readonly approval_id: string;
|
|
47
|
+
readonly session_ref: string;
|
|
48
|
+
readonly terms_digest: string;
|
|
49
|
+
/** 审批面展示的 HandoffPackage 身份摘要。 */
|
|
50
|
+
readonly package_digest: string;
|
|
51
|
+
/** §19:候选内容摘要(candidate_digest)。 */
|
|
52
|
+
readonly candidate_digest: string;
|
|
53
|
+
/** §19:确认时的远端 checkout revision。 */
|
|
54
|
+
readonly remote_revision: string;
|
|
55
|
+
/** §19:审批生效的 policy 版本。 */
|
|
56
|
+
readonly policy_version: string;
|
|
57
|
+
readonly status: OperatorApprovalRecordStatus;
|
|
58
|
+
/** 用户/操作员显式确认时间(RFC 3339)。 */
|
|
59
|
+
readonly confirmed_at: string;
|
|
60
|
+
/** 授权有效期终点;过期即 stale(对齐 candidate expires_at)。 */
|
|
61
|
+
readonly expires_at: string;
|
|
62
|
+
readonly recorded_at: string;
|
|
63
|
+
}
|
|
64
|
+
export interface RecordOperatorApprovalInput {
|
|
65
|
+
approval_id: string;
|
|
66
|
+
/** 审批面展示的 HandoffPackage(operator 确认的对象)。 */
|
|
67
|
+
package: HandoffPackage;
|
|
68
|
+
/** 审批面展示的 checkout session 摘要。 */
|
|
69
|
+
session: CheckoutSessionSummary;
|
|
70
|
+
/** §19 candidate_digest。 */
|
|
71
|
+
candidate_digest: string;
|
|
72
|
+
/** §19 policy_version。 */
|
|
73
|
+
policy_version: string;
|
|
74
|
+
/** 可注入确认时间(RFC 3339);缺省 now。 */
|
|
75
|
+
confirmed_at?: string;
|
|
76
|
+
/** 审批有效期长度(毫秒);缺省 30 分钟。 */
|
|
77
|
+
ttl_ms?: number;
|
|
78
|
+
}
|
|
79
|
+
/** 缺省审批窗口:对齐 createPaymentAuthorization 的授权 TTL(30 分钟)。 */
|
|
80
|
+
export declare const OPERATOR_APPROVAL_TTL_MS: number;
|
|
81
|
+
/**
|
|
82
|
+
* 读取底层审批候选生命周期状态的接缝。真实实现由 write-gate 从
|
|
83
|
+
* WriteApprovalCandidateStore 适配(writeApprovalStatusSource);provider 只依赖
|
|
84
|
+
* 这一个窄接口,不直接依赖 agent 层。
|
|
85
|
+
*/
|
|
86
|
+
export interface OperatorApprovalStatusSource {
|
|
87
|
+
getApprovalState(candidateId: string): {
|
|
88
|
+
status: OperatorApprovalSourceStatus;
|
|
89
|
+
expires_at: string;
|
|
90
|
+
} | undefined;
|
|
91
|
+
}
|
|
92
|
+
export interface OperatorApprovalAuthorizationProviderOptions {
|
|
93
|
+
/** 可注入时钟(RFC 3339);缺省 new Date().toISOString()。 */
|
|
94
|
+
now?: () => string;
|
|
95
|
+
/** 底层候选生命周期来源(WriteApprovalCandidate 适配);可选。 */
|
|
96
|
+
statusSource?: OperatorApprovalStatusSource;
|
|
97
|
+
/**
|
|
98
|
+
* 返回某 session 当前的远端 revision;提供时与审批记录的 remote_revision 比对,
|
|
99
|
+
* 不一致即 stale(§19 remote_revision 绑定)。
|
|
100
|
+
*/
|
|
101
|
+
currentRevision?: (sessionRef: string) => string | undefined;
|
|
102
|
+
/**
|
|
103
|
+
* 可选持久化目录:提供时审批事件(record/revoke)落 JSONL(目录 0700、
|
|
104
|
+
* 文件 0600),重启恢复 + §19 审计留存;缺省纯内存(进程重启即失效)。
|
|
105
|
+
*/
|
|
106
|
+
persistDir?: string;
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* 把 operator 审批证据桥接为 AuthorizationProvider:
|
|
110
|
+
* - recordApproval 记录「人在审批面确认 HandoffPackage + session 摘要」;
|
|
111
|
+
* - createIntentMandate:有有效审批 → ok(intent_mandate=approval_id);
|
|
112
|
+
* 未确认 / 超时 / 被吊销 → requires_user(绝不自动授权);
|
|
113
|
+
* - verifyIntentMandate:审批 stale / 吊销 / 绑定变化 → verified:false;
|
|
114
|
+
* - authorizeCheckout:产出绑定 terms_digest + session_ref + evidence
|
|
115
|
+
* (confirmed_at ≤ approved_at)的 PaymentAuthorization。
|
|
116
|
+
*/
|
|
117
|
+
export declare class OperatorApprovalAuthorizationProvider implements AuthorizationProvider {
|
|
118
|
+
private readonly records;
|
|
119
|
+
private readonly now;
|
|
120
|
+
private readonly options;
|
|
121
|
+
private readonly journalPath?;
|
|
122
|
+
constructor(options?: OperatorApprovalAuthorizationProviderOptions);
|
|
123
|
+
/** 从 JSONL 重放审批事件(同 approval_id 后事件胜出;撕裂行容忍跳过)。 */
|
|
124
|
+
private replayJournal;
|
|
125
|
+
/** 追加一条审批事件(单行 append,原子)。 */
|
|
126
|
+
private journalAppend;
|
|
127
|
+
/** 记录一次显式确认。返回固化后的只读审批记录。 */
|
|
128
|
+
recordApproval(input: RecordOperatorApprovalInput): OperatorApprovalRecord;
|
|
129
|
+
/** 显式撤销一条审批(对齐 WriteApprovalCandidate.reject/supersede)。 */
|
|
130
|
+
revokeApproval(approvalId: string): OperatorApprovalRecord;
|
|
131
|
+
/** 只读取回一条审批记录。 */
|
|
132
|
+
getApproval(approvalId: string): OperatorApprovalRecord | undefined;
|
|
133
|
+
/** 当前审批记录数量(诊断用)。 */
|
|
134
|
+
get approvalCount(): number;
|
|
135
|
+
createIntentMandate(input: CreateIntentMandateInput): CreateIntentMandateResult;
|
|
136
|
+
verifyIntentMandate(intent_mandate: string, input: VerifyIntentMandateInput): VerifyIntentMandateResult;
|
|
137
|
+
authorizeCheckout(input: AuthorizeCheckoutInput): AuthorizeCheckoutResult;
|
|
138
|
+
private findUsableApproval;
|
|
139
|
+
/** 返回审批不可用的原因;可用时返回 undefined。判定顺序固定,便于审计。 */
|
|
140
|
+
private invalidReason;
|
|
141
|
+
}
|
|
142
|
+
/** 从审批记录构造 UserConfirmationEvidence(供上层在调用 authorizeCheckout 前展示)。 */
|
|
143
|
+
export declare function operatorConfirmationEvidence(approval: OperatorApprovalRecord, now?: () => string): UserConfirmationEvidence;
|