gradeNot graded
pingAction
Connectivity smoke test for this page's agent tool channel. Takes no required arguments (optionally pass a short echo string) and returns { ok, pong, echo, received_at_utc }.
View tool JSON
{
"name": "ping",
"kind": "act",
"impl": "imperative",
"description": "Connectivity smoke test for this page's agent tool channel. Takes no required arguments (optionally pass a short echo string) and returns { ok, pong, echo, received_at_utc }.",
"inputSchema": {
"type": "object",
"properties": {
"echo": {
"type": "string",
"description": "Optional text (max 200 chars) echoed back in the response."
}
},
"additionalProperties": false
}
}search_flightsAnswer
Search rebooking flights from Lima (LIM) after the cancellation. Required: destination — "MIA" (Miami) or "FLL" (Fort Lauderdale, ground-reachable). Optional filters, omit any to leave it unconstrained: arrive_before (ISO 8601 with UTC offset), max_price (USD), max_layover_hours. Returns cheapest flights first; empty results are valid — loosen a filter or try the other airport. Follow with hold_reservation(flight_id) to hold a result.
View tool JSON
{
"name": "search_flights",
"kind": "answer",
"impl": "imperative",
"description": "Search rebooking flights from Lima (LIM) after the cancellation. Required: destination — \"MIA\" (Miami) or \"FLL\" (Fort Lauderdale, ground-reachable). Optional filters, omit any to leave it unconstrained: arrive_before (ISO 8601 with UTC offset), max_price (USD), max_layover_hours. Returns cheapest flights first; empty results are valid — loosen a filter or try the other airport. Follow with hold_reservation(flight_id) to hold a result.",
"inputSchema": {
"type": "object",
"properties": {
"destination": {
"type": "string",
"enum": [
"MIA",
"FLL"
],
"description": "Destination airport code: MIA or FLL."
},
"arrive_before": {
"type": "string",
"description": "Arrive at or before this instant. ISO 8601 with UTC offset (Lima -05:00, Miami -04:00)."
},
"max_price": {
"type": "number",
"description": "Maximum total price in USD (> 0)."
},
"max_layover_hours": {
"type": "number",
"description": "Maximum total layover in hours (>= 0)."
}
},
"required": [
"destination"
],
"additionalProperties": false
}
}hold_reservationSensitive Action
Place a 15-minute hold on a flight found via search_flights, keeping the seat while the traveler decides. Input: { flight_id } (e.g. "FL-001"). Returns the hold’s expiry time. One active hold per flight: holding the same flight twice while the first hold is alive fails — either wait for it to expire or book with confirm_booking. Holds are simulated (no backend): they expire after 15 minutes wall-clock and do not survive a page reload.
View tool JSON
{
"name": "hold_reservation",
"kind": "transact",
"impl": "imperative",
"description": "Place a 15-minute hold on a flight found via search_flights, keeping the seat while the traveler decides. Input: { flight_id } (e.g. \"FL-001\"). Returns the hold’s expiry time. One active hold per flight: holding the same flight twice while the first hold is alive fails — either wait for it to expire or book with confirm_booking. Holds are simulated (no backend): they expire after 15 minutes wall-clock and do not survive a page reload.",
"inputSchema": {
"type": "object",
"properties": {
"flight_id": {
"type": "string",
"description": "Flight id from search_flights results, e.g. \"FL-011\"."
}
},
"required": [
"flight_id"
],
"additionalProperties": false
}
}update_constraintsAction
Change the traveler’s rebooking constraints and re-search immediately — returns new results, not just an acknowledgment. Provide any subset: max_price (USD), max_layover_hours, preferred_time (ISO 8601 with UTC offset; reorders results by departure closest to that time; null clears it back to cheapest-first). Unmentioned constraints persist; {} re-runs with the current set. Returns { ok, constraints (complete effective set), count, results }. The page’s constraints and results update live.
View tool JSON
{
"name": "update_constraints",
"kind": "act",
"impl": "imperative",
"description": "Change the traveler’s rebooking constraints and re-search immediately — returns new results, not just an acknowledgment. Provide any subset: max_price (USD), max_layover_hours, preferred_time (ISO 8601 with UTC offset; reorders results by departure closest to that time; null clears it back to cheapest-first). Unmentioned constraints persist; {} re-runs with the current set. Returns { ok, constraints (complete effective set), count, results }. The page’s constraints and results update live.",
"inputSchema": {
"type": "object",
"properties": {
"max_price": {
"type": "number",
"description": "New maximum total price in USD (> 0). Optional."
},
"max_layover_hours": {
"type": "number",
"description": "New maximum total layover in hours (>= 0). Optional."
},
"preferred_time": {
"type": "string",
"description": "Preferred departure instant, ISO 8601 with UTC offset (e.g. 2026-09-12T22:00:00-05:00). Reorders results by departure closeness."
}
},
"additionalProperties": false
}
}confirm_bookingSensitive Action
Book a flight that has an active hold from hold_reservation — this commits the rebooking and returns the final itinerary with a confirmation reference. Input: { flight_id }. No active hold → error with how to get one; expired hold → error saying when it lapsed. Calling again on an already-booked flight is safe: returns the same confirmation (idempotent). The page switches to the reservation-confirmed view.
View tool JSON
{
"name": "confirm_booking",
"kind": "transact",
"impl": "imperative",
"description": "Book a flight that has an active hold from hold_reservation — this commits the rebooking and returns the final itinerary with a confirmation reference. Input: { flight_id }. No active hold → error with how to get one; expired hold → error saying when it lapsed. Calling again on an already-booked flight is safe: returns the same confirmation (idempotent). The page switches to the reservation-confirmed view.",
"inputSchema": {
"type": "object",
"properties": {
"flight_id": {
"type": "string",
"description": "Flight id with an active hold, e.g. \"FL-003\"."
}
},
"required": [
"flight_id"
],
"additionalProperties": false
}
}search_hotelsAnswer
Search hotels for the recovery stay. Required: city ("Miami" or "Fort Lauderdale"). Optional: near_airport ("MIA"/"FLL") and check_in + check_out (ISO 8601 with offset, whole nights) to price the stay and skip sold-out hotels. Cheapest first; empty results are valid.
View tool JSON
{
"name": "search_hotels",
"kind": "answer",
"impl": "imperative",
"description": "Search hotels for the recovery stay. Required: city (\"Miami\" or \"Fort Lauderdale\"). Optional: near_airport (\"MIA\"/\"FLL\") and check_in + check_out (ISO 8601 with offset, whole nights) to price the stay and skip sold-out hotels. Cheapest first; empty results are valid.",
"inputSchema": {
"type": "object",
"properties": {
"city": {
"type": "string",
"enum": [
"Miami",
"Fort Lauderdale"
],
"description": "City: \"Miami\" or \"Fort Lauderdale\"."
},
"check_in": {
"type": "string",
"description": "Stay start. ISO 8601 with UTC offset (Miami -04:00). Provide together with check_out; stays are whole 24 h nights."
},
"check_out": {
"type": "string",
"description": "Stay end, after check_in by whole 24 h nights. ISO 8601 with UTC offset."
},
"near_airport": {
"type": "string",
"enum": [
"MIA",
"FLL"
],
"description": "Nearest airport: \"MIA\" or \"FLL\" — the same airports the flight tools serve; independent of city."
}
},
"required": [
"city"
],
"additionalProperties": false
}
}update_hotel_reservationSensitive Action
Shift the check-in of the traveler’s existing hotel reservation. Input: { reservation_id, new_check_in }. Check-out moves to keep the same nights; price unchanged. Must not precede the confirmed flight’s arrival. Re-sending the current date is safe (idempotent).
View tool JSON
{
"name": "update_hotel_reservation",
"kind": "transact",
"impl": "imperative",
"description": "Shift the check-in of the traveler’s existing hotel reservation. Input: { reservation_id, new_check_in }. Check-out moves to keep the same nights; price unchanged. Must not precede the confirmed flight’s arrival. Re-sending the current date is safe (idempotent).",
"inputSchema": {
"type": "object",
"properties": {
"reservation_id": {
"type": "string",
"description": "Reservation id, e.g. \"HTL-R001\"."
},
"new_check_in": {
"type": "string",
"description": "New stay start. ISO 8601 with UTC offset (Miami -04:00). Must not precede the confirmed flight’s arrival date."
}
},
"required": [
"reservation_id",
"new_check_in"
],
"additionalProperties": false
}
}book_ground_transportSensitive Action
Book the airport-to-hotel ground leg once a flight is confirmed. Input: { type, pickup_time }. type: "taxi", "shuttle" (shared, cheapest), or "rideshare". Pickup must be 15 min to 8 h after the flight lands; route and price derive from the arrival airport and hotel zone. Re-booking replaces. Simulated.
View tool JSON
{
"name": "book_ground_transport",
"kind": "transact",
"impl": "imperative",
"description": "Book the airport-to-hotel ground leg once a flight is confirmed. Input: { type, pickup_time }. type: \"taxi\", \"shuttle\" (shared, cheapest), or \"rideshare\". Pickup must be 15 min to 8 h after the flight lands; route and price derive from the arrival airport and hotel zone. Re-booking replaces. Simulated.",
"inputSchema": {
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"taxi",
"shuttle",
"rideshare"
],
"description": "Vehicle: \"taxi\", \"shuttle\" (shared, cheapest), or \"rideshare\"."
},
"pickup_time": {
"type": "string",
"description": "Pickup at the arrival airport. ISO 8601 with UTC offset. Must be 15 min to 8 h after the confirmed flight lands."
}
},
"required": [
"type",
"pickup_time"
],
"additionalProperties": false
}
}notify_contactSensitive Action
Compose a heads-up about the new arrival for someone meeting the traveler. Input: { contact, new_arrival_time }. contact: { name?, phone? | email?, relationship? } — phone (sms) or email required. SIMULATED: nothing is transmitted; the response shows what would have been sent.
View tool JSON
{
"name": "notify_contact",
"kind": "transact",
"impl": "imperative",
"description": "Compose a heads-up about the new arrival for someone meeting the traveler. Input: { contact, new_arrival_time }. contact: { name?, phone? | email?, relationship? } — phone (sms) or email required. SIMULATED: nothing is transmitted; the response shows what would have been sent.",
"inputSchema": {
"type": "object",
"properties": {
"contact": {
"type": "object",
"description": "Recipient: { name?, phone? | email?, relationship? } — provide a phone (sms) or an email.",
"properties": {
"name": {
"type": "string"
},
"phone": {
"type": "string"
},
"email": {
"type": "string"
},
"relationship": {
"type": "string"
}
},
"additionalProperties": false
},
"new_arrival_time": {
"type": "string",
"description": "The arrival time to announce. ISO 8601 with UTC offset."
}
},
"required": [
"contact",
"new_arrival_time"
],
"additionalProperties": false
}
}calculate_total_costAction
Running total across everything booked — flight, hotel, ground transport — checked against the budget update_constraints last set. Input: { items? } for a subset; omit for everything booked. Returns a per-item breakdown, the total, and budget fit.
View tool JSON
{
"name": "calculate_total_cost",
"kind": "act",
"impl": "imperative",
"description": "Running total across everything booked — flight, hotel, ground transport — checked against the budget update_constraints last set. Input: { items? } for a subset; omit for everything booked. Returns a per-item breakdown, the total, and budget fit.",
"inputSchema": {
"type": "object",
"properties": {
"items": {
"type": "array",
"items": {
"type": "string",
"enum": [
"flight",
"hotel",
"transport"
]
},
"description": "Subset to total: \"flight\", \"hotel\", \"transport\". Omit for all booked items."
}
},
"additionalProperties": false
}
}generate_itinerary_summaryAction
One consolidated receipt of the recovery: flight, hotel, transport, notifications, and the total vs budget — plus what is still missing and which tool books it. Stale legs are flagged. Safe any time: partial trips return status "partial", never an error. No parameters.
View tool JSON
{
"name": "generate_itinerary_summary",
"kind": "act",
"impl": "imperative",
"description": "One consolidated receipt of the recovery: flight, hotel, transport, notifications, and the total vs budget — plus what is still missing and which tool books it. Stale legs are flagged. Safe any time: partial trips return status \"partial\", never an error. No parameters.",
"inputSchema": {
"type": "object",
"properties": {},
"additionalProperties": false
}
}search_flights_semanticAnswer
Natural-language flight search over the same rebooking options as search_flights: describe what you want ("cheapest that lands early", "shortest layover", "red-eye is fine") and get matches ranked by semantic similarity via a live vector index. Falls back to errors-as-data if the index is unreachable.
View tool JSON
{
"name": "search_flights_semantic",
"kind": "answer",
"impl": "imperative",
"description": "Natural-language flight search over the same rebooking options as search_flights: describe what you want (\"cheapest that lands early\", \"shortest layover\", \"red-eye is fine\") and get matches ranked by semantic similarity via a live vector index. Falls back to errors-as-data if the index is unreachable.",
"inputSchema": {
"type": "object",
"properties": {
"query": {
"type": "string",
"description": "Free text (max 200 chars) describing the flight you want — price, timing, layovers, vibe. Not a structured filter."
}
},
"required": [
"query"
],
"additionalProperties": false
}
}