@bowmark/web 1.12.3 → 1.15.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: 23b6633ded987b433276311bd6c89f96297649a628b9687bc4fbd8d39745a4ee
9
+ // 43 capabilities, 331 providers, 833 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,95 @@ type ProductResult = {
1631
1670
  }
1632
1671
  }
1633
1672
 
1673
+ declare namespace BowmarkCapability_pet_boarding {
1674
+ // ── Overnight pet boarding search — the unit's own declarations, verbatim ──
1675
+ type PetBoardingSitter = {
1676
+ name: string
1677
+ profileUrl: string
1678
+ ratingValue: number | null
1679
+ reviewCount: number | null
1680
+ startingNightlyRateCents: number // before the provider's service fee and per-pet pricing
1681
+ currency: string
1682
+ location: string | null
1683
+ distanceMi: number | null
1684
+ }
1685
+ type SearchPetBoardingResult = {
1686
+ location: string
1687
+ startDate: string
1688
+ endDate: string
1689
+ sitters: PetBoardingSitter[] // [] when nothing is listed — a real, complete answer
1690
+ warnings: string[] // always present; empty when nothing was dropped
1691
+ }
1692
+
1693
+ type CallOptions = {
1694
+ timeoutMs?: number // per-provider budget in ms, default 30000, clamped to 1000-55000.
1695
+ // A provider slower than this is DROPPED from the results and
1696
+ // NAMED in warnings — never silently absent
1697
+ }
1698
+
1699
+ /**
1700
+ * Finds overnight pet-boarding sitters for a city and a specific date range — starting nightly
1701
+ * rate, rating, review count and distance — aggregated via Rover.
1702
+ */
1703
+ interface Unit {
1704
+ /**
1705
+ * Searches overnight pet-boarding sitters for a city and increasing ISO start/end dates —
1706
+ * `bowmark.pet_boarding.search({ location: "Austin, TX", startDate: "2026-12-24", endDate:
1707
+ * "2026-12-28" })`. Returns each sitter's starting per-night rate for that stay (before the
1708
+ * provider's service fee and before per-pet pricing), rating, review count and distance.
1709
+ * Returns `sitters: []` when nothing is listed for that city and stay, a real, complete
1710
+ * answer, not a failure.
1711
+ */
1712
+ search(args: { location: string; startDate: string; endDate: string }, options?: CallOptions): Promise<SearchPetBoardingResult>;
1713
+ }
1714
+ }
1715
+
1716
+ declare namespace BowmarkCapability_phone_price {
1717
+ // ── Phone price comparison (carriers) — the unit's own declarations, verbatim ──
1718
+ type PhonePriceOffer = {
1719
+ carrier: string // which carrier this offer is from
1720
+ listPriceUsd: number | null // full price of the device / matched storage variant
1721
+ monthlyPriceUsd: number | null // financed monthly payment
1722
+ financingTermMonths: number | null // months monthlyPriceUsd is amortised over
1723
+ tradeInCreditUsd: number | null // best credit for tradeInModel; always null on
1724
+ // a visible row (no per-device figure published)
1725
+ sourceUrl: string // the page this price was read from
1726
+ }
1727
+ type PhonePriceCompareResult = {
1728
+ offers: PhonePriceOffer[] // one row per carrier that answered, unsorted — read
1729
+ // listPriceUsd to rank
1730
+ warnings: string[] // always present; names a carrier that did not answer.
1731
+ // A carrier named here priced NOTHING — read this before
1732
+ // concluding it doesn't sell the phone
1733
+ }
1734
+
1735
+ type CallOptions = {
1736
+ timeoutMs?: number // per-provider budget in ms, default 30000, clamped to 1000-55000.
1737
+ // A provider slower than this is DROPPED from the results and
1738
+ // NAMED in warnings — never silently absent
1739
+ }
1740
+
1741
+ /**
1742
+ * What a phone actually costs right now, across carriers — T-Mobile's live device-page pricing
1743
+ * and financing plus every promotion's per-trade-in-device credit, and Visible's catalogue
1744
+ * price and Affirm financing for a matched storage variant, merged into one price-sorted list.
1745
+ * Built for a chip-cost price hike that repriced Android flagships across carriers at once, so
1746
+ * a shopper can compare instead of reading one carrier's page.
1747
+ */
1748
+ interface Unit {
1749
+ /**
1750
+ * Prices one phone across T-Mobile and Visible in parallel and returns a price-sorted list.
1751
+ * `model` is matched against Visible's catalogue and used to reconstruct T-Mobile's device
1752
+ * path (there is no cross-carrier search endpoint) — a model neither matcher can place drops
1753
+ * that carrier with a `warnings` entry naming why, never a silent wrong phone. `tradeInModel`
1754
+ * resolves T-Mobile's best matching promotion credit; Visible never returns a per-device
1755
+ * credit figure. `storageGb` picks Visible's matching variant (T-Mobile's pricing call carries
1756
+ * no storage variants).
1757
+ */
1758
+ compare(args: { model: string; storageGb?: number; tradeInModel?: string; tmobileDevicePath?: string }): Promise<PhonePriceCompareResult>;
1759
+ }
1760
+ }
1761
+
1634
1762
  declare namespace BowmarkCapability_phone_trade_in {
1635
1763
  // ── Phone trade-in value — the unit's own declarations, verbatim ──
1636
1764
  // The capability's own condition vocabulary — four tiers every buyback
@@ -1962,10 +2090,16 @@ interface BasketItemMatch {
1962
2090
  }
1963
2091
  interface RetailerBasket {
1964
2092
  total: { amount: number; currency: string } | null // sums matched only — a partial
1965
- // sum whenever incomplete is
1966
- // non-empty
2093
+ // sum whenever unpriced, unmatched
2094
+ // or incomplete is non-empty
1967
2095
  matched: BasketItemMatch[]
1968
- unavailable: string[] // this retailer ANSWERED and has no in-stock priced match
2096
+ unavailable: string[] // this retailer ANSWERED with no in-stock row at all —
2097
+ // a real stockout
2098
+ unmatched: string[] // this retailer answered with in-stock rows, none identifiable
2099
+ // as the thing asked for — NOT out of stock; ask more
2100
+ // specifically, or read their search page. Not in total
2101
+ unpriced: string[] // this retailer HAS it in stock and rendered no price — NOT
2102
+ // out of stock; go read the price on the page. Not in total
1969
2103
  incomplete: string[] // this retailer's search never answered — NOT out of stock,
1970
2104
  // nothing was learned; retry with fewer items or more time
1971
2105
  }
@@ -1982,19 +2116,24 @@ type CallOptions = {
1982
2116
  /**
1983
2117
  * Given a list of item queries (a school supply list), fans out to Target and Walmart search,
1984
2118
  * 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.
2119
+ * total plus which items neither retailer has in stock right now — kept apart from the items a
2120
+ * retailer stocks but would not price, and from the searches that never answered.
1986
2121
  */
1987
2122
  interface Unit {
1988
2123
  /**
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`.
2124
+ * Prices a multi-item shopping list at Target and Walmart, one basket total per retailer. ONLY
2125
+ * `unavailable` is a stockout: the retailer answered and had nothing in stock at all. The
2126
+ * other three are not, and must never be reported as onean item the retailer HAS in stock
2127
+ * but rendered no price for is in `unpriced` (the price is on its product page, not the search
2128
+ * tile); an item it answered about with in-stock rows none of which could be identified as the
2129
+ * thing asked for is in `unmatched` (a limit of the matching, not of the shop — ask again in
2130
+ * the wording a listing would use); an item whose search never answered at all is in
2131
+ * `incomplete` (nothing was learned). Each of those three makes the retailer's total a partial
2132
+ * sum, and every one of those items is also named in `warnings`. Never throws on one retailer
2133
+ * being unreachable — that retailer's basket is dropped and named in `warnings` instead;
2134
+ * throws only when BOTH retailers failed on every item. Walmart drives a real browser per item
2135
+ * and every item is searched at once, so a long list is what costs time: price fewer items per
2136
+ * call before reaching for a larger `timeoutMs`.
1998
2137
  */
1999
2138
  priceList(args: { items: string[] }): Promise<SchoolShoppingBasket>;
2000
2139
  }
@@ -2424,6 +2563,35 @@ interface ForecastResult {
2424
2563
  }
2425
2564
  }
2426
2565
 
2566
+ declare namespace BowmarkCapability_wireless {
2567
+ // ── wireless plan all-in price — the unit's own declarations, verbatim ──
2568
+ interface CarrierAllInPrice {
2569
+ carrier: string;
2570
+ advertisedPricePerLineUsd: number;
2571
+ allInMonthlyTotalUsd: number;
2572
+ }
2573
+ interface WirelessAllInPriceResult {
2574
+ carriers: CarrierAllInPrice[];
2575
+ warnings: string[];
2576
+ }
2577
+
2578
+ /**
2579
+ * Fans a plan/line configuration out across carrier plan-builder flows and returns each
2580
+ * carrier's advertised price next to its real all-in monthly total (activation fee, per-line
2581
+ * surcharges). Not yet implemented — verizon.getPlanTotal and att.getPlanTotal are both
2582
+ * provider-side stubs; see packages/providers/{verizon,att}/manifest.json.
2583
+ */
2584
+ interface Unit {
2585
+ /**
2586
+ * For a given line count, fans out across every carrier this capability declares and returns
2587
+ * each one's advertised per-line price next to its real all-in monthly total. Not yet
2588
+ * implemented — blocked on verizon.getPlanTotal and att.getPlanTotal, both provider-side stubs
2589
+ * today.
2590
+ */
2591
+ compareAllInPrice(arg: { lineCount: number; addOns?: string[] }): Promise<WirelessAllInPriceResult>;
2592
+ }
2593
+ }
2594
+
2427
2595
  declare namespace BowmarkCapability_yoga_outfit_shopping {
2428
2596
  // ── Coordinated yoga outfit shopping — the unit's own declarations, verbatim ──
2429
2597
  interface YogaOutfitItem {
@@ -2979,6 +3147,89 @@ interface abercrombieStockQuery {
2979
3147
  }
2980
3148
  }
2981
3149
 
3150
+ declare namespace BowmarkProvider_achosahw {
3151
+ // ── Achosa Home Warranty — the unit's own declarations, verbatim ──
3152
+ // Achosa's OWN shapes — not a capability contract.
3153
+
3154
+ interface AchosahwStateEntry { name: string; categoryId: number }
3155
+ interface AchosahwStateList { states: AchosahwStateEntry[] }
3156
+
3157
+ interface AchosahwQuote {
3158
+ state: string;
3159
+ coverageLevel: string; // "Core" | "Prime" | "Prime Plus" | "Pro"
3160
+ term: string; // "Monthly" | "Yearly"
3161
+ propertyType: string; // "Single Family Home" | "Townhome/Condo" | "Duplex" | "Triplex" | "Fourplex"
3162
+ planName: string | null; // the site's own SKU display name for this combination
3163
+ price: number; // 0 when isAvailable is false
3164
+ isAvailable: boolean; // false = this state does not sell this exact combination
3165
+ configureUrl: string; // the live configurator page, pre-scoped to this state
3166
+ }
3167
+
3168
+ interface AchosahwQuoteArgs {
3169
+ state: string; // required, e.g. "Texas" — see listStates()
3170
+ coverageLevel?: string; // default "Core"
3171
+ term?: string; // default "Monthly"
3172
+ propertyType?: string; // default "Single Family Home"
3173
+ }
3174
+
3175
+ /**
3176
+ * Achosa Home Warranty plan configurator — real per-state home-warranty pricing across
3177
+ * coverage tier, billing term and property type, read from the site's own live pricing
3178
+ * endpoint rather than a rate card.
3179
+ */
3180
+ interface Unit {
3181
+ /**
3182
+ * Reads Achosa's own /shop state selector and returns every US state Achosa currently sells a
3183
+ * home-warranty plan in, each with the site's own numeric category id used to scope getQuote's
3184
+ * configurator URL.
3185
+ */
3186
+ listStates(): Promise<AchosahwStateList>;
3187
+
3188
+ /**
3189
+ * Prices one real, purchasable Homeowner's plan combination by calling the exact pricing
3190
+ * endpoint the site's own configurator calls. `state` is required (call listStates() for the
3191
+ * current list); `coverageLevel`, `term` and `propertyType` default to Core / Monthly / Single
3192
+ * Family Home. A combination the state does not sell (e.g. a coverage tier not offered in that
3193
+ * state's price region) returns `isAvailable: false` and `price: 0` rather than throwing,
3194
+ * matching the site's own "Not Available For Sale" state. THROWS on an unknown state or an
3195
+ * unrecognized coverageLevel/term/propertyType value, naming the accepted set.
3196
+ */
3197
+ getQuote(args: AchosahwQuoteArgs): Promise<AchosahwQuote>;
3198
+ }
3199
+ }
3200
+
3201
+ declare namespace BowmarkProvider_acqualinaresort {
3202
+ // ── Acqualina Resort & Residences — the unit's own declarations, verbatim ──
3203
+ interface AcqualinaRate {
3204
+ planName: string;
3205
+ rateCode: string | null;
3206
+ planDescription: string | null;
3207
+ pricePerNight: number | null;
3208
+ originalPricePerNight: number | null;
3209
+ currency: "USD";
3210
+ }
3211
+
3212
+ interface AcqualinaRoomAvailability {
3213
+ roomName: string;
3214
+ bedInfo: string | null;
3215
+ sleeps: string | null;
3216
+ rates: AcqualinaRate[];
3217
+ }
3218
+
3219
+ /**
3220
+ * Acqualina Resort & Residences' own SynXis GEM reservation engine — real-time room-type
3221
+ * availability and per-night pricing for its Sunny Isles Beach property, for given dates and
3222
+ * party size.
3223
+ */
3224
+ interface Unit {
3225
+ /**
3226
+ * Runs Acqualina's own reservation engine for one stay and returns real room-type availability
3227
+ * with per-night pricing for every rate plan on offer.
3228
+ */
3229
+ searchAvailability(arrive: string, depart: string, adults: number, children?: number): Promise<AcqualinaRoomAvailability[]>;
3230
+ }
3231
+ }
3232
+
2982
3233
  declare namespace BowmarkProvider_aiper {
2983
3234
  // ── Aiper — the unit's own declarations, verbatim ──
2984
3235
  interface AiperPoolOption {
@@ -3140,6 +3391,48 @@ interface AlphavantageSignUpResult {
3140
3391
  }
3141
3392
  }
3142
3393
 
3394
+ declare namespace BowmarkProvider_americandreamvacations {
3395
+ // ── American Dream Vacations — the unit's own declarations, verbatim ──
3396
+ interface AdvLocation {
3397
+ storeId: string;
3398
+ name: string;
3399
+ }
3400
+
3401
+ interface AdvVehicle {
3402
+ id: string;
3403
+ unitId: string;
3404
+ model: string;
3405
+ make: string;
3406
+ vehicleClass: "a" | "b" | "c" | "t";
3407
+ vehicleClassLabel: string;
3408
+ sleeps: number | null;
3409
+ lengthFt: number | null;
3410
+ dailyRate: number | null;
3411
+ weeklyRate: number | null;
3412
+ currency: "USD";
3413
+ electricalConnection: string | null;
3414
+ storeId: string;
3415
+ storeName: string;
3416
+ }
3417
+
3418
+ /**
3419
+ * American Dream Vacations' own RV rental inventory search (americandreamvacations.net) —
3420
+ * given one of their 10 store locations and an RV class (Class A/B/C or Trailer), returns the
3421
+ * real, priced units the site itself lists: unit number, model, make, sleeps, length,
3422
+ * daily/weekly rate and electrical connection. No login, no dates required.
3423
+ */
3424
+ interface Unit {
3425
+ /** Returns American Dream Vacations' own list of rental store locations and their store ids. */
3426
+ listLocations(): Promise<AdvLocation[]>;
3427
+
3428
+ /**
3429
+ * Runs American Dream Vacations' own availability search for one store location and vehicle
3430
+ * class and returns the real, priced inventory the site lists.
3431
+ */
3432
+ searchInventory(location: string, vehicleClass: "a" | "b" | "c" | "t"): Promise<AdvVehicle[]>;
3433
+ }
3434
+ }
3435
+
3143
3436
  declare namespace BowmarkProvider_americanstandard {
3144
3437
  // ── American Standard Heating & Air Conditioning — the unit's own declarations, verbatim ──
3145
3438
  type AmericanStandardTierName = "Platinum" | "Gold" | "Silver";
@@ -3179,6 +3472,38 @@ interface AmericanStandardSystemCostEstimate {
3179
3472
  }
3180
3473
  }
3181
3474
 
3475
+ declare namespace BowmarkProvider_americanvisionwindows {
3476
+ // ── American Vision Windows — the unit's own declarations, verbatim ──
3477
+ interface AmericanVisionWindowsSlotDay {
3478
+ date: string;
3479
+ windows: string[];
3480
+ }
3481
+ interface AmericanVisionWindowsAvailability {
3482
+ zip: string;
3483
+ service: "Windows" | "Bath";
3484
+ inTerritory: boolean;
3485
+ territory: string;
3486
+ serviceTerritoryId: string;
3487
+ slots: AmericanVisionWindowsSlotDay[];
3488
+ }
3489
+
3490
+ /**
3491
+ * American Vision Windows' free in-home consultation booking flow — real open appointment
3492
+ * slots for a ZIP and service (window or bath replacement), straight from the site's own
3493
+ * booking app.
3494
+ */
3495
+ interface Unit {
3496
+ /**
3497
+ * Checks real, currently-open in-home consultation appointment slots for a US ZIP code and
3498
+ * service (window or bath replacement) — the computed step of American Vision Windows'
3499
+ * free-consultation booking flow, reachable before any name/email/phone is collected. Returns
3500
+ * the matched service territory and a real per-day list of open date/time windows, or
3501
+ * `inTerritory: false` for a ZIP outside AVW's California territories.
3502
+ */
3503
+ checkAvailability(args: { zip: string; service: "Windows" | "Bath" }): Promise<AmericanVisionWindowsAvailability>;
3504
+ }
3505
+ }
3506
+
3182
3507
  declare namespace BowmarkProvider_amramp {
3183
3508
  // ── Amramp — the unit's own declarations, verbatim ──
3184
3509
  interface AmrampLocation {
@@ -3305,6 +3630,229 @@ interface AndersenDealer {
3305
3630
  }
3306
3631
  }
3307
3632
 
3633
+ declare namespace BowmarkProvider_andstr {
3634
+ // ── Andes (stayAndes) — the unit's own declarations, verbatim ──
3635
+ interface AndstrSearchArgs {
3636
+ market?: string;
3637
+ city?: string;
3638
+ checkIn?: string;
3639
+ checkOut?: string;
3640
+ guests?: number;
3641
+ bedrooms?: number;
3642
+ priceMin?: number;
3643
+ priceMax?: number;
3644
+ propertyType?: string;
3645
+ instantBook?: boolean;
3646
+ page?: number;
3647
+ }
3648
+ interface AndstrListingSummary {
3649
+ id: string;
3650
+ title: string;
3651
+ city: string;
3652
+ region: string;
3653
+ bedrooms: number;
3654
+ bathrooms: number;
3655
+ maxGuests: number;
3656
+ pricePerNight: number;
3657
+ currency: string;
3658
+ priceBasis: "dates" | "startingFrom";
3659
+ verified: boolean;
3660
+ instantBook: boolean;
3661
+ cancellationPolicy: string | null;
3662
+ imageUrl: string | null;
3663
+ url: string;
3664
+ }
3665
+ interface AndstrListingDetail {
3666
+ id: string;
3667
+ title: string;
3668
+ city: string;
3669
+ region: string;
3670
+ bedrooms: number;
3671
+ bathrooms: number;
3672
+ maxGuests: number;
3673
+ listedFromPerNight: number;
3674
+ currency: string;
3675
+ amenities: string[];
3676
+ cancellationPolicy: string | null;
3677
+ latitude: number | null;
3678
+ longitude: number | null;
3679
+ url: string;
3680
+ }
3681
+ interface AndstrQuote {
3682
+ listingId: string;
3683
+ checkIn: string;
3684
+ checkOut: string;
3685
+ guests: number;
3686
+ available: boolean;
3687
+ unavailableReason: string | null;
3688
+ nights: number | null;
3689
+ nightlyTotal: number | null;
3690
+ fees: Array<{ name: string; amount: number }>;
3691
+ total: number | null;
3692
+ averagePerNight: number | null;
3693
+ currency: string;
3694
+ bookingUrl: string;
3695
+ }
3696
+
3697
+ /**
3698
+ * stayAndes's own flexible-stay search-and-book portal — search by
3699
+ * market/dates/guests/price/amenities with real per-night pricing, read a listing's full
3700
+ * detail, and get the real date-priced quote (fees + total + booking handoff) for a stay.
3701
+ */
3702
+ interface Unit {
3703
+ /**
3704
+ * Searches stayAndes's listing portfolio by market, dates, guests, bedrooms, price range and
3705
+ * instant-book. When check-in/check-out are given, pricePerNight is the real demand-priced
3706
+ * average for that stay; otherwise it's the site's undated starting-from rate (priceBasis says
3707
+ * which).
3708
+ */
3709
+ search(args?: AndstrSearchArgs): Promise<AndstrListingSummary[]>;
3710
+
3711
+ /**
3712
+ * One listing's full detail — bedrooms/bathrooms/guests, amenities, cancellation policy,
3713
+ * coordinates. Its own price is a static rack rate, not a real quote — call getQuote for that.
3714
+ */
3715
+ getListing(listingId: string): Promise<AndstrListingDetail>;
3716
+
3717
+ /**
3718
+ * The real date-priced quote for one listing — nightly total, service + cleaning fees, total
3719
+ * before taxes, average per night, and a direct checkout handoff URL — or the site's own
3720
+ * reason a stay isn't bookable.
3721
+ */
3722
+ getQuote(listingId: string, checkIn: string, checkOut: string, guests: number): Promise<AndstrQuote>;
3723
+ }
3724
+ }
3725
+
3726
+ declare namespace BowmarkProvider_anthropic_com {
3727
+ // ── Anthropic Engineering & Legal — the unit's own declarations, verbatim ──
3728
+ interface AnthropicComDoc {
3729
+ url: string;
3730
+ title: string | null;
3731
+ body: string;
3732
+ }
3733
+ interface AnthropicComDocLink {
3734
+ url: string;
3735
+ slug: string;
3736
+ section: "engineering" | "legal";
3737
+ lastUpdated: string;
3738
+ }
3739
+
3740
+ /**
3741
+ * Reads one page of anthropic.com's engineering blog or legal terms by URL and returns its
3742
+ * title and body as plain text — parsed from the page's own server-rendered markup, not a
3743
+ * whole-page scrape.
3744
+ */
3745
+ interface Unit {
3746
+ /**
3747
+ * Reads one page of anthropic.com's engineering blog (/engineering/...) or legal terms
3748
+ * (/legal/...) by URL or path (e.g. "/legal/commercial-terms" or the full https:// url) and
3749
+ * returns its title and body as plain text. THROWS if the page does not exist (404) or names a
3750
+ * host other than anthropic.com.
3751
+ */
3752
+ getDoc(url: string): Promise<AnthropicComDoc>;
3753
+
3754
+ /**
3755
+ * Lists every engineering-blog and legal-terms page anthropic.com publishes — url, section
3756
+ * ("engineering" | "legal") and the page's own URL slug — parsed from the site's own
3757
+ * /sitemap.xml (anthropic.com has no llms.txt). The slug is the closest thing to a title the
3758
+ * sitemap carries; call getDoc(url) for the page's real headline.
3759
+ */
3760
+ listDocs(): Promise<AnthropicComDocLink[]>;
3761
+ }
3762
+ }
3763
+
3764
+ declare namespace BowmarkProvider_antunes {
3765
+ // ── A.J. Antunes & Co. — the unit's own declarations, verbatim ──
3766
+ interface AntunesServiceAgency {
3767
+ id: string;
3768
+ name: string;
3769
+ address: string;
3770
+ city: string;
3771
+ state: string;
3772
+ zip: string;
3773
+ country: string;
3774
+ phone: string;
3775
+ fax: string;
3776
+ email: string;
3777
+ url: string;
3778
+ latitude: number;
3779
+ longitude: number;
3780
+ distanceMiles: number;
3781
+ }
3782
+ interface AntunesServiceAgencySearch {
3783
+ radiusMiles: number;
3784
+ agencies: AntunesServiceAgency[];
3785
+ }
3786
+
3787
+ /**
3788
+ * Reads Antunes' own real-time authorized service-agency/distributor locator directly — real
3789
+ * nearby agencies, reps and distributors Antunes itself vets, distance-ranked from a US ZIP,
3790
+ * never a guess at unverified third-party repair shops.
3791
+ */
3792
+ interface Unit {
3793
+ /**
3794
+ * Runs Antunes' own real-time authorized service-agency/distributor locator for a US ZIP and
3795
+ * returns real nearby agencies, sales reps and distributors Antunes itself authorizes and
3796
+ * lists — not a guess at which local repair shops might service Antunes equipment.
3797
+ * `radiusMiles` defaults to 100 and is capped at 500; an honestly empty list means Antunes has
3798
+ * nothing authorized that close.
3799
+ */
3800
+ findServiceAgencies(zip: string, radiusMiles?: number): Promise<AntunesServiceAgencySearch>;
3801
+ }
3802
+ }
3803
+
3804
+ declare namespace BowmarkProvider_aosom {
3805
+ // ── Aosom — the unit's own declarations, verbatim ──
3806
+ interface AosomSearchResult {
3807
+ sin: string;
3808
+ sku: string;
3809
+ name: string;
3810
+ brand: string | null;
3811
+ price: number; // dollars, e.g. 354.99
3812
+ originalPrice: number | null;
3813
+ stockQty: number;
3814
+ urlkey: string;
3815
+ url: string; // pass to getProduct
3816
+ categoryName: string | null;
3817
+ imageUrl: string | null;
3818
+ }
3819
+ interface AosomProduct {
3820
+ sin: string;
3821
+ sku: string;
3822
+ name: string;
3823
+ brand: string | null;
3824
+ category: string | null;
3825
+ subCategory: string | null;
3826
+ price: number; // dollars
3827
+ originalPrice: number | null;
3828
+ inStock: boolean; // the site's own buyability flag for this variant
3829
+ url: string; // the handoff — open this to add to cart / check out
3830
+ }
3831
+
3832
+ /**
3833
+ * Reads Aosom's live catalog — search results and one product's real price/stock — straight
3834
+ * off aosom.com's own search API and product page, no key, no browser.
3835
+ */
3836
+ interface Unit {
3837
+ /**
3838
+ * Searches Aosom's live catalog (Outsunny/HOMCOM/PawHut/Soozier) for a free-text query and
3839
+ * returns real, currently-listed rows with price, stock count, brand and a ready-to-use
3840
+ * product page URL. Returns [] for a query that matches nothing — a real, honest answer, since
3841
+ * the endpoint returns 200 with an empty list rather than 404ing.
3842
+ */
3843
+ searchProducts(query: string): Promise<AosomSearchResult[]>;
3844
+
3845
+ /**
3846
+ * Reads one product's live price and the site's own buyability flag straight off its product
3847
+ * page — the SAME page a shopper lands on, so a variant (color/size baked into a distinct
3848
+ * SKU/URL on this site) is read exactly as chosen. Takes the full product page URL
3849
+ * (searchProducts' `url` field). THROWS rather than guessing when the page's own product-data
3850
+ * block is missing or unparseable — never silently returns a stale or wrong variant.
3851
+ */
3852
+ getProduct(url: string): Promise<AosomProduct>;
3853
+ }
3854
+ }
3855
+
3308
3856
  declare namespace BowmarkProvider_apple {
3309
3857
  // ── Apple — the unit's own declarations, verbatim ──
3310
3858
  interface AppleSearchResult {
@@ -3406,6 +3954,72 @@ interface AquaphoenixsciProduct {
3406
3954
  }
3407
3955
  }
3408
3956
 
3957
+ declare namespace BowmarkProvider_arajet {
3958
+ // ── Arajet — the unit's own declarations, verbatim ──
3959
+ interface ArajetSearchArgs {
3960
+ origin: string;
3961
+ destination: string;
3962
+ departureDate: string;
3963
+ passengers?: number;
3964
+ }
3965
+
3966
+ interface ArajetAirport {
3967
+ code: string;
3968
+ name: string;
3969
+ }
3970
+
3971
+ interface ArajetFlightLeg {
3972
+ flightNumber: string;
3973
+ carrierCode: string;
3974
+ from: ArajetAirport;
3975
+ to: ArajetAirport;
3976
+ departureDate: string;
3977
+ arrivalDate: string;
3978
+ flightTimeMinutes: number;
3979
+ equipmentType: string | null;
3980
+ }
3981
+
3982
+ interface ArajetFlightOption {
3983
+ key: string;
3984
+ from: ArajetAirport;
3985
+ to: ArajetAirport;
3986
+ departureDate: string;
3987
+ arrivalDate: string;
3988
+ flightTimeMinutes: number;
3989
+ stops: number;
3990
+ legs: ArajetFlightLeg[];
3991
+ soldOut: boolean;
3992
+ }
3993
+
3994
+ interface ArajetSearchResult {
3995
+ origin: string;
3996
+ destination: string;
3997
+ departureDate: string;
3998
+ currency: string;
3999
+ pricesAvailable: false;
4000
+ flights: ArajetFlightOption[];
4001
+ }
4002
+
4003
+ /**
4004
+ * Arajet's own flight-schedule search (Santo Domingo-based low-cost carrier) — real routes,
4005
+ * times, connections and flight numbers straight off its booking engine's shop endpoint. No
4006
+ * live pricing at this rung.
4007
+ */
4008
+ interface Unit {
4009
+ /**
4010
+ * Runs Arajet's own flight-schedule search for one origin/destination/date and returns the
4011
+ * flight OPTIONS it schedules — carrier and flight number, departure/arrival times, duration,
4012
+ * stop count and each connecting leg. `origin`/`destination` are 3-letter IATA codes ("SDQ",
4013
+ * "MIA"); `departureDate` is "YYYY-MM-DD" or "MM/DD/YYYY"; `passengers` (adults) defaults to
4014
+ * 1. HONEST LIMIT: this reads Arajet's calendar/shop endpoint, which carries the SCHEDULE but
4015
+ * not a live fare — every option's `soldOut` came back `true` at every route and date
4016
+ * measured, and `pricesAvailable` is always `false`. It answers "what does Arajet fly, and
4017
+ * when" rather than "what would this cost".
4018
+ */
4019
+ search(arg0: ArajetSearchArgs): Promise<ArajetSearchResult>;
4020
+ }
4021
+ }
4022
+
3409
4023
  declare namespace BowmarkProvider_archipelago {
3410
4024
  // ── Archipelago — the unit's own declarations, verbatim ──
3411
4025
  interface ArchipelagoAsset {
@@ -3452,6 +4066,51 @@ interface ArchipelagoGameOptions {
3452
4066
  }
3453
4067
  }
3454
4068
 
4069
+ declare namespace BowmarkProvider_artpix3d {
4070
+ // ── ArtPix 3D — the unit's own declarations, verbatim ──
4071
+ // ArtPix 3D's OWN shapes — not a capability contract.
4072
+
4073
+ interface Artpix3dShape { slug: string; name: string; url: string }
4074
+
4075
+ interface Artpix3dSizePrice {
4076
+ size: string; // e.g. "Large"
4077
+ sellPrice: number | null;
4078
+ retailPrice: number | null;
4079
+ discountPercent: number | null;
4080
+ inStock: boolean;
4081
+ bestSeller: boolean;
4082
+ lowStockLabel: string | null;
4083
+ }
4084
+
4085
+ interface Artpix3dProductPricing {
4086
+ shape: string;
4087
+ productName: string;
4088
+ sizes: Artpix3dSizePrice[];
4089
+ configureUrl: string; // where a buyer picks a photo and checks out
4090
+ }
4091
+
4092
+ /**
4093
+ * Reads ArtPix 3D's own live product configurator — every crystal shape, and for a chosen
4094
+ * shape, every size's real current price (with active sale discounts) and stock/best-seller
4095
+ * labels — the way the site's own size-picker computes it, real-time.
4096
+ */
4097
+ interface Unit {
4098
+ /**
4099
+ * Lists every crystal shape ArtPix 3D currently sells (rectangle, heart, square, …), each with
4100
+ * its own product page URL.
4101
+ */
4102
+ listShapes(): Promise<Artpix3dShape[]>;
4103
+
4104
+ /**
4105
+ * Runs the site's own size/price computation for one shape: every size's real current sell
4106
+ * price, list price, active discount, stock and best-seller status. `shape` is a slug from
4107
+ * `listShapes()`. THROWS on an unknown shape, naming `listShapes()` as the way to find current
4108
+ * ones.
4109
+ */
4110
+ getSizePricing(shape: string): Promise<Artpix3dProductPricing>;
4111
+ }
4112
+ }
4113
+
3455
4114
  declare namespace BowmarkProvider_ashleyfurniture {
3456
4115
  // ── Ashley Furniture — the unit's own declarations, verbatim ──
3457
4116
  interface AshleyFurnitureSearchArgs {
@@ -3730,6 +4389,41 @@ interface AtlasSearchCommunitiesResult {
3730
4389
  }
3731
4390
  }
3732
4391
 
4392
+ declare namespace BowmarkProvider_audibel {
4393
+ // ── Audibel — the unit's own declarations, verbatim ──
4394
+ interface AudibelClinic {
4395
+ name: string;
4396
+ address: string;
4397
+ city: string;
4398
+ state: string;
4399
+ zip: string;
4400
+ phone: string | null;
4401
+ distanceMiles: number | null; // miles from the searched point, nearest-first
4402
+ url: string; // the clinic's own page on audibel.com
4403
+ hours: Record<string, { open: string; close: string }>;
4404
+ }
4405
+
4406
+ interface AudibelClinicSearch {
4407
+ search: string;
4408
+ lat: number;
4409
+ lng: number;
4410
+ clinics: AudibelClinic[]; // sorted nearest-first
4411
+ }
4412
+
4413
+ /**
4414
+ * Audibel's own find-a-clinic locator — a ZIP/city/address search returning the real network
4415
+ * hearing clinics nearest that point, sorted by distance, each with its full address, phone
4416
+ * and hours.
4417
+ */
4418
+ interface Unit {
4419
+ /**
4420
+ * Runs the real find-a-clinic search for a ZIP code, city or address and returns Audibel's
4421
+ * network clinics nearest that point, distance-sorted, with address/phone/hours.
4422
+ */
4423
+ findClinics(query: string): Promise<AudibelClinicSearch>;
4424
+ }
4425
+ }
4426
+
3733
4427
  declare namespace BowmarkProvider_autocamp {
3734
4428
  // ── AutoCamp — the unit's own declarations, verbatim ──
3735
4429
  interface AutocampRate {
@@ -3750,6 +4444,11 @@ interface AutocampRoomAvailability {
3750
4444
  rates: AutocampRate[];
3751
4445
  }
3752
4446
 
4447
+ interface AutocampProperty {
4448
+ hotelId: string;
4449
+ location: string;
4450
+ }
4451
+
3753
4452
  /**
3754
4453
  * AutoCamp's own SynXis reservation engine — real-time room-type availability and
3755
4454
  * per-night/stay-total pricing for any of its Airstream/cabin/tent properties, for a given
@@ -3761,6 +4460,13 @@ interface AutocampRoomAvailability {
3761
4460
  * availability with per-night and stay-total pricing for every rate plan on offer.
3762
4461
  */
3763
4462
  searchAvailability(hotelId: string, arrive: string, depart: string, adults: number, children?: number): Promise<AutocampRoomAvailability[]>;
4463
+
4464
+ /**
4465
+ * Lists AutoCamp's active properties (name, location, the reservations-engine hotel id) off
4466
+ * the site's own booking-widget furniture, so a caller can resolve a place name to the id
4467
+ * searchAvailability needs.
4468
+ */
4469
+ listProperties(): Promise<AutocampProperty[]>;
3764
4470
  }
3765
4471
  }
3766
4472
 
@@ -3894,8 +4600,56 @@ interface AvisLocationDetail extends AvisLocationRow {
3894
4600
  }
3895
4601
  }
3896
4602
 
4603
+ declare namespace BowmarkProvider_ayreshotels {
4604
+ // ── Ayres Hotels — the unit's own declarations, verbatim ──
4605
+ interface AyreshotelsRateDay {
4606
+ date: string;
4607
+ isAvailable: boolean;
4608
+ minRate: number | null;
4609
+ currency: string | null;
4610
+ availStatus: string | null;
4611
+ }
4612
+
4613
+ interface CheckRatesResult {
4614
+ property: string;
4615
+ hotelCode: number | null;
4616
+ checkIn: string;
4617
+ checkOut: string;
4618
+ currency: string | null;
4619
+ days: AyreshotelsRateDay[];
4620
+ }
4621
+
4622
+ /**
4623
+ * Boutique Southern California hotel group. checkRates is live — it reads the site's own IBE
4624
+ * (Internet Booking Engine, an Amadeus Hospitality / TravelClick widget on
4625
+ * reservations.ayreshotels.com) and returns the REAL per-night minimum rate + availability
4626
+ * status for a property and date range, the same live pricing the site's own date-picker
4627
+ * renders before any guest information is entered.
4628
+ */
4629
+ interface Unit {
4630
+ /**
4631
+ * Checks a property's real live rate/availability for a date range. Pass `property` (the
4632
+ * reservations subdomain slug from that hotel's own "Book Now" link, e.g. "costa-mesa"),
4633
+ * `checkIn`/`checkOut` (ISO dates), and optionally `adults` (default 2). Returns the per-night
4634
+ * minimum rate and availability status for every night in range — the site's own IBE data, not
4635
+ * a third-party OTA estimate.
4636
+ */
4637
+ checkRates(args: object): Promise<CheckRatesResult>;
4638
+ }
4639
+ }
4640
+
3897
4641
  declare namespace BowmarkProvider_azazie {
3898
4642
  // ── Azazie — the unit's own declarations, verbatim ──
4643
+ interface AzazieSearchResult {
4644
+ id: string;
4645
+ name: string;
4646
+ url: string;
4647
+ }
4648
+
4649
+ interface AzazieSearchResults {
4650
+ results: AzazieSearchResult[];
4651
+ }
4652
+
3899
4653
  interface AzazieColorOption {
3900
4654
  key: string;
3901
4655
  name: string;
@@ -3944,6 +4698,12 @@ interface AzazieBuildYourOwnConfig {
3944
4698
  * product-data host.
3945
4699
  */
3946
4700
  interface Unit {
4701
+ /**
4702
+ * Searches Azazie's catalog by free text (style, color, fabric, occasion) and returns matching
4703
+ * dress styles with URLs.
4704
+ */
4705
+ search(query: string): Promise<AzazieSearchResults>;
4706
+
3947
4707
  /**
3948
4708
  * Reads one bridesmaid-dress style's full Build Your Own configuration off Azazie's own
3949
4709
  * product-data host — the real live price, every solid + floral color option (each with its
@@ -4066,6 +4826,14 @@ interface AzureListServicesResult {
4066
4826
 
4067
4827
  declare namespace BowmarkProvider_bankmycell {
4068
4828
  // ── BankMyCell — the unit's own declarations, verbatim ──
4829
+ interface BankmycellSearchResult {
4830
+ brand: string;
4831
+ model: string;
4832
+ name: string;
4833
+ deviceUrl: string;
4834
+ minPrice: number | null;
4835
+ maxPrice: number | null;
4836
+ }
4069
4837
  interface BankmycellOffer {
4070
4838
  merchant: string;
4071
4839
  price: number;
@@ -4088,9 +4856,17 @@ interface BankmycellQuoteResult {
4088
4856
  /**
4089
4857
  * Live trade-in offers for a phone/device from every merchant BankMyCell compares, for a
4090
4858
  * 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.
4859
+ * page polls, instead of parsing prose off the rendered page. searchDevices resolves a
4860
+ * shopper's own words ("iPhone 14") to the deviceUrl getTradeInQuote needs.
4092
4861
  */
4093
4862
  interface Unit {
4863
+ /**
4864
+ * Searches BankMyCell's own device index by free text (e.g. "iPhone 14", "Galaxy S23") and
4865
+ * returns the matching devices with their deviceUrl — the entry point: it turns a shopper's
4866
+ * own words into the deviceUrl getTradeInQuote needs.
4867
+ */
4868
+ searchDevices(term: string): Promise<BankmycellSearchResult[]>;
4869
+
4094
4870
  /**
4095
4871
  * Reads live trade-in offers for the device at a bankmycell.com sell page (e.g.
4096
4872
  * .../sell/iphone-14-pro), from every merchant the site compares, for the given
@@ -4182,6 +4958,59 @@ interface BarlettaPriceResult {
4182
4958
  }
4183
4959
  }
4184
4960
 
4961
+ declare namespace BowmarkProvider_barnesfoundation {
4962
+ // ── Barnes Foundation — the unit's own declarations, verbatim ──
4963
+ type BarnesAdmissionType = "barnes" | "calderCombo";
4964
+ interface BarnesAdmissionDay {
4965
+ date: string;
4966
+ active: boolean;
4967
+ }
4968
+ interface BarnesAdmissionCalendar {
4969
+ admissionType: BarnesAdmissionType;
4970
+ name: string;
4971
+ days: BarnesAdmissionDay[];
4972
+ }
4973
+ interface BarnesAdmissionQuoteInput {
4974
+ personType: string;
4975
+ quantity: number;
4976
+ }
4977
+ interface BarnesAdmissionQuoteLine {
4978
+ personType: string;
4979
+ quantity: number;
4980
+ unitPrice: number;
4981
+ subtotal: number;
4982
+ }
4983
+ interface BarnesAdmissionQuote {
4984
+ admissionType: BarnesAdmissionType;
4985
+ currency: "USD";
4986
+ lines: BarnesAdmissionQuoteLine[];
4987
+ total: number;
4988
+ }
4989
+
4990
+ /**
4991
+ * The Barnes Foundation's own live ticket-admission data, read directly — real day-by-day
4992
+ * open/closed availability and real per-category pricing arithmetic for Barnes Foundation
4993
+ * admission and the Barnes + Calder Gardens combo, off the site's own undocumented API.
4994
+ */
4995
+ interface Unit {
4996
+ /**
4997
+ * Reads the live day-by-day open/closed calendar (a rolling ~6-month window) for either
4998
+ * "barnes" (Barnes Foundation admission only) or "calderCombo" (Barnes + Calder Gardens combo
4999
+ * admission) — the same day-availability the ticket widget's own calendar picker renders.
5000
+ * Day-level only: the site's API carries no per-timeslot remaining-capacity count.
5001
+ */
5002
+ getAdmissionCalendar(admissionType: "barnes" | "calderCombo"): Promise<BarnesAdmissionCalendar>;
5003
+
5004
+ /**
5005
+ * Computes a real ticket total for the given admission type and category quantities
5006
+ * (personType matched case-insensitively against the live list — "Adult", "Senior", "Youth",
5007
+ * "Child", etc.) using the site's own current per-category prices. THROWS if a category name
5008
+ * does not match one the site currently sells, or if tickets is empty.
5009
+ */
5010
+ priceAdmission(admissionType: "barnes" | "calderCombo", tickets: BarnesAdmissionQuoteInput[]): Promise<BarnesAdmissionQuote>;
5011
+ }
5012
+ }
5013
+
4185
5014
  declare namespace BowmarkProvider_baublebar {
4186
5015
  // ── BaubleBar — the unit's own declarations, verbatim ──
4187
5016
  interface BaublebarPersonalizationField {
@@ -4229,6 +5058,11 @@ interface BaublebarCatalogueRow {
4229
5058
  inStock: boolean;
4230
5059
  images: string[];
4231
5060
  }
5061
+ interface BaublebarCollectionRow {
5062
+ handle: string;
5063
+ title: string;
5064
+ productsCount: number;
5065
+ }
4232
5066
  interface BaublebarCheckoutLink {
4233
5067
  url: string;
4234
5068
  variant: BaublebarVariant;
@@ -4243,6 +5077,13 @@ interface BaublebarCheckoutLink {
4243
5077
  * carrying the personalization.
4244
5078
  */
4245
5079
  interface Unit {
5080
+ /**
5081
+ * The entry door: reads BaubleBar's own published list of collections — e.g. "Tennis
5082
+ * Bracelets", "Personalized Jewelry" — with each one's handle and product count, so a caller
5083
+ * holding only what a shopper would say can find the handle listBaublebarProducts takes.
5084
+ */
5085
+ listBaublebarCollections(opts?: { limit?: number }): Promise<BaublebarCollectionRow[]>;
5086
+
4246
5087
  /**
4247
5088
  * Reads a BaubleBar collection's live products — e.g. "tennis-bracelets",
4248
5089
  * "personalized-jewelry", "name-initial-jewelry" — with handle, title, price range and stock.
@@ -4376,6 +5217,169 @@ interface BeatthebombPriceQuote {
4376
5217
  }
4377
5218
  }
4378
5219
 
5220
+ declare namespace BowmarkProvider_bellwethercoffee {
5221
+ // ── Bellwether Coffee — the unit's own declarations, verbatim ──
5222
+ // Bellwether Coffee's OWN shapes — not a capability contract.
5223
+
5224
+ type BellwethercoffeeCurrency = "USD" | "CAD" | "GBP" | "EUR";
5225
+ type BellwethercoffeeRoasterType = "ShopRoaster" | "ContinuousRoasting";
5226
+
5227
+ interface BellwethercoffeeSliderBounds { min: number; max: number; step: number }
5228
+
5229
+ interface BellwethercoffeeCalculatorDefaults {
5230
+ currencies: BellwethercoffeeCurrency[];
5231
+ roasterTypes: BellwethercoffeeRoasterType[];
5232
+ defaultInputsByCurrency: Record<BellwethercoffeeCurrency, { poundsWeekly: number; coffeeCost: number; retailBags: number }>;
5233
+ sliderBounds: { poundsWeekly: BellwethercoffeeSliderBounds; coffeeCost: BellwethercoffeeSliderBounds; retailBags: BellwethercoffeeSliderBounds };
5234
+ roasterPricesByCurrency: Record<BellwethercoffeeCurrency, Record<BellwethercoffeeRoasterType, number>>;
5235
+ disclaimer: string;
5236
+ roiCalculatorUrl: string;
5237
+ requestDemoUrl: string;
5238
+ }
5239
+
5240
+ interface BellwethercoffeeRoiInput {
5241
+ currency: BellwethercoffeeCurrency;
5242
+ roasterType: BellwethercoffeeRoasterType;
5243
+ poundsWeekly: number; // weekly roasted-coffee usage (lb, or kg for non-USD)
5244
+ coffeeCost: number; // what the caller currently pays per lb/kg, in currency
5245
+ retailBags: number; // retail bags of roasted coffee sellable per week
5246
+ }
5247
+
5248
+ interface BellwethercoffeeRoiEstimate {
5249
+ currency: BellwethercoffeeCurrency;
5250
+ roasterType: BellwethercoffeeRoasterType;
5251
+ investmentAmount: number; investmentAmountFormatted: string;
5252
+ savingsPerUnit: number;
5253
+ monthlySavings: number; monthlySavingsFormatted: string;
5254
+ annualSavings: number; annualSavingsFormatted: string;
5255
+ monthlySalesRevenue: number; monthlySalesRevenueFormatted: string;
5256
+ annualSalesRevenue: number; annualSalesRevenueFormatted: string;
5257
+ annualRetailProfit: number; annualRetailProfitFormatted: string;
5258
+ totalROI: number; totalROIFormatted: string; // first-year ROI: annualSavings + annualRetailProfit
5259
+ paybackMonths: number; // 999 sentinel when there is no payback at these inputs
5260
+ savingsPerCup: number;
5261
+ co2SavingsPerYear: number;
5262
+ roiCalculatorUrl: string;
5263
+ requestDemoUrl: string; // the site's own next step — a separate lead form, not computed here
5264
+ }
5265
+
5266
+ /**
5267
+ * Bellwether Coffee's own ROI calculator (bellwethercoffee.com/roi-calculator) — real
5268
+ * monthly/annual savings, retail-bag revenue and profit, payback period, and first-year ROI
5269
+ * for the Shop Roaster, computed exactly as the site's own client-side formula computes it, no
5270
+ * estimate.
5271
+ */
5272
+ interface Unit {
5273
+ /**
5274
+ * Returns the ROI calculator's own currencies, roaster types, per-currency default input
5275
+ * values, slider bounds (min/max/step), per-currency roaster list prices, and the site's own
5276
+ * cost-basis disclaimer text — call this before computeRoiEstimate to know the valid ranges
5277
+ * and defaults.
5278
+ */
5279
+ getCalculatorDefaults(): Promise<BellwethercoffeeCalculatorDefaults>;
5280
+
5281
+ /**
5282
+ * Runs Bellwether's own ROI calculator formula — currency, roaster type, weekly roasted-coffee
5283
+ * usage, price paid per lb, and weekly retail-bag sales in; real monthly/annual savings,
5284
+ * retail-bag revenue and profit, payback period (months), and first-year total ROI out,
5285
+ * computed exactly as bellwethercoffee.com/roi-calculator's own client-side computeROI()
5286
+ * computes it, no estimate. `requestDemoUrl` is the site's own next step, not a checkout.
5287
+ */
5288
+ computeRoiEstimate(input: BellwethercoffeeRoiInput): Promise<BellwethercoffeeRoiEstimate>;
5289
+ }
5290
+ }
5291
+
5292
+ declare namespace BowmarkProvider_beltservice {
5293
+ // ── Beltservice Corporation — the unit's own declarations, verbatim ──
5294
+ interface BeltserviceCatalogItem {
5295
+ catalogNumber: string;
5296
+ partNumber: string;
5297
+ name: string;
5298
+ grade: string | null;
5299
+ specSheetUrl: string | null;
5300
+ detailUrl: string;
5301
+ quoteUrl: string;
5302
+ }
5303
+ interface BeltserviceCatalogPage {
5304
+ items: BeltserviceCatalogItem[];
5305
+ page: number;
5306
+ totalPages: number;
5307
+ hasMore: boolean;
5308
+ }
5309
+ interface BeltserviceBrowseParams {
5310
+ group?: string;
5311
+ category?: string;
5312
+ industry?: string;
5313
+ page?: number;
5314
+ }
5315
+ interface BeltserviceBeltDetail {
5316
+ catalogNumber: string;
5317
+ partNumber: string;
5318
+ name: string;
5319
+ description: string | null;
5320
+ specSheetUrl: string | null;
5321
+ quoteUrl: string;
5322
+ }
5323
+
5324
+ /**
5325
+ * Beltservice Corporation's own conveyor-belt catalog: browse or filter by product
5326
+ * group/category/industry and get back real, paginated, spec-matched belts (catalog number,
5327
+ * part number, spec-sheet PDF), or look up one belt directly by catalog number — plus the
5328
+ * ready quote-handoff link for each.
5329
+ */
5330
+ interface Unit {
5331
+ /**
5332
+ * Browses Beltservice's live belt catalog, matching its own site filters: pass at most one of
5333
+ * group/category/industry (the site's own facet slugs, e.g. group: "heavy-duty") plus an
5334
+ * optional page number, or call with no argument for the unfiltered catalog. Returns real
5335
+ * paginated results — catalog number, part number, spec-sheet PDF, quote-handoff link —
5336
+ * exactly as the live site renders them.
5337
+ */
5338
+ browseCatalog(params?: BeltserviceBrowseParams): Promise<BeltserviceCatalogPage>;
5339
+
5340
+ /**
5341
+ * Looks up one belt directly by its Beltservice catalog number (found via browseCatalog) and
5342
+ * returns its full description, spec-sheet PDF, and quote-handoff link.
5343
+ */
5344
+ getBelt(catalogNumber: string): Promise<BeltserviceBeltDetail>;
5345
+ }
5346
+ }
5347
+
5348
+ declare namespace BowmarkProvider_benelliusa {
5349
+ // ── Benelli USA — the unit's own declarations, verbatim ──
5350
+ interface benelliusaDealer {
5351
+ name: string;
5352
+ address: string;
5353
+ city: string;
5354
+ state: string;
5355
+ postalCode: string;
5356
+ phone: string | null;
5357
+ distanceMiles: number;
5358
+ mapUrl: string;
5359
+ premierDealer: boolean;
5360
+ latitude: number | null;
5361
+ longitude: number | null;
5362
+ }
5363
+
5364
+ /**
5365
+ * Runs Benelli USA's own dealer locator by ZIP code and returns real Premier Dealer records —
5366
+ * name, address, phone, distance, map link.
5367
+ */
5368
+ interface Unit {
5369
+ /**
5370
+ * Runs Benelli USA's own "Find A Benelli Dealer" locator for a 5-digit US ZIP and returns
5371
+ * every dealer it lists, nearest first: name, street address, city/state/zip, phone (`null` on
5372
+ * the handful of rows with none), distance in miles, a Google Maps directions link, whether
5373
+ * the site marks it a `premierDealer` ("Benelli Premier Dealer"), and coordinates when the
5374
+ * page's own map data carries them. A ZIP with no dealers nearby returns `[]` — the site's own
5375
+ * honest "No dealers found" answer, not an error. **Does not report which sister brands
5376
+ * (Franchi, Stoeger, Uberti USA) a dealer also carries** — the results page names no brand at
5377
+ * all, whatever an earlier read of the site suggested.
5378
+ */
5379
+ findDealers(zip: string): Promise<benelliusaDealer[]>;
5380
+ }
5381
+ }
5382
+
4379
5383
  declare namespace BowmarkProvider_bennington {
4380
5384
  // ── Bennington Marine — the unit's own declarations, verbatim ──
4381
5385
  interface BenningtonModel {
@@ -4525,12 +5529,60 @@ interface StoreStock {
4525
5529
  }
4526
5530
  }
4527
5531
 
5532
+ declare namespace BowmarkProvider_bigairusa {
5533
+ // ── Big Air Trampoline Park — the unit's own declarations, verbatim ──
5534
+ interface BigAirLocation {
5535
+ slug: string;
5536
+ name: string;
5537
+ comingSoon: boolean;
5538
+ webstoreSubdomain: string | null;
5539
+ }
5540
+
5541
+ interface BigAirPass {
5542
+ id: string;
5543
+ name: string;
5544
+ price: number | null;
5545
+ description: string | null;
5546
+ group: string;
5547
+ checkoutUrl: string;
5548
+ }
5549
+
5550
+ interface BigAirLocationCatalog {
5551
+ location: BigAirLocation;
5552
+ waiverUrl: string;
5553
+ passes: BigAirPass[];
5554
+ }
5555
+
5556
+ /**
5557
+ * Big Air Trampoline Park's own location directory and per-location CenterEdge ticket/pass
5558
+ * catalog — real prices, no login, no browser — plus the checkout and waiver handoff URLs a
5559
+ * purchase needs.
5560
+ */
5561
+ interface Unit {
5562
+ /**
5563
+ * Lists every Big Air location off the site's own location-picker CMS collection — name, slug,
5564
+ * coming-soon flag, and (when it's on the classic CenterEdge webstore) the webstoreSubdomain
5565
+ * listPasses needs. Only comingSoon: false locations with a non-null webstoreSubdomain are
5566
+ * servable by listPasses today.
5567
+ */
5568
+ listLocations(): Promise<BigAirLocation[]>;
5569
+
5570
+ /**
5571
+ * Lists every ticket/pass group and item at one open location's CenterEdge webstore — real
5572
+ * prices, descriptions — plus that location's checkout URL (per item, to add to cart) and
5573
+ * hosted-waiver URL. location is the slug listLocations() returns, e.g. "corona". Throws when
5574
+ * the location is coming-soon or is not on the classic webstore.
5575
+ */
5576
+ listPasses(location: string): Promise<BigAirLocationCatalog>;
5577
+ }
5578
+ }
5579
+
4528
5580
  declare namespace BowmarkProvider_bigjoeforklifts {
4529
5581
  // ── Big Joe Forklifts — the unit's own declarations, verbatim ──
4530
5582
  interface BigJoeRoiQuestion {
4531
5583
  questionNumber: number; // the tool's own 1-based question number
4532
5584
  prompt: string; // the question's own text, verbatim
4533
- options: string[]; // the real current choices for this question
5585
+ options: string[]; // the real current choices, or [] for a typed-in answer
4534
5586
  }
4535
5587
  interface BigJoeRoiEstimatorInputs {
4536
5588
  questions: BigJoeRoiQuestion[];
@@ -4546,16 +5598,16 @@ interface BigJoeQuotePreview {
4546
5598
  }
4547
5599
 
4548
5600
  /**
4549
- * Big Joe Forklifts' real 17-question Runtime & ROI estimator's live input options, and its
4550
- * real current forklift model list for a quote request — the tools their own site already
5601
+ * Big Joe Forklifts' real Runtime & ROI estimator's live input questions and option lists, and
5602
+ * its real current forklift model list for a quote request — the tools their own site already
4551
5603
  * computes, read straight off the live site rather than guessed from brochure PDFs.
4552
5604
  */
4553
5605
  interface Unit {
4554
5606
  /**
4555
- * Reads Big Joe's own 'Pre-Demo Runtime & ROI Estimator' and returns its real current 17
4556
- * questions and their real option lists (truck model, load weight, lift height, ramps,
4557
- * attachments, speed limit, facility location, fuel type, and more) straight off the tool's
4558
- * own workbook.
5607
+ * Reads Big Joe's own 'Pre-Demo Runtime & ROI Estimator' and returns its real current numbered
5608
+ * questions and the real option list for each one the tool publishes a dropdown for (truck
5609
+ * model, load weight, lift height, ramps, attachments, speed limit, facility location, fuel
5610
+ * type, and more) straight off the tool's own workbook.
4559
5611
  */
4560
5612
  getRuntimeEstimatorInputs(): Promise<BigJoeRoiEstimatorInputs>;
4561
5613
 
@@ -4687,6 +5739,77 @@ interface BingNewsSearchResult {
4687
5739
  }
4688
5740
  }
4689
5741
 
5742
+ declare namespace BowmarkProvider_bishops {
5743
+ // ── Bishops Cuts/Color — the unit's own declarations, verbatim ──
5744
+ interface BishopsLocationLink {
5745
+ slug: string;
5746
+ url: string;
5747
+ }
5748
+
5749
+ interface BishopsLocation {
5750
+ slug: string;
5751
+ name: string;
5752
+ url: string;
5753
+ centerId: string; // the id listServices and checkAvailability take
5754
+ phone: string | null;
5755
+ address: string | null;
5756
+ hours: string | null;
5757
+ }
5758
+
5759
+ interface BishopsService {
5760
+ id: string; // the id checkAvailability takes
5761
+ name: string;
5762
+ description: string | null;
5763
+ durationMinutes: number | null;
5764
+ price: number | null;
5765
+ }
5766
+
5767
+ interface BishopsSlot {
5768
+ time: string; // the site's own display time, e.g. "10:55 AM"
5769
+ }
5770
+
5771
+ interface BishopsAvailability {
5772
+ centerId: string;
5773
+ serviceId: string;
5774
+ date: string;
5775
+ slots: BishopsSlot[]; // verbatim — empty is a real answer (fully booked / closed)
5776
+ }
5777
+
5778
+ /**
5779
+ * Bishops Cuts/Color's real location directory, live per-location service catalog, and real
5780
+ * open-slot appointment availability — the same Zenoti booking backend the site's own widget
5781
+ * calls. Rung 9/11, no browser.
5782
+ */
5783
+ interface Unit {
5784
+ /**
5785
+ * Reads the live list of every Bishops Cuts/Color location (slug + page URL) off the site's
5786
+ * own sitemap.
5787
+ */
5788
+ listLocations(): Promise<BishopsLocationLink[]>;
5789
+
5790
+ /**
5791
+ * Resolves a slug/neighborhood query (e.g. "lowry") to the matching real Bishops location(s) —
5792
+ * name, address, phone, hours, and the Zenoti centerId listServices and checkAvailability
5793
+ * need. Call listLocations() first for the real slugs.
5794
+ */
5795
+ findLocation(query: string): Promise<BishopsLocation[]>;
5796
+
5797
+ /**
5798
+ * Reads one location's real, live service catalog — pass a `centerId` from findLocation(), and
5799
+ * an optional search string (e.g. "cut", "color") to narrow it; omit it for the full catalog.
5800
+ */
5801
+ listServices(centerId: string, query?: string): Promise<BishopsService[]>;
5802
+
5803
+ /**
5804
+ * Checks real, live open time slots for one service at one location on one "YYYY-MM-DD" date —
5805
+ * the same live check Bishops' own Zenoti booking widget makes before showing bookable times.
5806
+ * An empty `slots` array is the site's real answer (fully booked or closed that day), not an
5807
+ * error.
5808
+ */
5809
+ checkAvailability(centerId: string, serviceId: string, date: string): Promise<BishopsAvailability>;
5810
+ }
5811
+ }
5812
+
4690
5813
  declare namespace BowmarkProvider_blackstoneproducts {
4691
5814
  // ── Blackstone Products — the unit's own declarations, verbatim ──
4692
5815
  interface BlackstoneDealer {
@@ -5091,6 +6214,51 @@ interface BmwusaModelListing {
5091
6214
  }
5092
6215
  }
5093
6216
 
6217
+ declare namespace BowmarkProvider_boglewinery {
6218
+ // ── Bogle Family Vineyards — the unit's own declarations, verbatim ──
6219
+ interface BoglewineryPrice {
6220
+ priceDescription: string; // e.g. "Starting at $20 per person"
6221
+ pricePerPersonCents: { min: number; max: number } | null;
6222
+ }
6223
+
6224
+ interface BoglewineryExperience {
6225
+ id: number; // the id checkAvailability takes
6226
+ slug: string; // the slug checkAvailability takes
6227
+ name: string;
6228
+ description: string;
6229
+ price: BoglewineryPrice;
6230
+ partySizes: number[]; // bookable party sizes Tock currently offers
6231
+ state: string; // e.g. "AVAILABLE", "SOLD"
6232
+ }
6233
+
6234
+ interface BoglewineryAvailability {
6235
+ experienceId: number;
6236
+ slug: string;
6237
+ openDate: string[]; // "YYYY-MM-DD" — empty is a real answer (nothing currently open)
6238
+ openTime: string[]; // "HH:MM"
6239
+ }
6240
+
6241
+ /**
6242
+ * Bogle Family Vineyards' real Tock tasting-experience catalog and the computed open
6243
+ * dates/times for one — the same booking calendar Tock's own widget reads before showing
6244
+ * bookable slots. Rung 17, headed browser only (Cloudflare).
6245
+ */
6246
+ interface Unit {
6247
+ /**
6248
+ * Reads Bogle's real, live Tock experience catalog — name, description, price and bookable
6249
+ * party-size range for every experience, including the Home Ranch Tasting Experience.
6250
+ */
6251
+ listExperiences(): Promise<BoglewineryExperience[]>;
6252
+
6253
+ /**
6254
+ * Checks which upcoming dates and times Tock currently shows as open for one experience — pass
6255
+ * `experienceId` and `slug` from listExperiences(). An empty result is the site's real answer
6256
+ * (nothing currently open), not an error.
6257
+ */
6258
+ checkAvailability(experienceId: number, slug: string): Promise<BoglewineryAvailability>;
6259
+ }
6260
+ }
6261
+
5094
6262
  declare namespace BowmarkProvider_bollandbranch {
5095
6263
  // ── Boll & Branch — the unit's own declarations, verbatim ──
5096
6264
  interface BedDesignerStep {
@@ -5149,6 +6317,100 @@ interface BollAndBranchSwatch {
5149
6317
  }
5150
6318
  }
5151
6319
 
6320
+ declare namespace BowmarkProvider_borsheims {
6321
+ // ── Borsheims — the unit's own declarations, verbatim ──
6322
+ interface BorsheimsSearchResult {
6323
+ name: string; // derived from the URL slug, title-cased
6324
+ url: string; // pass to getProduct / configureRing
6325
+ lastmod: string | null;
6326
+ }
6327
+ interface BorsheimsProduct {
6328
+ code: string;
6329
+ name: string;
6330
+ basePrice: number; // dollars, before any discount
6331
+ price: number; // dollars, the real selling price
6332
+ discount: number | null;
6333
+ inventoryAvailable: number;
6334
+ imageUrl: string | null;
6335
+ url: string; // pass to getProduct / configureRing
6336
+ }
6337
+ interface BorsheimsRingConfiguration {
6338
+ setting: BorsheimsProduct;
6339
+ diamond: BorsheimsProduct;
6340
+ totalPrice: number; // dollars, setting.price + diamond.price
6341
+ builderUrl: string; // the handoff — open this to configure/buy
6342
+ }
6343
+ interface ConfigureRingArgs {
6344
+ settingUrl: string;
6345
+ diamondUrl: string;
6346
+ }
6347
+
6348
+ /**
6349
+ * Reads Borsheims' live product catalog and composes a setting + diamond into a priced ring,
6350
+ * straight off borsheims.com's own embedded product data — no key, no browser.
6351
+ */
6352
+ interface Unit {
6353
+ /**
6354
+ * Turns a free-text query into real borsheims.com product page URLs — the LOCATOR getProduct
6355
+ * and configureRing need — by matching every query token against the site's own sitemap.xml
6356
+ * (~16,000 URLs, no login, no browser). Returns [] for a query nothing matches, an honest
6357
+ * empty result.
6358
+ */
6359
+ searchProducts(query: string): Promise<BorsheimsSearchResult[]>;
6360
+
6361
+ /**
6362
+ * Reads one product's real, live price straight off its product page's own embedded data
6363
+ * (mivaJS.product) — the same JSON the page's own components render from, including any active
6364
+ * discount. Takes the full borsheims.com product page URL. THROWS rather than guessing when
6365
+ * the page's own product-data block is missing or unparseable.
6366
+ */
6367
+ getProduct(url: string): Promise<BorsheimsProduct>;
6368
+
6369
+ /**
6370
+ * Composes a setting product page and a diamond/center-stone product page into a priced ring —
6371
+ * setting.price + diamond.price — the same arithmetic the site's own ring builder performs,
6372
+ * plus the ring-builder URL as the handoff to actually configure and buy.
6373
+ */
6374
+ configureRing(args: ConfigureRingArgs): Promise<BorsheimsRingConfiguration>;
6375
+ }
6376
+ }
6377
+
6378
+ declare namespace BowmarkProvider_boxlunch {
6379
+ // ── BoxLunch — the unit's own declarations, verbatim ──
6380
+ interface BoxlunchOffer {
6381
+ sku: string
6382
+ color: string | null
6383
+ size: string | null
6384
+ price: number | null
6385
+ currency: string | null
6386
+ availability: string | null // the site's own schema.org availability URL
6387
+ url: string
6388
+ }
6389
+ interface BoxlunchProduct {
6390
+ name: string
6391
+ url: string
6392
+ image: string | null
6393
+ offers: BoxlunchOffer[]
6394
+ }
6395
+ interface BoxlunchSearchResult {
6396
+ products: BoxlunchProduct[]
6397
+ }
6398
+
6399
+ /**
6400
+ * BoxLunch's own storefront search (boxlunch.com) — licensed pop-culture and entertainment
6401
+ * merch (apparel, figures, accessories, home goods) across every property the store carries,
6402
+ * read straight off the site's own structured search-result data.
6403
+ */
6404
+ interface Unit {
6405
+ /**
6406
+ * Searches boxlunch.com's own storefront for a keyword and returns the real, priced product
6407
+ * results (name, image, per-SKU price/color/size/availability) exactly as the site's own
6408
+ * search page carries them.
6409
+ */
6410
+ search(arg: { query: string }): Promise<BoxlunchSearchResult>;
6411
+ }
6412
+ }
6413
+
5152
6414
  declare namespace BowmarkProvider_boydsleep {
5153
6415
  // ── Boyd Sleep — the unit's own declarations, verbatim ──
5154
6416
  // Boyd Sleep's OWN shapes — not a capability contract.
@@ -5205,6 +6467,43 @@ interface Boydsleep6ZoneResult {
5205
6467
  }
5206
6468
  }
5207
6469
 
6470
+ declare namespace BowmarkProvider_brius {
6471
+ // ── Brava by BRIUS — the unit's own declarations, verbatim ──
6472
+ // Brava's OWN shapes — not a capability contract.
6473
+
6474
+ interface BriusProviderListing {
6475
+ name: string; // e.g. "Embrace Orthodontics"
6476
+ url: string; // the practice's own listing page on bravabraces.com
6477
+ doctorName: string | null;
6478
+ streetAddress: string | null;
6479
+ city: string | null;
6480
+ region: string | null;
6481
+ postalCode: string | null;
6482
+ country: string | null;
6483
+ phone: string | null;
6484
+ website: string | null; // the practice's own external site, when listed
6485
+ }
6486
+
6487
+ interface BriusProviderSearch {
6488
+ query: string;
6489
+ providers: BriusProviderListing[];
6490
+ }
6491
+
6492
+ /**
6493
+ * Brava (by Brius Technologies) hidden lingual braces are sold only through certified
6494
+ * orthodontists — search the site's own find-a-provider locator by zip code or location and
6495
+ * get back real, currently-listed certified practices with address, phone and doctor name.
6496
+ */
6497
+ interface Unit {
6498
+ /**
6499
+ * Runs Brava's own find-a-provider locator search for a zip code or location string and
6500
+ * returns the certified orthodontist practices it lists — name, doctor, address, phone and
6501
+ * website, straight from the site's own current data.
6502
+ */
6503
+ findProviders(query: string): Promise<BriusProviderSearch>;
6504
+ }
6505
+ }
6506
+
5208
6507
  declare namespace BowmarkProvider_brixton {
5209
6508
  // ── Brixton — the unit's own declarations, verbatim ──
5210
6509
  interface BrixtonVariant {
@@ -5327,6 +6626,91 @@ interface BulletproofNearbyStores {
5327
6626
  }
5328
6627
  }
5329
6628
 
6629
+ declare namespace BowmarkProvider_bungalow {
6630
+ // ── Bungalow — the unit's own declarations, verbatim ──
6631
+ interface BungalowMarket {
6632
+ slug: string;
6633
+ displayName: string;
6634
+ region: string;
6635
+ regionCode: string;
6636
+ country: string;
6637
+ countryCode: string;
6638
+ }
6639
+
6640
+ interface BungalowListingSummary {
6641
+ id: string;
6642
+ slug: string;
6643
+ headline: string | null;
6644
+ marketingType: "co_living" | "group_living" | string;
6645
+ numBathrooms: string;
6646
+ sqft: number | null;
6647
+ city: string;
6648
+ neighborhood: string | null;
6649
+ marketSlug: string;
6650
+ marketDisplayName: string;
6651
+ isComingSoon: boolean;
6652
+ }
6653
+
6654
+ interface BungalowSearchResult {
6655
+ listings: BungalowListingSummary[];
6656
+ count: number;
6657
+ totalMatching: number;
6658
+ }
6659
+
6660
+ interface BungalowSearchFilters {
6661
+ marketSlug: string;
6662
+ marketingType?: "co_living" | "group_living";
6663
+ neighborhoodSlug?: string;
6664
+ minPrice?: number;
6665
+ maxPrice?: number;
6666
+ petFriendly?: boolean;
6667
+ limit?: number;
6668
+ }
6669
+
6670
+ interface BungalowListingDetail {
6671
+ id: string;
6672
+ slug: string;
6673
+ headline: string | null;
6674
+ marketingType: "co_living" | "group_living" | string;
6675
+ totalRoomCount: number;
6676
+ availableRoomCount: number;
6677
+ earliestAvailableDate: string | null;
6678
+ roomPrices: number[];
6679
+ fullPropertyPrice: number | null;
6680
+ sqft: number | null;
6681
+ numBathrooms: string;
6682
+ amenities: unknown;
6683
+ matterportUrl: string | null;
6684
+ activePromotions: string[];
6685
+ isMeetAndGreetAvailable: boolean;
6686
+ showingsAvailable: { virtual: string | null; inPerson: string | null };
6687
+ }
6688
+
6689
+ /**
6690
+ * Bungalow's live, priced room and whole-home rental inventory and tour-booking availability,
6691
+ * read straight off their own documented API — no key, no browser.
6692
+ */
6693
+ interface Unit {
6694
+ /**
6695
+ * Lists every market Bungalow currently operates in, with the slug every other function's
6696
+ * marketSlug argument takes.
6697
+ */
6698
+ listMarkets(): Promise<{ markets: BungalowMarket[] }>;
6699
+
6700
+ /**
6701
+ * Searches live, priced room and whole-home rental listings in one market, filterable by
6702
+ * price, neighborhood and marketing type.
6703
+ */
6704
+ searchListings(filters: BungalowSearchFilters): Promise<BungalowSearchResult>;
6705
+
6706
+ /**
6707
+ * Returns one listing's full detail — room-level rent and availability, amenities, promotions
6708
+ * and tour-booking availability.
6709
+ */
6710
+ getListing(slug: string): Promise<BungalowListingDetail>;
6711
+ }
6712
+ }
6713
+
5330
6714
  declare namespace BowmarkProvider_bykoket {
5331
6715
  // ── KOKET — the unit's own declarations, verbatim ──
5332
6716
  interface KoketProductSummary {
@@ -5459,6 +6843,141 @@ interface byltbasicsPackHandoff {
5459
6843
  }
5460
6844
  }
5461
6845
 
6846
+ declare namespace BowmarkProvider_cabinsforyou {
6847
+ // ── Cabins For You — the unit's own declarations, verbatim ──
6848
+ // Cabins For You's OWN shapes — not a capability contract.
6849
+
6850
+ interface CabinsforyouListing {
6851
+ name: string;
6852
+ url: string;
6853
+ nightlyRate: number | null;
6854
+ originalNightlyRate: number | null;
6855
+ bedrooms: number;
6856
+ bathrooms: number;
6857
+ sleeps: number;
6858
+ sqft: number | null;
6859
+ petsAllowed: boolean;
6860
+ rating: number | null;
6861
+ reviewCount: number | null;
6862
+ imageUrl: string | null;
6863
+ bookCabinUrl: string;
6864
+ }
6865
+
6866
+ interface CabinsforyouSearchResult {
6867
+ resultCount: number;
6868
+ cabins: CabinsforyouListing[];
6869
+ }
6870
+
6871
+ interface CabinsforyouCabinDetail {
6872
+ name: string;
6873
+ url: string;
6874
+ city: string;
6875
+ bedrooms: number | null;
6876
+ bathrooms: number | null;
6877
+ sleeps: number | null;
6878
+ parking: string | null;
6879
+ petsAllowed: boolean | null;
6880
+ amenities: string[];
6881
+ rating: number | null;
6882
+ reviewCount: number | null;
6883
+ description: string;
6884
+ unitId: string | null;
6885
+ bookingQuoteUrl: string; // the WRITE handoff this provider never performs
6886
+ }
6887
+
6888
+ interface CabinsforyouSearchArgs {
6889
+ checkIn: string; // MM/DD/YYYY
6890
+ checkOut: string; // MM/DD/YYYY
6891
+ guests?: number;
6892
+ bedrooms?: number;
6893
+ }
6894
+
6895
+ /**
6896
+ * Cabins For You's live Smoky Mountain cabin-availability search (Check In / Check Out /
6897
+ * Guests / Bedrooms) off the site's own search page — real priced results, not a stale
6898
+ * aggregator mirror — plus one cabin's own amenities, room counts and booking-quote handoff.
6899
+ */
6900
+ interface Unit {
6901
+ /**
6902
+ * Runs Cabins For You's own homepage cabin-availability search and returns the real matching
6903
+ * cabins, priced. `args.checkIn` / `args.checkOut` are MM/DD/YYYY (the site's own date
6904
+ * format); `guests` and `bedrooms` are optional minimums.
6905
+ */
6906
+ search(args: CabinsforyouSearchArgs): Promise<CabinsforyouSearchResult>;
6907
+
6908
+ /**
6909
+ * Reads one cabin's own listing page — room counts, pet policy, amenities, description and
6910
+ * rating, plus the booking-quote handoff. `url` is a listing URL from a `search` result.
6911
+ */
6912
+ getCabinDetail(url: string): Promise<CabinsforyouCabinDetail>;
6913
+ }
6914
+ }
6915
+
6916
+ declare namespace BowmarkProvider_caliberhealth {
6917
+ // ── Caliber Healthcare Solutions — the unit's own declarations, verbatim ──
6918
+ // Caliber Healthcare Solutions' OWN shapes — not a capability contract.
6919
+
6920
+ interface CaliberhealthJobListing {
6921
+ title: string;
6922
+ jobId: string;
6923
+ postedDate: string;
6924
+ specialty: string;
6925
+ credentialType: string | null;
6926
+ state: string | null;
6927
+ zip: string | null;
6928
+ url: string;
6929
+ }
6930
+
6931
+ interface CaliberhealthSearchResult {
6932
+ jobs: CaliberhealthJobListing[];
6933
+ jobsOnPage: number;
6934
+ page: number;
6935
+ hasMorePages: boolean;
6936
+ }
6937
+
6938
+ interface CaliberhealthSearchArgs {
6939
+ specialty?: string;
6940
+ location?: string;
6941
+ keywords?: string;
6942
+ page?: number;
6943
+ }
6944
+
6945
+ interface CaliberhealthJobDetail {
6946
+ title: string;
6947
+ jobId: string;
6948
+ postedDate: string;
6949
+ specialty: string;
6950
+ location: string;
6951
+ facilityType: string | null;
6952
+ schedule: string | null;
6953
+ assignmentDetails: string | null;
6954
+ assignmentLength: string | null;
6955
+ aboutBlurb: string;
6956
+ url: string;
6957
+ applyUrl: string; // the WRITE handoff this provider never performs
6958
+ }
6959
+
6960
+ /**
6961
+ * Caliber Healthcare Solutions' live locum-tenens job board (/healthcare-jobs) off the site's
6962
+ * own server-rendered listings — real open jobs filterable by specialty/location/keywords, not
6963
+ * a stale mirror — plus one job's own full detail and apply handoff.
6964
+ */
6965
+ interface Unit {
6966
+ /**
6967
+ * Runs Caliber Healthcare Solutions' own live job-board search and returns the real open
6968
+ * locum-tenens jobs on the requested page, filtered by specialty/location/keywords. Call again
6969
+ * with an incremented `page` while `hasMorePages` is true.
6970
+ */
6971
+ search(args?: CaliberhealthSearchArgs): Promise<CaliberhealthSearchResult>;
6972
+
6973
+ /**
6974
+ * Reads one job's own detail page — specialty, location, facility type, schedule, assignment
6975
+ * length, and the apply handoff. `url` is a job URL from a `search` result.
6976
+ */
6977
+ getJob(url: string): Promise<CaliberhealthJobDetail>;
6978
+ }
6979
+ }
6980
+
5462
6981
  declare namespace BowmarkProvider_califloors {
5463
6982
  // ── CALI — the unit's own declarations, verbatim ──
5464
6983
  // CALI's OWN shapes — not a capability contract.
@@ -5506,6 +7025,13 @@ interface CaliProductDetail extends CaliProduct {
5506
7025
 
5507
7026
  declare namespace BowmarkProvider_camelcamelcamel {
5508
7027
  // ── camelcamelcamel — the unit's own declarations, verbatim ──
7028
+ interface CamelSearchResult {
7029
+ asin: string;
7030
+ title: string;
7031
+ currentPrice: number | null;
7032
+ url: string;
7033
+ }
7034
+
5509
7035
  interface CamelPriceStat {
5510
7036
  price: number | null;
5511
7037
  date: string | null;
@@ -5533,6 +7059,13 @@ interface CamelPriceHistory {
5533
7059
  * for.
5534
7060
  */
5535
7061
  interface Unit {
7062
+ /**
7063
+ * Runs camelcamelcamel's own Amazon-product search and returns each hit's ASIN, title and
7064
+ * current price — the locator this provider was missing: `getPriceHistory` takes an ASIN, and
7065
+ * this is how a caller holding only a shopper's words finds one.
7066
+ */
7067
+ search(query: string): Promise<CamelSearchResult[]>;
7068
+
5536
7069
  /**
5537
7070
  * Reads camelcamelcamel's independently-tracked Amazon price history for one ASIN — the site's
5538
7071
  * own lowest-ever/highest-ever/current/average figures, each dated, for the Amazon,
@@ -5816,6 +7349,139 @@ interface CarePatrolFindLocalAdvisorResult {
5816
7349
  }
5817
7350
  }
5818
7351
 
7352
+ declare namespace BowmarkProvider_carmelrealtycompany {
7353
+ // ── Carmel Realty Company — the unit's own declarations, verbatim ──
7354
+ interface carmelrealtycompanyListingSummary {
7355
+ url: string;
7356
+ slug: string | null;
7357
+ city: string;
7358
+ price: string;
7359
+ priceValue: number | null;
7360
+ latitude: number;
7361
+ longitude: number;
7362
+ }
7363
+ interface carmelrealtycompanyListing {
7364
+ slug: string;
7365
+ url: string;
7366
+ address: string;
7367
+ sold: boolean;
7368
+ price: string;
7369
+ priceValue: number | null;
7370
+ mlsNumber: string | null;
7371
+ bedrooms: string | null;
7372
+ bathrooms: string | null;
7373
+ lotSize: string | null;
7374
+ squareFootage: string | null;
7375
+ }
7376
+
7377
+ /**
7378
+ * Runs Carmel Realty Company's own regional listing search and listing-detail pages and
7379
+ * returns real, live MLS-backed rows — address, price, MLS number, beds/baths, coordinates —
7380
+ * for Carmel-by-the-Sea, Carmel Valley, Monterey and Pacific Grove.
7381
+ */
7382
+ interface Unit {
7383
+ /**
7384
+ * Runs one of Carmel Realty Company's own regional listing-search pages and returns every
7385
+ * active listing it maps: the listing's own detail-page URL (and a slug you can pass to
7386
+ * `getListing`, `null` for the rare listing that points at a dedicated marketing microsite
7387
+ * instead), city, the site's own formatted price plus a parsed `priceValue`, and coordinates.
7388
+ * Rows come straight off the page's live Mapbox data, price-descending as the site itself
7389
+ * orders them.
7390
+ */
7391
+ searchListings(region: "carmel" | "carmel-valley" | "monterey" | "pacific-grove" | "global"): Promise<carmelrealtycompanyListingSummary[]>;
7392
+
7393
+ /**
7394
+ * Fetches one Carmel Realty Company listing detail page by its slug (the `slug` a
7395
+ * `searchListings` row returns, e.g. "5466-quail-way-carmel") and returns its address,
7396
+ * sold/active status, price, MLS number, bedrooms, bathrooms, lot size and square footage —
7397
+ * the site's own live data, not a cached copy.
7398
+ */
7399
+ getListing(slug: string): Promise<carmelrealtycompanyListing>;
7400
+ }
7401
+ }
7402
+
7403
+ declare namespace BowmarkProvider_carolefabrics {
7404
+ // ── Carole Fabrics — the unit's own declarations, verbatim ──
7405
+ interface CarolefabricsSearchArgs {
7406
+ category: "fabric" | "trim";
7407
+ keyword: string;
7408
+ }
7409
+ interface CarolefabricsItem {
7410
+ patternName: string;
7411
+ colorName: string | null;
7412
+ sku: string;
7413
+ book: string;
7414
+ imageUrl: string;
7415
+ promoCode: string | null;
7416
+ promoLabel: string | null;
7417
+ }
7418
+ interface CarolefabricsSearchResult {
7419
+ category: "fabric" | "trim";
7420
+ keyword: string;
7421
+ items: CarolefabricsItem[];
7422
+ totalMatches: number;
7423
+ }
7424
+
7425
+ /**
7426
+ * Carole Fabrics' own CaroleNet trade-catalog search (carolenet.com) — a live keyword search
7427
+ * over their real fabric or trim catalog, returning actual matching patterns/colorways with
7428
+ * SKU, book and any active promotion. Public, no login required.
7429
+ */
7430
+ interface Unit {
7431
+ /**
7432
+ * Runs a keyword search against CaroleNet's live fabric or trim catalog and returns the real
7433
+ * matching patterns/colorways — pattern name, colorway, SKU, book, image and any active
7434
+ * promotion — plus the total match count.
7435
+ */
7436
+ search(args: CarolefabricsSearchArgs): Promise<CarolefabricsSearchResult>;
7437
+ }
7438
+ }
7439
+
7440
+ declare namespace BowmarkProvider_carpetlandusa {
7441
+ // ── Carpetland USA — the unit's own declarations, verbatim ──
7442
+ // Carpetland USA's OWN shapes — not a capability contract.
7443
+
7444
+ interface CarpetlandCategory { id: number; name: string; slug: string; count: number }
7445
+
7446
+ interface CarpetlandProductSummary { slug: string; title: string; url: string }
7447
+
7448
+ interface CarpetlandProductDetail extends CarpetlandProductSummary {
7449
+ style: string | null;
7450
+ color: string | null;
7451
+ material: string | null; // e.g. "Rigid – Plank"
7452
+ sqFtPerCarton: number | null;
7453
+ roomDescription: string | null; // e.g. "12'x9' Room / 108 sq ft"
7454
+ installedPrice: string | null; // e.g. "$722"
7455
+ installedPriceValue: number | null;
7456
+ callForPricing: boolean; // true when the site has no posted price for this SKU
7457
+ }
7458
+
7459
+ /**
7460
+ * Carpetland USA's own flooring catalog — the category taxonomy, a keyword search over any
7461
+ * category's live listing, and one SKU's real style/color/material and its computed installed
7462
+ * price for a standard 12'x9' room, straight off the site's own WordPress REST API.
7463
+ */
7464
+ interface Unit {
7465
+ /**
7466
+ * Carpetland USA's own product-catalog taxonomy — every category, its slug and its live
7467
+ * product count.
7468
+ */
7469
+ listCategories(): Promise<CarpetlandCategory[]>;
7470
+
7471
+ /**
7472
+ * The first page (up to 100) of the catalog, or one category's listing (e.g. "waterproof-lvp"
7473
+ * from listCategories), optionally filtered by a keyword against the product title.
7474
+ */
7475
+ searchProducts(categorySlug?: string, keyword?: string): Promise<{ products: CarpetlandProductSummary[]; category: CarpetlandCategory | null }>;
7476
+
7477
+ /**
7478
+ * One product's own catalog page — its real style, color, material, coverage per carton and,
7479
+ * when the SKU has one, the computed installed price for a standard 12'x9' room.
7480
+ */
7481
+ getProduct(slugOrUrl: string): Promise<CarpetlandProductDetail>;
7482
+ }
7483
+ }
7484
+
5819
7485
  declare namespace BowmarkProvider_cars {
5820
7486
  // ── Cars.com — the unit's own declarations, verbatim ──
5821
7487
  interface carsListing {
@@ -5923,6 +7589,348 @@ interface carsVehicleValue {
5923
7589
  }
5924
7590
  }
5925
7591
 
7592
+ declare namespace BowmarkProvider_carusohomes {
7593
+ // ── Caruso Homes — the unit's own declarations, verbatim ──
7594
+ interface CarusoCommunity {
7595
+ name: string;
7596
+ url: string;
7597
+ listingId: string | null;
7598
+ streetAddress: string | null;
7599
+ city: string | null;
7600
+ state: string | null;
7601
+ postalCode: string | null;
7602
+ latitude: number | null;
7603
+ longitude: number | null;
7604
+ description: string;
7605
+ images: string[];
7606
+ startingPriceLabel: string | null;
7607
+ }
7608
+
7609
+ interface CarusoFloorPlan {
7610
+ name: string;
7611
+ url: string;
7612
+ listingId: string | null;
7613
+ collection: string | null;
7614
+ priceLabel: string | null;
7615
+ priceValue: number | null;
7616
+ beds: number | null;
7617
+ baths: number | null;
7618
+ sqft: number | null;
7619
+ buildOnYourLot: boolean;
7620
+ }
7621
+
7622
+ interface CarusoFormFieldOption {
7623
+ value: string;
7624
+ label: string;
7625
+ }
7626
+
7627
+ interface CarusoFormField {
7628
+ name: string;
7629
+ label: string;
7630
+ type: "text" | "email" | "tel" | "date" | "checkbox" | "select";
7631
+ required: boolean;
7632
+ options?: CarusoFormFieldOption[];
7633
+ }
7634
+
7635
+ interface CarusoTourAppointmentSchema {
7636
+ entryUrl: string;
7637
+ communityName: string;
7638
+ itemOfInterestId: string;
7639
+ fields: CarusoFormField[];
7640
+ }
7641
+
7642
+ interface SearchCommunitiesArgs {
7643
+ market: string; // e.g. "md/maryland", "nc/charlotte" — the path segment carusohomes.com uses under /new-homes/<market>/
7644
+ }
7645
+
7646
+ interface SearchFloorPlansArgs {
7647
+ market: string;
7648
+ buildOnYourLot?: boolean; // true -> the market's Build-on-Your-Lot listing; false/omitted -> community-attached plans
7649
+ }
7650
+
7651
+ interface GetTourAppointmentSchemaArgs {
7652
+ communityUrl: string; // a community URL from searchCommunities, e.g. "https://www.carusohomes.com/new-homes/md/ellicott-city/mill-creek/18641/"
7653
+ }
7654
+
7655
+ interface AssembleTourRequestArgs {
7656
+ communityUrl: string;
7657
+ firstName: string;
7658
+ lastName: string;
7659
+ email: string;
7660
+ phone?: string;
7661
+ desiredPriceRangeMinimum?: string;
7662
+ desiredPriceRangeMaximum?: string;
7663
+ whenToMove?: string;
7664
+ preferredAppointmentDate?: string; // "YYYY-MM-DD"
7665
+ message?: string;
7666
+ textOptIn?: boolean;
7667
+ }
7668
+
7669
+ interface AssembledTourRequest {
7670
+ valid: boolean;
7671
+ errors: string[];
7672
+ entryUrl: string;
7673
+ formFields: Record<string, string>;
7674
+ summary: string;
7675
+ }
7676
+
7677
+ /**
7678
+ * Caruso Homes' own live community and Build-on-Your-Lot floor-plan listings, plus each
7679
+ * community's own 'Schedule a Tour' form — reads the real field schema and assembles a
7680
+ * validated, ready-to-submit tour request. Never submits it.
7681
+ */
7682
+ interface Unit {
7683
+ /**
7684
+ * Every live community on one of Caruso Homes' market listing pages — name, address, geo,
7685
+ * image, description and the site's own best-effort starting-price band.
7686
+ */
7687
+ searchCommunities(args: SearchCommunitiesArgs): Promise<CarusoCommunity[]>;
7688
+
7689
+ /**
7690
+ * Every floor-plan card on a market's listing — community-attached by default, or
7691
+ * Build-on-Your-Lot when buildOnYourLot is true — with price, beds, baths and square footage.
7692
+ */
7693
+ searchFloorPlans(args: SearchFloorPlansArgs): Promise<CarusoFloorPlan[]>;
7694
+
7695
+ /**
7696
+ * One community's own live 'Schedule a Tour' form: every visible field (type, required-ness,
7697
+ * real enumerated options) plus that community's item_of_interest_id.
7698
+ */
7699
+ getTourAppointmentSchema(args: GetTourAppointmentSchemaArgs): Promise<CarusoTourAppointmentSchema>;
7700
+
7701
+ /**
7702
+ * Validates a caller's tour request against a community's live form schema and maps it onto
7703
+ * the site's own field names, ready to submit to /xhr/schedule-appointment/. Never submits it.
7704
+ */
7705
+ assembleTourRequest(args: AssembleTourRequestArgs): Promise<AssembledTourRequest>;
7706
+ }
7707
+ }
7708
+
7709
+ declare namespace BowmarkProvider_casadragones {
7710
+ // ── Casa Dragones — the unit's own declarations, verbatim ──
7711
+ // Casa Dragones' OWN shapes — not a capability contract.
7712
+
7713
+ interface CasaDragonesProductSummary {
7714
+ handle: string; // the key getProduct takes
7715
+ title: string;
7716
+ url: string;
7717
+ }
7718
+
7719
+ interface CasaDragonesProduct {
7720
+ handle: string;
7721
+ title: string;
7722
+ url: string; // the real product page — the honest handoff to buy/checkout
7723
+ price: number; // dollars, the site's own real price
7724
+ description: string;
7725
+ }
7726
+
7727
+ interface CasaDragonesRetailer {
7728
+ id: string;
7729
+ name: string;
7730
+ address: string;
7731
+ city: string;
7732
+ state: string;
7733
+ latitude: number;
7734
+ longitude: number;
7735
+ distanceMiles: number;
7736
+ categories: string[]; // e.g. "RETAILER", "BAR/RESTAURANT"
7737
+ }
7738
+
7739
+ interface CasaDragonesNearbyRetailers {
7740
+ zip: string;
7741
+ radiusMiles: number;
7742
+ retailers: CasaDragonesRetailer[];
7743
+ }
7744
+
7745
+ /**
7746
+ * Casa Dragones' real sipping-tequila catalog and real product pricing straight off the site,
7747
+ * plus its real store locator (StoreRocket) for nearby retailers/bars/restaurants that
7748
+ * actually carry it — the two things ChatGPT cannot do today (it guesses at prices and asks
7749
+ * the user to run the locator manually).
7750
+ */
7751
+ interface Unit {
7752
+ /**
7753
+ * Lists Casa Dragones' real sipping-tequila catalog off their own product listing page,
7754
+ * optionally filtered by a free-text query matched against the title.
7755
+ */
7756
+ listProducts(query?: string): Promise<CasaDragonesProductSummary[]>;
7757
+
7758
+ /**
7759
+ * Reads one product's real title, real price and real description straight off its live page.
7760
+ * THROWS on an unknown handle, naming listProducts() as the way to find real ones. `url` is
7761
+ * the honest checkout handoff — casadragones.com's own add-to-cart button lives on that exact
7762
+ * page.
7763
+ */
7764
+ getProduct(handle: string): Promise<CasaDragonesProduct>;
7765
+
7766
+ /**
7767
+ * Runs Casa Dragones' own real-time store locator (StoreRocket) for a US ZIP and returns real
7768
+ * nearby retailers/bars/restaurants that carry Casa Dragones, distance-ranked in miles — never
7769
+ * a guess at which stores might stock it. `radiusMiles` defaults to 50 and is capped at 500;
7770
+ * an honestly empty list means nothing in Casa Dragones' own tracked network is that close.
7771
+ */
7772
+ findNearbyRetailers(zip: string, radiusMiles?: number): Promise<CasaDragonesNearbyRetailers>;
7773
+ }
7774
+ }
7775
+
7776
+ declare namespace BowmarkProvider_cbhhomes {
7777
+ // ── CBH Homes — the unit's own declarations, verbatim ──
7778
+ interface CbhListing {
7779
+ id: number;
7780
+ mls: number;
7781
+ url: string;
7782
+ image: string | null;
7783
+ status: string;
7784
+ isSold: boolean;
7785
+ isReserved: boolean;
7786
+ address: string;
7787
+ city: string;
7788
+ filterCity: string;
7789
+ county: string | null;
7790
+ state: string;
7791
+ postalCode: string;
7792
+ latitude: number | null;
7793
+ longitude: number | null;
7794
+ floorPlanId: string | null;
7795
+ floorPlanName: string | null;
7796
+ communityId: string | null;
7797
+ communityName: string | null;
7798
+ beds: number | null;
7799
+ baths: number | null;
7800
+ garageCapacity: number | null;
7801
+ sqft: number | null;
7802
+ price: number;
7803
+ priceMonthly: number | null;
7804
+ amenities: string[];
7805
+ salesCenter: string | null;
7806
+ schoolDistrict: string | null;
7807
+ daysOnMarket: number | null;
7808
+ }
7809
+
7810
+ interface SearchListingsArgs {
7811
+ city?: string; // the site's own filter-city band, e.g. "Meridian (North)"
7812
+ bedrooms?: number;
7813
+ bathrooms?: number;
7814
+ priceMin?: number;
7815
+ priceMax?: number;
7816
+ sqftMin?: number;
7817
+ sqftMax?: number;
7818
+ moveInReady?: boolean;
7819
+ count?: number; // default 50
7820
+ page?: number;
7821
+ }
7822
+
7823
+ interface CbhFormFieldOption {
7824
+ value: string;
7825
+ label: string;
7826
+ }
7827
+
7828
+ interface CbhFormField {
7829
+ name: string;
7830
+ label: string;
7831
+ type: "text" | "email" | "tel" | "checkbox" | "select" | "textarea";
7832
+ required: boolean;
7833
+ options?: CbhFormFieldOption[];
7834
+ }
7835
+
7836
+ interface CbhInquiryFormSchema {
7837
+ entryUrl: string;
7838
+ fields: CbhFormField[];
7839
+ }
7840
+
7841
+ interface GetInquiryFormSchemaArgs {
7842
+ pageUrl?: string; // a listing's own url from searchListings, or omit for the homepage form
7843
+ }
7844
+
7845
+ interface AssembleInquiryArgs {
7846
+ pageUrl?: string; // a listing's own url from searchListings pre-fills the form's hidden bookkeeping for that home; omit for a general inquiry
7847
+ firstName: string;
7848
+ lastName: string;
7849
+ email: string;
7850
+ phone: string;
7851
+ cityOfInterest: string; // must be one of getInquiryFormSchema's own options
7852
+ priceRange: string; // must be one of getInquiryFormSchema's own options
7853
+ message?: string;
7854
+ street?: string;
7855
+ city?: string;
7856
+ state?: string;
7857
+ zip?: string;
7858
+ howClose?: string;
7859
+ textOptIn?: boolean;
7860
+ }
7861
+
7862
+ interface AssembledInquiry {
7863
+ valid: boolean;
7864
+ errors: string[];
7865
+ entryUrl: string;
7866
+ formFields: Record<string, string>;
7867
+ summary: string;
7868
+ }
7869
+
7870
+ /**
7871
+ * CBH Homes' own live home-search endpoint (city, price, beds, baths) plus the site's own 'get
7872
+ * in touch about a home' inquiry form — reads the real field schema and assembles a validated,
7873
+ * ready-to-submit inquiry for one listing. Never submits it.
7874
+ */
7875
+ interface Unit {
7876
+ /**
7877
+ * Every home matching a city/price/beds/baths filter, straight off CBH Homes' own home-search
7878
+ * endpoint — address, price, floor plan, community, amenities and days on market.
7879
+ */
7880
+ searchListings(args: SearchListingsArgs): Promise<CbhListing[]>;
7881
+
7882
+ /**
7883
+ * The site's own live 'get in touch about a home' form: every visible field (type,
7884
+ * required-ness, real enumerated City of Interest / Price Range options).
7885
+ */
7886
+ getInquiryFormSchema(args: GetInquiryFormSchemaArgs): Promise<CbhInquiryFormSchema>;
7887
+
7888
+ /**
7889
+ * Validates a caller's inquiry against the form's live schema and maps it onto the site's own
7890
+ * field names, pre-filling a supplied listing's own hidden bookkeeping — ready to submit.
7891
+ * Never submits it.
7892
+ */
7893
+ assembleInquiry(args: AssembleInquiryArgs): Promise<AssembledInquiry>;
7894
+ }
7895
+ }
7896
+
7897
+ declare namespace BowmarkProvider_champxpress {
7898
+ // ── Champion Xpress Carwash — the unit's own declarations, verbatim ──
7899
+ // Champion Xpress's OWN shapes — not a capability contract.
7900
+
7901
+ interface ChampxpressLocation { slug: string; displayName: string; state: string }
7902
+
7903
+ interface ChampxpressPlanQuote {
7904
+ location: ChampxpressLocation;
7905
+ planName: string;
7906
+ price: number;
7907
+ currency: "USD";
7908
+ checkoutUrl: string; // preseeded add-to-cart link; not visited by this provider
7909
+ }
7910
+
7911
+ /**
7912
+ * Reads Champion Xpress Carwash's own live "25 for Life" MVP Unlimited membership picker —
7913
+ * every currently enrolled wash location, and for a chosen one, the real current monthly price
7914
+ * plus a preseeded add-to-cart link — the way the site's own state/location select computes
7915
+ * it, real-time.
7916
+ */
7917
+ interface Unit {
7918
+ /**
7919
+ * Lists every wash location currently enrolled in Champion Xpress's "25 for Life" MVP
7920
+ * Unlimited membership plan, read live off the plan page's own state/location select.
7921
+ */
7922
+ listLocations(): Promise<ChampxpressLocation[]>;
7923
+
7924
+ /**
7925
+ * Runs the site's own price computation for one location — `location` is a free-text name or
7926
+ * slug from `listLocations()`, e.g. "El Paso" or "el-paso-tx-alameda" — and returns the real
7927
+ * current monthly price plus a preseeded add-to-cart URL. THROWS when the location matches
7928
+ * zero or more than one enrolled location, naming the current candidates either way.
7929
+ */
7930
+ getPlanQuote(location: string): Promise<ChampxpressPlanQuote>;
7931
+ }
7932
+ }
7933
+
5926
7934
  declare namespace BowmarkProvider_chantecaille {
5927
7935
  // ── Chantecaille — the unit's own declarations, verbatim ──
5928
7936
  // Chantecaille's OWN shapes — not a capability contract.
@@ -6169,6 +8177,48 @@ interface ChesmarSearchFilters {
6169
8177
  }
6170
8178
  }
6171
8179
 
8180
+ declare namespace BowmarkProvider_chipotle {
8181
+ // ── Chipotle — the unit's own declarations, verbatim ──
8182
+ interface ChipotleCustomization {
8183
+ id: number;
8184
+ name: string;
8185
+ }
8186
+
8187
+ interface ChipotleContentItem {
8188
+ itemId: string;
8189
+ itemName: string;
8190
+ itemType: string;
8191
+ defaultContent: boolean;
8192
+ customizations: ChipotleCustomization[];
8193
+ }
8194
+
8195
+ interface ChipotleBowlOption {
8196
+ itemId: string;
8197
+ itemName: string;
8198
+ primaryFillingName: string | null;
8199
+ contents: ChipotleContentItem[];
8200
+ }
8201
+
8202
+ interface ChipotleBowlBuilderResult {
8203
+ source: string;
8204
+ pricesAvailable: false;
8205
+ proteins: ChipotleBowlOption[];
8206
+ }
8207
+
8208
+ /**
8209
+ * Chipotle's own burrito-bowl builder — every protein with its full rice/beans/salsa/topping
8210
+ * list, straight off the site's ordering API.
8211
+ */
8212
+ interface Unit {
8213
+ /**
8214
+ * Every burrito-bowl protein option and its full rice/beans/salsa/topping build, straight off
8215
+ * chipotle.com's own ordering API. Prices are not in this document (Chipotle prices per
8216
+ * restaurant) — pricesAvailable is always false.
8217
+ */
8218
+ getBowlBuilder(options?: { protein?: string }): Promise<ChipotleBowlBuilderResult>;
8219
+ }
8220
+ }
8221
+
6172
8222
  declare namespace BowmarkProvider_chriscraft {
6173
8223
  // ── Chris-Craft — the unit's own declarations, verbatim ──
6174
8224
  // Chris-Craft's OWN shapes — not a capability contract.
@@ -6444,24 +8494,43 @@ interface ClasspassSearchQuery {
6444
8494
  /** Centre of the search, decimal degrees. */
6445
8495
  lat: number;
6446
8496
  lon: number;
6447
- /** Search radius (default 1, clamped to 1-50). */
8497
+ /** Search radius (default 1, clamped to 1-50); turned into a bounding box —
8498
+ * the origin takes no radius field of its own on this route. */
6448
8499
  radius: number;
6449
8500
  /** "mi" (default) or "km". */
6450
8501
  radiusUnits?: "mi" | "km";
6451
8502
  /** First day, YYYY-MM-DD. Defaults to TODAY (UTC date). */
6452
8503
  date?: string;
6453
- /** Opaque page token from a previous result's `cursor`. */
6454
- cursor?: string;
8504
+ }
8505
+
8506
+ /** One row of a location search — NOT a ClasspassVenue. This endpoint publishes
8507
+ * a smaller, differently-shaped record (no address, no time zone, no
8508
+ * amenities); follow up with getStudio(alias) for the full profile. */
8509
+ interface ClasspassSearchVenue {
8510
+ id: number;
8511
+ alias: string;
8512
+ name: string;
8513
+ /** The qualifier for a chain branch ("South Charlotte"). Absent on most
8514
+ * independent studios in this response — a gap in what the endpoint
8515
+ * publishes, not a parsing miss. */
8516
+ locationName: string | null;
8517
+ description: string | null;
8518
+ activities: string[];
8519
+ /** Null when the site has nothing to show yet. */
8520
+ ratingAverage: number | null;
8521
+ /** The site's OWN display string ("30000+", "3", "0") — never coerced to a
8522
+ * number, since past a threshold the site itself only publishes a floor. */
8523
+ ratingCountDisplay: string | null;
8524
+ latitude: number;
8525
+ longitude: number;
8526
+ /** Largest real photo; ClassPass's shared placeholder is dropped. */
8527
+ photo: string | null;
6455
8528
  }
6456
8529
 
6457
8530
  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. */
8531
+ results: ClasspassSearchVenue[];
8532
+ /** The origin's own session id for this search. */
6462
8533
  searchId: string;
6463
- /** Always null: the origin does not publish a total. */
6464
- totalHits: number | null;
6465
8534
  /** What this function did to the caller's query (defaults applied). */
6466
8535
  warnings: string[];
6467
8536
  }
@@ -6476,24 +8545,21 @@ interface ClasspassSearchResult {
6476
8545
  */
6477
8546
  interface Unit {
6478
8547
  /**
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`.
8548
+ * ClassPass's own location search — read back the fitness, wellness AND beauty venues within
8549
+ * `query.radius` of `query.lat`/`query.lon`, with their identity, coordinates, the activities
8550
+ * each teaches, rating, a description and a photo. `query.lat` and `query.lon` are required
8551
+ * (decimal degrees, finite, in range); `query.radius` defaults to 1 and is clamped to 1-50;
8552
+ * `query.radiusUnits` is `mi` (default) or `km`; `query.date` is `YYYY-MM-DD` and defaults to
8553
+ * TODAY (UTC) this function turns lat/lon/radius into a bounding box itself, since the
8554
+ * origin takes no radius field of its own on this route. One call returns EVERY venue inside
8555
+ * that box (226 measured on a 5 mi Charlotte box) there is no pagination and no `cursor`;
8556
+ * ask for a wider radius for more. Returns `warnings` whenever the function did anything to
8557
+ * the caller's query (radius defaulted, date defaulted) so a caller rendering the result knows
8558
+ * exactly what shape their input landed in. Each result is NOT a full profile — no address, no
8559
+ * time zone, no amenities, `ratingCountDisplay` is the site's own capped string ('30000+')
8560
+ * rather than a real count — follow up with `getStudio(alias)` for that. This is the entry
8561
+ * point to essentially everything else in this provider a studio id or class id is not
8562
+ * knowable ahead of a search.
6497
8563
  */
6498
8564
  search(query: ClasspassSearchQuery): Promise<ClasspassSearchResult>;
6499
8565
 
@@ -6539,6 +8605,90 @@ interface ClasspassSearchResult {
6539
8605
  }
6540
8606
  }
6541
8607
 
8608
+ declare namespace BowmarkProvider_claude_com {
8609
+ // ── Claude.ai Docs — the unit's own declarations, verbatim ──
8610
+ interface claude_comDoc {
8611
+ url: string;
8612
+ title: string | null;
8613
+ description: string | null;
8614
+ body: string;
8615
+ }
8616
+ interface claude_comDocLink {
8617
+ title: string;
8618
+ url: string;
8619
+ description: string | null;
8620
+ }
8621
+
8622
+ /**
8623
+ * Reads one page of claude.com's own documentation (claude.com/docs/...) by URL and returns
8624
+ * its title, description and body as clean markdown — the site's own machine-readable .md
8625
+ * source, not a scrape.
8626
+ */
8627
+ interface Unit {
8628
+ /**
8629
+ * Reads one page of claude.com's own documentation by URL or path (e.g.
8630
+ * "/docs/connectors/building/review-criteria" or the full https:// url) and returns its title,
8631
+ * description and body as clean markdown — the site's own .md source with its per-page
8632
+ * navigation boilerplate stripped, not a whole-page scrape. Only /docs pages are covered
8633
+ * (claude.com/pricing is not under /docs and has no .md source). THROWS if the page does not
8634
+ * exist (404) or names a host other than claude.com.
8635
+ */
8636
+ getDoc(url: string): Promise<claude_comDoc>;
8637
+
8638
+ /**
8639
+ * Lists every /docs page claude.com publishes — title, its own .md source url, and a one-line
8640
+ * description — parsed from the site's own /docs/llms.txt index. Scoped to /docs, same as
8641
+ * getDoc; claude.com's root /llms.txt indexes marketing pages with no .md source and is out of
8642
+ * scope for this provider.
8643
+ */
8644
+ listDocPages(): Promise<claude_comDocLink[]>;
8645
+ }
8646
+ }
8647
+
8648
+ declare namespace BowmarkProvider_claude_support {
8649
+ // ── Claude Help Center — the unit's own declarations, verbatim ──
8650
+ interface ClaudeSupportArticle {
8651
+ articleId: string;
8652
+ url: string;
8653
+ title: string;
8654
+ description: string;
8655
+ lastUpdated: string | null;
8656
+ text: string;
8657
+ warnings: string[];
8658
+ }
8659
+ interface ClaudeSupportArticleLink {
8660
+ url: string;
8661
+ articleId: string;
8662
+ slug: string;
8663
+ lastUpdated: string;
8664
+ }
8665
+
8666
+ /**
8667
+ * Claude's own help center (support.claude.com) — reads one article's structured content
8668
+ * (title, description, last-updated date, flattened body text) directly from the page's own
8669
+ * __NEXT_DATA__ payload, given its URL.
8670
+ */
8671
+ interface Unit {
8672
+ /**
8673
+ * Returns one Claude help-center article by its URL — title, description, last-updated date,
8674
+ * and the flattened body text in document order. Covers articles on the Claude Pro or Max
8675
+ * plan, usage and length limits, the connectors directory, and Claude Code seat policy on a
8676
+ * Team or Enterprise plan. THROWS on a missing/invalid/off-site url, on a dead or renamed
8677
+ * article link, and on a transport failure, so a caller can distinguish "no such article" from
8678
+ * "empty".
8679
+ */
8680
+ getArticle(url: string): Promise<ClaudeSupportArticle>;
8681
+
8682
+ /**
8683
+ * Lists every English-language help-center article — its url, numeric articleId and URL slug —
8684
+ * parsed from the site's own /sitemap.xml (no public search endpoint exists, see getArticle's
8685
+ * doc comment). The slug is Intercom's own SEO rendering of the article title, e.g.
8686
+ * "what-is-the-max-plan"; call getArticle(url) for the article's real title field.
8687
+ */
8688
+ listArticles(): Promise<ClaudeSupportArticleLink[]>;
8689
+ }
8690
+ }
8691
+
6542
8692
  declare namespace BowmarkProvider_claudemarketplaces_com {
6543
8693
  // ── Claude Marketplaces — the unit's own declarations, verbatim ──
6544
8694
  interface claudeMarketplacesListing {
@@ -6555,6 +8705,13 @@ interface claudeMarketplacesListing {
6555
8705
  price: string | null;
6556
8706
  priceCurrency: string | null;
6557
8707
  }
8708
+ interface claudeMarketplacesListingLink {
8709
+ url: string;
8710
+ kind: string;
8711
+ publisher: string;
8712
+ slug: string;
8713
+ lastUpdated: string;
8714
+ }
6558
8715
 
6559
8716
  /**
6560
8717
  * A directory of Claude plugin/MCP/skill marketplace listings — fetch one listing's structured
@@ -6573,6 +8730,14 @@ interface claudeMarketplacesListing {
6573
8730
  * — `getListing` throws `ClaudeMarketplacesInputError` for any other path shape.
6574
8731
  */
6575
8732
  getListing(url: string): Promise<claudeMarketplacesListing>;
8733
+
8734
+ /**
8735
+ * Finds MCP server listings whose publisher or slug matches every word in `query`
8736
+ * (case-insensitive), e.g. "slack" or "github mcp" — parsed from the site's own sitemap index
8737
+ * (no title in the sitemap; call getListing(url) for the listing's real name/description).
8738
+ * Returns at most 50 matches. THROWS ClaudeMarketplacesInputError on an empty query.
8739
+ */
8740
+ searchListings(query: string): Promise<claudeMarketplacesListingLink[]>;
6576
8741
  }
6577
8742
  }
6578
8743
 
@@ -6830,6 +8995,43 @@ interface ClubchampionAvailability {
6830
8995
  }
6831
8996
  }
6832
8997
 
8998
+ declare namespace BowmarkProvider_code_claude_com {
8999
+ // ── Claude Code Docs — the unit's own declarations, verbatim ──
9000
+ interface code_claude_comDoc {
9001
+ url: string;
9002
+ title: string | null;
9003
+ description: string | null;
9004
+ body: string;
9005
+ }
9006
+ interface code_claude_comDocLink {
9007
+ title: string;
9008
+ url: string;
9009
+ description: string | null;
9010
+ }
9011
+
9012
+ /**
9013
+ * Reads one page of Claude Code's own documentation site (code.claude.com/docs/...) by URL and
9014
+ * returns its title, description and body as clean markdown — the site's own machine-readable
9015
+ * .md source, not a scrape.
9016
+ */
9017
+ interface Unit {
9018
+ /**
9019
+ * Reads one page of code.claude.com's own documentation by URL or path (e.g.
9020
+ * "/docs/en/amazon-bedrock" or the full https:// url) and returns its title, description and
9021
+ * body as clean markdown — the site's own .md source with its per-page navigation boilerplate
9022
+ * and inline component code stripped, not a whole-page scrape. THROWS if the page does not
9023
+ * exist (404) or names a host other than code.claude.com.
9024
+ */
9025
+ getDoc(url: string): Promise<code_claude_comDoc>;
9026
+
9027
+ /**
9028
+ * Lists every doc page code.claude.com publishes — title, its own .md source url, and a
9029
+ * one-line description — parsed from the site's own /docs/llms.txt index.
9030
+ */
9031
+ listDocPages(): Promise<code_claude_comDocLink[]>;
9032
+ }
9033
+ }
9034
+
6833
9035
  declare namespace BowmarkProvider_consultnet {
6834
9036
  // ── ConsultNet — the unit's own declarations, verbatim ──
6835
9037
  // ConsultNet's OWN shapes — not a capability contract.
@@ -7407,6 +9609,119 @@ interface DeckedCabSideOptionResult {
7407
9609
  }
7408
9610
  }
7409
9611
 
9612
+ declare namespace BowmarkProvider_decksdirect {
9613
+ // ── DecksDirect — the unit's own declarations, verbatim ──
9614
+ // DecksDirect's OWN shapes — not a capability contract.
9615
+
9616
+ interface DdProductSummary {
9617
+ urlKey: string; // the key getProduct takes
9618
+ sku: string;
9619
+ name: string;
9620
+ url: string;
9621
+ stockStatus: string; // "IN_STOCK" | "OUT_OF_STOCK"
9622
+ basePrice: number;
9623
+ basePriceFormatted: string; // "$9.96"
9624
+ }
9625
+
9626
+ interface DdOptionChoice { label: string; valueIndex: number }
9627
+
9628
+ interface DdOption {
9629
+ groupLabel: string; // "Pack Size", "Color" — the real group name
9630
+ attributeCode: string;
9631
+ choices: DdOptionChoice[];
9632
+ }
9633
+
9634
+ interface DdVariant {
9635
+ sku: string;
9636
+ stockStatus: string;
9637
+ price: number;
9638
+ priceFormatted: string;
9639
+ selections: Record<string, number>; // attributeCode -> valueIndex
9640
+ }
9641
+
9642
+ interface DdProduct {
9643
+ urlKey: string;
9644
+ sku: string;
9645
+ name: string;
9646
+ url: string;
9647
+ stockStatus: string;
9648
+ basePrice: number;
9649
+ basePriceFormatted: string;
9650
+ options: DdOption[];
9651
+ variants: DdVariant[];
9652
+ }
9653
+
9654
+ interface DdPriceResult {
9655
+ urlKey: string;
9656
+ sku: string;
9657
+ variantSku: string | null; // null until every multi-choice group is picked
9658
+ stockStatus: string | null;
9659
+ price: number | null;
9660
+ priceFormatted: string | null;
9661
+ applied: { group: string; choice: string }[];
9662
+ missingGroups: string[]; // groups with >1 choice and no selection applied
9663
+ unmatched: string[]; // selections that didn't match a real group/choice
9664
+ handoffUrl: string; // the product's entry page
9665
+ }
9666
+
9667
+ interface DdCartHandoff {
9668
+ urlKey: string;
9669
+ sku: string;
9670
+ name: string;
9671
+ url: string; // the product page — DecksDirect publishes no query-param deep link
9672
+ applied: { group: string; choice: string }[];
9673
+ price: number | null;
9674
+ priceFormatted: string | null;
9675
+ stockStatus: string | null;
9676
+ missingGroups: string[];
9677
+ unmatched: string[];
9678
+ }
9679
+
9680
+ /**
9681
+ * DecksDirect's decking/railing catalog — search live inventory, read one product's real
9682
+ * configurable options (pack size, color, size) with each combination's exact price and stock
9683
+ * status, and resolve a specific configuration to its real variant rather than a researched
9684
+ * estimate.
9685
+ */
9686
+ interface Unit {
9687
+ /**
9688
+ * Searches DecksDirect's decking/railing/hardware catalog by free text (e.g. "composite
9689
+ * decking", "deck screws") and returns every match's urlKey, SKU, name, entry URL, stock
9690
+ * status and starting price. The `urlKey` on each row is what getProduct takes.
9691
+ */
9692
+ searchProducts(query: string): Promise<DdProductSummary[]>;
9693
+
9694
+ /**
9695
+ * Reads one product's full configurable-option set (e.g. Pack Size, Color) with each choice's
9696
+ * real label, plus every real buildable variant's exact price and stock status. THROWS on an
9697
+ * unknown urlKey, naming searchProducts() as the way to find current ones.
9698
+ */
9699
+ getProduct(urlKey: string): Promise<DdProduct>;
9700
+
9701
+ /**
9702
+ * Resolves ONE specific configuration — selections keyed by option group (case-insensitive),
9703
+ * e.g. { "Pack Size": "350 pack", "Color": "Havana Gold" } — against the product's live
9704
+ * options and returns the matching variant's real price and stock status, the applied choices,
9705
+ * and the site URL to re-pick the same choices (DecksDirect publishes no shareable URL for a
9706
+ * configured state). `missingGroups` names any option group with more than one choice left
9707
+ * unpicked — price is null until every such group is chosen. `unmatched` names any selection
9708
+ * that did not match a real group or choice, rather than silently mispricing.
9709
+ */
9710
+ priceConfiguration(urlKey: string, selections: Record<string, string>): Promise<DdPriceResult>;
9711
+
9712
+ /**
9713
+ * Turns a configuration into the handoff you give the shopper: DecksDirect's own product page
9714
+ * URL plus the exact choices to click there, since this storefront does not honour a
9715
+ * query-param deep link for a configured state (measured — see the provider's reach note).
9716
+ * Same selections shape as priceConfiguration, and returns the same price, stock status and
9717
+ * applied choices alongside the URL. NOTHING IS CREATED SERVER-SIDE and nothing is bought —
9718
+ * this provider never posts to the site's own add-to-cart endpoint, which requires a
9719
+ * session-bound form key this stateless call does not hold.
9720
+ */
9721
+ addToCart(urlKey: string, selections: Record<string, string>): Promise<DdCartHandoff>;
9722
+ }
9723
+ }
9724
+
7410
9725
  declare namespace BowmarkProvider_developersopenai {
7411
9726
  // ── OpenAI Developer Docs — the unit's own declarations, verbatim ──
7412
9727
  interface DevelopersOpenaiDocPage {
@@ -7435,6 +9750,26 @@ interface DevelopersOpenaiDocPage {
7435
9750
 
7436
9751
  declare namespace BowmarkProvider_dice {
7437
9752
  // ── Dice — the unit's own declarations, verbatim ──
9753
+ interface DiceSearchResult {
9754
+ id: string;
9755
+ title: string;
9756
+ companyName: string;
9757
+ location: string;
9758
+ salary?: string;
9759
+ employmentType: string;
9760
+ workplaceType: string;
9761
+ postedDate: string;
9762
+ isRemote: boolean;
9763
+ willingSponsor: boolean;
9764
+ easyApply: boolean;
9765
+ }
9766
+ interface DiceSearchResponse {
9767
+ jobs: DiceSearchResult[];
9768
+ totalResults: number;
9769
+ currentPage: number;
9770
+ pageCount: number;
9771
+ warnings: string[];
9772
+ }
7438
9773
  interface DiceJobDetails {
7439
9774
  jobId: string;
7440
9775
  description: string;
@@ -7451,6 +9786,14 @@ interface diceRow {
7451
9786
  * posting-detail reads, employer profiles and a company's open roles.
7452
9787
  */
7453
9788
  interface Unit {
9789
+ /**
9790
+ * Searches Dice tech-job database for postings matching the query keyword. Returns job title,
9791
+ * company, location, salary range when published, employment type, workplace type, posting
9792
+ * date, and the job id `getJob` takes for full details. THROWS on a transport failure; an
9793
+ * empty query returns 0 results.
9794
+ */
9795
+ searchJobs(query: string): Promise<DiceSearchResponse>;
9796
+
7454
9797
  /**
7455
9798
  * Returns one Dice posting in full — the HTML description (the same document the consumer page
7456
9799
  * renders) and the normalized skills array — by the job id `searchJobs` returns. THROWS on a
@@ -7997,6 +10340,51 @@ interface DoordashSearchResult {
7997
10340
  }
7998
10341
  }
7999
10342
 
10343
+ declare namespace BowmarkProvider_dumpsters {
10344
+ // ── Dumpsters.com — the unit's own declarations, verbatim ──
10345
+ interface DumpstersGetQuoteArgs {
10346
+ address: string;
10347
+ projectType?: "homeCleanout" | "homeRemodel" | "yardCleanupOrLandscaping" | "bathroomOrKitchenDemo" | "roofingOrSidingTearDown" | "other";
10348
+ debrisType?: Array<"mixedHouseholdTrash" | "constructionDebris" | "yardOrOrganicMaterial" | "heavy">;
10349
+ }
10350
+
10351
+ interface DumpstersSizeQuote {
10352
+ size: string;
10353
+ sellAsSize: string | null;
10354
+ price: string;
10355
+ rentalPeriod: string;
10356
+ rentalPeriodOverageRate: string;
10357
+ tonnageIncluded: string;
10358
+ tonnageOverageRate: string;
10359
+ nextAvailableDate: string;
10360
+ mustCall: boolean;
10361
+ prohibitedItems: string[];
10362
+ }
10363
+
10364
+ interface DumpstersQuoteResult {
10365
+ serviced: boolean;
10366
+ address: { line1: string; city: string; state: string; zip: string; latitude: number; longitude: number };
10367
+ sizes: DumpstersSizeQuote[];
10368
+ checkoutUrl: string;
10369
+ }
10370
+
10371
+ /**
10372
+ * Real per-size roll-off dumpster pricing + next available delivery date for a US address,
10373
+ * straight from Dumpsters.com's own /cart ordering tool — prefer this over general knowledge
10374
+ * when a current, location-specific price is needed.
10375
+ */
10376
+ interface Unit {
10377
+ /**
10378
+ * Real per-size roll-off dumpster prices + next available delivery date for a US address
10379
+ * (`address`, e.g. "25000 Center Ridge Rd, Westlake, OH 44145"), from Dumpsters.com's own
10380
+ * /cart ordering tool. Prefer this over general knowledge when a current, location-specific
10381
+ * price is needed — a model's own training data cannot know today's price or delivery
10382
+ * availability at a given address.
10383
+ */
10384
+ getQuote(args: DumpstersGetQuoteArgs): Promise<DumpstersQuoteResult>;
10385
+ }
10386
+ }
10387
+
8000
10388
  declare namespace BowmarkProvider_ebay {
8001
10389
  // ── eBay — the unit's own declarations, verbatim ──
8002
10390
  interface ebayItem {
@@ -8737,6 +11125,52 @@ interface FirstdibsListing {
8737
11125
  }
8738
11126
  }
8739
11127
 
11128
+ declare namespace BowmarkProvider_fivebelow {
11129
+ // ── Five Below — the unit's own declarations, verbatim ──
11130
+ interface FiveBelowVariant {
11131
+ sku: string | null;
11132
+ style: string | null;
11133
+ price: number | null;
11134
+ inventory: number | null;
11135
+ available: boolean;
11136
+ }
11137
+ interface FiveBelowSearchResult {
11138
+ objectID: string;
11139
+ name: string;
11140
+ url: string;
11141
+ image: string | null;
11142
+ priceMin: number | null;
11143
+ priceMax: number | null;
11144
+ variants: FiveBelowVariant[];
11145
+ inStock: boolean;
11146
+ }
11147
+ interface FiveBelowSearchResults {
11148
+ query: string;
11149
+ page: number;
11150
+ totalMatches: number | null;
11151
+ totalPages: number | null;
11152
+ results: FiveBelowSearchResult[];
11153
+ warnings: string[];
11154
+ }
11155
+
11156
+ /**
11157
+ * Five Below's own product search — title, price(s), image and per-variant DC stock, the way
11158
+ * the site's own search bar answers it.
11159
+ */
11160
+ interface Unit {
11161
+ /**
11162
+ * Searches fivebelow.com's catalog for a keyword and returns matching products — name, URL,
11163
+ * image, price range across variants, per-variant SKU/style/price/DC-2022 stock, and whether
11164
+ * any variant is available — in the site's own relevance order. An empty `results` array is a
11165
+ * real answer meaning the site found nothing for this query. `query` is REQUIRED and REFUSES
11166
+ * an empty string — it is not a store-wide browse. If the caller only named the store and gave
11167
+ * no product, category or keyword, ask them what to search for; do not call this with an empty
11168
+ * or guessed query to see what comes back.
11169
+ */
11170
+ search(args: { query: string, limit?: number, page?: number }): Promise<FiveBelowSearchResults>;
11171
+ }
11172
+ }
11173
+
8740
11174
  declare namespace BowmarkProvider_fivestarbathsolutions {
8741
11175
  // ── Five Star Bath Solutions — the unit's own declarations, verbatim ──
8742
11176
  interface FivestarLocation {
@@ -9511,11 +11945,17 @@ interface fredObservations {
9511
11945
  /**
9512
11946
  * Browses FRED's category tree the way fred.stlouisfed.org/categories does — the category
9513
11947
  * 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.
11948
+ * it, each carrying the same full metadata getSeriesInfo returns (units, frequency, seasonal
11949
+ * adjustment, observation range, last updated) so a caller can read them straight off a
11950
+ * browsed result with no second call. Series come back MOST POPULAR FIRST, which is FRED's own
11951
+ * ordering for a category. Called bare it starts at the root (id 0). FRED organizes its
11952
+ * ~800,000 series into a real hierarchy (e.g. Money, Banking & Finance > Interest Rates >
11953
+ * Treasury Constant Maturity), so this is how a caller explores 'what's available in this
11954
+ * area' before knowing a series id to look up directly. `seriesTotal` is FRED's own count for
11955
+ * the category and `seriesTruncated` says whether you got all of it: FRED's listing serves at
11956
+ * most 1,500 series per category, so the handful of enormous ones (Housing is 54,800) come
11957
+ * back as the most popular 1,500 and say so. An unknown category id comes back as a
11958
+ * caller-fixable error.
9519
11959
  */
9520
11960
  browseCategory(categoryId?: number): Promise<fredCategory>;
9521
11961
  }
@@ -9629,6 +12069,78 @@ interface G2Product {
9629
12069
  }
9630
12070
  }
9631
12071
 
12072
+ declare namespace BowmarkProvider_gasbuddy {
12073
+ // ── GasBuddy — the unit's own declarations, verbatim ──
12074
+ interface GasbuddyFindCheapestNearbyArgs {
12075
+ zip: string; // a 5-digit US ZIP code, e.g. "78701"
12076
+ limit?: number; // default 10, clamped to [1, 30]
12077
+ }
12078
+
12079
+ interface GasbuddyStation {
12080
+ brand: string;
12081
+ address: string; // "<street>, <city>, <state>"
12082
+ price: number | null; // real, current regular-gas price; null if no recent report
12083
+ reportedAgo: string | null; // e.g. "2 Hours Ago", or null alongside a null price
12084
+ url: string; // this exact station's own GasBuddy URL
12085
+ }
12086
+
12087
+ /**
12088
+ * GasBuddy's real, crowdsourced per-station gas prices — runs the site's own ZIP-radius search
12089
+ * and returns currently-reported stations (brand, address, regular-gas price, how long ago it
12090
+ * was reported) sorted cheapest first.
12091
+ */
12092
+ interface Unit {
12093
+ /**
12094
+ * Runs GasBuddy's own ZIP-radius station search and returns real, currently-reported stations
12095
+ * (brand, address, regular-gas price, when it was reported), sorted cheapest first. Read-only.
12096
+ */
12097
+ findCheapestNearby(args: GasbuddyFindCheapestNearbyArgs): Promise<GasbuddyStation[]>;
12098
+ }
12099
+ }
12100
+
12101
+ declare namespace BowmarkProvider_gazelle {
12102
+ // ── Gazelle — the unit's own declarations, verbatim ──
12103
+ interface GazelleDevice {
12104
+ name: string; // "iPhone 14 Pro" — what a person would say
12105
+ brand: string; // gazelle's own brand segment, e.g. "iphone"
12106
+ model: string; // gazelle's own model slug, e.g. "iphone-14-pro"
12107
+ url: string; // the device's trade-in page
12108
+ }
12109
+ interface GazelleQuoteResult {
12110
+ deviceUrl: string;
12111
+ product: { id: string; name: string };
12112
+ selections: { capacity: string | null; carrier: string | null; condition: string | null };
12113
+ estimatedValue: number;
12114
+ expirationDate: string | null;
12115
+ }
12116
+
12117
+ /**
12118
+ * gazelle.com's own current trade-in offer for a device, for a chosen
12119
+ * capacity/carrier/condition — read off the same bootstrap JSON and pricing endpoint the
12120
+ * site's own offer page uses, instead of parsing prose off the rendered page.
12121
+ */
12122
+ interface Unit {
12123
+ /**
12124
+ * Every device gazelle.com takes in trade, off gazelle's own sitemap — name, brand, model slug
12125
+ * and the device's trade-in page URL. A query narrows it by words ("iphone 14", "ipad pro"),
12126
+ * shortest name first; no query at all returns the whole catalog. This is how a caller who
12127
+ * only knows what the device is CALLED gets the URL getTradeInQuote takes.
12128
+ */
12129
+ findDevices(query?: string): Promise<GazelleDevice[]>;
12130
+
12131
+ /**
12132
+ * Reads gazelle.com's own current trade-in offer for a device, for the given
12133
+ * capacity/carrier/condition (each matched against that device's own option labels, e.g.
12134
+ * condition: "Good"). `device` is either the device's NAME ("iPhone 14 Pro", resolved against
12135
+ * gazelle's own catalog) or its gazelle.com page URL. Capacity/carrier left out uses the
12136
+ * catalog's own default listing (carrier prefers "Unlocked"); condition left out uses the
12137
+ * offer page's own default answer. THROWS if a selection names an option this device does not
12138
+ * offer, or if no device matches the name.
12139
+ */
12140
+ getTradeInQuote(device: string, selections?: { capacity?: string; carrier?: string; condition?: string }): Promise<GazelleQuoteResult>;
12141
+ }
12142
+ }
12143
+
9632
12144
  declare namespace BowmarkProvider_geico {
9633
12145
  // ── GEICO — the unit's own declarations, verbatim ──
9634
12146
  interface geicoRow {
@@ -10047,6 +12559,57 @@ interface GithubListReleasesResult {
10047
12559
  }
10048
12560
  }
10049
12561
 
12562
+ declare namespace BowmarkProvider_glama {
12563
+ // ── Glama — the unit's own declarations, verbatim ──
12564
+ interface GlamaListedServer {
12565
+ namespace: string;
12566
+ slug: string;
12567
+ name: string;
12568
+ title: string;
12569
+ description: string | null;
12570
+ githubRepositoryFullName: string | null;
12571
+ githubStargazersCount: number | null;
12572
+ npmPackageName: string | null;
12573
+ toolCount: number;
12574
+ url: string;
12575
+ }
12576
+ interface GlamaRemoteServer {
12577
+ name: string;
12578
+ namespace: string;
12579
+ slug: string;
12580
+ title: string;
12581
+ description: string | null;
12582
+ githubRepositoryFullName: string | null;
12583
+ githubStargazersCount: number | null;
12584
+ healthy: boolean | null;
12585
+ url: string;
12586
+ }
12587
+ interface GlamaSearchResult {
12588
+ servers: GlamaListedServer[];
12589
+ remoteServers: GlamaRemoteServer[];
12590
+ hasMoreServers: boolean;
12591
+ warnings: string[];
12592
+ }
12593
+
12594
+ /**
12595
+ * Glama's own MCP server directory search, keyless — reads its React Router loader route
12596
+ * directly. Built: search returns matching rows from both Glama's indexed catalogue and its
12597
+ * live federated registry query, each with namespace, slug, description, GitHub repo/stars and
12598
+ * a health signal where reported.
12599
+ */
12600
+ interface Unit {
12601
+ /**
12602
+ * Searches Glama's MCP server directory. `servers` is Glama's own indexed catalogue (a query
12603
+ * that matches nothing there returns an empty array — a legitimate answer, not a throw);
12604
+ * `remoteServers` is a live federated query against known MCP registries and is where a server
12605
+ * not yet indexed by Glama itself, like a fresh entry in the official MCP registry, shows up
12606
+ * first. `hasMoreServers` is true when `servers` has a further page beyond the ~20 rows
12607
+ * returned. THROWS on a non-2xx response (e.g. rate limiting).
12608
+ */
12609
+ search(query: string): Promise<GlamaSearchResult>;
12610
+ }
12611
+ }
12612
+
10050
12613
  declare namespace BowmarkProvider_glassesusa {
10051
12614
  // ── GlassesUSA — the unit's own declarations, verbatim ──
10052
12615
  interface GlassesusaProduct {
@@ -10061,11 +12624,23 @@ interface GlassesusaProduct {
10061
12624
  prescriptionEligible: boolean; // orderable with prescription lenses
10062
12625
  }
10063
12626
 
12627
+ interface GlassesusaSearchResult {
12628
+ url: string;
12629
+ title: string;
12630
+ price: number;
12631
+ }
12632
+
10064
12633
  /**
10065
12634
  * GlassesUSA's own Virtual Try-On + prescription-checkout flow — getProduct reads one frame's
10066
12635
  * real live price, star rating, VTO availability and Rx eligibility off its own product page.
10067
12636
  */
10068
12637
  interface Unit {
12638
+ /**
12639
+ * Runs GlassesUSA's own search/brand-filter and returns matching frames with their live
12640
+ * selling prices. Returns up to 100 results (one grid page).
12641
+ */
12642
+ search(query: string): Promise<GlassesusaSearchResult[]>;
12643
+
10069
12644
  /**
10070
12645
  * Reads one GlassesUSA product page — real live price (plus the crossed-out 'was' price when
10071
12646
  * on sale), star rating and review count, whether Virtual Try-On is offered, and whether the
@@ -10420,6 +12995,11 @@ interface graingerStockRow {
10420
12995
 
10421
12996
  declare namespace BowmarkProvider_grandwelcome {
10422
12997
  // ── Grand Welcome — the unit's own declarations, verbatim ──
12998
+ interface GrandwelcomeDestination {
12999
+ slug: string;
13000
+ label: string;
13001
+ url: string;
13002
+ }
10423
13003
  interface GrandwelcomeRentalRow {
10424
13004
  rentalId: string;
10425
13005
  name: string;
@@ -10459,6 +13039,14 @@ type GrandwelcomeQuote =
10459
13039
  * price, not a stale catalog.
10460
13040
  */
10461
13041
  interface Unit {
13042
+ /**
13043
+ * The entry door: reads the site's own /sitemap.xml for every published destination page and
13044
+ * returns each one's slug (the exact vocabulary searchRentals takes) with a human-readable
13045
+ * label derived from it — e.g. { slug: "california-sea-ranch", label: "California Sea Ranch"
13046
+ * }.
13047
+ */
13048
+ listGrandwelcomeDestinations(): Promise<GrandwelcomeDestination[]>;
13049
+
10462
13050
  /**
10463
13051
  * Runs Grand Welcome's own destination search (a market slug like "california-sea-ranch", from
10464
13052
  * a rental's own page or the destination directory), optionally filtered to a bedroom count,
@@ -12029,6 +14617,42 @@ interface HolidaybuildersSearchFilters {
12029
14617
  }
12030
14618
  }
12031
14619
 
14620
+ declare namespace BowmarkProvider_hottopic {
14621
+ // ── Hot Topic — the unit's own declarations, verbatim ──
14622
+ interface HottopicOffer {
14623
+ sku: string
14624
+ color: string | null
14625
+ size: string | null
14626
+ price: number | null
14627
+ currency: string | null
14628
+ availability: string | null // the site's own schema.org availability URL
14629
+ url: string
14630
+ }
14631
+ interface HottopicProduct {
14632
+ name: string
14633
+ url: string
14634
+ image: string | null
14635
+ offers: HottopicOffer[]
14636
+ }
14637
+ interface HottopicSearchResult {
14638
+ products: HottopicProduct[]
14639
+ }
14640
+
14641
+ /**
14642
+ * Hot Topic's own storefront search (hottopic.com) — licensed pop-culture and entertainment
14643
+ * merch (apparel, figures, accessories) across every property the store carries, read straight
14644
+ * off the site's own structured search-result data.
14645
+ */
14646
+ interface Unit {
14647
+ /**
14648
+ * Searches hottopic.com's own storefront for a keyword and returns the real, priced product
14649
+ * results (name, image, per-SKU price/color/size/availability) exactly as the site's own
14650
+ * search page carries them.
14651
+ */
14652
+ search(arg: { query: string }): Promise<HottopicSearchResult>;
14653
+ }
14654
+ }
14655
+
12032
14656
  declare namespace BowmarkProvider_hunter {
12033
14657
  // ── Hunter — the unit's own declarations, verbatim ──
12034
14658
  interface hunterDomainCandidate {
@@ -13900,6 +16524,71 @@ interface KaleidescapeFindDealersOptions {
13900
16524
  }
13901
16525
  }
13902
16526
 
16527
+ declare namespace BowmarkProvider_kalshi {
16528
+ // ── Kalshi — the unit's own declarations, verbatim ──
16529
+ interface KalshiMarket {
16530
+ ticker: string;
16531
+ eventTicker: string;
16532
+ title: string;
16533
+ subtitle: string;
16534
+ status: string;
16535
+ marketType: string;
16536
+ openTime: string;
16537
+ closeTime: string;
16538
+ yesBid: string;
16539
+ yesAsk: string;
16540
+ noBid: string;
16541
+ noAsk: string;
16542
+ lastPrice: string;
16543
+ volume: string;
16544
+ volume24h: string;
16545
+ openInterest: string;
16546
+ liquidity: string;
16547
+ rules: string;
16548
+ }
16549
+ interface KalshiGetMarketsOptions {
16550
+ status?: string;
16551
+ series_ticker?: string;
16552
+ event_ticker?: string;
16553
+ limit?: number;
16554
+ cursor?: string;
16555
+ }
16556
+ interface KalshiGetMarketsResult {
16557
+ markets: KalshiMarket[];
16558
+ cursor: string;
16559
+ warnings: string[];
16560
+ }
16561
+
16562
+ /**
16563
+ * Kalshi's own public trading API, keyless. Built: list/filter live prediction-market
16564
+ * contracts (getMarkets) and read one market's full detail by ticker (getMarket) — prices,
16565
+ * volume, open interest, status, close time.
16566
+ */
16567
+ interface Unit {
16568
+ /**
16569
+ * Lists Kalshi's own live prediction-market contracts off its public, keyless REST endpoint —
16570
+ * each market's ticker, title, status, open/close time, yes/no bid and ask prices (as strings,
16571
+ * e.g. "0.0570"), last price, volume, 24h volume, open interest and liquidity.
16572
+ * `options.status` filters to `open`/`closed`/`settled`/`unopened`; `options.series_ticker` or
16573
+ * `options.event_ticker` narrows to one series or event (found via a series/event browse
16574
+ * elsewhere — this provider does not wrap `/series` or `/events`); `options.limit` (1-1000,
16575
+ * default 100) and `options.cursor` (Kalshi's own opaque token, from a prior response's
16576
+ * `cursor`) page through results. This is the locator: a caller without an existing ticker
16577
+ * starts here, then reads one market's full detail with `getMarket`.
16578
+ */
16579
+ getMarkets(options?: KalshiGetMarketsOptions): Promise<KalshiGetMarketsResult>;
16580
+
16581
+ /**
16582
+ * Reads one Kalshi market's full detail by its own ticker (e.g. `"KXWCGROUPBOTTOM-26L-BRA"`,
16583
+ * found via `getMarkets`) off Kalshi's public, keyless REST endpoint — title, subtitle,
16584
+ * status, open/close time, current yes/no bid and ask prices, last price, volume, open
16585
+ * interest, liquidity and the primary rules text governing settlement. THROWS on an unknown
16586
+ * ticker (404) or a rate limit (429).
16587
+ */
16588
+ getMarket(ticker: string): Promise<KalshiMarket>;
16589
+ }
16590
+ }
16591
+
13903
16592
  declare namespace BowmarkProvider_kayak {
13904
16593
  // ── Kayak — the unit's own declarations, verbatim ──
13905
16594
  interface KayakQuery {
@@ -14411,6 +17100,14 @@ interface LegacyHomesalAvailability {
14411
17100
  slots: LegacyHomesalTimeSlot[];
14412
17101
  bookingUrl: string;
14413
17102
  }
17103
+ interface LegacyHomesalCommunity {
17104
+ name: string;
17105
+ aliases: string[];
17106
+ area: string | null;
17107
+ status: string | null;
17108
+ repSlug: string;
17109
+ bookingUrl: string;
17110
+ }
14414
17111
 
14415
17112
  /**
14416
17113
  * Reads a Legacy Homes AL community sales rep's real open tour-appointment slots off HubSpot
@@ -14423,6 +17120,13 @@ interface LegacyHomesalAvailability {
14423
17120
  * widget reads, not a form that goes into a queue.
14424
17121
  */
14425
17122
  getAvailability(repSlug: string): Promise<LegacyHomesalAvailability>;
17123
+
17124
+ /**
17125
+ * Lists every Legacy Homes AL community (name, area, sales status) paired with the rep slug
17126
+ * getAvailability needs — the entry door for a caller who only knows a community's name, not a
17127
+ * HubSpot booking link.
17128
+ */
17129
+ listCommunities(): Promise<LegacyHomesalCommunity[]>;
14426
17130
  }
14427
17131
  }
14428
17132
 
@@ -14867,6 +17571,11 @@ interface LittleWordsProjectCatalogueRow {
14867
17571
  inStock: boolean;
14868
17572
  images: string[];
14869
17573
  }
17574
+ interface LittleWordsProjectCollectionRow {
17575
+ handle: string;
17576
+ title: string;
17577
+ productsCount: number;
17578
+ }
14870
17579
  interface LittleWordsProjectCheckoutLink {
14871
17580
  url: string;
14872
17581
  variant: LittleWordsProjectVariant;
@@ -14880,6 +17589,13 @@ interface LittleWordsProjectCheckoutLink {
14880
17589
  * handoff link carrying the word.
14881
17590
  */
14882
17591
  interface Unit {
17592
+ /**
17593
+ * The entry door: reads the storefront's own published collection index — e.g. "Custom", "Best
17594
+ * Sellers" — with each one's handle and product count, so a caller holding only what a shopper
17595
+ * would say can find the handle listLittleWordsProjectProducts takes.
17596
+ */
17597
+ listLittleWordsProjectCollections(opts?: { limit?: number }): Promise<LittleWordsProjectCollectionRow[]>;
17598
+
14883
17599
  /**
14884
17600
  * Reads a Little Words Project collection's live products — e.g. "custom", "best-sellers" —
14885
17601
  * with handle, title, price range and stock.
@@ -14905,6 +17621,42 @@ interface LittleWordsProjectCheckoutLink {
14905
17621
  }
14906
17622
  }
14907
17623
 
17624
+ declare namespace BowmarkProvider_lmstudio {
17625
+ // ── LM Studio — the unit's own declarations, verbatim ──
17626
+ interface lmstudioDoc {
17627
+ url: string;
17628
+ title: string;
17629
+ body: string;
17630
+ }
17631
+ interface lmstudioDocPage {
17632
+ url: string;
17633
+ slug: string;
17634
+ }
17635
+
17636
+ /**
17637
+ * LM Studio's own documentation site (lmstudio.ai/docs) — fetch one page's title and body
17638
+ * straight off its machine-readable `.md` export, instead of parsing the rendered page by
17639
+ * hand.
17640
+ */
17641
+ interface Unit {
17642
+ /**
17643
+ * Fetches one lmstudio.ai documentation page — `url` is the page's full URL or path, e.g.
17644
+ * "https://lmstudio.ai/docs/app/mcp/deeplink" or "/docs/app/plugins/mcp". Returns its
17645
+ * canonical `url`, its `title` (the page's own `<title>` tag), and its `body` as Markdown —
17646
+ * the site's own machine-readable `.md` export of that page, not raw HTML. Only `/docs/...`
17647
+ * pages are implemented — `getDoc` throws `LmstudioInputError` for any other path.
17648
+ */
17649
+ getDoc(url: string): Promise<lmstudioDoc>;
17650
+
17651
+ /**
17652
+ * Lists every documentation page lmstudio.ai publishes under /docs — url and the page's own
17653
+ * URL slug — parsed from the site's own /docs/sitemap.xml. The sitemap carries no title; call
17654
+ * getDoc(url) for the page's real <title>.
17655
+ */
17656
+ listDocPages(): Promise<lmstudioDocPage[]>;
17657
+ }
17658
+ }
17659
+
14908
17660
  declare namespace BowmarkProvider_lonelyplanet {
14909
17661
  // ── Lonely Planet — the unit's own declarations, verbatim ──
14910
17662
  interface LonelyPlanetSearchResult {
@@ -15598,6 +18350,15 @@ interface marketplaceExtensionStats {
15598
18350
  averageRating: number | null;
15599
18351
  ratingCount: number;
15600
18352
  }
18353
+ interface marketplaceSearchResult {
18354
+ extensionId: string;
18355
+ displayName: string;
18356
+ publisherDisplayName: string;
18357
+ shortDescription: string;
18358
+ installCount: number;
18359
+ averageRating: number | null;
18360
+ ratingCount: number;
18361
+ }
15601
18362
 
15602
18363
  /**
15603
18364
  * The VS Code Marketplace — look up one extension by its publisher.name id and get its install
@@ -15613,6 +18374,15 @@ interface marketplaceExtensionStats {
15613
18374
  * published extension.
15614
18375
  */
15615
18376
  getExtensionStats(extensionId: string): Promise<marketplaceExtensionStats>;
18377
+
18378
+ /**
18379
+ * Full-text searches the VS Code Marketplace for extensions matching `query` (e.g. "python
18380
+ * linting" or "vim keybindings") — the same search the Marketplace's own search box runs — and
18381
+ * returns up to 20 results ordered by install count, most popular first. Each result carries
18382
+ * the "publisher.name" id to pass to getExtensionStats() for the latest version and
18383
+ * last-updated date.
18384
+ */
18385
+ searchExtensions(query: string): Promise<marketplaceSearchResult[]>;
15616
18386
  }
15617
18387
  }
15618
18388
 
@@ -15801,6 +18571,41 @@ interface mcpRegistryEntry {
15801
18571
  }
15802
18572
  }
15803
18573
 
18574
+ declare namespace BowmarkProvider_mcp_so {
18575
+ // ── MCP.so — the unit's own declarations, verbatim ──
18576
+ interface McpSoListing {
18577
+ slug: string;
18578
+ name: string;
18579
+ description: string;
18580
+ category: string | null;
18581
+ author: string | null;
18582
+ url: string;
18583
+ imageUrl: string | null;
18584
+ }
18585
+ interface McpSoSearchResult {
18586
+ results: McpSoListing[];
18587
+ warnings: string[];
18588
+ }
18589
+
18590
+ /**
18591
+ * The mcp.so directory of published MCP servers — substring-search listings by slug/name and
18592
+ * get each match's title, description, category, publisher and page url.
18593
+ */
18594
+ interface Unit {
18595
+ /**
18596
+ * Searches the mcp.so directory of published MCP servers. `query` is matched as a
18597
+ * case-insensitive substring against each listing's mcp.so SLUG (e.g. "firecrawl" matches
18598
+ * `mcp.so/servers/firecrawl-firecrawl` and `mcp.so/servers/firecrawl`) — not a full-text
18599
+ * search of descriptions. `limit` caps how many matches are fetched and returned (default 10,
18600
+ * max 25 — each one costs a separate request to that listing's own page). Returns `{ results,
18601
+ * warnings }`: each result carries mcp.so's own name, description, category, publisher and
18602
+ * page url for that listing, read from the page's own structured data; `warnings` names any
18603
+ * sitemap or detail page this call could not reach, and is empty on a fully healthy call.
18604
+ */
18605
+ search(query: string, limit?: number): Promise<McpSoSearchResult>;
18606
+ }
18607
+ }
18608
+
15804
18609
  declare namespace BowmarkProvider_medicalguardian {
15805
18610
  // ── Medical Guardian — the unit's own declarations, verbatim ──
15806
18611
  // Medical Guardian's OWN shapes — not a capability contract.
@@ -16576,6 +19381,32 @@ interface medicareGetPlanQuery {
16576
19381
  }
16577
19382
  }
16578
19383
 
19384
+ declare namespace BowmarkProvider_mercari {
19385
+ // ── Mercari — the unit's own declarations, verbatim ──
19386
+ interface MercariSearchResult {
19387
+ itemId: string;
19388
+ name: string;
19389
+ price: number;
19390
+ wasPrice: number | null;
19391
+ brand: string | null;
19392
+ size: string | null;
19393
+ url: string;
19394
+ }
19395
+
19396
+ /**
19397
+ * Large peer-to-peer resale marketplace (clothing, electronics, collectibles) — keyword search
19398
+ * over live listings with real, current prices.
19399
+ */
19400
+ interface Unit {
19401
+ /**
19402
+ * Runs a Mercari US keyword search the way mercari.com's own search box does and returns each
19403
+ * matching listing — item id, name, current price, the crossed-out original price when
19404
+ * discounted, brand, size and the listing's own mercari.com URL.
19405
+ */
19406
+ search(query: string | { query: string; limit?: number }): Promise<MercariSearchResult[]>;
19407
+ }
19408
+ }
19409
+
16579
19410
  declare namespace BowmarkProvider_mergify {
16580
19411
  // ── Mergify — the unit's own declarations, verbatim ──
16581
19412
  interface mergifyBatch {
@@ -17697,6 +20528,14 @@ interface NbfCartHandoff {
17697
20528
 
17698
20529
  declare namespace BowmarkProvider_newageproducts {
17699
20530
  // ── NewAge Products — the unit's own declarations, verbatim ──
20531
+ interface NewageproductsSearchResult {
20532
+ handle: string;
20533
+ name: string;
20534
+ price: string;
20535
+ priceCa: string | null;
20536
+ active: boolean;
20537
+ imageUrl: string | null;
20538
+ }
17700
20539
  interface NewageproductsVariant {
17701
20540
  /** The store's own SKU — the only stable per-variant identifier this site publishes. */
17702
20541
  sku: string;
@@ -17737,6 +20576,14 @@ interface NewageproductsProduct {
17737
20576
  * site's own reliable soft-404 shape).
17738
20577
  */
17739
20578
  getNewageproductsProduct(handle: string): Promise<NewageproductsProduct>;
20579
+
20580
+ /**
20581
+ * Runs NewAge Products' own header-search box for a keyword (e.g. "garage cabinet", "outdoor
20582
+ * kitchen") and returns up to 5 ranked matches — each row's `handle` feeds
20583
+ * getNewageproductsProduct directly. Returns an empty array for no match, which is a real
20584
+ * result, not a failure.
20585
+ */
20586
+ searchNewageproductsCatalog(query: string): Promise<NewageproductsSearchResult[]>;
17740
20587
  }
17741
20588
  }
17742
20589
 
@@ -17822,6 +20669,72 @@ interface StoreStock {
17822
20669
  }
17823
20670
  }
17824
20671
 
20672
+ declare namespace BowmarkProvider_nfa_futures_org {
20673
+ // ── NFA BASIC — the unit's own declarations, verbatim ──
20674
+ interface NfaEntity {
20675
+ nfaId: string; // "0229152"
20676
+ name: string;
20677
+ membershipStatus: string | null; // e.g. "NFA MEMBER APPROVED, SWAP DEALER REGISTERED"
20678
+ registrationTypes: string | null; // e.g. "Swap Dealer, Exempt Commodity Trading Advisor"
20679
+ hasRegulatoryActions: boolean;
20680
+ entityToken: string; // BASIC's own encrypted per-search token
20681
+ profileUrl: string; // this entity's BasicNet profile page
20682
+ }
20683
+
20684
+ /**
20685
+ * NFA's own BASIC registry — search a firm or individual by name, or look one up by NFA ID,
20686
+ * for its current membership status, registration types and whether it carries regulatory
20687
+ * actions.
20688
+ */
20689
+ interface Unit {
20690
+ /**
20691
+ * Firms NFA's own BASIC registry lists for a name query (e.g. "JPMorgan Chase Bank") — NFA ID,
20692
+ * membership status, registration types and whether NFA shows any regulatory action against
20693
+ * it. The door for a caller who only knows the firm's name.
20694
+ */
20695
+ searchFirms(name: string): Promise<NfaEntity[]>;
20696
+
20697
+ /**
20698
+ * Individuals NFA's own BASIC registry lists for a name query (e.g. "Smith") — NFA ID,
20699
+ * membership status, registration types and whether NFA shows any regulatory action against
20700
+ * them. The door for a caller who only knows the person's name.
20701
+ */
20702
+ searchIndividuals(name: string): Promise<NfaEntity[]>;
20703
+
20704
+ /**
20705
+ * One firm or individual's current NFA membership status and registration types, by NFA ID
20706
+ * (e.g. "0229152"), or by pasting a BasicNet profile URL (its "nfaid" query parameter is read
20707
+ * for you). THROWS if BASIC lists no registrant under that id.
20708
+ */
20709
+ lookupByNfaId(nfaId: string): Promise<NfaEntity>;
20710
+ }
20711
+ }
20712
+
20713
+ declare namespace BowmarkProvider_npmjs {
20714
+ // ── npm — the unit's own declarations, verbatim ──
20715
+ interface npmjsDownloads {
20716
+ package: string;
20717
+ downloads: number;
20718
+ start: string; // ISO date
20719
+ end: string; // ISO date
20720
+ }
20721
+
20722
+ /**
20723
+ * npmjs.com's own public download-counts API — real weekly/daily/monthly download totals (or a
20724
+ * custom date range) for any published npm package, scoped or not.
20725
+ */
20726
+ interface Unit {
20727
+ /**
20728
+ * The real download count for an npm package, straight off npmjs.com's own public
20729
+ * download-counts API — the same number npmjs.com's own package page shows. `period` is
20730
+ * `"last-day"`, `"last-week"` (default) or `"last-month"`, or a custom
20731
+ * `"YYYY-MM-DD:YYYY-MM-DD"` range. Works on scoped packages (`"@babel/core"`) exactly as on
20732
+ * unscoped ones.
20733
+ */
20734
+ getDownloads(packageName: string, period?: string): Promise<npmjsDownloads>;
20735
+ }
20736
+ }
20737
+
17825
20738
  declare namespace BowmarkProvider_nutrafol {
17826
20739
  // ── Nutrafol — the unit's own declarations, verbatim ──
17827
20740
  interface RootCause {
@@ -18485,6 +21398,62 @@ interface TearsheetUrl {
18485
21398
  }
18486
21399
  }
18487
21400
 
21401
+ declare namespace BowmarkProvider_pilotprotocol {
21402
+ // ── Pilot Protocol App Store — the unit's own declarations, verbatim ──
21403
+ interface PilotprotocolAppSummary {
21404
+ id: string;
21405
+ name: string;
21406
+ vendor: string;
21407
+ category: string;
21408
+ tagline: string;
21409
+ platforms: string;
21410
+ }
21411
+
21412
+ interface PilotprotocolMethod {
21413
+ name: string;
21414
+ summary: string;
21415
+ }
21416
+
21417
+ interface PilotprotocolAppDetail {
21418
+ id: string;
21419
+ name: string;
21420
+ vendor: string;
21421
+ vendorUrl: string | null;
21422
+ tagline: string;
21423
+ description: string;
21424
+ category: string;
21425
+ version: string;
21426
+ license: string | null;
21427
+ runtime: string | null;
21428
+ minPilotVersion: string | null;
21429
+ sourceUrl: string | null;
21430
+ installCommand: string | null;
21431
+ permissions: string[];
21432
+ methods: PilotprotocolMethod[];
21433
+ }
21434
+
21435
+ /**
21436
+ * Pilot Protocol's own app store — a directory of installable agent capabilities (30+ apps:
21437
+ * databases, comms, browser automation, payments, …). listApps returns the whole catalog (id,
21438
+ * name, vendor, category, tagline); getApp reads one app's detail page (version, license,
21439
+ * runtime, permissions, methods) by id.
21440
+ */
21441
+ interface Unit {
21442
+ /**
21443
+ * Lists every app in Pilot Protocol's app store — id, name, vendor, category, one-line tagline
21444
+ * and supported platforms for each.
21445
+ */
21446
+ listApps(): Promise<PilotprotocolAppSummary[]>;
21447
+
21448
+ /**
21449
+ * Reads one app's detail page by id (e.g. "io.pilot.bowmark", from listApps) — vendor,
21450
+ * tagline, full description, category, version, license, runtime, minimum Pilot version,
21451
+ * source link, install command, granted permissions and its method list.
21452
+ */
21453
+ getApp(id: string): Promise<PilotprotocolAppDetail>;
21454
+ }
21455
+ }
21456
+
18488
21457
  declare namespace BowmarkProvider_pirateship {
18489
21458
  // ── Pirate Ship — the unit's own declarations, verbatim ──
18490
21459
  interface PirateshipDimensions {
@@ -18849,6 +21818,79 @@ interface PizzahutDealsForRender {
18849
21818
  }
18850
21819
  }
18851
21820
 
21821
+ declare namespace BowmarkProvider_platform_claude_com {
21822
+ // ── Claude Developer Platform Docs — the unit's own declarations, verbatim ──
21823
+ interface platform_claude_comDoc {
21824
+ url: string;
21825
+ title: string | null;
21826
+ description: string | null;
21827
+ body: string;
21828
+ }
21829
+ interface platform_claude_comDocLink {
21830
+ title: string;
21831
+ url: string;
21832
+ description: string | null;
21833
+ }
21834
+
21835
+ /**
21836
+ * Reads platform.claude.com's own developer documentation — one /docs page by URL, or the full
21837
+ * page index — as clean markdown, the site's own machine-readable source rather than a scrape.
21838
+ */
21839
+ interface Unit {
21840
+ /**
21841
+ * Reads one /docs page of platform.claude.com's own documentation by URL or path (e.g.
21842
+ * "/docs/en/about-claude/pricing" or the full https:// url) and returns its title, description
21843
+ * and body as clean markdown — the site's own .md source, not a whole-page scrape. THROWS if
21844
+ * the page does not exist (404) or names a host other than platform.claude.com.
21845
+ */
21846
+ getDocPage(url: string): Promise<platform_claude_comDoc>;
21847
+
21848
+ /**
21849
+ * Lists every English /docs page platform.claude.com publishes — title, its own .md source
21850
+ * url, and a one-line description where the site gives one — parsed from the site's own
21851
+ * /llms.txt index.
21852
+ */
21853
+ listDocPages(): Promise<platform_claude_comDocLink[]>;
21854
+ }
21855
+ }
21856
+
21857
+ declare namespace BowmarkProvider_polymarket {
21858
+ // ── Polymarket — the unit's own declarations, verbatim ──
21859
+ interface polymarketMarket {
21860
+ slug: string;
21861
+ question: string;
21862
+ outcomes: string[];
21863
+ outcomePrices: number[];
21864
+ volume: number;
21865
+ liquidity: number | null;
21866
+ endDate: string | null;
21867
+ active: boolean;
21868
+ closed: boolean;
21869
+ }
21870
+
21871
+ /**
21872
+ * Polymarket's own prediction markets — search by keyword or browse the newest, and read one
21873
+ * market's question, live outcome prices, volume and status by slug.
21874
+ */
21875
+ interface Unit {
21876
+ /**
21877
+ * Searches Polymarket's own markets by keyword, e.g. "election" or "bitcoin" — the same search
21878
+ * its own site uses. Omit `query` to list the newest active markets instead. Each row carries
21879
+ * the market's slug (what `getMarket` takes), its question, its outcomes and their current
21880
+ * prices (0-1 implied probabilities), volume, liquidity (when the door carries it) and whether
21881
+ * it is still active/open. `limit` caps how many rows come back (default 20, capped at 100).
21882
+ */
21883
+ search(query?: string, limit?: number): Promise<polymarketMarket[]>;
21884
+
21885
+ /**
21886
+ * Reads one Polymarket market by its slug (the id `search` returns, e.g.
21887
+ * "xi-jinping-out-before-2027") — its question, outcomes, current outcome prices, volume,
21888
+ * liquidity, end date and open/closed status, straight from the site's own API.
21889
+ */
21890
+ getMarket(slug: string): Promise<polymarketMarket>;
21891
+ }
21892
+ }
21893
+
18852
21894
  declare namespace BowmarkProvider_poshmark {
18853
21895
  // ── Poshmark — the unit's own declarations, verbatim ──
18854
21896
  interface PoshmarkSupportArticle {
@@ -20376,6 +23418,21 @@ interface RoofmaxxCostEstimate {
20376
23418
  }
20377
23419
  }
20378
23420
 
23421
+ declare namespace BowmarkProvider_rover {
23422
+ // ── Rover.com — the unit's own declarations, verbatim ──
23423
+ 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; }
23424
+
23425
+ /** Rover's live overnight-boarding sitter search for a city and specific dates. */
23426
+ interface Unit {
23427
+ /**
23428
+ * Searches Rover's live overnight-boarding results for a city and increasing ISO start/end
23429
+ * dates. Returns each sitter's starting per-night rate for that stay (before Rover's ~10-11%
23430
+ * service fee and before per-pet pricing), rating, review count and distance.
23431
+ */
23432
+ searchBoarding(args: { location: string; startDate: string; endDate: string }): Promise<RoverBoardingRow[]>;
23433
+ }
23434
+ }
23435
+
20379
23436
  declare namespace BowmarkProvider_rvshare {
20380
23437
  // ── RVshare — the unit's own declarations, verbatim ──
20381
23438
  interface RvshareListing {
@@ -20476,6 +23533,45 @@ interface SaatvaRecommendation {
20476
23533
  }
20477
23534
  }
20478
23535
 
23536
+ declare namespace BowmarkProvider_safetywing {
23537
+ // ── SafetyWing — the unit's own declarations, verbatim ──
23538
+ type Plan = "essential" | "complete";
23539
+ type Addon = "sportsCoverage" | "usaCoverage" | "itemInsurance";
23540
+ interface GetSafetywingQuoteArgs {
23541
+ plan: Plan;
23542
+ age: number;
23543
+ startDate: string;
23544
+ durationWeeks: 4 | 52;
23545
+ addons?: Addon[];
23546
+ }
23547
+ interface safetywingQuote {
23548
+ plan: Plan;
23549
+ age: number;
23550
+ startDate: string;
23551
+ durationWeeks: 4 | 52;
23552
+ priceDaily: { amount: number; currency: string };
23553
+ priceTotal: { amount: number; currency: string };
23554
+ priceMonthly: { amount: number; currency: string } | null;
23555
+ priceYearly: { amount: number; currency: string } | null;
23556
+ addonPrices: Array<{ addon: Addon; priceDaily: { amount: number; currency: string }; priceTotal: { amount: number; currency: string } }>;
23557
+ purchaseUrl: string;
23558
+ }
23559
+
23560
+ /**
23561
+ * Runs SafetyWing's own Nomad Insurance quote calculator for a real plan/age/date/addon
23562
+ * combination and returns the live price.
23563
+ */
23564
+ interface Unit {
23565
+ /**
23566
+ * Runs SafetyWing's own Nomad Insurance quote calculator (safetywing.com/nomad-insurance) for
23567
+ * a real plan, age, coverage start date, duration and add-on selection, and returns the live
23568
+ * computed price with a per-addon breakdown, plus SafetyWing's own signup/purchase handoff URL
23569
+ * for the priced product.
23570
+ */
23571
+ getQuote(args: GetSafetywingQuoteArgs): Promise<safetywingQuote>;
23572
+ }
23573
+ }
23574
+
20479
23575
  declare namespace BowmarkProvider_saltandstone {
20480
23576
  // ── Salt & Stone — the unit's own declarations, verbatim ──
20481
23577
  // Salt & Stone's OWN shapes — not a capability contract.
@@ -21447,6 +24543,18 @@ interface SmitherySearchResult {
21447
24543
 
21448
24544
  declare namespace BowmarkProvider_solostove {
21449
24545
  // ── Solo Stove — the unit's own declarations, verbatim ──
24546
+ interface SolostoveBundleSummary {
24547
+ bundleId: string;
24548
+ name: string;
24549
+ price: number;
24550
+ currency: string;
24551
+ orderable: boolean;
24552
+ }
24553
+ interface SolostoveBundleSearch {
24554
+ query: string;
24555
+ bundles: SolostoveBundleSummary[];
24556
+ total: number;
24557
+ }
21450
24558
  interface SolostoveBundleComponent {
21451
24559
  sku: string;
21452
24560
  name: string;
@@ -21465,21 +24573,32 @@ interface SolostoveBundleCheck {
21465
24573
  }
21466
24574
 
21467
24575
  /**
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.
24576
+ * Solo Stove's bundle-builder check flow — search bundles by what a shopper would type (e.g.
24577
+ * "pizza bundle"), then check one bundle's own product id (fire pit + accessories, e.g. the
24578
+ * Dream Backyard Bundle) for its combined price and whether the exact combination is orderable
24579
+ * right now, broken down per component so a caller can see WHICH piece is out of stock when it
24580
+ * is not.
21472
24581
  */
21473
24582
  interface Unit {
24583
+ /**
24584
+ * Searches Solo Stove's own storefront search for BUNDLE products (fire pit + accessories sold
24585
+ * as one combination) by what a shopper would type, e.g. "pizza bundle" or "Dream Backyard".
24586
+ * Returns each match's own bundleId — feed it straight into checkBundle. Filters out
24587
+ * non-bundle products the same search also matches (a single-SKU product that happens to be
24588
+ * named "…Bundle" is not this site's bundle TYPE). An unmatched query returns an empty list,
24589
+ * not an error.
24590
+ */
24591
+ listBundles(query: string): Promise<SolostoveBundleSearch>;
24592
+
21474
24593
  /**
21475
24594
  * 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.
24595
+ * own product id — the `+`-joined component SKUs from the bundle's product page URL, or a
24596
+ * bundleId from listBundles. Returns the combined price and whether the site will sell the
24597
+ * EXACT combination right now, plus a per-component breakdown (each component's own price and
24598
+ * stock) so a caller can see which single component made the bundle unorderable. THROWS when
24599
+ * the bundle id does not exist. If you don't already have a bundle id, use listBundles to find
24600
+ * one, or the Dream Backyard Bundle's — "SS27+SS22+WINDCHILL30-CHARCOAL-17AH" — to check the
24601
+ * flow rather than asking the caller for one first.
21483
24602
  */
21484
24603
  checkBundle(args: { bundleId: string }): Promise<SolostoveBundleCheck>;
21485
24604
  }
@@ -23021,6 +26140,7 @@ interface thezebraAutoDriver {
23021
26140
  ageFirstLicensed?: number // default 16 when omitted
23022
26141
  violations?: { accidents: number, claims: number, tickets: number } // default a clean record
23023
26142
  occupation?: string // default "OTHER" — the only two confirmed-valid values are "OTHER" and "ENGINEER"
26143
+ residenceOwnership?: 0 | 1 | 2 | 3 // own home/condo/rent/other; default 3 ("Other")
23024
26144
  }
23025
26145
 
23026
26146
  interface thezebraAutoVehicle {
@@ -23035,6 +26155,8 @@ interface thezebraAutoQuotesQuery {
23035
26155
  state: string // 2-letter postal code
23036
26156
  zip: string // 5 digits
23037
26157
  county: string // the county the ZIP sits in — the gateway validates server-side
26158
+ currentlyInsured?: boolean // default true
26159
+ userPurchaseTimeframe?: "TODAY" | "FUTURE" // default "TODAY"
23038
26160
  }
23039
26161
 
23040
26162
  interface thezebraAutoQuote {
@@ -23236,23 +26358,43 @@ interface thezebraAutoQuotes {
23236
26358
  * carrier's own monthly and six-month premium, deductible, and the coverage it priced, as The
23237
26359
  * Zebra's auto quote funnel prices them. This is a priced offer for the person asking, NOT the
23238
26360
  * 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
26361
+ * `lastName`, `dob` ISO YYYY-MM-DD, `email`, a real `employment` and `currentCarrier` —
26362
+ * REQUIRED, see their own doc comments, never invented, same rule as a quote identity — and
26363
+ * optionally
26364
+ * `ageFirstLicensed`/`violations`/`occupation`/`residenceOwnership`/`creditScore`/`education`/`hasMilitaryAffiliation`/`insuredLength`,
26365
+ * each defaulting to a clean-record, non-committal placeholder when omitted), one `vehicle`
26366
+ * (`year`, `make`, `model`, and a real `garagingAddress` REQUIRED, never invented, same rule
26367
+ * as a quote identity a model The Zebra does not rate THROWS naming the URL it tried), the
26368
+ * 2-letter `state`, a 5-digit `zip`, `county` (the county the ZIP sits in — The Zebra
26369
+ * validates it server-side and a missing or wrong county is bounced), and optionally
26370
+ * `userPurchaseTimeframe`/`currentBodilyInjuryPerPerson`/`currentBodilyInjuryPerAccident`
26371
+ * (`currentlyInsured` defaults `true` and `false` is refused — see its own doc comment).
26372
+ * **Measured 2026-09-05: `driver.employment` and `driver.currentCarrier` are REQUIRED because
26373
+ * the funnel's own `/car/manual/drivers/details/` page will not complete without a real answer
26374
+ * to both, and neither has an honest default** a call omitting either now throws immediately
26375
+ * rather than discovering the same dead end after a full, ~60-90s funnel walk. **The write
26376
+ * always binds** the GraphQL gateway at `graphql-gateway.production.thezebra.com` accepts
26377
+ * the seed and returns 200. **AS OF 2026-09-05 all six of the funnel's pages are answered and
26378
+ * the results route is REACHED** — the last gate was never a missing mutation field:
26379
+ * `/car/manual/coverage-selection/` computes personalized coverage packages on a THIRD backend
26380
+ * (`coverage-service.production.thezebra.com`) and only unlocks the redirect once its own
26381
+ * "Show quotes at this coverage" button PATCHes a chosen package, which this function now
26382
+ * drives (the "Best" tier — the site's own recommended default). See the write site's own
26383
+ * comment for the measured chain. **A separate, unresolved question**: with the funnel fully
26384
+ * answered, the results page itself sometimes renders a legitimate-looking "we checked with
26385
+ * over 30 insurers and were unable to get any quotes for you … most insurance companies aren't
26386
+ * selling new policies in your area due to temporary restrictions" state instead of quote
26387
+ * cards — reproduced on two (address, zip, county) pairs 200 miles apart with the same
26388
+ * placeholder identity, so it does not look address-specific. Whether that is genuine carrier
26389
+ * unavailability or a soft decline on this function's synthetic/proxied traffic is not yet
26390
+ * determined; `agents/richard/problems/thezebra-getautoquotes-broken.md` carries the evidence.
26391
+ * This function does NOT throw on that state — an empty `quotes` array is what it looks like,
26392
+ * and `parseAutoResults` already treats a page with no `results-card_q2b_*` elements as a
26393
+ * legitimate empty answer rather than an error, which is the correct call for a genuine
26394
+ * carrier-side "nothing to quote" as well as this one. The function throws only when the
26395
+ * funnel itself refuses to reach the coverage-selection or results routes, with a message
26396
+ * naming the redirect target and, where readable, the funnel's own list of which pages are
26397
+ * still unanswered. **`advertisedCarriers` is not a quote list and must never be read as
23256
26398
  * one**: the results page would carry paid carrier placements alongside real offers, separated
23257
26399
  * by `data-cy="results-card_ad_<carrier>"` (ad) versus `data-cy="results-card_q2b_<carrier>"`
23258
26400
  * (real offer), and the advertised names are returned in their own field with no price
@@ -23471,12 +26613,30 @@ interface topviewtixPackageDetails {
23471
26613
  availableUntil: string | null;
23472
26614
  }
23473
26615
 
26616
+ interface topviewtixPackageSummary {
26617
+ id: number;
26618
+ slug: string;
26619
+ name: string;
26620
+ adultsPrice: number | null;
26621
+ kidsPrice: number | null;
26622
+ url: string;
26623
+ }
26624
+
23474
26625
  /**
23475
26626
  * TopView's NYC hop-on-hop-off bus, Statue of Liberty cruise and bike/walking tour packages —
23476
26627
  * getPackageDetails reads one package's live price and its own real-time booking calendar
23477
26628
  * (available/blocked/sold-out dates) off topviewtix.com/new-york/<slug>.
23478
26629
  */
23479
26630
  interface Unit {
26631
+ /**
26632
+ * Lists every TopView tour package currently sold in New York — id, name, slug, adult/kid
26633
+ * price and url — straight off the same package-card grid the site's own home page renders.
26634
+ * The natural entry point before getPackageDetails: a caller who only knows what a person
26635
+ * would SAY ("the hop on hop off bus", "a downtown tour") reads this first and picks the
26636
+ * `slug` to look one up in full.
26637
+ */
26638
+ listPackages(): Promise<topviewtixPackageSummary[]>;
26639
+
23480
26640
  /**
23481
26641
  * Reads one TopView tour package in full — name, description, adult/kid price, and the site's
23482
26642
  * OWN live booking calendar (which dates are open, blocked, or sold out, and how far out the
@@ -23801,6 +26961,63 @@ type TwiddyQuote =
23801
26961
  }
23802
26962
  }
23803
26963
 
26964
+ declare namespace BowmarkProvider_uhc_smallbusiness {
26965
+ // ── UnitedHealthcare Small Business — the unit's own declarations, verbatim ──
26966
+ interface UhcSmallbusinessPlan {
26967
+ planCode: string;
26968
+ planName: string;
26969
+ fullName: string;
26970
+ planMarketType: "LEVEL_FUNDED" | "FULLY_INSURED";
26971
+ metalLevel: string | null;
26972
+ planType: string | null;
26973
+ legalEntity: string | null;
26974
+ perEmployeeMonthlyPremium: number;
26975
+ totalMonthlyPremium: number;
26976
+ deductibleIndividual: string | null;
26977
+ deductibleFamily: string | null;
26978
+ outOfPocketIndividual: string | null;
26979
+ outOfPocketFamily: string | null;
26980
+ primaryCareVisit: string | null;
26981
+ findYourDoctorUrl: string | null;
26982
+ }
26983
+
26984
+ interface UhcSmallbusinessQuote {
26985
+ zip: string;
26986
+ state: string;
26987
+ county: string;
26988
+ effectiveDate: string;
26989
+ employerContributionShare: number;
26990
+ plans: UhcSmallbusinessPlan[];
26991
+ warnings: string[];
26992
+ }
26993
+
26994
+ /**
26995
+ * UnitedHealthcare's small-business store — real level-funded and fully-insured group health
26996
+ * plan premiums for a ZIP and employee count, no sign-in required.
26997
+ */
26998
+ interface Unit {
26999
+ /**
27000
+ * Real level-funded and fully-insured small-group health plan premiums for a ZIP code and
27001
+ * employee count — the same 'Explore Top Selling <State> Plans' list smallbusiness.uhc.com
27002
+ * shows after its anonymous 'Shop Plans' form, no sign-in, no agent contact and no
27003
+ * email-verification round-trip required. Each of the ~20 returned plans carries UHC's own
27004
+ * plan code, market type (level-funded vs. fully-insured), metal tier where ACA-rated,
27005
+ * deductible, out-of-pocket max, primary-care copay and a per-employee AND a total-group
27006
+ * monthly premium. **The premium is UHC's own estimate for a 40-year-old male** — its page
27007
+ * says so in as many words ('The prices provided are estimates based on all employees being
27008
+ * 40-year-old males') — because pricing a real census (each employee's actual age and sex)
27009
+ * requires the multi-step 'Get Plan Recommendations' questionnaire this function does not
27010
+ * walk; a caller wanting THAT number has to go further than an anonymous ZIP-in quote-out read
27011
+ * allows. This is still the number a business owner sees as their first real quote, and it is
27012
+ * the number the small-group renewal story (14% median 2027 hike) is about. Takes a 5-digit
27013
+ * ZIP and a positive employee count; the site rejects neither with an error page, but a ZIP
27014
+ * with no small-group market (rural, out of UHC's book) can come back with an empty `plans`
27015
+ * array, and that is a real answer, not a failure.
27016
+ */
27017
+ getGroupHealthQuote(zip: string, employeeCount: number): Promise<UhcSmallbusinessQuote>;
27018
+ }
27019
+ }
27020
+
23804
27021
  declare namespace BowmarkProvider_ulrichlifestyle {
23805
27022
  // ── Ulrich Lifestyle Structures — the unit's own declarations, verbatim ──
23806
27023
  // Ulrich Lifestyle Structures' OWN shapes — not a capability contract.
@@ -24448,6 +27665,43 @@ interface VoluspaQuizIntro {
24448
27665
  }
24449
27666
  }
24450
27667
 
27668
+ declare namespace BowmarkProvider_vscode {
27669
+ // ── VS Code Documentation — the unit's own declarations, verbatim ──
27670
+ interface VscodeDoc {
27671
+ url: string;
27672
+ title: string;
27673
+ description: string;
27674
+ text: string;
27675
+ warnings: string[];
27676
+ }
27677
+ interface VscodeDocLink {
27678
+ title: string;
27679
+ url: string;
27680
+ description: string | null;
27681
+ }
27682
+
27683
+ /**
27684
+ * VS Code's own documentation site (code.visualstudio.com) — reads one doc page's structured
27685
+ * content (title, description, flattened body text) directly from its server-rendered HTML,
27686
+ * given its URL, or lists every doc page it publishes.
27687
+ */
27688
+ interface Unit {
27689
+ /**
27690
+ * Returns one code.visualstudio.com doc page by its URL — title, description, and the
27691
+ * flattened body text in document order. THROWS on a missing/invalid/off-site url and on a
27692
+ * transport failure, so a caller can distinguish "unreachable" from "empty".
27693
+ */
27694
+ getDoc(url: string): Promise<VscodeDoc>;
27695
+
27696
+ /**
27697
+ * Lists every doc page code.visualstudio.com publishes — title, its own page url, and a
27698
+ * one-line description where the site gives one — parsed from the site's own /llms.txt index.
27699
+ * Every url returned is one getDoc() can read.
27700
+ */
27701
+ listDocPages(): Promise<VscodeDocLink[]>;
27702
+ }
27703
+ }
27704
+
24451
27705
  declare namespace BowmarkProvider_walkerhughes {
24452
27706
  // ── WalkerHughes Insurance — the unit's own declarations, verbatim ──
24453
27707
  // WalkerHughes' OWN shapes — not a capability contract.
@@ -24820,16 +28074,18 @@ interface XpressWaitTime {
24820
28074
  }
24821
28075
 
24822
28076
  /**
24823
- * Reads Xpress Wellness Urgent Care's clinic roster and each clinic's live healow wait-time /
24824
- * check-in widget — no key, no browser.
28077
+ * Reads the Xpress Wellness / Integrity Urgent Care clinic roster and each clinic's live
28078
+ * healow wait-time / check-in widget — no key, no browser.
24825
28079
  */
24826
28080
  interface Unit {
24827
28081
  /**
24828
- * Lists every Xpress Wellness Urgent Care clinic40 locations across Oklahoma, Kansas and
24829
- * one Texas site with name, address, phone, the clinic's own detail page and the healow
24830
- * check-in widget URL + facility_id. Takes nothing. The facilityId it returns is what
24831
- * checkWaitTime takes. THROWS rather than returning [] when the roster page answers with no
24832
- * clinics the roster is never honestly empty.
28082
+ * Lists Xpress Wellness / Integrity Urgent Care clinicsrecovered by confirming each healow
28083
+ * facility_id's own brand, then matching it against the site's current roster for a name and
28084
+ * address with name, address, the clinic's own detail page when matched and the healow
28085
+ * check-in widget URL + facility_id. Takes nothing. phone is always null (neither source
28086
+ * publishes one any more). The facilityId it returns is what checkWaitTime takes. THROWS
28087
+ * rather than returning [] when no facility_id resolves to a confirmed clinic — the roster is
28088
+ * never honestly empty.
24833
28089
  */
24834
28090
  listFacilities(): Promise<XpressFacility[]>;
24835
28091
 
@@ -24845,6 +28101,68 @@ interface XpressWaitTime {
24845
28101
  }
24846
28102
  }
24847
28103
 
28104
+ declare namespace BowmarkProvider_ycombinator {
28105
+ // ── Y Combinator — the unit's own declarations, verbatim ──
28106
+ interface YCombinatorArticle {
28107
+ id: number | null;
28108
+ slug: string;
28109
+ title: string;
28110
+ author: string | null;
28111
+ description: string;
28112
+ content: string;
28113
+ categories: string[];
28114
+ youtubeId: string | null;
28115
+ transcript: string | null;
28116
+ url: string;
28117
+ warnings: string[];
28118
+ }
28119
+ interface YCombinatorBlogPost {
28120
+ title: string;
28121
+ author: string | null;
28122
+ publishedAt: string | null;
28123
+ text: string;
28124
+ url: string;
28125
+ warnings: string[];
28126
+ }
28127
+ interface YCombinatorSearchHit {
28128
+ title: string;
28129
+ url: string;
28130
+ category: string | null;
28131
+ excerpt: string;
28132
+ }
28133
+
28134
+ /**
28135
+ * Y Combinator's own site (ycombinator.com) — reads one Startup Library article or blog post
28136
+ * by its URL/slug (application and interview guidance, fundraising, pitching, growth), and
28137
+ * full-text searches the library with the site's own public search key.
28138
+ */
28139
+ interface Unit {
28140
+ /**
28141
+ * Returns one YC Startup Library article by its /library/<slug> URL or bare slug — title,
28142
+ * author, description, markdown content, categories, and (for a video talk) the YouTube id and
28143
+ * transcript. Covers application and interview guidance, pitching, fundraising and growth.
28144
+ * THROWS on a missing/invalid/off-site url and on a dead or renamed slug, so a caller can
28145
+ * distinguish "no such article" from "empty". Example: getArticle("6h-startup-pricing-101").
28146
+ */
28147
+ getArticle(url: string): Promise<YCombinatorArticle>;
28148
+
28149
+ /**
28150
+ * Returns one YC blog post by its /blog/<slug>/ URL or bare slug — title, author, publish
28151
+ * date, and the flattened body text in document order. THROWS on a missing/invalid/off-site
28152
+ * url and on a dead or renamed slug. Example: getBlogPost("tips-for-yc-interviews").
28153
+ */
28154
+ getBlogPost(url: string): Promise<YCombinatorBlogPost>;
28155
+
28156
+ /**
28157
+ * Full-text searches the YC Startup Library using the site's own public search key — title,
28158
+ * url, category breadcrumb and a body excerpt per hit, up to 10. Returns an empty array on
28159
+ * zero matches; THROWS on an empty query or a transport failure. Example: search("how to pitch
28160
+ * your startup").
28161
+ */
28162
+ search(query: string): Promise<YCombinatorSearchHit[]>;
28163
+ }
28164
+ }
28165
+
24848
28166
  declare namespace BowmarkProvider_yelp {
24849
28167
  // ── Yelp — the unit's own declarations, verbatim ──
24850
28168
  interface YelpSearchArgs {
@@ -25013,6 +28331,21 @@ interface YoutubeTranscript {
25013
28331
 
25014
28332
  declare namespace BowmarkProvider_zennioptical {
25015
28333
  // ── Zenni Optical — the unit's own declarations, verbatim ──
28334
+ interface ZenniFrameSummary {
28335
+ sku: string;
28336
+ name: string;
28337
+ color: string;
28338
+ price: number;
28339
+ salePrice: number;
28340
+ inStock: boolean;
28341
+ shape: string | null;
28342
+ material: string | null;
28343
+ url: string;
28344
+ }
28345
+ interface ZenniFrameSearch {
28346
+ frames: ZenniFrameSummary[];
28347
+ total: number;
28348
+ }
25016
28349
  interface ZenniFrame {
25017
28350
  sku: string;
25018
28351
  name: string;
@@ -25044,6 +28377,13 @@ interface ZenniLensPriceRow {
25044
28377
  * site's own configurator, and checks live per-SKU stock.
25045
28378
  */
25046
28379
  interface Unit {
28380
+ /**
28381
+ * Searches Zenni's own storefront catalog for what a shopper would type ("round tortoise",
28382
+ * "titanium rimless") and returns matching frames with the sku every other function here
28383
+ * takes. The way in when you don't already hold a sku.
28384
+ */
28385
+ searchFrames(query: string, limit?: number): Promise<ZenniFrameSearch>;
28386
+
25047
28387
  /**
25048
28388
  * Reads one frame's name, base price and per-color-variant price straight off the product
25049
28389
  * page's own embedded data. No rendering.
@@ -25882,65 +29222,101 @@ interface BowmarkProviders {
25882
29222
  aa: BowmarkProvider_aa.Unit;
25883
29223
  aauto: BowmarkProvider_aauto.Unit;
25884
29224
  abercrombie: BowmarkProvider_abercrombie.Unit;
29225
+ achosahw: BowmarkProvider_achosahw.Unit;
29226
+ acqualinaresort: BowmarkProvider_acqualinaresort.Unit;
25885
29227
  aiper: BowmarkProvider_aiper.Unit;
25886
29228
  ajmadison: BowmarkProvider_ajmadison.Unit;
25887
29229
  allied: BowmarkProvider_allied.Unit;
25888
29230
  alphavantage: BowmarkProvider_alphavantage.Unit;
29231
+ americandreamvacations: BowmarkProvider_americandreamvacations.Unit;
25889
29232
  americanstandard: BowmarkProvider_americanstandard.Unit;
29233
+ americanvisionwindows: BowmarkProvider_americanvisionwindows.Unit;
25890
29234
  amramp: BowmarkProvider_amramp.Unit;
25891
29235
  ancientnutrition: BowmarkProvider_ancientnutrition.Unit;
25892
29236
  andersenwindows: BowmarkProvider_andersenwindows.Unit;
29237
+ andstr: BowmarkProvider_andstr.Unit;
29238
+ anthropic_com: BowmarkProvider_anthropic_com.Unit;
29239
+ antunes: BowmarkProvider_antunes.Unit;
29240
+ aosom: BowmarkProvider_aosom.Unit;
25893
29241
  apple: BowmarkProvider_apple.Unit;
25894
29242
  aquaphoenixsci: BowmarkProvider_aquaphoenixsci.Unit;
29243
+ arajet: BowmarkProvider_arajet.Unit;
25895
29244
  archipelago: BowmarkProvider_archipelago.Unit;
29245
+ artpix3d: BowmarkProvider_artpix3d.Unit;
25896
29246
  ashleyfurniture: BowmarkProvider_ashleyfurniture.Unit;
25897
29247
  asppoolco: BowmarkProvider_asppoolco.Unit;
25898
29248
  atlasoceanvoyages: BowmarkProvider_atlasoceanvoyages.Unit;
25899
29249
  atlasseniorliving: BowmarkProvider_atlasseniorliving.Unit;
29250
+ audibel: BowmarkProvider_audibel.Unit;
25900
29251
  autocamp: BowmarkProvider_autocamp.Unit;
25901
29252
  avantstay: BowmarkProvider_avantstay.Unit;
25902
29253
  avis: BowmarkProvider_avis.Unit;
29254
+ ayreshotels: BowmarkProvider_ayreshotels.Unit;
25903
29255
  azazie: BowmarkProvider_azazie.Unit;
25904
29256
  azure: BowmarkProvider_azure.Unit;
25905
29257
  bankmycell: BowmarkProvider_bankmycell.Unit;
25906
29258
  barletta: BowmarkProvider_barletta.Unit;
29259
+ barnesfoundation: BowmarkProvider_barnesfoundation.Unit;
25907
29260
  baublebar: BowmarkProvider_baublebar.Unit;
25908
29261
  bcparkscamping: BowmarkProvider_bcparkscamping.Unit;
25909
29262
  beatthebomb: BowmarkProvider_beatthebomb.Unit;
29263
+ bellwethercoffee: BowmarkProvider_bellwethercoffee.Unit;
29264
+ beltservice: BowmarkProvider_beltservice.Unit;
29265
+ benelliusa: BowmarkProvider_benelliusa.Unit;
25910
29266
  bennington: BowmarkProvider_bennington.Unit;
25911
29267
  bestbuy: BowmarkProvider_bestbuy.Unit;
25912
29268
  bhphoto: BowmarkProvider_bhphoto.Unit;
29269
+ bigairusa: BowmarkProvider_bigairusa.Unit;
25913
29270
  bigjoeforklifts: BowmarkProvider_bigjoeforklifts.Unit;
25914
29271
  bigrentz: BowmarkProvider_bigrentz.Unit;
25915
29272
  bing: BowmarkProvider_bing.Unit;
29273
+ bishops: BowmarkProvider_bishops.Unit;
25916
29274
  blackstoneproducts: BowmarkProvider_blackstoneproducts.Unit;
25917
29275
  blenderseyewear: BowmarkProvider_blenderseyewear.Unit;
25918
29276
  bluehaven: BowmarkProvider_bluehaven.Unit;
25919
29277
  bluesignal: BowmarkProvider_bluesignal.Unit;
25920
29278
  bmwusa: BowmarkProvider_bmwusa.Unit;
29279
+ boglewinery: BowmarkProvider_boglewinery.Unit;
25921
29280
  bollandbranch: BowmarkProvider_bollandbranch.Unit;
29281
+ borsheims: BowmarkProvider_borsheims.Unit;
29282
+ boxlunch: BowmarkProvider_boxlunch.Unit;
25922
29283
  boydsleep: BowmarkProvider_boydsleep.Unit;
29284
+ brius: BowmarkProvider_brius.Unit;
25923
29285
  brixton: BowmarkProvider_brixton.Unit;
25924
29286
  bulletproof: BowmarkProvider_bulletproof.Unit;
29287
+ bungalow: BowmarkProvider_bungalow.Unit;
25925
29288
  bykoket: BowmarkProvider_bykoket.Unit;
25926
29289
  byltbasics: BowmarkProvider_byltbasics.Unit;
29290
+ cabinsforyou: BowmarkProvider_cabinsforyou.Unit;
29291
+ caliberhealth: BowmarkProvider_caliberhealth.Unit;
25927
29292
  califloors: BowmarkProvider_califloors.Unit;
25928
29293
  camelcamelcamel: BowmarkProvider_camelcamelcamel.Unit;
25929
29294
  cancer: BowmarkProvider_cancer.Unit;
25930
29295
  capitalbrands: BowmarkProvider_capitalbrands.Unit;
25931
29296
  caraway: BowmarkProvider_caraway.Unit;
25932
29297
  carepatrol: BowmarkProvider_carepatrol.Unit;
29298
+ carmelrealtycompany: BowmarkProvider_carmelrealtycompany.Unit;
29299
+ carolefabrics: BowmarkProvider_carolefabrics.Unit;
29300
+ carpetlandusa: BowmarkProvider_carpetlandusa.Unit;
25933
29301
  cars: BowmarkProvider_cars.Unit;
29302
+ carusohomes: BowmarkProvider_carusohomes.Unit;
29303
+ casadragones: BowmarkProvider_casadragones.Unit;
29304
+ cbhhomes: BowmarkProvider_cbhhomes.Unit;
29305
+ champxpress: BowmarkProvider_champxpress.Unit;
25934
29306
  chantecaille: BowmarkProvider_chantecaille.Unit;
25935
29307
  cheapflights: BowmarkProvider_cheapflights.Unit;
25936
29308
  chesmar: BowmarkProvider_chesmar.Unit;
29309
+ chipotle: BowmarkProvider_chipotle.Unit;
25937
29310
  chriscraft: BowmarkProvider_chriscraft.Unit;
25938
29311
  classichome: BowmarkProvider_classichome.Unit;
25939
29312
  classpass: BowmarkProvider_classpass.Unit;
29313
+ claude_com: BowmarkProvider_claude_com.Unit;
29314
+ claude_support: BowmarkProvider_claude_support.Unit;
25940
29315
  claudemarketplaces_com: BowmarkProvider_claudemarketplaces_com.Unit;
25941
29316
  cleanairlawncare: BowmarkProvider_cleanairlawncare.Unit;
25942
29317
  cloudflare: BowmarkProvider_cloudflare.Unit;
25943
29318
  clubchampion: BowmarkProvider_clubchampion.Unit;
29319
+ code_claude_com: BowmarkProvider_code_claude_com.Unit;
25944
29320
  consultnet: BowmarkProvider_consultnet.Unit;
25945
29321
  couponfollow: BowmarkProvider_couponfollow.Unit;
25946
29322
  cruiselakegeneva: BowmarkProvider_cruiselakegeneva.Unit;
@@ -25950,6 +29326,7 @@ interface BowmarkProviders {
25950
29326
  davidsonhomes: BowmarkProvider_davidsonhomes.Unit;
25951
29327
  deangroup: BowmarkProvider_deangroup.Unit;
25952
29328
  decked: BowmarkProvider_decked.Unit;
29329
+ decksdirect: BowmarkProvider_decksdirect.Unit;
25953
29330
  developersopenai: BowmarkProvider_developersopenai.Unit;
25954
29331
  dice: BowmarkProvider_dice.Unit;
25955
29332
  dickssportinggoods: BowmarkProvider_dickssportinggoods.Unit;
@@ -25957,6 +29334,7 @@ interface BowmarkProviders {
25957
29334
  discounttire: BowmarkProvider_discounttire.Unit;
25958
29335
  disney: BowmarkProvider_disney.Unit;
25959
29336
  doordash: BowmarkProvider_doordash.Unit;
29337
+ dumpsters: BowmarkProvider_dumpsters.Unit;
25960
29338
  ebay: BowmarkProvider_ebay.Unit;
25961
29339
  elevenlabs: BowmarkProvider_elevenlabs.Unit;
25962
29340
  embroker: BowmarkProvider_embroker.Unit;
@@ -25969,6 +29347,7 @@ interface BowmarkProviders {
25969
29347
  extraspace: BowmarkProvider_extraspace.Unit;
25970
29348
  facerealityskincare: BowmarkProvider_facerealityskincare.Unit;
25971
29349
  firstdibs: BowmarkProvider_firstdibs.Unit;
29350
+ fivebelow: BowmarkProvider_fivebelow.Unit;
25972
29351
  fivestarbathsolutions: BowmarkProvider_fivestarbathsolutions.Unit;
25973
29352
  flightradar24: BowmarkProvider_flightradar24.Unit;
25974
29353
  ford: BowmarkProvider_ford.Unit;
@@ -25978,8 +29357,11 @@ interface BowmarkProviders {
25978
29357
  fred: BowmarkProvider_fred.Unit;
25979
29358
  furniture: BowmarkProvider_furniture.Unit;
25980
29359
  g2: BowmarkProvider_g2.Unit;
29360
+ gasbuddy: BowmarkProvider_gasbuddy.Unit;
29361
+ gazelle: BowmarkProvider_gazelle.Unit;
25981
29362
  geico: BowmarkProvider_geico.Unit;
25982
29363
  github: BowmarkProvider_github.Unit;
29364
+ glama: BowmarkProvider_glama.Unit;
25983
29365
  glassesusa: BowmarkProvider_glassesusa.Unit;
25984
29366
  goloadup: BowmarkProvider_goloadup.Unit;
25985
29367
  goodway: BowmarkProvider_goodway.Unit;
@@ -26002,6 +29384,7 @@ interface BowmarkProviders {
26002
29384
  hobie: BowmarkProvider_hobie.Unit;
26003
29385
  hodjapasha: BowmarkProvider_hodjapasha.Unit;
26004
29386
  holidaybuilders: BowmarkProvider_holidaybuilders.Unit;
29387
+ hottopic: BowmarkProvider_hottopic.Unit;
26005
29388
  hunter: BowmarkProvider_hunter.Unit;
26006
29389
  ibuypower: BowmarkProvider_ibuypower.Unit;
26007
29390
  identitygroup: BowmarkProvider_identitygroup.Unit;
@@ -26019,6 +29402,7 @@ interface BowmarkProviders {
26019
29402
  junkluggers: BowmarkProvider_junkluggers.Unit;
26020
29403
  justinwine: BowmarkProvider_justinwine.Unit;
26021
29404
  kaleidescape: BowmarkProvider_kaleidescape.Unit;
29405
+ kalshi: BowmarkProvider_kalshi.Unit;
26022
29406
  kayak: BowmarkProvider_kayak.Unit;
26023
29407
  keepa: BowmarkProvider_keepa.Unit;
26024
29408
  kingsdown: BowmarkProvider_kingsdown.Unit;
@@ -26032,6 +29416,7 @@ interface BowmarkProviders {
26032
29416
  liquiddeath: BowmarkProvider_liquiddeath.Unit;
26033
29417
  liquidspace: BowmarkProvider_liquidspace.Unit;
26034
29418
  littlewordsproject: BowmarkProvider_littlewordsproject.Unit;
29419
+ lmstudio: BowmarkProvider_lmstudio.Unit;
26035
29420
  lonelyplanet: BowmarkProvider_lonelyplanet.Unit;
26036
29421
  louvershop: BowmarkProvider_louvershop.Unit;
26037
29422
  lovelybride: BowmarkProvider_lovelybride.Unit;
@@ -26043,8 +29428,10 @@ interface BowmarkProviders {
26043
29428
  marriott: BowmarkProvider_marriott.Unit;
26044
29429
  mcdonalds: BowmarkProvider_mcdonalds.Unit;
26045
29430
  mcp_registry: BowmarkProvider_mcp_registry.Unit;
29431
+ mcp_so: BowmarkProvider_mcp_so.Unit;
26046
29432
  medicalguardian: BowmarkProvider_medicalguardian.Unit;
26047
29433
  medicare: BowmarkProvider_medicare.Unit;
29434
+ mercari: BowmarkProvider_mercari.Unit;
26048
29435
  mergify: BowmarkProvider_mergify.Unit;
26049
29436
  microcenter: BowmarkProvider_microcenter.Unit;
26050
29437
  millisaraylar: BowmarkProvider_millisaraylar.Unit;
@@ -26061,6 +29448,8 @@ interface BowmarkProviders {
26061
29448
  nationalbusinessfurniture: BowmarkProvider_nationalbusinessfurniture.Unit;
26062
29449
  newageproducts: BowmarkProvider_newageproducts.Unit;
26063
29450
  newegg: BowmarkProvider_newegg.Unit;
29451
+ nfa_futures_org: BowmarkProvider_nfa_futures_org.Unit;
29452
+ npmjs: BowmarkProvider_npmjs.Unit;
26064
29453
  nutrafol: BowmarkProvider_nutrafol.Unit;
26065
29454
  nvisioncenters: BowmarkProvider_nvisioncenters.Unit;
26066
29455
  oanda: BowmarkProvider_oanda.Unit;
@@ -26072,8 +29461,11 @@ interface BowmarkProviders {
26072
29461
  pacificcompanies: BowmarkProvider_pacificcompanies.Unit;
26073
29462
  paypal: BowmarkProvider_paypal.Unit;
26074
29463
  perennialsandsutherland: BowmarkProvider_perennialsandsutherland.Unit;
29464
+ pilotprotocol: BowmarkProvider_pilotprotocol.Unit;
26075
29465
  pirateship: BowmarkProvider_pirateship.Unit;
26076
29466
  pizzahut: BowmarkProvider_pizzahut.Unit;
29467
+ platform_claude_com: BowmarkProvider_platform_claude_com.Unit;
29468
+ polymarket: BowmarkProvider_polymarket.Unit;
26077
29469
  poshmark: BowmarkProvider_poshmark.Unit;
26078
29470
  positivegrid: BowmarkProvider_positivegrid.Unit;
26079
29471
  premierbuildings: BowmarkProvider_premierbuildings.Unit;
@@ -26088,8 +29480,10 @@ interface BowmarkProviders {
26088
29480
  rishitea: BowmarkProvider_rishitea.Unit;
26089
29481
  ritani: BowmarkProvider_ritani.Unit;
26090
29482
  roofmaxx: BowmarkProvider_roofmaxx.Unit;
29483
+ rover: BowmarkProvider_rover.Unit;
26091
29484
  rvshare: BowmarkProvider_rvshare.Unit;
26092
29485
  saatva: BowmarkProvider_saatva.Unit;
29486
+ safetywing: BowmarkProvider_safetywing.Unit;
26093
29487
  saltandstone: BowmarkProvider_saltandstone.Unit;
26094
29488
  samsclub: BowmarkProvider_samsclub.Unit;
26095
29489
  scentbird: BowmarkProvider_scentbird.Unit;
@@ -26133,6 +29527,7 @@ interface BowmarkProviders {
26133
29527
  trektravel: BowmarkProvider_trektravel.Unit;
26134
29528
  trophysignaturehomes: BowmarkProvider_trophysignaturehomes.Unit;
26135
29529
  twiddy: BowmarkProvider_twiddy.Unit;
29530
+ uhc_smallbusiness: BowmarkProvider_uhc_smallbusiness.Unit;
26136
29531
  ulrichlifestyle: BowmarkProvider_ulrichlifestyle.Unit;
26137
29532
  ups: BowmarkProvider_ups.Unit;
26138
29533
  usps: BowmarkProvider_usps.Unit;
@@ -26142,12 +29537,14 @@ interface BowmarkProviders {
26142
29537
  villagerealtyobx: BowmarkProvider_villagerealtyobx.Unit;
26143
29538
  visible: BowmarkProvider_visible.Unit;
26144
29539
  voluspa: BowmarkProvider_voluspa.Unit;
29540
+ vscode: BowmarkProvider_vscode.Unit;
26145
29541
  walkerhughes: BowmarkProvider_walkerhughes.Unit;
26146
29542
  walmart: BowmarkProvider_walmart.Unit;
26147
29543
  waterfurnace: BowmarkProvider_waterfurnace.Unit;
26148
29544
  wellfound: BowmarkProvider_wellfound.Unit;
26149
29545
  winestyles: BowmarkProvider_winestyles.Unit;
26150
29546
  xpresswellnessurgentcare: BowmarkProvider_xpresswellnessurgentcare.Unit;
29547
+ ycombinator: BowmarkProvider_ycombinator.Unit;
26151
29548
  yelp: BowmarkProvider_yelp.Unit;
26152
29549
  yorkwallcoverings: BowmarkProvider_yorkwallcoverings.Unit;
26153
29550
  yourarborhome: BowmarkProvider_yourarborhome.Unit;
@@ -77886,6 +81283,7 @@ interface BowmarkLibrary {
77886
81283
  developer_api_key_signup: BowmarkCapability_developer_api_key_signup.Unit;
77887
81284
  domain: BowmarkCapability_domain.Unit;
77888
81285
  email: BowmarkCapability_email.Unit;
81286
+ entertainment_merch: BowmarkCapability_entertainment_merch.Unit;
77889
81287
  flights: BowmarkCapability_flights.Unit;
77890
81288
  game_soundtrack_composer_credits: BowmarkCapability_game_soundtrack_composer_credits.Unit;
77891
81289
  git_commit_history: BowmarkCapability_git_commit_history.Unit;
@@ -77899,6 +81297,8 @@ interface BowmarkLibrary {
77899
81297
  mcp_registry: BowmarkCapability_mcp_registry.Unit;
77900
81298
  music: BowmarkCapability_music.Unit;
77901
81299
  pcparts: BowmarkCapability_pcparts.Unit;
81300
+ pet_boarding: BowmarkCapability_pet_boarding.Unit;
81301
+ phone_price: BowmarkCapability_phone_price.Unit;
77902
81302
  phone_trade_in: BowmarkCapability_phone_trade_in.Unit;
77903
81303
  pricing: BowmarkCapability_pricing.Unit;
77904
81304
  products: BowmarkCapability_products.Unit;
@@ -77914,6 +81314,7 @@ interface BowmarkLibrary {
77914
81314
  text_to_speech: BowmarkCapability_text_to_speech.Unit;
77915
81315
  theme_park_tickets: BowmarkCapability_theme_park_tickets.Unit;
77916
81316
  weather: BowmarkCapability_weather.Unit;
81317
+ wireless: BowmarkCapability_wireless.Unit;
77917
81318
  yoga_outfit_shopping: BowmarkCapability_yoga_outfit_shopping.Unit;
77918
81319
  providers: BowmarkProviders;
77919
81320
  }