@bowmark/web 1.12.3 → 1.14.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -5,8 +5,8 @@
5
5
  // rather than imported. An `import` or `export` at the top level of this file would
6
6
  // turn it into a module and every declaration below would stop being global.
7
7
  //
8
- // Manifest version: 7ac4a9084853ee226f56e4964cb0bb95339c8375142eebd03526a4d6651ae380
9
- // 39 capabilities, 274 providers, 707 typed functions, 20 refused.
8
+ // Manifest version: faf4c09938555367990a9c8f7a153fdf8acc74126cd25dc3d424ccd9eb0d1077
9
+ // 42 capabilities, 326 providers, 823 typed functions, 20 refused.
10
10
  // 51,715 family members, sharing 2 interface(s) — declared once and pointed at, never repeated per member.
11
11
  //
12
12
  // REFUSED — these functions are real and callable, and their declared arguments
@@ -551,6 +551,45 @@ type CallOptions = {
551
551
  }
552
552
  }
553
553
 
554
+ declare namespace BowmarkCapability_entertainment_merch {
555
+ // ── Entertainment merch (licensed, multi-store) — the unit's own declarations, verbatim ──
556
+ type EntertainmentMerchOffer = {
557
+ store: "hottopic" | "boxlunch" // which retailer this offer is from
558
+ title: string // the product as the store lists it
559
+ price: number | null // USD; null if unpriced
560
+ url: string | null // product page for this SKU
561
+ image: string | null
562
+ color: string | null
563
+ size: string | null
564
+ availability: string | null // the store's own schema.org availability wording
565
+ }
566
+ type EntertainmentMerchSearchResult = {
567
+ results: EntertainmentMerchOffer[] // one row per SKU, across all stores
568
+ warnings: string[] // always present; names any store that did not answer
569
+ }
570
+
571
+ type CallOptions = {
572
+ timeoutMs?: number // per-provider budget in ms, default 30000, clamped to 1000-55000.
573
+ // A provider slower than this is DROPPED from the results and
574
+ // NAMED in warnings — never silently absent
575
+ }
576
+
577
+ /**
578
+ * Licensed pop-culture and entertainment merch — a franchise, character or show, searched
579
+ * across Hot Topic and BoxLunch in parallel and returned as one list of priced SKUs, so an
580
+ * agent can answer 'where can I buy merch for X' without knowing which licensed-merch retailer
581
+ * carries it.
582
+ */
583
+ interface Unit {
584
+ /**
585
+ * Searches Hot Topic and BoxLunch in parallel for a franchise/character/show and returns every
586
+ * matching SKU across both stores, each tagged with which store it's from. `warnings` names
587
+ * any store that did not answer.
588
+ */
589
+ search(args: { query: string }): Promise<EntertainmentMerchSearchResult>;
590
+ }
591
+ }
592
+
554
593
  declare namespace BowmarkCapability_flights {
555
594
  // ── Flights — the unit's own declarations, verbatim ──
556
595
  type FlightQuery = {
@@ -1631,6 +1670,52 @@ type ProductResult = {
1631
1670
  }
1632
1671
  }
1633
1672
 
1673
+ declare namespace BowmarkCapability_phone_price {
1674
+ // ── Phone price comparison (carriers) — the unit's own declarations, verbatim ──
1675
+ type PhonePriceOffer = {
1676
+ carrier: string // which carrier this offer is from
1677
+ listPriceUsd: number | null // full price of the device / matched storage variant
1678
+ monthlyPriceUsd: number | null // financed monthly payment
1679
+ financingTermMonths: number | null // months monthlyPriceUsd is amortised over
1680
+ tradeInCreditUsd: number | null // best credit for tradeInModel; always null on
1681
+ // a visible row (no per-device figure published)
1682
+ sourceUrl: string // the page this price was read from
1683
+ }
1684
+ type PhonePriceCompareResult = {
1685
+ offers: PhonePriceOffer[] // one row per carrier that answered, unsorted — read
1686
+ // listPriceUsd to rank
1687
+ warnings: string[] // always present; names a carrier that did not answer.
1688
+ // A carrier named here priced NOTHING — read this before
1689
+ // concluding it doesn't sell the phone
1690
+ }
1691
+
1692
+ type CallOptions = {
1693
+ timeoutMs?: number // per-provider budget in ms, default 30000, clamped to 1000-55000.
1694
+ // A provider slower than this is DROPPED from the results and
1695
+ // NAMED in warnings — never silently absent
1696
+ }
1697
+
1698
+ /**
1699
+ * What a phone actually costs right now, across carriers — T-Mobile's live device-page pricing
1700
+ * and financing plus every promotion's per-trade-in-device credit, and Visible's catalogue
1701
+ * price and Affirm financing for a matched storage variant, merged into one price-sorted list.
1702
+ * Built for a chip-cost price hike that repriced Android flagships across carriers at once, so
1703
+ * a shopper can compare instead of reading one carrier's page.
1704
+ */
1705
+ interface Unit {
1706
+ /**
1707
+ * Prices one phone across T-Mobile and Visible in parallel and returns a price-sorted list.
1708
+ * `model` is matched against Visible's catalogue and used to reconstruct T-Mobile's device
1709
+ * path (there is no cross-carrier search endpoint) — a model neither matcher can place drops
1710
+ * that carrier with a `warnings` entry naming why, never a silent wrong phone. `tradeInModel`
1711
+ * resolves T-Mobile's best matching promotion credit; Visible never returns a per-device
1712
+ * credit figure. `storageGb` picks Visible's matching variant (T-Mobile's pricing call carries
1713
+ * no storage variants).
1714
+ */
1715
+ compare(args: { model: string; storageGb?: number; tradeInModel?: string; tmobileDevicePath?: string }): Promise<PhonePriceCompareResult>;
1716
+ }
1717
+ }
1718
+
1634
1719
  declare namespace BowmarkCapability_phone_trade_in {
1635
1720
  // ── Phone trade-in value — the unit's own declarations, verbatim ──
1636
1721
  // The capability's own condition vocabulary — four tiers every buyback
@@ -1962,10 +2047,16 @@ interface BasketItemMatch {
1962
2047
  }
1963
2048
  interface RetailerBasket {
1964
2049
  total: { amount: number; currency: string } | null // sums matched only — a partial
1965
- // sum whenever incomplete is
1966
- // non-empty
2050
+ // sum whenever unpriced, unmatched
2051
+ // or incomplete is non-empty
1967
2052
  matched: BasketItemMatch[]
1968
- unavailable: string[] // this retailer ANSWERED and has no in-stock priced match
2053
+ unavailable: string[] // this retailer ANSWERED with no in-stock row at all —
2054
+ // a real stockout
2055
+ unmatched: string[] // this retailer answered with in-stock rows, none identifiable
2056
+ // as the thing asked for — NOT out of stock; ask more
2057
+ // specifically, or read their search page. Not in total
2058
+ unpriced: string[] // this retailer HAS it in stock and rendered no price — NOT
2059
+ // out of stock; go read the price on the page. Not in total
1969
2060
  incomplete: string[] // this retailer's search never answered — NOT out of stock,
1970
2061
  // nothing was learned; retry with fewer items or more time
1971
2062
  }
@@ -1982,19 +2073,24 @@ type CallOptions = {
1982
2073
  /**
1983
2074
  * Given a list of item queries (a school supply list), fans out to Target and Walmart search,
1984
2075
  * picks the cheapest in-stock match per item per retailer, and returns each retailer's basket
1985
- * total plus which items neither retailer has in stock right now.
2076
+ * total plus which items neither retailer has in stock right now — kept apart from the items a
2077
+ * retailer stocks but would not price, and from the searches that never answered.
1986
2078
  */
1987
2079
  interface Unit {
1988
2080
  /**
1989
- * Prices a multi-item shopping list at Target and Walmart, one basket total per retailer. An
1990
- * item the retailer answered about and does not stock is in `unavailable`; an item whose
1991
- * search never answered is in `incomplete` and is NOT a stockoutnothing was learned about
1992
- * it, and the retailer's total is then a partial sum. Every incomplete item is also named in
1993
- * `warnings`. Never throws on one retailer being unreachable that retailer's basket is
1994
- * dropped and named in `warnings` instead; throws only when BOTH retailers failed on every
1995
- * item. Walmart drives a real browser per item and every item is searched at once, so a long
1996
- * list is what costs time: price fewer items per call before reaching for a larger
1997
- * `timeoutMs`.
2081
+ * Prices a multi-item shopping list at Target and Walmart, one basket total per retailer. ONLY
2082
+ * `unavailable` is a stockout: the retailer answered and had nothing in stock at all. The
2083
+ * other three are not, and must never be reported as onean item the retailer HAS in stock
2084
+ * but rendered no price for is in `unpriced` (the price is on its product page, not the search
2085
+ * tile); an item it answered about with in-stock rows none of which could be identified as the
2086
+ * thing asked for is in `unmatched` (a limit of the matching, not of the shop — ask again in
2087
+ * the wording a listing would use); an item whose search never answered at all is in
2088
+ * `incomplete` (nothing was learned). Each of those three makes the retailer's total a partial
2089
+ * sum, and every one of those items is also named in `warnings`. Never throws on one retailer
2090
+ * being unreachable — that retailer's basket is dropped and named in `warnings` instead;
2091
+ * throws only when BOTH retailers failed on every item. Walmart drives a real browser per item
2092
+ * and every item is searched at once, so a long list is what costs time: price fewer items per
2093
+ * call before reaching for a larger `timeoutMs`.
1998
2094
  */
1999
2095
  priceList(args: { items: string[] }): Promise<SchoolShoppingBasket>;
2000
2096
  }
@@ -2424,6 +2520,35 @@ interface ForecastResult {
2424
2520
  }
2425
2521
  }
2426
2522
 
2523
+ declare namespace BowmarkCapability_wireless {
2524
+ // ── wireless plan all-in price — the unit's own declarations, verbatim ──
2525
+ interface CarrierAllInPrice {
2526
+ carrier: string;
2527
+ advertisedPricePerLineUsd: number;
2528
+ allInMonthlyTotalUsd: number;
2529
+ }
2530
+ interface WirelessAllInPriceResult {
2531
+ carriers: CarrierAllInPrice[];
2532
+ warnings: string[];
2533
+ }
2534
+
2535
+ /**
2536
+ * Fans a plan/line configuration out across carrier plan-builder flows and returns each
2537
+ * carrier's advertised price next to its real all-in monthly total (activation fee, per-line
2538
+ * surcharges). Not yet implemented — verizon.getPlanTotal and att.getPlanTotal are both
2539
+ * provider-side stubs; see packages/providers/{verizon,att}/manifest.json.
2540
+ */
2541
+ interface Unit {
2542
+ /**
2543
+ * For a given line count, fans out across every carrier this capability declares and returns
2544
+ * each one's advertised per-line price next to its real all-in monthly total. Not yet
2545
+ * implemented — blocked on verizon.getPlanTotal and att.getPlanTotal, both provider-side stubs
2546
+ * today.
2547
+ */
2548
+ compareAllInPrice(arg: { lineCount: number; addOns?: string[] }): Promise<WirelessAllInPriceResult>;
2549
+ }
2550
+ }
2551
+
2427
2552
  declare namespace BowmarkCapability_yoga_outfit_shopping {
2428
2553
  // ── Coordinated yoga outfit shopping — the unit's own declarations, verbatim ──
2429
2554
  interface YogaOutfitItem {
@@ -2979,6 +3104,89 @@ interface abercrombieStockQuery {
2979
3104
  }
2980
3105
  }
2981
3106
 
3107
+ declare namespace BowmarkProvider_achosahw {
3108
+ // ── Achosa Home Warranty — the unit's own declarations, verbatim ──
3109
+ // Achosa's OWN shapes — not a capability contract.
3110
+
3111
+ interface AchosahwStateEntry { name: string; categoryId: number }
3112
+ interface AchosahwStateList { states: AchosahwStateEntry[] }
3113
+
3114
+ interface AchosahwQuote {
3115
+ state: string;
3116
+ coverageLevel: string; // "Core" | "Prime" | "Prime Plus" | "Pro"
3117
+ term: string; // "Monthly" | "Yearly"
3118
+ propertyType: string; // "Single Family Home" | "Townhome/Condo" | "Duplex" | "Triplex" | "Fourplex"
3119
+ planName: string | null; // the site's own SKU display name for this combination
3120
+ price: number; // 0 when isAvailable is false
3121
+ isAvailable: boolean; // false = this state does not sell this exact combination
3122
+ configureUrl: string; // the live configurator page, pre-scoped to this state
3123
+ }
3124
+
3125
+ interface AchosahwQuoteArgs {
3126
+ state: string; // required, e.g. "Texas" — see listStates()
3127
+ coverageLevel?: string; // default "Core"
3128
+ term?: string; // default "Monthly"
3129
+ propertyType?: string; // default "Single Family Home"
3130
+ }
3131
+
3132
+ /**
3133
+ * Achosa Home Warranty plan configurator — real per-state home-warranty pricing across
3134
+ * coverage tier, billing term and property type, read from the site's own live pricing
3135
+ * endpoint rather than a rate card.
3136
+ */
3137
+ interface Unit {
3138
+ /**
3139
+ * Reads Achosa's own /shop state selector and returns every US state Achosa currently sells a
3140
+ * home-warranty plan in, each with the site's own numeric category id used to scope getQuote's
3141
+ * configurator URL.
3142
+ */
3143
+ listStates(): Promise<AchosahwStateList>;
3144
+
3145
+ /**
3146
+ * Prices one real, purchasable Homeowner's plan combination by calling the exact pricing
3147
+ * endpoint the site's own configurator calls. `state` is required (call listStates() for the
3148
+ * current list); `coverageLevel`, `term` and `propertyType` default to Core / Monthly / Single
3149
+ * Family Home. A combination the state does not sell (e.g. a coverage tier not offered in that
3150
+ * state's price region) returns `isAvailable: false` and `price: 0` rather than throwing,
3151
+ * matching the site's own "Not Available For Sale" state. THROWS on an unknown state or an
3152
+ * unrecognized coverageLevel/term/propertyType value, naming the accepted set.
3153
+ */
3154
+ getQuote(args: AchosahwQuoteArgs): Promise<AchosahwQuote>;
3155
+ }
3156
+ }
3157
+
3158
+ declare namespace BowmarkProvider_acqualinaresort {
3159
+ // ── Acqualina Resort & Residences — the unit's own declarations, verbatim ──
3160
+ interface AcqualinaRate {
3161
+ planName: string;
3162
+ rateCode: string | null;
3163
+ planDescription: string | null;
3164
+ pricePerNight: number | null;
3165
+ originalPricePerNight: number | null;
3166
+ currency: "USD";
3167
+ }
3168
+
3169
+ interface AcqualinaRoomAvailability {
3170
+ roomName: string;
3171
+ bedInfo: string | null;
3172
+ sleeps: string | null;
3173
+ rates: AcqualinaRate[];
3174
+ }
3175
+
3176
+ /**
3177
+ * Acqualina Resort & Residences' own SynXis GEM reservation engine — real-time room-type
3178
+ * availability and per-night pricing for its Sunny Isles Beach property, for given dates and
3179
+ * party size.
3180
+ */
3181
+ interface Unit {
3182
+ /**
3183
+ * Runs Acqualina's own reservation engine for one stay and returns real room-type availability
3184
+ * with per-night pricing for every rate plan on offer.
3185
+ */
3186
+ searchAvailability(arrive: string, depart: string, adults: number, children?: number): Promise<AcqualinaRoomAvailability[]>;
3187
+ }
3188
+ }
3189
+
2982
3190
  declare namespace BowmarkProvider_aiper {
2983
3191
  // ── Aiper — the unit's own declarations, verbatim ──
2984
3192
  interface AiperPoolOption {
@@ -3140,6 +3348,48 @@ interface AlphavantageSignUpResult {
3140
3348
  }
3141
3349
  }
3142
3350
 
3351
+ declare namespace BowmarkProvider_americandreamvacations {
3352
+ // ── American Dream Vacations — the unit's own declarations, verbatim ──
3353
+ interface AdvLocation {
3354
+ storeId: string;
3355
+ name: string;
3356
+ }
3357
+
3358
+ interface AdvVehicle {
3359
+ id: string;
3360
+ unitId: string;
3361
+ model: string;
3362
+ make: string;
3363
+ vehicleClass: "a" | "b" | "c" | "t";
3364
+ vehicleClassLabel: string;
3365
+ sleeps: number | null;
3366
+ lengthFt: number | null;
3367
+ dailyRate: number | null;
3368
+ weeklyRate: number | null;
3369
+ currency: "USD";
3370
+ electricalConnection: string | null;
3371
+ storeId: string;
3372
+ storeName: string;
3373
+ }
3374
+
3375
+ /**
3376
+ * American Dream Vacations' own RV rental inventory search (americandreamvacations.net) —
3377
+ * given one of their 10 store locations and an RV class (Class A/B/C or Trailer), returns the
3378
+ * real, priced units the site itself lists: unit number, model, make, sleeps, length,
3379
+ * daily/weekly rate and electrical connection. No login, no dates required.
3380
+ */
3381
+ interface Unit {
3382
+ /** Returns American Dream Vacations' own list of rental store locations and their store ids. */
3383
+ listLocations(): Promise<AdvLocation[]>;
3384
+
3385
+ /**
3386
+ * Runs American Dream Vacations' own availability search for one store location and vehicle
3387
+ * class and returns the real, priced inventory the site lists.
3388
+ */
3389
+ searchInventory(location: string, vehicleClass: "a" | "b" | "c" | "t"): Promise<AdvVehicle[]>;
3390
+ }
3391
+ }
3392
+
3143
3393
  declare namespace BowmarkProvider_americanstandard {
3144
3394
  // ── American Standard Heating & Air Conditioning — the unit's own declarations, verbatim ──
3145
3395
  type AmericanStandardTierName = "Platinum" | "Gold" | "Silver";
@@ -3179,6 +3429,38 @@ interface AmericanStandardSystemCostEstimate {
3179
3429
  }
3180
3430
  }
3181
3431
 
3432
+ declare namespace BowmarkProvider_americanvisionwindows {
3433
+ // ── American Vision Windows — the unit's own declarations, verbatim ──
3434
+ interface AmericanVisionWindowsSlotDay {
3435
+ date: string;
3436
+ windows: string[];
3437
+ }
3438
+ interface AmericanVisionWindowsAvailability {
3439
+ zip: string;
3440
+ service: "Windows" | "Bath";
3441
+ inTerritory: boolean;
3442
+ territory: string;
3443
+ serviceTerritoryId: string;
3444
+ slots: AmericanVisionWindowsSlotDay[];
3445
+ }
3446
+
3447
+ /**
3448
+ * American Vision Windows' free in-home consultation booking flow — real open appointment
3449
+ * slots for a ZIP and service (window or bath replacement), straight from the site's own
3450
+ * booking app.
3451
+ */
3452
+ interface Unit {
3453
+ /**
3454
+ * Checks real, currently-open in-home consultation appointment slots for a US ZIP code and
3455
+ * service (window or bath replacement) — the computed step of American Vision Windows'
3456
+ * free-consultation booking flow, reachable before any name/email/phone is collected. Returns
3457
+ * the matched service territory and a real per-day list of open date/time windows, or
3458
+ * `inTerritory: false` for a ZIP outside AVW's California territories.
3459
+ */
3460
+ checkAvailability(args: { zip: string; service: "Windows" | "Bath" }): Promise<AmericanVisionWindowsAvailability>;
3461
+ }
3462
+ }
3463
+
3182
3464
  declare namespace BowmarkProvider_amramp {
3183
3465
  // ── Amramp — the unit's own declarations, verbatim ──
3184
3466
  interface AmrampLocation {
@@ -3305,6 +3587,229 @@ interface AndersenDealer {
3305
3587
  }
3306
3588
  }
3307
3589
 
3590
+ declare namespace BowmarkProvider_andstr {
3591
+ // ── Andes (stayAndes) — the unit's own declarations, verbatim ──
3592
+ interface AndstrSearchArgs {
3593
+ market?: string;
3594
+ city?: string;
3595
+ checkIn?: string;
3596
+ checkOut?: string;
3597
+ guests?: number;
3598
+ bedrooms?: number;
3599
+ priceMin?: number;
3600
+ priceMax?: number;
3601
+ propertyType?: string;
3602
+ instantBook?: boolean;
3603
+ page?: number;
3604
+ }
3605
+ interface AndstrListingSummary {
3606
+ id: string;
3607
+ title: string;
3608
+ city: string;
3609
+ region: string;
3610
+ bedrooms: number;
3611
+ bathrooms: number;
3612
+ maxGuests: number;
3613
+ pricePerNight: number;
3614
+ currency: string;
3615
+ priceBasis: "dates" | "startingFrom";
3616
+ verified: boolean;
3617
+ instantBook: boolean;
3618
+ cancellationPolicy: string | null;
3619
+ imageUrl: string | null;
3620
+ url: string;
3621
+ }
3622
+ interface AndstrListingDetail {
3623
+ id: string;
3624
+ title: string;
3625
+ city: string;
3626
+ region: string;
3627
+ bedrooms: number;
3628
+ bathrooms: number;
3629
+ maxGuests: number;
3630
+ listedFromPerNight: number;
3631
+ currency: string;
3632
+ amenities: string[];
3633
+ cancellationPolicy: string | null;
3634
+ latitude: number | null;
3635
+ longitude: number | null;
3636
+ url: string;
3637
+ }
3638
+ interface AndstrQuote {
3639
+ listingId: string;
3640
+ checkIn: string;
3641
+ checkOut: string;
3642
+ guests: number;
3643
+ available: boolean;
3644
+ unavailableReason: string | null;
3645
+ nights: number | null;
3646
+ nightlyTotal: number | null;
3647
+ fees: Array<{ name: string; amount: number }>;
3648
+ total: number | null;
3649
+ averagePerNight: number | null;
3650
+ currency: string;
3651
+ bookingUrl: string;
3652
+ }
3653
+
3654
+ /**
3655
+ * stayAndes's own flexible-stay search-and-book portal — search by
3656
+ * market/dates/guests/price/amenities with real per-night pricing, read a listing's full
3657
+ * detail, and get the real date-priced quote (fees + total + booking handoff) for a stay.
3658
+ */
3659
+ interface Unit {
3660
+ /**
3661
+ * Searches stayAndes's listing portfolio by market, dates, guests, bedrooms, price range and
3662
+ * instant-book. When check-in/check-out are given, pricePerNight is the real demand-priced
3663
+ * average for that stay; otherwise it's the site's undated starting-from rate (priceBasis says
3664
+ * which).
3665
+ */
3666
+ search(args?: AndstrSearchArgs): Promise<AndstrListingSummary[]>;
3667
+
3668
+ /**
3669
+ * One listing's full detail — bedrooms/bathrooms/guests, amenities, cancellation policy,
3670
+ * coordinates. Its own price is a static rack rate, not a real quote — call getQuote for that.
3671
+ */
3672
+ getListing(listingId: string): Promise<AndstrListingDetail>;
3673
+
3674
+ /**
3675
+ * The real date-priced quote for one listing — nightly total, service + cleaning fees, total
3676
+ * before taxes, average per night, and a direct checkout handoff URL — or the site's own
3677
+ * reason a stay isn't bookable.
3678
+ */
3679
+ getQuote(listingId: string, checkIn: string, checkOut: string, guests: number): Promise<AndstrQuote>;
3680
+ }
3681
+ }
3682
+
3683
+ declare namespace BowmarkProvider_anthropic_com {
3684
+ // ── Anthropic Engineering & Legal — the unit's own declarations, verbatim ──
3685
+ interface AnthropicComDoc {
3686
+ url: string;
3687
+ title: string | null;
3688
+ body: string;
3689
+ }
3690
+ interface AnthropicComDocLink {
3691
+ url: string;
3692
+ slug: string;
3693
+ section: "engineering" | "legal";
3694
+ lastUpdated: string;
3695
+ }
3696
+
3697
+ /**
3698
+ * Reads one page of anthropic.com's engineering blog or legal terms by URL and returns its
3699
+ * title and body as plain text — parsed from the page's own server-rendered markup, not a
3700
+ * whole-page scrape.
3701
+ */
3702
+ interface Unit {
3703
+ /**
3704
+ * Reads one page of anthropic.com's engineering blog (/engineering/...) or legal terms
3705
+ * (/legal/...) by URL or path (e.g. "/legal/commercial-terms" or the full https:// url) and
3706
+ * returns its title and body as plain text. THROWS if the page does not exist (404) or names a
3707
+ * host other than anthropic.com.
3708
+ */
3709
+ getDoc(url: string): Promise<AnthropicComDoc>;
3710
+
3711
+ /**
3712
+ * Lists every engineering-blog and legal-terms page anthropic.com publishes — url, section
3713
+ * ("engineering" | "legal") and the page's own URL slug — parsed from the site's own
3714
+ * /sitemap.xml (anthropic.com has no llms.txt). The slug is the closest thing to a title the
3715
+ * sitemap carries; call getDoc(url) for the page's real headline.
3716
+ */
3717
+ listDocs(): Promise<AnthropicComDocLink[]>;
3718
+ }
3719
+ }
3720
+
3721
+ declare namespace BowmarkProvider_antunes {
3722
+ // ── A.J. Antunes & Co. — the unit's own declarations, verbatim ──
3723
+ interface AntunesServiceAgency {
3724
+ id: string;
3725
+ name: string;
3726
+ address: string;
3727
+ city: string;
3728
+ state: string;
3729
+ zip: string;
3730
+ country: string;
3731
+ phone: string;
3732
+ fax: string;
3733
+ email: string;
3734
+ url: string;
3735
+ latitude: number;
3736
+ longitude: number;
3737
+ distanceMiles: number;
3738
+ }
3739
+ interface AntunesServiceAgencySearch {
3740
+ radiusMiles: number;
3741
+ agencies: AntunesServiceAgency[];
3742
+ }
3743
+
3744
+ /**
3745
+ * Reads Antunes' own real-time authorized service-agency/distributor locator directly — real
3746
+ * nearby agencies, reps and distributors Antunes itself vets, distance-ranked from a US ZIP,
3747
+ * never a guess at unverified third-party repair shops.
3748
+ */
3749
+ interface Unit {
3750
+ /**
3751
+ * Runs Antunes' own real-time authorized service-agency/distributor locator for a US ZIP and
3752
+ * returns real nearby agencies, sales reps and distributors Antunes itself authorizes and
3753
+ * lists — not a guess at which local repair shops might service Antunes equipment.
3754
+ * `radiusMiles` defaults to 100 and is capped at 500; an honestly empty list means Antunes has
3755
+ * nothing authorized that close.
3756
+ */
3757
+ findServiceAgencies(zip: string, radiusMiles?: number): Promise<AntunesServiceAgencySearch>;
3758
+ }
3759
+ }
3760
+
3761
+ declare namespace BowmarkProvider_aosom {
3762
+ // ── Aosom — the unit's own declarations, verbatim ──
3763
+ interface AosomSearchResult {
3764
+ sin: string;
3765
+ sku: string;
3766
+ name: string;
3767
+ brand: string | null;
3768
+ price: number; // dollars, e.g. 354.99
3769
+ originalPrice: number | null;
3770
+ stockQty: number;
3771
+ urlkey: string;
3772
+ url: string; // pass to getProduct
3773
+ categoryName: string | null;
3774
+ imageUrl: string | null;
3775
+ }
3776
+ interface AosomProduct {
3777
+ sin: string;
3778
+ sku: string;
3779
+ name: string;
3780
+ brand: string | null;
3781
+ category: string | null;
3782
+ subCategory: string | null;
3783
+ price: number; // dollars
3784
+ originalPrice: number | null;
3785
+ inStock: boolean; // the site's own buyability flag for this variant
3786
+ url: string; // the handoff — open this to add to cart / check out
3787
+ }
3788
+
3789
+ /**
3790
+ * Reads Aosom's live catalog — search results and one product's real price/stock — straight
3791
+ * off aosom.com's own search API and product page, no key, no browser.
3792
+ */
3793
+ interface Unit {
3794
+ /**
3795
+ * Searches Aosom's live catalog (Outsunny/HOMCOM/PawHut/Soozier) for a free-text query and
3796
+ * returns real, currently-listed rows with price, stock count, brand and a ready-to-use
3797
+ * product page URL. Returns [] for a query that matches nothing — a real, honest answer, since
3798
+ * the endpoint returns 200 with an empty list rather than 404ing.
3799
+ */
3800
+ searchProducts(query: string): Promise<AosomSearchResult[]>;
3801
+
3802
+ /**
3803
+ * Reads one product's live price and the site's own buyability flag straight off its product
3804
+ * page — the SAME page a shopper lands on, so a variant (color/size baked into a distinct
3805
+ * SKU/URL on this site) is read exactly as chosen. Takes the full product page URL
3806
+ * (searchProducts' `url` field). THROWS rather than guessing when the page's own product-data
3807
+ * block is missing or unparseable — never silently returns a stale or wrong variant.
3808
+ */
3809
+ getProduct(url: string): Promise<AosomProduct>;
3810
+ }
3811
+ }
3812
+
3308
3813
  declare namespace BowmarkProvider_apple {
3309
3814
  // ── Apple — the unit's own declarations, verbatim ──
3310
3815
  interface AppleSearchResult {
@@ -3406,6 +3911,72 @@ interface AquaphoenixsciProduct {
3406
3911
  }
3407
3912
  }
3408
3913
 
3914
+ declare namespace BowmarkProvider_arajet {
3915
+ // ── Arajet — the unit's own declarations, verbatim ──
3916
+ interface ArajetSearchArgs {
3917
+ origin: string;
3918
+ destination: string;
3919
+ departureDate: string;
3920
+ passengers?: number;
3921
+ }
3922
+
3923
+ interface ArajetAirport {
3924
+ code: string;
3925
+ name: string;
3926
+ }
3927
+
3928
+ interface ArajetFlightLeg {
3929
+ flightNumber: string;
3930
+ carrierCode: string;
3931
+ from: ArajetAirport;
3932
+ to: ArajetAirport;
3933
+ departureDate: string;
3934
+ arrivalDate: string;
3935
+ flightTimeMinutes: number;
3936
+ equipmentType: string | null;
3937
+ }
3938
+
3939
+ interface ArajetFlightOption {
3940
+ key: string;
3941
+ from: ArajetAirport;
3942
+ to: ArajetAirport;
3943
+ departureDate: string;
3944
+ arrivalDate: string;
3945
+ flightTimeMinutes: number;
3946
+ stops: number;
3947
+ legs: ArajetFlightLeg[];
3948
+ soldOut: boolean;
3949
+ }
3950
+
3951
+ interface ArajetSearchResult {
3952
+ origin: string;
3953
+ destination: string;
3954
+ departureDate: string;
3955
+ currency: string;
3956
+ pricesAvailable: false;
3957
+ flights: ArajetFlightOption[];
3958
+ }
3959
+
3960
+ /**
3961
+ * Arajet's own flight-schedule search (Santo Domingo-based low-cost carrier) — real routes,
3962
+ * times, connections and flight numbers straight off its booking engine's shop endpoint. No
3963
+ * live pricing at this rung.
3964
+ */
3965
+ interface Unit {
3966
+ /**
3967
+ * Runs Arajet's own flight-schedule search for one origin/destination/date and returns the
3968
+ * flight OPTIONS it schedules — carrier and flight number, departure/arrival times, duration,
3969
+ * stop count and each connecting leg. `origin`/`destination` are 3-letter IATA codes ("SDQ",
3970
+ * "MIA"); `departureDate` is "YYYY-MM-DD" or "MM/DD/YYYY"; `passengers` (adults) defaults to
3971
+ * 1. HONEST LIMIT: this reads Arajet's calendar/shop endpoint, which carries the SCHEDULE but
3972
+ * not a live fare — every option's `soldOut` came back `true` at every route and date
3973
+ * measured, and `pricesAvailable` is always `false`. It answers "what does Arajet fly, and
3974
+ * when" rather than "what would this cost".
3975
+ */
3976
+ search(arg0: ArajetSearchArgs): Promise<ArajetSearchResult>;
3977
+ }
3978
+ }
3979
+
3409
3980
  declare namespace BowmarkProvider_archipelago {
3410
3981
  // ── Archipelago — the unit's own declarations, verbatim ──
3411
3982
  interface ArchipelagoAsset {
@@ -3452,6 +4023,51 @@ interface ArchipelagoGameOptions {
3452
4023
  }
3453
4024
  }
3454
4025
 
4026
+ declare namespace BowmarkProvider_artpix3d {
4027
+ // ── ArtPix 3D — the unit's own declarations, verbatim ──
4028
+ // ArtPix 3D's OWN shapes — not a capability contract.
4029
+
4030
+ interface Artpix3dShape { slug: string; name: string; url: string }
4031
+
4032
+ interface Artpix3dSizePrice {
4033
+ size: string; // e.g. "Large"
4034
+ sellPrice: number | null;
4035
+ retailPrice: number | null;
4036
+ discountPercent: number | null;
4037
+ inStock: boolean;
4038
+ bestSeller: boolean;
4039
+ lowStockLabel: string | null;
4040
+ }
4041
+
4042
+ interface Artpix3dProductPricing {
4043
+ shape: string;
4044
+ productName: string;
4045
+ sizes: Artpix3dSizePrice[];
4046
+ configureUrl: string; // where a buyer picks a photo and checks out
4047
+ }
4048
+
4049
+ /**
4050
+ * Reads ArtPix 3D's own live product configurator — every crystal shape, and for a chosen
4051
+ * shape, every size's real current price (with active sale discounts) and stock/best-seller
4052
+ * labels — the way the site's own size-picker computes it, real-time.
4053
+ */
4054
+ interface Unit {
4055
+ /**
4056
+ * Lists every crystal shape ArtPix 3D currently sells (rectangle, heart, square, …), each with
4057
+ * its own product page URL.
4058
+ */
4059
+ listShapes(): Promise<Artpix3dShape[]>;
4060
+
4061
+ /**
4062
+ * Runs the site's own size/price computation for one shape: every size's real current sell
4063
+ * price, list price, active discount, stock and best-seller status. `shape` is a slug from
4064
+ * `listShapes()`. THROWS on an unknown shape, naming `listShapes()` as the way to find current
4065
+ * ones.
4066
+ */
4067
+ getSizePricing(shape: string): Promise<Artpix3dProductPricing>;
4068
+ }
4069
+ }
4070
+
3455
4071
  declare namespace BowmarkProvider_ashleyfurniture {
3456
4072
  // ── Ashley Furniture — the unit's own declarations, verbatim ──
3457
4073
  interface AshleyFurnitureSearchArgs {
@@ -3730,6 +4346,41 @@ interface AtlasSearchCommunitiesResult {
3730
4346
  }
3731
4347
  }
3732
4348
 
4349
+ declare namespace BowmarkProvider_audibel {
4350
+ // ── Audibel — the unit's own declarations, verbatim ──
4351
+ interface AudibelClinic {
4352
+ name: string;
4353
+ address: string;
4354
+ city: string;
4355
+ state: string;
4356
+ zip: string;
4357
+ phone: string | null;
4358
+ distanceMiles: number | null; // miles from the searched point, nearest-first
4359
+ url: string; // the clinic's own page on audibel.com
4360
+ hours: Record<string, { open: string; close: string }>;
4361
+ }
4362
+
4363
+ interface AudibelClinicSearch {
4364
+ search: string;
4365
+ lat: number;
4366
+ lng: number;
4367
+ clinics: AudibelClinic[]; // sorted nearest-first
4368
+ }
4369
+
4370
+ /**
4371
+ * Audibel's own find-a-clinic locator — a ZIP/city/address search returning the real network
4372
+ * hearing clinics nearest that point, sorted by distance, each with its full address, phone
4373
+ * and hours.
4374
+ */
4375
+ interface Unit {
4376
+ /**
4377
+ * Runs the real find-a-clinic search for a ZIP code, city or address and returns Audibel's
4378
+ * network clinics nearest that point, distance-sorted, with address/phone/hours.
4379
+ */
4380
+ findClinics(query: string): Promise<AudibelClinicSearch>;
4381
+ }
4382
+ }
4383
+
3733
4384
  declare namespace BowmarkProvider_autocamp {
3734
4385
  // ── AutoCamp — the unit's own declarations, verbatim ──
3735
4386
  interface AutocampRate {
@@ -3750,6 +4401,11 @@ interface AutocampRoomAvailability {
3750
4401
  rates: AutocampRate[];
3751
4402
  }
3752
4403
 
4404
+ interface AutocampProperty {
4405
+ hotelId: string;
4406
+ location: string;
4407
+ }
4408
+
3753
4409
  /**
3754
4410
  * AutoCamp's own SynXis reservation engine — real-time room-type availability and
3755
4411
  * per-night/stay-total pricing for any of its Airstream/cabin/tent properties, for a given
@@ -3761,6 +4417,13 @@ interface AutocampRoomAvailability {
3761
4417
  * availability with per-night and stay-total pricing for every rate plan on offer.
3762
4418
  */
3763
4419
  searchAvailability(hotelId: string, arrive: string, depart: string, adults: number, children?: number): Promise<AutocampRoomAvailability[]>;
4420
+
4421
+ /**
4422
+ * Lists AutoCamp's active properties (name, location, the reservations-engine hotel id) off
4423
+ * the site's own booking-widget furniture, so a caller can resolve a place name to the id
4424
+ * searchAvailability needs.
4425
+ */
4426
+ listProperties(): Promise<AutocampProperty[]>;
3764
4427
  }
3765
4428
  }
3766
4429
 
@@ -3894,8 +4557,56 @@ interface AvisLocationDetail extends AvisLocationRow {
3894
4557
  }
3895
4558
  }
3896
4559
 
4560
+ declare namespace BowmarkProvider_ayreshotels {
4561
+ // ── Ayres Hotels — the unit's own declarations, verbatim ──
4562
+ interface AyreshotelsRateDay {
4563
+ date: string;
4564
+ isAvailable: boolean;
4565
+ minRate: number | null;
4566
+ currency: string | null;
4567
+ availStatus: string | null;
4568
+ }
4569
+
4570
+ interface CheckRatesResult {
4571
+ property: string;
4572
+ hotelCode: number | null;
4573
+ checkIn: string;
4574
+ checkOut: string;
4575
+ currency: string | null;
4576
+ days: AyreshotelsRateDay[];
4577
+ }
4578
+
4579
+ /**
4580
+ * Boutique Southern California hotel group. checkRates is live — it reads the site's own IBE
4581
+ * (Internet Booking Engine, an Amadeus Hospitality / TravelClick widget on
4582
+ * reservations.ayreshotels.com) and returns the REAL per-night minimum rate + availability
4583
+ * status for a property and date range, the same live pricing the site's own date-picker
4584
+ * renders before any guest information is entered.
4585
+ */
4586
+ interface Unit {
4587
+ /**
4588
+ * Checks a property's real live rate/availability for a date range. Pass `property` (the
4589
+ * reservations subdomain slug from that hotel's own "Book Now" link, e.g. "costa-mesa"),
4590
+ * `checkIn`/`checkOut` (ISO dates), and optionally `adults` (default 2). Returns the per-night
4591
+ * minimum rate and availability status for every night in range — the site's own IBE data, not
4592
+ * a third-party OTA estimate.
4593
+ */
4594
+ checkRates(args: object): Promise<CheckRatesResult>;
4595
+ }
4596
+ }
4597
+
3897
4598
  declare namespace BowmarkProvider_azazie {
3898
4599
  // ── Azazie — the unit's own declarations, verbatim ──
4600
+ interface AzazieSearchResult {
4601
+ id: string;
4602
+ name: string;
4603
+ url: string;
4604
+ }
4605
+
4606
+ interface AzazieSearchResults {
4607
+ results: AzazieSearchResult[];
4608
+ }
4609
+
3899
4610
  interface AzazieColorOption {
3900
4611
  key: string;
3901
4612
  name: string;
@@ -3944,6 +4655,12 @@ interface AzazieBuildYourOwnConfig {
3944
4655
  * product-data host.
3945
4656
  */
3946
4657
  interface Unit {
4658
+ /**
4659
+ * Searches Azazie's catalog by free text (style, color, fabric, occasion) and returns matching
4660
+ * dress styles with URLs.
4661
+ */
4662
+ search(query: string): Promise<AzazieSearchResults>;
4663
+
3947
4664
  /**
3948
4665
  * Reads one bridesmaid-dress style's full Build Your Own configuration off Azazie's own
3949
4666
  * product-data host — the real live price, every solid + floral color option (each with its
@@ -4066,6 +4783,14 @@ interface AzureListServicesResult {
4066
4783
 
4067
4784
  declare namespace BowmarkProvider_bankmycell {
4068
4785
  // ── BankMyCell — the unit's own declarations, verbatim ──
4786
+ interface BankmycellSearchResult {
4787
+ brand: string;
4788
+ model: string;
4789
+ name: string;
4790
+ deviceUrl: string;
4791
+ minPrice: number | null;
4792
+ maxPrice: number | null;
4793
+ }
4069
4794
  interface BankmycellOffer {
4070
4795
  merchant: string;
4071
4796
  price: number;
@@ -4088,9 +4813,17 @@ interface BankmycellQuoteResult {
4088
4813
  /**
4089
4814
  * Live trade-in offers for a phone/device from every merchant BankMyCell compares, for a
4090
4815
  * chosen capacity/condition/carrier — read off the same pricing endpoint the site's own sell
4091
- * page polls, instead of parsing prose off the rendered page.
4816
+ * page polls, instead of parsing prose off the rendered page. searchDevices resolves a
4817
+ * shopper's own words ("iPhone 14") to the deviceUrl getTradeInQuote needs.
4092
4818
  */
4093
4819
  interface Unit {
4820
+ /**
4821
+ * Searches BankMyCell's own device index by free text (e.g. "iPhone 14", "Galaxy S23") and
4822
+ * returns the matching devices with their deviceUrl — the entry point: it turns a shopper's
4823
+ * own words into the deviceUrl getTradeInQuote needs.
4824
+ */
4825
+ searchDevices(term: string): Promise<BankmycellSearchResult[]>;
4826
+
4094
4827
  /**
4095
4828
  * Reads live trade-in offers for the device at a bankmycell.com sell page (e.g.
4096
4829
  * .../sell/iphone-14-pro), from every merchant the site compares, for the given
@@ -4182,6 +4915,59 @@ interface BarlettaPriceResult {
4182
4915
  }
4183
4916
  }
4184
4917
 
4918
+ declare namespace BowmarkProvider_barnesfoundation {
4919
+ // ── Barnes Foundation — the unit's own declarations, verbatim ──
4920
+ type BarnesAdmissionType = "barnes" | "calderCombo";
4921
+ interface BarnesAdmissionDay {
4922
+ date: string;
4923
+ active: boolean;
4924
+ }
4925
+ interface BarnesAdmissionCalendar {
4926
+ admissionType: BarnesAdmissionType;
4927
+ name: string;
4928
+ days: BarnesAdmissionDay[];
4929
+ }
4930
+ interface BarnesAdmissionQuoteInput {
4931
+ personType: string;
4932
+ quantity: number;
4933
+ }
4934
+ interface BarnesAdmissionQuoteLine {
4935
+ personType: string;
4936
+ quantity: number;
4937
+ unitPrice: number;
4938
+ subtotal: number;
4939
+ }
4940
+ interface BarnesAdmissionQuote {
4941
+ admissionType: BarnesAdmissionType;
4942
+ currency: "USD";
4943
+ lines: BarnesAdmissionQuoteLine[];
4944
+ total: number;
4945
+ }
4946
+
4947
+ /**
4948
+ * The Barnes Foundation's own live ticket-admission data, read directly — real day-by-day
4949
+ * open/closed availability and real per-category pricing arithmetic for Barnes Foundation
4950
+ * admission and the Barnes + Calder Gardens combo, off the site's own undocumented API.
4951
+ */
4952
+ interface Unit {
4953
+ /**
4954
+ * Reads the live day-by-day open/closed calendar (a rolling ~6-month window) for either
4955
+ * "barnes" (Barnes Foundation admission only) or "calderCombo" (Barnes + Calder Gardens combo
4956
+ * admission) — the same day-availability the ticket widget's own calendar picker renders.
4957
+ * Day-level only: the site's API carries no per-timeslot remaining-capacity count.
4958
+ */
4959
+ getAdmissionCalendar(admissionType: "barnes" | "calderCombo"): Promise<BarnesAdmissionCalendar>;
4960
+
4961
+ /**
4962
+ * Computes a real ticket total for the given admission type and category quantities
4963
+ * (personType matched case-insensitively against the live list — "Adult", "Senior", "Youth",
4964
+ * "Child", etc.) using the site's own current per-category prices. THROWS if a category name
4965
+ * does not match one the site currently sells, or if tickets is empty.
4966
+ */
4967
+ priceAdmission(admissionType: "barnes" | "calderCombo", tickets: BarnesAdmissionQuoteInput[]): Promise<BarnesAdmissionQuote>;
4968
+ }
4969
+ }
4970
+
4185
4971
  declare namespace BowmarkProvider_baublebar {
4186
4972
  // ── BaubleBar — the unit's own declarations, verbatim ──
4187
4973
  interface BaublebarPersonalizationField {
@@ -4229,6 +5015,11 @@ interface BaublebarCatalogueRow {
4229
5015
  inStock: boolean;
4230
5016
  images: string[];
4231
5017
  }
5018
+ interface BaublebarCollectionRow {
5019
+ handle: string;
5020
+ title: string;
5021
+ productsCount: number;
5022
+ }
4232
5023
  interface BaublebarCheckoutLink {
4233
5024
  url: string;
4234
5025
  variant: BaublebarVariant;
@@ -4243,6 +5034,13 @@ interface BaublebarCheckoutLink {
4243
5034
  * carrying the personalization.
4244
5035
  */
4245
5036
  interface Unit {
5037
+ /**
5038
+ * The entry door: reads BaubleBar's own published list of collections — e.g. "Tennis
5039
+ * Bracelets", "Personalized Jewelry" — with each one's handle and product count, so a caller
5040
+ * holding only what a shopper would say can find the handle listBaublebarProducts takes.
5041
+ */
5042
+ listBaublebarCollections(opts?: { limit?: number }): Promise<BaublebarCollectionRow[]>;
5043
+
4246
5044
  /**
4247
5045
  * Reads a BaubleBar collection's live products — e.g. "tennis-bracelets",
4248
5046
  * "personalized-jewelry", "name-initial-jewelry" — with handle, title, price range and stock.
@@ -4376,6 +5174,169 @@ interface BeatthebombPriceQuote {
4376
5174
  }
4377
5175
  }
4378
5176
 
5177
+ declare namespace BowmarkProvider_bellwethercoffee {
5178
+ // ── Bellwether Coffee — the unit's own declarations, verbatim ──
5179
+ // Bellwether Coffee's OWN shapes — not a capability contract.
5180
+
5181
+ type BellwethercoffeeCurrency = "USD" | "CAD" | "GBP" | "EUR";
5182
+ type BellwethercoffeeRoasterType = "ShopRoaster" | "ContinuousRoasting";
5183
+
5184
+ interface BellwethercoffeeSliderBounds { min: number; max: number; step: number }
5185
+
5186
+ interface BellwethercoffeeCalculatorDefaults {
5187
+ currencies: BellwethercoffeeCurrency[];
5188
+ roasterTypes: BellwethercoffeeRoasterType[];
5189
+ defaultInputsByCurrency: Record<BellwethercoffeeCurrency, { poundsWeekly: number; coffeeCost: number; retailBags: number }>;
5190
+ sliderBounds: { poundsWeekly: BellwethercoffeeSliderBounds; coffeeCost: BellwethercoffeeSliderBounds; retailBags: BellwethercoffeeSliderBounds };
5191
+ roasterPricesByCurrency: Record<BellwethercoffeeCurrency, Record<BellwethercoffeeRoasterType, number>>;
5192
+ disclaimer: string;
5193
+ roiCalculatorUrl: string;
5194
+ requestDemoUrl: string;
5195
+ }
5196
+
5197
+ interface BellwethercoffeeRoiInput {
5198
+ currency: BellwethercoffeeCurrency;
5199
+ roasterType: BellwethercoffeeRoasterType;
5200
+ poundsWeekly: number; // weekly roasted-coffee usage (lb, or kg for non-USD)
5201
+ coffeeCost: number; // what the caller currently pays per lb/kg, in currency
5202
+ retailBags: number; // retail bags of roasted coffee sellable per week
5203
+ }
5204
+
5205
+ interface BellwethercoffeeRoiEstimate {
5206
+ currency: BellwethercoffeeCurrency;
5207
+ roasterType: BellwethercoffeeRoasterType;
5208
+ investmentAmount: number; investmentAmountFormatted: string;
5209
+ savingsPerUnit: number;
5210
+ monthlySavings: number; monthlySavingsFormatted: string;
5211
+ annualSavings: number; annualSavingsFormatted: string;
5212
+ monthlySalesRevenue: number; monthlySalesRevenueFormatted: string;
5213
+ annualSalesRevenue: number; annualSalesRevenueFormatted: string;
5214
+ annualRetailProfit: number; annualRetailProfitFormatted: string;
5215
+ totalROI: number; totalROIFormatted: string; // first-year ROI: annualSavings + annualRetailProfit
5216
+ paybackMonths: number; // 999 sentinel when there is no payback at these inputs
5217
+ savingsPerCup: number;
5218
+ co2SavingsPerYear: number;
5219
+ roiCalculatorUrl: string;
5220
+ requestDemoUrl: string; // the site's own next step — a separate lead form, not computed here
5221
+ }
5222
+
5223
+ /**
5224
+ * Bellwether Coffee's own ROI calculator (bellwethercoffee.com/roi-calculator) — real
5225
+ * monthly/annual savings, retail-bag revenue and profit, payback period, and first-year ROI
5226
+ * for the Shop Roaster, computed exactly as the site's own client-side formula computes it, no
5227
+ * estimate.
5228
+ */
5229
+ interface Unit {
5230
+ /**
5231
+ * Returns the ROI calculator's own currencies, roaster types, per-currency default input
5232
+ * values, slider bounds (min/max/step), per-currency roaster list prices, and the site's own
5233
+ * cost-basis disclaimer text — call this before computeRoiEstimate to know the valid ranges
5234
+ * and defaults.
5235
+ */
5236
+ getCalculatorDefaults(): Promise<BellwethercoffeeCalculatorDefaults>;
5237
+
5238
+ /**
5239
+ * Runs Bellwether's own ROI calculator formula — currency, roaster type, weekly roasted-coffee
5240
+ * usage, price paid per lb, and weekly retail-bag sales in; real monthly/annual savings,
5241
+ * retail-bag revenue and profit, payback period (months), and first-year total ROI out,
5242
+ * computed exactly as bellwethercoffee.com/roi-calculator's own client-side computeROI()
5243
+ * computes it, no estimate. `requestDemoUrl` is the site's own next step, not a checkout.
5244
+ */
5245
+ computeRoiEstimate(input: BellwethercoffeeRoiInput): Promise<BellwethercoffeeRoiEstimate>;
5246
+ }
5247
+ }
5248
+
5249
+ declare namespace BowmarkProvider_beltservice {
5250
+ // ── Beltservice Corporation — the unit's own declarations, verbatim ──
5251
+ interface BeltserviceCatalogItem {
5252
+ catalogNumber: string;
5253
+ partNumber: string;
5254
+ name: string;
5255
+ grade: string | null;
5256
+ specSheetUrl: string | null;
5257
+ detailUrl: string;
5258
+ quoteUrl: string;
5259
+ }
5260
+ interface BeltserviceCatalogPage {
5261
+ items: BeltserviceCatalogItem[];
5262
+ page: number;
5263
+ totalPages: number;
5264
+ hasMore: boolean;
5265
+ }
5266
+ interface BeltserviceBrowseParams {
5267
+ group?: string;
5268
+ category?: string;
5269
+ industry?: string;
5270
+ page?: number;
5271
+ }
5272
+ interface BeltserviceBeltDetail {
5273
+ catalogNumber: string;
5274
+ partNumber: string;
5275
+ name: string;
5276
+ description: string | null;
5277
+ specSheetUrl: string | null;
5278
+ quoteUrl: string;
5279
+ }
5280
+
5281
+ /**
5282
+ * Beltservice Corporation's own conveyor-belt catalog: browse or filter by product
5283
+ * group/category/industry and get back real, paginated, spec-matched belts (catalog number,
5284
+ * part number, spec-sheet PDF), or look up one belt directly by catalog number — plus the
5285
+ * ready quote-handoff link for each.
5286
+ */
5287
+ interface Unit {
5288
+ /**
5289
+ * Browses Beltservice's live belt catalog, matching its own site filters: pass at most one of
5290
+ * group/category/industry (the site's own facet slugs, e.g. group: "heavy-duty") plus an
5291
+ * optional page number, or call with no argument for the unfiltered catalog. Returns real
5292
+ * paginated results — catalog number, part number, spec-sheet PDF, quote-handoff link —
5293
+ * exactly as the live site renders them.
5294
+ */
5295
+ browseCatalog(params?: BeltserviceBrowseParams): Promise<BeltserviceCatalogPage>;
5296
+
5297
+ /**
5298
+ * Looks up one belt directly by its Beltservice catalog number (found via browseCatalog) and
5299
+ * returns its full description, spec-sheet PDF, and quote-handoff link.
5300
+ */
5301
+ getBelt(catalogNumber: string): Promise<BeltserviceBeltDetail>;
5302
+ }
5303
+ }
5304
+
5305
+ declare namespace BowmarkProvider_benelliusa {
5306
+ // ── Benelli USA — the unit's own declarations, verbatim ──
5307
+ interface benelliusaDealer {
5308
+ name: string;
5309
+ address: string;
5310
+ city: string;
5311
+ state: string;
5312
+ postalCode: string;
5313
+ phone: string | null;
5314
+ distanceMiles: number;
5315
+ mapUrl: string;
5316
+ premierDealer: boolean;
5317
+ latitude: number | null;
5318
+ longitude: number | null;
5319
+ }
5320
+
5321
+ /**
5322
+ * Runs Benelli USA's own dealer locator by ZIP code and returns real Premier Dealer records —
5323
+ * name, address, phone, distance, map link.
5324
+ */
5325
+ interface Unit {
5326
+ /**
5327
+ * Runs Benelli USA's own "Find A Benelli Dealer" locator for a 5-digit US ZIP and returns
5328
+ * every dealer it lists, nearest first: name, street address, city/state/zip, phone (`null` on
5329
+ * the handful of rows with none), distance in miles, a Google Maps directions link, whether
5330
+ * the site marks it a `premierDealer` ("Benelli Premier Dealer"), and coordinates when the
5331
+ * page's own map data carries them. A ZIP with no dealers nearby returns `[]` — the site's own
5332
+ * honest "No dealers found" answer, not an error. **Does not report which sister brands
5333
+ * (Franchi, Stoeger, Uberti USA) a dealer also carries** — the results page names no brand at
5334
+ * all, whatever an earlier read of the site suggested.
5335
+ */
5336
+ findDealers(zip: string): Promise<benelliusaDealer[]>;
5337
+ }
5338
+ }
5339
+
4379
5340
  declare namespace BowmarkProvider_bennington {
4380
5341
  // ── Bennington Marine — the unit's own declarations, verbatim ──
4381
5342
  interface BenningtonModel {
@@ -4525,6 +5486,54 @@ interface StoreStock {
4525
5486
  }
4526
5487
  }
4527
5488
 
5489
+ declare namespace BowmarkProvider_bigairusa {
5490
+ // ── Big Air Trampoline Park — the unit's own declarations, verbatim ──
5491
+ interface BigAirLocation {
5492
+ slug: string;
5493
+ name: string;
5494
+ comingSoon: boolean;
5495
+ webstoreSubdomain: string | null;
5496
+ }
5497
+
5498
+ interface BigAirPass {
5499
+ id: string;
5500
+ name: string;
5501
+ price: number | null;
5502
+ description: string | null;
5503
+ group: string;
5504
+ checkoutUrl: string;
5505
+ }
5506
+
5507
+ interface BigAirLocationCatalog {
5508
+ location: BigAirLocation;
5509
+ waiverUrl: string;
5510
+ passes: BigAirPass[];
5511
+ }
5512
+
5513
+ /**
5514
+ * Big Air Trampoline Park's own location directory and per-location CenterEdge ticket/pass
5515
+ * catalog — real prices, no login, no browser — plus the checkout and waiver handoff URLs a
5516
+ * purchase needs.
5517
+ */
5518
+ interface Unit {
5519
+ /**
5520
+ * Lists every Big Air location off the site's own location-picker CMS collection — name, slug,
5521
+ * coming-soon flag, and (when it's on the classic CenterEdge webstore) the webstoreSubdomain
5522
+ * listPasses needs. Only comingSoon: false locations with a non-null webstoreSubdomain are
5523
+ * servable by listPasses today.
5524
+ */
5525
+ listLocations(): Promise<BigAirLocation[]>;
5526
+
5527
+ /**
5528
+ * Lists every ticket/pass group and item at one open location's CenterEdge webstore — real
5529
+ * prices, descriptions — plus that location's checkout URL (per item, to add to cart) and
5530
+ * hosted-waiver URL. location is the slug listLocations() returns, e.g. "corona". Throws when
5531
+ * the location is coming-soon or is not on the classic webstore.
5532
+ */
5533
+ listPasses(location: string): Promise<BigAirLocationCatalog>;
5534
+ }
5535
+ }
5536
+
4528
5537
  declare namespace BowmarkProvider_bigjoeforklifts {
4529
5538
  // ── Big Joe Forklifts — the unit's own declarations, verbatim ──
4530
5539
  interface BigJoeRoiQuestion {
@@ -4687,6 +5696,77 @@ interface BingNewsSearchResult {
4687
5696
  }
4688
5697
  }
4689
5698
 
5699
+ declare namespace BowmarkProvider_bishops {
5700
+ // ── Bishops Cuts/Color — the unit's own declarations, verbatim ──
5701
+ interface BishopsLocationLink {
5702
+ slug: string;
5703
+ url: string;
5704
+ }
5705
+
5706
+ interface BishopsLocation {
5707
+ slug: string;
5708
+ name: string;
5709
+ url: string;
5710
+ centerId: string; // the id listServices and checkAvailability take
5711
+ phone: string | null;
5712
+ address: string | null;
5713
+ hours: string | null;
5714
+ }
5715
+
5716
+ interface BishopsService {
5717
+ id: string; // the id checkAvailability takes
5718
+ name: string;
5719
+ description: string | null;
5720
+ durationMinutes: number | null;
5721
+ price: number | null;
5722
+ }
5723
+
5724
+ interface BishopsSlot {
5725
+ time: string; // the site's own display time, e.g. "10:55 AM"
5726
+ }
5727
+
5728
+ interface BishopsAvailability {
5729
+ centerId: string;
5730
+ serviceId: string;
5731
+ date: string;
5732
+ slots: BishopsSlot[]; // verbatim — empty is a real answer (fully booked / closed)
5733
+ }
5734
+
5735
+ /**
5736
+ * Bishops Cuts/Color's real location directory, live per-location service catalog, and real
5737
+ * open-slot appointment availability — the same Zenoti booking backend the site's own widget
5738
+ * calls. Rung 9/11, no browser.
5739
+ */
5740
+ interface Unit {
5741
+ /**
5742
+ * Reads the live list of every Bishops Cuts/Color location (slug + page URL) off the site's
5743
+ * own sitemap.
5744
+ */
5745
+ listLocations(): Promise<BishopsLocationLink[]>;
5746
+
5747
+ /**
5748
+ * Resolves a slug/neighborhood query (e.g. "lowry") to the matching real Bishops location(s) —
5749
+ * name, address, phone, hours, and the Zenoti centerId listServices and checkAvailability
5750
+ * need. Call listLocations() first for the real slugs.
5751
+ */
5752
+ findLocation(query: string): Promise<BishopsLocation[]>;
5753
+
5754
+ /**
5755
+ * Reads one location's real, live service catalog — pass a `centerId` from findLocation(), and
5756
+ * an optional search string (e.g. "cut", "color") to narrow it; omit it for the full catalog.
5757
+ */
5758
+ listServices(centerId: string, query?: string): Promise<BishopsService[]>;
5759
+
5760
+ /**
5761
+ * Checks real, live open time slots for one service at one location on one "YYYY-MM-DD" date —
5762
+ * the same live check Bishops' own Zenoti booking widget makes before showing bookable times.
5763
+ * An empty `slots` array is the site's real answer (fully booked or closed that day), not an
5764
+ * error.
5765
+ */
5766
+ checkAvailability(centerId: string, serviceId: string, date: string): Promise<BishopsAvailability>;
5767
+ }
5768
+ }
5769
+
4690
5770
  declare namespace BowmarkProvider_blackstoneproducts {
4691
5771
  // ── Blackstone Products — the unit's own declarations, verbatim ──
4692
5772
  interface BlackstoneDealer {
@@ -5091,6 +6171,51 @@ interface BmwusaModelListing {
5091
6171
  }
5092
6172
  }
5093
6173
 
6174
+ declare namespace BowmarkProvider_boglewinery {
6175
+ // ── Bogle Family Vineyards — the unit's own declarations, verbatim ──
6176
+ interface BoglewineryPrice {
6177
+ priceDescription: string; // e.g. "Starting at $20 per person"
6178
+ pricePerPersonCents: { min: number; max: number } | null;
6179
+ }
6180
+
6181
+ interface BoglewineryExperience {
6182
+ id: number; // the id checkAvailability takes
6183
+ slug: string; // the slug checkAvailability takes
6184
+ name: string;
6185
+ description: string;
6186
+ price: BoglewineryPrice;
6187
+ partySizes: number[]; // bookable party sizes Tock currently offers
6188
+ state: string; // e.g. "AVAILABLE", "SOLD"
6189
+ }
6190
+
6191
+ interface BoglewineryAvailability {
6192
+ experienceId: number;
6193
+ slug: string;
6194
+ openDate: string[]; // "YYYY-MM-DD" — empty is a real answer (nothing currently open)
6195
+ openTime: string[]; // "HH:MM"
6196
+ }
6197
+
6198
+ /**
6199
+ * Bogle Family Vineyards' real Tock tasting-experience catalog and the computed open
6200
+ * dates/times for one — the same booking calendar Tock's own widget reads before showing
6201
+ * bookable slots. Rung 17, headed browser only (Cloudflare).
6202
+ */
6203
+ interface Unit {
6204
+ /**
6205
+ * Reads Bogle's real, live Tock experience catalog — name, description, price and bookable
6206
+ * party-size range for every experience, including the Home Ranch Tasting Experience.
6207
+ */
6208
+ listExperiences(): Promise<BoglewineryExperience[]>;
6209
+
6210
+ /**
6211
+ * Checks which upcoming dates and times Tock currently shows as open for one experience — pass
6212
+ * `experienceId` and `slug` from listExperiences(). An empty result is the site's real answer
6213
+ * (nothing currently open), not an error.
6214
+ */
6215
+ checkAvailability(experienceId: number, slug: string): Promise<BoglewineryAvailability>;
6216
+ }
6217
+ }
6218
+
5094
6219
  declare namespace BowmarkProvider_bollandbranch {
5095
6220
  // ── Boll & Branch — the unit's own declarations, verbatim ──
5096
6221
  interface BedDesignerStep {
@@ -5149,6 +6274,100 @@ interface BollAndBranchSwatch {
5149
6274
  }
5150
6275
  }
5151
6276
 
6277
+ declare namespace BowmarkProvider_borsheims {
6278
+ // ── Borsheims — the unit's own declarations, verbatim ──
6279
+ interface BorsheimsSearchResult {
6280
+ name: string; // derived from the URL slug, title-cased
6281
+ url: string; // pass to getProduct / configureRing
6282
+ lastmod: string | null;
6283
+ }
6284
+ interface BorsheimsProduct {
6285
+ code: string;
6286
+ name: string;
6287
+ basePrice: number; // dollars, before any discount
6288
+ price: number; // dollars, the real selling price
6289
+ discount: number | null;
6290
+ inventoryAvailable: number;
6291
+ imageUrl: string | null;
6292
+ url: string; // pass to getProduct / configureRing
6293
+ }
6294
+ interface BorsheimsRingConfiguration {
6295
+ setting: BorsheimsProduct;
6296
+ diamond: BorsheimsProduct;
6297
+ totalPrice: number; // dollars, setting.price + diamond.price
6298
+ builderUrl: string; // the handoff — open this to configure/buy
6299
+ }
6300
+ interface ConfigureRingArgs {
6301
+ settingUrl: string;
6302
+ diamondUrl: string;
6303
+ }
6304
+
6305
+ /**
6306
+ * Reads Borsheims' live product catalog and composes a setting + diamond into a priced ring,
6307
+ * straight off borsheims.com's own embedded product data — no key, no browser.
6308
+ */
6309
+ interface Unit {
6310
+ /**
6311
+ * Turns a free-text query into real borsheims.com product page URLs — the LOCATOR getProduct
6312
+ * and configureRing need — by matching every query token against the site's own sitemap.xml
6313
+ * (~16,000 URLs, no login, no browser). Returns [] for a query nothing matches, an honest
6314
+ * empty result.
6315
+ */
6316
+ searchProducts(query: string): Promise<BorsheimsSearchResult[]>;
6317
+
6318
+ /**
6319
+ * Reads one product's real, live price straight off its product page's own embedded data
6320
+ * (mivaJS.product) — the same JSON the page's own components render from, including any active
6321
+ * discount. Takes the full borsheims.com product page URL. THROWS rather than guessing when
6322
+ * the page's own product-data block is missing or unparseable.
6323
+ */
6324
+ getProduct(url: string): Promise<BorsheimsProduct>;
6325
+
6326
+ /**
6327
+ * Composes a setting product page and a diamond/center-stone product page into a priced ring —
6328
+ * setting.price + diamond.price — the same arithmetic the site's own ring builder performs,
6329
+ * plus the ring-builder URL as the handoff to actually configure and buy.
6330
+ */
6331
+ configureRing(args: ConfigureRingArgs): Promise<BorsheimsRingConfiguration>;
6332
+ }
6333
+ }
6334
+
6335
+ declare namespace BowmarkProvider_boxlunch {
6336
+ // ── BoxLunch — the unit's own declarations, verbatim ──
6337
+ interface BoxlunchOffer {
6338
+ sku: string
6339
+ color: string | null
6340
+ size: string | null
6341
+ price: number | null
6342
+ currency: string | null
6343
+ availability: string | null // the site's own schema.org availability URL
6344
+ url: string
6345
+ }
6346
+ interface BoxlunchProduct {
6347
+ name: string
6348
+ url: string
6349
+ image: string | null
6350
+ offers: BoxlunchOffer[]
6351
+ }
6352
+ interface BoxlunchSearchResult {
6353
+ products: BoxlunchProduct[]
6354
+ }
6355
+
6356
+ /**
6357
+ * BoxLunch's own storefront search (boxlunch.com) — licensed pop-culture and entertainment
6358
+ * merch (apparel, figures, accessories, home goods) across every property the store carries,
6359
+ * read straight off the site's own structured search-result data.
6360
+ */
6361
+ interface Unit {
6362
+ /**
6363
+ * Searches boxlunch.com's own storefront for a keyword and returns the real, priced product
6364
+ * results (name, image, per-SKU price/color/size/availability) exactly as the site's own
6365
+ * search page carries them.
6366
+ */
6367
+ search(arg: { query: string }): Promise<BoxlunchSearchResult>;
6368
+ }
6369
+ }
6370
+
5152
6371
  declare namespace BowmarkProvider_boydsleep {
5153
6372
  // ── Boyd Sleep — the unit's own declarations, verbatim ──
5154
6373
  // Boyd Sleep's OWN shapes — not a capability contract.
@@ -5205,6 +6424,43 @@ interface Boydsleep6ZoneResult {
5205
6424
  }
5206
6425
  }
5207
6426
 
6427
+ declare namespace BowmarkProvider_brius {
6428
+ // ── Brava by BRIUS — the unit's own declarations, verbatim ──
6429
+ // Brava's OWN shapes — not a capability contract.
6430
+
6431
+ interface BriusProviderListing {
6432
+ name: string; // e.g. "Embrace Orthodontics"
6433
+ url: string; // the practice's own listing page on bravabraces.com
6434
+ doctorName: string | null;
6435
+ streetAddress: string | null;
6436
+ city: string | null;
6437
+ region: string | null;
6438
+ postalCode: string | null;
6439
+ country: string | null;
6440
+ phone: string | null;
6441
+ website: string | null; // the practice's own external site, when listed
6442
+ }
6443
+
6444
+ interface BriusProviderSearch {
6445
+ query: string;
6446
+ providers: BriusProviderListing[];
6447
+ }
6448
+
6449
+ /**
6450
+ * Brava (by Brius Technologies) hidden lingual braces are sold only through certified
6451
+ * orthodontists — search the site's own find-a-provider locator by zip code or location and
6452
+ * get back real, currently-listed certified practices with address, phone and doctor name.
6453
+ */
6454
+ interface Unit {
6455
+ /**
6456
+ * Runs Brava's own find-a-provider locator search for a zip code or location string and
6457
+ * returns the certified orthodontist practices it lists — name, doctor, address, phone and
6458
+ * website, straight from the site's own current data.
6459
+ */
6460
+ findProviders(query: string): Promise<BriusProviderSearch>;
6461
+ }
6462
+ }
6463
+
5208
6464
  declare namespace BowmarkProvider_brixton {
5209
6465
  // ── Brixton — the unit's own declarations, verbatim ──
5210
6466
  interface BrixtonVariant {
@@ -5327,6 +6583,91 @@ interface BulletproofNearbyStores {
5327
6583
  }
5328
6584
  }
5329
6585
 
6586
+ declare namespace BowmarkProvider_bungalow {
6587
+ // ── Bungalow — the unit's own declarations, verbatim ──
6588
+ interface BungalowMarket {
6589
+ slug: string;
6590
+ displayName: string;
6591
+ region: string;
6592
+ regionCode: string;
6593
+ country: string;
6594
+ countryCode: string;
6595
+ }
6596
+
6597
+ interface BungalowListingSummary {
6598
+ id: string;
6599
+ slug: string;
6600
+ headline: string | null;
6601
+ marketingType: "co_living" | "group_living" | string;
6602
+ numBathrooms: string;
6603
+ sqft: number | null;
6604
+ city: string;
6605
+ neighborhood: string | null;
6606
+ marketSlug: string;
6607
+ marketDisplayName: string;
6608
+ isComingSoon: boolean;
6609
+ }
6610
+
6611
+ interface BungalowSearchResult {
6612
+ listings: BungalowListingSummary[];
6613
+ count: number;
6614
+ totalMatching: number;
6615
+ }
6616
+
6617
+ interface BungalowSearchFilters {
6618
+ marketSlug: string;
6619
+ marketingType?: "co_living" | "group_living";
6620
+ neighborhoodSlug?: string;
6621
+ minPrice?: number;
6622
+ maxPrice?: number;
6623
+ petFriendly?: boolean;
6624
+ limit?: number;
6625
+ }
6626
+
6627
+ interface BungalowListingDetail {
6628
+ id: string;
6629
+ slug: string;
6630
+ headline: string | null;
6631
+ marketingType: "co_living" | "group_living" | string;
6632
+ totalRoomCount: number;
6633
+ availableRoomCount: number;
6634
+ earliestAvailableDate: string | null;
6635
+ roomPrices: number[];
6636
+ fullPropertyPrice: number | null;
6637
+ sqft: number | null;
6638
+ numBathrooms: string;
6639
+ amenities: unknown;
6640
+ matterportUrl: string | null;
6641
+ activePromotions: string[];
6642
+ isMeetAndGreetAvailable: boolean;
6643
+ showingsAvailable: { virtual: string | null; inPerson: string | null };
6644
+ }
6645
+
6646
+ /**
6647
+ * Bungalow's live, priced room and whole-home rental inventory and tour-booking availability,
6648
+ * read straight off their own documented API — no key, no browser.
6649
+ */
6650
+ interface Unit {
6651
+ /**
6652
+ * Lists every market Bungalow currently operates in, with the slug every other function's
6653
+ * marketSlug argument takes.
6654
+ */
6655
+ listMarkets(): Promise<{ markets: BungalowMarket[] }>;
6656
+
6657
+ /**
6658
+ * Searches live, priced room and whole-home rental listings in one market, filterable by
6659
+ * price, neighborhood and marketing type.
6660
+ */
6661
+ searchListings(filters: BungalowSearchFilters): Promise<BungalowSearchResult>;
6662
+
6663
+ /**
6664
+ * Returns one listing's full detail — room-level rent and availability, amenities, promotions
6665
+ * and tour-booking availability.
6666
+ */
6667
+ getListing(slug: string): Promise<BungalowListingDetail>;
6668
+ }
6669
+ }
6670
+
5330
6671
  declare namespace BowmarkProvider_bykoket {
5331
6672
  // ── KOKET — the unit's own declarations, verbatim ──
5332
6673
  interface KoketProductSummary {
@@ -5459,6 +6800,141 @@ interface byltbasicsPackHandoff {
5459
6800
  }
5460
6801
  }
5461
6802
 
6803
+ declare namespace BowmarkProvider_cabinsforyou {
6804
+ // ── Cabins For You — the unit's own declarations, verbatim ──
6805
+ // Cabins For You's OWN shapes — not a capability contract.
6806
+
6807
+ interface CabinsforyouListing {
6808
+ name: string;
6809
+ url: string;
6810
+ nightlyRate: number | null;
6811
+ originalNightlyRate: number | null;
6812
+ bedrooms: number;
6813
+ bathrooms: number;
6814
+ sleeps: number;
6815
+ sqft: number | null;
6816
+ petsAllowed: boolean;
6817
+ rating: number | null;
6818
+ reviewCount: number | null;
6819
+ imageUrl: string | null;
6820
+ bookCabinUrl: string;
6821
+ }
6822
+
6823
+ interface CabinsforyouSearchResult {
6824
+ resultCount: number;
6825
+ cabins: CabinsforyouListing[];
6826
+ }
6827
+
6828
+ interface CabinsforyouCabinDetail {
6829
+ name: string;
6830
+ url: string;
6831
+ city: string;
6832
+ bedrooms: number | null;
6833
+ bathrooms: number | null;
6834
+ sleeps: number | null;
6835
+ parking: string | null;
6836
+ petsAllowed: boolean | null;
6837
+ amenities: string[];
6838
+ rating: number | null;
6839
+ reviewCount: number | null;
6840
+ description: string;
6841
+ unitId: string | null;
6842
+ bookingQuoteUrl: string; // the WRITE handoff this provider never performs
6843
+ }
6844
+
6845
+ interface CabinsforyouSearchArgs {
6846
+ checkIn: string; // MM/DD/YYYY
6847
+ checkOut: string; // MM/DD/YYYY
6848
+ guests?: number;
6849
+ bedrooms?: number;
6850
+ }
6851
+
6852
+ /**
6853
+ * Cabins For You's live Smoky Mountain cabin-availability search (Check In / Check Out /
6854
+ * Guests / Bedrooms) off the site's own search page — real priced results, not a stale
6855
+ * aggregator mirror — plus one cabin's own amenities, room counts and booking-quote handoff.
6856
+ */
6857
+ interface Unit {
6858
+ /**
6859
+ * Runs Cabins For You's own homepage cabin-availability search and returns the real matching
6860
+ * cabins, priced. `args.checkIn` / `args.checkOut` are MM/DD/YYYY (the site's own date
6861
+ * format); `guests` and `bedrooms` are optional minimums.
6862
+ */
6863
+ search(args: CabinsforyouSearchArgs): Promise<CabinsforyouSearchResult>;
6864
+
6865
+ /**
6866
+ * Reads one cabin's own listing page — room counts, pet policy, amenities, description and
6867
+ * rating, plus the booking-quote handoff. `url` is a listing URL from a `search` result.
6868
+ */
6869
+ getCabinDetail(url: string): Promise<CabinsforyouCabinDetail>;
6870
+ }
6871
+ }
6872
+
6873
+ declare namespace BowmarkProvider_caliberhealth {
6874
+ // ── Caliber Healthcare Solutions — the unit's own declarations, verbatim ──
6875
+ // Caliber Healthcare Solutions' OWN shapes — not a capability contract.
6876
+
6877
+ interface CaliberhealthJobListing {
6878
+ title: string;
6879
+ jobId: string;
6880
+ postedDate: string;
6881
+ specialty: string;
6882
+ credentialType: string | null;
6883
+ state: string | null;
6884
+ zip: string | null;
6885
+ url: string;
6886
+ }
6887
+
6888
+ interface CaliberhealthSearchResult {
6889
+ jobs: CaliberhealthJobListing[];
6890
+ jobsOnPage: number;
6891
+ page: number;
6892
+ hasMorePages: boolean;
6893
+ }
6894
+
6895
+ interface CaliberhealthSearchArgs {
6896
+ specialty?: string;
6897
+ location?: string;
6898
+ keywords?: string;
6899
+ page?: number;
6900
+ }
6901
+
6902
+ interface CaliberhealthJobDetail {
6903
+ title: string;
6904
+ jobId: string;
6905
+ postedDate: string;
6906
+ specialty: string;
6907
+ location: string;
6908
+ facilityType: string | null;
6909
+ schedule: string | null;
6910
+ assignmentDetails: string | null;
6911
+ assignmentLength: string | null;
6912
+ aboutBlurb: string;
6913
+ url: string;
6914
+ applyUrl: string; // the WRITE handoff this provider never performs
6915
+ }
6916
+
6917
+ /**
6918
+ * Caliber Healthcare Solutions' live locum-tenens job board (/healthcare-jobs) off the site's
6919
+ * own server-rendered listings — real open jobs filterable by specialty/location/keywords, not
6920
+ * a stale mirror — plus one job's own full detail and apply handoff.
6921
+ */
6922
+ interface Unit {
6923
+ /**
6924
+ * Runs Caliber Healthcare Solutions' own live job-board search and returns the real open
6925
+ * locum-tenens jobs on the requested page, filtered by specialty/location/keywords. Call again
6926
+ * with an incremented `page` while `hasMorePages` is true.
6927
+ */
6928
+ search(args?: CaliberhealthSearchArgs): Promise<CaliberhealthSearchResult>;
6929
+
6930
+ /**
6931
+ * Reads one job's own detail page — specialty, location, facility type, schedule, assignment
6932
+ * length, and the apply handoff. `url` is a job URL from a `search` result.
6933
+ */
6934
+ getJob(url: string): Promise<CaliberhealthJobDetail>;
6935
+ }
6936
+ }
6937
+
5462
6938
  declare namespace BowmarkProvider_califloors {
5463
6939
  // ── CALI — the unit's own declarations, verbatim ──
5464
6940
  // CALI's OWN shapes — not a capability contract.
@@ -5506,6 +6982,13 @@ interface CaliProductDetail extends CaliProduct {
5506
6982
 
5507
6983
  declare namespace BowmarkProvider_camelcamelcamel {
5508
6984
  // ── camelcamelcamel — the unit's own declarations, verbatim ──
6985
+ interface CamelSearchResult {
6986
+ asin: string;
6987
+ title: string;
6988
+ currentPrice: number | null;
6989
+ url: string;
6990
+ }
6991
+
5509
6992
  interface CamelPriceStat {
5510
6993
  price: number | null;
5511
6994
  date: string | null;
@@ -5533,6 +7016,13 @@ interface CamelPriceHistory {
5533
7016
  * for.
5534
7017
  */
5535
7018
  interface Unit {
7019
+ /**
7020
+ * Runs camelcamelcamel's own Amazon-product search and returns each hit's ASIN, title and
7021
+ * current price — the locator this provider was missing: `getPriceHistory` takes an ASIN, and
7022
+ * this is how a caller holding only a shopper's words finds one.
7023
+ */
7024
+ search(query: string): Promise<CamelSearchResult[]>;
7025
+
5536
7026
  /**
5537
7027
  * Reads camelcamelcamel's independently-tracked Amazon price history for one ASIN — the site's
5538
7028
  * own lowest-ever/highest-ever/current/average figures, each dated, for the Amazon,
@@ -5816,6 +7306,139 @@ interface CarePatrolFindLocalAdvisorResult {
5816
7306
  }
5817
7307
  }
5818
7308
 
7309
+ declare namespace BowmarkProvider_carmelrealtycompany {
7310
+ // ── Carmel Realty Company — the unit's own declarations, verbatim ──
7311
+ interface carmelrealtycompanyListingSummary {
7312
+ url: string;
7313
+ slug: string | null;
7314
+ city: string;
7315
+ price: string;
7316
+ priceValue: number | null;
7317
+ latitude: number;
7318
+ longitude: number;
7319
+ }
7320
+ interface carmelrealtycompanyListing {
7321
+ slug: string;
7322
+ url: string;
7323
+ address: string;
7324
+ sold: boolean;
7325
+ price: string;
7326
+ priceValue: number | null;
7327
+ mlsNumber: string | null;
7328
+ bedrooms: string | null;
7329
+ bathrooms: string | null;
7330
+ lotSize: string | null;
7331
+ squareFootage: string | null;
7332
+ }
7333
+
7334
+ /**
7335
+ * Runs Carmel Realty Company's own regional listing search and listing-detail pages and
7336
+ * returns real, live MLS-backed rows — address, price, MLS number, beds/baths, coordinates —
7337
+ * for Carmel-by-the-Sea, Carmel Valley, Monterey and Pacific Grove.
7338
+ */
7339
+ interface Unit {
7340
+ /**
7341
+ * Runs one of Carmel Realty Company's own regional listing-search pages and returns every
7342
+ * active listing it maps: the listing's own detail-page URL (and a slug you can pass to
7343
+ * `getListing`, `null` for the rare listing that points at a dedicated marketing microsite
7344
+ * instead), city, the site's own formatted price plus a parsed `priceValue`, and coordinates.
7345
+ * Rows come straight off the page's live Mapbox data, price-descending as the site itself
7346
+ * orders them.
7347
+ */
7348
+ searchListings(region: "carmel" | "carmel-valley" | "monterey" | "pacific-grove" | "global"): Promise<carmelrealtycompanyListingSummary[]>;
7349
+
7350
+ /**
7351
+ * Fetches one Carmel Realty Company listing detail page by its slug (the `slug` a
7352
+ * `searchListings` row returns, e.g. "5466-quail-way-carmel") and returns its address,
7353
+ * sold/active status, price, MLS number, bedrooms, bathrooms, lot size and square footage —
7354
+ * the site's own live data, not a cached copy.
7355
+ */
7356
+ getListing(slug: string): Promise<carmelrealtycompanyListing>;
7357
+ }
7358
+ }
7359
+
7360
+ declare namespace BowmarkProvider_carolefabrics {
7361
+ // ── Carole Fabrics — the unit's own declarations, verbatim ──
7362
+ interface CarolefabricsSearchArgs {
7363
+ category: "fabric" | "trim";
7364
+ keyword: string;
7365
+ }
7366
+ interface CarolefabricsItem {
7367
+ patternName: string;
7368
+ colorName: string | null;
7369
+ sku: string;
7370
+ book: string;
7371
+ imageUrl: string;
7372
+ promoCode: string | null;
7373
+ promoLabel: string | null;
7374
+ }
7375
+ interface CarolefabricsSearchResult {
7376
+ category: "fabric" | "trim";
7377
+ keyword: string;
7378
+ items: CarolefabricsItem[];
7379
+ totalMatches: number;
7380
+ }
7381
+
7382
+ /**
7383
+ * Carole Fabrics' own CaroleNet trade-catalog search (carolenet.com) — a live keyword search
7384
+ * over their real fabric or trim catalog, returning actual matching patterns/colorways with
7385
+ * SKU, book and any active promotion. Public, no login required.
7386
+ */
7387
+ interface Unit {
7388
+ /**
7389
+ * Runs a keyword search against CaroleNet's live fabric or trim catalog and returns the real
7390
+ * matching patterns/colorways — pattern name, colorway, SKU, book, image and any active
7391
+ * promotion — plus the total match count.
7392
+ */
7393
+ search(args: CarolefabricsSearchArgs): Promise<CarolefabricsSearchResult>;
7394
+ }
7395
+ }
7396
+
7397
+ declare namespace BowmarkProvider_carpetlandusa {
7398
+ // ── Carpetland USA — the unit's own declarations, verbatim ──
7399
+ // Carpetland USA's OWN shapes — not a capability contract.
7400
+
7401
+ interface CarpetlandCategory { id: number; name: string; slug: string; count: number }
7402
+
7403
+ interface CarpetlandProductSummary { slug: string; title: string; url: string }
7404
+
7405
+ interface CarpetlandProductDetail extends CarpetlandProductSummary {
7406
+ style: string | null;
7407
+ color: string | null;
7408
+ material: string | null; // e.g. "Rigid – Plank"
7409
+ sqFtPerCarton: number | null;
7410
+ roomDescription: string | null; // e.g. "12'x9' Room / 108 sq ft"
7411
+ installedPrice: string | null; // e.g. "$722"
7412
+ installedPriceValue: number | null;
7413
+ callForPricing: boolean; // true when the site has no posted price for this SKU
7414
+ }
7415
+
7416
+ /**
7417
+ * Carpetland USA's own flooring catalog — the category taxonomy, a keyword search over any
7418
+ * category's live listing, and one SKU's real style/color/material and its computed installed
7419
+ * price for a standard 12'x9' room, straight off the site's own WordPress REST API.
7420
+ */
7421
+ interface Unit {
7422
+ /**
7423
+ * Carpetland USA's own product-catalog taxonomy — every category, its slug and its live
7424
+ * product count.
7425
+ */
7426
+ listCategories(): Promise<CarpetlandCategory[]>;
7427
+
7428
+ /**
7429
+ * The first page (up to 100) of the catalog, or one category's listing (e.g. "waterproof-lvp"
7430
+ * from listCategories), optionally filtered by a keyword against the product title.
7431
+ */
7432
+ searchProducts(categorySlug?: string, keyword?: string): Promise<{ products: CarpetlandProductSummary[]; category: CarpetlandCategory | null }>;
7433
+
7434
+ /**
7435
+ * One product's own catalog page — its real style, color, material, coverage per carton and,
7436
+ * when the SKU has one, the computed installed price for a standard 12'x9' room.
7437
+ */
7438
+ getProduct(slugOrUrl: string): Promise<CarpetlandProductDetail>;
7439
+ }
7440
+ }
7441
+
5819
7442
  declare namespace BowmarkProvider_cars {
5820
7443
  // ── Cars.com — the unit's own declarations, verbatim ──
5821
7444
  interface carsListing {
@@ -5923,6 +7546,348 @@ interface carsVehicleValue {
5923
7546
  }
5924
7547
  }
5925
7548
 
7549
+ declare namespace BowmarkProvider_carusohomes {
7550
+ // ── Caruso Homes — the unit's own declarations, verbatim ──
7551
+ interface CarusoCommunity {
7552
+ name: string;
7553
+ url: string;
7554
+ listingId: string | null;
7555
+ streetAddress: string | null;
7556
+ city: string | null;
7557
+ state: string | null;
7558
+ postalCode: string | null;
7559
+ latitude: number | null;
7560
+ longitude: number | null;
7561
+ description: string;
7562
+ images: string[];
7563
+ startingPriceLabel: string | null;
7564
+ }
7565
+
7566
+ interface CarusoFloorPlan {
7567
+ name: string;
7568
+ url: string;
7569
+ listingId: string | null;
7570
+ collection: string | null;
7571
+ priceLabel: string | null;
7572
+ priceValue: number | null;
7573
+ beds: number | null;
7574
+ baths: number | null;
7575
+ sqft: number | null;
7576
+ buildOnYourLot: boolean;
7577
+ }
7578
+
7579
+ interface CarusoFormFieldOption {
7580
+ value: string;
7581
+ label: string;
7582
+ }
7583
+
7584
+ interface CarusoFormField {
7585
+ name: string;
7586
+ label: string;
7587
+ type: "text" | "email" | "tel" | "date" | "checkbox" | "select";
7588
+ required: boolean;
7589
+ options?: CarusoFormFieldOption[];
7590
+ }
7591
+
7592
+ interface CarusoTourAppointmentSchema {
7593
+ entryUrl: string;
7594
+ communityName: string;
7595
+ itemOfInterestId: string;
7596
+ fields: CarusoFormField[];
7597
+ }
7598
+
7599
+ interface SearchCommunitiesArgs {
7600
+ market: string; // e.g. "md/maryland", "nc/charlotte" — the path segment carusohomes.com uses under /new-homes/<market>/
7601
+ }
7602
+
7603
+ interface SearchFloorPlansArgs {
7604
+ market: string;
7605
+ buildOnYourLot?: boolean; // true -> the market's Build-on-Your-Lot listing; false/omitted -> community-attached plans
7606
+ }
7607
+
7608
+ interface GetTourAppointmentSchemaArgs {
7609
+ communityUrl: string; // a community URL from searchCommunities, e.g. "https://www.carusohomes.com/new-homes/md/ellicott-city/mill-creek/18641/"
7610
+ }
7611
+
7612
+ interface AssembleTourRequestArgs {
7613
+ communityUrl: string;
7614
+ firstName: string;
7615
+ lastName: string;
7616
+ email: string;
7617
+ phone?: string;
7618
+ desiredPriceRangeMinimum?: string;
7619
+ desiredPriceRangeMaximum?: string;
7620
+ whenToMove?: string;
7621
+ preferredAppointmentDate?: string; // "YYYY-MM-DD"
7622
+ message?: string;
7623
+ textOptIn?: boolean;
7624
+ }
7625
+
7626
+ interface AssembledTourRequest {
7627
+ valid: boolean;
7628
+ errors: string[];
7629
+ entryUrl: string;
7630
+ formFields: Record<string, string>;
7631
+ summary: string;
7632
+ }
7633
+
7634
+ /**
7635
+ * Caruso Homes' own live community and Build-on-Your-Lot floor-plan listings, plus each
7636
+ * community's own 'Schedule a Tour' form — reads the real field schema and assembles a
7637
+ * validated, ready-to-submit tour request. Never submits it.
7638
+ */
7639
+ interface Unit {
7640
+ /**
7641
+ * Every live community on one of Caruso Homes' market listing pages — name, address, geo,
7642
+ * image, description and the site's own best-effort starting-price band.
7643
+ */
7644
+ searchCommunities(args: SearchCommunitiesArgs): Promise<CarusoCommunity[]>;
7645
+
7646
+ /**
7647
+ * Every floor-plan card on a market's listing — community-attached by default, or
7648
+ * Build-on-Your-Lot when buildOnYourLot is true — with price, beds, baths and square footage.
7649
+ */
7650
+ searchFloorPlans(args: SearchFloorPlansArgs): Promise<CarusoFloorPlan[]>;
7651
+
7652
+ /**
7653
+ * One community's own live 'Schedule a Tour' form: every visible field (type, required-ness,
7654
+ * real enumerated options) plus that community's item_of_interest_id.
7655
+ */
7656
+ getTourAppointmentSchema(args: GetTourAppointmentSchemaArgs): Promise<CarusoTourAppointmentSchema>;
7657
+
7658
+ /**
7659
+ * Validates a caller's tour request against a community's live form schema and maps it onto
7660
+ * the site's own field names, ready to submit to /xhr/schedule-appointment/. Never submits it.
7661
+ */
7662
+ assembleTourRequest(args: AssembleTourRequestArgs): Promise<AssembledTourRequest>;
7663
+ }
7664
+ }
7665
+
7666
+ declare namespace BowmarkProvider_casadragones {
7667
+ // ── Casa Dragones — the unit's own declarations, verbatim ──
7668
+ // Casa Dragones' OWN shapes — not a capability contract.
7669
+
7670
+ interface CasaDragonesProductSummary {
7671
+ handle: string; // the key getProduct takes
7672
+ title: string;
7673
+ url: string;
7674
+ }
7675
+
7676
+ interface CasaDragonesProduct {
7677
+ handle: string;
7678
+ title: string;
7679
+ url: string; // the real product page — the honest handoff to buy/checkout
7680
+ price: number; // dollars, the site's own real price
7681
+ description: string;
7682
+ }
7683
+
7684
+ interface CasaDragonesRetailer {
7685
+ id: string;
7686
+ name: string;
7687
+ address: string;
7688
+ city: string;
7689
+ state: string;
7690
+ latitude: number;
7691
+ longitude: number;
7692
+ distanceMiles: number;
7693
+ categories: string[]; // e.g. "RETAILER", "BAR/RESTAURANT"
7694
+ }
7695
+
7696
+ interface CasaDragonesNearbyRetailers {
7697
+ zip: string;
7698
+ radiusMiles: number;
7699
+ retailers: CasaDragonesRetailer[];
7700
+ }
7701
+
7702
+ /**
7703
+ * Casa Dragones' real sipping-tequila catalog and real product pricing straight off the site,
7704
+ * plus its real store locator (StoreRocket) for nearby retailers/bars/restaurants that
7705
+ * actually carry it — the two things ChatGPT cannot do today (it guesses at prices and asks
7706
+ * the user to run the locator manually).
7707
+ */
7708
+ interface Unit {
7709
+ /**
7710
+ * Lists Casa Dragones' real sipping-tequila catalog off their own product listing page,
7711
+ * optionally filtered by a free-text query matched against the title.
7712
+ */
7713
+ listProducts(query?: string): Promise<CasaDragonesProductSummary[]>;
7714
+
7715
+ /**
7716
+ * Reads one product's real title, real price and real description straight off its live page.
7717
+ * THROWS on an unknown handle, naming listProducts() as the way to find real ones. `url` is
7718
+ * the honest checkout handoff — casadragones.com's own add-to-cart button lives on that exact
7719
+ * page.
7720
+ */
7721
+ getProduct(handle: string): Promise<CasaDragonesProduct>;
7722
+
7723
+ /**
7724
+ * Runs Casa Dragones' own real-time store locator (StoreRocket) for a US ZIP and returns real
7725
+ * nearby retailers/bars/restaurants that carry Casa Dragones, distance-ranked in miles — never
7726
+ * a guess at which stores might stock it. `radiusMiles` defaults to 50 and is capped at 500;
7727
+ * an honestly empty list means nothing in Casa Dragones' own tracked network is that close.
7728
+ */
7729
+ findNearbyRetailers(zip: string, radiusMiles?: number): Promise<CasaDragonesNearbyRetailers>;
7730
+ }
7731
+ }
7732
+
7733
+ declare namespace BowmarkProvider_cbhhomes {
7734
+ // ── CBH Homes — the unit's own declarations, verbatim ──
7735
+ interface CbhListing {
7736
+ id: number;
7737
+ mls: number;
7738
+ url: string;
7739
+ image: string | null;
7740
+ status: string;
7741
+ isSold: boolean;
7742
+ isReserved: boolean;
7743
+ address: string;
7744
+ city: string;
7745
+ filterCity: string;
7746
+ county: string | null;
7747
+ state: string;
7748
+ postalCode: string;
7749
+ latitude: number | null;
7750
+ longitude: number | null;
7751
+ floorPlanId: string | null;
7752
+ floorPlanName: string | null;
7753
+ communityId: string | null;
7754
+ communityName: string | null;
7755
+ beds: number | null;
7756
+ baths: number | null;
7757
+ garageCapacity: number | null;
7758
+ sqft: number | null;
7759
+ price: number;
7760
+ priceMonthly: number | null;
7761
+ amenities: string[];
7762
+ salesCenter: string | null;
7763
+ schoolDistrict: string | null;
7764
+ daysOnMarket: number | null;
7765
+ }
7766
+
7767
+ interface SearchListingsArgs {
7768
+ city?: string; // the site's own filter-city band, e.g. "Meridian (North)"
7769
+ bedrooms?: number;
7770
+ bathrooms?: number;
7771
+ priceMin?: number;
7772
+ priceMax?: number;
7773
+ sqftMin?: number;
7774
+ sqftMax?: number;
7775
+ moveInReady?: boolean;
7776
+ count?: number; // default 50
7777
+ page?: number;
7778
+ }
7779
+
7780
+ interface CbhFormFieldOption {
7781
+ value: string;
7782
+ label: string;
7783
+ }
7784
+
7785
+ interface CbhFormField {
7786
+ name: string;
7787
+ label: string;
7788
+ type: "text" | "email" | "tel" | "checkbox" | "select" | "textarea";
7789
+ required: boolean;
7790
+ options?: CbhFormFieldOption[];
7791
+ }
7792
+
7793
+ interface CbhInquiryFormSchema {
7794
+ entryUrl: string;
7795
+ fields: CbhFormField[];
7796
+ }
7797
+
7798
+ interface GetInquiryFormSchemaArgs {
7799
+ pageUrl?: string; // a listing's own url from searchListings, or omit for the homepage form
7800
+ }
7801
+
7802
+ interface AssembleInquiryArgs {
7803
+ pageUrl?: string; // a listing's own url from searchListings pre-fills the form's hidden bookkeeping for that home; omit for a general inquiry
7804
+ firstName: string;
7805
+ lastName: string;
7806
+ email: string;
7807
+ phone: string;
7808
+ cityOfInterest: string; // must be one of getInquiryFormSchema's own options
7809
+ priceRange: string; // must be one of getInquiryFormSchema's own options
7810
+ message?: string;
7811
+ street?: string;
7812
+ city?: string;
7813
+ state?: string;
7814
+ zip?: string;
7815
+ howClose?: string;
7816
+ textOptIn?: boolean;
7817
+ }
7818
+
7819
+ interface AssembledInquiry {
7820
+ valid: boolean;
7821
+ errors: string[];
7822
+ entryUrl: string;
7823
+ formFields: Record<string, string>;
7824
+ summary: string;
7825
+ }
7826
+
7827
+ /**
7828
+ * CBH Homes' own live home-search endpoint (city, price, beds, baths) plus the site's own 'get
7829
+ * in touch about a home' inquiry form — reads the real field schema and assembles a validated,
7830
+ * ready-to-submit inquiry for one listing. Never submits it.
7831
+ */
7832
+ interface Unit {
7833
+ /**
7834
+ * Every home matching a city/price/beds/baths filter, straight off CBH Homes' own home-search
7835
+ * endpoint — address, price, floor plan, community, amenities and days on market.
7836
+ */
7837
+ searchListings(args: SearchListingsArgs): Promise<CbhListing[]>;
7838
+
7839
+ /**
7840
+ * The site's own live 'get in touch about a home' form: every visible field (type,
7841
+ * required-ness, real enumerated City of Interest / Price Range options).
7842
+ */
7843
+ getInquiryFormSchema(args: GetInquiryFormSchemaArgs): Promise<CbhInquiryFormSchema>;
7844
+
7845
+ /**
7846
+ * Validates a caller's inquiry against the form's live schema and maps it onto the site's own
7847
+ * field names, pre-filling a supplied listing's own hidden bookkeeping — ready to submit.
7848
+ * Never submits it.
7849
+ */
7850
+ assembleInquiry(args: AssembleInquiryArgs): Promise<AssembledInquiry>;
7851
+ }
7852
+ }
7853
+
7854
+ declare namespace BowmarkProvider_champxpress {
7855
+ // ── Champion Xpress Carwash — the unit's own declarations, verbatim ──
7856
+ // Champion Xpress's OWN shapes — not a capability contract.
7857
+
7858
+ interface ChampxpressLocation { slug: string; displayName: string; state: string }
7859
+
7860
+ interface ChampxpressPlanQuote {
7861
+ location: ChampxpressLocation;
7862
+ planName: string;
7863
+ price: number;
7864
+ currency: "USD";
7865
+ checkoutUrl: string; // preseeded add-to-cart link; not visited by this provider
7866
+ }
7867
+
7868
+ /**
7869
+ * Reads Champion Xpress Carwash's own live "25 for Life" MVP Unlimited membership picker —
7870
+ * every currently enrolled wash location, and for a chosen one, the real current monthly price
7871
+ * plus a preseeded add-to-cart link — the way the site's own state/location select computes
7872
+ * it, real-time.
7873
+ */
7874
+ interface Unit {
7875
+ /**
7876
+ * Lists every wash location currently enrolled in Champion Xpress's "25 for Life" MVP
7877
+ * Unlimited membership plan, read live off the plan page's own state/location select.
7878
+ */
7879
+ listLocations(): Promise<ChampxpressLocation[]>;
7880
+
7881
+ /**
7882
+ * Runs the site's own price computation for one location — `location` is a free-text name or
7883
+ * slug from `listLocations()`, e.g. "El Paso" or "el-paso-tx-alameda" — and returns the real
7884
+ * current monthly price plus a preseeded add-to-cart URL. THROWS when the location matches
7885
+ * zero or more than one enrolled location, naming the current candidates either way.
7886
+ */
7887
+ getPlanQuote(location: string): Promise<ChampxpressPlanQuote>;
7888
+ }
7889
+ }
7890
+
5926
7891
  declare namespace BowmarkProvider_chantecaille {
5927
7892
  // ── Chantecaille — the unit's own declarations, verbatim ──
5928
7893
  // Chantecaille's OWN shapes — not a capability contract.
@@ -6169,6 +8134,48 @@ interface ChesmarSearchFilters {
6169
8134
  }
6170
8135
  }
6171
8136
 
8137
+ declare namespace BowmarkProvider_chipotle {
8138
+ // ── Chipotle — the unit's own declarations, verbatim ──
8139
+ interface ChipotleCustomization {
8140
+ id: number;
8141
+ name: string;
8142
+ }
8143
+
8144
+ interface ChipotleContentItem {
8145
+ itemId: string;
8146
+ itemName: string;
8147
+ itemType: string;
8148
+ defaultContent: boolean;
8149
+ customizations: ChipotleCustomization[];
8150
+ }
8151
+
8152
+ interface ChipotleBowlOption {
8153
+ itemId: string;
8154
+ itemName: string;
8155
+ primaryFillingName: string | null;
8156
+ contents: ChipotleContentItem[];
8157
+ }
8158
+
8159
+ interface ChipotleBowlBuilderResult {
8160
+ source: string;
8161
+ pricesAvailable: false;
8162
+ proteins: ChipotleBowlOption[];
8163
+ }
8164
+
8165
+ /**
8166
+ * Chipotle's own burrito-bowl builder — every protein with its full rice/beans/salsa/topping
8167
+ * list, straight off the site's ordering API.
8168
+ */
8169
+ interface Unit {
8170
+ /**
8171
+ * Every burrito-bowl protein option and its full rice/beans/salsa/topping build, straight off
8172
+ * chipotle.com's own ordering API. Prices are not in this document (Chipotle prices per
8173
+ * restaurant) — pricesAvailable is always false.
8174
+ */
8175
+ getBowlBuilder(options?: { protein?: string }): Promise<ChipotleBowlBuilderResult>;
8176
+ }
8177
+ }
8178
+
6172
8179
  declare namespace BowmarkProvider_chriscraft {
6173
8180
  // ── Chris-Craft — the unit's own declarations, verbatim ──
6174
8181
  // Chris-Craft's OWN shapes — not a capability contract.
@@ -6444,24 +8451,43 @@ interface ClasspassSearchQuery {
6444
8451
  /** Centre of the search, decimal degrees. */
6445
8452
  lat: number;
6446
8453
  lon: number;
6447
- /** Search radius (default 1, clamped to 1-50). */
8454
+ /** Search radius (default 1, clamped to 1-50); turned into a bounding box —
8455
+ * the origin takes no radius field of its own on this route. */
6448
8456
  radius: number;
6449
8457
  /** "mi" (default) or "km". */
6450
8458
  radiusUnits?: "mi" | "km";
6451
8459
  /** First day, YYYY-MM-DD. Defaults to TODAY (UTC date). */
6452
8460
  date?: string;
6453
- /** Opaque page token from a previous result's `cursor`. */
6454
- cursor?: string;
8461
+ }
8462
+
8463
+ /** One row of a location search — NOT a ClasspassVenue. This endpoint publishes
8464
+ * a smaller, differently-shaped record (no address, no time zone, no
8465
+ * amenities); follow up with getStudio(alias) for the full profile. */
8466
+ interface ClasspassSearchVenue {
8467
+ id: number;
8468
+ alias: string;
8469
+ name: string;
8470
+ /** The qualifier for a chain branch ("South Charlotte"). Absent on most
8471
+ * independent studios in this response — a gap in what the endpoint
8472
+ * publishes, not a parsing miss. */
8473
+ locationName: string | null;
8474
+ description: string | null;
8475
+ activities: string[];
8476
+ /** Null when the site has nothing to show yet. */
8477
+ ratingAverage: number | null;
8478
+ /** The site's OWN display string ("30000+", "3", "0") — never coerced to a
8479
+ * number, since past a threshold the site itself only publishes a floor. */
8480
+ ratingCountDisplay: string | null;
8481
+ latitude: number;
8482
+ longitude: number;
8483
+ /** Largest real photo; ClassPass's shared placeholder is dropped. */
8484
+ photo: string | null;
6455
8485
  }
6456
8486
 
6457
8487
  interface ClasspassSearchResult {
6458
- results: ClasspassVenue[];
6459
- /** Opaque page token. Pass back as `query.cursor`; null when the last page is reached. */
6460
- cursor: string | null;
6461
- /** The origin's own session id — stable across pages of one search. */
8488
+ results: ClasspassSearchVenue[];
8489
+ /** The origin's own session id for this search. */
6462
8490
  searchId: string;
6463
- /** Always null: the origin does not publish a total. */
6464
- totalHits: number | null;
6465
8491
  /** What this function did to the caller's query (defaults applied). */
6466
8492
  warnings: string[];
6467
8493
  }
@@ -6476,24 +8502,21 @@ interface ClasspassSearchResult {
6476
8502
  */
6477
8503
  interface Unit {
6478
8504
  /**
6479
- * ClassPass's own location search — POST lat/lon/radius and read back the venues in range,
6480
- * with their identity, address, coordinates, IANA time zone, the activities the venue teaches,
6481
- * amenities, ratings, distance and the practical details a person needs to decide which to
6482
- * open. `query.lat` and `query.lon` are required (decimal degrees, finite, in range);
6483
- * `query.radius` defaults to 1 and is clamped to 1-50; `query.radiusUnits` is `mi` (default)
6484
- * or `km`; `query.date` is `YYYY-MM-DD` and defaults to TODAY (UTC). Pagination: the response
6485
- * carries `cursor` (the base64 page token) and `searchId`; pass `cursor` back verbatim as
6486
- * `query.cursor` on the next call the body's shape is identical. One call returns up to 50
6487
- * venues; the origin does not publish a total count, so `totalHits` is always `null` and the
6488
- * caller pages until `cursor` is also null. Returns `warnings` whenever the function did
6489
- * anything to the caller's query (radius defaulted, date defaulted) so a caller rendering the
6490
- * result knows exactly what shape their input landed in. Each venue block carries `activities`
6491
- * populated (the search response's `schedules[].venue.activities` is a comma-joined string the
6492
- * parser splits), which `getSchedule`'s venue block does NOT have on a day the studio
6493
- * publishes nothing a real difference, not an inconsistency. **`query` shape today:** only
6494
- * lat/lon/radius/radiusUnits/date/cursor are honored. The help center's rich facets (text
6495
- * search, activity filter, time-of-day, credit-price band, neighbourhood) are DECLARED on
6496
- * `search` but NOT WIRED — see manifest `notImplemented`.
8505
+ * ClassPass's own location search — read back the fitness, wellness AND beauty venues within
8506
+ * `query.radius` of `query.lat`/`query.lon`, with their identity, coordinates, the activities
8507
+ * each teaches, rating, a description and a photo. `query.lat` and `query.lon` are required
8508
+ * (decimal degrees, finite, in range); `query.radius` defaults to 1 and is clamped to 1-50;
8509
+ * `query.radiusUnits` is `mi` (default) or `km`; `query.date` is `YYYY-MM-DD` and defaults to
8510
+ * TODAY (UTC) this function turns lat/lon/radius into a bounding box itself, since the
8511
+ * origin takes no radius field of its own on this route. One call returns EVERY venue inside
8512
+ * that box (226 measured on a 5 mi Charlotte box) there is no pagination and no `cursor`;
8513
+ * ask for a wider radius for more. Returns `warnings` whenever the function did anything to
8514
+ * the caller's query (radius defaulted, date defaulted) so a caller rendering the result knows
8515
+ * exactly what shape their input landed in. Each result is NOT a full profile — no address, no
8516
+ * time zone, no amenities, `ratingCountDisplay` is the site's own capped string ('30000+')
8517
+ * rather than a real count — follow up with `getStudio(alias)` for that. This is the entry
8518
+ * point to essentially everything else in this provider a studio id or class id is not
8519
+ * knowable ahead of a search.
6497
8520
  */
6498
8521
  search(query: ClasspassSearchQuery): Promise<ClasspassSearchResult>;
6499
8522
 
@@ -6539,6 +8562,90 @@ interface ClasspassSearchResult {
6539
8562
  }
6540
8563
  }
6541
8564
 
8565
+ declare namespace BowmarkProvider_claude_com {
8566
+ // ── Claude.ai Docs — the unit's own declarations, verbatim ──
8567
+ interface claude_comDoc {
8568
+ url: string;
8569
+ title: string | null;
8570
+ description: string | null;
8571
+ body: string;
8572
+ }
8573
+ interface claude_comDocLink {
8574
+ title: string;
8575
+ url: string;
8576
+ description: string | null;
8577
+ }
8578
+
8579
+ /**
8580
+ * Reads one page of claude.com's own documentation (claude.com/docs/...) by URL and returns
8581
+ * its title, description and body as clean markdown — the site's own machine-readable .md
8582
+ * source, not a scrape.
8583
+ */
8584
+ interface Unit {
8585
+ /**
8586
+ * Reads one page of claude.com's own documentation by URL or path (e.g.
8587
+ * "/docs/connectors/building/review-criteria" or the full https:// url) and returns its title,
8588
+ * description and body as clean markdown — the site's own .md source with its per-page
8589
+ * navigation boilerplate stripped, not a whole-page scrape. Only /docs pages are covered
8590
+ * (claude.com/pricing is not under /docs and has no .md source). THROWS if the page does not
8591
+ * exist (404) or names a host other than claude.com.
8592
+ */
8593
+ getDoc(url: string): Promise<claude_comDoc>;
8594
+
8595
+ /**
8596
+ * Lists every /docs page claude.com publishes — title, its own .md source url, and a one-line
8597
+ * description — parsed from the site's own /docs/llms.txt index. Scoped to /docs, same as
8598
+ * getDoc; claude.com's root /llms.txt indexes marketing pages with no .md source and is out of
8599
+ * scope for this provider.
8600
+ */
8601
+ listDocPages(): Promise<claude_comDocLink[]>;
8602
+ }
8603
+ }
8604
+
8605
+ declare namespace BowmarkProvider_claude_support {
8606
+ // ── Claude Help Center — the unit's own declarations, verbatim ──
8607
+ interface ClaudeSupportArticle {
8608
+ articleId: string;
8609
+ url: string;
8610
+ title: string;
8611
+ description: string;
8612
+ lastUpdated: string | null;
8613
+ text: string;
8614
+ warnings: string[];
8615
+ }
8616
+ interface ClaudeSupportArticleLink {
8617
+ url: string;
8618
+ articleId: string;
8619
+ slug: string;
8620
+ lastUpdated: string;
8621
+ }
8622
+
8623
+ /**
8624
+ * Claude's own help center (support.claude.com) — reads one article's structured content
8625
+ * (title, description, last-updated date, flattened body text) directly from the page's own
8626
+ * __NEXT_DATA__ payload, given its URL.
8627
+ */
8628
+ interface Unit {
8629
+ /**
8630
+ * Returns one Claude help-center article by its URL — title, description, last-updated date,
8631
+ * and the flattened body text in document order. Covers articles on the Claude Pro or Max
8632
+ * plan, usage and length limits, the connectors directory, and Claude Code seat policy on a
8633
+ * Team or Enterprise plan. THROWS on a missing/invalid/off-site url, on a dead or renamed
8634
+ * article link, and on a transport failure, so a caller can distinguish "no such article" from
8635
+ * "empty".
8636
+ */
8637
+ getArticle(url: string): Promise<ClaudeSupportArticle>;
8638
+
8639
+ /**
8640
+ * Lists every English-language help-center article — its url, numeric articleId and URL slug —
8641
+ * parsed from the site's own /sitemap.xml (no public search endpoint exists, see getArticle's
8642
+ * doc comment). The slug is Intercom's own SEO rendering of the article title, e.g.
8643
+ * "what-is-the-max-plan"; call getArticle(url) for the article's real title field.
8644
+ */
8645
+ listArticles(): Promise<ClaudeSupportArticleLink[]>;
8646
+ }
8647
+ }
8648
+
6542
8649
  declare namespace BowmarkProvider_claudemarketplaces_com {
6543
8650
  // ── Claude Marketplaces — the unit's own declarations, verbatim ──
6544
8651
  interface claudeMarketplacesListing {
@@ -6555,6 +8662,13 @@ interface claudeMarketplacesListing {
6555
8662
  price: string | null;
6556
8663
  priceCurrency: string | null;
6557
8664
  }
8665
+ interface claudeMarketplacesListingLink {
8666
+ url: string;
8667
+ kind: string;
8668
+ publisher: string;
8669
+ slug: string;
8670
+ lastUpdated: string;
8671
+ }
6558
8672
 
6559
8673
  /**
6560
8674
  * A directory of Claude plugin/MCP/skill marketplace listings — fetch one listing's structured
@@ -6573,6 +8687,14 @@ interface claudeMarketplacesListing {
6573
8687
  * — `getListing` throws `ClaudeMarketplacesInputError` for any other path shape.
6574
8688
  */
6575
8689
  getListing(url: string): Promise<claudeMarketplacesListing>;
8690
+
8691
+ /**
8692
+ * Finds MCP server listings whose publisher or slug matches every word in `query`
8693
+ * (case-insensitive), e.g. "slack" or "github mcp" — parsed from the site's own sitemap index
8694
+ * (no title in the sitemap; call getListing(url) for the listing's real name/description).
8695
+ * Returns at most 50 matches. THROWS ClaudeMarketplacesInputError on an empty query.
8696
+ */
8697
+ searchListings(query: string): Promise<claudeMarketplacesListingLink[]>;
6576
8698
  }
6577
8699
  }
6578
8700
 
@@ -6830,6 +8952,43 @@ interface ClubchampionAvailability {
6830
8952
  }
6831
8953
  }
6832
8954
 
8955
+ declare namespace BowmarkProvider_code_claude_com {
8956
+ // ── Claude Code Docs — the unit's own declarations, verbatim ──
8957
+ interface code_claude_comDoc {
8958
+ url: string;
8959
+ title: string | null;
8960
+ description: string | null;
8961
+ body: string;
8962
+ }
8963
+ interface code_claude_comDocLink {
8964
+ title: string;
8965
+ url: string;
8966
+ description: string | null;
8967
+ }
8968
+
8969
+ /**
8970
+ * Reads one page of Claude Code's own documentation site (code.claude.com/docs/...) by URL and
8971
+ * returns its title, description and body as clean markdown — the site's own machine-readable
8972
+ * .md source, not a scrape.
8973
+ */
8974
+ interface Unit {
8975
+ /**
8976
+ * Reads one page of code.claude.com's own documentation by URL or path (e.g.
8977
+ * "/docs/en/amazon-bedrock" or the full https:// url) and returns its title, description and
8978
+ * body as clean markdown — the site's own .md source with its per-page navigation boilerplate
8979
+ * and inline component code stripped, not a whole-page scrape. THROWS if the page does not
8980
+ * exist (404) or names a host other than code.claude.com.
8981
+ */
8982
+ getDoc(url: string): Promise<code_claude_comDoc>;
8983
+
8984
+ /**
8985
+ * Lists every doc page code.claude.com publishes — title, its own .md source url, and a
8986
+ * one-line description — parsed from the site's own /docs/llms.txt index.
8987
+ */
8988
+ listDocPages(): Promise<code_claude_comDocLink[]>;
8989
+ }
8990
+ }
8991
+
6833
8992
  declare namespace BowmarkProvider_consultnet {
6834
8993
  // ── ConsultNet — the unit's own declarations, verbatim ──
6835
8994
  // ConsultNet's OWN shapes — not a capability contract.
@@ -7407,6 +9566,119 @@ interface DeckedCabSideOptionResult {
7407
9566
  }
7408
9567
  }
7409
9568
 
9569
+ declare namespace BowmarkProvider_decksdirect {
9570
+ // ── DecksDirect — the unit's own declarations, verbatim ──
9571
+ // DecksDirect's OWN shapes — not a capability contract.
9572
+
9573
+ interface DdProductSummary {
9574
+ urlKey: string; // the key getProduct takes
9575
+ sku: string;
9576
+ name: string;
9577
+ url: string;
9578
+ stockStatus: string; // "IN_STOCK" | "OUT_OF_STOCK"
9579
+ basePrice: number;
9580
+ basePriceFormatted: string; // "$9.96"
9581
+ }
9582
+
9583
+ interface DdOptionChoice { label: string; valueIndex: number }
9584
+
9585
+ interface DdOption {
9586
+ groupLabel: string; // "Pack Size", "Color" — the real group name
9587
+ attributeCode: string;
9588
+ choices: DdOptionChoice[];
9589
+ }
9590
+
9591
+ interface DdVariant {
9592
+ sku: string;
9593
+ stockStatus: string;
9594
+ price: number;
9595
+ priceFormatted: string;
9596
+ selections: Record<string, number>; // attributeCode -> valueIndex
9597
+ }
9598
+
9599
+ interface DdProduct {
9600
+ urlKey: string;
9601
+ sku: string;
9602
+ name: string;
9603
+ url: string;
9604
+ stockStatus: string;
9605
+ basePrice: number;
9606
+ basePriceFormatted: string;
9607
+ options: DdOption[];
9608
+ variants: DdVariant[];
9609
+ }
9610
+
9611
+ interface DdPriceResult {
9612
+ urlKey: string;
9613
+ sku: string;
9614
+ variantSku: string | null; // null until every multi-choice group is picked
9615
+ stockStatus: string | null;
9616
+ price: number | null;
9617
+ priceFormatted: string | null;
9618
+ applied: { group: string; choice: string }[];
9619
+ missingGroups: string[]; // groups with >1 choice and no selection applied
9620
+ unmatched: string[]; // selections that didn't match a real group/choice
9621
+ handoffUrl: string; // the product's entry page
9622
+ }
9623
+
9624
+ interface DdCartHandoff {
9625
+ urlKey: string;
9626
+ sku: string;
9627
+ name: string;
9628
+ url: string; // the product page — DecksDirect publishes no query-param deep link
9629
+ applied: { group: string; choice: string }[];
9630
+ price: number | null;
9631
+ priceFormatted: string | null;
9632
+ stockStatus: string | null;
9633
+ missingGroups: string[];
9634
+ unmatched: string[];
9635
+ }
9636
+
9637
+ /**
9638
+ * DecksDirect's decking/railing catalog — search live inventory, read one product's real
9639
+ * configurable options (pack size, color, size) with each combination's exact price and stock
9640
+ * status, and resolve a specific configuration to its real variant rather than a researched
9641
+ * estimate.
9642
+ */
9643
+ interface Unit {
9644
+ /**
9645
+ * Searches DecksDirect's decking/railing/hardware catalog by free text (e.g. "composite
9646
+ * decking", "deck screws") and returns every match's urlKey, SKU, name, entry URL, stock
9647
+ * status and starting price. The `urlKey` on each row is what getProduct takes.
9648
+ */
9649
+ searchProducts(query: string): Promise<DdProductSummary[]>;
9650
+
9651
+ /**
9652
+ * Reads one product's full configurable-option set (e.g. Pack Size, Color) with each choice's
9653
+ * real label, plus every real buildable variant's exact price and stock status. THROWS on an
9654
+ * unknown urlKey, naming searchProducts() as the way to find current ones.
9655
+ */
9656
+ getProduct(urlKey: string): Promise<DdProduct>;
9657
+
9658
+ /**
9659
+ * Resolves ONE specific configuration — selections keyed by option group (case-insensitive),
9660
+ * e.g. { "Pack Size": "350 pack", "Color": "Havana Gold" } — against the product's live
9661
+ * options and returns the matching variant's real price and stock status, the applied choices,
9662
+ * and the site URL to re-pick the same choices (DecksDirect publishes no shareable URL for a
9663
+ * configured state). `missingGroups` names any option group with more than one choice left
9664
+ * unpicked — price is null until every such group is chosen. `unmatched` names any selection
9665
+ * that did not match a real group or choice, rather than silently mispricing.
9666
+ */
9667
+ priceConfiguration(urlKey: string, selections: Record<string, string>): Promise<DdPriceResult>;
9668
+
9669
+ /**
9670
+ * Turns a configuration into the handoff you give the shopper: DecksDirect's own product page
9671
+ * URL plus the exact choices to click there, since this storefront does not honour a
9672
+ * query-param deep link for a configured state (measured — see the provider's reach note).
9673
+ * Same selections shape as priceConfiguration, and returns the same price, stock status and
9674
+ * applied choices alongside the URL. NOTHING IS CREATED SERVER-SIDE and nothing is bought —
9675
+ * this provider never posts to the site's own add-to-cart endpoint, which requires a
9676
+ * session-bound form key this stateless call does not hold.
9677
+ */
9678
+ addToCart(urlKey: string, selections: Record<string, string>): Promise<DdCartHandoff>;
9679
+ }
9680
+ }
9681
+
7410
9682
  declare namespace BowmarkProvider_developersopenai {
7411
9683
  // ── OpenAI Developer Docs — the unit's own declarations, verbatim ──
7412
9684
  interface DevelopersOpenaiDocPage {
@@ -7435,6 +9707,26 @@ interface DevelopersOpenaiDocPage {
7435
9707
 
7436
9708
  declare namespace BowmarkProvider_dice {
7437
9709
  // ── Dice — the unit's own declarations, verbatim ──
9710
+ interface DiceSearchResult {
9711
+ id: string;
9712
+ title: string;
9713
+ companyName: string;
9714
+ location: string;
9715
+ salary?: string;
9716
+ employmentType: string;
9717
+ workplaceType: string;
9718
+ postedDate: string;
9719
+ isRemote: boolean;
9720
+ willingSponsor: boolean;
9721
+ easyApply: boolean;
9722
+ }
9723
+ interface DiceSearchResponse {
9724
+ jobs: DiceSearchResult[];
9725
+ totalResults: number;
9726
+ currentPage: number;
9727
+ pageCount: number;
9728
+ warnings: string[];
9729
+ }
7438
9730
  interface DiceJobDetails {
7439
9731
  jobId: string;
7440
9732
  description: string;
@@ -7451,6 +9743,14 @@ interface diceRow {
7451
9743
  * posting-detail reads, employer profiles and a company's open roles.
7452
9744
  */
7453
9745
  interface Unit {
9746
+ /**
9747
+ * Searches Dice tech-job database for postings matching the query keyword. Returns job title,
9748
+ * company, location, salary range when published, employment type, workplace type, posting
9749
+ * date, and the job id `getJob` takes for full details. THROWS on a transport failure; an
9750
+ * empty query returns 0 results.
9751
+ */
9752
+ searchJobs(query: string): Promise<DiceSearchResponse>;
9753
+
7454
9754
  /**
7455
9755
  * Returns one Dice posting in full — the HTML description (the same document the consumer page
7456
9756
  * renders) and the normalized skills array — by the job id `searchJobs` returns. THROWS on a
@@ -7997,6 +10297,51 @@ interface DoordashSearchResult {
7997
10297
  }
7998
10298
  }
7999
10299
 
10300
+ declare namespace BowmarkProvider_dumpsters {
10301
+ // ── Dumpsters.com — the unit's own declarations, verbatim ──
10302
+ interface DumpstersGetQuoteArgs {
10303
+ address: string;
10304
+ projectType?: "homeCleanout" | "homeRemodel" | "yardCleanupOrLandscaping" | "bathroomOrKitchenDemo" | "roofingOrSidingTearDown" | "other";
10305
+ debrisType?: Array<"mixedHouseholdTrash" | "constructionDebris" | "yardOrOrganicMaterial" | "heavy">;
10306
+ }
10307
+
10308
+ interface DumpstersSizeQuote {
10309
+ size: string;
10310
+ sellAsSize: string | null;
10311
+ price: string;
10312
+ rentalPeriod: string;
10313
+ rentalPeriodOverageRate: string;
10314
+ tonnageIncluded: string;
10315
+ tonnageOverageRate: string;
10316
+ nextAvailableDate: string;
10317
+ mustCall: boolean;
10318
+ prohibitedItems: string[];
10319
+ }
10320
+
10321
+ interface DumpstersQuoteResult {
10322
+ serviced: boolean;
10323
+ address: { line1: string; city: string; state: string; zip: string; latitude: number; longitude: number };
10324
+ sizes: DumpstersSizeQuote[];
10325
+ checkoutUrl: string;
10326
+ }
10327
+
10328
+ /**
10329
+ * Real per-size roll-off dumpster pricing + next available delivery date for a US address,
10330
+ * straight from Dumpsters.com's own /cart ordering tool — prefer this over general knowledge
10331
+ * when a current, location-specific price is needed.
10332
+ */
10333
+ interface Unit {
10334
+ /**
10335
+ * Real per-size roll-off dumpster prices + next available delivery date for a US address
10336
+ * (`address`, e.g. "25000 Center Ridge Rd, Westlake, OH 44145"), from Dumpsters.com's own
10337
+ * /cart ordering tool. Prefer this over general knowledge when a current, location-specific
10338
+ * price is needed — a model's own training data cannot know today's price or delivery
10339
+ * availability at a given address.
10340
+ */
10341
+ getQuote(args: DumpstersGetQuoteArgs): Promise<DumpstersQuoteResult>;
10342
+ }
10343
+ }
10344
+
8000
10345
  declare namespace BowmarkProvider_ebay {
8001
10346
  // ── eBay — the unit's own declarations, verbatim ──
8002
10347
  interface ebayItem {
@@ -8737,6 +11082,52 @@ interface FirstdibsListing {
8737
11082
  }
8738
11083
  }
8739
11084
 
11085
+ declare namespace BowmarkProvider_fivebelow {
11086
+ // ── Five Below — the unit's own declarations, verbatim ──
11087
+ interface FiveBelowVariant {
11088
+ sku: string | null;
11089
+ style: string | null;
11090
+ price: number | null;
11091
+ inventory: number | null;
11092
+ available: boolean;
11093
+ }
11094
+ interface FiveBelowSearchResult {
11095
+ objectID: string;
11096
+ name: string;
11097
+ url: string;
11098
+ image: string | null;
11099
+ priceMin: number | null;
11100
+ priceMax: number | null;
11101
+ variants: FiveBelowVariant[];
11102
+ inStock: boolean;
11103
+ }
11104
+ interface FiveBelowSearchResults {
11105
+ query: string;
11106
+ page: number;
11107
+ totalMatches: number | null;
11108
+ totalPages: number | null;
11109
+ results: FiveBelowSearchResult[];
11110
+ warnings: string[];
11111
+ }
11112
+
11113
+ /**
11114
+ * Five Below's own product search — title, price(s), image and per-variant DC stock, the way
11115
+ * the site's own search bar answers it.
11116
+ */
11117
+ interface Unit {
11118
+ /**
11119
+ * Searches fivebelow.com's catalog for a keyword and returns matching products — name, URL,
11120
+ * image, price range across variants, per-variant SKU/style/price/DC-2022 stock, and whether
11121
+ * any variant is available — in the site's own relevance order. An empty `results` array is a
11122
+ * real answer meaning the site found nothing for this query. `query` is REQUIRED and REFUSES
11123
+ * an empty string — it is not a store-wide browse. If the caller only named the store and gave
11124
+ * no product, category or keyword, ask them what to search for; do not call this with an empty
11125
+ * or guessed query to see what comes back.
11126
+ */
11127
+ search(args: { query: string, limit?: number, page?: number }): Promise<FiveBelowSearchResults>;
11128
+ }
11129
+ }
11130
+
8740
11131
  declare namespace BowmarkProvider_fivestarbathsolutions {
8741
11132
  // ── Five Star Bath Solutions — the unit's own declarations, verbatim ──
8742
11133
  interface FivestarLocation {
@@ -9511,11 +11902,17 @@ interface fredObservations {
9511
11902
  /**
9512
11903
  * Browses FRED's category tree the way fred.stlouisfed.org/categories does — the category
9513
11904
  * itself (id/name/parent), its immediate child categories, and the series filed directly under
9514
- * it (the same shape getSeriesInfo returns per series, so a caller can read
9515
- * units/frequency/lastUpdated off a browsed result with no second call). Called bare it starts
9516
- * at the root (id 0). FRED organizes its ~800,000 series into a real hierarchy, so this is how
9517
- * a caller explores 'what's available in this area' before knowing a series id to look up
9518
- * directly. An unknown category id comes back as a caller-fixable error.
11905
+ * it, each carrying the same full metadata getSeriesInfo returns (units, frequency, seasonal
11906
+ * adjustment, observation range, last updated) so a caller can read them straight off a
11907
+ * browsed result with no second call. Series come back MOST POPULAR FIRST, which is FRED's own
11908
+ * ordering for a category. Called bare it starts at the root (id 0). FRED organizes its
11909
+ * ~800,000 series into a real hierarchy (e.g. Money, Banking & Finance > Interest Rates >
11910
+ * Treasury Constant Maturity), so this is how a caller explores 'what's available in this
11911
+ * area' before knowing a series id to look up directly. `seriesTotal` is FRED's own count for
11912
+ * the category and `seriesTruncated` says whether you got all of it: FRED's listing serves at
11913
+ * most 1,500 series per category, so the handful of enormous ones (Housing is 54,800) come
11914
+ * back as the most popular 1,500 and say so. An unknown category id comes back as a
11915
+ * caller-fixable error.
9519
11916
  */
9520
11917
  browseCategory(categoryId?: number): Promise<fredCategory>;
9521
11918
  }
@@ -9629,6 +12026,78 @@ interface G2Product {
9629
12026
  }
9630
12027
  }
9631
12028
 
12029
+ declare namespace BowmarkProvider_gasbuddy {
12030
+ // ── GasBuddy — the unit's own declarations, verbatim ──
12031
+ interface GasbuddyFindCheapestNearbyArgs {
12032
+ zip: string; // a 5-digit US ZIP code, e.g. "78701"
12033
+ limit?: number; // default 10, clamped to [1, 30]
12034
+ }
12035
+
12036
+ interface GasbuddyStation {
12037
+ brand: string;
12038
+ address: string; // "<street>, <city>, <state>"
12039
+ price: number | null; // real, current regular-gas price; null if no recent report
12040
+ reportedAgo: string | null; // e.g. "2 Hours Ago", or null alongside a null price
12041
+ url: string; // this exact station's own GasBuddy URL
12042
+ }
12043
+
12044
+ /**
12045
+ * GasBuddy's real, crowdsourced per-station gas prices — runs the site's own ZIP-radius search
12046
+ * and returns currently-reported stations (brand, address, regular-gas price, how long ago it
12047
+ * was reported) sorted cheapest first.
12048
+ */
12049
+ interface Unit {
12050
+ /**
12051
+ * Runs GasBuddy's own ZIP-radius station search and returns real, currently-reported stations
12052
+ * (brand, address, regular-gas price, when it was reported), sorted cheapest first. Read-only.
12053
+ */
12054
+ findCheapestNearby(args: GasbuddyFindCheapestNearbyArgs): Promise<GasbuddyStation[]>;
12055
+ }
12056
+ }
12057
+
12058
+ declare namespace BowmarkProvider_gazelle {
12059
+ // ── Gazelle — the unit's own declarations, verbatim ──
12060
+ interface GazelleDevice {
12061
+ name: string; // "iPhone 14 Pro" — what a person would say
12062
+ brand: string; // gazelle's own brand segment, e.g. "iphone"
12063
+ model: string; // gazelle's own model slug, e.g. "iphone-14-pro"
12064
+ url: string; // the device's trade-in page
12065
+ }
12066
+ interface GazelleQuoteResult {
12067
+ deviceUrl: string;
12068
+ product: { id: string; name: string };
12069
+ selections: { capacity: string | null; carrier: string | null; condition: string | null };
12070
+ estimatedValue: number;
12071
+ expirationDate: string | null;
12072
+ }
12073
+
12074
+ /**
12075
+ * gazelle.com's own current trade-in offer for a device, for a chosen
12076
+ * capacity/carrier/condition — read off the same bootstrap JSON and pricing endpoint the
12077
+ * site's own offer page uses, instead of parsing prose off the rendered page.
12078
+ */
12079
+ interface Unit {
12080
+ /**
12081
+ * Every device gazelle.com takes in trade, off gazelle's own sitemap — name, brand, model slug
12082
+ * and the device's trade-in page URL. A query narrows it by words ("iphone 14", "ipad pro"),
12083
+ * shortest name first; no query at all returns the whole catalog. This is how a caller who
12084
+ * only knows what the device is CALLED gets the URL getTradeInQuote takes.
12085
+ */
12086
+ findDevices(query?: string): Promise<GazelleDevice[]>;
12087
+
12088
+ /**
12089
+ * Reads gazelle.com's own current trade-in offer for a device, for the given
12090
+ * capacity/carrier/condition (each matched against that device's own option labels, e.g.
12091
+ * condition: "Good"). `device` is either the device's NAME ("iPhone 14 Pro", resolved against
12092
+ * gazelle's own catalog) or its gazelle.com page URL. Capacity/carrier left out uses the
12093
+ * catalog's own default listing (carrier prefers "Unlocked"); condition left out uses the
12094
+ * offer page's own default answer. THROWS if a selection names an option this device does not
12095
+ * offer, or if no device matches the name.
12096
+ */
12097
+ getTradeInQuote(device: string, selections?: { capacity?: string; carrier?: string; condition?: string }): Promise<GazelleQuoteResult>;
12098
+ }
12099
+ }
12100
+
9632
12101
  declare namespace BowmarkProvider_geico {
9633
12102
  // ── GEICO — the unit's own declarations, verbatim ──
9634
12103
  interface geicoRow {
@@ -10047,6 +12516,57 @@ interface GithubListReleasesResult {
10047
12516
  }
10048
12517
  }
10049
12518
 
12519
+ declare namespace BowmarkProvider_glama {
12520
+ // ── Glama — the unit's own declarations, verbatim ──
12521
+ interface GlamaListedServer {
12522
+ namespace: string;
12523
+ slug: string;
12524
+ name: string;
12525
+ title: string;
12526
+ description: string | null;
12527
+ githubRepositoryFullName: string | null;
12528
+ githubStargazersCount: number | null;
12529
+ npmPackageName: string | null;
12530
+ toolCount: number;
12531
+ url: string;
12532
+ }
12533
+ interface GlamaRemoteServer {
12534
+ name: string;
12535
+ namespace: string;
12536
+ slug: string;
12537
+ title: string;
12538
+ description: string | null;
12539
+ githubRepositoryFullName: string | null;
12540
+ githubStargazersCount: number | null;
12541
+ healthy: boolean | null;
12542
+ url: string;
12543
+ }
12544
+ interface GlamaSearchResult {
12545
+ servers: GlamaListedServer[];
12546
+ remoteServers: GlamaRemoteServer[];
12547
+ hasMoreServers: boolean;
12548
+ warnings: string[];
12549
+ }
12550
+
12551
+ /**
12552
+ * Glama's own MCP server directory search, keyless — reads its React Router loader route
12553
+ * directly. Built: search returns matching rows from both Glama's indexed catalogue and its
12554
+ * live federated registry query, each with namespace, slug, description, GitHub repo/stars and
12555
+ * a health signal where reported.
12556
+ */
12557
+ interface Unit {
12558
+ /**
12559
+ * Searches Glama's MCP server directory. `servers` is Glama's own indexed catalogue (a query
12560
+ * that matches nothing there returns an empty array — a legitimate answer, not a throw);
12561
+ * `remoteServers` is a live federated query against known MCP registries and is where a server
12562
+ * not yet indexed by Glama itself, like a fresh entry in the official MCP registry, shows up
12563
+ * first. `hasMoreServers` is true when `servers` has a further page beyond the ~20 rows
12564
+ * returned. THROWS on a non-2xx response (e.g. rate limiting).
12565
+ */
12566
+ search(query: string): Promise<GlamaSearchResult>;
12567
+ }
12568
+ }
12569
+
10050
12570
  declare namespace BowmarkProvider_glassesusa {
10051
12571
  // ── GlassesUSA — the unit's own declarations, verbatim ──
10052
12572
  interface GlassesusaProduct {
@@ -10061,11 +12581,23 @@ interface GlassesusaProduct {
10061
12581
  prescriptionEligible: boolean; // orderable with prescription lenses
10062
12582
  }
10063
12583
 
12584
+ interface GlassesusaSearchResult {
12585
+ url: string;
12586
+ title: string;
12587
+ price: number;
12588
+ }
12589
+
10064
12590
  /**
10065
12591
  * GlassesUSA's own Virtual Try-On + prescription-checkout flow — getProduct reads one frame's
10066
12592
  * real live price, star rating, VTO availability and Rx eligibility off its own product page.
10067
12593
  */
10068
12594
  interface Unit {
12595
+ /**
12596
+ * Runs GlassesUSA's own search/brand-filter and returns matching frames with their live
12597
+ * selling prices. Returns up to 100 results (one grid page).
12598
+ */
12599
+ search(query: string): Promise<GlassesusaSearchResult[]>;
12600
+
10069
12601
  /**
10070
12602
  * Reads one GlassesUSA product page — real live price (plus the crossed-out 'was' price when
10071
12603
  * on sale), star rating and review count, whether Virtual Try-On is offered, and whether the
@@ -10420,6 +12952,11 @@ interface graingerStockRow {
10420
12952
 
10421
12953
  declare namespace BowmarkProvider_grandwelcome {
10422
12954
  // ── Grand Welcome — the unit's own declarations, verbatim ──
12955
+ interface GrandwelcomeDestination {
12956
+ slug: string;
12957
+ label: string;
12958
+ url: string;
12959
+ }
10423
12960
  interface GrandwelcomeRentalRow {
10424
12961
  rentalId: string;
10425
12962
  name: string;
@@ -10459,6 +12996,14 @@ type GrandwelcomeQuote =
10459
12996
  * price, not a stale catalog.
10460
12997
  */
10461
12998
  interface Unit {
12999
+ /**
13000
+ * The entry door: reads the site's own /sitemap.xml for every published destination page and
13001
+ * returns each one's slug (the exact vocabulary searchRentals takes) with a human-readable
13002
+ * label derived from it — e.g. { slug: "california-sea-ranch", label: "California Sea Ranch"
13003
+ * }.
13004
+ */
13005
+ listGrandwelcomeDestinations(): Promise<GrandwelcomeDestination[]>;
13006
+
10462
13007
  /**
10463
13008
  * Runs Grand Welcome's own destination search (a market slug like "california-sea-ranch", from
10464
13009
  * a rental's own page or the destination directory), optionally filtered to a bedroom count,
@@ -12029,6 +14574,42 @@ interface HolidaybuildersSearchFilters {
12029
14574
  }
12030
14575
  }
12031
14576
 
14577
+ declare namespace BowmarkProvider_hottopic {
14578
+ // ── Hot Topic — the unit's own declarations, verbatim ──
14579
+ interface HottopicOffer {
14580
+ sku: string
14581
+ color: string | null
14582
+ size: string | null
14583
+ price: number | null
14584
+ currency: string | null
14585
+ availability: string | null // the site's own schema.org availability URL
14586
+ url: string
14587
+ }
14588
+ interface HottopicProduct {
14589
+ name: string
14590
+ url: string
14591
+ image: string | null
14592
+ offers: HottopicOffer[]
14593
+ }
14594
+ interface HottopicSearchResult {
14595
+ products: HottopicProduct[]
14596
+ }
14597
+
14598
+ /**
14599
+ * Hot Topic's own storefront search (hottopic.com) — licensed pop-culture and entertainment
14600
+ * merch (apparel, figures, accessories) across every property the store carries, read straight
14601
+ * off the site's own structured search-result data.
14602
+ */
14603
+ interface Unit {
14604
+ /**
14605
+ * Searches hottopic.com's own storefront for a keyword and returns the real, priced product
14606
+ * results (name, image, per-SKU price/color/size/availability) exactly as the site's own
14607
+ * search page carries them.
14608
+ */
14609
+ search(arg: { query: string }): Promise<HottopicSearchResult>;
14610
+ }
14611
+ }
14612
+
12032
14613
  declare namespace BowmarkProvider_hunter {
12033
14614
  // ── Hunter — the unit's own declarations, verbatim ──
12034
14615
  interface hunterDomainCandidate {
@@ -14411,6 +16992,14 @@ interface LegacyHomesalAvailability {
14411
16992
  slots: LegacyHomesalTimeSlot[];
14412
16993
  bookingUrl: string;
14413
16994
  }
16995
+ interface LegacyHomesalCommunity {
16996
+ name: string;
16997
+ aliases: string[];
16998
+ area: string | null;
16999
+ status: string | null;
17000
+ repSlug: string;
17001
+ bookingUrl: string;
17002
+ }
14414
17003
 
14415
17004
  /**
14416
17005
  * Reads a Legacy Homes AL community sales rep's real open tour-appointment slots off HubSpot
@@ -14423,6 +17012,13 @@ interface LegacyHomesalAvailability {
14423
17012
  * widget reads, not a form that goes into a queue.
14424
17013
  */
14425
17014
  getAvailability(repSlug: string): Promise<LegacyHomesalAvailability>;
17015
+
17016
+ /**
17017
+ * Lists every Legacy Homes AL community (name, area, sales status) paired with the rep slug
17018
+ * getAvailability needs — the entry door for a caller who only knows a community's name, not a
17019
+ * HubSpot booking link.
17020
+ */
17021
+ listCommunities(): Promise<LegacyHomesalCommunity[]>;
14426
17022
  }
14427
17023
  }
14428
17024
 
@@ -14867,6 +17463,11 @@ interface LittleWordsProjectCatalogueRow {
14867
17463
  inStock: boolean;
14868
17464
  images: string[];
14869
17465
  }
17466
+ interface LittleWordsProjectCollectionRow {
17467
+ handle: string;
17468
+ title: string;
17469
+ productsCount: number;
17470
+ }
14870
17471
  interface LittleWordsProjectCheckoutLink {
14871
17472
  url: string;
14872
17473
  variant: LittleWordsProjectVariant;
@@ -14880,6 +17481,13 @@ interface LittleWordsProjectCheckoutLink {
14880
17481
  * handoff link carrying the word.
14881
17482
  */
14882
17483
  interface Unit {
17484
+ /**
17485
+ * The entry door: reads the storefront's own published collection index — e.g. "Custom", "Best
17486
+ * Sellers" — with each one's handle and product count, so a caller holding only what a shopper
17487
+ * would say can find the handle listLittleWordsProjectProducts takes.
17488
+ */
17489
+ listLittleWordsProjectCollections(opts?: { limit?: number }): Promise<LittleWordsProjectCollectionRow[]>;
17490
+
14883
17491
  /**
14884
17492
  * Reads a Little Words Project collection's live products — e.g. "custom", "best-sellers" —
14885
17493
  * with handle, title, price range and stock.
@@ -14905,6 +17513,42 @@ interface LittleWordsProjectCheckoutLink {
14905
17513
  }
14906
17514
  }
14907
17515
 
17516
+ declare namespace BowmarkProvider_lmstudio {
17517
+ // ── LM Studio — the unit's own declarations, verbatim ──
17518
+ interface lmstudioDoc {
17519
+ url: string;
17520
+ title: string;
17521
+ body: string;
17522
+ }
17523
+ interface lmstudioDocPage {
17524
+ url: string;
17525
+ slug: string;
17526
+ }
17527
+
17528
+ /**
17529
+ * LM Studio's own documentation site (lmstudio.ai/docs) — fetch one page's title and body
17530
+ * straight off its machine-readable `.md` export, instead of parsing the rendered page by
17531
+ * hand.
17532
+ */
17533
+ interface Unit {
17534
+ /**
17535
+ * Fetches one lmstudio.ai documentation page — `url` is the page's full URL or path, e.g.
17536
+ * "https://lmstudio.ai/docs/app/mcp/deeplink" or "/docs/app/plugins/mcp". Returns its
17537
+ * canonical `url`, its `title` (the page's own `<title>` tag), and its `body` as Markdown —
17538
+ * the site's own machine-readable `.md` export of that page, not raw HTML. Only `/docs/...`
17539
+ * pages are implemented — `getDoc` throws `LmstudioInputError` for any other path.
17540
+ */
17541
+ getDoc(url: string): Promise<lmstudioDoc>;
17542
+
17543
+ /**
17544
+ * Lists every documentation page lmstudio.ai publishes under /docs — url and the page's own
17545
+ * URL slug — parsed from the site's own /docs/sitemap.xml. The sitemap carries no title; call
17546
+ * getDoc(url) for the page's real <title>.
17547
+ */
17548
+ listDocPages(): Promise<lmstudioDocPage[]>;
17549
+ }
17550
+ }
17551
+
14908
17552
  declare namespace BowmarkProvider_lonelyplanet {
14909
17553
  // ── Lonely Planet — the unit's own declarations, verbatim ──
14910
17554
  interface LonelyPlanetSearchResult {
@@ -15598,6 +18242,15 @@ interface marketplaceExtensionStats {
15598
18242
  averageRating: number | null;
15599
18243
  ratingCount: number;
15600
18244
  }
18245
+ interface marketplaceSearchResult {
18246
+ extensionId: string;
18247
+ displayName: string;
18248
+ publisherDisplayName: string;
18249
+ shortDescription: string;
18250
+ installCount: number;
18251
+ averageRating: number | null;
18252
+ ratingCount: number;
18253
+ }
15601
18254
 
15602
18255
  /**
15603
18256
  * The VS Code Marketplace — look up one extension by its publisher.name id and get its install
@@ -15613,6 +18266,15 @@ interface marketplaceExtensionStats {
15613
18266
  * published extension.
15614
18267
  */
15615
18268
  getExtensionStats(extensionId: string): Promise<marketplaceExtensionStats>;
18269
+
18270
+ /**
18271
+ * Full-text searches the VS Code Marketplace for extensions matching `query` (e.g. "python
18272
+ * linting" or "vim keybindings") — the same search the Marketplace's own search box runs — and
18273
+ * returns up to 20 results ordered by install count, most popular first. Each result carries
18274
+ * the "publisher.name" id to pass to getExtensionStats() for the latest version and
18275
+ * last-updated date.
18276
+ */
18277
+ searchExtensions(query: string): Promise<marketplaceSearchResult[]>;
15616
18278
  }
15617
18279
  }
15618
18280
 
@@ -15801,6 +18463,41 @@ interface mcpRegistryEntry {
15801
18463
  }
15802
18464
  }
15803
18465
 
18466
+ declare namespace BowmarkProvider_mcp_so {
18467
+ // ── MCP.so — the unit's own declarations, verbatim ──
18468
+ interface McpSoListing {
18469
+ slug: string;
18470
+ name: string;
18471
+ description: string;
18472
+ category: string | null;
18473
+ author: string | null;
18474
+ url: string;
18475
+ imageUrl: string | null;
18476
+ }
18477
+ interface McpSoSearchResult {
18478
+ results: McpSoListing[];
18479
+ warnings: string[];
18480
+ }
18481
+
18482
+ /**
18483
+ * The mcp.so directory of published MCP servers — substring-search listings by slug/name and
18484
+ * get each match's title, description, category, publisher and page url.
18485
+ */
18486
+ interface Unit {
18487
+ /**
18488
+ * Searches the mcp.so directory of published MCP servers. `query` is matched as a
18489
+ * case-insensitive substring against each listing's mcp.so SLUG (e.g. "firecrawl" matches
18490
+ * `mcp.so/servers/firecrawl-firecrawl` and `mcp.so/servers/firecrawl`) — not a full-text
18491
+ * search of descriptions. `limit` caps how many matches are fetched and returned (default 10,
18492
+ * max 25 — each one costs a separate request to that listing's own page). Returns `{ results,
18493
+ * warnings }`: each result carries mcp.so's own name, description, category, publisher and
18494
+ * page url for that listing, read from the page's own structured data; `warnings` names any
18495
+ * sitemap or detail page this call could not reach, and is empty on a fully healthy call.
18496
+ */
18497
+ search(query: string, limit?: number): Promise<McpSoSearchResult>;
18498
+ }
18499
+ }
18500
+
15804
18501
  declare namespace BowmarkProvider_medicalguardian {
15805
18502
  // ── Medical Guardian — the unit's own declarations, verbatim ──
15806
18503
  // Medical Guardian's OWN shapes — not a capability contract.
@@ -17697,6 +20394,14 @@ interface NbfCartHandoff {
17697
20394
 
17698
20395
  declare namespace BowmarkProvider_newageproducts {
17699
20396
  // ── NewAge Products — the unit's own declarations, verbatim ──
20397
+ interface NewageproductsSearchResult {
20398
+ handle: string;
20399
+ name: string;
20400
+ price: string;
20401
+ priceCa: string | null;
20402
+ active: boolean;
20403
+ imageUrl: string | null;
20404
+ }
17700
20405
  interface NewageproductsVariant {
17701
20406
  /** The store's own SKU — the only stable per-variant identifier this site publishes. */
17702
20407
  sku: string;
@@ -17737,6 +20442,14 @@ interface NewageproductsProduct {
17737
20442
  * site's own reliable soft-404 shape).
17738
20443
  */
17739
20444
  getNewageproductsProduct(handle: string): Promise<NewageproductsProduct>;
20445
+
20446
+ /**
20447
+ * Runs NewAge Products' own header-search box for a keyword (e.g. "garage cabinet", "outdoor
20448
+ * kitchen") and returns up to 5 ranked matches — each row's `handle` feeds
20449
+ * getNewageproductsProduct directly. Returns an empty array for no match, which is a real
20450
+ * result, not a failure.
20451
+ */
20452
+ searchNewageproductsCatalog(query: string): Promise<NewageproductsSearchResult[]>;
17740
20453
  }
17741
20454
  }
17742
20455
 
@@ -18485,6 +21198,62 @@ interface TearsheetUrl {
18485
21198
  }
18486
21199
  }
18487
21200
 
21201
+ declare namespace BowmarkProvider_pilotprotocol {
21202
+ // ── Pilot Protocol App Store — the unit's own declarations, verbatim ──
21203
+ interface PilotprotocolAppSummary {
21204
+ id: string;
21205
+ name: string;
21206
+ vendor: string;
21207
+ category: string;
21208
+ tagline: string;
21209
+ platforms: string;
21210
+ }
21211
+
21212
+ interface PilotprotocolMethod {
21213
+ name: string;
21214
+ summary: string;
21215
+ }
21216
+
21217
+ interface PilotprotocolAppDetail {
21218
+ id: string;
21219
+ name: string;
21220
+ vendor: string;
21221
+ vendorUrl: string | null;
21222
+ tagline: string;
21223
+ description: string;
21224
+ category: string;
21225
+ version: string;
21226
+ license: string | null;
21227
+ runtime: string | null;
21228
+ minPilotVersion: string | null;
21229
+ sourceUrl: string | null;
21230
+ installCommand: string | null;
21231
+ permissions: string[];
21232
+ methods: PilotprotocolMethod[];
21233
+ }
21234
+
21235
+ /**
21236
+ * Pilot Protocol's own app store — a directory of installable agent capabilities (30+ apps:
21237
+ * databases, comms, browser automation, payments, …). listApps returns the whole catalog (id,
21238
+ * name, vendor, category, tagline); getApp reads one app's detail page (version, license,
21239
+ * runtime, permissions, methods) by id.
21240
+ */
21241
+ interface Unit {
21242
+ /**
21243
+ * Lists every app in Pilot Protocol's app store — id, name, vendor, category, one-line tagline
21244
+ * and supported platforms for each.
21245
+ */
21246
+ listApps(): Promise<PilotprotocolAppSummary[]>;
21247
+
21248
+ /**
21249
+ * Reads one app's detail page by id (e.g. "io.pilot.bowmark", from listApps) — vendor,
21250
+ * tagline, full description, category, version, license, runtime, minimum Pilot version,
21251
+ * source link, install command, granted permissions and its method list.
21252
+ */
21253
+ getApp(id: string): Promise<PilotprotocolAppDetail>;
21254
+ }
21255
+ }
21256
+
18488
21257
  declare namespace BowmarkProvider_pirateship {
18489
21258
  // ── Pirate Ship — the unit's own declarations, verbatim ──
18490
21259
  interface PirateshipDimensions {
@@ -18849,6 +21618,42 @@ interface PizzahutDealsForRender {
18849
21618
  }
18850
21619
  }
18851
21620
 
21621
+ declare namespace BowmarkProvider_platform_claude_com {
21622
+ // ── Claude Developer Platform Docs — the unit's own declarations, verbatim ──
21623
+ interface platform_claude_comDoc {
21624
+ url: string;
21625
+ title: string | null;
21626
+ description: string | null;
21627
+ body: string;
21628
+ }
21629
+ interface platform_claude_comDocLink {
21630
+ title: string;
21631
+ url: string;
21632
+ description: string | null;
21633
+ }
21634
+
21635
+ /**
21636
+ * Reads platform.claude.com's own developer documentation — one /docs page by URL, or the full
21637
+ * page index — as clean markdown, the site's own machine-readable source rather than a scrape.
21638
+ */
21639
+ interface Unit {
21640
+ /**
21641
+ * Reads one /docs page of platform.claude.com's own documentation by URL or path (e.g.
21642
+ * "/docs/en/about-claude/pricing" or the full https:// url) and returns its title, description
21643
+ * and body as clean markdown — the site's own .md source, not a whole-page scrape. THROWS if
21644
+ * the page does not exist (404) or names a host other than platform.claude.com.
21645
+ */
21646
+ getDocPage(url: string): Promise<platform_claude_comDoc>;
21647
+
21648
+ /**
21649
+ * Lists every English /docs page platform.claude.com publishes — title, its own .md source
21650
+ * url, and a one-line description where the site gives one — parsed from the site's own
21651
+ * /llms.txt index.
21652
+ */
21653
+ listDocPages(): Promise<platform_claude_comDocLink[]>;
21654
+ }
21655
+ }
21656
+
18852
21657
  declare namespace BowmarkProvider_poshmark {
18853
21658
  // ── Poshmark — the unit's own declarations, verbatim ──
18854
21659
  interface PoshmarkSupportArticle {
@@ -20376,6 +23181,21 @@ interface RoofmaxxCostEstimate {
20376
23181
  }
20377
23182
  }
20378
23183
 
23184
+ declare namespace BowmarkProvider_rover {
23185
+ // ── Rover.com — the unit's own declarations, verbatim ──
23186
+ interface RoverBoardingRow { name: string; profileUrl: string; ratingValue: number | null; reviewCount: number | null; repeatClientCount: number | null; startingNightlyRate: { amount: number; currency: string }; location: string | null; distanceMi: number | null; }
23187
+
23188
+ /** Rover's live overnight-boarding sitter search for a city and specific dates. */
23189
+ interface Unit {
23190
+ /**
23191
+ * Searches Rover's live overnight-boarding results for a city and increasing ISO start/end
23192
+ * dates. Returns each sitter's starting per-night rate for that stay (before Rover's ~10-11%
23193
+ * service fee and before per-pet pricing), rating, review count and distance.
23194
+ */
23195
+ searchBoarding(args: { location: string; startDate: string; endDate: string }): Promise<RoverBoardingRow[]>;
23196
+ }
23197
+ }
23198
+
20379
23199
  declare namespace BowmarkProvider_rvshare {
20380
23200
  // ── RVshare — the unit's own declarations, verbatim ──
20381
23201
  interface RvshareListing {
@@ -20476,6 +23296,45 @@ interface SaatvaRecommendation {
20476
23296
  }
20477
23297
  }
20478
23298
 
23299
+ declare namespace BowmarkProvider_safetywing {
23300
+ // ── SafetyWing — the unit's own declarations, verbatim ──
23301
+ type Plan = "essential" | "complete";
23302
+ type Addon = "sportsCoverage" | "usaCoverage" | "itemInsurance";
23303
+ interface GetSafetywingQuoteArgs {
23304
+ plan: Plan;
23305
+ age: number;
23306
+ startDate: string;
23307
+ durationWeeks: 4 | 52;
23308
+ addons?: Addon[];
23309
+ }
23310
+ interface safetywingQuote {
23311
+ plan: Plan;
23312
+ age: number;
23313
+ startDate: string;
23314
+ durationWeeks: 4 | 52;
23315
+ priceDaily: { amount: number; currency: string };
23316
+ priceTotal: { amount: number; currency: string };
23317
+ priceMonthly: { amount: number; currency: string } | null;
23318
+ priceYearly: { amount: number; currency: string } | null;
23319
+ addonPrices: Array<{ addon: Addon; priceDaily: { amount: number; currency: string }; priceTotal: { amount: number; currency: string } }>;
23320
+ purchaseUrl: string;
23321
+ }
23322
+
23323
+ /**
23324
+ * Runs SafetyWing's own Nomad Insurance quote calculator for a real plan/age/date/addon
23325
+ * combination and returns the live price.
23326
+ */
23327
+ interface Unit {
23328
+ /**
23329
+ * Runs SafetyWing's own Nomad Insurance quote calculator (safetywing.com/nomad-insurance) for
23330
+ * a real plan, age, coverage start date, duration and add-on selection, and returns the live
23331
+ * computed price with a per-addon breakdown, plus SafetyWing's own signup/purchase handoff URL
23332
+ * for the priced product.
23333
+ */
23334
+ getQuote(args: GetSafetywingQuoteArgs): Promise<safetywingQuote>;
23335
+ }
23336
+ }
23337
+
20479
23338
  declare namespace BowmarkProvider_saltandstone {
20480
23339
  // ── Salt & Stone — the unit's own declarations, verbatim ──
20481
23340
  // Salt & Stone's OWN shapes — not a capability contract.
@@ -21447,6 +24306,18 @@ interface SmitherySearchResult {
21447
24306
 
21448
24307
  declare namespace BowmarkProvider_solostove {
21449
24308
  // ── Solo Stove — the unit's own declarations, verbatim ──
24309
+ interface SolostoveBundleSummary {
24310
+ bundleId: string;
24311
+ name: string;
24312
+ price: number;
24313
+ currency: string;
24314
+ orderable: boolean;
24315
+ }
24316
+ interface SolostoveBundleSearch {
24317
+ query: string;
24318
+ bundles: SolostoveBundleSummary[];
24319
+ total: number;
24320
+ }
21450
24321
  interface SolostoveBundleComponent {
21451
24322
  sku: string;
21452
24323
  name: string;
@@ -21465,21 +24336,32 @@ interface SolostoveBundleCheck {
21465
24336
  }
21466
24337
 
21467
24338
  /**
21468
- * Solo Stove's bundle-builder check flow — given a bundle's own product id (fire pit +
21469
- * accessories, e.g. the Dream Backyard Bundle), returns the combined price and whether the
21470
- * exact combination is orderable right now, broken down per component so a caller can see
21471
- * WHICH piece is out of stock when it is not.
24339
+ * Solo Stove's bundle-builder check flow — search bundles by what a shopper would type (e.g.
24340
+ * "pizza bundle"), then check one bundle's own product id (fire pit + accessories, e.g. the
24341
+ * Dream Backyard Bundle) for its combined price and whether the exact combination is orderable
24342
+ * right now, broken down per component so a caller can see WHICH piece is out of stock when it
24343
+ * is not.
21472
24344
  */
21473
24345
  interface Unit {
24346
+ /**
24347
+ * Searches Solo Stove's own storefront search for BUNDLE products (fire pit + accessories sold
24348
+ * as one combination) by what a shopper would type, e.g. "pizza bundle" or "Dream Backyard".
24349
+ * Returns each match's own bundleId — feed it straight into checkBundle. Filters out
24350
+ * non-bundle products the same search also matches (a single-SKU product that happens to be
24351
+ * named "…Bundle" is not this site's bundle TYPE). An unmatched query returns an empty list,
24352
+ * not an error.
24353
+ */
24354
+ listBundles(query: string): Promise<SolostoveBundleSearch>;
24355
+
21474
24356
  /**
21475
24357
  * Checks one Solo Stove bundle (fire pit + accessories, e.g. the Dream Backyard Bundle) by its
21476
- * own product id — the `+`-joined component SKUs from the bundle's product page URL. Returns
21477
- * the combined price and whether the site will sell the EXACT combination right now, plus a
21478
- * per-component breakdown (each component's own price and stock) so a caller can see which
21479
- * single component made the bundle unorderable. THROWS when the bundle id does not exist. If
21480
- * you don't already have a bundle id, use the Dream Backyard Bundle's —
21481
- * "SS27+SS22+WINDCHILL30-CHARCOAL-17AH" — to check the flow rather than asking the caller for
21482
- * one first.
24358
+ * own product id — the `+`-joined component SKUs from the bundle's product page URL, or a
24359
+ * bundleId from listBundles. Returns the combined price and whether the site will sell the
24360
+ * EXACT combination right now, plus a per-component breakdown (each component's own price and
24361
+ * stock) so a caller can see which single component made the bundle unorderable. THROWS when
24362
+ * the bundle id does not exist. If you don't already have a bundle id, use listBundles to find
24363
+ * one, or the Dream Backyard Bundle's — "SS27+SS22+WINDCHILL30-CHARCOAL-17AH" — to check the
24364
+ * flow rather than asking the caller for one first.
21483
24365
  */
21484
24366
  checkBundle(args: { bundleId: string }): Promise<SolostoveBundleCheck>;
21485
24367
  }
@@ -23021,6 +25903,7 @@ interface thezebraAutoDriver {
23021
25903
  ageFirstLicensed?: number // default 16 when omitted
23022
25904
  violations?: { accidents: number, claims: number, tickets: number } // default a clean record
23023
25905
  occupation?: string // default "OTHER" — the only two confirmed-valid values are "OTHER" and "ENGINEER"
25906
+ residenceOwnership?: 0 | 1 | 2 | 3 // own home/condo/rent/other; default 3 ("Other")
23024
25907
  }
23025
25908
 
23026
25909
  interface thezebraAutoVehicle {
@@ -23035,6 +25918,8 @@ interface thezebraAutoQuotesQuery {
23035
25918
  state: string // 2-letter postal code
23036
25919
  zip: string // 5 digits
23037
25920
  county: string // the county the ZIP sits in — the gateway validates server-side
25921
+ currentlyInsured?: boolean // default true
25922
+ userPurchaseTimeframe?: "TODAY" | "FUTURE" // default "TODAY"
23038
25923
  }
23039
25924
 
23040
25925
  interface thezebraAutoQuote {
@@ -23236,23 +26121,43 @@ interface thezebraAutoQuotes {
23236
26121
  * carrier's own monthly and six-month premium, deductible, and the coverage it priced, as The
23237
26122
  * Zebra's auto quote funnel prices them. This is a priced offer for the person asking, NOT the
23238
26123
  * published averages `getStateRates` and its siblings return. Pass `driver` (`firstName`,
23239
- * `lastName`, `dob` ISO YYYY-MM-DD, `email`, and optionally
23240
- * `ageFirstLicensed`/`violations`/`occupation` each defaults to a clean-record placeholder
23241
- * when omitted), one `vehicle` (`year`, `make`, `model` — a model The Zebra does not rate
23242
- * THROWS naming the URL it tried), the 2-letter `state`, a 5-digit `zip`, and `county` (the
23243
- * county the ZIP sits in — The Zebra validates it server-side and a missing or wrong county is
23244
- * bounced). **The write always binds**the GraphQL gateway at
23245
- * `graphql-gateway.production.thezebra.com` accepts the seed and returns 200 but AS OF
23246
- * 2026-08-27 the results route was bouncing the session to the homepage because
23247
- * `LegacyDriverInput` and `LegacyVehicleInput` accept more fields than an earlier version of
23248
- * this function sent; the measured field map (every field on both inputs, which are confirmed
23249
- * valid, which are still unmeasured) lives in
23250
- * `agents/richard/problems/thezebra-getautoquotes-broken.md` and is not re-derived here. The
23251
- * function throws on a bounce with a message naming the redirect target; `vehicle.submodel`,
23252
- * `driver.education` and `driver.creditScore` remain unsent because no valid value for any of
23253
- * them is confirmed yet sending a guess cannot break the write (all three are nullable) but
23254
- * a wrong guess would look like a fix without being one, so they stay out until a live probe
23255
- * confirms a value. **`advertisedCarriers` is not a quote list and must never be read as
26124
+ * `lastName`, `dob` ISO YYYY-MM-DD, `email`, a real `employment` and `currentCarrier` —
26125
+ * REQUIRED, see their own doc comments, never invented, same rule as a quote identity — and
26126
+ * optionally
26127
+ * `ageFirstLicensed`/`violations`/`occupation`/`residenceOwnership`/`creditScore`/`education`/`hasMilitaryAffiliation`/`insuredLength`,
26128
+ * each defaulting to a clean-record, non-committal placeholder when omitted), one `vehicle`
26129
+ * (`year`, `make`, `model`, and a real `garagingAddress` REQUIRED, never invented, same rule
26130
+ * as a quote identity a model The Zebra does not rate THROWS naming the URL it tried), the
26131
+ * 2-letter `state`, a 5-digit `zip`, `county` (the county the ZIP sits in — The Zebra
26132
+ * validates it server-side and a missing or wrong county is bounced), and optionally
26133
+ * `userPurchaseTimeframe`/`currentBodilyInjuryPerPerson`/`currentBodilyInjuryPerAccident`
26134
+ * (`currentlyInsured` defaults `true` and `false` is refused — see its own doc comment).
26135
+ * **Measured 2026-09-05: `driver.employment` and `driver.currentCarrier` are REQUIRED because
26136
+ * the funnel's own `/car/manual/drivers/details/` page will not complete without a real answer
26137
+ * to both, and neither has an honest default** a call omitting either now throws immediately
26138
+ * rather than discovering the same dead end after a full, ~60-90s funnel walk. **The write
26139
+ * always binds** the GraphQL gateway at `graphql-gateway.production.thezebra.com` accepts
26140
+ * the seed and returns 200. **AS OF 2026-09-05 all six of the funnel's pages are answered and
26141
+ * the results route is REACHED** — the last gate was never a missing mutation field:
26142
+ * `/car/manual/coverage-selection/` computes personalized coverage packages on a THIRD backend
26143
+ * (`coverage-service.production.thezebra.com`) and only unlocks the redirect once its own
26144
+ * "Show quotes at this coverage" button PATCHes a chosen package, which this function now
26145
+ * drives (the "Best" tier — the site's own recommended default). See the write site's own
26146
+ * comment for the measured chain. **A separate, unresolved question**: with the funnel fully
26147
+ * answered, the results page itself sometimes renders a legitimate-looking "we checked with
26148
+ * over 30 insurers and were unable to get any quotes for you … most insurance companies aren't
26149
+ * selling new policies in your area due to temporary restrictions" state instead of quote
26150
+ * cards — reproduced on two (address, zip, county) pairs 200 miles apart with the same
26151
+ * placeholder identity, so it does not look address-specific. Whether that is genuine carrier
26152
+ * unavailability or a soft decline on this function's synthetic/proxied traffic is not yet
26153
+ * determined; `agents/richard/problems/thezebra-getautoquotes-broken.md` carries the evidence.
26154
+ * This function does NOT throw on that state — an empty `quotes` array is what it looks like,
26155
+ * and `parseAutoResults` already treats a page with no `results-card_q2b_*` elements as a
26156
+ * legitimate empty answer rather than an error, which is the correct call for a genuine
26157
+ * carrier-side "nothing to quote" as well as this one. The function throws only when the
26158
+ * funnel itself refuses to reach the coverage-selection or results routes, with a message
26159
+ * naming the redirect target and, where readable, the funnel's own list of which pages are
26160
+ * still unanswered. **`advertisedCarriers` is not a quote list and must never be read as
23256
26161
  * one**: the results page would carry paid carrier placements alongside real offers, separated
23257
26162
  * by `data-cy="results-card_ad_<carrier>"` (ad) versus `data-cy="results-card_q2b_<carrier>"`
23258
26163
  * (real offer), and the advertised names are returned in their own field with no price
@@ -23471,12 +26376,30 @@ interface topviewtixPackageDetails {
23471
26376
  availableUntil: string | null;
23472
26377
  }
23473
26378
 
26379
+ interface topviewtixPackageSummary {
26380
+ id: number;
26381
+ slug: string;
26382
+ name: string;
26383
+ adultsPrice: number | null;
26384
+ kidsPrice: number | null;
26385
+ url: string;
26386
+ }
26387
+
23474
26388
  /**
23475
26389
  * TopView's NYC hop-on-hop-off bus, Statue of Liberty cruise and bike/walking tour packages —
23476
26390
  * getPackageDetails reads one package's live price and its own real-time booking calendar
23477
26391
  * (available/blocked/sold-out dates) off topviewtix.com/new-york/<slug>.
23478
26392
  */
23479
26393
  interface Unit {
26394
+ /**
26395
+ * Lists every TopView tour package currently sold in New York — id, name, slug, adult/kid
26396
+ * price and url — straight off the same package-card grid the site's own home page renders.
26397
+ * The natural entry point before getPackageDetails: a caller who only knows what a person
26398
+ * would SAY ("the hop on hop off bus", "a downtown tour") reads this first and picks the
26399
+ * `slug` to look one up in full.
26400
+ */
26401
+ listPackages(): Promise<topviewtixPackageSummary[]>;
26402
+
23480
26403
  /**
23481
26404
  * Reads one TopView tour package in full — name, description, adult/kid price, and the site's
23482
26405
  * OWN live booking calendar (which dates are open, blocked, or sold out, and how far out the
@@ -23801,6 +26724,63 @@ type TwiddyQuote =
23801
26724
  }
23802
26725
  }
23803
26726
 
26727
+ declare namespace BowmarkProvider_uhc_smallbusiness {
26728
+ // ── UnitedHealthcare Small Business — the unit's own declarations, verbatim ──
26729
+ interface UhcSmallbusinessPlan {
26730
+ planCode: string;
26731
+ planName: string;
26732
+ fullName: string;
26733
+ planMarketType: "LEVEL_FUNDED" | "FULLY_INSURED";
26734
+ metalLevel: string | null;
26735
+ planType: string | null;
26736
+ legalEntity: string | null;
26737
+ perEmployeeMonthlyPremium: number;
26738
+ totalMonthlyPremium: number;
26739
+ deductibleIndividual: string | null;
26740
+ deductibleFamily: string | null;
26741
+ outOfPocketIndividual: string | null;
26742
+ outOfPocketFamily: string | null;
26743
+ primaryCareVisit: string | null;
26744
+ findYourDoctorUrl: string | null;
26745
+ }
26746
+
26747
+ interface UhcSmallbusinessQuote {
26748
+ zip: string;
26749
+ state: string;
26750
+ county: string;
26751
+ effectiveDate: string;
26752
+ employerContributionShare: number;
26753
+ plans: UhcSmallbusinessPlan[];
26754
+ warnings: string[];
26755
+ }
26756
+
26757
+ /**
26758
+ * UnitedHealthcare's small-business store — real level-funded and fully-insured group health
26759
+ * plan premiums for a ZIP and employee count, no sign-in required.
26760
+ */
26761
+ interface Unit {
26762
+ /**
26763
+ * Real level-funded and fully-insured small-group health plan premiums for a ZIP code and
26764
+ * employee count — the same 'Explore Top Selling <State> Plans' list smallbusiness.uhc.com
26765
+ * shows after its anonymous 'Shop Plans' form, no sign-in, no agent contact and no
26766
+ * email-verification round-trip required. Each of the ~20 returned plans carries UHC's own
26767
+ * plan code, market type (level-funded vs. fully-insured), metal tier where ACA-rated,
26768
+ * deductible, out-of-pocket max, primary-care copay and a per-employee AND a total-group
26769
+ * monthly premium. **The premium is UHC's own estimate for a 40-year-old male** — its page
26770
+ * says so in as many words ('The prices provided are estimates based on all employees being
26771
+ * 40-year-old males') — because pricing a real census (each employee's actual age and sex)
26772
+ * requires the multi-step 'Get Plan Recommendations' questionnaire this function does not
26773
+ * walk; a caller wanting THAT number has to go further than an anonymous ZIP-in quote-out read
26774
+ * allows. This is still the number a business owner sees as their first real quote, and it is
26775
+ * the number the small-group renewal story (14% median 2027 hike) is about. Takes a 5-digit
26776
+ * ZIP and a positive employee count; the site rejects neither with an error page, but a ZIP
26777
+ * with no small-group market (rural, out of UHC's book) can come back with an empty `plans`
26778
+ * array, and that is a real answer, not a failure.
26779
+ */
26780
+ getGroupHealthQuote(zip: string, employeeCount: number): Promise<UhcSmallbusinessQuote>;
26781
+ }
26782
+ }
26783
+
23804
26784
  declare namespace BowmarkProvider_ulrichlifestyle {
23805
26785
  // ── Ulrich Lifestyle Structures — the unit's own declarations, verbatim ──
23806
26786
  // Ulrich Lifestyle Structures' OWN shapes — not a capability contract.
@@ -24448,6 +27428,43 @@ interface VoluspaQuizIntro {
24448
27428
  }
24449
27429
  }
24450
27430
 
27431
+ declare namespace BowmarkProvider_vscode {
27432
+ // ── VS Code Documentation — the unit's own declarations, verbatim ──
27433
+ interface VscodeDoc {
27434
+ url: string;
27435
+ title: string;
27436
+ description: string;
27437
+ text: string;
27438
+ warnings: string[];
27439
+ }
27440
+ interface VscodeDocLink {
27441
+ title: string;
27442
+ url: string;
27443
+ description: string | null;
27444
+ }
27445
+
27446
+ /**
27447
+ * VS Code's own documentation site (code.visualstudio.com) — reads one doc page's structured
27448
+ * content (title, description, flattened body text) directly from its server-rendered HTML,
27449
+ * given its URL, or lists every doc page it publishes.
27450
+ */
27451
+ interface Unit {
27452
+ /**
27453
+ * Returns one code.visualstudio.com doc page by its URL — title, description, and the
27454
+ * flattened body text in document order. THROWS on a missing/invalid/off-site url and on a
27455
+ * transport failure, so a caller can distinguish "unreachable" from "empty".
27456
+ */
27457
+ getDoc(url: string): Promise<VscodeDoc>;
27458
+
27459
+ /**
27460
+ * Lists every doc page code.visualstudio.com publishes — title, its own page url, and a
27461
+ * one-line description where the site gives one — parsed from the site's own /llms.txt index.
27462
+ * Every url returned is one getDoc() can read.
27463
+ */
27464
+ listDocPages(): Promise<VscodeDocLink[]>;
27465
+ }
27466
+ }
27467
+
24451
27468
  declare namespace BowmarkProvider_walkerhughes {
24452
27469
  // ── WalkerHughes Insurance — the unit's own declarations, verbatim ──
24453
27470
  // WalkerHughes' OWN shapes — not a capability contract.
@@ -24845,6 +27862,68 @@ interface XpressWaitTime {
24845
27862
  }
24846
27863
  }
24847
27864
 
27865
+ declare namespace BowmarkProvider_ycombinator {
27866
+ // ── Y Combinator — the unit's own declarations, verbatim ──
27867
+ interface YCombinatorArticle {
27868
+ id: number | null;
27869
+ slug: string;
27870
+ title: string;
27871
+ author: string | null;
27872
+ description: string;
27873
+ content: string;
27874
+ categories: string[];
27875
+ youtubeId: string | null;
27876
+ transcript: string | null;
27877
+ url: string;
27878
+ warnings: string[];
27879
+ }
27880
+ interface YCombinatorBlogPost {
27881
+ title: string;
27882
+ author: string | null;
27883
+ publishedAt: string | null;
27884
+ text: string;
27885
+ url: string;
27886
+ warnings: string[];
27887
+ }
27888
+ interface YCombinatorSearchHit {
27889
+ title: string;
27890
+ url: string;
27891
+ category: string | null;
27892
+ excerpt: string;
27893
+ }
27894
+
27895
+ /**
27896
+ * Y Combinator's own site (ycombinator.com) — reads one Startup Library article or blog post
27897
+ * by its URL/slug (application and interview guidance, fundraising, pitching, growth), and
27898
+ * full-text searches the library with the site's own public search key.
27899
+ */
27900
+ interface Unit {
27901
+ /**
27902
+ * Returns one YC Startup Library article by its /library/<slug> URL or bare slug — title,
27903
+ * author, description, markdown content, categories, and (for a video talk) the YouTube id and
27904
+ * transcript. Covers application and interview guidance, pitching, fundraising and growth.
27905
+ * THROWS on a missing/invalid/off-site url and on a dead or renamed slug, so a caller can
27906
+ * distinguish "no such article" from "empty". Example: getArticle("6h-startup-pricing-101").
27907
+ */
27908
+ getArticle(url: string): Promise<YCombinatorArticle>;
27909
+
27910
+ /**
27911
+ * Returns one YC blog post by its /blog/<slug>/ URL or bare slug — title, author, publish
27912
+ * date, and the flattened body text in document order. THROWS on a missing/invalid/off-site
27913
+ * url and on a dead or renamed slug. Example: getBlogPost("tips-for-yc-interviews").
27914
+ */
27915
+ getBlogPost(url: string): Promise<YCombinatorBlogPost>;
27916
+
27917
+ /**
27918
+ * Full-text searches the YC Startup Library using the site's own public search key — title,
27919
+ * url, category breadcrumb and a body excerpt per hit, up to 10. Returns an empty array on
27920
+ * zero matches; THROWS on an empty query or a transport failure. Example: search("how to pitch
27921
+ * your startup").
27922
+ */
27923
+ search(query: string): Promise<YCombinatorSearchHit[]>;
27924
+ }
27925
+ }
27926
+
24848
27927
  declare namespace BowmarkProvider_yelp {
24849
27928
  // ── Yelp — the unit's own declarations, verbatim ──
24850
27929
  interface YelpSearchArgs {
@@ -25013,6 +28092,21 @@ interface YoutubeTranscript {
25013
28092
 
25014
28093
  declare namespace BowmarkProvider_zennioptical {
25015
28094
  // ── Zenni Optical — the unit's own declarations, verbatim ──
28095
+ interface ZenniFrameSummary {
28096
+ sku: string;
28097
+ name: string;
28098
+ color: string;
28099
+ price: number;
28100
+ salePrice: number;
28101
+ inStock: boolean;
28102
+ shape: string | null;
28103
+ material: string | null;
28104
+ url: string;
28105
+ }
28106
+ interface ZenniFrameSearch {
28107
+ frames: ZenniFrameSummary[];
28108
+ total: number;
28109
+ }
25016
28110
  interface ZenniFrame {
25017
28111
  sku: string;
25018
28112
  name: string;
@@ -25044,6 +28138,13 @@ interface ZenniLensPriceRow {
25044
28138
  * site's own configurator, and checks live per-SKU stock.
25045
28139
  */
25046
28140
  interface Unit {
28141
+ /**
28142
+ * Searches Zenni's own storefront catalog for what a shopper would type ("round tortoise",
28143
+ * "titanium rimless") and returns matching frames with the sku every other function here
28144
+ * takes. The way in when you don't already hold a sku.
28145
+ */
28146
+ searchFrames(query: string, limit?: number): Promise<ZenniFrameSearch>;
28147
+
25047
28148
  /**
25048
28149
  * Reads one frame's name, base price and per-color-variant price straight off the product
25049
28150
  * page's own embedded data. No rendering.
@@ -25882,65 +28983,101 @@ interface BowmarkProviders {
25882
28983
  aa: BowmarkProvider_aa.Unit;
25883
28984
  aauto: BowmarkProvider_aauto.Unit;
25884
28985
  abercrombie: BowmarkProvider_abercrombie.Unit;
28986
+ achosahw: BowmarkProvider_achosahw.Unit;
28987
+ acqualinaresort: BowmarkProvider_acqualinaresort.Unit;
25885
28988
  aiper: BowmarkProvider_aiper.Unit;
25886
28989
  ajmadison: BowmarkProvider_ajmadison.Unit;
25887
28990
  allied: BowmarkProvider_allied.Unit;
25888
28991
  alphavantage: BowmarkProvider_alphavantage.Unit;
28992
+ americandreamvacations: BowmarkProvider_americandreamvacations.Unit;
25889
28993
  americanstandard: BowmarkProvider_americanstandard.Unit;
28994
+ americanvisionwindows: BowmarkProvider_americanvisionwindows.Unit;
25890
28995
  amramp: BowmarkProvider_amramp.Unit;
25891
28996
  ancientnutrition: BowmarkProvider_ancientnutrition.Unit;
25892
28997
  andersenwindows: BowmarkProvider_andersenwindows.Unit;
28998
+ andstr: BowmarkProvider_andstr.Unit;
28999
+ anthropic_com: BowmarkProvider_anthropic_com.Unit;
29000
+ antunes: BowmarkProvider_antunes.Unit;
29001
+ aosom: BowmarkProvider_aosom.Unit;
25893
29002
  apple: BowmarkProvider_apple.Unit;
25894
29003
  aquaphoenixsci: BowmarkProvider_aquaphoenixsci.Unit;
29004
+ arajet: BowmarkProvider_arajet.Unit;
25895
29005
  archipelago: BowmarkProvider_archipelago.Unit;
29006
+ artpix3d: BowmarkProvider_artpix3d.Unit;
25896
29007
  ashleyfurniture: BowmarkProvider_ashleyfurniture.Unit;
25897
29008
  asppoolco: BowmarkProvider_asppoolco.Unit;
25898
29009
  atlasoceanvoyages: BowmarkProvider_atlasoceanvoyages.Unit;
25899
29010
  atlasseniorliving: BowmarkProvider_atlasseniorliving.Unit;
29011
+ audibel: BowmarkProvider_audibel.Unit;
25900
29012
  autocamp: BowmarkProvider_autocamp.Unit;
25901
29013
  avantstay: BowmarkProvider_avantstay.Unit;
25902
29014
  avis: BowmarkProvider_avis.Unit;
29015
+ ayreshotels: BowmarkProvider_ayreshotels.Unit;
25903
29016
  azazie: BowmarkProvider_azazie.Unit;
25904
29017
  azure: BowmarkProvider_azure.Unit;
25905
29018
  bankmycell: BowmarkProvider_bankmycell.Unit;
25906
29019
  barletta: BowmarkProvider_barletta.Unit;
29020
+ barnesfoundation: BowmarkProvider_barnesfoundation.Unit;
25907
29021
  baublebar: BowmarkProvider_baublebar.Unit;
25908
29022
  bcparkscamping: BowmarkProvider_bcparkscamping.Unit;
25909
29023
  beatthebomb: BowmarkProvider_beatthebomb.Unit;
29024
+ bellwethercoffee: BowmarkProvider_bellwethercoffee.Unit;
29025
+ beltservice: BowmarkProvider_beltservice.Unit;
29026
+ benelliusa: BowmarkProvider_benelliusa.Unit;
25910
29027
  bennington: BowmarkProvider_bennington.Unit;
25911
29028
  bestbuy: BowmarkProvider_bestbuy.Unit;
25912
29029
  bhphoto: BowmarkProvider_bhphoto.Unit;
29030
+ bigairusa: BowmarkProvider_bigairusa.Unit;
25913
29031
  bigjoeforklifts: BowmarkProvider_bigjoeforklifts.Unit;
25914
29032
  bigrentz: BowmarkProvider_bigrentz.Unit;
25915
29033
  bing: BowmarkProvider_bing.Unit;
29034
+ bishops: BowmarkProvider_bishops.Unit;
25916
29035
  blackstoneproducts: BowmarkProvider_blackstoneproducts.Unit;
25917
29036
  blenderseyewear: BowmarkProvider_blenderseyewear.Unit;
25918
29037
  bluehaven: BowmarkProvider_bluehaven.Unit;
25919
29038
  bluesignal: BowmarkProvider_bluesignal.Unit;
25920
29039
  bmwusa: BowmarkProvider_bmwusa.Unit;
29040
+ boglewinery: BowmarkProvider_boglewinery.Unit;
25921
29041
  bollandbranch: BowmarkProvider_bollandbranch.Unit;
29042
+ borsheims: BowmarkProvider_borsheims.Unit;
29043
+ boxlunch: BowmarkProvider_boxlunch.Unit;
25922
29044
  boydsleep: BowmarkProvider_boydsleep.Unit;
29045
+ brius: BowmarkProvider_brius.Unit;
25923
29046
  brixton: BowmarkProvider_brixton.Unit;
25924
29047
  bulletproof: BowmarkProvider_bulletproof.Unit;
29048
+ bungalow: BowmarkProvider_bungalow.Unit;
25925
29049
  bykoket: BowmarkProvider_bykoket.Unit;
25926
29050
  byltbasics: BowmarkProvider_byltbasics.Unit;
29051
+ cabinsforyou: BowmarkProvider_cabinsforyou.Unit;
29052
+ caliberhealth: BowmarkProvider_caliberhealth.Unit;
25927
29053
  califloors: BowmarkProvider_califloors.Unit;
25928
29054
  camelcamelcamel: BowmarkProvider_camelcamelcamel.Unit;
25929
29055
  cancer: BowmarkProvider_cancer.Unit;
25930
29056
  capitalbrands: BowmarkProvider_capitalbrands.Unit;
25931
29057
  caraway: BowmarkProvider_caraway.Unit;
25932
29058
  carepatrol: BowmarkProvider_carepatrol.Unit;
29059
+ carmelrealtycompany: BowmarkProvider_carmelrealtycompany.Unit;
29060
+ carolefabrics: BowmarkProvider_carolefabrics.Unit;
29061
+ carpetlandusa: BowmarkProvider_carpetlandusa.Unit;
25933
29062
  cars: BowmarkProvider_cars.Unit;
29063
+ carusohomes: BowmarkProvider_carusohomes.Unit;
29064
+ casadragones: BowmarkProvider_casadragones.Unit;
29065
+ cbhhomes: BowmarkProvider_cbhhomes.Unit;
29066
+ champxpress: BowmarkProvider_champxpress.Unit;
25934
29067
  chantecaille: BowmarkProvider_chantecaille.Unit;
25935
29068
  cheapflights: BowmarkProvider_cheapflights.Unit;
25936
29069
  chesmar: BowmarkProvider_chesmar.Unit;
29070
+ chipotle: BowmarkProvider_chipotle.Unit;
25937
29071
  chriscraft: BowmarkProvider_chriscraft.Unit;
25938
29072
  classichome: BowmarkProvider_classichome.Unit;
25939
29073
  classpass: BowmarkProvider_classpass.Unit;
29074
+ claude_com: BowmarkProvider_claude_com.Unit;
29075
+ claude_support: BowmarkProvider_claude_support.Unit;
25940
29076
  claudemarketplaces_com: BowmarkProvider_claudemarketplaces_com.Unit;
25941
29077
  cleanairlawncare: BowmarkProvider_cleanairlawncare.Unit;
25942
29078
  cloudflare: BowmarkProvider_cloudflare.Unit;
25943
29079
  clubchampion: BowmarkProvider_clubchampion.Unit;
29080
+ code_claude_com: BowmarkProvider_code_claude_com.Unit;
25944
29081
  consultnet: BowmarkProvider_consultnet.Unit;
25945
29082
  couponfollow: BowmarkProvider_couponfollow.Unit;
25946
29083
  cruiselakegeneva: BowmarkProvider_cruiselakegeneva.Unit;
@@ -25950,6 +29087,7 @@ interface BowmarkProviders {
25950
29087
  davidsonhomes: BowmarkProvider_davidsonhomes.Unit;
25951
29088
  deangroup: BowmarkProvider_deangroup.Unit;
25952
29089
  decked: BowmarkProvider_decked.Unit;
29090
+ decksdirect: BowmarkProvider_decksdirect.Unit;
25953
29091
  developersopenai: BowmarkProvider_developersopenai.Unit;
25954
29092
  dice: BowmarkProvider_dice.Unit;
25955
29093
  dickssportinggoods: BowmarkProvider_dickssportinggoods.Unit;
@@ -25957,6 +29095,7 @@ interface BowmarkProviders {
25957
29095
  discounttire: BowmarkProvider_discounttire.Unit;
25958
29096
  disney: BowmarkProvider_disney.Unit;
25959
29097
  doordash: BowmarkProvider_doordash.Unit;
29098
+ dumpsters: BowmarkProvider_dumpsters.Unit;
25960
29099
  ebay: BowmarkProvider_ebay.Unit;
25961
29100
  elevenlabs: BowmarkProvider_elevenlabs.Unit;
25962
29101
  embroker: BowmarkProvider_embroker.Unit;
@@ -25969,6 +29108,7 @@ interface BowmarkProviders {
25969
29108
  extraspace: BowmarkProvider_extraspace.Unit;
25970
29109
  facerealityskincare: BowmarkProvider_facerealityskincare.Unit;
25971
29110
  firstdibs: BowmarkProvider_firstdibs.Unit;
29111
+ fivebelow: BowmarkProvider_fivebelow.Unit;
25972
29112
  fivestarbathsolutions: BowmarkProvider_fivestarbathsolutions.Unit;
25973
29113
  flightradar24: BowmarkProvider_flightradar24.Unit;
25974
29114
  ford: BowmarkProvider_ford.Unit;
@@ -25978,8 +29118,11 @@ interface BowmarkProviders {
25978
29118
  fred: BowmarkProvider_fred.Unit;
25979
29119
  furniture: BowmarkProvider_furniture.Unit;
25980
29120
  g2: BowmarkProvider_g2.Unit;
29121
+ gasbuddy: BowmarkProvider_gasbuddy.Unit;
29122
+ gazelle: BowmarkProvider_gazelle.Unit;
25981
29123
  geico: BowmarkProvider_geico.Unit;
25982
29124
  github: BowmarkProvider_github.Unit;
29125
+ glama: BowmarkProvider_glama.Unit;
25983
29126
  glassesusa: BowmarkProvider_glassesusa.Unit;
25984
29127
  goloadup: BowmarkProvider_goloadup.Unit;
25985
29128
  goodway: BowmarkProvider_goodway.Unit;
@@ -26002,6 +29145,7 @@ interface BowmarkProviders {
26002
29145
  hobie: BowmarkProvider_hobie.Unit;
26003
29146
  hodjapasha: BowmarkProvider_hodjapasha.Unit;
26004
29147
  holidaybuilders: BowmarkProvider_holidaybuilders.Unit;
29148
+ hottopic: BowmarkProvider_hottopic.Unit;
26005
29149
  hunter: BowmarkProvider_hunter.Unit;
26006
29150
  ibuypower: BowmarkProvider_ibuypower.Unit;
26007
29151
  identitygroup: BowmarkProvider_identitygroup.Unit;
@@ -26032,6 +29176,7 @@ interface BowmarkProviders {
26032
29176
  liquiddeath: BowmarkProvider_liquiddeath.Unit;
26033
29177
  liquidspace: BowmarkProvider_liquidspace.Unit;
26034
29178
  littlewordsproject: BowmarkProvider_littlewordsproject.Unit;
29179
+ lmstudio: BowmarkProvider_lmstudio.Unit;
26035
29180
  lonelyplanet: BowmarkProvider_lonelyplanet.Unit;
26036
29181
  louvershop: BowmarkProvider_louvershop.Unit;
26037
29182
  lovelybride: BowmarkProvider_lovelybride.Unit;
@@ -26043,6 +29188,7 @@ interface BowmarkProviders {
26043
29188
  marriott: BowmarkProvider_marriott.Unit;
26044
29189
  mcdonalds: BowmarkProvider_mcdonalds.Unit;
26045
29190
  mcp_registry: BowmarkProvider_mcp_registry.Unit;
29191
+ mcp_so: BowmarkProvider_mcp_so.Unit;
26046
29192
  medicalguardian: BowmarkProvider_medicalguardian.Unit;
26047
29193
  medicare: BowmarkProvider_medicare.Unit;
26048
29194
  mergify: BowmarkProvider_mergify.Unit;
@@ -26072,8 +29218,10 @@ interface BowmarkProviders {
26072
29218
  pacificcompanies: BowmarkProvider_pacificcompanies.Unit;
26073
29219
  paypal: BowmarkProvider_paypal.Unit;
26074
29220
  perennialsandsutherland: BowmarkProvider_perennialsandsutherland.Unit;
29221
+ pilotprotocol: BowmarkProvider_pilotprotocol.Unit;
26075
29222
  pirateship: BowmarkProvider_pirateship.Unit;
26076
29223
  pizzahut: BowmarkProvider_pizzahut.Unit;
29224
+ platform_claude_com: BowmarkProvider_platform_claude_com.Unit;
26077
29225
  poshmark: BowmarkProvider_poshmark.Unit;
26078
29226
  positivegrid: BowmarkProvider_positivegrid.Unit;
26079
29227
  premierbuildings: BowmarkProvider_premierbuildings.Unit;
@@ -26088,8 +29236,10 @@ interface BowmarkProviders {
26088
29236
  rishitea: BowmarkProvider_rishitea.Unit;
26089
29237
  ritani: BowmarkProvider_ritani.Unit;
26090
29238
  roofmaxx: BowmarkProvider_roofmaxx.Unit;
29239
+ rover: BowmarkProvider_rover.Unit;
26091
29240
  rvshare: BowmarkProvider_rvshare.Unit;
26092
29241
  saatva: BowmarkProvider_saatva.Unit;
29242
+ safetywing: BowmarkProvider_safetywing.Unit;
26093
29243
  saltandstone: BowmarkProvider_saltandstone.Unit;
26094
29244
  samsclub: BowmarkProvider_samsclub.Unit;
26095
29245
  scentbird: BowmarkProvider_scentbird.Unit;
@@ -26133,6 +29283,7 @@ interface BowmarkProviders {
26133
29283
  trektravel: BowmarkProvider_trektravel.Unit;
26134
29284
  trophysignaturehomes: BowmarkProvider_trophysignaturehomes.Unit;
26135
29285
  twiddy: BowmarkProvider_twiddy.Unit;
29286
+ uhc_smallbusiness: BowmarkProvider_uhc_smallbusiness.Unit;
26136
29287
  ulrichlifestyle: BowmarkProvider_ulrichlifestyle.Unit;
26137
29288
  ups: BowmarkProvider_ups.Unit;
26138
29289
  usps: BowmarkProvider_usps.Unit;
@@ -26142,12 +29293,14 @@ interface BowmarkProviders {
26142
29293
  villagerealtyobx: BowmarkProvider_villagerealtyobx.Unit;
26143
29294
  visible: BowmarkProvider_visible.Unit;
26144
29295
  voluspa: BowmarkProvider_voluspa.Unit;
29296
+ vscode: BowmarkProvider_vscode.Unit;
26145
29297
  walkerhughes: BowmarkProvider_walkerhughes.Unit;
26146
29298
  walmart: BowmarkProvider_walmart.Unit;
26147
29299
  waterfurnace: BowmarkProvider_waterfurnace.Unit;
26148
29300
  wellfound: BowmarkProvider_wellfound.Unit;
26149
29301
  winestyles: BowmarkProvider_winestyles.Unit;
26150
29302
  xpresswellnessurgentcare: BowmarkProvider_xpresswellnessurgentcare.Unit;
29303
+ ycombinator: BowmarkProvider_ycombinator.Unit;
26151
29304
  yelp: BowmarkProvider_yelp.Unit;
26152
29305
  yorkwallcoverings: BowmarkProvider_yorkwallcoverings.Unit;
26153
29306
  yourarborhome: BowmarkProvider_yourarborhome.Unit;
@@ -77886,6 +81039,7 @@ interface BowmarkLibrary {
77886
81039
  developer_api_key_signup: BowmarkCapability_developer_api_key_signup.Unit;
77887
81040
  domain: BowmarkCapability_domain.Unit;
77888
81041
  email: BowmarkCapability_email.Unit;
81042
+ entertainment_merch: BowmarkCapability_entertainment_merch.Unit;
77889
81043
  flights: BowmarkCapability_flights.Unit;
77890
81044
  game_soundtrack_composer_credits: BowmarkCapability_game_soundtrack_composer_credits.Unit;
77891
81045
  git_commit_history: BowmarkCapability_git_commit_history.Unit;
@@ -77899,6 +81053,7 @@ interface BowmarkLibrary {
77899
81053
  mcp_registry: BowmarkCapability_mcp_registry.Unit;
77900
81054
  music: BowmarkCapability_music.Unit;
77901
81055
  pcparts: BowmarkCapability_pcparts.Unit;
81056
+ phone_price: BowmarkCapability_phone_price.Unit;
77902
81057
  phone_trade_in: BowmarkCapability_phone_trade_in.Unit;
77903
81058
  pricing: BowmarkCapability_pricing.Unit;
77904
81059
  products: BowmarkCapability_products.Unit;
@@ -77914,6 +81069,7 @@ interface BowmarkLibrary {
77914
81069
  text_to_speech: BowmarkCapability_text_to_speech.Unit;
77915
81070
  theme_park_tickets: BowmarkCapability_theme_park_tickets.Unit;
77916
81071
  weather: BowmarkCapability_weather.Unit;
81072
+ wireless: BowmarkCapability_wireless.Unit;
77917
81073
  yoga_outfit_shopping: BowmarkCapability_yoga_outfit_shopping.Unit;
77918
81074
  providers: BowmarkProviders;
77919
81075
  }