用途:Duffel 用于面向用户的航班搜索、比价、预订与已订航班票价监控。用户需要搜索或预订航班时,应先阅读 /opt/hatch/skills/booking/SKILL.md、references/flights.md 与 references/presentation.md,这些文件定义发现、隐私、展示与承诺规则;本工具说明的是 Duffel CLI 契约。
主要能力:公开可用命令包括 search、seat-options、validate-booking、book、booking-status、cancellation-quote、cancel-booking。搜索支持出发地、目的地、出发与返程日期、多段行程、舱位、乘客组合、排序与结果条数等参数。搜索示例:duffel search --origin SFO --destination LAX --departure-date 2026-09-30 --cabin business --sort duration --limit 300。比价搜索建议使用 --limit 300;若返回更低的受支持上限,应使用完整结果,不因凑数重试。展示时仅呈现 3–6 个最有用的不同报价,并按完整行程签名分组,避免相同航班的不同票价品牌挤占候选。
预订流程:先整体搜索完整行程与精确乘客组合,通过 flights.md 展示候选清单;在规划模式交接时应将选定行程交回,不继续进入选座、校验或结账,直到进入可预订状态。随后可选展示 seat-options 并收集可订座位,收集必需的乘客信息与常旅客账户,由 flights.md 选择原生路径或航司网站路径。原生路径需运行 validate-booking 直到 ready_to_book: true,选择返回的 Stripe Link 支付方式,并用同一报价、预订文档与座位调用一次 book。成功后报告每个承运人确认编号/PNR 与客票状态,不添加 Duffel 名称。不得跳过校验,也不得在预订前静默更改报价、航线、乘客组合、票价或座位。
票价监控:当用户直接要求持续监控已订航班,或运行时交接了已校验的自动预订来源时使用。需收集带日期的精确行程、乘客组合、舱位或票价族、包含行李、经停模式、实付总价、币种以及已知的取消、变更或改签费用。将最小可读票价状态存于 ~/workspace/goals/<goal-slug>/hidden_files/travel/flight.json;先列出规范所有者的定时任务,复用等价任务,否则新建一个,标识为 flight-price-<goal-slug>,按日调度,写出自包含的 cron 内容。每次运行只执行一次 Duffel 搜索,使用 --limit 30;仅保留与已订航班号、机场、乘客数、舱位或票价族、行李、经停及退改限制匹配的结果,且只有计价范围完全一致才可比较。不得用浏览器或网络搜索重新定价,失败则等下次调度。
限制:仅使用上述公开命令,不得编造标识符、调用未公开端点,也不得向用户暴露 off_、ord_、ore_ 等内部 id。不得展示 Duffel 命令。除非当前结账流程接受,否则不要在聊天中保留敏感值;绝不索要支付卡数据或账户凭据。搜索须直接输出到独立的临时 JSON 文件,不要经 head 或解析器管道;若先前搜索被截断、压缩或覆盖,应重新搜索到新文件并验证完整响应。乘客定价在搜索时固定:--adults 为成人数,2–17 岁每名有座旅客需重复 --child-age,--lap-infants 为两岁以下无座婴儿,每名婴儿须由不同成人陪同;该集成无法可靠为两岁以下婴儿预订独立座位,此类情况应引导至航司。机场须用精确三字 IATA 码,不使用 NYC 等都市码;结果硬过滤且不含邻近机场库存。零结果仅表示扫描的 Duffel 库存中无匹配。其他未提供的信息暂未提供。