@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,159 @@
|
|
|
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
|
+
* trust/records — WP1 CounterpartyTrustRecord 领域类型(基线 §27 / §28)。
|
|
18
|
+
*
|
|
19
|
+
* 三维信任(Identity / Protocol / Commercial Reputation,§27)不得合并成单一
|
|
20
|
+
* “可信度”。本模块只持久化对端的事实记录:观察(facts)与评估(conclusions)
|
|
21
|
+
* 分离 —— observe 只改事实;trust_level / rejected 只能由评估器推导,observe
|
|
22
|
+
* 无法直接写入(TrustObservation 没有 level 字段)。
|
|
23
|
+
*
|
|
24
|
+
* Reputation(§27 Commercial Reputation):没有 reputation 就是显式 unknown,
|
|
25
|
+
* 绝不自动当成 neutral 0.5。ReputationSignal 把这一点做成类型契约。
|
|
26
|
+
*/
|
|
27
|
+
import type { TrustLevel } from "../identity/trust-policy.js";
|
|
28
|
+
/** 记录 schema 版本(迁移用)。 */
|
|
29
|
+
export declare const TRUST_RECORD_SCHEMA_VERSION: 1;
|
|
30
|
+
/**
|
|
31
|
+
* §27 Dispute 三级分类:本地单方标记(local_asserted)不得伪装成全球事实
|
|
32
|
+
* (mutually_acknowledged / third_party_adjudicated 需要对端或第三方证据)。
|
|
33
|
+
*/
|
|
34
|
+
export type DisputeClassification = "local_asserted" | "mutually_acknowledged" | "third_party_adjudicated";
|
|
35
|
+
export declare const DISPUTE_CLASSIFICATIONS: readonly DisputeClassification[];
|
|
36
|
+
export interface DisputeRecord {
|
|
37
|
+
/** 稳定去重 id(调用方提供,或按内容哈希生成)。 */
|
|
38
|
+
dispute_id: string;
|
|
39
|
+
/** §27 三级分类。 */
|
|
40
|
+
classification: DisputeClassification;
|
|
41
|
+
reason?: string;
|
|
42
|
+
occurred_at: string;
|
|
43
|
+
/** 争议是否已解决。只影响互认/本地争议的等级封顶;已裁决争议始终拒绝。 */
|
|
44
|
+
resolved?: boolean;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* 可观察的事实(§27 Protocol Trust 观察项 + 成功交换 + dispute)。
|
|
48
|
+
* 通道/服务器交互把这里的事件 append 进 record;评估器据此推导结论。
|
|
49
|
+
*/
|
|
50
|
+
export type ObservationKind = "exchange_success" | "schema_invalid" | "timeout" | "replay_detected" | "signature_failure" | "dispute";
|
|
51
|
+
/** 一条事实观察。只含事实;不含任何 trust level 结论。 */
|
|
52
|
+
export interface TrustObservation {
|
|
53
|
+
/** 对端身份(协议幂等键 counterparty 侧;来自 Agent Card provider/name)。 */
|
|
54
|
+
counterparty_identity: string;
|
|
55
|
+
kind: ObservationKind;
|
|
56
|
+
/** 观察时间(RFC 3339);缺省用 store 时钟。 */
|
|
57
|
+
observed_at?: string;
|
|
58
|
+
/** 通道/服务器上下文(diagnostic)。 */
|
|
59
|
+
context?: string;
|
|
60
|
+
/** 对端域名(首次观察时建立)。 */
|
|
61
|
+
domain?: string;
|
|
62
|
+
/** provider(解析来源:`domain:<host>` 或 `card:<url>`,首次观察时建立)。 */
|
|
63
|
+
provider?: string;
|
|
64
|
+
/**
|
|
65
|
+
* Agent Card 指纹(exchange_success 时携带)。与已存指纹不同 → 告警信号
|
|
66
|
+
* (ObserveResult.fingerprintChanged)而非静默接受。
|
|
67
|
+
*/
|
|
68
|
+
agent_card_fingerprint?: string;
|
|
69
|
+
/** 本次观察到的 capability 版本(exchange_success 时合并)。 */
|
|
70
|
+
capability_versions?: Record<string, string>;
|
|
71
|
+
/** dispute 观察附加信息。 */
|
|
72
|
+
dispute?: {
|
|
73
|
+
dispute_id?: string;
|
|
74
|
+
classification?: DisputeClassification;
|
|
75
|
+
reason?: string;
|
|
76
|
+
resolved?: boolean;
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* CounterpartyTrustRecord 的事实面(观察聚合)。结论(trust_level / rejected /
|
|
81
|
+
* evaluated_at)不在此面,由评估器从这些事实推导。
|
|
82
|
+
*/
|
|
83
|
+
export interface TrustRecordFacts {
|
|
84
|
+
counterparty_identity: string;
|
|
85
|
+
/** 成功交换累计数(schema 有效 + 签名有效 + 正常完成)。 */
|
|
86
|
+
successful_exchanges: number;
|
|
87
|
+
/**
|
|
88
|
+
* 当前连续成功验签交换数。signature_failure / replay / Agent Card 指纹变更时
|
|
89
|
+
* 清零 —— 连续性是事实聚合,不是结论。
|
|
90
|
+
*/
|
|
91
|
+
consecutive_verified_exchanges: number;
|
|
92
|
+
invalid_schema_count: number;
|
|
93
|
+
timeout_count: number;
|
|
94
|
+
replay_detected_count: number;
|
|
95
|
+
signature_failure_count: number;
|
|
96
|
+
/** §27 三级分类争议记录(reputation 维度;评估器只做保守封顶/拒绝,不合并进协议 level)。 */
|
|
97
|
+
local_asserted_disputes: DisputeRecord[];
|
|
98
|
+
/** 检测到的 Agent Card 指纹变更次数(identity 锚变更;告警信号持久化,崩溃后仍可发现)。 */
|
|
99
|
+
fingerprint_changes: number;
|
|
100
|
+
}
|
|
101
|
+
/** 一条对端信任记录:事实面 + 元数据 + 结论(结论只由评估器写入)。 */
|
|
102
|
+
export interface CounterpartyTrustRecord extends TrustRecordFacts {
|
|
103
|
+
/** 对端域名(经 domain 发现时)。 */
|
|
104
|
+
domain?: string;
|
|
105
|
+
/** 当前 Agent Card 指纹(identity 锚;变更时先记入 fingerprint_changes 再更新)。 */
|
|
106
|
+
agent_card_fingerprint?: string;
|
|
107
|
+
/** provider(解析来源:`domain:<host>` / `card:<url>`)。 */
|
|
108
|
+
provider?: string;
|
|
109
|
+
/** 观察到的 capability 版本(capability id → 最近一次观测版本)。 */
|
|
110
|
+
capability_versions: Record<string, string>;
|
|
111
|
+
first_seen: string;
|
|
112
|
+
last_seen: string;
|
|
113
|
+
last_fingerprint_change_at?: string;
|
|
114
|
+
schema_version: typeof TRUST_RECORD_SCHEMA_VERSION;
|
|
115
|
+
/** 评估推导的 trust level(T0-T3,§28)。 */
|
|
116
|
+
trust_level: TrustLevel;
|
|
117
|
+
evaluated_at: string;
|
|
118
|
+
/** 评估器建议拒绝(超硬阈值 / 已裁决争议):调用方应拒绝自动化交互。 */
|
|
119
|
+
rejected: boolean;
|
|
120
|
+
rejection_reason?: string;
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* §27 Commercial Reputation 信号:没有数据必须是显式 `{ status: "unknown" }`,
|
|
124
|
+
* 绝不自动当 0.5。Ranker 侧直接消费该信号。
|
|
125
|
+
*/
|
|
126
|
+
export type ReputationSignal = {
|
|
127
|
+
status: "unknown";
|
|
128
|
+
} | {
|
|
129
|
+
status: "known";
|
|
130
|
+
score: number;
|
|
131
|
+
};
|
|
132
|
+
/** Reputation 来源接缝。缺省 NO_REPUTATION(恒 unknown)。 */
|
|
133
|
+
export interface ReputationSource {
|
|
134
|
+
score(identity: string): ReputationSignal;
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* 参与 Agent Card 指纹的 identity 承载字段(结构性输入,与 discovery 解耦)。
|
|
138
|
+
* 指纹覆盖 name / provider / version / url / supportedInterfaces;不含 capabilities
|
|
139
|
+
* —— 能力变化是合法演进,由 capability_versions 单独跟踪。
|
|
140
|
+
*/
|
|
141
|
+
export interface AgentCardIdentityMaterial {
|
|
142
|
+
name: string;
|
|
143
|
+
provider?: {
|
|
144
|
+
organization?: string;
|
|
145
|
+
url?: string;
|
|
146
|
+
};
|
|
147
|
+
version?: string;
|
|
148
|
+
url?: string;
|
|
149
|
+
supportedInterfaces?: Array<{
|
|
150
|
+
url: string;
|
|
151
|
+
protocolBinding?: string;
|
|
152
|
+
protocolVersion?: string;
|
|
153
|
+
}>;
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Agent Card 指纹:对 identity 承载字段做 JCS canonicalize + SHA-256(sha256:<hex>)。
|
|
157
|
+
* supportedInterfaces 先按 url 排序,避免接口声明顺序变化触发假告警。
|
|
158
|
+
*/
|
|
159
|
+
export declare function computeAgentCardFingerprint(card: AgentCardIdentityMaterial): string;
|
|
@@ -0,0 +1,40 @@
|
|
|
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 { contentDigest } from "../../negotiation/jcs.js";
|
|
17
|
+
/** 记录 schema 版本(迁移用)。 */
|
|
18
|
+
export const TRUST_RECORD_SCHEMA_VERSION = 1;
|
|
19
|
+
export const DISPUTE_CLASSIFICATIONS = [
|
|
20
|
+
"local_asserted",
|
|
21
|
+
"mutually_acknowledged",
|
|
22
|
+
"third_party_adjudicated",
|
|
23
|
+
];
|
|
24
|
+
/**
|
|
25
|
+
* Agent Card 指纹:对 identity 承载字段做 JCS canonicalize + SHA-256(sha256:<hex>)。
|
|
26
|
+
* supportedInterfaces 先按 url 排序,避免接口声明顺序变化触发假告警。
|
|
27
|
+
*/
|
|
28
|
+
export function computeAgentCardFingerprint(card) {
|
|
29
|
+
const normalized = {
|
|
30
|
+
name: card.name,
|
|
31
|
+
provider: card.provider,
|
|
32
|
+
version: card.version,
|
|
33
|
+
url: card.url,
|
|
34
|
+
supportedInterfaces: card.supportedInterfaces === undefined
|
|
35
|
+
? undefined
|
|
36
|
+
: [...card.supportedInterfaces].sort((a, b) => a.url < b.url ? -1 : a.url > b.url ? 1 : 0),
|
|
37
|
+
};
|
|
38
|
+
return contentDigest(normalized);
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/trust/records/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAeH,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAEzD,yBAAyB;AACzB,MAAM,CAAC,MAAM,2BAA2B,GAAG,CAAU,CAAC;AAStD,MAAM,CAAC,MAAM,uBAAuB,GAAqC;IACvE,gBAAgB;IAChB,uBAAuB;IACvB,yBAAyB;CAC1B,CAAC;AAgIF;;;GAGG;AACH,MAAM,UAAU,2BAA2B,CAAC,IAA+B;IACzE,MAAM,UAAU,GAA8B;QAC5C,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,GAAG,EAAE,IAAI,CAAC,GAAG;QACb,mBAAmB,EACjB,IAAI,CAAC,mBAAmB,KAAK,SAAS;YACpC,CAAC,CAAC,SAAS;YACX,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,mBAAmB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAC1C,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAC3C;KACR,CAAC;IACF,OAAO,aAAa,CAAC,UAAU,CAAC,CAAC;AACnC,CAAC"}
|
|
@@ -0,0 +1,46 @@
|
|
|
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
|
+
* 启动横幅(参照 hermes banner.py HERMES_AGENT_LOGO):`██` box 字符
|
|
18
|
+
* 大字 "K I W I"(figlet standard 几何,6 行 × 30 列)+ **逐行垂直渐变**
|
|
19
|
+
* (每行一个颜色,蓝 → 青 → 白;hermes 的 logo 同为逐行变色)。纯函数。
|
|
20
|
+
*
|
|
21
|
+
* mode="off" 时 kiwiBanner 返回空串(非 TTY 由 styles.banner/welcome
|
|
22
|
+
* 输出现状单行)。
|
|
23
|
+
*/
|
|
24
|
+
import { type ColorMode } from "./theme.js";
|
|
25
|
+
/**
|
|
26
|
+
* 6 行 × 30 列 box 字符 art(K I W I;figlet standard 几何:
|
|
27
|
+
* K=7 / I=5 / W=7 列,字母间隔 2 列;逐行严格等宽)。
|
|
28
|
+
*/
|
|
29
|
+
export declare const KIWI_ART: readonly string[];
|
|
30
|
+
/** 渐变停靠点:pos ∈ [0,1],hex 为 24-bit 色。 */
|
|
31
|
+
export interface GradientStop {
|
|
32
|
+
pos: number;
|
|
33
|
+
hex: string;
|
|
34
|
+
}
|
|
35
|
+
export declare const KIWI_GRADIENT: readonly GradientStop[];
|
|
36
|
+
/** t ∈ [0,1] → 插值后的 hex 色。 */
|
|
37
|
+
export declare function stopColor(stops: readonly GradientStop[], t: number): string;
|
|
38
|
+
/** 逐字符水平渐变(空格不涂色);通用工具(logo 用逐行渐变,见 rowGradient)。 */
|
|
39
|
+
export declare function gradientText(text: string, stops?: readonly GradientStop[]): string;
|
|
40
|
+
/**
|
|
41
|
+
* 逐行垂直渐变(hermes logo 风格):第 i 行取 t = i/(n-1) 的插值色,
|
|
42
|
+
* 整行同色——比逐字符渐变更有"分层"感。
|
|
43
|
+
*/
|
|
44
|
+
export declare function rowGradient(lines: readonly string[], stops?: readonly GradientStop[]): string;
|
|
45
|
+
/** 渐变大字 art(含尾换行);mode=off 返回空串(由 styles 决定非 TTY 形态)。 */
|
|
46
|
+
export declare function kiwiBanner(mode: ColorMode): string;
|
|
@@ -0,0 +1,99 @@
|
|
|
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
|
+
* 启动横幅(参照 hermes banner.py HERMES_AGENT_LOGO):`██` box 字符
|
|
18
|
+
* 大字 "K I W I"(figlet standard 几何,6 行 × 30 列)+ **逐行垂直渐变**
|
|
19
|
+
* (每行一个颜色,蓝 → 青 → 白;hermes 的 logo 同为逐行变色)。纯函数。
|
|
20
|
+
*
|
|
21
|
+
* mode="off" 时 kiwiBanner 返回空串(非 TTY 由 styles.banner/welcome
|
|
22
|
+
* 输出现状单行)。
|
|
23
|
+
*/
|
|
24
|
+
import { ESC, hexToRgb, rgb } from "./theme.js";
|
|
25
|
+
/**
|
|
26
|
+
* 6 行 × 30 列 box 字符 art(K I W I;figlet standard 几何:
|
|
27
|
+
* K=7 / I=5 / W=7 列,字母间隔 2 列;逐行严格等宽)。
|
|
28
|
+
*/
|
|
29
|
+
export const KIWI_ART = [
|
|
30
|
+
"██ ██ █████ ██ ██ █████",
|
|
31
|
+
"██ ██ █ ██ ██ █ ",
|
|
32
|
+
"██ ██ █ ██ █ ██ █ ",
|
|
33
|
+
"████ █ ██ █ ██ █ ",
|
|
34
|
+
"██ ██ █ ██ █ ██ █ ",
|
|
35
|
+
"██ ██ █████ ██████ █████",
|
|
36
|
+
];
|
|
37
|
+
export const KIWI_GRADIENT = [
|
|
38
|
+
{ pos: 0.0, hex: "#4FC3F7" }, // 蓝
|
|
39
|
+
{ pos: 0.55, hex: "#00BCD4" }, // 青
|
|
40
|
+
{ pos: 1.0, hex: "#E0F7FA" }, // 近白
|
|
41
|
+
];
|
|
42
|
+
function lerp(a, b, t) {
|
|
43
|
+
return Math.round(a + (b - a) * t);
|
|
44
|
+
}
|
|
45
|
+
/** t ∈ [0,1] → 插值后的 hex 色。 */
|
|
46
|
+
export function stopColor(stops, t) {
|
|
47
|
+
if (t <= stops[0].pos)
|
|
48
|
+
return stops[0].hex;
|
|
49
|
+
for (let i = 1; i < stops.length; i++) {
|
|
50
|
+
const hi = stops[i];
|
|
51
|
+
if (t <= hi.pos) {
|
|
52
|
+
const lo = stops[i - 1];
|
|
53
|
+
const span = hi.pos - lo.pos;
|
|
54
|
+
const k = span === 0 ? 0 : (t - lo.pos) / span;
|
|
55
|
+
const a = hexToRgb(lo.hex);
|
|
56
|
+
const b = hexToRgb(hi.hex);
|
|
57
|
+
return `#${[lerp(a[0], b[0], k), lerp(a[1], b[1], k), lerp(a[2], b[2], k)]
|
|
58
|
+
.map((v) => v.toString(16).padStart(2, "0"))
|
|
59
|
+
.join("")}`;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
return stops[stops.length - 1].hex;
|
|
63
|
+
}
|
|
64
|
+
/** 逐字符水平渐变(空格不涂色);通用工具(logo 用逐行渐变,见 rowGradient)。 */
|
|
65
|
+
export function gradientText(text, stops = KIWI_GRADIENT) {
|
|
66
|
+
const chars = [...text];
|
|
67
|
+
const count = chars.length;
|
|
68
|
+
let out = "";
|
|
69
|
+
for (let i = 0; i < count; i++) {
|
|
70
|
+
const ch = chars[i];
|
|
71
|
+
if (ch === " ") {
|
|
72
|
+
out += ch;
|
|
73
|
+
continue;
|
|
74
|
+
}
|
|
75
|
+
const t = count <= 1 ? 0 : i / (count - 1);
|
|
76
|
+
out += `${rgb(stopColor(stops, t))}${ch}${ESC}[0m`;
|
|
77
|
+
}
|
|
78
|
+
return out;
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* 逐行垂直渐变(hermes logo 风格):第 i 行取 t = i/(n-1) 的插值色,
|
|
82
|
+
* 整行同色——比逐字符渐变更有"分层"感。
|
|
83
|
+
*/
|
|
84
|
+
export function rowGradient(lines, stops = KIWI_GRADIENT) {
|
|
85
|
+
const count = lines.length;
|
|
86
|
+
return lines
|
|
87
|
+
.map((line, i) => {
|
|
88
|
+
const t = count <= 1 ? 0 : i / (count - 1);
|
|
89
|
+
return `${rgb(stopColor(stops, t))}${line}${ESC}[0m`;
|
|
90
|
+
})
|
|
91
|
+
.join("\n");
|
|
92
|
+
}
|
|
93
|
+
/** 渐变大字 art(含尾换行);mode=off 返回空串(由 styles 决定非 TTY 形态)。 */
|
|
94
|
+
export function kiwiBanner(mode) {
|
|
95
|
+
if (mode === "off")
|
|
96
|
+
return "";
|
|
97
|
+
return `${rowGradient(KIWI_ART)}\n`;
|
|
98
|
+
}
|
|
99
|
+
//# sourceMappingURL=banner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"banner.js","sourceRoot":"","sources":["../../src/tui/banner.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,70 @@
|
|
|
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 ColorKey, type ColorMode, type PaintOpts } from "./theme.js";
|
|
17
|
+
/** 语义分段(segments/statusBar 的构件)。 */
|
|
18
|
+
export interface Seg {
|
|
19
|
+
text: string;
|
|
20
|
+
color?: ColorKey;
|
|
21
|
+
bold?: boolean;
|
|
22
|
+
dim?: boolean;
|
|
23
|
+
}
|
|
24
|
+
export interface BannerInput {
|
|
25
|
+
roleLabel: string;
|
|
26
|
+
id: string;
|
|
27
|
+
tagline: string;
|
|
28
|
+
}
|
|
29
|
+
/** 欢迎面板输入(参照 hermes build_welcome_banner:logo + 带标题信息面板)。 */
|
|
30
|
+
export interface WelcomeInput extends BannerInput {
|
|
31
|
+
versionLabel: string;
|
|
32
|
+
commerceUrl: string;
|
|
33
|
+
modelLabel: string;
|
|
34
|
+
modeLabel: string;
|
|
35
|
+
a2aOn: boolean;
|
|
36
|
+
catalog?: string;
|
|
37
|
+
commands: string;
|
|
38
|
+
}
|
|
39
|
+
export declare function stripTerminalControls(value: string): string;
|
|
40
|
+
export interface Theme {
|
|
41
|
+
readonly mode: ColorMode;
|
|
42
|
+
readonly enabled: boolean;
|
|
43
|
+
paint(text: string, color: ColorKey, opts?: PaintOpts): string;
|
|
44
|
+
/** 行首语义前缀上色(多行逐行);off 直通原文。 */
|
|
45
|
+
decorate(text: string): string;
|
|
46
|
+
/** 单线框(dim 边框,visibleWidth 对齐);off → lines.join("\n") 无边框。 */
|
|
47
|
+
box(lines: readonly string[]): string;
|
|
48
|
+
/** box 或 legacy 形态:off 且 legacySeparator → `─`×56 + 内容(operator 现状复刻)。 */
|
|
49
|
+
panel(lines: readonly string[], opts?: {
|
|
50
|
+
legacySeparator?: boolean;
|
|
51
|
+
}): string;
|
|
52
|
+
/** 分隔线;off → "─".repeat(width)。 */
|
|
53
|
+
rule(width: number): string;
|
|
54
|
+
/** 分段拼接(" · " 分隔);off → 纯文本 join。 */
|
|
55
|
+
segments(parts: ReadonlyArray<string | Seg>): string;
|
|
56
|
+
/** 底部状态栏(chat/operator prompt 前重绘);off → ""(不写任何字节)。 */
|
|
57
|
+
statusBar(parts: ReadonlyArray<string | Seg>): string;
|
|
58
|
+
/** 启动横幅;off → 升级前单行 banner 逐字节相同。 */
|
|
59
|
+
banner(input: BannerInput): string;
|
|
60
|
+
/**
|
|
61
|
+
* 欢迎界面(hermes build_welcome_banner 结构):大号渐变 logo + 带版本
|
|
62
|
+
* 标题的信息面板(身份/会话/模型/运行时/命令);off → 现状单行逐字节相同。
|
|
63
|
+
*/
|
|
64
|
+
welcome(input: WelcomeInput): string;
|
|
65
|
+
}
|
|
66
|
+
export declare function createTheme(output: {
|
|
67
|
+
isTTY?: boolean;
|
|
68
|
+
}, override?: {
|
|
69
|
+
color?: ColorMode;
|
|
70
|
+
}): Theme;
|
|
@@ -0,0 +1,197 @@
|
|
|
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
|
+
* TUI 语义样式层(Neural Awakening 主题)——chat-tui 与 operator-tui 的
|
|
18
|
+
* 统一出口:decorate 行首语义前缀配色、box/panel 边框面板、segments 分段
|
|
19
|
+
* 拼接、statusBar 状态栏、banner 启动横幅。
|
|
20
|
+
*
|
|
21
|
+
* 字节直通契约(非 TTY 回归的根基):mode="off" 时 decorate/box/panel/
|
|
22
|
+
* rule/segments/banner 的输出与升级前逐字节一致——既有 ~30 个 TUI 测试
|
|
23
|
+
* 断言零改动保持绿。
|
|
24
|
+
*/
|
|
25
|
+
import { kiwiBanner } from "./banner.js";
|
|
26
|
+
import { detectColorMode, paint as paintRaw, sgr, visibleWidth, } from "./theme.js";
|
|
27
|
+
/**
|
|
28
|
+
* 剥离终端控制序列与 C0 控制字符(评审项 H7:TUI 渲染的未信任文本——网关
|
|
29
|
+
* public_message、catalog 返回、对手消息——可能携带 ANSI/CR,直通终端可
|
|
30
|
+
* 清屏/伪造审批行/覆盖输入行)。保留 \t 与 \n;对无控制字符的输入是恒等
|
|
31
|
+
* 变换,因此不影响非 TTY 字节直通契约。
|
|
32
|
+
*
|
|
33
|
+
* 正则用动态构造(eslint no-control-regex 禁控制字符字面量进正则字面量,
|
|
34
|
+
* 与 theme.ts visibleWidth 的同类约束一致)。
|
|
35
|
+
*/
|
|
36
|
+
/** 正则源码里表示 ESC(\x1b)控制字符的转义文本。 */
|
|
37
|
+
const ESC_PATTERN = "\\x1b";
|
|
38
|
+
/** 按序应用的剥离模式(每类终端控制序列 + C0 控制字符兜底)。 */
|
|
39
|
+
const CONTROL_PATTERNS = [
|
|
40
|
+
// OSC(ESC ] … (BEL | ESC \)):终端标题、剪贴板写等
|
|
41
|
+
new RegExp(`${ESC_PATTERN}\\](?:[^\\x07${ESC_PATTERN}]|${ESC_PATTERN}(?=[^\\\\]))*(?:\\x07|${ESC_PATTERN}\\\\)`, "g"),
|
|
42
|
+
// CSI(ESC [ 参数 中间字节 终字节):SGR 颜色、光标移动、擦除、模式切换
|
|
43
|
+
new RegExp(`${ESC_PATTERN}\\[[0-9;:?]*[ -/]*[@-~]`, "g"),
|
|
44
|
+
// DCS/PM/APC(ESC P … ESC \)与 STS
|
|
45
|
+
new RegExp(`${ESC_PATTERN}[PX^_][\\s\\S]*?${ESC_PATTERN}\\\\`, "g"),
|
|
46
|
+
// 残留 ESC + 简单序列
|
|
47
|
+
new RegExp(`${ESC_PATTERN}[0-9;]*[@-~]`, "g"),
|
|
48
|
+
];
|
|
49
|
+
/** C0 控制字符判定(保留 \t 与 \n;含 \r——防覆盖输入行)。 */
|
|
50
|
+
function isC0Control(code) {
|
|
51
|
+
return code !== 0x09 && code !== 0x0a && (code < 0x20 || code === 0x7f);
|
|
52
|
+
}
|
|
53
|
+
export function stripTerminalControls(value) {
|
|
54
|
+
let out = value;
|
|
55
|
+
for (const pattern of CONTROL_PATTERNS)
|
|
56
|
+
out = out.replace(pattern, "");
|
|
57
|
+
// C0 兜底用码点扫描(控制字符不进正则字面量——eslint no-control-regex)。
|
|
58
|
+
let result = "";
|
|
59
|
+
let prev = 0;
|
|
60
|
+
for (let i = 0; i < out.length; i++) {
|
|
61
|
+
if (isC0Control(out.charCodeAt(i))) {
|
|
62
|
+
result += out.slice(prev, i);
|
|
63
|
+
prev = i + 1;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
result += out.slice(prev);
|
|
67
|
+
return result;
|
|
68
|
+
}
|
|
69
|
+
/** 行首前缀配色表(按长度降序匹配——`[handoff-open]` 必须先于 `[handoff]`)。 */
|
|
70
|
+
const PREFIX_STYLES = [
|
|
71
|
+
{ prefix: "[handoff-open]", color: "accent" },
|
|
72
|
+
{ prefix: "[handoff-launch]", color: "accent" },
|
|
73
|
+
{ prefix: "[系统记录]", color: "muted", dim: true },
|
|
74
|
+
{ prefix: "[negotiate]", color: "accent" },
|
|
75
|
+
{ prefix: "[discover]", color: "primary" },
|
|
76
|
+
{ prefix: "[handoff]", color: "accent" },
|
|
77
|
+
{ prefix: "[通知]", color: "warn" },
|
|
78
|
+
{ prefix: "[任务]", color: "error" },
|
|
79
|
+
{ prefix: "[磋商]", color: "accent" },
|
|
80
|
+
{ prefix: "[已发送]", color: "ok" },
|
|
81
|
+
{ prefix: "[记忆]", color: "primary" },
|
|
82
|
+
{ prefix: "[模式]", color: "primary" },
|
|
83
|
+
{ prefix: "[审批]", color: "accent" },
|
|
84
|
+
{ prefix: "[注册]", color: "ok" },
|
|
85
|
+
{ prefix: "[私有]", color: "muted", dim: true },
|
|
86
|
+
{ prefix: "[a2a]", color: "primary" },
|
|
87
|
+
];
|
|
88
|
+
const RESET = "\u001b[0m";
|
|
89
|
+
export function createTheme(output, override) {
|
|
90
|
+
const mode = override?.color ?? detectColorMode(process.env, output.isTTY === true);
|
|
91
|
+
const enabled = mode !== "off";
|
|
92
|
+
const paint = (text, color, opts = {}) => paintRaw(text, mode, color, opts);
|
|
93
|
+
const decorate = (text) => {
|
|
94
|
+
const cleaned = stripTerminalControls(text);
|
|
95
|
+
if (!enabled)
|
|
96
|
+
return cleaned;
|
|
97
|
+
return cleaned
|
|
98
|
+
.split("\n")
|
|
99
|
+
.map((line) => {
|
|
100
|
+
for (const style of PREFIX_STYLES) {
|
|
101
|
+
if (line.startsWith(style.prefix)) {
|
|
102
|
+
return (paint(style.prefix, style.color, { bold: style.bold, dim: style.dim }) +
|
|
103
|
+
line.slice(style.prefix.length));
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
if (line.startsWith("公开草稿:")) {
|
|
107
|
+
return paint("公开草稿:", "primary", { bold: true }) + line.slice("公开草稿:".length);
|
|
108
|
+
}
|
|
109
|
+
if (line.startsWith("建议(")) {
|
|
110
|
+
return paint(line, "warn");
|
|
111
|
+
}
|
|
112
|
+
return line;
|
|
113
|
+
})
|
|
114
|
+
.join("\n");
|
|
115
|
+
};
|
|
116
|
+
const borderStyle = () => sgr(mode, "muted", { dim: true });
|
|
117
|
+
const box = (lines) => {
|
|
118
|
+
const cleaned = lines.map((line) => stripTerminalControls(line));
|
|
119
|
+
if (!enabled)
|
|
120
|
+
return cleaned.join("\n");
|
|
121
|
+
const width = Math.max(1, ...cleaned.map((line) => visibleWidth(line)));
|
|
122
|
+
const border = borderStyle();
|
|
123
|
+
const top = `${border}┌${"─".repeat(width + 2)}┐${RESET}`;
|
|
124
|
+
const bottom = `${border}└${"─".repeat(width + 2)}┘${RESET}`;
|
|
125
|
+
const rows = cleaned.map((line) => {
|
|
126
|
+
const pad = " ".repeat(Math.max(0, width - visibleWidth(line)));
|
|
127
|
+
return `${border}│${RESET} ${line}${pad} ${border}│${RESET}`;
|
|
128
|
+
});
|
|
129
|
+
return [top, ...rows, bottom].join("\n");
|
|
130
|
+
};
|
|
131
|
+
const panel = (lines, opts = {}) => {
|
|
132
|
+
const cleaned = lines.map((line) => stripTerminalControls(line));
|
|
133
|
+
if (!enabled) {
|
|
134
|
+
return opts.legacySeparator === true
|
|
135
|
+
? `${"─".repeat(56)}\n${cleaned.join("\n")}`
|
|
136
|
+
: cleaned.join("\n");
|
|
137
|
+
}
|
|
138
|
+
return box(cleaned);
|
|
139
|
+
};
|
|
140
|
+
const rule = (width) => {
|
|
141
|
+
if (!enabled)
|
|
142
|
+
return "─".repeat(width);
|
|
143
|
+
return `${borderStyle()}${"─".repeat(width)}${RESET}`;
|
|
144
|
+
};
|
|
145
|
+
const segments = (parts) => parts
|
|
146
|
+
.map((part) => {
|
|
147
|
+
if (typeof part === "string")
|
|
148
|
+
return stripTerminalControls(part);
|
|
149
|
+
return paint(stripTerminalControls(part.text), part.color ?? "text", { bold: part.bold, dim: part.dim });
|
|
150
|
+
})
|
|
151
|
+
.join(" · ");
|
|
152
|
+
const statusBar = (parts) => {
|
|
153
|
+
if (!enabled)
|
|
154
|
+
return "";
|
|
155
|
+
return segments(parts);
|
|
156
|
+
};
|
|
157
|
+
const banner = (input) => {
|
|
158
|
+
if (!enabled) {
|
|
159
|
+
return stripTerminalControls(`Kiwi ${input.roleLabel} · ${input.id} · ${input.tagline}`);
|
|
160
|
+
}
|
|
161
|
+
const art = kiwiBanner(mode); // art 自带尾换行
|
|
162
|
+
const info = segments([
|
|
163
|
+
{ text: `Kiwi ${input.roleLabel}`, color: "primary", bold: true },
|
|
164
|
+
input.id,
|
|
165
|
+
{ text: input.tagline, color: "muted", dim: true },
|
|
166
|
+
]);
|
|
167
|
+
return `${art}${info}`; // 末尾换行由调用方 write() 补
|
|
168
|
+
};
|
|
169
|
+
const welcome = (input) => {
|
|
170
|
+
if (!enabled) {
|
|
171
|
+
return stripTerminalControls(`Kiwi ${input.roleLabel} · ${input.id} · ${input.tagline}`);
|
|
172
|
+
}
|
|
173
|
+
const lines = [
|
|
174
|
+
`${paint(`Kiwi ${input.roleLabel}`, "primary", { bold: true })} · ${input.id}`,
|
|
175
|
+
`${paint("会话:", "accent")} ${input.commerceUrl}`,
|
|
176
|
+
`${paint("模型:", "accent")} ${input.modelLabel}`,
|
|
177
|
+
`${paint("运行时:", "accent")} ${input.modeLabel} · ${input.a2aOn ? paint("A2A on", "ok") : paint("A2A off", "muted", { dim: true })}${input.catalog !== undefined ? ` · ${paint("catalog", "muted", { dim: true })} ${input.catalog}` : ""}`,
|
|
178
|
+
"",
|
|
179
|
+
`${paint("命令:", "accent", { bold: true })} ${input.commands}`,
|
|
180
|
+
];
|
|
181
|
+
const innerWidth = Math.max(1, ...lines.map((line) => visibleWidth(line)));
|
|
182
|
+
const border = borderStyle();
|
|
183
|
+
// 带标题顶边:┌─ {version} ───…──┐(标题段计入内容宽,右段补齐)
|
|
184
|
+
const titleText = ` ${input.versionLabel} `;
|
|
185
|
+
// 顶边 = ┌ + ─ + title + ─×p + ┐:总宽须等于内容宽 + 2(与行一致)
|
|
186
|
+
const pad = Math.max(0, innerWidth - visibleWidth(titleText) - 2);
|
|
187
|
+
const top = `${border}┌─${RESET}${paint(titleText, "primary", { bold: true })}${border}${"─".repeat(pad + 1)}┐${RESET}`;
|
|
188
|
+
const bottom = `${border}└${"─".repeat(innerWidth + 2)}┘${RESET}`;
|
|
189
|
+
const rows = lines.map((line) => {
|
|
190
|
+
const padInner = " ".repeat(Math.max(0, innerWidth - visibleWidth(line)));
|
|
191
|
+
return `${border}│${RESET} ${line}${padInner} ${border}│${RESET}`;
|
|
192
|
+
});
|
|
193
|
+
return `${kiwiBanner(mode)}\n${[top, ...rows, bottom].join("\n")}`; // 尾部换行由调用方 write() 补
|
|
194
|
+
};
|
|
195
|
+
return { mode, enabled, paint, decorate, box, panel, rule, segments, statusBar, banner, welcome };
|
|
196
|
+
}
|
|
197
|
+
//# sourceMappingURL=styles.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"styles.js","sourceRoot":"","sources":["../../src/tui/styles.ts"],"names":[],"mappings":"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"}
|