@danceiny/gotry 0.0.1-rc.8 → 0.2.0-rc.27
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/README.md +172 -217
- package/README.zh-CN.md +222 -0
- package/bin/gotry-backend.js +53 -0
- package/bin/gotry-booking-copilot.js +53 -0
- package/bin/gotry-bootstrap.js +1744 -0
- package/bin/gotry-inner.js +733 -83
- package/bin/gotry-process-liveness.d.ts +27 -0
- package/bin/gotry-process-liveness.js +97 -0
- package/bin/gotry-runtime-resolution.d.ts +27 -0
- package/bin/gotry-runtime-resolution.js +49 -0
- package/bin/gotry.js +1 -1
- package/client/client.js +203 -0
- package/cordis.gotry-patch.yml +80 -49
- package/data/airline-airports.json +39 -0
- package/data/stations-12306-verify.json +524 -0
- package/dist/capabilities/agent-reach-deep.js +45 -122
- package/dist/capabilities/agent-reach.js +101 -146
- package/dist/capabilities/anything.js +135 -94
- package/dist/capabilities/artifacts.js +370 -0
- package/dist/capabilities/channel-health.js +131 -0
- package/dist/capabilities/channel-registry.js +256 -0
- package/dist/capabilities/doctor.js +546 -0
- package/dist/capabilities/effect.js +394 -0
- package/dist/capabilities/external-event.js +149 -0
- package/dist/capabilities/fact-log.js +55 -0
- package/dist/capabilities/flyai-config.js +337 -0
- package/dist/capabilities/flyai.js +968 -0
- package/dist/capabilities/fx-contract.js +293 -0
- package/dist/capabilities/geo-atlas.js +246 -0
- package/dist/capabilities/ground-transfer.js +509 -0
- package/dist/capabilities/hbcli.js +260 -123
- package/dist/capabilities/hotelbyte-transaction.js +194 -0
- package/dist/capabilities/incident-log.js +131 -61
- package/dist/capabilities/itinerary-artifact.js +190 -0
- package/dist/capabilities/itinerary-deck-artifact.js +194 -0
- package/dist/capabilities/itinerary-deck-export.js +339 -0
- package/dist/capabilities/lavish-local.js +924 -0
- package/dist/capabilities/model-override.js +38 -0
- package/dist/capabilities/opensky.js +54 -43
- package/dist/capabilities/resilience.js +191 -0
- package/dist/capabilities/session/action-cache.js +126 -0
- package/dist/capabilities/session/adapters/ctrip-flight.js +141 -0
- package/dist/capabilities/session/adapters/ctrip-hotel.js +222 -0
- package/dist/capabilities/session/adapters/dida-portal.js +274 -0
- package/dist/capabilities/session/adapters/meituan-local.js +54 -0
- package/dist/capabilities/session/adapters/rail-12306.js +342 -0
- package/dist/capabilities/session/benchmark.js +189 -0
- package/dist/capabilities/session/bridge-ledger.js +224 -0
- package/dist/capabilities/session/extension-bridge.js +636 -0
- package/dist/capabilities/session/extension-channel.js +109 -0
- package/dist/capabilities/session/extension-distribution.js +230 -0
- package/dist/capabilities/session/extract.js +50 -0
- package/dist/capabilities/session/golden-score.js +114 -0
- package/dist/capabilities/session/health-watch.js +215 -0
- package/dist/capabilities/session/read-guard.js +107 -0
- package/dist/capabilities/session/static-flight-golden.js +150 -0
- package/dist/capabilities/session/transport.js +109 -0
- package/dist/capabilities/session/wizard.js +117 -0
- package/dist/capabilities/session-consent.js +178 -0
- package/dist/capabilities/session-login.js +170 -0
- package/dist/capabilities/session-search.js +686 -0
- package/dist/capabilities/spawn-bounded.js +203 -0
- package/dist/capabilities/sponsor-plugin.js +341 -0
- package/dist/capabilities/visa-policy.js +140 -0
- package/dist/capabilities/weather.js +243 -138
- package/dist/data/session-golden-20.json +25 -0
- package/dist/data/sf-golden-manifest.json +103 -0
- package/dist/data/sf-static-routes.json +91 -0
- package/dist/scripts/action-cache-tests.js +72 -0
- package/dist/scripts/agent-planning-turn-deadline-e2e.js +242 -0
- package/dist/scripts/agent-planning-turn-deadline-tests.js +185 -0
- package/dist/scripts/agent-reach-deep-tests.js +30 -40
- package/dist/scripts/agent-reach-error-tests.js +354 -0
- package/dist/scripts/agent-reach-tests.js +26 -18
- package/dist/scripts/agent-reach-wrapper-tests.js +50 -50
- package/dist/scripts/anything-tests.js +116 -60
- package/dist/scripts/artifact-client-contract-tests.js +220 -0
- package/dist/scripts/artifacts-capability-tests.js +727 -0
- package/dist/scripts/async-collect.js +68 -10
- package/dist/scripts/benchmark-environment-bridge-e2e.js +741 -0
- package/dist/scripts/benchmark-environment-bridge-tests.js +1452 -0
- package/dist/scripts/booking-copilot-availability-ledger-binding-tests.js +126 -0
- package/dist/scripts/booking-copilot-availability-policy-tests.js +265 -0
- package/dist/scripts/booking-copilot-bin-proof-tests.js +66 -0
- package/dist/scripts/booking-copilot-cleanup-proof-helper.js +76 -0
- package/dist/scripts/booking-copilot-crossrepo-fixture-server.js +144 -0
- package/dist/scripts/booking-copilot-dsh-core-proof-tests.js +424 -0
- package/dist/scripts/booking-copilot-dsh-planner-proof-tests.js +2839 -0
- package/dist/scripts/booking-copilot-dsh-plugin-proof-tests.js +309 -0
- package/dist/scripts/booking-copilot-dsh-readiness-proof.js +238 -0
- package/dist/scripts/booking-copilot-dsh-warmer-proof.js +123 -0
- package/dist/scripts/booking-copilot-event-sequence-concurrency-proof-tests.js +156 -0
- package/dist/scripts/booking-copilot-gap-code-contract-proof-tests.js +70 -0
- package/dist/scripts/booking-copilot-intent-proof-tests.js +422 -0
- package/dist/scripts/booking-copilot-operation-ledger-concurrency-proof-tests.js +184 -0
- package/dist/scripts/booking-copilot-planner-live-probe.js +95 -0
- package/dist/scripts/booking-copilot-proof-runtime.js +42 -0
- package/dist/scripts/booking-copilot-receipt-ledger-concurrency-proof-tests.js +210 -0
- package/dist/scripts/booking-copilot-runtime-proof-tests.js +2349 -0
- package/dist/scripts/booking-copilot-server-proof-tests.js +784 -0
- package/dist/scripts/booking-copilot-startup-proof-tests.js +94 -0
- package/dist/scripts/booking-executor-tests.js +80 -0
- package/dist/scripts/booking-recovery-chain-tests.js +182 -0
- package/dist/scripts/booking-saga-tests.js +125 -0
- package/dist/scripts/booking-surface-contract-proof-tests.js +212 -0
- package/dist/scripts/bootstrap-tests.js +1479 -0
- package/dist/scripts/bridge-events-tests.js +239 -0
- package/dist/scripts/bridge-ledger-tests.js +428 -0
- package/dist/scripts/build-changelog.js +238 -0
- package/dist/scripts/build-metrics-report.js +331 -0
- package/dist/scripts/changelog-tests.js +118 -0
- package/dist/scripts/channel-probe-tests.js +103 -0
- package/dist/scripts/channel-probe.js +169 -0
- package/dist/scripts/channel-registry-tests.js +208 -0
- package/dist/scripts/companion-tests.js +67 -0
- package/dist/scripts/dida-cookie-probe.js +87 -0
- package/dist/scripts/dida-runner-stop-tests.js +311 -0
- package/dist/scripts/dida-sw-probe.js +114 -0
- package/dist/scripts/diff-test.js +17 -12
- package/dist/scripts/doctor-tests.js +564 -0
- package/dist/scripts/dsh-artifact-e2e.js +279 -0
- package/dist/scripts/dsh-artifact-web-e2e.js +675 -0
- package/dist/scripts/dsh-http-proxy-sse-proof.js +90 -0
- package/dist/scripts/dsh-runtime-closure-tests.js +182 -0
- package/dist/scripts/dsh-runtime-closure.js +162 -0
- package/dist/scripts/dsh-session-v3-migration-proof.js +109 -0
- package/dist/scripts/dsh-subprocess-local-proof.js +150 -0
- package/dist/scripts/dsh-target-closure-proof.js +178 -0
- package/dist/scripts/effect-tests.js +539 -0
- package/dist/scripts/engine-run.js +1 -3
- package/dist/scripts/engine-tests.js +16 -10
- package/dist/scripts/evaluation-cadence-tests.js +174 -0
- package/dist/scripts/evaluation-contract-tests.js +268 -0
- package/dist/scripts/extension-distribution-cli.js +39 -0
- package/dist/scripts/extension-distribution-tests.js +443 -0
- package/dist/scripts/extension-tests.js +988 -0
- package/dist/scripts/external-event-tests.js +350 -0
- package/dist/scripts/fact-gate-tests.js +869 -0
- package/dist/scripts/fixtures/extension-bridge-unref-child.mjs +21 -0
- package/dist/scripts/flight-hotel-anchor-363-registered-e2e.js +169 -0
- package/dist/scripts/flight-malformed-tests.js +159 -0
- package/dist/scripts/flyai-setup-tests.js +228 -0
- package/dist/scripts/flyai-setup-tool-tests.js +54 -0
- package/dist/scripts/flyai-tests.js +692 -0
- package/dist/scripts/flyai-tool-registration-contract-tests.js +91 -0
- package/dist/scripts/fx-contract-tests.js +201 -0
- package/dist/scripts/g5-guard-tests.js +131 -0
- package/dist/scripts/g5-guard.js +189 -0
- package/dist/scripts/gen-lunar-anchors.js +106 -0
- package/dist/scripts/geo-atlas-tests.js +283 -0
- package/dist/scripts/gotry-backend-kernel-tests.js +206 -0
- package/dist/scripts/gotry-try-demo-tests.js +79 -0
- package/dist/scripts/gotry-try-demo.js +49 -0
- package/dist/scripts/ground-transfer-tests.js +956 -0
- package/dist/scripts/hbcli-e2e-tests.js +159 -0
- package/dist/scripts/hbcli-live-optin-tests.js +96 -0
- package/dist/scripts/hbcli-release-contract-tests.js +122 -0
- package/dist/scripts/hbcli-tests.js +121 -69
- package/dist/scripts/health-watch-cli.js +73 -0
- package/dist/scripts/hotel-date-gate-tests.js +496 -0
- package/dist/scripts/hotelbyte-reconcile-tests.js +141 -0
- package/dist/scripts/hotelbyte-spawn-e2e-tests.js +373 -0
- package/dist/scripts/i18n-tests.js +41 -0
- package/dist/scripts/incident-tests.js +281 -87
- package/dist/scripts/issue-194-job-id-guard-tests.js +106 -0
- package/dist/scripts/issue-233-cancel-refund-commission-tests.js +392 -0
- package/dist/scripts/issue-271-liveness-tests.js +569 -0
- package/dist/scripts/issue-289-model-retry-real-tests.js +296 -0
- package/dist/scripts/issue-289-model-retry-tests.js +441 -0
- package/dist/scripts/issue-289-web-retry-e2e.js +630 -0
- package/dist/scripts/issue-338-home-city-e2e.js +577 -0
- package/dist/scripts/issue343-real-entry-e2e.js +160 -0
- package/dist/scripts/issue436-persisted-routing-e2e.js +247 -0
- package/dist/scripts/itinerary-artifact-tests.js +368 -0
- package/dist/scripts/itinerary-deck-artifact-tests.js +416 -0
- package/dist/scripts/itinerary-deck-export-tests.js +552 -0
- package/dist/scripts/itinerary-deck-tests.js +435 -0
- package/dist/scripts/itinerary-html-tests.js +426 -0
- package/dist/scripts/journey-tests.js +22 -27
- package/dist/scripts/kernel-manifest-evidence.js +109 -0
- package/dist/scripts/kernel-manifest-gate.js +126 -0
- package/dist/scripts/kernel-manifest-tests.js +212 -0
- package/dist/scripts/kernel-manifest-trace-entry.js +7 -0
- package/dist/scripts/kernel-manifest-trace-hook.mjs +28 -0
- package/dist/scripts/kernel-manifest.js +369 -0
- package/dist/scripts/lavish-local-tests.js +1226 -0
- package/dist/scripts/lavish-product-tools-tests.js +537 -0
- package/dist/scripts/ledger-repair-apply-tests.js +316 -0
- package/dist/scripts/ledger-repair-plan-tests.js +375 -0
- package/dist/scripts/ledger-tests.js +480 -0
- package/dist/scripts/ledger-workflow-crash.js +32 -0
- package/dist/scripts/managed-dsh-cleanup-diagnostic-proof.js +184 -0
- package/dist/scripts/managed-dsh-close-failure-proof.js +172 -0
- package/dist/scripts/managed-dsh-run-port-proof.js +153 -0
- package/dist/scripts/managed-dsh-terminal-proof.js +252 -0
- package/dist/scripts/map-tools-vendor-package-proof.js +365 -0
- package/dist/scripts/memory-capture-tests.js +242 -61
- package/dist/scripts/memory-decay-tests.js +49 -0
- package/dist/scripts/memory-lifecycle-tests.js +657 -0
- package/dist/scripts/memory-lifecycle.js +196 -0
- package/dist/scripts/memory-metrics.js +29 -31
- package/dist/scripts/memory-value-report.js +631 -0
- package/dist/scripts/memory-value-tests.js +328 -0
- package/dist/scripts/metrics-report-tests.js +151 -0
- package/dist/scripts/model-override-e2e.js +137 -0
- package/dist/scripts/nightly-evidence-tests.js +161 -0
- package/dist/scripts/nightly-evidence.js +286 -0
- package/dist/scripts/nudge-digest.js +43 -42
- package/dist/scripts/observability-tests.js +381 -0
- package/dist/scripts/onboarding-tests.js +161 -0
- package/dist/scripts/opensky-check.js +18 -13
- package/dist/scripts/opensky-tests.js +28 -28
- package/dist/scripts/persona-surface-guard-tests.js +49 -0
- package/dist/scripts/pnpm-dsh-closure-proof.js +17 -0
- package/dist/scripts/policy-anchor-359-registered-e2e.js +214 -0
- package/dist/scripts/price-drift-tests.js +340 -0
- package/dist/scripts/price-drift-watch.js +447 -0
- package/dist/scripts/probe-poi-tests.js +53 -45
- package/dist/scripts/product-metrics.js +483 -0
- package/dist/scripts/publish-preverify.js +110 -0
- package/dist/scripts/realtime-pricing-tests.js +76 -0
- package/dist/scripts/recall-tests.js +513 -0
- package/dist/scripts/replay-async.js +20 -18
- package/dist/scripts/replay-real.js +18 -18
- package/dist/scripts/replay.js +52 -82
- package/dist/scripts/session-attach-diagnose.js +31 -0
- package/dist/scripts/session-attach-poc.js +62 -0
- package/dist/scripts/session-benchmark.js +180 -0
- package/dist/scripts/session-dida-live-e2e.js +199 -0
- package/dist/scripts/session-extract-tests.js +60 -0
- package/dist/scripts/session-link-tests.js +478 -0
- package/dist/scripts/session-login.js +29 -0
- package/dist/scripts/session-tests.js +862 -0
- package/dist/scripts/session-zones-tests.js +358 -0
- package/dist/scripts/sf-live-benchmark.js +367 -0
- package/dist/scripts/sf-live-challenge-stop-tests.js +453 -0
- package/dist/scripts/sf-live-cli-tests.js +92 -0
- package/dist/scripts/sf-live-options.js +46 -0
- package/dist/scripts/sf-manifest-tests.js +30 -0
- package/dist/scripts/sf-manifest.js +33 -0
- package/dist/scripts/sf-soft-score-tests.js +67 -0
- package/dist/scripts/sf-summary-tests.js +324 -0
- package/dist/scripts/sf-summary.js +525 -0
- package/dist/scripts/share-tests.js +432 -0
- package/dist/scripts/skeleton-check.js +16 -14
- package/dist/scripts/skeleton-integration-test.js +28 -11
- package/dist/scripts/skills-contract-tests.js +51 -46
- package/dist/scripts/smoke-session-gate-tests.js +21 -0
- package/dist/scripts/smoke.js +703 -219
- package/dist/scripts/spawn-bounded-abort-tests.js +241 -0
- package/dist/scripts/sponsor-reuse-tests.js +262 -0
- package/dist/scripts/state-cli-tests.js +261 -0
- package/dist/scripts/state-cli.js +585 -0
- package/dist/scripts/state-repair-cli.js +66 -0
- package/dist/scripts/state-repair-tests.js +140 -0
- package/dist/scripts/static-golden-tests.js +165 -0
- package/dist/scripts/time-eval-tests.js +210 -192
- package/dist/scripts/travel-timeline-tests.js +59 -0
- package/dist/scripts/turn-handoff-collect-tests.js +169 -0
- package/dist/scripts/turn-handoff-collect.js +161 -0
- package/dist/scripts/turn-policy-tests.js +55 -0
- package/dist/scripts/typed-contract-canary.js +176 -0
- package/dist/scripts/tz-resolver-sanity.js +50 -0
- package/dist/scripts/tz-resolver-tests.js +584 -0
- package/dist/scripts/unified-tests.js +23 -19
- package/dist/scripts/visa-policy-tests.js +62 -0
- package/dist/scripts/weather-tests.js +276 -41
- package/dist/scripts/wish-channel-gate-tests.js +54 -0
- package/dist/scripts/write-gate-tests.js +522 -0
- package/dist/scripts/z3-lifecycle-fault-tests.js +188 -0
- package/dist/scripts/z3-lifecycle-tests.js +170 -0
- package/dist/scripts/z3-race-repeat-tests.js +39 -0
- package/dist/scripts/z3-race-tests.js +41 -0
- package/dist/src/artifact-gate.js +829 -0
- package/dist/src/backend/kernel.js +91 -0
- package/dist/src/backend/modules/booking-copilot.js +92 -0
- package/dist/src/backend/modules/booking-executor.js +124 -0
- package/dist/src/backend/modules/session-search.js +551 -0
- package/dist/src/benchmark-agent-conformance.js +578 -0
- package/dist/src/benchmark-environment-bridge.js +515 -0
- package/dist/src/benchmark-headless-child-diagnostics.js +166 -0
- package/dist/src/benchmark-tool-isolation.js +151 -0
- package/dist/src/bookable-facts.js +533 -0
- package/dist/src/booking-saga.js +97 -0
- package/dist/src/booking-surface/availability-policy.js +697 -0
- package/dist/src/booking-surface/booking-intent.js +43 -0
- package/dist/src/booking-surface/cancel-refund-commission.js +379 -0
- package/dist/src/booking-surface/canonical-schema.js +116 -0
- package/dist/src/booking-surface/contracts.js +75 -0
- package/dist/src/booking-surface/dsh-planner.js +1854 -0
- package/dist/src/booking-surface/dsh-plugin.js +378 -0
- package/dist/src/booking-surface/dsh-worker.js +98 -0
- package/dist/src/booking-surface/error-codes.js +231 -0
- package/dist/src/booking-surface/index.js +9 -0
- package/dist/src/booking-surface/managed-dsh-cleanup-diagnostic.js +97 -0
- package/dist/src/booking-surface/managed-dsh-run-port.js +244 -0
- package/dist/src/booking-surface/profile.js +24 -0
- package/dist/src/booking-surface/recovery-chain.js +367 -0
- package/dist/src/booking-surface/runtime.js +1968 -0
- package/dist/src/booking-surface/server.js +674 -0
- package/dist/src/booking-surface/startup.js +168 -0
- package/dist/src/booking-surface/validation.js +261 -0
- package/dist/src/bridge.js +20 -13
- package/dist/src/companions.js +86 -0
- package/dist/src/contracts.js +21 -43
- package/dist/src/dsh-llm.js +97 -111
- package/dist/src/engine.js +276 -193
- package/dist/src/evaluation-cadence.js +97 -0
- package/dist/src/evaluation-contracts.js +283 -0
- package/dist/src/flight-pack-adapter.js +54 -0
- package/dist/src/flight-pack-contract.js +2 -0
- package/dist/src/flyai-setup-tool.js +70 -0
- package/dist/src/gotry-backend.js +125 -0
- package/dist/src/hotel-date-gate.js +118 -0
- package/dist/src/i18n.js +88 -0
- package/dist/src/index.js +2305 -731
- package/dist/src/itinerary-deck.js +139 -0
- package/dist/src/itinerary-doc-shared.js +661 -0
- package/dist/src/itinerary-html.js +131 -0
- package/dist/src/journey.js +155 -108
- package/dist/src/lavish-tools.js +400 -0
- package/dist/src/ledger-repair-apply.js +538 -0
- package/dist/src/ledger-repair-plan.js +463 -0
- package/dist/src/loop.js +358 -162
- package/dist/src/memory-capture.js +180 -32
- package/dist/src/memory-decay.js +47 -0
- package/dist/src/memory-lifecycle.js +1310 -0
- package/dist/src/memory-utility.js +27 -40
- package/dist/src/mock-llm.js +36 -61
- package/dist/src/model.js +81 -36
- package/dist/src/realtime-pricing.js +103 -0
- package/dist/src/recall/card.js +74 -0
- package/dist/src/recall/evaluator.js +140 -0
- package/dist/src/recall/integration.js +17 -0
- package/dist/src/recall/tick.js +166 -0
- package/dist/src/session-link/plan-it-action.js +48 -0
- package/dist/src/session-link/session-link.js +248 -0
- package/dist/src/session-zones.js +507 -0
- package/dist/src/share/adapters.js +51 -0
- package/dist/src/share/share-consent.js +76 -0
- package/dist/src/share/share-deck.js +58 -0
- package/dist/src/share/share-token.js +146 -0
- package/dist/src/slot-spec.js +84 -106
- package/dist/src/state-ledger.js +767 -0
- package/dist/src/state-repair.js +299 -0
- package/dist/src/subagent-job-id-guard.js +58 -0
- package/dist/src/time-anchor.js +231 -33
- package/dist/src/tool-packet.js +20 -8
- package/dist/src/travel-slots.js +58 -35
- package/dist/src/travel-timeline.js +59 -0
- package/dist/src/turn-deadline.js +287 -0
- package/dist/src/turn-policy.js +118 -0
- package/dist/src/tz-resolver.js +143 -0
- package/dist/src/unified.js +538 -360
- package/dist/src/wish-pool.js +42 -12
- package/dist/src/write-gate.js +495 -0
- package/dist/src/z3-shared.js +284 -0
- package/extension/README.md +21 -0
- package/extension/README.zh-CN.md +21 -0
- package/extension/background.js +463 -0
- package/extension/content-bridge.js +270 -0
- package/extension/content-main.js +111 -0
- package/extension/manifest.json +60 -0
- package/package.json +407 -14
- package/schemas/booking.intent.schema.json +193 -0
- package/schemas/booking.surface.schema.json +2622 -0
- package/ts/capabilities/agent-reach-deep.ts +114 -0
- package/ts/capabilities/agent-reach.ts +198 -0
- package/ts/capabilities/anything.ts +255 -0
- package/ts/capabilities/artifacts.ts +428 -0
- package/ts/capabilities/fact-log.ts +54 -0
- package/ts/capabilities/flyai-config.ts +388 -0
- package/ts/capabilities/flyai.ts +1274 -0
- package/ts/capabilities/hbcli.ts +253 -71
- package/ts/capabilities/incident-log.ts +88 -59
- package/ts/capabilities/itinerary-artifact.ts +214 -0
- package/ts/capabilities/itinerary-deck-artifact.ts +218 -0
- package/ts/capabilities/itinerary-deck-export.ts +378 -0
- package/ts/capabilities/opensky.ts +121 -0
- package/ts/capabilities/session/action-cache.ts +148 -0
- package/ts/capabilities/session/adapters/ctrip-flight.ts +181 -0
- package/ts/capabilities/session/adapters/ctrip-hotel.ts +238 -0
- package/ts/capabilities/session/adapters/dida-portal.ts +338 -0
- package/ts/capabilities/session/adapters/meituan-local.ts +70 -0
- package/ts/capabilities/session/adapters/rail-12306.ts +392 -0
- package/ts/capabilities/session/benchmark.ts +276 -0
- package/ts/capabilities/session/bridge-ledger.ts +333 -0
- package/ts/capabilities/session/extension-bridge.ts +794 -0
- package/ts/capabilities/session/extension-channel.ts +144 -0
- package/ts/capabilities/session/extension-distribution.ts +266 -0
- package/ts/capabilities/session/extract.ts +54 -0
- package/ts/capabilities/session/golden-score.ts +139 -0
- package/ts/capabilities/session/health-watch.ts +264 -0
- package/ts/capabilities/session/read-guard.ts +141 -0
- package/ts/capabilities/session/static-flight-golden.ts +209 -0
- package/ts/capabilities/session/transport.ts +146 -0
- package/ts/capabilities/session/wizard.ts +140 -0
- package/ts/capabilities/session-consent.ts +211 -0
- package/ts/capabilities/session-login.ts +208 -0
- package/ts/capabilities/session-search.ts +893 -0
- package/ts/capabilities/weather.ts +330 -0
- package/ts/dsh-runtime/vendor/README.md +68 -0
- package/ts/dsh-runtime/vendor/dsh-map-tools/LICENSE +21 -0
- package/ts/dsh-runtime/vendor/dsh-map-tools/README.en.md +405 -0
- package/ts/dsh-runtime/vendor/dsh-map-tools/README.md +404 -0
- package/ts/dsh-runtime/vendor/dsh-map-tools/client/client.js +1584 -0
- package/ts/dsh-runtime/vendor/dsh-map-tools/cordis.patch.yml +5 -0
- package/ts/dsh-runtime/vendor/dsh-map-tools/icon.svg +5 -0
- package/ts/dsh-runtime/vendor/dsh-map-tools/lib/clients/amap.js +595 -0
- package/ts/dsh-runtime/vendor/dsh-map-tools/lib/clients/nominatim.js +63 -0
- package/ts/dsh-runtime/vendor/dsh-map-tools/lib/clients/osrm.js +58 -0
- package/ts/dsh-runtime/vendor/dsh-map-tools/lib/clients/photon.js +55 -0
- package/ts/dsh-runtime/vendor/dsh-map-tools/lib/config-file.js +87 -0
- package/ts/dsh-runtime/vendor/dsh-map-tools/lib/config-route.js +131 -0
- package/ts/dsh-runtime/vendor/dsh-map-tools/lib/config.js +16 -0
- package/ts/dsh-runtime/vendor/dsh-map-tools/lib/geo.js +232 -0
- package/ts/dsh-runtime/vendor/dsh-map-tools/lib/index.js +120 -0
- package/ts/dsh-runtime/vendor/dsh-map-tools/lib/settings-ns.js +40 -0
- package/ts/dsh-runtime/vendor/dsh-map-tools/lib/staticmap-route.js +115 -0
- package/ts/dsh-runtime/vendor/dsh-map-tools/lib/tools/geocode.js +127 -0
- package/ts/dsh-runtime/vendor/dsh-map-tools/lib/tools/poi.js +84 -0
- package/ts/dsh-runtime/vendor/dsh-map-tools/lib/tools/routes.js +267 -0
- package/ts/dsh-runtime/vendor/dsh-map-tools/lib/types/clients/amap.d.ts +90 -0
- package/ts/dsh-runtime/vendor/dsh-map-tools/lib/types/clients/nominatim.d.ts +17 -0
- package/ts/dsh-runtime/vendor/dsh-map-tools/lib/types/clients/osrm.d.ts +15 -0
- package/ts/dsh-runtime/vendor/dsh-map-tools/lib/types/clients/photon.d.ts +22 -0
- package/ts/dsh-runtime/vendor/dsh-map-tools/lib/types/config-file.d.ts +33 -0
- package/ts/dsh-runtime/vendor/dsh-map-tools/lib/types/config-route.d.ts +23 -0
- package/ts/dsh-runtime/vendor/dsh-map-tools/lib/types/config.d.ts +23 -0
- package/ts/dsh-runtime/vendor/dsh-map-tools/lib/types/geo.d.ts +61 -0
- package/ts/dsh-runtime/vendor/dsh-map-tools/lib/types/index.d.ts +18 -0
- package/ts/dsh-runtime/vendor/dsh-map-tools/lib/types/settings-ns.d.ts +14 -0
- package/ts/dsh-runtime/vendor/dsh-map-tools/lib/types/staticmap-route.d.ts +31 -0
- package/ts/dsh-runtime/vendor/dsh-map-tools/lib/types/tools/geocode.d.ts +11 -0
- package/ts/dsh-runtime/vendor/dsh-map-tools/lib/types/tools/poi.d.ts +9 -0
- package/ts/dsh-runtime/vendor/dsh-map-tools/lib/types/tools/routes.d.ts +75 -0
- package/ts/dsh-runtime/vendor/dsh-map-tools/lib/types/types.d.ts +68 -0
- package/ts/dsh-runtime/vendor/dsh-map-tools/lib/types.js +16 -0
- package/ts/dsh-runtime/vendor/dsh-map-tools/package.json +97 -0
- package/ts/package.json +296 -3
- package/ts/scripts/async-collect.ts +91 -0
- package/ts/scripts/map-tools-vendor-package-proof.ts +404 -0
- package/ts/scripts/skeleton-check.ts +1 -1
- package/ts/scripts/skeleton-integration-test.ts +23 -1
- package/ts/scripts/state-cli.ts +568 -0
- package/ts/scripts/turn-handoff-collect.ts +178 -0
- package/ts/src/artifact-gate.ts +991 -0
- package/ts/src/benchmark-agent-conformance.ts +619 -0
- package/ts/src/benchmark-environment-bridge.ts +538 -0
- package/ts/src/benchmark-headless-child-diagnostics.ts +184 -0
- package/ts/src/benchmark-tool-isolation.ts +166 -0
- package/ts/src/bookable-facts.ts +837 -0
- package/ts/src/booking-saga.ts +133 -0
- package/ts/src/booking-surface/availability-policy.ts +522 -0
- package/ts/src/booking-surface/booking-intent.ts +86 -0
- package/ts/src/booking-surface/cancel-refund-commission.ts +488 -0
- package/ts/src/booking-surface/canonical-schema.js +116 -0
- package/ts/src/booking-surface/contracts.ts +475 -0
- package/ts/src/booking-surface/dsh-planner.ts +1949 -0
- package/ts/src/booking-surface/dsh-plugin.js +378 -0
- package/ts/src/booking-surface/dsh-worker.ts +110 -0
- package/ts/src/booking-surface/error-codes.ts +241 -0
- package/ts/src/booking-surface/index.ts +9 -0
- package/ts/src/booking-surface/managed-dsh-cleanup-diagnostic.ts +151 -0
- package/ts/src/booking-surface/managed-dsh-run-port.ts +273 -0
- package/ts/src/booking-surface/profile.ts +42 -0
- package/ts/src/booking-surface/recovery-chain.ts +409 -0
- package/ts/src/booking-surface/runtime.ts +1793 -0
- package/ts/src/booking-surface/server.ts +733 -0
- package/ts/src/booking-surface/startup.ts +201 -0
- package/ts/src/booking-surface/validation.ts +217 -0
- package/ts/src/companions.ts +113 -0
- package/ts/src/contracts.ts +13 -3
- package/ts/src/dsh-llm.ts +44 -11
- package/ts/src/flyai-setup-tool.ts +77 -0
- package/ts/src/index.ts +2107 -224
- package/ts/src/itinerary-deck.ts +189 -0
- package/ts/src/itinerary-doc-shared.ts +741 -0
- package/ts/src/itinerary-html.ts +171 -0
- package/ts/src/loop.ts +278 -40
- package/ts/src/memory-capture.ts +283 -0
- package/ts/src/memory-decay.ts +55 -0
- package/ts/src/memory-utility.ts +70 -0
- package/ts/src/mock-llm.ts +4 -8
- package/ts/src/model.ts +88 -2
- package/ts/src/recall/card.ts +106 -0
- package/ts/src/recall/evaluator.ts +170 -0
- package/ts/src/recall/integration.ts +35 -0
- package/ts/src/recall/tick.ts +213 -0
- package/ts/src/session-link/plan-it-action.ts +78 -0
- package/ts/src/session-link/session-link.ts +275 -0
- package/ts/src/share/adapters.ts +93 -0
- package/ts/src/share/share-consent.ts +105 -0
- package/ts/src/share/share-deck.ts +85 -0
- package/ts/src/share/share-token.ts +166 -0
- package/ts/src/slot-spec.ts +172 -0
- package/ts/src/state-ledger.ts +912 -0
- package/ts/src/subagent-job-id-guard.ts +72 -0
- package/ts/src/time-anchor.ts +338 -0
- package/ts/src/tool-packet.ts +32 -0
- package/ts/src/travel-slots.ts +219 -0
- package/ts/src/travel-timeline.ts +83 -0
- package/ts/src/turn-deadline.ts +366 -0
- package/ts/src/turn-policy.ts +154 -0
- package/ts/src/unified.ts +360 -89
- package/ts/src/wish-pool.ts +79 -0
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Runtime projection of the canonical booking.surface JSON Schema.
|
|
3
|
+
*
|
|
4
|
+
* dsh tools need self-contained JSON Schemas, while the canonical document is
|
|
5
|
+
* organized with local $refs. This helper derives each action branch directly
|
|
6
|
+
* from those canonical bytes and recursively inlines local references. No
|
|
7
|
+
* model-facing action schema is maintained by hand.
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
import { readFileSync } from 'node:fs'
|
|
11
|
+
|
|
12
|
+
const schemaUrl = new URL('../../../schemas/booking.surface.schema.json', import.meta.url)
|
|
13
|
+
export const canonicalBookingSurfaceSchema = JSON.parse(readFileSync(schemaUrl, 'utf8'))
|
|
14
|
+
const intentSchemaUrl = new URL('../../../schemas/booking.intent.schema.json', import.meta.url)
|
|
15
|
+
export const canonicalBookingIntentSchema = JSON.parse(readFileSync(intentSchemaUrl, 'utf8'))
|
|
16
|
+
|
|
17
|
+
function clone(value) {
|
|
18
|
+
return JSON.parse(JSON.stringify(value))
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
function definitionFromRef(ref, schema) {
|
|
22
|
+
const prefix = '#/$defs/'
|
|
23
|
+
if (typeof ref !== 'string' || !ref.startsWith(prefix)) {
|
|
24
|
+
throw new Error(`booking_schema_external_ref_forbidden:${String(ref)}`)
|
|
25
|
+
}
|
|
26
|
+
const name = ref.slice(prefix.length)
|
|
27
|
+
const definition = schema.$defs?.[name]
|
|
28
|
+
if (!definition) throw new Error(`booking_schema_missing_definition:${name}`)
|
|
29
|
+
return definition
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
function inlineLocalRefs(value, schema, stack = []) {
|
|
33
|
+
if (Array.isArray(value)) return value.map((item) => inlineLocalRefs(item, schema, stack))
|
|
34
|
+
if (typeof value !== 'object' || value === null) return value
|
|
35
|
+
if (typeof value.$ref === 'string') {
|
|
36
|
+
if (stack.includes(value.$ref)) throw new Error(`booking_schema_recursive_ref:${value.$ref}`)
|
|
37
|
+
const { $ref, ...siblings } = value
|
|
38
|
+
return {
|
|
39
|
+
...inlineLocalRefs(definitionFromRef($ref, schema), schema, [...stack, $ref]),
|
|
40
|
+
...inlineLocalRefs(siblings, schema, stack),
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
return Object.fromEntries(Object.entries(value).map(([key, item]) => [key, inlineLocalRefs(item, schema, stack)]))
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
function canonicalActionSchemaForKind(kind, schema, definitionName) {
|
|
47
|
+
const action = schema.$defs?.[definitionName]
|
|
48
|
+
if (!action) throw new Error('booking_schema_action_union_missing')
|
|
49
|
+
if (Array.isArray(action.allOf)) {
|
|
50
|
+
const branch = action.allOf.find((candidate) => candidate?.if?.properties?.kind?.const === kind)
|
|
51
|
+
const input = branch?.then?.properties?.input
|
|
52
|
+
if (!input) throw new Error(`booking_schema_action_kind_missing:${kind}`)
|
|
53
|
+
return clone(inlineLocalRefs({
|
|
54
|
+
type: action.type,
|
|
55
|
+
required: action.required,
|
|
56
|
+
properties: { ...action.properties, kind: { type: 'string', const: kind }, input },
|
|
57
|
+
additionalProperties: action.additionalProperties,
|
|
58
|
+
}, schema))
|
|
59
|
+
}
|
|
60
|
+
if (!Array.isArray(action.oneOf)) throw new Error('booking_schema_action_union_missing')
|
|
61
|
+
const branch = action.oneOf.find((candidate) => candidate?.allOf?.some((part) => part?.properties?.kind?.const === kind))
|
|
62
|
+
const base = schema.$defs?.ActionBase
|
|
63
|
+
const input = branch?.allOf?.find((part) => part?.properties?.input)?.properties?.input
|
|
64
|
+
if (!base || !input) throw new Error(`booking_schema_action_kind_missing:${kind}`)
|
|
65
|
+
return clone(inlineLocalRefs({
|
|
66
|
+
...base,
|
|
67
|
+
properties: { ...base.properties, kind: { type: 'string', const: kind }, input },
|
|
68
|
+
}, schema))
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
export function canonicalBookingActionSchemaForKind(kind) {
|
|
72
|
+
return canonicalActionSchemaForKind(kind, canonicalBookingSurfaceSchema, 'Action')
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
const DSH_JSON_SCHEMA_KEYS = new Set([
|
|
76
|
+
'type', 'oneOf', 'properties', 'required', 'additionalProperties', 'items',
|
|
77
|
+
'enum', 'const', 'description', 'title', 'default', 'examples',
|
|
78
|
+
])
|
|
79
|
+
|
|
80
|
+
function projectDshSchema(value) {
|
|
81
|
+
if (Array.isArray(value)) return value.map(projectDshSchema)
|
|
82
|
+
if (typeof value !== 'object' || value === null) return value
|
|
83
|
+
return Object.fromEntries(Object.entries(value)
|
|
84
|
+
.filter(([key]) => DSH_JSON_SCHEMA_KEYS.has(key))
|
|
85
|
+
.map(([key, item]) => {
|
|
86
|
+
if (key === 'properties') {
|
|
87
|
+
return [key, Object.fromEntries(Object.entries(item).map(([name, property]) => [name, projectDshSchema(property)]))]
|
|
88
|
+
}
|
|
89
|
+
return [key, projectDshSchema(item)]
|
|
90
|
+
}))
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
/**
|
|
94
|
+
* dsh-tools intentionally supports a smaller enforced JSON-Schema vocabulary.
|
|
95
|
+
* Keep the canonical shape/type/enum/closure guarantees at the model seam;
|
|
96
|
+
* the full canonical AJV validator remains the runtime authority for numeric,
|
|
97
|
+
* pattern, size and uniqueness constraints before an operation can be issued.
|
|
98
|
+
*/
|
|
99
|
+
export function dshBookingActionSchemaForKind(kind) {
|
|
100
|
+
return projectDshSchema(canonicalBookingActionSchemaForKind(kind))
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
/** Self-contained intent schema with its sole public-contract ref inlined. */
|
|
104
|
+
export function canonicalBookingIntentProjectionSchema() {
|
|
105
|
+
const intent = clone(canonicalBookingIntentSchema)
|
|
106
|
+
intent.properties.offerCriteria = clone(inlineLocalRefs(
|
|
107
|
+
canonicalBookingSurfaceSchema.$defs.OfferCriteria,
|
|
108
|
+
canonicalBookingSurfaceSchema,
|
|
109
|
+
))
|
|
110
|
+
return intent
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
/** Provider-advertised subset; execute-time validation uses the full form. */
|
|
114
|
+
export function dshBookingIntentProjectionSchema() {
|
|
115
|
+
return projectDshSchema(canonicalBookingIntentProjectionSchema())
|
|
116
|
+
}
|
|
@@ -0,0 +1,475 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Canonical TypeScript contract for HotelByte's embedded Booking Copilot.
|
|
3
|
+
*
|
|
4
|
+
* Executable facts cross this boundary only as discriminated data. Human text
|
|
5
|
+
* is limited to a user turn or an explanation and is never parsed as an action.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
/** Compatibility line. Additive compatible changes retain this value; breaking changes must bump it. */
|
|
9
|
+
export const BOOKING_SURFACE_SCHEMA_VERSION = 'booking.surface' as const
|
|
10
|
+
/** Diagnostic SHA-256 of the exact local schema artifact; it detects drift but is not a compatibility gate. */
|
|
11
|
+
export const BOOKING_SURFACE_SCHEMA_SHA256 = 'a6b4ded86998a25a3345a0813d46cf7c43c9c91c14c5a6cac053af75f8064847' as const
|
|
12
|
+
export const BOOKING_SURFACE_VERSION_HEADER = 'x-booking-surface-version' as const
|
|
13
|
+
export const BOOKING_SURFACE_SCHEMA_SHA256_HEADER = 'x-booking-surface-schema-sha256' as const
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Additive capabilities are sender-gated instead of creating a new contract
|
|
17
|
+
* line. A sender may use one only after every currently routable peer has
|
|
18
|
+
* advertised it; an omitted feature list therefore means no optional feature.
|
|
19
|
+
*/
|
|
20
|
+
export const BOOKING_SURFACE_FEATURES = ['trusted-order-observation-v1'] as const
|
|
21
|
+
export type BookingSurfaceFeature = (typeof BOOKING_SURFACE_FEATURES)[number]
|
|
22
|
+
export const BOOKING_SURFACE_FEATURES_HEADER = 'x-booking-surface-features' as const
|
|
23
|
+
|
|
24
|
+
export interface BookingSurfaceFeatureAdvertisement {
|
|
25
|
+
/** Untrusted probe data. Unknown values are ignored; a missing/malformed list contributes no features. */
|
|
26
|
+
features?: unknown
|
|
27
|
+
[key: string]: unknown
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
function advertisedBookingSurfaceFeatures(advertisement: BookingSurfaceFeatureAdvertisement): Set<BookingSurfaceFeature> {
|
|
31
|
+
if (!Array.isArray(advertisement.features)) return new Set()
|
|
32
|
+
return new Set(advertisement.features.filter((feature): feature is BookingSurfaceFeature =>
|
|
33
|
+
typeof feature === 'string' && (BOOKING_SURFACE_FEATURES as readonly string[]).includes(feature)))
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* Computes the safe fleet intersection. Callers must supply one fresh
|
|
38
|
+
* advertisement for every routable release identity; an empty or mixed set
|
|
39
|
+
* disables optional fields instead of guessing from the schema hash.
|
|
40
|
+
*/
|
|
41
|
+
export function bookingSurfaceFleetFeatures(advertisements: readonly BookingSurfaceFeatureAdvertisement[]): BookingSurfaceFeature[] {
|
|
42
|
+
if (advertisements.length === 0) return []
|
|
43
|
+
const advertised = advertisements.map(advertisedBookingSurfaceFeatures)
|
|
44
|
+
return BOOKING_SURFACE_FEATURES.filter((feature) => advertised.every((features) => features.has(feature)))
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
export const BOOKING_SURFACES = [
|
|
48
|
+
'tenant',
|
|
49
|
+
'customer_portal',
|
|
50
|
+
'storefront',
|
|
51
|
+
'payment_link',
|
|
52
|
+
] as const
|
|
53
|
+
export type BookingSurface = (typeof BOOKING_SURFACES)[number]
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* Process composition modes are deliberately separate from the payload
|
|
57
|
+
* schema. The default accepts turns already bound by HotelByte's BFF; the
|
|
58
|
+
* second mode is reserved for an in-process BFF binding seam.
|
|
59
|
+
*/
|
|
60
|
+
export const BOOKING_COPILOT_INGRESS_MODES = ['bff-bound-turn-only', 'bff-ingress-binding'] as const
|
|
61
|
+
export type BookingCopilotIngressMode = typeof BOOKING_COPILOT_INGRESS_MODES[number]
|
|
62
|
+
export const BOOKING_COPILOT_ACCEPTED_TURN_KINDS = ['user.turn', 'action.receipt.continuation'] as const
|
|
63
|
+
export const BOOKING_COPILOT_INGRESS_TURN_KIND = 'user.turn.ingress' as const
|
|
64
|
+
/** Hard task-level operation budget. The counter is persisted in the ledger. */
|
|
65
|
+
export const BOOKING_COPILOT_MAX_OPERATIONS = 20 as const
|
|
66
|
+
|
|
67
|
+
export const BOOKING_READ_ACTION_KINDS = ['search.patch','search.run','results.view.patch','hotel.focus','hotel.select','offers.query','offers.view.patch','offers.compare','offer.select','offer.check','checkout.prepare','order.observe'] as const
|
|
68
|
+
export type BookingReadActionKind = typeof BOOKING_READ_ACTION_KINDS[number]
|
|
69
|
+
/** Full read journey shared by tenant and customer-portal workspaces. */
|
|
70
|
+
export const BOOKING_FULL_JOURNEY_ACTION_KINDS = ['search.patch', 'search.run', 'results.view.patch', 'hotel.focus', 'offers.query', 'offers.view.patch', 'offers.compare', 'offer.select', 'offer.check', 'checkout.prepare', 'order.observe'] as const satisfies readonly BookingReadActionKind[]
|
|
71
|
+
/** Product-owned least-privilege action matrix. BFF bindings may narrow these lists, never expand them. */
|
|
72
|
+
export const BOOKING_SURFACE_ALLOWED_ACTIONS: Record<BookingSurface, readonly BookingReadActionKind[]> = {
|
|
73
|
+
tenant: BOOKING_FULL_JOURNEY_ACTION_KINDS,
|
|
74
|
+
customer_portal: BOOKING_FULL_JOURNEY_ACTION_KINDS,
|
|
75
|
+
storefront: ['search.patch', 'search.run', 'results.view.patch', 'hotel.focus'],
|
|
76
|
+
payment_link: ['search.patch', 'search.run', 'results.view.patch', 'hotel.focus', 'hotel.select'],
|
|
77
|
+
}
|
|
78
|
+
/** Stable product-matrix observation for UAT and server readiness proofs. */
|
|
79
|
+
export function bookingSurfaceAllowedActions(surface: BookingSurface): BookingReadActionKind[] {
|
|
80
|
+
return [...BOOKING_SURFACE_ALLOWED_ACTIONS[surface]]
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
/** BFF-facing allowlist after optional, fleet-safe feature negotiation. */
|
|
84
|
+
export function bookingSurfaceNegotiatedActions(surface: BookingSurface, advertisements: readonly BookingSurfaceFeatureAdvertisement[]): BookingReadActionKind[] {
|
|
85
|
+
return bookingSurfaceActionsForFeatures(surface, bookingSurfaceFleetFeatures(advertisements))
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
/** Applies an already-computed fleet intersection supplied by the trusted BFF. */
|
|
89
|
+
export function bookingSurfaceActionsForFeatures(surface: BookingSurface, features: readonly BookingSurfaceFeature[]): BookingReadActionKind[] {
|
|
90
|
+
return bookingSurfaceAllowedActions(surface).filter((action) =>
|
|
91
|
+
action !== 'order.observe' || features.includes('trusted-order-observation-v1'))
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
export type BookingRequestKey = string
|
|
95
|
+
/** Runtime-owned idempotency key; this is not a browser request key. */
|
|
96
|
+
export type BookingInternalDecisionKey = string
|
|
97
|
+
|
|
98
|
+
export const BOOKING_BLOCKER_CODES = ['no_hotels_matched','hotel_not_visible','hotel_rates_failed','criterion_must_not_met','offer_target_not_reached','offer_unavailable'] as const
|
|
99
|
+
export type BookingBlockerCode = typeof BOOKING_BLOCKER_CODES[number]
|
|
100
|
+
export const BOOKING_GAP_CODES = ['byos_mapped_risk','check_avail_failed','check_avail_unverified','component_executor_unavailable','hotel_not_visible','hotel_rates_failed','offer_facts_changed','offer_not_loaded','offer_unavailable','order_not_found','order_outcome_not_observed','order_state_unknown','order_status_unavailable','requested_offers_not_loaded','search_failed','search_form_invalid','search_session_expired','search_terminal_timeout','stale_revision','surface_adapter_failed','undo_token_not_found','unhandled','unsupported','verified_offer_required','workspace_changed_during_action','criterion_must_not_met','no_hotels_matched','offer_target_not_reached'] as const
|
|
101
|
+
export type BookingGapCode = typeof BOOKING_GAP_CODES[number]
|
|
102
|
+
export type BookingBlockerScope = 'search' | 'offer' | 'availability' | 'checkout'
|
|
103
|
+
|
|
104
|
+
export type CriterionStrength = 'must' | 'prefer'
|
|
105
|
+
export interface Criterion<T> {
|
|
106
|
+
strength: CriterionStrength
|
|
107
|
+
value: T
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
export interface Money {
|
|
111
|
+
/** Decimal string supplied by the authoritative page object; never recomputed by GoTry. */
|
|
112
|
+
amount: string
|
|
113
|
+
currency: string
|
|
114
|
+
sourceFactRef: string
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
export interface OccupancyRoom {
|
|
118
|
+
adults: number
|
|
119
|
+
childAges: number[]
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
export interface SearchCriteriaPatch {
|
|
123
|
+
destination?: {
|
|
124
|
+
query?: string
|
|
125
|
+
placeRef?: string
|
|
126
|
+
}
|
|
127
|
+
hotel?: Criterion<{
|
|
128
|
+
name?: string
|
|
129
|
+
hotelRef?: string
|
|
130
|
+
}>
|
|
131
|
+
stay?: {
|
|
132
|
+
checkIn?: string
|
|
133
|
+
checkOut?: string
|
|
134
|
+
}
|
|
135
|
+
occupancy?: {
|
|
136
|
+
rooms: OccupancyRoom[]
|
|
137
|
+
}
|
|
138
|
+
budget?: Criterion<{
|
|
139
|
+
min?: Money
|
|
140
|
+
max?: Money
|
|
141
|
+
}>
|
|
142
|
+
starRating?: Criterion<{
|
|
143
|
+
min?: number
|
|
144
|
+
max?: number
|
|
145
|
+
}>
|
|
146
|
+
guestRating?: Criterion<{
|
|
147
|
+
min: number
|
|
148
|
+
}>
|
|
149
|
+
facilities?: Criterion<{
|
|
150
|
+
allOf: string[]
|
|
151
|
+
}>
|
|
152
|
+
distance?: Criterion<{
|
|
153
|
+
anchorLabel?: string
|
|
154
|
+
anchorRef?: string
|
|
155
|
+
maxKm: number
|
|
156
|
+
}>
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
export type ResultSort =
|
|
160
|
+
| 'recommended'
|
|
161
|
+
| 'price_asc'
|
|
162
|
+
| 'price_desc'
|
|
163
|
+
| 'rating_desc'
|
|
164
|
+
| 'distance_asc'
|
|
165
|
+
|
|
166
|
+
export interface ResultsViewPatch {
|
|
167
|
+
starRating?: { min?: number; max?: number } | null
|
|
168
|
+
guestRatingMin?: number | null
|
|
169
|
+
facilitiesAllOf?: string[] | null
|
|
170
|
+
distance?: { anchorRef: string; maxKm: number } | null
|
|
171
|
+
price?: { min?: Money; max?: Money } | null
|
|
172
|
+
sort?: ResultSort
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
export interface OfferCriteria {
|
|
176
|
+
roomType?: Criterion<string[]>
|
|
177
|
+
bedType?: Criterion<string[]>
|
|
178
|
+
meals?: Criterion<string[]>
|
|
179
|
+
freeCancellation?: Criterion<boolean>
|
|
180
|
+
freeCancellationUntil?: Criterion<string>
|
|
181
|
+
totalPriceMax?: Criterion<Money>
|
|
182
|
+
roomsAvailableMin?: Criterion<number>
|
|
183
|
+
payAtProperty?: Criterion<boolean>
|
|
184
|
+
mobileRate?: Criterion<boolean>
|
|
185
|
+
targetCount?: number
|
|
186
|
+
sort?: 'best_match' | 'total_price_asc' | 'cancellation_latest'
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
export type EvidenceLevel = 'listed' | 'rate_loaded' | 'checked'
|
|
190
|
+
|
|
191
|
+
export interface SearchDraftSnapshot {
|
|
192
|
+
destination?: { query?: string; placeRef?: string }
|
|
193
|
+
stay?: { checkIn?: string; checkOut?: string }
|
|
194
|
+
occupancy?: { rooms: OccupancyRoom[] }
|
|
195
|
+
criteria?: SearchCriteriaPatch
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
export interface ResultViewSnapshot {
|
|
199
|
+
status: 'idle' | 'loading' | 'ready' | 'partial' | 'failed'
|
|
200
|
+
filters?: ResultsViewPatch
|
|
201
|
+
sort?: ResultSort
|
|
202
|
+
resultCount?: number
|
|
203
|
+
searchSessionRef?: string
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
export interface VisibleHotelFact {
|
|
207
|
+
hotelRef: string
|
|
208
|
+
name: string
|
|
209
|
+
starRating?: number
|
|
210
|
+
guestRating?: number
|
|
211
|
+
distanceKm?: number
|
|
212
|
+
facilityCodes?: string[]
|
|
213
|
+
factRefs: string[]
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
export interface LoadedOfferFact {
|
|
217
|
+
offerRef: string
|
|
218
|
+
offerVersionRef: string
|
|
219
|
+
hotelRef: string
|
|
220
|
+
evidenceLevel: EvidenceLevel
|
|
221
|
+
factRefs: string[]
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
export interface VerifiedOfferCapability {
|
|
225
|
+
offerRef: string
|
|
226
|
+
offerVersionRef: string
|
|
227
|
+
verifiedOfferRef: string
|
|
228
|
+
expiresAt: string
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
/** BFF-authoritative order reference exposed only to the internal workspace. */
|
|
232
|
+
export interface ObservableOrderFact {
|
|
233
|
+
orderRef: string
|
|
234
|
+
factRefs: string[]
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
export interface CriterionBlocker {
|
|
238
|
+
blockerId: string
|
|
239
|
+
sourceActionId: string
|
|
240
|
+
sourceReceiptDigest: string
|
|
241
|
+
scope: BookingBlockerScope
|
|
242
|
+
code: BookingBlockerCode
|
|
243
|
+
criterionPath: string
|
|
244
|
+
strength: 'must'
|
|
245
|
+
valueDigest: string
|
|
246
|
+
valueLabel?: string
|
|
247
|
+
evidence: { factRefs: string[]; gapCodes: BookingGapCode[]; requested?: number; actual?: number }
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
export interface RelaxationApproval {
|
|
251
|
+
taskId: string
|
|
252
|
+
contextRef: string
|
|
253
|
+
sourceTurnId: string
|
|
254
|
+
presentationRequestKey: string
|
|
255
|
+
optionDigest: string
|
|
256
|
+
approvalId: string
|
|
257
|
+
deliveryNonce: string
|
|
258
|
+
blockerId: string
|
|
259
|
+
sourceActionId: string
|
|
260
|
+
sourceReceiptDigest: string
|
|
261
|
+
scope: BookingBlockerScope
|
|
262
|
+
code: BookingBlockerCode
|
|
263
|
+
criterionPath: string
|
|
264
|
+
valueDigest: string
|
|
265
|
+
from: 'must'
|
|
266
|
+
to: 'prefer' | 'drop'
|
|
267
|
+
approved: true
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
export interface RelaxationApprovalRef {
|
|
271
|
+
approvalId: string
|
|
272
|
+
blockerId: string
|
|
273
|
+
contextRef: string
|
|
274
|
+
sourceTurnId: string
|
|
275
|
+
presentationRequestKey: string
|
|
276
|
+
sourceActionId: string
|
|
277
|
+
targetActionId: string
|
|
278
|
+
sourceRevision: number
|
|
279
|
+
targetActionKind: BookingReadActionKind
|
|
280
|
+
to: 'prefer' | 'drop'
|
|
281
|
+
expiresAt: string
|
|
282
|
+
nonce: string
|
|
283
|
+
sourceReceiptDigest: string
|
|
284
|
+
scope: BookingBlockerScope
|
|
285
|
+
code: BookingBlockerCode
|
|
286
|
+
criterionPath: string
|
|
287
|
+
valueDigest: string
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
interface BookingReadActionBase<K extends BookingReadActionKind, I> {
|
|
291
|
+
schemaVersion: typeof BOOKING_SURFACE_SCHEMA_VERSION
|
|
292
|
+
kind: K
|
|
293
|
+
actionId: string
|
|
294
|
+
contextRef: string
|
|
295
|
+
expectedRevision: number
|
|
296
|
+
reason: string
|
|
297
|
+
factRefs: string[]
|
|
298
|
+
input: I
|
|
299
|
+
relaxationApprovalRef?: RelaxationApprovalRef
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
export type SearchPatchAction = BookingReadActionBase<'search.patch', { patch: SearchCriteriaPatch }>
|
|
303
|
+
export type SearchRunAction = BookingReadActionBase<'search.run', Record<string, never>>
|
|
304
|
+
export type ResultsViewPatchAction = BookingReadActionBase<'results.view.patch', { patch: ResultsViewPatch }>
|
|
305
|
+
export type HotelFocusAction = BookingReadActionBase<'hotel.focus', { hotelRef: string }>
|
|
306
|
+
export type HotelSelectAction = BookingReadActionBase<'hotel.select', { hotelRef: string }>
|
|
307
|
+
export type OffersQueryAction = BookingReadActionBase<'offers.query', { hotelRefs: string[]; criteria: OfferCriteria }>
|
|
308
|
+
export type OffersViewPatchAction = BookingReadActionBase<'offers.view.patch', { hotelRef: string; criteria: OfferCriteria }>
|
|
309
|
+
export type OffersCompareAction = BookingReadActionBase<'offers.compare', { offerRefs: string[]; requestedCount: number }>
|
|
310
|
+
export type OfferSelectAction = BookingReadActionBase<'offer.select', { offerRef: string; offerVersionRef: string }>
|
|
311
|
+
export type OfferCheckAction = BookingReadActionBase<'offer.check', { offerRef: string; offerVersionRef: string }>
|
|
312
|
+
export type CheckoutPrepareAction = BookingReadActionBase<'checkout.prepare', { offerRef: string; offerVersionRef: string; verifiedOfferRef: string }>
|
|
313
|
+
export type OrderObserveAction = BookingReadActionBase<'order.observe', { orderRef: string }>
|
|
314
|
+
|
|
315
|
+
export type BookingReadAction =
|
|
316
|
+
| SearchPatchAction
|
|
317
|
+
| SearchRunAction
|
|
318
|
+
| ResultsViewPatchAction
|
|
319
|
+
| HotelFocusAction
|
|
320
|
+
| HotelSelectAction
|
|
321
|
+
| OffersQueryAction
|
|
322
|
+
| OffersViewPatchAction
|
|
323
|
+
| OffersCompareAction
|
|
324
|
+
| OfferSelectAction
|
|
325
|
+
| OfferCheckAction
|
|
326
|
+
| CheckoutPrepareAction
|
|
327
|
+
| OrderObserveAction
|
|
328
|
+
|
|
329
|
+
export interface BookingWorkspaceSnapshot {
|
|
330
|
+
schemaVersion: typeof BOOKING_SURFACE_SCHEMA_VERSION
|
|
331
|
+
contextRef: string
|
|
332
|
+
surface: BookingSurface
|
|
333
|
+
revision: number
|
|
334
|
+
locale: string
|
|
335
|
+
currency: string
|
|
336
|
+
searchDraft: SearchDraftSnapshot
|
|
337
|
+
results: ResultViewSnapshot
|
|
338
|
+
visibleHotels: VisibleHotelFact[]
|
|
339
|
+
loadedOffers: LoadedOfferFact[]
|
|
340
|
+
focusedHotelRef?: string
|
|
341
|
+
shortlistedOfferRefs: string[]
|
|
342
|
+
selectedOfferRef?: string
|
|
343
|
+
verifiedOffer?: VerifiedOfferCapability
|
|
344
|
+
/** Never accepted from browser IngressWorkspace; injected by trusted BFF binding. */
|
|
345
|
+
observableOrders?: ObservableOrderFact[]
|
|
346
|
+
capabilities: { surface: BookingSurface; allowedActions: BookingReadActionKind[] }
|
|
347
|
+
}
|
|
348
|
+
|
|
349
|
+
export type BookingWorkspaceIngressSnapshot = Pick<
|
|
350
|
+
BookingWorkspaceSnapshot,
|
|
351
|
+
'schemaVersion' | 'revision' | 'locale' | 'currency' | 'searchDraft' | 'results' | 'visibleHotels' | 'loadedOffers' | 'focusedHotelRef' | 'shortlistedOfferRefs' | 'selectedOfferRef'
|
|
352
|
+
>
|
|
353
|
+
|
|
354
|
+
export type ActionObservation =
|
|
355
|
+
| { kind: 'search.state'; searchSessionRef?: string; resultCount?: number; gapCodes?: BookingGapCode[] }
|
|
356
|
+
| { kind: 'results.state'; matchedHotelRefs: string[]; visibleCount: number; gapCodes?: BookingGapCode[] }
|
|
357
|
+
| { kind: 'hotel.focus'; hotelRef: string }
|
|
358
|
+
| { kind: 'hotel.selection'; hotelRef: string }
|
|
359
|
+
| { kind: 'offers.state'; hotelRefs: string[]; offerRefs: string[]; loadedHotelCount: number; gapCodes?: BookingGapCode[] }
|
|
360
|
+
| { kind: 'offer.selection'; offerRef: string; offerVersionRef: string }
|
|
361
|
+
| { kind: 'offer.availability'; offerRef: string; checkedOfferVersionRef: string; currentOfferVersionRef?: string; verifiedOfferRef?: string; available: boolean; changedFactRefs: string[]; gapCodes?: BookingGapCode[] }
|
|
362
|
+
| { kind: 'checkout.handoff'; offerRef: string; offerVersionRef: string; verifiedOfferRef: string; handoffRef: string }
|
|
363
|
+
| { kind: 'order.state'; orderRef: string; state: 'pending' | 'verified' | 'failed' | 'unknown'; gapCodes?: BookingGapCode[] }
|
|
364
|
+
| { kind: 'gap'; code: BookingGapCode; factRefs: string[] }
|
|
365
|
+
|
|
366
|
+
export interface ResultContract {
|
|
367
|
+
outcome: 'complete' | 'partial' | 'empty'
|
|
368
|
+
requestedCount?: number
|
|
369
|
+
actualCount?: number
|
|
370
|
+
hardCriteriaMet: boolean
|
|
371
|
+
factRefs: string[]
|
|
372
|
+
gapCodes: BookingGapCode[]
|
|
373
|
+
blockers: CriterionBlocker[]
|
|
374
|
+
relaxationsApplied: RelaxationApproval[]
|
|
375
|
+
}
|
|
376
|
+
|
|
377
|
+
export interface ActionReceipt {
|
|
378
|
+
schemaVersion: typeof BOOKING_SURFACE_SCHEMA_VERSION
|
|
379
|
+
kind: 'action.receipt'
|
|
380
|
+
actionId: string
|
|
381
|
+
contextRef: string
|
|
382
|
+
status: 'applied' | 'needs_input' | 'partial' | 'no_match' | 'unavailable' | 'changed' | 'stale' | 'unsupported' | 'failed'
|
|
383
|
+
revision: number
|
|
384
|
+
observation: ActionObservation
|
|
385
|
+
resultContract: ResultContract
|
|
386
|
+
undoToken?: string
|
|
387
|
+
}
|
|
388
|
+
|
|
389
|
+
export interface UserTurn {
|
|
390
|
+
schemaVersion: typeof BOOKING_SURFACE_SCHEMA_VERSION
|
|
391
|
+
kind: 'user.turn'
|
|
392
|
+
taskId: string
|
|
393
|
+
turnId: string
|
|
394
|
+
workspace: BookingWorkspaceSnapshot
|
|
395
|
+
request: { text: string; approval?: RelaxationApproval }
|
|
396
|
+
}
|
|
397
|
+
|
|
398
|
+
/** Browser-to-BFF ingress. Identity is deliberately absent from this shape. */
|
|
399
|
+
export interface IngressTurn {
|
|
400
|
+
schemaVersion: typeof BOOKING_SURFACE_SCHEMA_VERSION
|
|
401
|
+
kind: 'user.turn.ingress'
|
|
402
|
+
requestKey: BookingRequestKey
|
|
403
|
+
taskHandle?: string
|
|
404
|
+
surfaceHint: BookingSurface
|
|
405
|
+
workspace: BookingWorkspaceIngressSnapshot
|
|
406
|
+
request: { text: string; approval?: RelaxationApproval }
|
|
407
|
+
}
|
|
408
|
+
|
|
409
|
+
export interface ReceiptContinuation {
|
|
410
|
+
schemaVersion: typeof BOOKING_SURFACE_SCHEMA_VERSION
|
|
411
|
+
kind: 'action.receipt.continuation'
|
|
412
|
+
taskId: string
|
|
413
|
+
workspace: BookingWorkspaceSnapshot
|
|
414
|
+
receipt: ActionReceipt
|
|
415
|
+
}
|
|
416
|
+
|
|
417
|
+
export type BookingCopilotTurn = UserTurn | IngressTurn | ReceiptContinuation
|
|
418
|
+
|
|
419
|
+
/** Typed BFF seam: implementations authenticate ingress and return only
|
|
420
|
+
* server-issued identity. The HTTP adapter constructs the internal UserTurn. */
|
|
421
|
+
export interface BookingIngressIdentityBinding {
|
|
422
|
+
taskId: string
|
|
423
|
+
turnId: string
|
|
424
|
+
contextRef: string
|
|
425
|
+
/** Authoritative BFF surface; never copied from the browser hint. */
|
|
426
|
+
surface: BookingSurface
|
|
427
|
+
/** BFF-authorized closed action subset for this surface. */
|
|
428
|
+
allowedActions: BookingReadActionKind[]
|
|
429
|
+
/** Optional trusted order projection; never supplied by browser ingress. */
|
|
430
|
+
observableOrders?: ObservableOrderFact[]
|
|
431
|
+
}
|
|
432
|
+
|
|
433
|
+
export interface BookingIngressPrincipal {
|
|
434
|
+
subject: string
|
|
435
|
+
scope: string
|
|
436
|
+
}
|
|
437
|
+
|
|
438
|
+
export interface BookingIngressBinding {
|
|
439
|
+
bind(input: IngressTurn, principal: BookingIngressPrincipal): BookingIngressIdentityBinding | Promise<BookingIngressIdentityBinding>
|
|
440
|
+
}
|
|
441
|
+
|
|
442
|
+
export interface BookingQuestionEvent {
|
|
443
|
+
schemaVersion: typeof BOOKING_SURFACE_SCHEMA_VERSION
|
|
444
|
+
eventId: string
|
|
445
|
+
taskId: string
|
|
446
|
+
contextRef: string
|
|
447
|
+
sequence: number
|
|
448
|
+
emittedAt: string
|
|
449
|
+
kind: 'question'
|
|
450
|
+
question: {
|
|
451
|
+
questionId: string
|
|
452
|
+
prompt: string
|
|
453
|
+
missingFields: string[]
|
|
454
|
+
type: 'relaxation_approval_required'
|
|
455
|
+
blocker: CriterionBlocker
|
|
456
|
+
approvalOptions: Array<{ approval: RelaxationApproval }>
|
|
457
|
+
}
|
|
458
|
+
}
|
|
459
|
+
|
|
460
|
+
export interface BookingEventBase {
|
|
461
|
+
schemaVersion: typeof BOOKING_SURFACE_SCHEMA_VERSION
|
|
462
|
+
eventId: string
|
|
463
|
+
taskId: string
|
|
464
|
+
contextRef: string
|
|
465
|
+
sequence: number
|
|
466
|
+
emittedAt: string
|
|
467
|
+
}
|
|
468
|
+
|
|
469
|
+
export type BookingSurfaceEvent =
|
|
470
|
+
| (BookingEventBase & { kind: 'status'; status: 'submitted' | 'working' | 'waiting_receipt' | 'input_required' })
|
|
471
|
+
| BookingQuestionEvent
|
|
472
|
+
| (BookingEventBase & { kind: 'operation'; action: BookingReadAction })
|
|
473
|
+
| (BookingEventBase & { kind: 'explanation'; explanation: { text: string; factRefs: string[] } })
|
|
474
|
+
| (BookingEventBase & { kind: 'terminal'; terminal: { status: 'completed' | 'stopped'; summary: string; factRefs: string[] } })
|
|
475
|
+
| (BookingEventBase & { kind: 'error'; error: { code: string; message: string; retryable: boolean } })
|