/** * Catalog agent tools on the framework tool contract. * * Thin wrappers over deployment-injected catalog search/read services. The * catalog package owns the tool contract and audience checks; operator wiring * supplies the indexer and resolved-entity runtime. */ import type { IndexerSlice, SearchFilter, SearchRequest, SearchResults } from "@voyant-travel/catalog-contracts/indexer/contract"; import { type ToolContext, type Visibility } from "@voyant-travel/tools"; import { z } from "zod"; declare const catalogSearchArgs: z.ZodObject<{ vertical: z.ZodString; query: z.ZodOptional; mode: z.ZodDefault>; sort: z.ZodOptional>; filters: z.ZodOptional>>>; facets: z.ZodOptional; }, z.core.$strip>>>; pagination: z.ZodOptional; cursor: z.ZodOptional; }, z.core.$strip>>; locale: z.ZodOptional; market: z.ZodOptional; audience: z.ZodOptional>; alpha: z.ZodOptional; distance_threshold: z.ZodOptional; query_embedding: z.ZodOptional>; }, z.core.$strip>; declare const getCatalogEntryArgs: z.ZodObject<{ vertical: z.ZodString; id: z.ZodString; locale: z.ZodOptional; market: z.ZodOptional; audience: z.ZodOptional>; }, z.core.$strip>; export type CatalogSearchArgs = z.infer; export type GetCatalogEntryArgs = z.infer; export interface CatalogSearchServiceInput { slice: IndexerSlice; request: SearchRequest; } export interface CatalogEntryResult { vertical: string; id: string; fields: Record; provenance?: Record; } export interface CatalogEntryServiceInput { vertical: string; id: string; scope: { locale: string; audience: Visibility; market: string; actor: Visibility; }; } /** The catalog read surface a deployment binds into the tool context. */ export interface CatalogToolServices { search(input: CatalogSearchServiceInput): Promise; getEntry(input: CatalogEntryServiceInput): Promise; } /** Tool context with the catalog service injected. */ export type CatalogToolContext = ToolContext & { catalog?: CatalogToolServices; }; export declare const searchCatalogTool: import("@voyant-travel/tools").ToolDefinition<{ vertical: string; mode: "keyword" | "semantic" | "hybrid"; query?: string | undefined; sort?: "relevance" | "price-asc" | "price-desc" | "departure-asc" | "newest" | undefined; filters?: SearchFilter[] | undefined; facets?: { field: string; limit?: number | undefined; }[] | undefined; pagination?: { limit?: number | undefined; cursor?: string | undefined; } | undefined; locale?: string | undefined; market?: string | undefined; audience?: "staff" | "customer" | "partner" | "supplier" | undefined; alpha?: number | undefined; distance_threshold?: number | undefined; query_embedding?: number[] | undefined; }, SearchResults, CatalogToolContext>; export declare const getCatalogEntryTool: import("@voyant-travel/tools").ToolDefinition<{ vertical: string; id: string; locale?: string | undefined; market?: string | undefined; audience?: "staff" | "customer" | "partner" | "supplier" | undefined; }, { entry: CatalogEntryResult | null; }, CatalogToolContext>; /** All catalog agent tools, ready to register on a `ToolRegistry`. */ export declare const quoteCatalogEntityTool: import("@voyant-travel/tools").ToolDefinition<{ entityModule: string; entityId: string; sourceKind?: string | undefined; sourceProvider?: string | undefined; sourceConnectionId?: string | undefined; sourceRef?: string | undefined; scope?: { locale?: string | undefined; audience?: "staff" | "customer" | "partner" | "supplier" | undefined; market?: string | undefined; currency?: string | undefined; } | undefined; parameters?: Record | undefined; draft?: Record | undefined; ttlMs?: number | undefined; }, { quoteId: string; quotedAt: string; expiresAt: string; available: boolean; invalidReason?: string | undefined; shape?: { showsConfigure: boolean; showsBilling: boolean; showsTravelers: boolean; showsAccommodation: boolean; showsAddons: boolean; showsPayment: boolean; showsReview: true; paxBands: { code: string; label: string; minCount: number; maxCount: number; minAge?: number | undefined; maxAge?: number | undefined; }[]; paxBandsAllowedTotal: { min: number; max: number; }; travelerFields: { key: string; label: string; type: string; required: boolean; options?: { value: string; label: string; }[] | undefined; appliesToBands?: string[] | undefined; }[]; bookingFields: { key: string; label: string; type: string; required: boolean; group: "billing" | "company" | "preferences"; }[]; paymentIntents: ("hold" | "card" | "bank_transfer" | "ticket_on_credit" | "inquiry")[]; configureSubSteps?: ({ kind: "departure"; required: true; } | { kind: "product-option"; options: { id: string; name: string; code?: string | null | undefined; description?: string | null | undefined; isDefault?: boolean | undefined; units?: { id: string; name: string; description?: string | null | undefined; unitType?: string | null | undefined; minQuantity?: number | null | undefined; maxQuantity?: number | null | undefined; }[] | undefined; }[]; } | { kind: "option-units"; } | { kind: "cabin-category"; categories: { id: string; name: string; code?: string | undefined; type?: string | undefined; capacityMin?: number | undefined; capacityMax?: number | undefined; description?: string | undefined; }[]; } | { kind: "cabin-number"; perCategory: Record; } | { kind: "date-range"; minNights: number; maxNights: number; } | { kind: "occupancy"; bands: { code: string; label: string; minCount: number; maxCount: number; minAge?: number | undefined; maxAge?: number | undefined; }[]; } | { kind: "air-arrangement"; required?: boolean | undefined; })[] | undefined; paxBandDependencies?: { dependentCode: string; masterCode: string; type: "requires" | "limits_per_master" | "limits_sum" | "excludes"; maxPerMaster?: number | undefined; maxDependentSum?: number | undefined; }[] | undefined; accommodation?: { sharedRoomAllowed: boolean; roomOptions?: { id: string; name: string; description?: string | null | undefined; capacity?: number | null | undefined; baseRateHint?: number | null | undefined; ratePlans?: { id: string; name: string; description?: string | null | undefined; chargeFrequency?: "per_night" | "per_stay" | undefined; cancellationPolicy?: string | null | undefined; inclusions?: string[] | undefined; currency?: string | undefined; }[] | undefined; }[] | undefined; subSteps?: ({ kind: "rooms"; options: { id: string; name: string; description?: string | null | undefined; capacity?: number | null | undefined; baseRateHint?: number | null | undefined; ratePlans?: { id: string; name: string; description?: string | null | undefined; chargeFrequency?: "per_night" | "per_stay" | undefined; cancellationPolicy?: string | null | undefined; inclusions?: string[] | undefined; currency?: string | undefined; }[] | undefined; }[]; sharedRoomAllowed: boolean; } | { kind: "extensions"; options: { id: string; name: string; side: "post" | "pre"; city?: string | null | undefined; nights?: number | null | undefined; pricePerPersonHint?: number | null | undefined; }[]; allowsPre: boolean; allowsPost: boolean; })[] | undefined; } | undefined; addons?: { catalog?: { id: string; name: string; kind: "extras" | "excursions" | "insurance"; description?: string | null | undefined; groupKey?: string | null | undefined; pricingMode?: string | null | undefined; unitAmountCents?: number | null | undefined; currency?: string | null | undefined; pricedPerPerson?: boolean | null | undefined; selectionType?: "optional" | "required" | "unavailable" | "default_selected" | null | undefined; minQuantity?: number | null | undefined; maxQuantity?: number | null | undefined; defaultQuantity?: number | null | undefined; }[] | undefined; groups?: { kind: "extras" | "excursions" | "insurance"; label: string; perGuestSelection: boolean; items: { id: string; name: string; kind: "extras" | "excursions" | "insurance"; description?: string | null | undefined; groupKey?: string | null | undefined; pricingMode?: string | null | undefined; unitAmountCents?: number | null | undefined; currency?: string | null | undefined; pricedPerPerson?: boolean | null | undefined; selectionType?: "optional" | "required" | "unavailable" | "default_selected" | null | undefined; minQuantity?: number | null | undefined; maxQuantity?: number | null | undefined; defaultQuantity?: number | null | undefined; }[]; groupBy?: "port" | "day" | undefined; }[] | undefined; } | undefined; } | undefined; pricing?: { currency: string; lines: { kind: "accommodation" | "base" | "addon" | "supplement" | "discount" | "fee"; label: string; unitAmount: number; totalAmount: number; quantity?: number | undefined; taxIncluded?: boolean | undefined; pricingBasis?: "per_person" | "per_unit" | "per_booking" | undefined; componentId?: string | undefined; authority?: "booking_quote" | "accepted_proposal_manual" | undefined; }[]; taxes: { code: string; label: string; rate: number; amount: number; base: number; includedInPrice?: boolean | undefined; scope?: "included" | "excluded" | "withheld" | undefined; componentId?: string | undefined; }[]; subtotal: number; taxTotal: number; total: number; policyEvidence?: { cancellation?: unknown; bookingTerms?: unknown; } | undefined; componentPolicies?: { componentId: string; cancellation?: unknown; bookingTerms?: unknown; }[] | undefined; } | undefined; upstreamPayload?: Record | undefined; }, import("./booking-tools.js").CatalogBookingToolContext>; export declare const listCatalogOrdersTool: import("@voyant-travel/tools").ToolDefinition<{ limit: number; offset: number; bookingId?: string | undefined; entityModule?: string | undefined; sourceKinds?: string[] | undefined; }, { rows: { id: string; booking_id: string; entity_module: string; entity_id: string; source_kind: string; source_provider: string | null; source_connection_id: string | null; source_ref: string | null; frozen_payload: Record; overlay_state_at_capture: Record | null; pricing_base_amount: string | null; pricing_taxes: string | null; pricing_fees: string | null; pricing_surcharges: string | null; pricing_currency: string | null; pricing_breakdown: Record | null; pricing_applied_offers: Record[] | null; idempotency_key: string | null; captured_at: string; }[]; }, import("./booking-tools.js").CatalogBookingToolContext>; export declare const getCatalogOrderTool: import("@voyant-travel/tools").ToolDefinition<{ id: string; }, { id: string; booking_id: string; entity_module: string; entity_id: string; source_kind: string; source_provider: string | null; source_connection_id: string | null; source_ref: string | null; frozen_payload: Record; overlay_state_at_capture: Record | null; pricing_base_amount: string | null; pricing_taxes: string | null; pricing_fees: string | null; pricing_surcharges: string | null; pricing_currency: string | null; pricing_breakdown: Record | null; pricing_applied_offers: Record[] | null; idempotency_key: string | null; captured_at: string; } | null, import("./booking-tools.js").CatalogBookingToolContext>; export declare const catalogBookingTools: readonly [import("@voyant-travel/tools").ToolDefinition<{ entityModule: string; entityId: string; sourceKind?: string | undefined; sourceProvider?: string | undefined; sourceConnectionId?: string | undefined; sourceRef?: string | undefined; scope?: { locale?: string | undefined; audience?: "staff" | "customer" | "partner" | "supplier" | undefined; market?: string | undefined; currency?: string | undefined; } | undefined; parameters?: Record | undefined; draft?: Record | undefined; ttlMs?: number | undefined; }, { quoteId: string; quotedAt: string; expiresAt: string; available: boolean; invalidReason?: string | undefined; shape?: { showsConfigure: boolean; showsBilling: boolean; showsTravelers: boolean; showsAccommodation: boolean; showsAddons: boolean; showsPayment: boolean; showsReview: true; paxBands: { code: string; label: string; minCount: number; maxCount: number; minAge?: number | undefined; maxAge?: number | undefined; }[]; paxBandsAllowedTotal: { min: number; max: number; }; travelerFields: { key: string; label: string; type: string; required: boolean; options?: { value: string; label: string; }[] | undefined; appliesToBands?: string[] | undefined; }[]; bookingFields: { key: string; label: string; type: string; required: boolean; group: "billing" | "company" | "preferences"; }[]; paymentIntents: ("hold" | "card" | "bank_transfer" | "ticket_on_credit" | "inquiry")[]; configureSubSteps?: ({ kind: "departure"; required: true; } | { kind: "product-option"; options: { id: string; name: string; code?: string | null | undefined; description?: string | null | undefined; isDefault?: boolean | undefined; units?: { id: string; name: string; description?: string | null | undefined; unitType?: string | null | undefined; minQuantity?: number | null | undefined; maxQuantity?: number | null | undefined; }[] | undefined; }[]; } | { kind: "option-units"; } | { kind: "cabin-category"; categories: { id: string; name: string; code?: string | undefined; type?: string | undefined; capacityMin?: number | undefined; capacityMax?: number | undefined; description?: string | undefined; }[]; } | { kind: "cabin-number"; perCategory: Record; } | { kind: "date-range"; minNights: number; maxNights: number; } | { kind: "occupancy"; bands: { code: string; label: string; minCount: number; maxCount: number; minAge?: number | undefined; maxAge?: number | undefined; }[]; } | { kind: "air-arrangement"; required?: boolean | undefined; })[] | undefined; paxBandDependencies?: { dependentCode: string; masterCode: string; type: "requires" | "limits_per_master" | "limits_sum" | "excludes"; maxPerMaster?: number | undefined; maxDependentSum?: number | undefined; }[] | undefined; accommodation?: { sharedRoomAllowed: boolean; roomOptions?: { id: string; name: string; description?: string | null | undefined; capacity?: number | null | undefined; baseRateHint?: number | null | undefined; ratePlans?: { id: string; name: string; description?: string | null | undefined; chargeFrequency?: "per_night" | "per_stay" | undefined; cancellationPolicy?: string | null | undefined; inclusions?: string[] | undefined; currency?: string | undefined; }[] | undefined; }[] | undefined; subSteps?: ({ kind: "rooms"; options: { id: string; name: string; description?: string | null | undefined; capacity?: number | null | undefined; baseRateHint?: number | null | undefined; ratePlans?: { id: string; name: string; description?: string | null | undefined; chargeFrequency?: "per_night" | "per_stay" | undefined; cancellationPolicy?: string | null | undefined; inclusions?: string[] | undefined; currency?: string | undefined; }[] | undefined; }[]; sharedRoomAllowed: boolean; } | { kind: "extensions"; options: { id: string; name: string; side: "post" | "pre"; city?: string | null | undefined; nights?: number | null | undefined; pricePerPersonHint?: number | null | undefined; }[]; allowsPre: boolean; allowsPost: boolean; })[] | undefined; } | undefined; addons?: { catalog?: { id: string; name: string; kind: "extras" | "excursions" | "insurance"; description?: string | null | undefined; groupKey?: string | null | undefined; pricingMode?: string | null | undefined; unitAmountCents?: number | null | undefined; currency?: string | null | undefined; pricedPerPerson?: boolean | null | undefined; selectionType?: "optional" | "required" | "unavailable" | "default_selected" | null | undefined; minQuantity?: number | null | undefined; maxQuantity?: number | null | undefined; defaultQuantity?: number | null | undefined; }[] | undefined; groups?: { kind: "extras" | "excursions" | "insurance"; label: string; perGuestSelection: boolean; items: { id: string; name: string; kind: "extras" | "excursions" | "insurance"; description?: string | null | undefined; groupKey?: string | null | undefined; pricingMode?: string | null | undefined; unitAmountCents?: number | null | undefined; currency?: string | null | undefined; pricedPerPerson?: boolean | null | undefined; selectionType?: "optional" | "required" | "unavailable" | "default_selected" | null | undefined; minQuantity?: number | null | undefined; maxQuantity?: number | null | undefined; defaultQuantity?: number | null | undefined; }[]; groupBy?: "port" | "day" | undefined; }[] | undefined; } | undefined; } | undefined; pricing?: { currency: string; lines: { kind: "accommodation" | "base" | "addon" | "supplement" | "discount" | "fee"; label: string; unitAmount: number; totalAmount: number; quantity?: number | undefined; taxIncluded?: boolean | undefined; pricingBasis?: "per_person" | "per_unit" | "per_booking" | undefined; componentId?: string | undefined; authority?: "booking_quote" | "accepted_proposal_manual" | undefined; }[]; taxes: { code: string; label: string; rate: number; amount: number; base: number; includedInPrice?: boolean | undefined; scope?: "included" | "excluded" | "withheld" | undefined; componentId?: string | undefined; }[]; subtotal: number; taxTotal: number; total: number; policyEvidence?: { cancellation?: unknown; bookingTerms?: unknown; } | undefined; componentPolicies?: { componentId: string; cancellation?: unknown; bookingTerms?: unknown; }[] | undefined; } | undefined; upstreamPayload?: Record | undefined; }, import("./booking-tools.js").CatalogBookingToolContext>, import("@voyant-travel/tools").ToolDefinition<{ limit: number; offset: number; bookingId?: string | undefined; entityModule?: string | undefined; sourceKinds?: string[] | undefined; }, { rows: { id: string; booking_id: string; entity_module: string; entity_id: string; source_kind: string; source_provider: string | null; source_connection_id: string | null; source_ref: string | null; frozen_payload: Record; overlay_state_at_capture: Record | null; pricing_base_amount: string | null; pricing_taxes: string | null; pricing_fees: string | null; pricing_surcharges: string | null; pricing_currency: string | null; pricing_breakdown: Record | null; pricing_applied_offers: Record[] | null; idempotency_key: string | null; captured_at: string; }[]; }, import("./booking-tools.js").CatalogBookingToolContext>, import("@voyant-travel/tools").ToolDefinition<{ id: string; }, { id: string; booking_id: string; entity_module: string; entity_id: string; source_kind: string; source_provider: string | null; source_connection_id: string | null; source_ref: string | null; frozen_payload: Record; overlay_state_at_capture: Record | null; pricing_base_amount: string | null; pricing_taxes: string | null; pricing_fees: string | null; pricing_surcharges: string | null; pricing_currency: string | null; pricing_breakdown: Record | null; pricing_applied_offers: Record[] | null; idempotency_key: string | null; captured_at: string; } | null, import("./booking-tools.js").CatalogBookingToolContext>]; export declare const catalogTools: readonly [import("@voyant-travel/tools").ToolDefinition<{ vertical: string; mode: "keyword" | "semantic" | "hybrid"; query?: string | undefined; sort?: "relevance" | "price-asc" | "price-desc" | "departure-asc" | "newest" | undefined; filters?: SearchFilter[] | undefined; facets?: { field: string; limit?: number | undefined; }[] | undefined; pagination?: { limit?: number | undefined; cursor?: string | undefined; } | undefined; locale?: string | undefined; market?: string | undefined; audience?: "staff" | "customer" | "partner" | "supplier" | undefined; alpha?: number | undefined; distance_threshold?: number | undefined; query_embedding?: number[] | undefined; }, SearchResults, CatalogToolContext>, import("@voyant-travel/tools").ToolDefinition<{ vertical: string; id: string; locale?: string | undefined; market?: string | undefined; audience?: "staff" | "customer" | "partner" | "supplier" | undefined; }, { entry: CatalogEntryResult | null; }, CatalogToolContext>]; export {};