@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 @@
|
|
|
1
|
+
{"version":3,"file":"outbound.js","sourceRoot":"","sources":["../../../src/negotiation/recovery/outbound.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAwCH,0DAA0D;AAC1D,MAAM,UAAU,qBAAqB,CAAC,KAA2B;IAC/D,MAAM,OAAO,GAAuB;QAClC,UAAU,EAAE,cAAc;QAC1B,cAAc,EAAE,KAAK,CAAC,cAAc;QACpC,WAAW,EAAE,KAAK,CAAC,WAAW;QAC9B,UAAU,EAAE,KAAK,CAAC,UAAU;QAC5B,iBAAiB,EAAE,KAAK,CAAC,iBAAiB;QAC1C,cAAc,EAAE,KAAK,CAAC,cAAc;QACpC,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,UAAU,EAAE,KAAK,CAAC,UAAU;QAC5B,WAAW,EAAE,KAAK,CAAC,WAAW;QAC9B,YAAY,EAAE,KAAK,CAAC,YAAY;QAChC,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE;QACvB,WAAW,EAAE,KAAK,CAAC,WAAW;KAC/B,CAAC;IACF,OAAO,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;AACtC,CAAC"}
|
|
@@ -0,0 +1,59 @@
|
|
|
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 NegotiationPhase } from "../state/phase.js";
|
|
17
|
+
import type { LedgerEvent } from "../ledger/index.js";
|
|
18
|
+
import type { RecoveryDeps, RecoveryResult } from "./types.js";
|
|
19
|
+
/** 一条本地出站消息的证据(从 Ledger message_sent 事件重建)。 */
|
|
20
|
+
interface OutboundLedgerEntry {
|
|
21
|
+
message_id: string;
|
|
22
|
+
wire_digest?: string;
|
|
23
|
+
wire_payload?: Record<string, unknown>;
|
|
24
|
+
remote_task_id?: string;
|
|
25
|
+
}
|
|
26
|
+
/** 恢复子系统的审计身份(reconciliation 事件的 sender 侧)。 */
|
|
27
|
+
export declare const RECOVERY_SENDER_IDENTITY = "kiwi.recovery";
|
|
28
|
+
/**
|
|
29
|
+
* 从 Ledger 事件推断本地会话的 sender_identity(基线 §23 / §25.2)。
|
|
30
|
+
*
|
|
31
|
+
* 恢复重放必须以原会话身份打开通道:幂等主键是 (sender_identity, message_id),
|
|
32
|
+
* 若硬编码成 "kiwi.recovery",pending 消息的键与原发送不匹配 → idempotency
|
|
33
|
+
* check() 返回 new → A2ADirectChannel 真实重发并在 Ledger 产生第二条
|
|
34
|
+
* message_sent(审计重复,§23)。此处优先取 message_sent 事件的 identity
|
|
35
|
+
* snapshot(出站身份);无出站消息时取任一非 reconciliation 事件的
|
|
36
|
+
* sender_identity(reconciliation 是恢复子系统自身审计,不算会话身份);全部
|
|
37
|
+
* 缺失回退 RECOVERY_SENDER_IDENTITY(保持既有兜底)。
|
|
38
|
+
*/
|
|
39
|
+
export declare function deriveSessionIdentity(events: LedgerEvent[]): string;
|
|
40
|
+
/** 第 1 步:从 Ledger 的 state_transition 事件重建本地 phase;无记录时 OPEN。 */
|
|
41
|
+
export declare function deriveLocalPhase(events: LedgerEvent[]): NegotiationPhase;
|
|
42
|
+
/** 从 Ledger 事件收集本地出站消息(message_sent 事件)。 */
|
|
43
|
+
export declare function collectOutbound(events: LedgerEvent[]): OutboundLedgerEntry[];
|
|
44
|
+
export declare class NegotiationRecovery {
|
|
45
|
+
private readonly deps;
|
|
46
|
+
constructor(deps: RecoveryDeps);
|
|
47
|
+
private nowIso;
|
|
48
|
+
private toView;
|
|
49
|
+
private reconciliationContent;
|
|
50
|
+
/** 失败审计:不可调和的原因落 reconciliation error 事件后转人工。 */
|
|
51
|
+
private required;
|
|
52
|
+
private makeChannel;
|
|
53
|
+
/**
|
|
54
|
+
* 执行八步恢复。任何不确定性 fail-closed → reconciliation_required。
|
|
55
|
+
*/
|
|
56
|
+
recover(negotiationId: string): Promise<RecoveryResult>;
|
|
57
|
+
private resumed;
|
|
58
|
+
}
|
|
59
|
+
export {};
|
|
@@ -0,0 +1,486 @@
|
|
|
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
|
+
* 跨进程 context 恢复(基线 §23 Recovery and Reconciliation / 子规范 §27)。
|
|
18
|
+
*
|
|
19
|
+
* 八步流程的实现(WP4 后统一走 CounterpartyChannel 唯一接口):
|
|
20
|
+
*
|
|
21
|
+
* ```text
|
|
22
|
+
* 1. Load local negotiation ← 从 Ledger 重建本地 phase + 出站消息
|
|
23
|
+
* 2. Load Ledger high-water mark ← highWaterMark() + verifyChain()(fail-closed)
|
|
24
|
+
* 3. Resolve counterparty/profile ← CounterpartyResolver → CounterpartyProfile
|
|
25
|
+
* 4. Re-fetch remote task state ← ChannelHandle.getState()(direct 通道)
|
|
26
|
+
* 5. Compare acknowledged messages ← 远端可见 messageId vs 本地 message_sent
|
|
27
|
+
* 6. Reconcile remote state × Ledger ← remote ahead: fetch→validate→append;
|
|
28
|
+
* local pending: 同 id+同 digest 安全重放
|
|
29
|
+
* (ChannelHandle.send);不可调和 → 转人工
|
|
30
|
+
* 7. Expire stale candidates/approvals ← 远端 revision 变化 → 本地出站消息置 stale
|
|
31
|
+
* 8. Resume scheduler/subscription ← 返回 resume_task_ids,由调用方恢复轮询
|
|
32
|
+
* ```
|
|
33
|
+
*
|
|
34
|
+
* fail-closed 不变量:恢复过程任何不确定性(链损坏、无法解析 profile、远端不可达、
|
|
35
|
+
* 未知状态、内容校验失败、pending 无法安全重放、本地终态 vs 远端活跃)一律
|
|
36
|
+
* reconciliation_required,绝不自动生成新的商业承诺(§23 / §27)。
|
|
37
|
+
* 恢复只对 a2a-direct 通道生效:hosted 通道有独立的 claim/stale 恢复机制,不走
|
|
38
|
+
* 本流程(§24)。非 direct 通道 → reconciliation_required(不猜测,§4.6)。
|
|
39
|
+
*/
|
|
40
|
+
import { computeEnvelopeDigest, validateEnvelope, verifyEnvelopeDigest } from "../domain/envelope.js";
|
|
41
|
+
import { NegotiationValidationError } from "../domain/common.js";
|
|
42
|
+
import { isTerminalPhase } from "../state/phase.js";
|
|
43
|
+
import { isTaskState } from "../../a2a/task/index.js";
|
|
44
|
+
import { KNP_ENVELOPE_DATA_KEY } from "../../a2a/server/inbound-message.js";
|
|
45
|
+
import { openChannel, selectChannelCandidate, } from "../../counterparty/index.js";
|
|
46
|
+
const RECOVERY_CAPABILITY = { capability: "knp.a2a.recovery", protocol_version: "1.0" };
|
|
47
|
+
/** 恢复子系统的审计身份(reconciliation 事件的 sender 侧)。 */
|
|
48
|
+
export const RECOVERY_SENDER_IDENTITY = "kiwi.recovery";
|
|
49
|
+
/**
|
|
50
|
+
* 从 Ledger 事件推断本地会话的 sender_identity(基线 §23 / §25.2)。
|
|
51
|
+
*
|
|
52
|
+
* 恢复重放必须以原会话身份打开通道:幂等主键是 (sender_identity, message_id),
|
|
53
|
+
* 若硬编码成 "kiwi.recovery",pending 消息的键与原发送不匹配 → idempotency
|
|
54
|
+
* check() 返回 new → A2ADirectChannel 真实重发并在 Ledger 产生第二条
|
|
55
|
+
* message_sent(审计重复,§23)。此处优先取 message_sent 事件的 identity
|
|
56
|
+
* snapshot(出站身份);无出站消息时取任一非 reconciliation 事件的
|
|
57
|
+
* sender_identity(reconciliation 是恢复子系统自身审计,不算会话身份);全部
|
|
58
|
+
* 缺失回退 RECOVERY_SENDER_IDENTITY(保持既有兜底)。
|
|
59
|
+
*/
|
|
60
|
+
export function deriveSessionIdentity(events) {
|
|
61
|
+
for (const event of events) {
|
|
62
|
+
if (event.event_kind === "message_sent") {
|
|
63
|
+
return event.identity.sender_identity;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
for (const event of events) {
|
|
67
|
+
if (event.event_kind !== "reconciliation") {
|
|
68
|
+
return event.identity.sender_identity;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
return RECOVERY_SENDER_IDENTITY;
|
|
72
|
+
}
|
|
73
|
+
function errMsg(err) {
|
|
74
|
+
return err instanceof Error ? err.message : String(err);
|
|
75
|
+
}
|
|
76
|
+
function defaultViewMessageIds(state) {
|
|
77
|
+
const id = state.task?.status.message?.messageId;
|
|
78
|
+
return id === undefined ? [] : [id];
|
|
79
|
+
}
|
|
80
|
+
/** 第 1 步:从 Ledger 的 state_transition 事件重建本地 phase;无记录时 OPEN。 */
|
|
81
|
+
export function deriveLocalPhase(events) {
|
|
82
|
+
let phase = "OPEN";
|
|
83
|
+
for (const event of events) {
|
|
84
|
+
if (event.state_transition?.to_phase !== undefined) {
|
|
85
|
+
phase = event.state_transition.to_phase;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
return phase;
|
|
89
|
+
}
|
|
90
|
+
/** 从 Ledger 事件收集本地出站消息(message_sent 事件)。 */
|
|
91
|
+
export function collectOutbound(events) {
|
|
92
|
+
const entries = [];
|
|
93
|
+
for (const event of events) {
|
|
94
|
+
if (event.event_kind !== "message_sent" || event.message_id === undefined)
|
|
95
|
+
continue;
|
|
96
|
+
const entry = { message_id: event.message_id };
|
|
97
|
+
if (event.wire_digest !== undefined)
|
|
98
|
+
entry.wire_digest = event.wire_digest;
|
|
99
|
+
if (event.wire_payload !== undefined)
|
|
100
|
+
entry.wire_payload = event.wire_payload;
|
|
101
|
+
if (event.remote_task_id !== undefined)
|
|
102
|
+
entry.remote_task_id = event.remote_task_id;
|
|
103
|
+
entries.push(entry);
|
|
104
|
+
}
|
|
105
|
+
return entries;
|
|
106
|
+
}
|
|
107
|
+
/** Ledger 中最后一次记录的任务状态(system 观察事件),供 revision 比对。 */
|
|
108
|
+
function lastRecordedTaskState(events) {
|
|
109
|
+
let state;
|
|
110
|
+
for (const event of events) {
|
|
111
|
+
if (event.event_kind !== "system" || event.outcome.kind !== "ok")
|
|
112
|
+
continue;
|
|
113
|
+
const result = event.outcome.result;
|
|
114
|
+
if (result === undefined || typeof result !== "object")
|
|
115
|
+
continue;
|
|
116
|
+
const raw = result["task_state"];
|
|
117
|
+
if (isTaskState(raw))
|
|
118
|
+
state = raw;
|
|
119
|
+
}
|
|
120
|
+
return state;
|
|
121
|
+
}
|
|
122
|
+
/** 校验远端 task 携带的 KNP envelope;返回 messageId → 已校验 envelope。 */
|
|
123
|
+
function extractValidatedEnvelopes(task) {
|
|
124
|
+
const map = new Map();
|
|
125
|
+
const validatePart = (part) => {
|
|
126
|
+
if (part.kind !== "data")
|
|
127
|
+
return null;
|
|
128
|
+
const raw = part.data[KNP_ENVELOPE_DATA_KEY];
|
|
129
|
+
if (raw === undefined)
|
|
130
|
+
return null;
|
|
131
|
+
const env = validateEnvelope(raw);
|
|
132
|
+
if (!verifyEnvelopeDigest(env)) {
|
|
133
|
+
throw new NegotiationValidationError("state_conflict", "remote task envelope digest mismatch (integrity failure)", "/digest");
|
|
134
|
+
}
|
|
135
|
+
return env;
|
|
136
|
+
};
|
|
137
|
+
const message = task.status.message;
|
|
138
|
+
if (message !== undefined) {
|
|
139
|
+
for (const part of message.parts) {
|
|
140
|
+
const env = validatePart(part);
|
|
141
|
+
if (env !== null)
|
|
142
|
+
map.set(message.messageId, env);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
// artifacts 无 messageId:同样校验(远端内容 untrusted,§4.5),但不键控。
|
|
146
|
+
for (const artifact of task.artifacts ?? []) {
|
|
147
|
+
for (const part of artifact.parts)
|
|
148
|
+
validatePart(part);
|
|
149
|
+
}
|
|
150
|
+
return map;
|
|
151
|
+
}
|
|
152
|
+
export class NegotiationRecovery {
|
|
153
|
+
deps;
|
|
154
|
+
constructor(deps) {
|
|
155
|
+
this.deps = deps;
|
|
156
|
+
}
|
|
157
|
+
nowIso() {
|
|
158
|
+
return this.deps.now?.() ?? new Date().toISOString();
|
|
159
|
+
}
|
|
160
|
+
toView(state) {
|
|
161
|
+
const ids = (this.deps.viewMessageIds ?? defaultViewMessageIds)(state);
|
|
162
|
+
return { task: state.task ?? null, message_ids: [...new Set(ids)] };
|
|
163
|
+
}
|
|
164
|
+
reconciliationContent(negotiationId, profile, input) {
|
|
165
|
+
return {
|
|
166
|
+
event_kind: "reconciliation",
|
|
167
|
+
negotiation_id: negotiationId,
|
|
168
|
+
message_id: input.message_id,
|
|
169
|
+
remote_context_id: input.remote_context_id,
|
|
170
|
+
remote_task_id: input.remote_task_id,
|
|
171
|
+
identity: {
|
|
172
|
+
sender_identity: RECOVERY_SENDER_IDENTITY,
|
|
173
|
+
counterparty_identity: profile?.identity ?? "unresolved",
|
|
174
|
+
},
|
|
175
|
+
capability: { ...RECOVERY_CAPABILITY },
|
|
176
|
+
wire_payload: input.wire_payload,
|
|
177
|
+
outcome: input.outcome,
|
|
178
|
+
occurred_at: input.occurred_at,
|
|
179
|
+
};
|
|
180
|
+
}
|
|
181
|
+
/** 失败审计:不可调和的原因落 reconciliation error 事件后转人工。 */
|
|
182
|
+
async required(negotiationId, reason, hwm, phase, remoteState) {
|
|
183
|
+
try {
|
|
184
|
+
this.deps.ledger.append(this.reconciliationContent(negotiationId, null, {
|
|
185
|
+
outcome: { kind: "error", code: "reconciliation_required", message: reason },
|
|
186
|
+
occurred_at: this.nowIso(),
|
|
187
|
+
}));
|
|
188
|
+
}
|
|
189
|
+
catch (err) {
|
|
190
|
+
this.deps.log?.("recovery failed to record reconciliation_required evidence", err);
|
|
191
|
+
}
|
|
192
|
+
return {
|
|
193
|
+
status: "reconciliation_required",
|
|
194
|
+
negotiation_id: negotiationId,
|
|
195
|
+
reason,
|
|
196
|
+
replayed_message_ids: [],
|
|
197
|
+
remote_ahead_appended: 0,
|
|
198
|
+
stale_message_ids: [],
|
|
199
|
+
resume_task_ids: [],
|
|
200
|
+
phase,
|
|
201
|
+
remote_state: remoteState,
|
|
202
|
+
high_water_mark: hwm,
|
|
203
|
+
};
|
|
204
|
+
}
|
|
205
|
+
makeChannel(profile, input) {
|
|
206
|
+
if (this.deps.openChannel !== undefined)
|
|
207
|
+
return this.deps.openChannel(profile, input);
|
|
208
|
+
// 默认装配也注入 idempotency:恢复重放复用原 (sender_identity, message_id)
|
|
209
|
+
// 幂等键 → check() 返回 replayed → 通道不重复落 message_sent(§23/§25.2)。
|
|
210
|
+
return openChannel(profile, { ledger: this.deps.ledger, idempotency: this.deps.idempotency }, input);
|
|
211
|
+
}
|
|
212
|
+
/**
|
|
213
|
+
* 执行八步恢复。任何不确定性 fail-closed → reconciliation_required。
|
|
214
|
+
*/
|
|
215
|
+
async recover(negotiationId) {
|
|
216
|
+
const { ledger, contextMap, resolveCounterparty } = this.deps;
|
|
217
|
+
const now = this.nowIso();
|
|
218
|
+
// 1. Load local negotiation(从 Ledger 重建)。
|
|
219
|
+
let events;
|
|
220
|
+
let hwm;
|
|
221
|
+
try {
|
|
222
|
+
events = ledger.events(negotiationId);
|
|
223
|
+
hwm = ledger.highWaterMark(negotiationId);
|
|
224
|
+
}
|
|
225
|
+
catch (err) {
|
|
226
|
+
return this.required(negotiationId, `ledger unreadable: ${errMsg(err)}`, emptyHwm(negotiationId));
|
|
227
|
+
}
|
|
228
|
+
const phase = deriveLocalPhase(events);
|
|
229
|
+
const localSent = collectOutbound(events);
|
|
230
|
+
const localTaskState = lastRecordedTaskState(events);
|
|
231
|
+
// 恢复重放沿用原会话身份(§23/§25.2):从 Ledger identity snapshot 取,
|
|
232
|
+
// 不用硬编码 —— 否则幂等键 (sender_identity, message_id) 错位,通道会
|
|
233
|
+
// 真实重发并在 Ledger 产生第二条 message_sent。
|
|
234
|
+
const senderIdentity = deriveSessionIdentity(events);
|
|
235
|
+
// 2. Ledger high-water mark + 链完整性(损坏即 fail-closed,绝不可信)。
|
|
236
|
+
const chain = ledger.verifyChain(negotiationId);
|
|
237
|
+
if (!chain.valid) {
|
|
238
|
+
return this.required(negotiationId, `ledger chain invalid (${chain.error?.code ?? "unknown"} at index ${chain.error?.index ?? -1})`, hwm, phase);
|
|
239
|
+
}
|
|
240
|
+
let map = null;
|
|
241
|
+
try {
|
|
242
|
+
map = contextMap.get(negotiationId);
|
|
243
|
+
}
|
|
244
|
+
catch (err) {
|
|
245
|
+
return this.required(negotiationId, `context map corrupt: ${errMsg(err)}`, hwm, phase);
|
|
246
|
+
}
|
|
247
|
+
// 3. Resolve counterparty/profile。
|
|
248
|
+
let profile;
|
|
249
|
+
try {
|
|
250
|
+
profile = await resolveCounterparty(negotiationId);
|
|
251
|
+
}
|
|
252
|
+
catch (err) {
|
|
253
|
+
return this.required(negotiationId, `counterparty resolution failed: ${errMsg(err)}`, hwm, phase);
|
|
254
|
+
}
|
|
255
|
+
if (profile === null) {
|
|
256
|
+
if (localSent.length > 0) {
|
|
257
|
+
return this.required(negotiationId, "outbound messages pending but no counterparty profile", hwm, phase);
|
|
258
|
+
}
|
|
259
|
+
return this.resumed(negotiationId, hwm, phase, undefined, [], 0, [], map?.task_ids ?? []);
|
|
260
|
+
}
|
|
261
|
+
const contextId = map?.remote_context_id;
|
|
262
|
+
const taskIds = map?.task_ids ?? [];
|
|
263
|
+
const activeTaskId = taskIds.at(-1);
|
|
264
|
+
// 恢复只支持 direct 通道(§24:hosted 有独立的 claim/stale 恢复机制)。
|
|
265
|
+
// 先按确定性选择判定,不打开非 direct 通道(避免 hosted claim 副作用)。
|
|
266
|
+
const selected = selectChannelCandidate(profile);
|
|
267
|
+
if (selected === null || selected.kind !== "a2a-direct") {
|
|
268
|
+
return this.required(negotiationId, `recovery requires an a2a-direct channel (selected ${selected?.kind ?? "none"})`, hwm, phase);
|
|
269
|
+
}
|
|
270
|
+
let handle;
|
|
271
|
+
try {
|
|
272
|
+
handle = await this.makeChannel(profile, {
|
|
273
|
+
negotiation_id: negotiationId,
|
|
274
|
+
sender_identity: senderIdentity,
|
|
275
|
+
identity: profile.identity,
|
|
276
|
+
remote: { context_id: contextId, task_id: activeTaskId },
|
|
277
|
+
});
|
|
278
|
+
}
|
|
279
|
+
catch (err) {
|
|
280
|
+
return this.required(negotiationId, `channel open failed: ${errMsg(err)}`, hwm, phase);
|
|
281
|
+
}
|
|
282
|
+
// 防御性兜底:注入的 openChannel 若返回非 direct handle 仍 fail-closed。
|
|
283
|
+
if (handle.kind !== "a2a-direct") {
|
|
284
|
+
return this.required(negotiationId, `recovery requires an a2a-direct channel (opened ${handle.kind})`, hwm, phase);
|
|
285
|
+
}
|
|
286
|
+
// 4. Re-fetch remote task state。
|
|
287
|
+
let view = { task: null, message_ids: [] };
|
|
288
|
+
let validatedEnvelopes = new Map();
|
|
289
|
+
if (activeTaskId !== undefined) {
|
|
290
|
+
let state;
|
|
291
|
+
try {
|
|
292
|
+
state = await handle.getState({
|
|
293
|
+
negotiation_id: negotiationId,
|
|
294
|
+
context_id: contextId,
|
|
295
|
+
task_id: activeTaskId,
|
|
296
|
+
});
|
|
297
|
+
}
|
|
298
|
+
catch (err) {
|
|
299
|
+
this.deps.log?.(`recovery getState(${activeTaskId}) failed`, err);
|
|
300
|
+
return this.required(negotiationId, `remote task unreachable: ${errMsg(err)}`, hwm, phase);
|
|
301
|
+
}
|
|
302
|
+
const task = state.task;
|
|
303
|
+
if (task !== undefined && task.status.state === "unknown") {
|
|
304
|
+
return this.required(negotiationId, "remote task state is unknown (fail-closed)", hwm, phase);
|
|
305
|
+
}
|
|
306
|
+
if (task !== undefined) {
|
|
307
|
+
try {
|
|
308
|
+
validatedEnvelopes = extractValidatedEnvelopes(task);
|
|
309
|
+
}
|
|
310
|
+
catch (err) {
|
|
311
|
+
return this.required(negotiationId, `remote task content failed validation: ${errMsg(err)}`, hwm, phase);
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
view = this.toView(state);
|
|
315
|
+
}
|
|
316
|
+
// 5. Compare acknowledged messages。
|
|
317
|
+
const remoteIds = new Set(view.message_ids);
|
|
318
|
+
const localIds = new Set(events.filter((e) => e.message_id !== undefined).map((e) => e.message_id));
|
|
319
|
+
const remoteAhead = [...remoteIds].filter((id) => !localIds.has(id));
|
|
320
|
+
const pending = localSent.filter((entry) => !remoteIds.has(entry.message_id));
|
|
321
|
+
// 6. Reconcile。
|
|
322
|
+
// 6a. remote ahead:fetch → validate(已做)→ append Ledger。
|
|
323
|
+
let appended = 0;
|
|
324
|
+
for (const mid of remoteAhead) {
|
|
325
|
+
if (ledger.findByMessageId(mid) !== null)
|
|
326
|
+
continue;
|
|
327
|
+
const envelope = validatedEnvelopes.get(mid);
|
|
328
|
+
try {
|
|
329
|
+
ledger.append(this.reconciliationContent(negotiationId, profile, {
|
|
330
|
+
message_id: mid,
|
|
331
|
+
remote_context_id: contextId,
|
|
332
|
+
remote_task_id: activeTaskId,
|
|
333
|
+
wire_payload: envelope === undefined ? undefined : envelope,
|
|
334
|
+
outcome: {
|
|
335
|
+
kind: "ok",
|
|
336
|
+
result: {
|
|
337
|
+
remote_ahead_message_id: mid,
|
|
338
|
+
remote_state: view.task?.status.state,
|
|
339
|
+
},
|
|
340
|
+
},
|
|
341
|
+
occurred_at: now,
|
|
342
|
+
}));
|
|
343
|
+
appended += 1;
|
|
344
|
+
}
|
|
345
|
+
catch (err) {
|
|
346
|
+
return this.required(negotiationId, `failed to append remote-ahead reconciliation: ${errMsg(err)}`, hwm, phase, view.task?.status.state);
|
|
347
|
+
}
|
|
348
|
+
}
|
|
349
|
+
// 6b. local pending:同 message_id + 同 digest → 安全幂等重放;否则转人工。
|
|
350
|
+
if (pending.length > 0 && contextId === undefined && activeTaskId === undefined) {
|
|
351
|
+
return this.required(negotiationId, "local pending messages but no remote context/task anchor to continue", hwm, phase);
|
|
352
|
+
}
|
|
353
|
+
const replayed = [];
|
|
354
|
+
for (const entry of pending) {
|
|
355
|
+
// 幂等守卫:先前一次恢复已重放过该消息(reconciliation 事件记录了
|
|
356
|
+
// replayed_message_id),不再重复发送、不再重复落账。
|
|
357
|
+
if (hasReplayEvidence(events, entry.message_id)) {
|
|
358
|
+
replayed.push(entry.message_id);
|
|
359
|
+
continue;
|
|
360
|
+
}
|
|
361
|
+
const remoteState = view.task?.status.state;
|
|
362
|
+
if (remoteState !== undefined && isTerminalTaskStateValue(remoteState)) {
|
|
363
|
+
return this.required(negotiationId, `local message ${entry.message_id} pending but remote task is terminal (${remoteState})`, hwm, phase, remoteState);
|
|
364
|
+
}
|
|
365
|
+
// 同 id + 同 digest 校验:重算 envelope digest 与存储的 wire_digest 一致。
|
|
366
|
+
const digestOk = entry.wire_digest !== undefined &&
|
|
367
|
+
entry.wire_payload !== undefined &&
|
|
368
|
+
entry.wire_payload["message_id"] === entry.message_id &&
|
|
369
|
+
computeEnvelopeDigest(entry.wire_payload) === entry.wire_digest;
|
|
370
|
+
if (!digestOk) {
|
|
371
|
+
return this.required(negotiationId, `local message ${entry.message_id} cannot be verified for safe replay (missing/conflicting digest)`, hwm, phase);
|
|
372
|
+
}
|
|
373
|
+
const envelope = entry.wire_payload;
|
|
374
|
+
const ref = {
|
|
375
|
+
negotiation_id: negotiationId,
|
|
376
|
+
context_id: contextId,
|
|
377
|
+
task_id: activeTaskId,
|
|
378
|
+
};
|
|
379
|
+
try {
|
|
380
|
+
const result = await handle.send({ envelope, ref });
|
|
381
|
+
replayed.push(entry.message_id);
|
|
382
|
+
ledger.append(this.reconciliationContent(negotiationId, profile, {
|
|
383
|
+
message_id: entry.message_id,
|
|
384
|
+
remote_context_id: contextId,
|
|
385
|
+
remote_task_id: activeTaskId,
|
|
386
|
+
outcome: { kind: "ok", result: { replayed_message_id: entry.message_id } },
|
|
387
|
+
occurred_at: now,
|
|
388
|
+
}));
|
|
389
|
+
// 重放响应可能携带远端新信息(如 counter):补记 remote ahead。
|
|
390
|
+
if (result.task !== undefined) {
|
|
391
|
+
const replyState = {
|
|
392
|
+
channel: "a2a-direct",
|
|
393
|
+
state: result.task.status.state,
|
|
394
|
+
stable: true,
|
|
395
|
+
task: result.task,
|
|
396
|
+
message_ids: result.task.status.message?.messageId === undefined
|
|
397
|
+
? []
|
|
398
|
+
: [result.task.status.message.messageId],
|
|
399
|
+
observed_at: now,
|
|
400
|
+
};
|
|
401
|
+
const replyView = this.toView(replyState);
|
|
402
|
+
for (const mid of replyView.message_ids) {
|
|
403
|
+
if (localIds.has(mid) || ledger.findByMessageId(mid) !== null)
|
|
404
|
+
continue;
|
|
405
|
+
ledger.append(this.reconciliationContent(negotiationId, profile, {
|
|
406
|
+
message_id: mid,
|
|
407
|
+
remote_context_id: contextId,
|
|
408
|
+
remote_task_id: result.task?.id,
|
|
409
|
+
outcome: {
|
|
410
|
+
kind: "ok",
|
|
411
|
+
result: { remote_ahead_message_id: mid, remote_state: result.task?.status.state },
|
|
412
|
+
},
|
|
413
|
+
occurred_at: now,
|
|
414
|
+
}));
|
|
415
|
+
appended += 1;
|
|
416
|
+
}
|
|
417
|
+
}
|
|
418
|
+
}
|
|
419
|
+
catch (err) {
|
|
420
|
+
return this.required(negotiationId, `safe replay of ${entry.message_id} failed: ${errMsg(err)}`, hwm, phase);
|
|
421
|
+
}
|
|
422
|
+
}
|
|
423
|
+
// 本地终态 vs 远端活跃:矛盾,不可调和。
|
|
424
|
+
const remoteState = view.task?.status.state;
|
|
425
|
+
if (isTerminalPhase(phase) && remoteState !== undefined && !isTerminalTaskStateValue(remoteState)) {
|
|
426
|
+
return this.required(negotiationId, `local phase ${phase} is terminal but remote task is still ${remoteState}`, hwm, phase, remoteState);
|
|
427
|
+
}
|
|
428
|
+
// 7. Expire stale candidates/approvals:远端 revision 变化 → 本地出站消息置 stale。
|
|
429
|
+
const stale = [];
|
|
430
|
+
const revisionChanged = localTaskState !== undefined && remoteState !== undefined && localTaskState !== remoteState;
|
|
431
|
+
if (revisionChanged) {
|
|
432
|
+
for (const entry of localSent)
|
|
433
|
+
stale.push(entry.message_id);
|
|
434
|
+
}
|
|
435
|
+
if (this.deps.expireStale !== undefined && stale.length > 0) {
|
|
436
|
+
try {
|
|
437
|
+
await this.deps.expireStale(negotiationId, stale);
|
|
438
|
+
}
|
|
439
|
+
catch (err) {
|
|
440
|
+
return this.required(negotiationId, `expireStale failed: ${errMsg(err)}`, hwm, phase, remoteState);
|
|
441
|
+
}
|
|
442
|
+
}
|
|
443
|
+
// 8. Resume。
|
|
444
|
+
return this.resumed(negotiationId, hwm, phase, remoteState, replayed, appended, stale, taskIds);
|
|
445
|
+
}
|
|
446
|
+
resumed(negotiationId, hwm, phase, remoteState, replayed = [], appended = 0, stale = [], resumeTaskIds = []) {
|
|
447
|
+
return {
|
|
448
|
+
status: "resumed",
|
|
449
|
+
negotiation_id: negotiationId,
|
|
450
|
+
replayed_message_ids: replayed,
|
|
451
|
+
remote_ahead_appended: appended,
|
|
452
|
+
stale_message_ids: stale,
|
|
453
|
+
resume_task_ids: resumeTaskIds,
|
|
454
|
+
phase,
|
|
455
|
+
remote_state: remoteState,
|
|
456
|
+
high_water_mark: hwm,
|
|
457
|
+
};
|
|
458
|
+
}
|
|
459
|
+
}
|
|
460
|
+
function isTerminalTaskStateValue(value) {
|
|
461
|
+
return value === "completed" || value === "canceled" || value === "failed";
|
|
462
|
+
}
|
|
463
|
+
/** 该消息是否已有成功重放的 reconciliation 证据(幂等守卫)。 */
|
|
464
|
+
function hasReplayEvidence(events, messageId) {
|
|
465
|
+
for (const event of events) {
|
|
466
|
+
if (event.event_kind !== "reconciliation" || event.outcome.kind !== "ok")
|
|
467
|
+
continue;
|
|
468
|
+
const result = event.outcome.result;
|
|
469
|
+
if (result === undefined || typeof result !== "object")
|
|
470
|
+
continue;
|
|
471
|
+
if (result["replayed_message_id"] === messageId)
|
|
472
|
+
return true;
|
|
473
|
+
}
|
|
474
|
+
return false;
|
|
475
|
+
}
|
|
476
|
+
/** Ledger 无法读取时的占位高水位(恢复第一步 fail-closed 用)。 */
|
|
477
|
+
function emptyHwm(negotiationId) {
|
|
478
|
+
return {
|
|
479
|
+
negotiation_id: negotiationId,
|
|
480
|
+
count: 0,
|
|
481
|
+
last_event_id: null,
|
|
482
|
+
last_event_digest: null,
|
|
483
|
+
last_recorded_at: null,
|
|
484
|
+
};
|
|
485
|
+
}
|
|
486
|
+
//# sourceMappingURL=recover.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"recover.js","sourceRoot":"","sources":["../../../src/negotiation/recovery/recover.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,85 @@
|
|
|
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
|
+
* Recovery 契约(基线 §23 / 子规范 §27)。
|
|
18
|
+
*
|
|
19
|
+
* 恢复流程八步的接缝定义。WP4 之后,对端访问面收敛为唯一
|
|
20
|
+
* `CounterpartyChannel` 接口(src/counterparty/channel.ts):
|
|
21
|
+
*
|
|
22
|
+
* - `resolveCounterparty` 返回 `CounterpartyProfile`(§33 AgentDiscovery 产出,
|
|
23
|
+
* 含 channel candidates);
|
|
24
|
+
* - `openChannel` 打开一条绑定到 negotiation 的 ChannelHandle
|
|
25
|
+
* (send/getState/subscribe/close);
|
|
26
|
+
* - 恢复第 4/6 步经 ChannelHandle.getState/send 访问远端,不再有第二套
|
|
27
|
+
* RemoteTaskGateway 契约。
|
|
28
|
+
*
|
|
29
|
+
* 「远端不可信」仍落地为:getState 返回的 A2A task / envelope 必须通过
|
|
30
|
+
* 校验才能进入 Ledger;任何不确定性 fail-closed → reconciliation_required。
|
|
31
|
+
*/
|
|
32
|
+
import type { A2ATaskState } from "../../a2a/client/index.js";
|
|
33
|
+
import type { ChannelHandle, ChannelOpenInput, CounterpartyProfile, RemoteState } from "../../counterparty/index.js";
|
|
34
|
+
import type { IdempotencyStore } from "../idempotency/index.js";
|
|
35
|
+
import type { LedgerHighWaterMark } from "../ledger/index.js";
|
|
36
|
+
import type { NegotiationPhase } from "../state/phase.js";
|
|
37
|
+
/** negotiation_id → 对端通道档案;未知返回 null。 */
|
|
38
|
+
export type CounterpartyResolver = (negotiationId: string) => Promise<CounterpartyProfile | null>;
|
|
39
|
+
/** 由档案打开通道;缺省用 profile 首选候选(openChannel,绝不降级)。 */
|
|
40
|
+
export type ChannelOpener = (profile: CounterpartyProfile, input: ChannelOpenInput) => Promise<ChannelHandle>;
|
|
41
|
+
/** 从 RemoteState 提取远端可见 messageId;缺省取 task.status.message.messageId。 */
|
|
42
|
+
export type RemoteViewMessageIds = (state: RemoteState) => string[];
|
|
43
|
+
export type RecoveryStatus = "resumed" | "reconciliation_required";
|
|
44
|
+
export interface RecoveryResult {
|
|
45
|
+
status: RecoveryStatus;
|
|
46
|
+
negotiation_id: string;
|
|
47
|
+
/** reconciliation_required 时的原因(转人工)。 */
|
|
48
|
+
reason?: string;
|
|
49
|
+
/** 安全重放成功的本地 pending messageId 列表(同 message_id + 同 digest)。 */
|
|
50
|
+
replayed_message_ids: string[];
|
|
51
|
+
/** remote-ahead 分支落账的 reconciliation 事件数。 */
|
|
52
|
+
remote_ahead_appended: number;
|
|
53
|
+
/** 标记为 stale(需失效)的本地 messageId。 */
|
|
54
|
+
stale_message_ids: string[];
|
|
55
|
+
/** 恢复后应继续轮询的 taskId 列表。 */
|
|
56
|
+
resume_task_ids: string[];
|
|
57
|
+
/** 恢复时重建的本地 phase。 */
|
|
58
|
+
phase?: NegotiationPhase;
|
|
59
|
+
/** 远端任务状态(如有)。 */
|
|
60
|
+
remote_state?: A2ATaskState;
|
|
61
|
+
high_water_mark: LedgerHighWaterMark;
|
|
62
|
+
}
|
|
63
|
+
export interface RecoveryDeps {
|
|
64
|
+
/** 本地权威审计链(§22 / §23 第 2、5 步)。 */
|
|
65
|
+
ledger: import("../ledger/index.js").LedgerStore;
|
|
66
|
+
/** negotiation_id ↔ 远端 contextId/taskId(§9.2)。 */
|
|
67
|
+
contextMap: import("../context-map/index.js").ContextMapStore;
|
|
68
|
+
/**
|
|
69
|
+
* 协议幂等(§20 / §23)。缺省装配通道时注入:恢复重放沿用原
|
|
70
|
+
* (sender_identity, message_id) 幂等键 → check() 返回 replayed → 通道不重复
|
|
71
|
+
* 落 message_sent(§25.2)。注入 openChannel 时由注入方负责。
|
|
72
|
+
*/
|
|
73
|
+
idempotency?: IdempotencyStore;
|
|
74
|
+
/** 对端通道档案解析(第 3 步)。 */
|
|
75
|
+
resolveCounterparty: CounterpartyResolver;
|
|
76
|
+
/** 打开通道(第 3 步后);缺省用 profile 首选候选。 */
|
|
77
|
+
openChannel?: ChannelOpener;
|
|
78
|
+
/** 从 RemoteState 提取远端已确认 messageId;缺省取 task.status.message.messageId。 */
|
|
79
|
+
viewMessageIds?: RemoteViewMessageIds;
|
|
80
|
+
/** 第 7 步失效接缝:把 stale 的候选/批准标记为过期(WP 接线方实现)。 */
|
|
81
|
+
expireStale?: (negotiationId: string, staleMessageIds: string[]) => void | Promise<void>;
|
|
82
|
+
/** 可注入时钟(RFC 3339)。 */
|
|
83
|
+
now?: () => string;
|
|
84
|
+
log?: (message: string, err?: unknown) => void;
|
|
85
|
+
}
|