@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,49 @@
|
|
|
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 { Readable, Writable } from "node:stream";
|
|
17
|
+
import type { AgentKernel } from "./kernel.js";
|
|
18
|
+
/** A2A 节点状态(供 `/a2a` 显示)。 */
|
|
19
|
+
export interface ChatA2aNodeStatus {
|
|
20
|
+
role: string;
|
|
21
|
+
url: string;
|
|
22
|
+
agentCardUrl: string;
|
|
23
|
+
catalogAgentId?: string;
|
|
24
|
+
}
|
|
25
|
+
/** A2A 节点生命周期管理(由 cli 层持有;`/profile` 换角色时 rebuild)。 */
|
|
26
|
+
export interface ChatA2aNode {
|
|
27
|
+
status(): ChatA2aNodeStatus | null;
|
|
28
|
+
rebuild(profile: {
|
|
29
|
+
role: string;
|
|
30
|
+
agent_id: string;
|
|
31
|
+
}): Promise<void>;
|
|
32
|
+
stop(): Promise<void>;
|
|
33
|
+
}
|
|
34
|
+
export interface ChatTuiOptions {
|
|
35
|
+
kernel: AgentKernel;
|
|
36
|
+
input: Readable;
|
|
37
|
+
output: Writable;
|
|
38
|
+
/**
|
|
39
|
+
* `/profile <file>` 时调用:加载 profile 并构建新 kernel(调用方负责
|
|
40
|
+
* AgentKernel.open 与 close 语义)。失败时抛错,TUI 保留当前 kernel。
|
|
41
|
+
*/
|
|
42
|
+
reload?: (profileFile: string) => Promise<AgentKernel>;
|
|
43
|
+
/** A2A 节点(自动启动,随 `/profile` 角色切换重建)。 */
|
|
44
|
+
a2aNode?: ChatA2aNode;
|
|
45
|
+
/** agent catalog base URL(`/discover`、`/negotiate` 用)。 */
|
|
46
|
+
catalog?: string;
|
|
47
|
+
}
|
|
48
|
+
/** Run the main chat loop. Resolves EXIT.OK on /quit or EOF. */
|
|
49
|
+
export declare function runChatTui(options: ChatTuiOptions): Promise<number>;
|
|
@@ -0,0 +1,314 @@
|
|
|
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
|
+
* Main-conversation TUI (design §4, §6.4): plain node:readline over
|
|
18
|
+
* injected streams — no TTY requirement, tests drive it in-memory.
|
|
19
|
+
* Free text goes to the model via the kernel; slash commands are the
|
|
20
|
+
* deterministic control shortcuts.
|
|
21
|
+
*
|
|
22
|
+
* `/profile <file>`(TUI 层拦截):加载并切换到另一个 agent profile 的
|
|
23
|
+
* kernel(如 buyer/merchant),供裸 `kiwi` 启动后自由换身份。
|
|
24
|
+
*/
|
|
25
|
+
import readline from "node:readline";
|
|
26
|
+
import { EXIT } from "../exit-codes.js";
|
|
27
|
+
import { ShoppingCliCatalogSource } from "../discovery/catalog-source/index.js";
|
|
28
|
+
import { negotiateWithAgent, summarizeNegotiation } from "../a2a/negotiate.js";
|
|
29
|
+
import { createTheme } from "../tui/styles.js";
|
|
30
|
+
import { PRODUCT_VERSION } from "../product-cli.js";
|
|
31
|
+
function roleLabelOf(role) {
|
|
32
|
+
return role === "buyer" ? "Buyer" : "Merchant";
|
|
33
|
+
}
|
|
34
|
+
/** Run the main chat loop. Resolves EXIT.OK on /quit or EOF. */
|
|
35
|
+
export async function runChatTui(options) {
|
|
36
|
+
const { input, output, reload, a2aNode, catalog } = options;
|
|
37
|
+
// Neural Awakening 主题(参照 hermes):非 TTY 时所有样式直通原文——
|
|
38
|
+
// 既有内存流测试断言字节级不变。
|
|
39
|
+
const theme = createTheme(output);
|
|
40
|
+
const write = (text) => {
|
|
41
|
+
output.write(`${theme.decorate(text)}\n`);
|
|
42
|
+
};
|
|
43
|
+
// 可变 kernel 引用:`/profile` 切换时更新,定时器与循环自动跟随。
|
|
44
|
+
let current = { kernel: options.kernel };
|
|
45
|
+
// 欢迎界面(hermes build_welcome_banner 结构):大号渐变 logo + 带版本
|
|
46
|
+
// 标题的信息面板;非 TTY 下 theme.welcome 返回现状单行(字节不变)。
|
|
47
|
+
const renderWelcome = () => {
|
|
48
|
+
const mode = current.kernel.getMode();
|
|
49
|
+
write(theme.welcome({
|
|
50
|
+
roleLabel: roleLabelOf(current.kernel.profile.role),
|
|
51
|
+
id: current.kernel.principal.principal_id,
|
|
52
|
+
tagline: "主对话(/help 查看命令,/quit 退出)",
|
|
53
|
+
versionLabel: `kiwi ${PRODUCT_VERSION}`,
|
|
54
|
+
commerceUrl: current.kernel.profile.commerce.base_url,
|
|
55
|
+
modelLabel: `${current.kernel.profile.model.provider}/${current.kernel.profile.model.model}`,
|
|
56
|
+
modeLabel: mode === "autopilot" ? "Autopilot" : mode === "manual" ? "Manual" : "Supervised",
|
|
57
|
+
a2aOn: a2aNode?.status() !== undefined && a2aNode?.status() !== null,
|
|
58
|
+
catalog,
|
|
59
|
+
commands: "/help /profile /handoff /discover /negotiate /a2a /quit",
|
|
60
|
+
}));
|
|
61
|
+
};
|
|
62
|
+
renderWelcome();
|
|
63
|
+
// Restart recovery: wakeups derive from the database, so an immediate tick
|
|
64
|
+
// rebuilds the queue; a slow unref'd timer keeps tracking tasks alive.
|
|
65
|
+
// 失败的 tick 必须可见:搜索/观察错误写进聊天(按内容去重,干净一轮后重置),
|
|
66
|
+
// 否则"任务在 tracking 但一直失败"会表现为无声卡住。
|
|
67
|
+
const surfacedErrors = new Set();
|
|
68
|
+
const tickAndNotify = async () => {
|
|
69
|
+
const result = await current.kernel.schedulerTick().catch(() => undefined);
|
|
70
|
+
if (result === undefined)
|
|
71
|
+
return;
|
|
72
|
+
for (const n of result.notifications) {
|
|
73
|
+
write(`[通知] ${n.summary}(任务 ${n.task_id})`);
|
|
74
|
+
}
|
|
75
|
+
if (result.errors.length === 0) {
|
|
76
|
+
surfacedErrors.clear();
|
|
77
|
+
return;
|
|
78
|
+
}
|
|
79
|
+
for (const e of result.errors) {
|
|
80
|
+
if (surfacedErrors.has(e))
|
|
81
|
+
continue;
|
|
82
|
+
surfacedErrors.add(e);
|
|
83
|
+
write(`[任务] ${e}`);
|
|
84
|
+
}
|
|
85
|
+
};
|
|
86
|
+
await tickAndNotify();
|
|
87
|
+
const timer = setInterval(() => {
|
|
88
|
+
void tickAndNotify();
|
|
89
|
+
}, 60_000);
|
|
90
|
+
timer.unref();
|
|
91
|
+
// Autonomous negotiation (autopilot): poll for pending negotiation messages
|
|
92
|
+
// and drive one model turn per tick. No-op outside autopilot.
|
|
93
|
+
const negotiate = async () => {
|
|
94
|
+
const text = await current.kernel.negotiationAutoTick().catch(() => undefined);
|
|
95
|
+
if (text !== undefined && text !== "")
|
|
96
|
+
write(`[磋商] ${text}`);
|
|
97
|
+
};
|
|
98
|
+
await negotiate();
|
|
99
|
+
const negotiateTimer = setInterval(() => {
|
|
100
|
+
void negotiate();
|
|
101
|
+
}, 15_000);
|
|
102
|
+
negotiateTimer.unref();
|
|
103
|
+
try {
|
|
104
|
+
const rl = readline.createInterface({
|
|
105
|
+
input,
|
|
106
|
+
output,
|
|
107
|
+
terminal: input.isTTY === true,
|
|
108
|
+
// 彩色 prompt(青色;Node 22 readline 对 ANSI prompt 的宽度计算已验证)
|
|
109
|
+
prompt: theme.enabled ? theme.paint("kiwi> ", "accent") : "kiwi> ",
|
|
110
|
+
});
|
|
111
|
+
// EOF (Ctrl-D, or an injected stream that ends) closes the interface while
|
|
112
|
+
// the last line is still being handled; prompting a closed readline throws.
|
|
113
|
+
let rlClosed = false;
|
|
114
|
+
rl.once("close", () => {
|
|
115
|
+
rlClosed = true;
|
|
116
|
+
});
|
|
117
|
+
// 状态栏 + prompt 重绘(TTY-only):状态栏写在输入行上方,readline 的
|
|
118
|
+
// 重绘只碰自己的行,正在输入的缓冲由 readline 完整重画不丢字。
|
|
119
|
+
// 非 TTY 下 statusBar 返回空串 → 等价旧 rl.prompt()(零额外字节)。
|
|
120
|
+
const refreshPrompt = () => {
|
|
121
|
+
if (rlClosed)
|
|
122
|
+
return;
|
|
123
|
+
if (theme.enabled) {
|
|
124
|
+
output.write("\r\u001b[K");
|
|
125
|
+
const mode = current.kernel.getMode();
|
|
126
|
+
const modeColor = mode === "autopilot" ? "accent" : mode === "supervised" ? "primary" : "warn";
|
|
127
|
+
const segments = [
|
|
128
|
+
{ text: `Kiwi ${roleLabelOf(current.kernel.profile.role)}`, color: "primary", bold: true },
|
|
129
|
+
current.kernel.principal.principal_id,
|
|
130
|
+
{ text: mode === "autopilot" ? "Autopilot" : mode === "manual" ? "Manual" : "Supervised", color: modeColor },
|
|
131
|
+
a2aNode?.status() !== undefined && a2aNode?.status() !== null
|
|
132
|
+
? { text: "A2A on", color: "ok" }
|
|
133
|
+
: { text: "A2A off", color: "muted", dim: true },
|
|
134
|
+
catalog !== undefined ? `catalog ${catalog}` : "catalog —",
|
|
135
|
+
];
|
|
136
|
+
output.write(`${theme.statusBar(segments)}\n`);
|
|
137
|
+
}
|
|
138
|
+
rl.prompt();
|
|
139
|
+
};
|
|
140
|
+
refreshPrompt();
|
|
141
|
+
for await (const rawLine of rl) {
|
|
142
|
+
const line = String(rawLine).trim();
|
|
143
|
+
if (line !== "") {
|
|
144
|
+
if (line.startsWith("/profile")) {
|
|
145
|
+
const file = line.slice("/profile".length).trim();
|
|
146
|
+
if (file === "" || reload === undefined) {
|
|
147
|
+
write("用法:/profile <profile.yaml>(无参数或未配置 reload 时不可用)");
|
|
148
|
+
}
|
|
149
|
+
else {
|
|
150
|
+
try {
|
|
151
|
+
const next = await reload(file);
|
|
152
|
+
if (next !== current.kernel) {
|
|
153
|
+
await current.kernel.close().catch(() => undefined);
|
|
154
|
+
current = { kernel: next };
|
|
155
|
+
// 换角色:同步重建 A2A 节点(merchant 自动重新注册 catalog)。
|
|
156
|
+
if (a2aNode !== undefined) {
|
|
157
|
+
await a2aNode.rebuild(current.kernel.profile).catch((err) => {
|
|
158
|
+
write(`A2A 节点重建失败(对话继续):${err instanceof Error ? err.message : String(err)}`);
|
|
159
|
+
});
|
|
160
|
+
}
|
|
161
|
+
renderWelcome();
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
catch (err) {
|
|
165
|
+
write(`加载 profile 失败,保留当前 agent:${err instanceof Error ? err.message : String(err)}`);
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
else if (line === "/a2a") {
|
|
170
|
+
const status = a2aNode?.status();
|
|
171
|
+
if (status === undefined || status === null) {
|
|
172
|
+
write("A2A 节点未启动。");
|
|
173
|
+
}
|
|
174
|
+
else {
|
|
175
|
+
write(`[a2a] ${status.role}@${status.url}${status.catalogAgentId !== undefined ? ` registered ${status.catalogAgentId}` : ""}(card: ${status.agentCardUrl})`);
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
else if (line.startsWith("/discover")) {
|
|
179
|
+
if (catalog === undefined) {
|
|
180
|
+
write("未配置 agent catalog(KIWI_CATALOG_URL 或 --catalog)。");
|
|
181
|
+
}
|
|
182
|
+
else {
|
|
183
|
+
try {
|
|
184
|
+
const source = new ShoppingCliCatalogSource({ baseUrl: catalog });
|
|
185
|
+
const candidates = await source.searchCandidates();
|
|
186
|
+
if (candidates.length === 0) {
|
|
187
|
+
write("[discover] catalog 里没有可发现的 agent。");
|
|
188
|
+
}
|
|
189
|
+
else {
|
|
190
|
+
// panel 化:行内容与现状逐字节一致,TTY 下 box 包裹
|
|
191
|
+
const lines = candidates.map((c) => {
|
|
192
|
+
const card = c.discovery?.agent_card_url ?? c.merchant?.domain ?? "?";
|
|
193
|
+
return `[discover] ${c.catalog_agent_id} status=${c.verification?.status ?? "?"} ${card}`;
|
|
194
|
+
});
|
|
195
|
+
write(theme.panel(lines));
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
catch (err) {
|
|
199
|
+
write(`[discover] 失败:${err instanceof Error ? err.message : String(err)}`);
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
else if (line === "/handoff" || line.startsWith("/handoff ")) {
|
|
204
|
+
// 惰性过期清扫(评审项 L1):到期未执行的候选先落 expired 事件,
|
|
205
|
+
// 列表不再显示"从未获批/从未执行"的过期候选。
|
|
206
|
+
current.kernel.sweepHandoffCandidates();
|
|
207
|
+
const summary = current.kernel.handoffSummary;
|
|
208
|
+
if (summary.enabled === false) {
|
|
209
|
+
write("[handoff] 当前 kernel 未启用 Handoff(buyer 角色)。");
|
|
210
|
+
}
|
|
211
|
+
else {
|
|
212
|
+
// panel 化:TTY 下 box 包裹;非 TTY 下 join 输出与现状逐字节一致
|
|
213
|
+
// (保留候选/交付行的前导空格)。
|
|
214
|
+
const lines = [
|
|
215
|
+
`[handoff] 候选 ${summary.candidates.length} 个 / 交付 ${summary.handoffs.length} 个`,
|
|
216
|
+
...summary.candidates.flatMap((c) => [
|
|
217
|
+
` candidate ${c.candidate_id} ${c.lifecycle} ${c.destination_type} ${c.destination_ref}`,
|
|
218
|
+
` ${c.display_summary.merchant} — ${c.display_summary.summary}(negotiation ${c.negotiation_id})`,
|
|
219
|
+
]),
|
|
220
|
+
...summary.handoffs.map((h) => ` handoff ${h.handoff_id} delivery=${h.delivery}`),
|
|
221
|
+
];
|
|
222
|
+
write(theme.panel(lines));
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
else if (line.startsWith("/handoff-open ")) {
|
|
226
|
+
const rest = line.slice("/handoff-open ".length).trim();
|
|
227
|
+
const parts = rest.split(/\s+/);
|
|
228
|
+
const handoffId = parts[0] ?? "";
|
|
229
|
+
const negotiationId = parts[1] ?? "";
|
|
230
|
+
if (handoffId === "") {
|
|
231
|
+
write("用法:/handoff-open <handoff_id> <negotiation_id>");
|
|
232
|
+
}
|
|
233
|
+
else if (negotiationId === "") {
|
|
234
|
+
write("缺少 negotiation_id(handoff 事件按 negotiation 落链,需提供)。");
|
|
235
|
+
}
|
|
236
|
+
else {
|
|
237
|
+
try {
|
|
238
|
+
write(await current.kernel.confirmHandoffOpened(handoffId, negotiationId));
|
|
239
|
+
}
|
|
240
|
+
catch (err) {
|
|
241
|
+
write(`[handoff-open] 失败:${err instanceof Error ? err.message : String(err)}`);
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
else if (line.startsWith("/handoff-launch ")) {
|
|
246
|
+
const rest = line.slice("/handoff-launch ".length).trim();
|
|
247
|
+
const parts = rest.split(/\s+/);
|
|
248
|
+
const handoffId = parts[0] ?? "";
|
|
249
|
+
const negotiationId = parts[1] ?? "";
|
|
250
|
+
if (handoffId === "" || negotiationId === "") {
|
|
251
|
+
write("用法:/handoff-launch <handoff_id> <negotiation_id>");
|
|
252
|
+
}
|
|
253
|
+
else {
|
|
254
|
+
try {
|
|
255
|
+
write(await current.kernel.launchHandoff(handoffId, negotiationId));
|
|
256
|
+
}
|
|
257
|
+
catch (err) {
|
|
258
|
+
write(`[handoff-launch] 失败:${err instanceof Error ? err.message : String(err)}`);
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
else if (line.startsWith("/negotiate")) {
|
|
263
|
+
if (catalog === undefined) {
|
|
264
|
+
write("未配置 agent catalog(KIWI_CATALOG_URL 或 --catalog)。");
|
|
265
|
+
}
|
|
266
|
+
else {
|
|
267
|
+
const targetId = line.slice("/negotiate".length).trim();
|
|
268
|
+
write(`[negotiate] 与 ${targetId === "" ? "首个可发现 agent" : targetId} 磋商中…`);
|
|
269
|
+
const result = await negotiateWithAgent({
|
|
270
|
+
catalog,
|
|
271
|
+
...(targetId !== "" ? { catalogAgentId: targetId } : {}),
|
|
272
|
+
});
|
|
273
|
+
const summary = summarizeNegotiation(result);
|
|
274
|
+
write(`[negotiate]\n${summary}`);
|
|
275
|
+
// 磋商结果注入会话 + 写入记忆:下一轮提问时模型能看到(消除"两个脑")。
|
|
276
|
+
if (result.ok) {
|
|
277
|
+
await current.kernel.injectContext(summary).catch(() => undefined);
|
|
278
|
+
await current.kernel
|
|
279
|
+
.recordNegotiation({
|
|
280
|
+
negotiationId: result.negotiationId,
|
|
281
|
+
catalogAgentId: result.catalogAgentId,
|
|
282
|
+
sku: result.facts?.sku ?? "sku-001",
|
|
283
|
+
quantity: result.facts?.quantity ?? 200,
|
|
284
|
+
offerPriceMinor: result.facts?.offerPriceMinor,
|
|
285
|
+
dealPriceMinor: result.facts?.dealPriceMinor,
|
|
286
|
+
...(result.agreement?.agreement_id !== undefined
|
|
287
|
+
? { agreementId: String(result.agreement.agreement_id) }
|
|
288
|
+
: {}),
|
|
289
|
+
})
|
|
290
|
+
.catch(() => undefined);
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
else {
|
|
295
|
+
const reply = await current.kernel.handleUserText(line);
|
|
296
|
+
if (reply.text !== "")
|
|
297
|
+
write(reply.text);
|
|
298
|
+
if (reply.quit)
|
|
299
|
+
break;
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
if (!rlClosed)
|
|
303
|
+
refreshPrompt();
|
|
304
|
+
}
|
|
305
|
+
rl.close();
|
|
306
|
+
return EXIT.OK;
|
|
307
|
+
}
|
|
308
|
+
finally {
|
|
309
|
+
clearInterval(timer);
|
|
310
|
+
clearInterval(negotiateTimer);
|
|
311
|
+
await a2aNode?.stop().catch(() => undefined);
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
//# sourceMappingURL=chat-tui.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chat-tui.js","sourceRoot":"","sources":["../../src/agent/chat-tui.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,50 @@
|
|
|
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
|
+
* Deterministic in-memory Commerce Connector for tests and offline smoke
|
|
18
|
+
* runs. Filter semantics mirror shopping-cli's /search/products: case-
|
|
19
|
+
* insensitive substring match over title/description/category/tags, plus
|
|
20
|
+
* city/area, max_price and stock filters.
|
|
21
|
+
*/
|
|
22
|
+
import { type CommerceConnector, type ConnectorMerchant, type ConnectorProduct, type SearchMerchantsQuery, type SearchProductsQuery } from "./types.js";
|
|
23
|
+
export declare class FakeCommerceConnector implements CommerceConnector {
|
|
24
|
+
readonly connector_id = "shopping-cli";
|
|
25
|
+
readonly platform = "shopping-cli";
|
|
26
|
+
private readonly products;
|
|
27
|
+
constructor(seed?: ConnectorProduct[]);
|
|
28
|
+
/** Test helper: add or replace a product. */
|
|
29
|
+
put(product: ConnectorProduct): void;
|
|
30
|
+
searchProducts(query: SearchProductsQuery): Promise<ConnectorProduct[]>;
|
|
31
|
+
getProduct(sku: string): Promise<ConnectorProduct>;
|
|
32
|
+
searchMerchants(query: SearchMerchantsQuery): Promise<ConnectorMerchant[]>;
|
|
33
|
+
/**
|
|
34
|
+
* Deterministic fake consultation start. The fake marketplace binds each
|
|
35
|
+
* merchant to one conversation id (`conv-<merchant_id>`), so starting a
|
|
36
|
+
* consultation returns exactly that id — matching the FakeCommerceClient
|
|
37
|
+
* marketplace convention used by the buyer/merchant negotiation clients.
|
|
38
|
+
*/
|
|
39
|
+
startConsultation(input: {
|
|
40
|
+
buyer_id: string;
|
|
41
|
+
sku: string;
|
|
42
|
+
merchant_id: string;
|
|
43
|
+
opening_message: string;
|
|
44
|
+
}): Promise<{
|
|
45
|
+
conversation_id: string;
|
|
46
|
+
status: string;
|
|
47
|
+
}>;
|
|
48
|
+
}
|
|
49
|
+
/** A catalog product fixture with shopping-cli field shapes. */
|
|
50
|
+
export declare function fakeConnectorProduct(overrides?: Partial<ConnectorProduct>): ConnectorProduct;
|
|
@@ -0,0 +1,138 @@
|
|
|
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
|
+
* Deterministic in-memory Commerce Connector for tests and offline smoke
|
|
18
|
+
* runs. Filter semantics mirror shopping-cli's /search/products: case-
|
|
19
|
+
* insensitive substring match over title/description/category/tags, plus
|
|
20
|
+
* city/area, max_price and stock filters.
|
|
21
|
+
*/
|
|
22
|
+
import { ConnectorError, } from "./types.js";
|
|
23
|
+
export class FakeCommerceConnector {
|
|
24
|
+
connector_id = "shopping-cli";
|
|
25
|
+
platform = "shopping-cli";
|
|
26
|
+
products = new Map();
|
|
27
|
+
constructor(seed = []) {
|
|
28
|
+
for (const p of seed)
|
|
29
|
+
this.products.set(p.sku, p);
|
|
30
|
+
}
|
|
31
|
+
/** Test helper: add or replace a product. */
|
|
32
|
+
put(product) {
|
|
33
|
+
this.products.set(product.sku, product);
|
|
34
|
+
}
|
|
35
|
+
searchProducts(query) {
|
|
36
|
+
const needle = (query.query ?? "").toLowerCase();
|
|
37
|
+
let out = [...this.products.values()];
|
|
38
|
+
if (needle !== "") {
|
|
39
|
+
out = out.filter((p) => [p.title, p.description, p.category, ...p.tags]
|
|
40
|
+
.join(" ")
|
|
41
|
+
.toLowerCase()
|
|
42
|
+
.includes(needle));
|
|
43
|
+
}
|
|
44
|
+
if (query.city !== undefined && query.city !== "") {
|
|
45
|
+
out = out.filter((p) => p.merchant.city === query.city);
|
|
46
|
+
}
|
|
47
|
+
if (query.area !== undefined && query.area !== "") {
|
|
48
|
+
out = out.filter((p) => p.delivery.service_area.includes(query.area));
|
|
49
|
+
}
|
|
50
|
+
if (query.max_price !== undefined) {
|
|
51
|
+
out = out.filter((p) => p.price <= query.max_price);
|
|
52
|
+
}
|
|
53
|
+
if (query.include_out_of_stock !== true) {
|
|
54
|
+
out = out.filter((p) => p.stock > 0);
|
|
55
|
+
}
|
|
56
|
+
out.sort((a, b) => a.sku.localeCompare(b.sku));
|
|
57
|
+
const offset = query.offset ?? 0;
|
|
58
|
+
const limit = query.limit ?? 10;
|
|
59
|
+
return Promise.resolve(out.slice(offset, offset + limit));
|
|
60
|
+
}
|
|
61
|
+
getProduct(sku) {
|
|
62
|
+
const product = this.products.get(sku);
|
|
63
|
+
if (product === undefined) {
|
|
64
|
+
return Promise.reject(new ConnectorError("not_found", `no product ${sku}`));
|
|
65
|
+
}
|
|
66
|
+
return Promise.resolve(product);
|
|
67
|
+
}
|
|
68
|
+
searchMerchants(query) {
|
|
69
|
+
const byId = new Map();
|
|
70
|
+
for (const p of this.products.values())
|
|
71
|
+
byId.set(p.merchant.id, p.merchant);
|
|
72
|
+
let out = [...byId.values()];
|
|
73
|
+
const needle = (query.query ?? "").toLowerCase();
|
|
74
|
+
if (needle !== "") {
|
|
75
|
+
out = out.filter((m) => `${m.name} ${m.tags.join(" ")}`.toLowerCase().includes(needle));
|
|
76
|
+
}
|
|
77
|
+
if (query.city !== undefined && query.city !== "") {
|
|
78
|
+
out = out.filter((m) => m.city === query.city);
|
|
79
|
+
}
|
|
80
|
+
return Promise.resolve(out.slice(query.offset ?? 0, (query.offset ?? 0) + (query.limit ?? 10)));
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Deterministic fake consultation start. The fake marketplace binds each
|
|
84
|
+
* merchant to one conversation id (`conv-<merchant_id>`), so starting a
|
|
85
|
+
* consultation returns exactly that id — matching the FakeCommerceClient
|
|
86
|
+
* marketplace convention used by the buyer/merchant negotiation clients.
|
|
87
|
+
*/
|
|
88
|
+
startConsultation(input) {
|
|
89
|
+
void input;
|
|
90
|
+
return Promise.resolve({
|
|
91
|
+
conversation_id: `conv-${input.merchant_id}`,
|
|
92
|
+
status: "waiting_merchant",
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
/** A catalog product fixture with shopping-cli field shapes. */
|
|
97
|
+
export function fakeConnectorProduct(overrides = {}) {
|
|
98
|
+
return {
|
|
99
|
+
sku: "sku-001",
|
|
100
|
+
merchant_id: "merchant-001",
|
|
101
|
+
title: "手写陶瓷杯",
|
|
102
|
+
description: "手工拉坯,350ml",
|
|
103
|
+
category: "kitchenware",
|
|
104
|
+
tags: ["手工", "陶瓷"],
|
|
105
|
+
price: 99,
|
|
106
|
+
currency: "CNY",
|
|
107
|
+
stock: 12,
|
|
108
|
+
delivery_attributes: [],
|
|
109
|
+
delivery: {
|
|
110
|
+
service_area: "北京市 海淀区",
|
|
111
|
+
fee: 5,
|
|
112
|
+
currency: "CNY",
|
|
113
|
+
eta_minutes: 1440,
|
|
114
|
+
radius_km: 10,
|
|
115
|
+
notes: "当日达",
|
|
116
|
+
},
|
|
117
|
+
merchant: {
|
|
118
|
+
id: "merchant-001",
|
|
119
|
+
name: "拾光手作",
|
|
120
|
+
city: "北京市",
|
|
121
|
+
service_area: "海淀区",
|
|
122
|
+
hours: "10:00-21:00",
|
|
123
|
+
tags: ["手作"],
|
|
124
|
+
delivery: {
|
|
125
|
+
service_area: "北京市 海淀区",
|
|
126
|
+
fee: 5,
|
|
127
|
+
currency: "CNY",
|
|
128
|
+
eta_minutes: 1440,
|
|
129
|
+
radius_km: 10,
|
|
130
|
+
notes: "当日达",
|
|
131
|
+
},
|
|
132
|
+
product_count: 3,
|
|
133
|
+
},
|
|
134
|
+
warnings: [],
|
|
135
|
+
...overrides,
|
|
136
|
+
};
|
|
137
|
+
}
|
|
138
|
+
//# sourceMappingURL=fake-connector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fake-connector.js","sourceRoot":"","sources":["../../../src/agent/connector/fake-connector.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,49 @@
|
|
|
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 CommerceConnector, type ConnectorMerchant, type ConnectorProduct, type SearchMerchantsQuery, type SearchProductsQuery } from "./types.js";
|
|
17
|
+
export interface ShoppingCliConnectorOptions {
|
|
18
|
+
/**
|
|
19
|
+
* Buyer bootstrap token (gateway env SHOPPING_BUYER_BOOTSTRAP_TOKEN), used
|
|
20
|
+
* to start consultations via POST /buyer/ask. Read endpoints are public.
|
|
21
|
+
*/
|
|
22
|
+
buyerBootstrapToken?: string;
|
|
23
|
+
}
|
|
24
|
+
export declare class ShoppingCliConnector implements CommerceConnector {
|
|
25
|
+
readonly connector_id = "shopping-cli";
|
|
26
|
+
readonly platform = "shopping-cli";
|
|
27
|
+
private readonly baseUrl;
|
|
28
|
+
private readonly buyerBootstrapToken;
|
|
29
|
+
constructor(baseUrl: string, options?: ShoppingCliConnectorOptions);
|
|
30
|
+
private get;
|
|
31
|
+
searchProducts(query: SearchProductsQuery): Promise<ConnectorProduct[]>;
|
|
32
|
+
getProduct(sku: string): Promise<ConnectorProduct>;
|
|
33
|
+
searchMerchants(query: SearchMerchantsQuery): Promise<ConnectorMerchant[]>;
|
|
34
|
+
/**
|
|
35
|
+
* Start a consultation via `POST /buyer/ask`. Requires the buyer bootstrap
|
|
36
|
+
* token in the Authorization header. The buyer task is only linked to the
|
|
37
|
+
* returned conversation — authoritative state stays in the marketplace.
|
|
38
|
+
*/
|
|
39
|
+
startConsultation(input: {
|
|
40
|
+
buyer_id: string;
|
|
41
|
+
sku: string;
|
|
42
|
+
merchant_id: string;
|
|
43
|
+
opening_message: string;
|
|
44
|
+
}): Promise<{
|
|
45
|
+
conversation_id: string;
|
|
46
|
+
status: string;
|
|
47
|
+
}>;
|
|
48
|
+
private post;
|
|
49
|
+
}
|