booking-agent-cli 0.10.2__tar.gz → 0.11.0__tar.gz
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.
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/PKG-INFO +6 -2
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/README.md +5 -1
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/pyproject.toml +1 -1
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/src/booking_agent/__init__.py +1 -1
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/src/booking_agent/http_trace.py +58 -6
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/src/booking_agent_cli/__init__.py +1 -1
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/src/booking_agent_cli/bundled_skill.md +21 -25
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/src/booking_agent_cli/calendar_connection.py +15 -3
- booking_agent_cli-0.11.0/src/booking_agent_cli/calendar_delegated.py +366 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/src/booking_agent_cli/calendar_preference.py +33 -3
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/src/booking_agent_cli/commands/flow.py +530 -26
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/src/booking_agent_cli/main.py +3 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/src/booking_agent_cli/session.py +22 -2
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/src/booking_agent_cli/support_report.py +6 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/tests/integration/test_calendar_connector.py +13 -0
- booking_agent_cli-0.11.0/tests/integration/test_calendar_delegated.py +508 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/tests/integration/test_calendar_flow.py +1 -1
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/tests/integration/test_cli_enforced_gates.py +1 -1
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/tests/integration/test_skill_portability.py +1 -0
- booking_agent_cli-0.11.0/tests/unit/test_harness_docs.py +100 -0
- booking_agent_cli-0.11.0/tests/unit/test_proxy_env.py +82 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/tests/unit/test_release_notes.py +74 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/.gitignore +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/src/booking_agent/authorization.py +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/src/booking_agent/backend/__init__.py +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/src/booking_agent/backend/live.py +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/src/booking_agent/calendar/__init__.py +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/src/booking_agent/calendar/filter.py +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/src/booking_agent/calendar/google.py +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/src/booking_agent/calendar/oauth_listener.py +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/src/booking_agent/calendar/scope.py +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/src/booking_agent/circuit_breaker.py +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/src/booking_agent/config.py +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/src/booking_agent/defaults.env +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/src/booking_agent/discovery.py +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/src/booking_agent/faults.py +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/src/booking_agent/headless.py +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/src/booking_agent/http_deadlines.py +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/src/booking_agent/http_retry.py +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/src/booking_agent/merchant_pacing.py +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/src/booking_agent/models/__init__.py +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/src/booking_agent/models/platform.py +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/src/booking_agent/models/wire.py +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/src/booking_agent/namespace.py +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/src/booking_agent/observability.py +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/src/booking_agent/platform_profile.py +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/src/booking_agent/pop.py +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/src/booking_agent/profile_cache.py +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/src/booking_agent/registry_url.py +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/src/booking_agent/rest_client.py +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/src/booking_agent/secure_file.py +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/src/booking_agent/settings.py +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/src/booking_agent/signals.py +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/src/booking_agent/step_timing.py +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/src/booking_agent/ucp_capabilities.py +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/src/booking_agent/ucp_checkout.py +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/src/booking_agent/ucp_negotiation.py +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/src/booking_agent/ucp_profile.py +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/src/booking_agent/usp_methods.py +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/src/booking_agent_cli/activity_log.py +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/src/booking_agent_cli/booking_poll.py +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/src/booking_agent_cli/booking_summary.py +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/src/booking_agent_cli/calendar_event.py +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/src/booking_agent_cli/catalog.py +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/src/booking_agent_cli/checkout_prereq.py +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/src/booking_agent_cli/commands/__init__.py +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/src/booking_agent_cli/commands/config.py +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/src/booking_agent_cli/commands/lowlevel.py +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/src/booking_agent_cli/commands/runtime.py +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/src/booking_agent_cli/commands/update.py +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/src/booking_agent_cli/config_loader.py +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/src/booking_agent_cli/engine.py +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/src/booking_agent_cli/fault_report_schema.py +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/src/booking_agent_cli/fault_reports.py +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/src/booking_agent_cli/flow_timings.py +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/src/booking_agent_cli/gates.py +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/src/booking_agent_cli/geo_eligibility.py +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/src/booking_agent_cli/geocode.py +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/src/booking_agent_cli/identity.py +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/src/booking_agent_cli/install_integrity.py +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/src/booking_agent_cli/link_cli.py +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/src/booking_agent_cli/output.py +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/src/booking_agent_cli/payment_helpers.py +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/src/booking_agent_cli/payment_token.py +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/src/booking_agent_cli/provenance.py +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/src/booking_agent_cli/reschedule.py +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/src/booking_agent_cli/runtime.py +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/src/booking_agent_cli/runtime_prepare.py +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/src/booking_agent_cli/search_area.py +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/src/booking_agent_cli/skill_bundle.py +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/src/booking_agent_cli/skill_integrity.py +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/src/booking_agent_cli/support_bundle_schema.py +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/src/booking_agent_cli/timezone_context.py +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/src/booking_agent_cli/updates.py +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/tests/.env.tests +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/tests/conftest.py +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/tests/e2e/__init__.py +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/tests/e2e/test_cancel_reschedule_e2e.py +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/tests/e2e/test_latency_soak.py +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/tests/e2e/test_staging_registry_integration.py +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/tests/e2e/test_timezone_booking_e2e.py +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/tests/e2e/test_ucp_native_e2e.py +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/tests/e2e/test_ucp_skill_flow_e2e.py +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/tests/e2e/ucp_native.py +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/tests/integration/__init__.py +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/tests/integration/test_activity_log.py +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/tests/integration/test_at_rest_hygiene.py +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/tests/integration/test_booking_rejection.py +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/tests/integration/test_bulk_cancel.py +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/tests/integration/test_calendar_connection.py +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/tests/integration/test_calendar_preference.py +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/tests/integration/test_checkout_signals.py +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/tests/integration/test_circuit_breaker.py +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/tests/integration/test_config.py +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/tests/integration/test_correlation_flow.py +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/tests/integration/test_declined_spt.py +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/tests/integration/test_discover_registry_rejection.py +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/tests/integration/test_flow_evidence.py +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/tests/integration/test_flow_gates.py +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/tests/integration/test_flow_reschedule.py +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/tests/integration/test_flow_step_timings.py +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/tests/integration/test_google_calendar_oauth.py +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/tests/integration/test_home_visit_address.py +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/tests/integration/test_http_trace.py +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/tests/integration/test_identity_logout.py +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/tests/integration/test_install_integrity.py +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/tests/integration/test_lazy_oauth.py +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/tests/integration/test_link_auth.py +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/tests/integration/test_link_cli_spt.py +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/tests/integration/test_namespace.py +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/tests/integration/test_oauth_listener.py +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/tests/integration/test_oauth_metadata.py +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/tests/integration/test_platform_key_pop.py +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/tests/integration/test_platform_profile.py +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/tests/integration/test_pop_keystore.py +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/tests/integration/test_profile_cache.py +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/tests/integration/test_regression_index.py +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/tests/integration/test_release_hold_uses_delete.py +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/tests/integration/test_request_retry_semantics.py +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/tests/integration/test_resume_after_restart.py +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/tests/integration/test_runtime_prepare.py +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/tests/integration/test_search_area.py +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/tests/integration/test_session_compat.py +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/tests/integration/test_session_retention.py +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/tests/integration/test_skill_integrity.py +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/tests/integration/test_support_report.py +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/tests/integration/test_timezone_context.py +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/tests/integration/test_ucp_cancel_result.py +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/tests/integration/test_ucp_checkout_pop.py +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/tests/integration/test_ucp_checkout_proof_wireup.py +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/tests/integration/test_ucp_checkout_validate.py +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/tests/integration/test_ucp_profile.py +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/tests/integration/test_update_command.py +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/tests/integration/test_wheel_contents.py +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/tests/spec_schemas/SOURCE +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/tests/spec_schemas/acp_booking_extension.json +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/tests/spec_schemas/availability.json +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/tests/spec_schemas/booking.json +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/tests/spec_schemas/calendar_freebusy.json +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/tests/spec_schemas/catalog.json +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/tests/spec_schemas/paid_bookings.json +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/tests/spec_schemas/profile.json +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/tests/spec_schemas/registry.json +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/tests/spec_schemas/rest_common.json +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/tests/spec_schemas/usp.json +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/tests/spec_schemas/waitlist.json +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/tests/spec_schemas/webhook_event.json +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/tests/support/__init__.py +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/tests/support/fixtures/__init__.py +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/tests/support/fixtures/profiles.py +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/tests/support/fixtures/provenance/pypi_attestations-0.0.30-py3-none-any.whl.provenance.json +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/tests/support/fixtures/services.py +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/tests/support/mock/__init__.py +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/tests/support/mock/backend.py +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/tests/support/mock/link_cli.py +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/tests/support/mock/mock_calendar.py +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/tests/support/mock/pop_business.py +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/tests/support/mock/pop_transport.py +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/tests/support/mock/ucp_checkout_store.py +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/tests/support/mock/ucp_server.py +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/tests/support/offline_stack/__init__.py +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/tests/support/offline_stack/stack.py +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/tests/unit/__init__.py +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/tests/unit/test_authorization_policy.py +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/tests/unit/test_booking_poll_credentials.py +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/tests/unit/test_booking_request_error.py +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/tests/unit/test_calendar_filter.py +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/tests/unit/test_catalog.py +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/tests/unit/test_check_version.py +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/tests/unit/test_conditional_writes.py +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/tests/unit/test_delivery_address.py +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/tests/unit/test_discovery.py +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/tests/unit/test_fault_reports.py +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/tests/unit/test_geo_eligibility.py +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/tests/unit/test_geocode.py +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/tests/unit/test_headless.py +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/tests/unit/test_http_deadlines.py +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/tests/unit/test_http_retry.py +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/tests/unit/test_live_search_registry.py +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/tests/unit/test_merchant_pacing.py +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/tests/unit/test_mock_support.py +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/tests/unit/test_money_path_events.py +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/tests/unit/test_nonce_from_pop_error_body.py +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/tests/unit/test_observability.py +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/tests/unit/test_outbound_member_names.py +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/tests/unit/test_package_layering.py +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/tests/unit/test_pay_at_service.py +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/tests/unit/test_provenance.py +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/tests/unit/test_registry_search_filters.py +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/tests/unit/test_registry_search_pricing.py +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/tests/unit/test_registry_search_responses.py +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/tests/unit/test_registry_url.py +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/tests/unit/test_rest_client.py +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/tests/unit/test_scoped_method_authorization.py +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/tests/unit/test_session_credentials.py +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/tests/unit/test_spec_conformance.py +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/tests/unit/test_step_timing.py +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/tests/unit/test_ucp_capabilities.py +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/tests/unit/test_ucp_complete_outcome.py +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/tests/unit/test_ucp_create_price_guard.py +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/tests/unit/test_ucp_negotiation.py +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/tests/unit/test_updates.py +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/tests/unit/test_wire_model_conformance.py +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/tests/vectors/pop/001-jcs-nested-buyer.json +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/tests/vectors/pop/002-jcs-meta-only.json +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/tests/vectors/pop/003-jcs-unicode-empty-meta.json +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/tests/vectors/pop/004-proof-issuance-no-ath.json +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/tests/vectors/pop/005-proof-presentation-ath-nonce.json +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/tests/vectors/pop/006-cross-key-replay.json +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/tests/vectors/pop/007-downgrade-cnf-without-proof.json +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/tests/vectors/pop/008-replayed-jti.json +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/tests/vectors/pop/009-aud-mismatch.json +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/tests/vectors/pop/010-alg-none.json +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/tests/vectors/pop/README.md +0 -0
- {booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/tests/vectors/pop/SOURCE +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: booking-agent-cli
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.11.0
|
|
4
4
|
Summary: The Booking Agent CLI: a stateful USP booking flow with hard gates, plus its USP protocol library.
|
|
5
5
|
Project-URL: Homepage, https://github.com/wix/booking-agent
|
|
6
6
|
Project-URL: Documentation, https://github.com/wix/booking-agent/blob/master/booking-agent/README.md
|
|
@@ -70,6 +70,10 @@ workflow. Check a downloaded wheel with
|
|
|
70
70
|
`booking-agent update` installs only verified wheels, and the CLI checks its own installed
|
|
71
71
|
files against the attested release before it books or pays.
|
|
72
72
|
|
|
73
|
+
On a verified agent harness (Grok Bot, Base44 Superagent), follow that harness's install
|
|
74
|
+
guide instead: it pins the CLI and skill pair that passed the harness's own booking replay.
|
|
75
|
+
Guides: https://github.com/wix/booking-agent/blob/master/booking-agent/docs/harnesses/README.md
|
|
76
|
+
|
|
73
77
|
Agents use the CLI through the Booking Agent skill, installed with
|
|
74
78
|
`npx skills add wix/booking-agent --skill booking-agent`, or taken from the canonical raw URL:
|
|
75
79
|
https://raw.githubusercontent.com/wix/booking-agent/master/booking-agent/skills/booking-agent/SKILL.md
|
|
@@ -78,7 +82,7 @@ Each release also publishes that skill at an immutable `skill-v<version>` tag an
|
|
|
78
82
|
the release workflow, so a harness can pin and verify the exact text it follows:
|
|
79
83
|
|
|
80
84
|
```bash
|
|
81
|
-
curl -fsSLO https://raw.githubusercontent.com/wix/booking-agent/skill-v0.
|
|
85
|
+
curl -fsSLO https://raw.githubusercontent.com/wix/booking-agent/skill-v0.58.0/booking-agent/skills/booking-agent/SKILL.md
|
|
82
86
|
gh attestation verify SKILL.md --repo wix/booking-agent \
|
|
83
87
|
--signer-workflow wix/booking-agent/.github/workflows/release.yml
|
|
84
88
|
```
|
|
@@ -28,6 +28,10 @@ workflow. Check a downloaded wheel with
|
|
|
28
28
|
`booking-agent update` installs only verified wheels, and the CLI checks its own installed
|
|
29
29
|
files against the attested release before it books or pays.
|
|
30
30
|
|
|
31
|
+
On a verified agent harness (Grok Bot, Base44 Superagent), follow that harness's install
|
|
32
|
+
guide instead: it pins the CLI and skill pair that passed the harness's own booking replay.
|
|
33
|
+
Guides: https://github.com/wix/booking-agent/blob/master/booking-agent/docs/harnesses/README.md
|
|
34
|
+
|
|
31
35
|
Agents use the CLI through the Booking Agent skill, installed with
|
|
32
36
|
`npx skills add wix/booking-agent --skill booking-agent`, or taken from the canonical raw URL:
|
|
33
37
|
https://raw.githubusercontent.com/wix/booking-agent/master/booking-agent/skills/booking-agent/SKILL.md
|
|
@@ -36,7 +40,7 @@ Each release also publishes that skill at an immutable `skill-v<version>` tag an
|
|
|
36
40
|
the release workflow, so a harness can pin and verify the exact text it follows:
|
|
37
41
|
|
|
38
42
|
```bash
|
|
39
|
-
curl -fsSLO https://raw.githubusercontent.com/wix/booking-agent/skill-v0.
|
|
43
|
+
curl -fsSLO https://raw.githubusercontent.com/wix/booking-agent/skill-v0.58.0/booking-agent/skills/booking-agent/SKILL.md
|
|
40
44
|
gh attestation verify SKILL.md --repo wix/booking-agent \
|
|
41
45
|
--signer-workflow wix/booking-agent/.github/workflows/release.yml
|
|
42
46
|
```
|
|
@@ -6,6 +6,7 @@ append redacted request/response records to ``~/.booking-agent/http_trace.log``.
|
|
|
6
6
|
|
|
7
7
|
from __future__ import annotations
|
|
8
8
|
|
|
9
|
+
import ipaddress
|
|
9
10
|
import json
|
|
10
11
|
import os
|
|
11
12
|
import re
|
|
@@ -388,18 +389,58 @@ class _CircuitTransport(httpx.AsyncBaseTransport):
|
|
|
388
389
|
await self._inner.aclose()
|
|
389
390
|
|
|
390
391
|
|
|
392
|
+
def _unbracket_ipv6(host: str) -> str:
|
|
393
|
+
"""``[::1]`` as ``::1``. httpx accepts only the bare address in ``NO_PROXY``."""
|
|
394
|
+
if len(host) >= 4 and host.startswith("[") and host.endswith("]") and ":" in host:
|
|
395
|
+
inner = host[1:-1]
|
|
396
|
+
try:
|
|
397
|
+
ipaddress.IPv6Address(inner.split("/")[0])
|
|
398
|
+
except ValueError:
|
|
399
|
+
return host
|
|
400
|
+
return inner
|
|
401
|
+
return host
|
|
402
|
+
|
|
403
|
+
|
|
404
|
+
def tolerate_proxy_env() -> None:
|
|
405
|
+
"""Rewrite ``NO_PROXY`` so an httpx client can be built.
|
|
406
|
+
|
|
407
|
+
A bracketed IPv6 entry such as ``[::1]`` is not recognized as an address.
|
|
408
|
+
httpx then reads the colon as a port and raises ``InvalidURL`` while
|
|
409
|
+
constructing every client, before any request is sent. The same address
|
|
410
|
+
without brackets is accepted and still bypasses the proxy. Other entries
|
|
411
|
+
are kept, in order.
|
|
412
|
+
"""
|
|
413
|
+
for name in ("NO_PROXY", "no_proxy"):
|
|
414
|
+
raw = os.environ.get(name)
|
|
415
|
+
if not raw:
|
|
416
|
+
continue
|
|
417
|
+
kept: list[str] = []
|
|
418
|
+
for part in raw.split(","):
|
|
419
|
+
host = _unbracket_ipv6(part.strip())
|
|
420
|
+
if host and host not in kept:
|
|
421
|
+
kept.append(host)
|
|
422
|
+
cleaned = ",".join(kept)
|
|
423
|
+
if cleaned != raw:
|
|
424
|
+
os.environ[name] = cleaned
|
|
425
|
+
|
|
426
|
+
|
|
391
427
|
def traced_async_client(
|
|
392
428
|
**kwargs: Any,
|
|
393
429
|
) -> httpx.AsyncClient:
|
|
394
|
-
"""``httpx.AsyncClient`` with optional redacted trace logging.
|
|
430
|
+
"""``httpx.AsyncClient`` with optional redacted trace logging.
|
|
431
|
+
|
|
432
|
+
Environment proxies (``HTTP_PROXY``, ``HTTPS_PROXY``, ``ALL_PROXY``) apply
|
|
433
|
+
when the caller does not pass ``transport``. httpx skips them when
|
|
434
|
+
``transport`` is set, so the circuit breaker wraps the transports httpx
|
|
435
|
+
built, including each proxy mount. A caller-supplied transport is used as
|
|
436
|
+
given.
|
|
437
|
+
"""
|
|
438
|
+
tolerate_proxy_env()
|
|
395
439
|
circuit: Optional[HostCircuitBreaker] = kwargs.pop("circuit", None)
|
|
396
440
|
if circuit is None:
|
|
397
441
|
circuit = default_breaker()
|
|
398
442
|
kwargs["timeout"] = coerce_timeout(kwargs.get("timeout"))
|
|
399
|
-
|
|
400
|
-
if inner is None:
|
|
401
|
-
inner = httpx.AsyncHTTPTransport()
|
|
402
|
-
kwargs["transport"] = _CircuitTransport(inner, circuit)
|
|
443
|
+
explicit = kwargs.pop("transport", None)
|
|
403
444
|
|
|
404
445
|
hooks = dict(kwargs.pop("event_hooks", {}) or {})
|
|
405
446
|
hooks["request"] = [
|
|
@@ -413,7 +454,18 @@ def traced_async_client(
|
|
|
413
454
|
if tracing_enabled():
|
|
414
455
|
hooks["request"] = [*hooks["request"], _log_request]
|
|
415
456
|
hooks["response"] = [*hooks["response"], _log_response]
|
|
416
|
-
|
|
457
|
+
|
|
458
|
+
if explicit is not None:
|
|
459
|
+
kwargs["transport"] = _CircuitTransport(explicit, circuit)
|
|
460
|
+
return httpx.AsyncClient(event_hooks=hooks, **kwargs)
|
|
461
|
+
|
|
462
|
+
client = httpx.AsyncClient(event_hooks=hooks, **kwargs)
|
|
463
|
+
client._transport = _CircuitTransport(client._transport, circuit)
|
|
464
|
+
client._mounts = {
|
|
465
|
+
pattern: None if transport is None else _CircuitTransport(transport, circuit)
|
|
466
|
+
for pattern, transport in client._mounts.items()
|
|
467
|
+
}
|
|
468
|
+
return client
|
|
417
469
|
|
|
418
470
|
|
|
419
471
|
def purge_trace_log() -> bool:
|
{booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/src/booking_agent_cli/bundled_skill.md
RENAMED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
version: 0.
|
|
2
|
+
version: 0.58.0
|
|
3
3
|
name: booking-agent
|
|
4
4
|
description: |
|
|
5
5
|
Books time-based services via USP from a Link wallet. Use when the user wants to book, schedule, reserve, or pay for a service from a business (haircut, lesson, repair, class, appointment, consult). The `booking-agent` CLI owns the booking state machine and refuses to proceed when human gates are skipped. Sign the user in to Link on your own, right after install and at the start of every booking (`booking-agent flow link-auth connect`, then start `booking-agent flow link-auth poll` in the background and post the sign-in URL in the same turn, exactly like `pay poll`); never wait for the user to ask to sign in or to say they approved. After `booking-agent flow business use`, follow `next_command` through `use-ucp-checkout-mode`; businesses without native checkout fail closed. Payment uses `booking-agent flow pay request` (default returns immediately with the approval URL), then start `booking-agent flow pay poll` in the background and post the approval URL to the user in the same turn; the poll finishes checkout once they approve. Confirm through `booking-agent flow book poll --wait`; never start an inbound webhook. Surface the approval URL exactly once. Personal identification (name, phone, email, address) must always come from the user's Link account via `link-cli`, never from chat or placeholders. Before any location-based search, the CLI proposes the Link shipping address and the user confirms it or gives another; online services skip this. Talk to the user in plain everyday language only; never expose CLI, UCP, auth, session, or other implementation details unless they explicitly ask.
|
|
@@ -19,7 +19,7 @@ metadata:
|
|
|
19
19
|
- link-cli
|
|
20
20
|
install:
|
|
21
21
|
- kind: uv
|
|
22
|
-
package: "booking-agent-cli==0.
|
|
22
|
+
package: "booking-agent-cli==0.11.0"
|
|
23
23
|
bins: [booking-agent]
|
|
24
24
|
user-invocable: true
|
|
25
25
|
---
|
|
@@ -220,7 +220,7 @@ To take a fixed, published version instead of the latest, fetch it at the releas
|
|
|
220
220
|
workflow signs it under, and check the signature before you follow it:
|
|
221
221
|
|
|
222
222
|
```bash
|
|
223
|
-
curl -fsSLO https://raw.githubusercontent.com/wix/booking-agent/skill-v0.
|
|
223
|
+
curl -fsSLO https://raw.githubusercontent.com/wix/booking-agent/skill-v0.58.0/booking-agent/skills/booking-agent/SKILL.md
|
|
224
224
|
gh attestation verify SKILL.md \
|
|
225
225
|
--repo wix/booking-agent \
|
|
226
226
|
--signer-workflow wix/booking-agent/.github/workflows/release.yml
|
|
@@ -245,17 +245,17 @@ before installing:
|
|
|
245
245
|
|
|
246
246
|
```bash
|
|
247
247
|
dir="$HOME/.booking-agent/verified-wheels"
|
|
248
|
-
uvx pip download "booking-agent-cli==0.
|
|
248
|
+
uvx pip download "booking-agent-cli==0.11.0" --no-deps --only-binary :all: -d "$dir"
|
|
249
249
|
uvx pypi-attestations==0.0.30 verify pypi --repository https://github.com/wix/booking-agent \
|
|
250
|
-
"$dir/booking_agent_cli-0.
|
|
251
|
-
uv tool install --force "$dir/booking_agent_cli-0.
|
|
250
|
+
"$dir/booking_agent_cli-0.11.0-py3-none-any.whl"
|
|
251
|
+
uv tool install --force "$dir/booking_agent_cli-0.11.0-py3-none-any.whl"
|
|
252
252
|
|
|
253
253
|
booking-agent --help
|
|
254
254
|
```
|
|
255
255
|
|
|
256
256
|
Install only a wheel whose verify step passed. If `uvx` is not
|
|
257
|
-
available, install the same pinned release with `uv tool install booking-agent-cli==0.
|
|
258
|
-
`pipx install booking-agent-cli==0.
|
|
257
|
+
available, install the same pinned release with `uv tool install booking-agent-cli==0.11.0` or
|
|
258
|
+
`pipx install booking-agent-cli==0.11.0`; the CLI checks its own files against the signed release
|
|
259
259
|
on the first `booking-agent flow init` and refuses to book or pay if they do not match.
|
|
260
260
|
|
|
261
261
|
Harnesses that read this skill's `install` block do this for you. Do not go on
|
|
@@ -468,7 +468,7 @@ confirmation email or on the business's page (`booking_url`). Do not invent a lo
|
|
|
468
468
|
**Step 1b — Create a new session:**
|
|
469
469
|
|
|
470
470
|
```bash
|
|
471
|
-
booking-agent flow init --user-request "<user's exact request>" --skill-version 0.
|
|
471
|
+
booking-agent flow init --user-request "<user's exact request>" --skill-version 0.58.0 \
|
|
472
472
|
--skill-path "<absolute path of the SKILL.md you loaded>"
|
|
473
473
|
```
|
|
474
474
|
|
|
@@ -602,24 +602,24 @@ booking-agent flow calendar ask
|
|
|
602
602
|
|
|
603
603
|
Follow `next_command` from the JSON. **Do not ask the user calendar options yourself.**
|
|
604
604
|
|
|
605
|
-
|
|
605
|
+
**Pick the calendar route from what you observe at runtime**, before asking the user anything:
|
|
606
606
|
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
the user anything:
|
|
610
|
-
|
|
611
|
-
- **`--route connector`**: your platform can connect Google Calendar on the user's behalf and
|
|
612
|
-
hands the access token to the commands you run in an environment variable. Pass that
|
|
607
|
+
- **`--route connector`**: your platform connects Google Calendar for the user and hands the
|
|
608
|
+
access token to the commands you run in an environment variable. Pass that
|
|
613
609
|
variable's **name** with `--token-env <NAME>`. Never pass, print, or store the token itself,
|
|
614
610
|
and never copy it into an env file. Look up the name each conversation; do not assume it.
|
|
615
611
|
- **`--route local-oauth`**: `data.local_oauth_configured` is true and you can relay a sign-in
|
|
616
612
|
link to the user.
|
|
613
|
+
- **`--route delegated`** (events only; busy times are never checked): your platform writes
|
|
614
|
+
calendar events itself. Each write returns `awaiting_user: calendar_delegated_write`: post
|
|
615
|
+
`user_message`, do it as the `prompt` says, then run `next_command` with only what it returned. On `calendar_delegated_events_only`,
|
|
616
|
+
`calendar_delegated_time_mismatch`, `calendar_delegated_report_incomplete`, or
|
|
617
|
+
`calendar_delegated_request_unknown`, run `next_command`.
|
|
617
618
|
- **Neither** (a listed but unconnected connector is a route): run
|
|
618
619
|
`booking-agent flow calendar skip --session-only --no-route` without asking, then continue.
|
|
619
620
|
|
|
620
|
-
The CLI
|
|
621
|
-
|
|
622
|
-
and `--route connector` without a valid `--token-env` fails with `calendar_token_env_required`.
|
|
621
|
+
The CLI saves the route and variable name for later bookings and never guesses one: `calendar
|
|
622
|
+
connect` without `--route` fails with `calendar_route_required`, and `--route connector` without a valid `--token-env` fails with `calendar_token_env_required`.
|
|
623
623
|
|
|
624
624
|
`calendar ask` outcomes (each carries its own `prompt`; ask only what it says):
|
|
625
625
|
|
|
@@ -998,12 +998,8 @@ Nothing to run; Step 7's command already added the calendar event.
|
|
|
998
998
|
- **Never** run `sleep` or a fixed wait alongside a `booking-agent` command; wait for the command to
|
|
999
999
|
exit.
|
|
1000
1000
|
- **Never** skip the calendar gate.
|
|
1001
|
-
- **Never** guess a calendar route or token variable name,
|
|
1002
|
-
|
|
1003
|
-
connector).
|
|
1004
|
-
- Selecting a business via direct profile URL does not skip gates — the same gates apply as
|
|
1005
|
-
for registry discovery.
|
|
1006
|
-
|
|
1001
|
+
- **Never** guess a calendar route or token variable name, or pass a token value on the command
|
|
1002
|
+
line.
|
|
1007
1003
|
## Errors
|
|
1008
1004
|
|
|
1009
1005
|
Every error exits 1 with `data.error.code`, `data.error.message`, and a `next_command`; a code not
|
{booking_agent_cli-0.10.2 → booking_agent_cli-0.11.0}/src/booking_agent_cli/calendar_connection.py
RENAMED
|
@@ -22,7 +22,9 @@ _CALENDAR_SESSION_ID = "cli"
|
|
|
22
22
|
|
|
23
23
|
ROUTE_CONNECTOR = "connector"
|
|
24
24
|
ROUTE_LOCAL_OAUTH = "local-oauth"
|
|
25
|
-
|
|
25
|
+
# The agent's platform writes the event itself and reports the event id back; no token.
|
|
26
|
+
ROUTE_DELEGATED = "delegated"
|
|
27
|
+
CALENDAR_ROUTES = (ROUTE_CONNECTOR, ROUTE_LOCAL_OAUTH, ROUTE_DELEGATED)
|
|
26
28
|
|
|
27
29
|
TOKEN_SOURCE_ENV = "env"
|
|
28
30
|
TOKEN_SOURCE_CACHE = "cache"
|
|
@@ -42,17 +44,27 @@ def remembered_route() -> Tuple[Optional[str], Optional[str]]:
|
|
|
42
44
|
return store.last_calendar_route, store.last_calendar_token_env
|
|
43
45
|
|
|
44
46
|
|
|
45
|
-
def remember_route(
|
|
46
|
-
|
|
47
|
+
def remember_route(
|
|
48
|
+
route: str, token_env: Optional[str], session=None, *, delegated_freebusy: bool = False,
|
|
49
|
+
) -> None:
|
|
50
|
+
"""Record the route (and variable name, never the value) for later commands.
|
|
51
|
+
|
|
52
|
+
``delegated_freebusy`` only means anything on the delegated route: the platform
|
|
53
|
+
can read Google Calendar busy times itself, even though it cannot hand the CLI
|
|
54
|
+
a token. It is ignored, and stored as ``False``, for every other route.
|
|
55
|
+
"""
|
|
47
56
|
from .session import load_store, save_session, save_store
|
|
48
57
|
|
|
58
|
+
freebusy = delegated_freebusy if route == ROUTE_DELEGATED else False
|
|
49
59
|
if session is not None:
|
|
50
60
|
session.calendar_route = route
|
|
51
61
|
session.calendar_token_env = token_env
|
|
62
|
+
session.calendar_delegated_freebusy = freebusy
|
|
52
63
|
save_session(session)
|
|
53
64
|
store = load_store()
|
|
54
65
|
store.last_calendar_route = route
|
|
55
66
|
store.last_calendar_token_env = token_env
|
|
67
|
+
store.last_calendar_delegated_freebusy = freebusy
|
|
56
68
|
save_store(store)
|
|
57
69
|
|
|
58
70
|
|