Repository navigation
Conversation
…; warn on soft radius and started events; reject null quantity
8a2d46b to
7ba0925
Compare
…not a missing event
…ngs early in a session For the first two to three minutes of a browser session Vivid Seats answers its JSON search and listings requests, the event page's own included, with a generic 404. search_events now reads the site's server-rendered search page for a text search when that happens (a performer match redirects to the performer page, which takes the date range) and names any filter the page did not apply. get_ticket_offers repeats its read for up to 40 seconds before reporting the 404 and says to call again.
…ew is for any quantity In sessions where Vivid Seats never serves listings, a 40 second wait per call cost agents minutes. The read now waits 20 seconds, and the error says the event page's preview rows and 'from' price are not filtered by quantity.
|
Pushed c03b671 and 2c7201c. For the first two to three minutes of a browser session, Vivid Seats answers its JSON search and listings requests with a generic 404. The event page's own requests get the same 404 and its listings panel shows "Sorry, there was an error". Some sessions never get listings.
Bench (5 pairs). Correct counts are shape-only. The real cheapest all-in price for 2 tickets at that time was $184:
|
…dy instead of an error Luna gave up after two 20 second calls, about a minute into the session, while listings usually load after two to three minutes. The read now waits up to 45 seconds per call, under the 60 second invocation limit, and returns status not_ready with the time waited, so the caller sees a state to retry rather than a failure. A wait canceled by the caller now reports canceled, which the output schema allows.
|
Pushed d83e223: Bench (5 pairs). The real cheapest all-in price for 2 tickets was $186 during this run:
|
… return unfiltered fallback results get_ticket_offers checks the event page on the listings proxy's generic 404: an unknown production_id redirects to /404 and is not_found at once instead of waiting 45 seconds and reporting not_ready. prepare_ticket_selection reports that 404 as listings not served yet, pointing at get_ticket_offers, rather than a missing listing. search_events returns site_error instead of search-page results that drop a requested date, category, performer, venue or price filter. prepare_ticket_selection goes back to draft; the registry notes describe each tool instead of a shared changelog.
…on fallback, and report a canceled listings read as canceled
…nd stop a canceled listings wait at once
…it, bound each request, and say when to stop retrying not_ready
…false, and honor cancellation in search_events The site's search page holds the same events, order and total as the JSON search by date without the parking exclusion, so page 2 of the JSON search with parking excluded skipped events.
…e_ticket_selection without following it
…ge instead of telling the agent to stop
…ic record code get_event and get_venue fetched with redirect: error, so the /404 redirect of an unknown event or venue surfaced as site_error. They now share lib/vividseats-records.js with prepare_ticket_selection, which already read redirects manually. get_ticket_offers' not_ready suggests a 60-second retry instead of 0, and it parses the all-in price the way prepare_ticket_selection does. The four changed tools are draft until fresh independent QA.
Summary
Adds five public page tools for the Vivid Seats marketplace:
search_events: bounded event search by text, place, date, venue, performer, category and index-price ceiling.get_ticket_offers: quantity-eligible ticket listings, cheapest all-in USD prices first, price filters and zone/section grouping.get_event: exact public event details, stated local date/time, lineup, seat restrictions and venue address.get_venue: exact venue address, coordinates, time zone and catalog capacity.prepare_ticket_selection: re-read an exact event/listing/quantity, reject changed prices or session price groups, and return a quote and ordinary event-page handoff. Never select on the site, open checkout, reserve inventory or pay.All are self-contained
kind: pagetools, restricted towww.vividseats.com, using only same-origin public GET reads. No navigation, account access, cart/checkout request, automatic write or fake confirmation framework. Preparation rejects extra inputs such asconfirmed=true. Included fee components and VAT are event-specific; estimated total is not a final checkout amount. Seat numbers are not available in the listing feed.Early-session behavior
For the first few minutes of a browser session, Vivid Seats' API proxy answers every search and listings request with a generic 404, the same answer it gives for an unknown event.
get_ticket_offerschecks the server-rendered event page once: an unknownproduction_idredirects to/404and isnot_foundat once. A real event's listings are read again for up to 45 seconds, counting the requests' own time and bounding each request at 8 seconds so the call stays under the 60-second invocation limit, thennot_ready, which says to stop after three in a row.prepare_ticket_selectionreports that 404 as listings not served yet, pointing atget_ticket_offers, not as a missing listing. An event page that redirects, as an unknown event does to/404, isnot_found; the redirect is not followed.search_eventsfalls back to the site's own search or performer page for a first-page, date-sorted text search without a place. It returnssite_errorinstead of results when that page cannot apply a requested date, category, performer, venue or price filter; only the default parking exclusion is reported as a warning. When that page holds fewer events thanpage_size(a performer page holds 25), its count becomes the response'spage_size, and the warning names the page 2 call that continues it: the same text search withexclude_parking: falseafter the search page (that page is the JSON search by date without the parking exclusion), orperformer_idwithout the text after a performer page, since a performer page lists that performer's events rather than the text search's.Safety / limitations
Checkout transitions may hold inventory. The runtime does not enforce a trusted exact-action approval path, so hold, checkout, purchase, transfer and seller execution tools are deliberately absent. Restrictions and other site text are treated as data, never instructions. The search index can lag inventory; the radius is approximate and the result window is capped at 1000.
Status and evidence
search_events:verified. Independent live QA on 2026-10-26 on the current source.get_event,get_venue,get_ticket_offers,prepare_ticket_selection:draft. Their source changed after independent QA (see Review fixes) and needs fresh independent QA.get_ticket_offersreturnednot_foundfor an unknown id in under a second andnot_readyafter 45 seconds for a real event early in the session. Early in a session,search_eventsfor 'Hamilton' atpage_size50 returned the performer page's 25 events withpage_size25 and 32 pages (before the fix it claimedpage_size50 and 16 pages). A canceledget_ticket_offersread is nowcanceled, notsite_error, and stops waiting at once.get_ticket_offersfilters and sorts the listings itself; the event page does the same, filtering the listings response it already holds in the browser (itsfilterListings) and sorting by price by default.not_readycame back after 42 seconds. A redirected unknown event returnednot_foundfromprepare_ticket_selection, and search, offers and preparation succeeded end to end on a real event.node --test "tests/*.test.mjs"pass.Only domain files, the two site-specific test files and this namespace's sorted registry entries are changed. Do not auto-merge.
Review fixes
redirect: "error", so the/404redirect of an unknown event or venue surfaced assite_error; it is nownot_found(verified live: aredirect: "manual"fetch of an unknown event returnsopaqueredirect). The three tools inlinelib/vividseats-records.jsinstead of copying it.not_readysuggestsretry_after_seconds: 60instead of0. Live check on 2026-10-26: a fresh Kernel browser got the generic 404 at first and 200 with 810 listings about 70 seconds later.