Repository navigation
Conversation
8a2d46b to
7ba0925
Compare
|
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:
|
|
Pushed d83e223: Bench (5 pairs). The real cheapest all-in price for 2 tickets was $186 during this run:
|
ad21db7 to
3f49947
Compare
3f49947 to
164fbd1
Compare
…ontrols get_ticket_offers filtered, sorted and grouped the listings response itself. Replace it with list_listings, which reads what the event page's listings panel shows, and set_ticket_quantity, set_listing_sort, set_listing_filters and show_more_listings, which press the page's own quantity prompt and menu, sort menu, zone, price, deal score and perks controls, Clear, and the panel's scroll-to-load once each and confirm what the page then shows.
Add open_event_listings, which opens the event page at the page's own ?quantity=N address and returns its listings panel, so an agent no longer navigates, lists the tools again and answers the 'How many tickets?' prompt as separate steps. Read the selected quantity from the page's quantity control, since the page restores a remembered quantity without putting it in its URL. search_events keeps a requested category on the search-page fallback when every event that page holds is in it.
…ings call Point the bot-protection recovery at open_event_listings, which reloads and reads the page in one call, and tell callers after it navigates that the new page's tools have new tool_refs.
Vivid Seats' bot protection refuses the listings panel's request until the browser has had user input. open_event_listings now moves the mouse through the browser's input pipeline before and after opening the page and, while the panel shows its error, moves it again, waits for the protection's cookie to settle, and reloads within its time budget, as a person does.
The page's zone buttons lost role="checkbox" and are rendered twice, so view.zones came back empty and set_listing_filters could press a zone twice, undoing it. Match them by test id alone and keep one per zone. Also correct open_event_listings' quantity description: without a quantity the page reuses one picked earlier in the session.
Summary
Public tools for the Vivid Seats marketplace. Listings now follow the event page itself, like the Google Flights tools (#131): a read-only tool reports what the page's listings panel shows, and separate tools press the page's own controls once each and confirm what the page then shows.
search_eventsget_eventget_venueopen_event_listings?quantity=Naddress (so no 'How many tickets?' prompt) and returns its listings panel in the same call; gets past the panel's bot-protection error the way a person does (mouse input, then a reload). cdp because it navigates and returns structured results from the destination (spec §2.1).list_listingsset_ticket_quantityset_listing_sortset_listing_filtersshow_more_listingsprepare_ticket_selectionget_ticket_offersis removed: it filtered, sorted and grouped the listings response itself, which the authoring guide's "keep parity with the website" rules rule out when the site offers those controls.Every listings result carries
available_actions(whether the page offers each action now, whether the tool is registered, and an input valid for this exact state) andnext_steps, as in #131.list_listingsreturns the page'sprice_group_idand the selected quantity, so its first row's action is a readyprepare_ticket_selectioninput.How the page works (observed live)
quantity,minPrice,maxPrice,dealScore,selectedGroups,sort, perk flags such assuperSeller=true), so the tools read state from the query and confirm each change by it plus a re-rendered panel. Clear also resets the quantity.data-listingid,data-priceand friends; the panel loads about 20 rows and 16 more per scroll to its end marker.tickets-response-error) without asking again.list_listingsreports that asnot_readywith the recovery (mouse input, then reload the page); actions refuse without pressing.CDP exception
set_listing_sortandset_listing_filtersarekind: "cdp"with their whole body run in the page throughjs(). Every sort, zone or Clear change makes the site's analytics navigate cross-origin child iframes (Facebook pixel, DoubleClick) while the page only updates its URL in place, and the page runtime then drops a page tool's result with "Cannot return tool results after a cross-origin navigation" although the change was made (same precedent asbluebottlecoffee.com/add_to_cart). Quantity changes and loading more rows fire no such frame, so those tools stay page tools.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
All ten tools are
verifiedas of 2026-10-29. The QA below was run by the same Hypeship conversation that wrote the listings tools; the PR owner accepted it as the tools' QA, and the registry notes say so.list_listingsreturnedwrong_pageon the home page,not_readyon the panel's error, and after input the prompt with 1,037 listings;set_ticket_quantity2 answered the prompt (713 listings, cheapest $178 with Fees Incl.) and a repeat wasunchanged;set_listing_sortdeal_score then lowest_price;set_listing_filterswith 400 Level, max $250, deal score 8+ and Super Seller (10 listings), then min $180 with zones, perks and deal score reset (94), an unknown zone refused before any press, and Clear;show_more_listingsloaded 16 more rows;prepare_ticket_selectionreturnedpreparedfrom the input inavailable_actions.search_eventssucceeded on its first call before any input (performer-page fallback); nonsense queryno_results, reversed datesinvalid_input. With dates, the site's own performer page also returned two Date TBD playoff games, markeddate_tbd.get_eventandget_venuematched the search; unknown idsnot_found.list_listingsandset_ticket_quantityreturnedwrong_pageon the home page without pressing anything.open_event_listings(quantity 2): the tab moved to?quantity=2, and the returned rows and "N listings" count matched the page; without a quantity the page reused 2.set_ticket_quantity2 to 4 to 2,set_listing_sortdeal score, highest price, section number and back to lowest price,set_listing_filters(zone + max price + deal score 7+, then min price + Super Seller, an unknown zone, Clear, Clear with another filter) andshow_more_listings: every changed view matched the page's own rows, count and URL; repeats wereunchangedwithout a press.unavailableand pressed nothing.prepare_ticket_selectionfrom the input inavailable_actionsreturnedpreparedat the row's price ($712 x 2 = $1,424, no reservation); a changed pricestale_selection, an unknown listinglisting_unavailable, an extraconfirmedfieldinvalid_input.role="checkbox"and are rendered twice:view.zonescame back empty, and one zone was pressed twice, undoing it while the tool reported it applied. Fixed in ccdd9b6; the simulated page now matches that markup, and the old selector fails its tests.set_listing_sortreturnednot_ready, andopen_event_listingsrecovered the view with the sort kept.vividseats-cheapest-pair, plain browsers, low thinking, 5 pairs per run, treatment pinned to the source named:open_event_listings): Haiku 5.5 median 13 turns, 1:58 → 1:04 vs control; GPT-6 Luna 8 turns, treatment 4/5 vs control 1/5. Transcripts showed the turns going to a firstsearch_eventsrefused for its category, opening the event page and re-listing tools, clicking the quantity prompt by hand, and reloading after the bot-protection error.open_event_listingsreturningnot_readyon the error): Haiku 5.5 median 7 turns, 0:47 → 0:35; GPT-6 Luna median 7 turns, 0:53 → 0:23, treatment 3/5 vs control 2/5, both misses stopping atnot_ready.open_event_listings.open_event_listingstook 4-17 s.open_event_listingsstraight from the home page all returned listings (median about 12 s, at most 31 s; most first loads succeeded after the input sent before navigating).get_ticket_offers(API, local filtering) the same intent took Haiku 5 and Luna 4 turns.tests/vividseats-listings.test.mjs) cover reading without changing the page, opening an event for a quantity (and an unknown event, the error panel and bad input), a remembered quantity, the prompt and menu paths, sort, every filter control, Clear, loading more rows, the bot-protection error, wrong pages, invalid input and available actions; seven mutants (bareclick()on Deal Score, an unclosed menu, reversed rows, no sort press, a wrong show-more offset, no unknown-zone refusal, an ignored error panel) each fail them.node --test "tests/*.test.mjs"(4,769) and the bench tests pass.Follow-up
bench/tasks/vividseats.com/domain.jsonlistsopen_event_listingsand the four action tools as page actions, so bench treatment gets them.Only vividseats.com domain files, its shared lib snippets, its tests, its bench domain settings and this namespace's sorted registry entries are changed. Do not auto-merge.