@bowmark/web 1.11.0 → 1.12.1

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: 54e3683692de6415062143d692a1ab30846dc38d8f5c9ba7c14182a3b3618f7d
9
- // 18 capabilities, 237 providers, 620 typed functions, 20 refused.
8
+ // Manifest version: 5207ea33354972da803d6974eed73abefc0ae46410767310486fd5116faa04c1
9
+ // 34 capabilities, 257 providers, 674 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
@@ -36,6 +36,92 @@
36
36
 
37
37
 
38
38
 
39
+ declare namespace BowmarkCapability_bundles {
40
+ // ── Check whether a set of products can be built and bought right now — the unit's own declarations, verbatim ──
41
+ interface BundleItemAvailability {
42
+ url: string
43
+ ok: boolean
44
+ buildable: boolean
45
+ price: { amount: number; currency: string } | null // integer minor units
46
+ availability: string | null
47
+ reason: string | null
48
+ }
49
+ interface BundleAvailability {
50
+ buildable: boolean
51
+ items: BundleItemAvailability[]
52
+ blocking: string[] // urls of the items stopping the bundle
53
+ totalPrice: { amount: number; currency: string } | null
54
+ warnings: string[]
55
+ }
56
+
57
+ /**
58
+ * Given a list of product page urls, reads each one's price and stock the way
59
+ * `products.getAvailability` does, then reduces the set to one buildable/not-buildable verdict
60
+ * naming whatever is blocking it.
61
+ */
62
+ interface Unit {
63
+ /**
64
+ * Reads every item's product page and returns whether the WHOLE bundle can be built and bought
65
+ * right now — false the moment any one item is out of stock, pre-order, or unreadable, naming
66
+ * which url(s) are blocking it in `blocking`. Never throws on a bad or dead item url; that
67
+ * item is reported as not buildable instead, with its reason.
68
+ */
69
+ checkAvailability(items: { url: string }[]): Promise<BundleAvailability>;
70
+ }
71
+ }
72
+
73
+ declare namespace BowmarkCapability_cable_railing_quote {
74
+ // ── Cable railing design quote (materials & mounting options) — the unit's own declarations, verbatim ──
75
+ type CableRailingMaterial = {
76
+ slug: string
77
+ title: string
78
+ metal: boolean
79
+ defaultFinish: string | null
80
+ finishes: string[]
81
+ }
82
+ type CableRailingMountingStyle = {
83
+ slug: string
84
+ title: string
85
+ availableMaterials: string[]
86
+ }
87
+ type CableRailingPricing = {
88
+ automated: false // no source publishes an automated instant price — see 'how'
89
+ how: string // what actually produces a price (a human, after submission)
90
+ designAppUrl: string
91
+ }
92
+ type CableRailingDesignOptionsResult = {
93
+ materials: CableRailingMaterial[]
94
+ mountingStyles: CableRailingMountingStyle[]
95
+ pricing: CableRailingPricing
96
+ warnings: string[] // always present; empty when nothing was dropped
97
+ }
98
+
99
+ type CallOptions = {
100
+ timeoutMs?: number // per-provider budget in ms, default 30000, clamped to 1000-55000.
101
+ // A provider slower than this is DROPPED from the results and
102
+ // NAMED in warnings — never silently absent
103
+ }
104
+
105
+ /**
106
+ * Returns the real material and mounting-style choices behind Viewrail's Victor cable-railing
107
+ * design app. There is no automated instant price to return alongside them — Victor prices a
108
+ * design by having a human review it after submission, and `pricing.how` says so rather than
109
+ * guessing a number.
110
+ */
111
+ interface Unit {
112
+ /**
113
+ * Lists Victor's real material families (304/316/2205 stainless, aluminum, wood-grain
114
+ * aluminum, …) and post-mounting styles (Surface Mount, Side Mount, Core Drill, …), each with
115
+ * which materials it's available in — the two choices Victor's own draw-and-quote flow asks
116
+ * first. `pricing.automated` is always `false`: no cable-railing site measured publishes an
117
+ * automated instant price (Victor's only pricing route is staff-only and 401s any
118
+ * unauthenticated call), so `pricing.how` names the real next step — draw the layout in Victor
119
+ * and submit it for a human-priced quote — instead of fabricating a number.
120
+ */
121
+ getDesignOptions(options?: CallOptions): Promise<CableRailingDesignOptionsResult>;
122
+ }
123
+ }
124
+
39
125
  declare namespace BowmarkCapability_cars {
40
126
  // ── Car hire — the unit's own declarations, verbatim ──
41
127
  type CarQuery = {
@@ -111,6 +197,216 @@ type CallOptions = {
111
197
  }
112
198
  }
113
199
 
200
+ declare namespace BowmarkCapability_coworking {
201
+ // ── Coworking space day passes — the unit's own declarations, verbatim ──
202
+ type CoworkingDayPass = {
203
+ venueName: string
204
+ address: string
205
+ workspaceName: string // the pass's own display name at its venue
206
+ category: string | null // e.g. "Coworking" — null when unreported
207
+ capacity: number | null
208
+ priceAmount: number
209
+ currency: string // ISO 4217, always "USD" today (US cities only)
210
+ bookingUrl: string // where to actually book — needs a signed-in account
211
+ latitude: number
212
+ longitude: number
213
+ rating: { average: number; count: number } | null
214
+ }
215
+ type FindDayPassesResult = {
216
+ city: string
217
+ state: string
218
+ dayPasses: CoworkingDayPass[] // [] when nothing is listed today — a real, complete answer
219
+ warnings: string[] // always present; empty when nothing was dropped
220
+ }
221
+
222
+ type CallOptions = {
223
+ timeoutMs?: number // per-provider budget in ms, default 30000, clamped to 1000-55000.
224
+ // A provider slower than this is DROPPED from the results and
225
+ // NAMED in warnings — never silently absent
226
+ }
227
+
228
+ /**
229
+ * Finds single-day coworking passes in a US city — venue, price, capacity and a direct booking
230
+ * link, aggregated across WeWork, Industrious, Regus/Spaces and independent operators via
231
+ * LiquidSpace. No login, no booking (that needs a signed-in LiquidSpace account).
232
+ */
233
+ interface Unit {
234
+ /**
235
+ * Finds single-day coworking passes for a US city — `bowmark.coworking.findDayPasses("New
236
+ * York, NY")` or `{ city: "New York", state: "NY" }` — and reads each one's real, current
237
+ * price. Returns `dayPasses: []` when nothing is listed for that city today, a real, complete
238
+ * answer, not a failure. Each pass carries the venue name/address, the pass's own name and
239
+ * category, capacity, price, coordinates, rating and a direct `bookingUrl` — LiquidSpace's own
240
+ * page, since booking itself needs a signed-in LiquidSpace account and is out of scope here.
241
+ * US cities only.
242
+ */
243
+ findDayPasses(location: string | { city: string; state: string }, options?: CallOptions): Promise<FindDayPassesResult>;
244
+ }
245
+ }
246
+
247
+ declare namespace BowmarkCapability_custom_sofa_configurator {
248
+ // ── Custom sofa configurator (fabric selection, live pricing) — the unit's own declarations, verbatim ──
249
+ type CustomSofa = {
250
+ id: string; // "<source>:<nativeId>" — pass to getConfigurator/priceConfiguration
251
+ source: string; // "joybird" | "interiordefine"
252
+ brand: string;
253
+ name: string;
254
+ url: string;
255
+ basePrice: number; // whole dollars — see basePriceNote for what it means
256
+ basePriceNote: string;
257
+ }
258
+ type CustomSofaListResult = { sofas: CustomSofa[]; warnings: string[] }
259
+
260
+ type CustomSofaChoice = { key: string; label: string; priceDelta: number }
261
+ type CustomSofaOption = {
262
+ key: string; // pass as a SELECTIONS key: { [option.key]: choice.key }
263
+ title: string;
264
+ required: boolean;
265
+ choices: CustomSofaChoice[];
266
+ }
267
+ type CustomSofaConfigurator = {
268
+ id: string; source: string; brand: string; name: string; url: string;
269
+ basePrice: number; basePriceNote: string; options: CustomSofaOption[];
270
+ warnings: string[]; // always empty today — getConfigurator is a route to ONE maker
271
+ }
272
+
273
+ type CustomSofaPriceLine = { option: string; choice: string; priceDelta: number }
274
+ type CustomSofaPriceResult = {
275
+ id: string; source: string; brand: string;
276
+ total: number; // the maker's own live total for this configuration
277
+ breakdown: CustomSofaPriceLine[];
278
+ missingRequired: string[]; // total is a FLOOR while this is non-empty
279
+ unmatched: string[]; // selections that matched no real option/choice
280
+ url: string;
281
+ warnings: string[]; // always empty today — priceConfiguration is a route to ONE maker
282
+ }
283
+
284
+ type CallOptions = {
285
+ timeoutMs?: number // per-provider budget in ms, default 30000, clamped to 1000-55000.
286
+ // A provider slower than this is DROPPED from the results and
287
+ // NAMED in warnings — never silently absent
288
+ }
289
+
290
+ /**
291
+ * Configure a real sofa or sectional — pick a fabric, wood stain or leg finish — and get the
292
+ * maker's own live price, across every maker whose site publishes a real configurator
293
+ * (Joybird, Interior Define). Not a researched estimate: the same total the maker's own
294
+ * customizer would show for that exact pick. No sofa named yet? Call listSofas() and
295
+ * configure/price the first result — that alone answers 'configure a sofa with fabric
296
+ * selection and live pricing' without asking the caller to pick one first.
297
+ */
298
+ interface Unit {
299
+ /**
300
+ * Lists configurable sofas/sectionals across every maker — Joybird's whole catalogue (filtered
301
+ * to sofas and sectionals) plus an Interior Define search (defaults to "sofa" when `query` is
302
+ * omitted). Each row's `id` is what getConfigurator and priceConfiguration take.
303
+ * `basePriceNote` says what the price actually means for that maker — Joybird does not charge
304
+ * per-fabric, so its price is the real total; Interior Define's is a floor. Throws only when
305
+ * NEITHER maker could be reached.
306
+ */
307
+ listSofas(query?: string): Promise<CustomSofaListResult>;
308
+
309
+ /**
310
+ * Reads one sofa's full configurator — every option slot (Fabric, Wood Stain, Color, Finish,
311
+ * Cushion Fill — the exact set varies by product and maker) with each choice's label and price
312
+ * delta. Each option's `key` and each choice's `key` are exactly what priceConfiguration takes
313
+ * back as a selection.
314
+ */
315
+ getConfigurator(id: string): Promise<CustomSofaConfigurator>;
316
+
317
+ /**
318
+ * Prices ONE exact configuration against the maker's own live customizer and returns the real
319
+ * total, a per-choice breakdown, which required slots are still unpicked (the total is a floor
320
+ * until they are), and a link to the maker's own page for it. `selections` is `{ [option.key]:
321
+ * choice.key }` using the keys getConfigurator(id) just returned for THIS sofa — never invent
322
+ * one.
323
+ */
324
+ priceConfiguration(id: string, selections: Record<string, string>): Promise<CustomSofaPriceResult>;
325
+ }
326
+ }
327
+
328
+ declare namespace BowmarkCapability_developer_api_key_signup {
329
+ // ── Developer API key signup — the unit's own declarations, verbatim ──
330
+ interface DeveloperApiKeySignupDetails {
331
+ organization: string
332
+ email: string
333
+ occupation?: string
334
+ }
335
+ interface DeveloperApiKeySignupResult {
336
+ service: string
337
+ apiKey: string
338
+ message: string
339
+ warnings: string[]
340
+ }
341
+
342
+ type CallOptions = {
343
+ timeoutMs?: number // per-provider budget in ms, default 30000, clamped to 1000-55000.
344
+ // A provider slower than this is DROPPED from the results and
345
+ // NAMED in warnings — never silently absent
346
+ }
347
+
348
+ /**
349
+ * Actually RUNS a developer dashboard's signup flow and hands back a real, usable API key — no
350
+ * email verification, no CAPTCHA, for the dashboards this covers. Today: Alpha Vantage's free
351
+ * stock-data API. Call it directly; don't just describe the steps. If the caller gave no
352
+ * organization/email of their own, invent a placeholder — this is an instant, unverified
353
+ * free-tier signup, not an account tied to a real identity, so there is nothing to ask
354
+ * permission for. MAKE THE EMAIL UNIQUE PER CALL (see the worked example) — the dashboard
355
+ * dedupes by address, so a copied literal example email gets "Redundant origin" on the second
356
+ * and every later run.
357
+ */
358
+ interface Unit {
359
+ /**
360
+ * Signs up for a real API key on a developer dashboard — RUN this, don't just explain how —
361
+ * `bowmark.developer_api_key_signup.signUp("alphavantage", { organization: "Acme Corp", email:
362
+ * `qa-${Date.now()}@example.com` })`. `service` selects which dashboard (today: "alphavantage"
363
+ * only — THROWS naming the supported list otherwise, a caller-fixable error).
364
+ * `details.organization` and `details.email` are required; when the caller did not supply
365
+ * their own, invent placeholder-shaped ones like the example's — the signup is instant and
366
+ * unverified, so nothing is lost by not stopping to ask first. MAKE THE EMAIL UNIQUE EVERY
367
+ * CALL (e.g. embed `Date.now()`, as the example does) — the dashboard rejects a repeated
368
+ * address with "Redundant origin", so a literal copied example email fails on the second and
369
+ * every later run. `details.occupation` is optional and dashboard-specific. Returns the real
370
+ * key plus the dashboard's own confirmation sentence. `options.timeoutMs` sets the call budget
371
+ * (default 30000).
372
+ */
373
+ signUp(service: string, details: { organization: string, email: string, occupation?: string }, options?: CallOptions): Promise<DeveloperApiKeySignupResult>;
374
+ }
375
+ }
376
+
377
+ declare namespace BowmarkCapability_domain {
378
+ // ── Domain name availability check — the unit's own declarations, verbatim ──
379
+
380
+ interface DomainAvailabilityResult {
381
+ name: string // normalized: lowercased, no scheme, no "www."
382
+ available: boolean | null // true = free, false = registered, null = unknown
383
+ registrar: string | null
384
+ registeredAt: string | null // ISO 8601
385
+ expiresAt: string | null // ISO 8601
386
+ price: null // always null — see warnings
387
+ currency: null
388
+ source: string // "rdap"
389
+ warnings: string[]
390
+ }
391
+
392
+ /**
393
+ * Checks whether a domain name is registered — and, when it is, who holds it and when it
394
+ * expires — straight off RDAP, the IANA-standardized WHOIS successor. No key, no browser.
395
+ * Price is currently always unknown; see the result's warnings.
396
+ */
397
+ interface Unit {
398
+ /**
399
+ * Looks up a domain name (e.g. "example.com") against its authoritative RDAP server and
400
+ * reports whether it is registered, plus the registrar and registration/expiration dates when
401
+ * it is. `available: null` means the TLD publishes no RDAP service (rare) or the registry
402
+ * answered something unparseable — check `warnings`. `price`/`currency` are always `null`: no
403
+ * keyed registrar pricing source is configured, and `warnings` says so on every call rather
404
+ * than guessing a number.
405
+ */
406
+ checkAvailability(name: string): Promise<DomainAvailabilityResult>;
407
+ }
408
+ }
409
+
114
410
  declare namespace BowmarkCapability_email {
115
411
  // ── Email (work addresses & domains) — the unit's own declarations, verbatim ──
116
412
  // One candidate email domain for a company. Nulls mean "the source does not
@@ -361,6 +657,52 @@ type FlightStatusResult = {
361
657
  }
362
658
  }
363
659
 
660
+ declare namespace BowmarkCapability_game_soundtrack_composer_credits {
661
+ // ── Video game soundtrack composer credits — the unit's own declarations, verbatim ──
662
+
663
+ interface SoundtrackMatch {
664
+ releaseGroupId: string
665
+ title: string
666
+ composer: string
667
+ firstReleaseDate: string
668
+ disambiguation: string
669
+ }
670
+
671
+ interface SoundtrackCredits {
672
+ releaseGroupId: string
673
+ title: string
674
+ composer: string
675
+ firstReleaseDate: string
676
+ disambiguation: string
677
+ relations: { role: string, artist: string }[]
678
+ warnings: string[]
679
+ }
680
+
681
+ interface SoundtrackSearchResult {
682
+ query: string
683
+ matches: SoundtrackMatch[]
684
+ warnings: string[]
685
+ }
686
+
687
+ /**
688
+ * Looks up a video game's soundtrack release and who composed it, via MusicBrainz's own
689
+ * release-group database.
690
+ */
691
+ interface Unit {
692
+ /**
693
+ * Searches MusicBrainz for soundtrack releases matching a game title and returns each match's
694
+ * composer credit and release-group id.
695
+ */
696
+ search(gameTitle: string): Promise<SoundtrackSearchResult>;
697
+
698
+ /**
699
+ * Looks up one soundtrack release-group by id (from search()) and returns its full
700
+ * composer/artist credits.
701
+ */
702
+ getCredits(releaseGroupId: string): Promise<SoundtrackCredits>;
703
+ }
704
+ }
705
+
364
706
  declare namespace BowmarkCapability_git_commit_history {
365
707
  // ── Git commit history — the unit's own declarations, verbatim ──
366
708
  interface Commit {
@@ -416,6 +758,58 @@ type CallOptions = {
416
758
  }
417
759
  }
418
760
 
761
+ declare namespace BowmarkCapability_git_release_notes {
762
+ // ── Git release notes — the unit's own declarations, verbatim ──
763
+ interface Release {
764
+ tag: string // the repo's own tag, e.g. "v7.0.2"
765
+ name: string // display name, falls back to the tag when blank
766
+ draft: boolean
767
+ prerelease: boolean
768
+ createdAt: string // ISO 8601
769
+ publishedAt: string | null // ISO 8601, null for a draft never published
770
+ notes: string // the release notes text, in the host's own markdown
771
+ url: string // the release's own page on the host
772
+ }
773
+ interface ReleaseNotesOptions {
774
+ limit?: number // 1-100, default 30
775
+ page?: number // 1-based, for paging past limit
776
+ }
777
+ interface ReleaseNotesResult {
778
+ repo: string // resolved as "owner/repo", however it was passed
779
+ releases: Release[]
780
+ warnings: string[]
781
+ }
782
+
783
+ type CallOptions = {
784
+ timeoutMs?: number // per-provider budget in ms, default 30000, clamped to 1000-55000.
785
+ // A provider slower than this is DROPPED from the results and
786
+ // NAMED in warnings — never silently absent
787
+ }
788
+
789
+ /**
790
+ * A git repository's own release notes — tag, name, dates and the release notes text for every
791
+ * release, newest first — from a GitHub URL or a bare owner/repo string. What a changelog or a
792
+ * "what's new" page is built from, in one call. No repo named yet? Call it on
793
+ * microsoft/TypeScript (a real, actively-released public repo) to show a caller the shape of
794
+ * the answer, rather than only asking which repo they meant.
795
+ */
796
+ interface Unit {
797
+ /**
798
+ * Returns a public GitHub repository's own release history — each release's tag, display name,
799
+ * draft/prerelease flags, created/published dates, its release notes text (`notes`) and its
800
+ * own page URL — newest first, GitHub's own order. `repo` takes either form: a full URL
801
+ * ("https://github.com/microsoft/TypeScript") or the bare "owner/repo" string. `options.limit`
802
+ * (1-100, default 30) and `options.page` page through history. THROWS a caller-fixable error
803
+ * for a string that is neither shape, or for an owner/repo GitHub does not have (a private
804
+ * repo also reads as not-found, unauthenticated). IF THE CALLER NAMED NO REPO: do not stop to
805
+ * ask — call this immediately with "microsoft/TypeScript" (a real, actively-released public
806
+ * repo) to show a real, live answer, and mention in your reply that a different repo can be
807
+ * named.
808
+ */
809
+ releaseNotes(repo: string, options?: ReleaseNotesOptions): Promise<ReleaseNotesResult>;
810
+ }
811
+ }
812
+
419
813
  declare namespace BowmarkCapability_hotels {
420
814
  // ── Hotels — the unit's own declarations, verbatim ──
421
815
  type HotelQuery = {
@@ -520,25 +914,26 @@ type CallOptions = {
520
914
  }
521
915
 
522
916
  /**
523
- * Real national-average installed-cost RANGES for a residential HVAC system, straight off a
524
- * manufacturer's own published cost guide — pick a system type ("Air Conditioners", "80%
525
- * Furnaces", "90% Furnaces", "Heat Pumps", "Low-Profile Heat Pumps", "Cold-Climate Heat Pumps"
526
- * or "Air Handlers") and get the real per-tier (Platinum/Gold/Silver) range, model name and
527
- * the source's own disclaimer. Not a bound quote for one home measured 2026-08-29 that no
528
- * national HVAC brand computes a per-configuration price online; every one sells through
529
- * independent dealers who set final price locally.
917
+ * Call bowmark.hvac.getCostEstimate(systemType) to pull a real, published installed-cost RANGE
918
+ * for a residential HVAC system straight off a manufacturer's own cost guide — pick a system
919
+ * type ("Air Conditioners", "80% Furnaces", "90% Furnaces", "Heat Pumps", "Low-Profile Heat
920
+ * Pumps", "Cold-Climate Heat Pumps" or "Air Handlers") and get back the real per-tier
921
+ * (Platinum/Gold/Silver) price range, model name and source URL. Always call it rather than
922
+ * answering from memory these are today's actual published figures. (It is a
923
+ * national-average range, not a bound quote for one address; every national HVAC brand sells
924
+ * through independent dealers who set final price locally — see `disclaimer`.)
530
925
  */
531
926
  interface Unit {
532
927
  /**
533
- * Reads a real, published national-average installed-cost range for one HVAC system type ("Air
534
- * Conditioners", "80% Furnaces", "90% Furnaces", "Heat Pumps", "Low-Profile Heat Pumps",
535
- * "Cold-Climate Heat Pumps" or "Air Handlers"), broken into the maker's three tiers
536
- * (Platinum/Gold/Silver) with a real model name and cost range per tier. THIS IS A PUBLISHED
537
- * ESTIMATE, NOT A BOUND QUOTE for one caller's home or ZIP no national HVAC brand computes
538
- * that online (measured 2026-08-29 across Trane, Carrier, Lennox, Rheem, American Standard and
539
- * Goodman), so this returns the closest honest real number: the manufacturer's own
540
- * national-average range, with its own disclaimer carried in `disclaimer`. THROWS when the
541
- * source could not be reached at all.
928
+ * Calls the manufacturer's own published cost-guide table and returns a real installed-cost
929
+ * range for one HVAC system type ("Air Conditioners", "80% Furnaces", "90% Furnaces", "Heat
930
+ * Pumps", "Low-Profile Heat Pumps", "Cold-Climate Heat Pumps" or "Air Handlers"), broken into
931
+ * the maker's three tiers (Platinum/Gold/Silver) with a real model name and cost range per
932
+ * tier. Call this instead of estimating from training datait returns today's actual
933
+ * published figures. (It is a national-average range, not a bound quote for one caller's home
934
+ * or ZIP no national HVAC brand computes that online, measured 2026-08-29 across Trane,
935
+ * Carrier, Lennox, Rheem, American Standard and Goodman; the source's own caveat is carried in
936
+ * `disclaimer`.) THROWS when the source could not be reached at all.
542
937
  */
543
938
  getCostEstimate(systemType: string, options?: CallOptions): Promise<HvacCostEstimateResult>;
544
939
  }
@@ -664,6 +1059,35 @@ type ReferralCarrierListResult = {
664
1059
  // out or failed
665
1060
  }
666
1061
 
1062
+ // getHomeQuotes: real homeowners premiums for one property, fanned out across
1063
+ // Insurify's marketplace and Progressive's HomeQuote Explorer panel. Both
1064
+ // price nothing without the caller's own identity.
1065
+ type HomeQuoteQuery = {
1066
+ identity: { firstName: string, lastName: string, dob: string, email: string, phone: string }
1067
+ address: string // street address, e.g. "686 Hamlet St"
1068
+ zip: string // 5-digit US ZIP
1069
+ city?: string // required TOGETHER WITH state to reach Progressive's panel
1070
+ state?: string // 2-letter state code, required together with city
1071
+ }
1072
+ type HomeQuote = {
1073
+ source: string // which panel this came from
1074
+ carrier: string
1075
+ package: string | null // Progressive's bundling tier; always null for Insurify
1076
+ annualPremium: number | null // whole-term premium normalized to 12 months
1077
+ monthlyPremium: number | null // always null on a Progressive row — it publishes none
1078
+ windHailIncluded: boolean | null // Progressive only; always null for Insurify
1079
+ quoteUrl: string | null // Insurify's own bindUrl; always null for Progressive
1080
+ }
1081
+ type DeclinedHomeCarrier = {
1082
+ source: string
1083
+ carrier: string // asked and refused to write the property — a real answer
1084
+ }
1085
+ type HomeQuoteResult = {
1086
+ quotes: HomeQuote[] // cheapest annualPremium first; nulls last
1087
+ declined: DeclinedHomeCarrier[]
1088
+ warnings: string[]
1089
+ }
1090
+
667
1091
  type CallOptions = {
668
1092
  timeoutMs?: number // per-provider budget in ms, default 30000, clamped to 1000-55000.
669
1093
  // A provider slower than this is DROPPED from the results and
@@ -673,8 +1097,10 @@ type CallOptions = {
673
1097
  /**
674
1098
  * Look up insurance carriers in the regulators' own national register — the NAIC company code,
675
1099
  * the legal entity behind a consumer brand, head-office contact details, and the states each
676
- * carrier is LICENSED to write in, which is not the same as where it is headquartered. Direct
677
- * API, no browser.
1100
+ * carrier is LICENSED to write in, which is not the same as where it is headquartered — and
1101
+ * get REAL home insurance quotes and rates for a specific property address from two
1102
+ * independent carrier panels (Insurify's marketplace, Progressive's HomeQuote Explorer).
1103
+ * Direct API, no browser.
678
1104
  */
679
1105
  interface Unit {
680
1106
  /**
@@ -757,6 +1183,122 @@ type CallOptions = {
757
1183
  * in it. `options.timeoutMs` sets the per-source budget (default 30000).
758
1184
  */
759
1185
  listReferralCarriers(query?: ReferralCarrierQuery, options?: CallOptions): Promise<ReferralCarrierListResult>;
1186
+
1187
+ /**
1188
+ * Returns REAL home insurance quotes — actual carrier premiums for one property address,
1189
+ * fanned out across two independent panels: Insurify's own marketplace and Progressive's
1190
+ * HomeQuote Explorer (itself a hand-off to a Bolt-run panel of outside carriers, so
1191
+ * "progressive" here still means several underwriters, not one). `{ identity, address: "686
1192
+ * Hamlet St", zip: "43215", city: "Columbus", state: "OH" }` — `identity` is the CALLER's OWN
1193
+ * `{ firstName, lastName, dob, email, phone }`, required because neither carrier prices a
1194
+ * property without one. `city` and `state` are each optional but REQUIRED TOGETHER to reach
1195
+ * Progressive's panel, which bootstraps off a full postal address; Insurify resolves both from
1196
+ * `zip` on its own and reaches every query this function accepts. Returns `quotes` sorted
1197
+ * CHEAPEST `annualPremium` FIRST (a row with no premium at all sorts last), each carrying
1198
+ * `source`, `carrier`, Progressive's bundling `package` tier (always null for Insurify, which
1199
+ * prices one plan per carrier), `annualPremium` normalized to a 12-month figure so a shorter
1200
+ * or longer term is still comparable, `monthlyPremium` (a carrier's own instalment figure when
1201
+ * it quoted one — always null on a Progressive row, since that panel publishes only the annual
1202
+ * premium per package), `windHailIncluded` (Progressive only), and `quoteUrl` (Insurify's own
1203
+ * `bindUrl` when it published one). `declined` names a carrier a panel asked and REFUSED to
1204
+ * write — a real answer distinct from "no price returned", and never merged into `quotes`.
1205
+ * `warnings` is always present: it names a source that timed out or failed, AND a source not
1206
+ * queried because the query lacked the input it needs (Progressive without `city`+`state`) —
1207
+ * read it before treating a short list as the whole market. When every source the query DID
1208
+ * reach for failed, this THROWS rather than returning an empty list, which would otherwise
1209
+ * read as "nobody would insure this property". `options.timeoutMs` sets the per-source budget
1210
+ * (default 30000).
1211
+ */
1212
+ getHomeQuotes(query: HomeQuoteQuery, options?: CallOptions): Promise<HomeQuoteResult>;
1213
+ }
1214
+ }
1215
+
1216
+ declare namespace BowmarkCapability_istanbul_schedules {
1217
+ // ── Istanbul attraction opening hours — the unit's own declarations, verbatim ──
1218
+ interface AttractionHoursResult {
1219
+ query: string
1220
+ name: string // the site's own display name for the match
1221
+ openingTime: string | null // "HH:MM"
1222
+ closingTime: string | null // "HH:MM"
1223
+ ticketOfficeClosingTime: string | null // "HH:MM" — often earlier than closingTime
1224
+ closedDays: string | null // the site's own wording, e.g. "Her gün açık"
1225
+ address: string | null
1226
+ phone: string | null
1227
+ email: string | null
1228
+ url: string
1229
+ warnings: string[]
1230
+ }
1231
+
1232
+ type CallOptions = {
1233
+ timeoutMs?: number // per-provider budget in ms, default 30000, clamped to 1000-55000.
1234
+ // A provider slower than this is DROPPED from the results and
1235
+ // NAMED in warnings — never silently absent
1236
+ }
1237
+
1238
+ /**
1239
+ * Live opening/closing hours, ticket-office closing time and closed days for Istanbul museums
1240
+ * and archaeological sites — İstanbul Archaeological Museums, the Hagia Sophia History and
1241
+ * Experience Museum, Galata Tower Museum among them — read straight off muze.gov.tr (Turkey's
1242
+ * Ministry of Culture and Tourism). Call this for the attraction-hours part of any
1243
+ * Istanbul-schedules question, even one that also asks about ferries or shows: answer what it
1244
+ * returns, then say plainly that ferry timetables and show schedules aren't covered — no
1245
+ * reachable machine-readable source was found for either; see this unit's request file for
1246
+ * what was tried. Don't skip the call just because the question is broader than this unit's
1247
+ * scope.
1248
+ */
1249
+ interface Unit {
1250
+ /**
1251
+ * Matches `query` against muze.gov.tr's own museum/site listing (a substring match on the
1252
+ * site's own display name, e.g. "Galata Tower" or "Hagia Sophia") and returns that
1253
+ * attraction's opening/closing hours, ticket-office closing time and closed days. THROWS a
1254
+ * caller-fixable error naming the listing when nothing matches — the listing is a curated
1255
+ * highlight subset, not the whole ministry catalog.
1256
+ */
1257
+ attractionHours(query: string, options?: CallOptions): Promise<AttractionHoursResult>;
1258
+ }
1259
+ }
1260
+
1261
+ declare namespace BowmarkCapability_mcp_registry {
1262
+ // ── MCP Registry — the unit's own declarations, verbatim ──
1263
+ interface McpRegistryEntry {
1264
+ name: string;
1265
+ title: string | null;
1266
+ description: string;
1267
+ version: string;
1268
+ repositoryUrl: string | null;
1269
+ remoteUrl: string | null;
1270
+ status: string;
1271
+ }
1272
+
1273
+ interface McpRegistrySearchResult {
1274
+ servers: McpRegistryEntry[];
1275
+ warnings: string[];
1276
+ }
1277
+
1278
+ type CallOptions = {
1279
+ timeoutMs?: number // per-provider budget in ms, default 30000, clamped to 1000-55000.
1280
+ // A provider slower than this is DROPPED from the results and
1281
+ // NAMED in warnings — never silently absent
1282
+ }
1283
+
1284
+ /**
1285
+ * Search or browse the official Model Context Protocol server registry — find a published MCP
1286
+ * server by name and get its install or connect URL.
1287
+ */
1288
+ interface Unit {
1289
+ /**
1290
+ * Lists or searches the official MCP server registry (registry.modelcontextprotocol.io) for
1291
+ * published Model Context Protocol servers. `query` substring-matches a server's registry name
1292
+ * — omit it to list the newest-published entries. Each row carries the server's registry name,
1293
+ * title, description, latest version, where to install it (`repositoryUrl`) or connect to it
1294
+ * if it's hosted (`remoteUrl`), and its registry status. This is how an agent answers 'is
1295
+ * there already an MCP server for X' before building one, or finds out what a directory
1296
+ * listing/submission for the MCP ecosystem's own registry actually looks like. `limit` caps
1297
+ * how many rows come back (default 30, max 100). THROWS if the registry cannot be reached —
1298
+ * one source, so there is no partial answer to hand back. `options.timeoutMs` sets the budget
1299
+ * (default 30000).
1300
+ */
1301
+ search(query?: string, limit?: number, options?: CallOptions): Promise<McpRegistrySearchResult>;
760
1302
  }
761
1303
  }
762
1304
 
@@ -921,6 +1463,96 @@ type ProductResult = {
921
1463
  }
922
1464
  }
923
1465
 
1466
+ declare namespace BowmarkCapability_phone_trade_in {
1467
+ // ── Phone trade-in value — the unit's own declarations, verbatim ──
1468
+ // The capability's own condition vocabulary — four tiers every buyback
1469
+ // comparison site groups devices into, whatever it calls them natively.
1470
+ type TradeInCondition = "like_new" | "good" | "fair" | "broken";
1471
+
1472
+ // One buyback vendor's live cash offer for the requested device.
1473
+ type TradeInQuote = {
1474
+ source: string // which source this quote came from, e.g. "sellcell"
1475
+ merchant: string // the buyback vendor's own name, e.g. "BuyBackBoss"
1476
+ price: { amount: number; currency: string } // integer minor units — cents
1477
+ paymentMethods: string[]
1478
+ paymentPeriod: string | null
1479
+ freeShipping: boolean
1480
+ }
1481
+ type PhoneTradeInEstimate = {
1482
+ model: string // the resolved device slug, e.g. "iphone-14-pro"
1483
+ storage: string
1484
+ condition: TradeInCondition
1485
+ quotes: TradeInQuote[] // every vendor's current offer, highest first
1486
+ warnings: string[] // always present; empty when nothing was dropped
1487
+ }
1488
+
1489
+ type CallOptions = {
1490
+ timeoutMs?: number // per-provider budget in ms, default 30000, clamped to 1000-55000.
1491
+ // A provider slower than this is DROPPED from the results and
1492
+ // NAMED in warnings — never silently absent
1493
+ }
1494
+
1495
+ /**
1496
+ * Looks up the current buyback value of an iPhone — model, storage and condition — and returns
1497
+ * every vendor's live cash offer, highest first. Fans out across buyback comparison sources;
1498
+ * direct API, no browser.
1499
+ */
1500
+ interface Unit {
1501
+ /**
1502
+ * Looks up the current buyback value of an iPhone — `bowmark.phone_trade_in.estimate({ model:
1503
+ * "iPhone 14 Pro", storage: "256GB", condition: "good" })` — and returns every vendor's live
1504
+ * cash offer, highest first. `condition` is one of "like_new" | "good" | "fair" | "broken"
1505
+ * (also accepts everyday synonyms like "mint" or "cracked"); defaults to "good" when omitted.
1506
+ * A shorthand string carrying a storage token also works, e.g. `"iPhone 14 Pro 256GB"`. THROWS
1507
+ * on a non-iPhone model (this capability covers Apple devices only today) or a missing storage
1508
+ * capacity — never guesses a capacity, because a wrong guess would silently price the wrong
1509
+ * device. `warnings` is always present and names anything dropped, including a source that
1510
+ * timed out or failed. `options.timeoutMs` sets the per-source budget (default 30000).
1511
+ */
1512
+ estimate(query: { model: string; storage: string; condition?: string } | string, options?: CallOptions): Promise<PhoneTradeInEstimate>;
1513
+ }
1514
+ }
1515
+
1516
+ declare namespace BowmarkCapability_pricing {
1517
+ // ── Check whether a product page quotes a different price to different shoppers — the unit's own declarations, verbatim ──
1518
+ interface PersonalizationPersona {
1519
+ label: string
1520
+ device?: "desktop" | "mobile" // defaults to "desktop"
1521
+ }
1522
+ interface PersonaRead {
1523
+ persona: string
1524
+ status: number
1525
+ ok: boolean
1526
+ price: { amount: number; currency: string } | null // integer minor units
1527
+ display: string | null // price formatted for a reader, e.g. "$499.99" — quote THIS, not price.amount
1528
+ source: "ld+json" | "none"
1529
+ error: string | null
1530
+ }
1531
+ interface PersonalizationCheck {
1532
+ url: string
1533
+ requestedUrl: string
1534
+ reads: PersonaRead[]
1535
+ personalized: boolean | null // null when fewer than 2 personas produced a comparable price
1536
+ warnings: string[]
1537
+ }
1538
+
1539
+ /**
1540
+ * Given a product page's url, fetches it once per simulated shopper (desktop vs mobile, each a
1541
+ * fresh cookie-less visit) and reports whether the price they'd see differs — never geography,
1542
+ * loyalty status or browsing history, which no session it holds can simulate.
1543
+ */
1544
+ interface Unit {
1545
+ /**
1546
+ * Reads one product page's price once per persona (default: desktop + mobile, each a fresh
1547
+ * cookie-less visit) and reports whether the personas saw different prices. If the caller
1548
+ * hasn't named a page yet, DO NOT ask them for one first — CALL this function immediately with
1549
+ * the worked example URL below (a real, live product page) so the caller sees a genuine
1550
+ * comparison before you ask which page to check next.
1551
+ */
1552
+ checkPersonalization(url: string, personas?: PersonalizationPersona[]): Promise<PersonalizationCheck>;
1553
+ }
1554
+ }
1555
+
924
1556
  declare namespace BowmarkCapability_products {
925
1557
  // ── Check a product page's price and stock availability — the unit's own declarations, verbatim ──
926
1558
  interface ProductAvailability {
@@ -1109,6 +1741,45 @@ type CallOptions = {
1109
1741
  }
1110
1742
  }
1111
1743
 
1744
+ declare namespace BowmarkCapability_school_shopping_basket {
1745
+ // ── Price a school-supply list across Target and Walmart — the unit's own declarations, verbatim ──
1746
+ interface BasketItemMatch {
1747
+ query: string
1748
+ title: string
1749
+ url: string
1750
+ price: { amount: number; currency: string } // integer minor units
1751
+ }
1752
+ interface RetailerBasket {
1753
+ total: { amount: number; currency: string } | null
1754
+ matched: BasketItemMatch[]
1755
+ unavailable: string[]
1756
+ }
1757
+ interface SchoolShoppingBasket {
1758
+ retailers: { target: RetailerBasket; walmart: RetailerBasket }
1759
+ warnings: string[]
1760
+ }
1761
+ type CallOptions = {
1762
+ timeoutMs?: number // per-provider budget in ms, default 30000, clamped to 1000-55000.
1763
+ // A provider slower than this is DROPPED from the results and
1764
+ // NAMED in warnings — never silently absent
1765
+ }
1766
+
1767
+ /**
1768
+ * Given a list of item queries (a school supply list), fans out to Target and Walmart search,
1769
+ * picks the cheapest in-stock match per item per retailer, and returns each retailer's basket
1770
+ * total plus which items neither retailer has in stock right now.
1771
+ */
1772
+ interface Unit {
1773
+ /**
1774
+ * Prices a multi-item shopping list at Target and Walmart, one basket total per retailer,
1775
+ * naming which items had no in-stock match anywhere. Never throws on one retailer being
1776
+ * unreachable — that retailer's basket is dropped and named in `warnings` instead; throws only
1777
+ * when BOTH retailers failed on every item.
1778
+ */
1779
+ priceList(args: { items: string[] }): Promise<SchoolShoppingBasket>;
1780
+ }
1781
+ }
1782
+
1112
1783
  declare namespace BowmarkCapability_search {
1113
1784
  // ── Web search — the unit's own declarations, verbatim ──
1114
1785
  type SearchResult = {
@@ -1344,20 +2015,21 @@ type CallOptions = {
1344
2015
  /**
1345
2016
  * Prices a domestic package across USPS and UPS for a ZIP-to-ZIP move, weight and optional
1346
2017
  * dimensions, and returns normalized quotes cheapest first — service name, price and transit
1347
- * days where the carrier states one. Direct APIs, no browser. Each caller brings their own
1348
- * USPS and/or UPS developer key; a carrier with no key attached is dropped and named in
1349
- * `warnings` rather than silently skipped.
2018
+ * days where the carrier states one. Direct JSON, no browser. USPS needs no key and always
2019
+ * quotes; UPS is BYOK, and a caller without a UPS developer key gets the USPS quotes plus a
2020
+ * `warnings` line naming what was dropped rather than a silent skip.
1350
2021
  */
1351
2022
  interface Unit {
1352
2023
  /**
1353
2024
  * Prices a domestic package — `{ fromZip: "20024", toZip: "10001", weightOz: 16 }` — across
1354
2025
  * every USPS and UPS service that quotes it, and returns `rates` cheapest first.
1355
- * `length`/`width`/`height` (inches) must be given together or omitted entirely. `warnings`
1356
- * names any carrier dropped for a timeout, an error, or a missing vendor key each caller
1357
- * brings their own USPS/UPS developer key; neither carrier is served off a fleet credential.
1358
- * THROWS `AllProvidersFailedError` when NEITHER carrier answered, because that is a different
1359
- * fact from "no service quotes this shipment" and only one of them means there truly is no
1360
- * rate. `options.timeoutMs` sets the per-carrier budget (default 30000).
2026
+ * `length`/`width`/`height` (inches) must be given together or omitted entirely. USPS needs no
2027
+ * API key. UPS is BYOK: bring your own UPS developer key or that leg is dropped and named in
2028
+ * `warnings` (it is never served off a fleet credential). `warnings` also names any carrier
2029
+ * dropped for a timeout or an error. THROWS `AllProvidersFailedError` when NEITHER carrier
2030
+ * answered, because that is a different fact from "no service quotes this shipment" and only
2031
+ * one of them means there truly is no rate. `options.timeoutMs` sets the per-carrier budget
2032
+ * (default 30000).
1361
2033
  */
1362
2034
  estimate(query: ShippingQuery, options?: CallOptions): Promise<ShippingEstimateResult>;
1363
2035
  }
@@ -1397,6 +2069,105 @@ interface TariffLookupResult {
1397
2069
  }
1398
2070
  }
1399
2071
 
2072
+ declare namespace BowmarkCapability_text_to_speech {
2073
+ // ── Text to speech — the unit's own declarations, verbatim ──
2074
+ interface SynthesizeOptions {
2075
+ voiceId?: string // an id cloneVoice returned, or the vendor's own default voice
2076
+ }
2077
+ interface SynthesizeResult {
2078
+ audioBase64: string // the synthesized audio, base64-encoded
2079
+ contentType: string // e.g. "audio/mpeg"
2080
+ voiceId: string
2081
+ warnings: string[]
2082
+ }
2083
+ interface CloneVoiceOptions {
2084
+ name: string
2085
+ sampleUrls: string[] // audio sample URLs to clone the voice from
2086
+ description?: string
2087
+ }
2088
+ interface CloneVoiceResult {
2089
+ voiceId: string // pass this as SynthesizeOptions.voiceId
2090
+ name: string
2091
+ requiresVerification: boolean
2092
+ warnings: string[]
2093
+ }
2094
+
2095
+ type CallOptions = {
2096
+ timeoutMs?: number // per-provider budget in ms, default 30000, clamped to 1000-55000.
2097
+ // A provider slower than this is DROPPED from the results and
2098
+ // NAMED in warnings — never silently absent
2099
+ }
2100
+
2101
+ /**
2102
+ * Converts text into spoken audio, and clones a new voice from caller-supplied audio samples —
2103
+ * narration, dubbing, accessibility, IVR prompts. Requires the caller's own ElevenLabs API key
2104
+ * (BYOK) — see the 🔑 note on this unit.
2105
+ */
2106
+ interface Unit {
2107
+ /**
2108
+ * Converts `text` into spoken audio, base64-encoded, in an existing or previously-cloned voice
2109
+ * (`options.voiceId`, defaulting to a standard voice). Requires an API key — a caller with
2110
+ * none gets a refusal naming what to provide. Call `cloneVoice` first to speak in a specific
2111
+ * cloned voice, then pass the returned `voiceId` here.
2112
+ */
2113
+ synthesize(text: string, options?: SynthesizeOptions): Promise<SynthesizeResult>;
2114
+
2115
+ /**
2116
+ * Creates a new voice cloned from one or more audio sample URLs (`options.sampleUrls`) —
2117
+ * downloads each sample and uploads it to the vendor's cloning endpoint. Returns the new
2118
+ * voice's id, which `synthesize`'s `voiceId` then accepts.
2119
+ */
2120
+ cloneVoice(options: CloneVoiceOptions): Promise<CloneVoiceResult>;
2121
+ }
2122
+ }
2123
+
2124
+ declare namespace BowmarkCapability_theme_park_tickets {
2125
+ // ── Theme park tickets — the unit's own declarations, verbatim ──
2126
+ type TicketOption = {
2127
+ title: string // e.g. "Park Ticket", "2027 Gold Pass"
2128
+ subtitle: string | null
2129
+ priceAmount: number | null // parsed from the site's own price text; null when it didn't parse
2130
+ currency: string // ISO 4217, always "USD" today
2131
+ priceModifier: string | null // e.g. "/ea*", "per night" — null for a flat one-time price
2132
+ wasPriceAmount: number | null // the struck-through "was" price, same parsing — null when absent
2133
+ buyUrl: string | null // where to actually buy — a checkout flow is out of scope here
2134
+ }
2135
+ type ThemeParkTicketsResult = {
2136
+ park: string // the park name or slug the caller passed
2137
+ parkSlug: string
2138
+ parkTitle: string
2139
+ groupLabel: string // the site's own section label, e.g. "Daily Tickets"
2140
+ tickets: TicketOption[]
2141
+ warnings: string[] // always present; empty when nothing was dropped
2142
+ }
2143
+
2144
+ type CallOptions = {
2145
+ timeoutMs?: number // per-provider budget in ms, default 30000, clamped to 1000-55000.
2146
+ // A provider slower than this is DROPPED from the results and
2147
+ // NAMED in warnings — never silently absent
2148
+ }
2149
+
2150
+ /**
2151
+ * Reads a Six Flags/Cedar Fair theme park's own ticket page and returns its current pass
2152
+ * prices — title, price, any "was" price and a buy link. Covers every park in the merged
2153
+ * portfolio (Six Flags Magic Mountain, Cedar Point, Kings Island, Knott's Berry Farm,
2154
+ * Carowinds and ~30 more) by name or sixflags.com slug. Disney, Universal and SeaWorld are not
2155
+ * covered yet. No login, no purchase.
2156
+ */
2157
+ interface Unit {
2158
+ /**
2159
+ * Looks up a Six Flags/Cedar Fair theme park by name (`"Cedar Point"`, `"Six Flags Magic
2160
+ * Mountain"`) or sixflags.com slug (`"cedarpoint"`, `"magicmountain"`) and reads its real,
2161
+ * current ticket/pass prices — `bowmark.theme_park_tickets.search("Cedar Point")` or `{ park:
2162
+ * "Cedar Point" }`. Each ticket carries its own title, subtitle, parsed price, any
2163
+ * struck-through "was" price and a buy link, exactly as the park's own site is publishing
2164
+ * today. Throws naming the closest matches when the park name does not resolve to one of the
2165
+ * ~33 parks in the covered portfolio.
2166
+ */
2167
+ search(park: string | { park: string }, options?: CallOptions): Promise<ThemeParkTicketsResult>;
2168
+ }
2169
+ }
2170
+
1400
2171
  declare namespace BowmarkCapability_weather {
1401
2172
  // ── Weather forecast for a place — the unit's own declarations, verbatim ──
1402
2173
 
@@ -1433,6 +2204,53 @@ interface ForecastResult {
1433
2204
  }
1434
2205
  }
1435
2206
 
2207
+ declare namespace BowmarkCapability_yoga_outfit_shopping {
2208
+ // ── Coordinated yoga outfit shopping — the unit's own declarations, verbatim ──
2209
+ interface YogaOutfitItem {
2210
+ source: string // "lululemon" | "beyondyoga" | "aloyoga"
2211
+ title: string
2212
+ url: string
2213
+ image: string | null // null when the leg carries none (lululemon's search rows never do)
2214
+ priceLow: number | null
2215
+ priceHigh: number | null
2216
+ currency: string | null // null when the leg doesn't publish one (lululemon's search door never does)
2217
+ inStock: boolean
2218
+ garmentType: string | null // the retailer's OWN published label, transcribed — null if the leg
2219
+ // doesn't publish one (lululemon never does; the Shopify legs' search
2220
+ // door doesn't either, only getProduct's REST door does)
2221
+ colorFamily: string | null // shared-colour evidence — null for lululemon
2222
+ fabrics: string[] // retailer-published fabric names — [] for lululemon
2223
+ }
2224
+ interface YogaOutfitSearchResult {
2225
+ items: YogaOutfitItem[]
2226
+ warnings: string[] // always present. Names a retailer that timed out or errored;
2227
+ // ALL THREE dead throws instead of returning an empty result
2228
+ }
2229
+ type CallOptions = {
2230
+ timeoutMs?: number // per-provider budget in ms, default 30000, clamped to 1000-55000.
2231
+ // A provider slower than this is DROPPED from the results and
2232
+ // NAMED in warnings — never silently absent
2233
+ }
2234
+
2235
+ /**
2236
+ * Search for a coordinated yoga outfit across lululemon, Beyond Yoga and Alo Yoga in one call
2237
+ * — one normalized row shape per product, with each retailer's own published garment type,
2238
+ * colour family and fabric names carried through so a caller can spot a plausible
2239
+ * top-and-bottom pair. Never a claim that any retailer sold two items as a set.
2240
+ */
2241
+ interface Unit {
2242
+ /**
2243
+ * Fans out one free-text query to lululemon, Beyond Yoga and Alo Yoga in parallel and returns
2244
+ * every match as one normalized row per product. `limit` (default 8, max 24) applies PER
2245
+ * RETAILER, so a caller asking for 5 gets up to 5 rows from EACH of the three, not 5 total. A
2246
+ * retailer that times out or errors is named in `warnings`, never silently absent; all three
2247
+ * failing throws `AllProvidersFailedError` instead of returning an empty result, which would
2248
+ * be indistinguishable from 'nobody sells this'.
2249
+ */
2250
+ search(query: string, options?: { limit?: number; timeoutMs?: number }): Promise<YogaOutfitSearchResult>;
2251
+ }
2252
+ }
2253
+
1436
2254
  declare namespace BowmarkProvider_aa {
1437
2255
  // ── American Airlines — the unit's own declarations, verbatim ──
1438
2256
  interface aaFlight {
@@ -1662,6 +2480,57 @@ interface aaMaxCheckedBagsRule {
1662
2480
  }
1663
2481
  }
1664
2482
 
2483
+ declare namespace BowmarkProvider_aauto {
2484
+ // ── 1A Auto — the unit's own declarations, verbatim ──
2485
+ interface AautoSearchProduct {
2486
+ id: string;
2487
+ title: string;
2488
+ brand: string;
2489
+ category: string;
2490
+ price: number;
2491
+ url: string;
2492
+ image: string | null;
2493
+ }
2494
+ interface AautoSearchResult {
2495
+ query: string;
2496
+ /** The site's own reported match count — can exceed products.length. */
2497
+ totalResults: number;
2498
+ products: AautoSearchProduct[];
2499
+ }
2500
+ interface AautoProduct {
2501
+ id: string;
2502
+ title: string;
2503
+ brand: string;
2504
+ category: string;
2505
+ price: number;
2506
+ sku: string | null;
2507
+ inStock: boolean;
2508
+ description: string;
2509
+ image: string | null;
2510
+ url: string;
2511
+ }
2512
+
2513
+ /**
2514
+ * 1A Auto's DIY replacement-parts catalog — search results and one product's real price, stock
2515
+ * and description — read off the live storefront.
2516
+ */
2517
+ interface Unit {
2518
+ /**
2519
+ * Reads 1A Auto's own search-results page for `query` — real price, brand, category and
2520
+ * product URL per row, plus the site's own total-match count. `limit` truncates the first
2521
+ * results page (the site itself paginates; this reads only the first page).
2522
+ */
2523
+ search(query: string, opts?: { limit?: number }): Promise<AautoSearchResult>;
2524
+
2525
+ /**
2526
+ * Reads one product page by the URL search() returns (absolute or a site-relative path) —
2527
+ * title, brand, SKU, price, live stock status and description text. THROWS if the page does
2528
+ * not carry the site's own product data block.
2529
+ */
2530
+ getProduct(url: string): Promise<AautoProduct>;
2531
+ }
2532
+ }
2533
+
1665
2534
  declare namespace BowmarkProvider_abercrombie {
1666
2535
  // ── Abercrombie & Fitch — the unit's own declarations, verbatim ──
1667
2536
  interface abercrombieSizeOption {
@@ -1978,6 +2847,79 @@ interface AjmadisonSearchResult {
1978
2847
  }
1979
2848
  }
1980
2849
 
2850
+ declare namespace BowmarkProvider_allied {
2851
+ // ── Allied Van Lines — the unit's own declarations, verbatim ──
2852
+ interface AlliedSupplyLine {
2853
+ item: string;
2854
+ quantity: number | null;
2855
+ }
2856
+ interface AlliedRoomSupplies {
2857
+ room: string;
2858
+ supplies: AlliedSupplyLine[];
2859
+ }
2860
+ interface AlliedPackingEstimate {
2861
+ totalSupplies: AlliedSupplyLine[];
2862
+ byRoom: AlliedRoomSupplies[];
2863
+ }
2864
+ interface AlliedPackingCalculatorInput {
2865
+ yearsInHome?: "lessThan5" | "5to10" | "over10";
2866
+ cabinetsClosets?: "clutterFree" | "packRat";
2867
+ kitchen?: boolean;
2868
+ pantry?: boolean;
2869
+ diningRoom?: boolean;
2870
+ livingRoom?: boolean;
2871
+ familyRoom?: boolean;
2872
+ homeOffice?: boolean;
2873
+ bedrooms?: number;
2874
+ garageBays?: number;
2875
+ storedAttic?: boolean;
2876
+ storageFacility?: boolean;
2877
+ otherRooms?: number;
2878
+ }
2879
+
2880
+ /**
2881
+ * Runs Allied Van Lines' own Packing Calculator — takes which rooms are moving (no name, email
2882
+ * or phone) and returns a real, server-computed whole-house and per-room packing-supply
2883
+ * estimate (cartons, tape, paper). Allied's separate 'quote' flow is a sales-lead form with no
2884
+ * computed price and is out of scope; this is the one part of allied.com that answers a
2885
+ * question with a number.
2886
+ */
2887
+ interface Unit {
2888
+ /**
2889
+ * Allied Van Lines' own Packing Calculator: pass which rooms are moving (kitchen, bedrooms
2890
+ * count, garage bays, etc — no identity required) and get back a real per-room and whole-house
2891
+ * estimate of boxes, tape and paper. At least one room must be set, matching the site's own
2892
+ * validation.
2893
+ */
2894
+ estimatePackingSupplies(input: AlliedPackingCalculatorInput): Promise<AlliedPackingEstimate>;
2895
+ }
2896
+ }
2897
+
2898
+ declare namespace BowmarkProvider_alphavantage {
2899
+ // ── Alpha Vantage — the unit's own declarations, verbatim ──
2900
+ interface AlphavantageSignUpDetails {
2901
+ organization: string;
2902
+ email: string;
2903
+ occupation?: "Investor" | "Software Developer" | "Educator" | "Student" | "I am from the Trading Agents project on Github" | "Other";
2904
+ }
2905
+ interface AlphavantageSignUpResult {
2906
+ apiKey: string;
2907
+ message: string;
2908
+ }
2909
+
2910
+ /**
2911
+ * alphavantage.co's own free-tier signup — issues a real, usable stock-data API key instantly,
2912
+ * no email verification.
2913
+ */
2914
+ interface Unit {
2915
+ /**
2916
+ * Runs alphavantage.co's real signup flow and returns a genuine, immediately usable free-tier
2917
+ * stock-data API key — no email verification, no CAPTCHA.
2918
+ */
2919
+ signUp(details: { organization: string, email: string, occupation?: string }): Promise<AlphavantageSignUpResult>;
2920
+ }
2921
+ }
2922
+
1981
2923
  declare namespace BowmarkProvider_americanstandard {
1982
2924
  // ── American Standard Heating & Air Conditioning — the unit's own declarations, verbatim ──
1983
2925
  type AmericanStandardTierName = "Platinum" | "Gold" | "Silver";
@@ -2168,6 +3110,11 @@ interface AppleProductPage {
2168
3110
  url: string;
2169
3111
  products: AppleProduct[];
2170
3112
  }
3113
+ interface AppleTradeInEstimate {
3114
+ device: string;
3115
+ upToUsd: number;
3116
+ sourceUrl: string;
3117
+ }
2171
3118
 
2172
3119
  /** apple.com's own site search and product pages — no API, no login, no browser. */
2173
3120
  interface Unit {
@@ -2182,6 +3129,15 @@ interface AppleProductPage {
2182
3129
  * every schema.org Product block it publishes.
2183
3130
  */
2184
3131
  getProduct(urlOrPath: string): Promise<AppleProductPage>;
3132
+
3133
+ /**
3134
+ * Reads apple.com's own trade-in value table and returns the CEILING ("up to $X")
3135
+ * cash-or-credit estimate it publishes for one device — a human name ("iPhone 14 Pro") or the
3136
+ * slug `phone_trade_in` already normalizes to ("iphone-14-pro") both resolve. Apple publishes
3137
+ * ONE number per device, not a matrix by storage or condition: the value is Apple's advertised
3138
+ * best-case figure, not a quote for a specific unit's actual condition.
3139
+ */
3140
+ getTradeInEstimate(model: string): Promise<AppleTradeInEstimate>;
2185
3141
  }
2186
3142
  }
2187
3143
 
@@ -3011,6 +3967,47 @@ interface BaublebarCheckoutLink {
3011
3967
  }
3012
3968
  }
3013
3969
 
3970
+ declare namespace BowmarkProvider_bcparkscamping {
3971
+ // ── BC Parks Camping (Discover Camping) — the unit's own declarations, verbatim ──
3972
+ interface BcParksCampground {
3973
+ resourceLocationId: number;
3974
+ name: string;
3975
+ fullName: string;
3976
+ }
3977
+ interface BcParksSiteAvailability {
3978
+ resourceId: number;
3979
+ siteName: string | null;
3980
+ nightsRequested: number;
3981
+ nightsAvailable: number;
3982
+ fullyAvailable: boolean;
3983
+ }
3984
+ interface BcParksAvailabilityResult {
3985
+ resourceLocationId: number;
3986
+ startDate: string;
3987
+ endDate: string;
3988
+ nights: number;
3989
+ sites: BcParksSiteAvailability[];
3990
+ }
3991
+
3992
+ /**
3993
+ * camping.bcparks.ca's own reservation API (Discover Camping) — find a provincial park
3994
+ * campground by name, then read its real per-site, per-night availability for a stay.
3995
+ */
3996
+ interface Unit {
3997
+ /**
3998
+ * Given a free-text substring, returns every BC Parks campground whose short or full name
3999
+ * matches, with its resourceLocationId for checkAvailability.
4000
+ */
4001
+ searchCampgrounds(query: string): Promise<BcParksCampground[]>;
4002
+
4003
+ /**
4004
+ * Given a campground's resourceLocationId and a date range, returns each individual campsite's
4005
+ * real per-night availability for that stay.
4006
+ */
4007
+ checkAvailability(arg: { resourceLocationId: number, startDate: string, endDate: string }): Promise<BcParksAvailabilityResult>;
4008
+ }
4009
+ }
4010
+
3014
4011
  declare namespace BowmarkProvider_beatthebomb {
3015
4012
  // ── Beat The Bomb — the unit's own declarations, verbatim ──
3016
4013
  interface BeatthebombMission {
@@ -3076,6 +4073,31 @@ interface BeatthebombPriceQuote {
3076
4073
  }
3077
4074
  }
3078
4075
 
4076
+ declare namespace BowmarkProvider_bennington {
4077
+ // ── Bennington Marine — the unit's own declarations, verbatim ──
4078
+ interface BenningtonModel {
4079
+ slug: string;
4080
+ name: string;
4081
+ url: string;
4082
+ lengthOverall: string | null;
4083
+ beam: string | null;
4084
+ specText: string;
4085
+ }
4086
+
4087
+ /**
4088
+ * Bennington's pontoon/tritoon model catalog — length, beam and standard-feature specs read
4089
+ * off each model's own page (S, SX today).
4090
+ */
4091
+ interface Unit {
4092
+ /**
4093
+ * Lists Bennington's pontoon/tritoon model series with their published length overall, beam
4094
+ * and feature specs, read off each model's own page. Pass { model: "sx" } for one model, or
4095
+ * omit args for every known model.
4096
+ */
4097
+ search(args?: { model?: string }): Promise<{ models: BenningtonModel[]; warnings: string[] }>;
4098
+ }
4099
+ }
4100
+
3079
4101
  declare namespace BowmarkProvider_bestbuy {
3080
4102
  // ── Best Buy — the unit's own declarations, verbatim ──
3081
4103
  interface bestbuyProduct {
@@ -4179,6 +5201,44 @@ interface CaliProductDetail extends CaliProduct {
4179
5201
  }
4180
5202
  }
4181
5203
 
5204
+ declare namespace BowmarkProvider_camelcamelcamel {
5205
+ // ── camelcamelcamel — the unit's own declarations, verbatim ──
5206
+ interface CamelPriceStat {
5207
+ price: number | null;
5208
+ date: string | null;
5209
+ }
5210
+
5211
+ interface CamelPriceTypeStats {
5212
+ lowestEver: CamelPriceStat;
5213
+ highestEver: CamelPriceStat;
5214
+ current: CamelPriceStat;
5215
+ average: number | null;
5216
+ }
5217
+
5218
+ interface CamelPriceHistory {
5219
+ asin: string;
5220
+ productTitle: string;
5221
+ amazon: CamelPriceTypeStats;
5222
+ thirdPartyNew: CamelPriceTypeStats;
5223
+ thirdPartyUsed: CamelPriceTypeStats;
5224
+ chartUrl: string;
5225
+ }
5226
+
5227
+ /**
5228
+ * Independent Amazon price-history tracker — real lowest/highest/current/average price per
5229
+ * item, each dated, so a claimed 'sale' can be checked against what the item actually sold
5230
+ * for.
5231
+ */
5232
+ interface Unit {
5233
+ /**
5234
+ * Reads camelcamelcamel's independently-tracked Amazon price history for one ASIN — the site's
5235
+ * own lowest-ever/highest-ever/current/average figures, each dated, for the Amazon,
5236
+ * 3rd-party-new and 3rd-party-used price types, plus the full-history chart image URL.
5237
+ */
5238
+ getPriceHistory(asinOrUrl: string): Promise<CamelPriceHistory>;
5239
+ }
5240
+ }
5241
+
4182
5242
  declare namespace BowmarkProvider_cancer {
4183
5243
  // ── National Cancer Institute (cancer.gov) — the unit's own declarations, verbatim ──
4184
5244
  type cancerCenterDesignation =
@@ -5944,6 +7004,32 @@ interface DeckedCabSideOptionResult {
5944
7004
  }
5945
7005
  }
5946
7006
 
7007
+ declare namespace BowmarkProvider_developersopenai {
7008
+ // ── OpenAI Developer Docs — the unit's own declarations, verbatim ──
7009
+ interface DevelopersOpenaiDocPage {
7010
+ path: string;
7011
+ title: string;
7012
+ canonicalUrl: string;
7013
+ body: string;
7014
+ }
7015
+
7016
+ /**
7017
+ * OpenAI's own developer documentation site. getDocPage reads one docs page (title, canonical
7018
+ * URL, full article text) by path — e.g. /api/docs/mcp for the remote MCP server / OAuth
7019
+ * connector guide.
7020
+ */
7021
+ interface Unit {
7022
+ /**
7023
+ * Reads one page of OpenAI's developer docs and returns its title, canonical URL and full
7024
+ * article text. Pass `path` (e.g. "/api/docs/mcp") to pick a page; omitting it defaults to
7025
+ * "/api/docs/mcp" — the guide for building a remote MCP server, connecting it to ChatGPT/the
7026
+ * API, and its OAuth-based auth section (see the "Handle authentication" and "Connect in
7027
+ * ChatGPT" sections of the returned body).
7028
+ */
7029
+ getDocPage(args?: object): Promise<DevelopersOpenaiDocPage>;
7030
+ }
7031
+ }
7032
+
5947
7033
  declare namespace BowmarkProvider_dice {
5948
7034
  // ── Dice — the unit's own declarations, verbatim ──
5949
7035
  interface DiceJobDetails {
@@ -6510,6 +7596,44 @@ interface ebayItem {
6510
7596
  }
6511
7597
  }
6512
7598
 
7599
+ declare namespace BowmarkProvider_elevenlabs {
7600
+ // ── ElevenLabs — the unit's own declarations, verbatim ──
7601
+ interface elevenlabsSynthesisResult {
7602
+ audioBase64: string;
7603
+ contentType: string;
7604
+ voiceId: string;
7605
+ }
7606
+ interface elevenlabsVoice {
7607
+ voiceId: string;
7608
+ name: string;
7609
+ requiresVerification: boolean;
7610
+ }
7611
+
7612
+ /**
7613
+ * ElevenLabs' own documented REST API (api.elevenlabs.io) — converts text into spoken audio in
7614
+ * an existing or newly-cloned voice, and clones a new voice from caller-supplied audio samples
7615
+ * (Instant Voice Cloning). Requires an ElevenLabs API key.
7616
+ */
7617
+ interface Unit {
7618
+ /**
7619
+ * Converts `text` into spoken audio via ElevenLabs' documented Text to Speech API, returning
7620
+ * it base64-encoded alongside the vendor's content type (MP3 by default). `voiceId` selects an
7621
+ * existing or previously-cloned ElevenLabs voice (default "21m00Tcm4TlvDq8ikWAM", ElevenLabs'
7622
+ * own "Rachel"); `modelId` selects the ElevenLabs model (default "eleven_multilingual_v2").
7623
+ * Requires an ElevenLabs API key — see this provider's `auth`.
7624
+ */
7625
+ synthesize(args: { text: string; voiceId?: string; modelId?: string }): Promise<elevenlabsSynthesisResult>;
7626
+
7627
+ /**
7628
+ * Creates a new ElevenLabs voice cloned from one or more caller-supplied audio sample URLs
7629
+ * (Instant Voice Cloning) — downloads each sample and uploads it to ElevenLabs' `voices/add`.
7630
+ * Returns the new voice's id, which `synthesize`'s `voiceId` then accepts. Requires an
7631
+ * ElevenLabs API key — see this provider's `auth`.
7632
+ */
7633
+ cloneVoice(args: { name: string; sampleUrls: string[]; description?: string }): Promise<elevenlabsVoice>;
7634
+ }
7635
+ }
7636
+
6513
7637
  declare namespace BowmarkProvider_embroker {
6514
7638
  // ── Embroker — the unit's own declarations, verbatim ──
6515
7639
  interface EmbrokerCoverageCatalog {
@@ -7862,10 +8986,11 @@ interface fredObservations {
7862
8986
  seriesId: string;
7863
8987
  /** The transform FRED reports having applied: "lin" (none), "pc1", "pch", … */
7864
8988
  units: string;
7865
- observationStart: string;
7866
- observationEnd: string;
7867
- realtimeStart: string;
7868
- realtimeEnd: string;
8989
+ observationStart: string | null;
8990
+ observationEnd: string | null;
8991
+ /** null: the public CSV has no vintage envelope. */
8992
+ realtimeStart: string | null;
8993
+ realtimeEnd: string | null;
7869
8994
  count: number;
7870
8995
  observations: fredObservation[];
7871
8996
  }
@@ -7917,10 +9042,10 @@ interface fredObservations {
7917
9042
  * `pch`, `chg`, `log` and the rest of FRED's ten codes), and `frequency` with
7918
9043
  * `aggregationMethod` collapses a series to a coarser period (`{ frequency: "a",
7919
9044
  * aggregationMethod: "avg" }` turns the monthly unemployment rate into annual averages). The
7920
- * result carries the transform FRED reports having applied and the vintage it served, so a
7921
- * caller can tell what they actually got. This is the function to call once
7922
- * `searchSeries`/`getSeriesInfo` has identified the right series id — e.g. A191RL1Q225SBEA for
7923
- * the US real GDP growth rate.
9045
+ * result carries the applied transform and the served row bounds; its realtime fields are
9046
+ * `null` because the keyless CSV publishes no vintage envelope. This is the function to call
9047
+ * once `searchSeries`/`getSeriesInfo` has identified the right series id — e.g.
9048
+ * A191RL1Q225SBEA for the US real GDP growth rate.
7924
9049
  */
7925
9050
  getSeriesObservations(args: string | { seriesId: string; from?: string; to?: string; units?: string; frequency?: string; aggregationMethod?: string }): Promise<fredObservations>;
7926
9051
 
@@ -8410,10 +9535,29 @@ interface GithubListCommitsResult {
8410
9535
  commits: GithubCommit[];
8411
9536
  warnings: string[];
8412
9537
  }
9538
+ interface GithubRelease {
9539
+ tag: string;
9540
+ name: string;
9541
+ draft: boolean;
9542
+ prerelease: boolean;
9543
+ createdAt: string;
9544
+ publishedAt: string | null;
9545
+ notes: string;
9546
+ url: string;
9547
+ }
9548
+ interface GithubListReleasesOptions {
9549
+ per_page?: number;
9550
+ page?: number;
9551
+ }
9552
+ interface GithubListReleasesResult {
9553
+ releases: GithubRelease[];
9554
+ warnings: string[];
9555
+ }
8413
9556
 
8414
9557
  /**
8415
9558
  * GitHub's own REST API, keyless. Built: a public repo's commit log (sha, author, date,
8416
- * message), paged and windowed. Declared, not yet built: repo metadata (getRepo).
9559
+ * message), paged and windowed; a public repo's release history (tag, name, dates, release
9560
+ * notes text), paged. Declared, not yet built: repo metadata (getRepo).
8417
9561
  */
8418
9562
  interface Unit {
8419
9563
  /**
@@ -8428,6 +9572,19 @@ interface GithubListCommitsResult {
8428
9572
  * throw.
8429
9573
  */
8430
9574
  listCommits(owner: string, repo: string, options?: GithubListCommitsOptions): Promise<GithubListCommitsResult>;
9575
+
9576
+ /**
9577
+ * Returns a public repo's release history off GitHub's own unauthenticated REST releases
9578
+ * endpoint — each release's tag, name, draft/prerelease flags, created/published dates, its
9579
+ * release notes text (`notes`) and its own github.com URL. This is a project's own release
9580
+ * notes documentation — `listReleases("microsoft", "TypeScript")` returns the TypeScript
9581
+ * compiler's. `options.per_page` (GitHub's own 1-100 ceiling, default 30) and `options.page`
9582
+ * page through history, newest first (GitHub's own ordering). Unauthenticated calls are capped
9583
+ * at 60 requests/hour per IP, the same shared ceiling `listCommits` spends against. THROWS on
9584
+ * an unknown owner/repo (404) or a rate limit (403/429); a repo with no releases yet returns
9585
+ * `releases: []`, not a throw.
9586
+ */
9587
+ listReleases(owner: string, repo: string, options?: GithubListReleasesOptions): Promise<GithubListReleasesResult>;
8431
9588
  }
8432
9589
  }
8433
9590
 
@@ -8459,6 +9616,37 @@ interface GlassesusaProduct {
8459
9616
  }
8460
9617
  }
8461
9618
 
9619
+ declare namespace BowmarkProvider_goodway {
9620
+ // ── Goodway Technologies — the unit's own declarations, verbatim ──
9621
+ interface GoodwayProductSummary {
9622
+ sku: string;
9623
+ title: string;
9624
+ url: string;
9625
+ price: string | null; // null = call for price / quote required
9626
+ }
9627
+ interface GoodwayProduct extends GoodwayProductSummary {
9628
+ purchaseType: "buy" | "quote";
9629
+ }
9630
+
9631
+ /**
9632
+ * Goodway's own pressure-washer catalog — real listed prices, or a quote-required flag for
9633
+ * call-for-price units, and the site's own product page as the buy/quote handoff.
9634
+ */
9635
+ interface Unit {
9636
+ /**
9637
+ * Reads Goodway's pressure-washer catalog grid — every listed model, its SKU, its live price
9638
+ * (or null if quote-required) and its product page.
9639
+ */
9640
+ searchProducts(): Promise<GoodwayProductSummary[]>;
9641
+
9642
+ /**
9643
+ * Reads one product's detail page for its real current price and whether it buys online or
9644
+ * needs a written quote.
9645
+ */
9646
+ getProduct(arg0: { slug: string }): Promise<GoodwayProduct>;
9647
+ }
9648
+ }
9649
+
8462
9650
  declare namespace BowmarkProvider_google_flights {
8463
9651
  // ── Google Flights — the unit's own declarations, verbatim ──
8464
9652
  interface GoogleFlightQuery {
@@ -10107,6 +11295,10 @@ interface HobieModelSummary {
10107
11295
  name: string;
10108
11296
  url: string;
10109
11297
  }
11298
+ interface HobieKayakModelList {
11299
+ total_models: number;
11300
+ models: HobieModelSummary[];
11301
+ }
10110
11302
  interface HobieModelColor {
10111
11303
  color: string;
10112
11304
  upc: string;
@@ -10157,6 +11349,12 @@ interface HobieLocalAvailability {
10157
11349
  */
10158
11350
  listModels(): Promise<HobieModelSummary[]>;
10159
11351
 
11352
+ /**
11353
+ * Returns Hobie's live kayak-model list plus total_models. To answer a count request, call it
11354
+ * with run; do not infer or paraphrase the count from this description.
11355
+ */
11356
+ listKayakModels(): Promise<HobieKayakModelList>;
11357
+
10160
11358
  /**
10161
11359
  * Reads one model's real buildable colors, each paired with the exact UPC the local-inventory
10162
11360
  * widget is keyed on, plus the site's own default color.
@@ -10388,6 +11586,23 @@ interface IbuypowerBenchmark {
10388
11586
  games: Record<string, IbuypowerGameFps>; // keyed by the titles iBUYPOWER benchmarks
10389
11587
  }
10390
11588
 
11589
+ interface IbuypowerRecommendation {
11590
+ source: "prebuilt" | "configurator";
11591
+ slug: string;
11592
+ name: string;
11593
+ url: string;
11594
+ price: string | null;
11595
+ priceValue: number | null;
11596
+ timeSpyOverall: number | null; // null when the site has not benchmarked this pair
11597
+ scorePerDollar: number | null; // timeSpyOverall / priceValue — highest first
11598
+ inStock: boolean; // a configurator is always buildable to order
11599
+ }
11600
+
11601
+ interface IbuypowerRecommendArgs {
11602
+ budget_max: number; // the hard ceiling; nothing over it is returned
11603
+ use_case?: string; // accepted, does not change the ranking — see recommendGamingPc's summary
11604
+ }
11605
+
10391
11606
  /**
10392
11607
  * Gaming and workstation PCs from iBUYPOWER — the base configurators with their current
10393
11608
  * starting prices, every component option on one with its exact price difference, the RDY
@@ -10451,6 +11666,18 @@ interface IbuypowerBenchmark {
10451
11666
  * to the Time Spy score of a pair it does have.
10452
11667
  */
10453
11668
  getBenchmark(cpuBench: string, gpuBench: string): Promise<IbuypowerBenchmark | null>;
11669
+
11670
+ /**
11671
+ * Recommends buildable PCs at or under budget_max, drawn from BOTH product lines — in-stock
11672
+ * RDY prebuilts (their own listed Time Spy score) and base configurators at their stock
11673
+ * loadout (priced from getSystem, benchmarked from getBenchmark for the cheapest ~5 affordable
11674
+ * ones) — ranked by 3DMark Time Spy score per dollar, best first. `use_case` is accepted but
11675
+ * does not change the ranking: iBUYPOWER publishes only one axis of measured performance, and
11676
+ * every recommendation is already ranked on it. THROWS when nothing in stock or buildable fits
11677
+ * the budget. `warnings` names any configurator that stopped resolving mid-call; it is empty
11678
+ * on a healthy call.
11679
+ */
11680
+ recommendGamingPc(args: IbuypowerRecommendArgs): Promise<{ recommendations: IbuypowerRecommendation[]; warnings: string[] }>;
10454
11681
  }
10455
11682
  }
10456
11683
 
@@ -11635,6 +12862,42 @@ interface IsllcSearchCommunitiesResult {
11635
12862
  }
11636
12863
  }
11637
12864
 
12865
+ declare namespace BowmarkProvider_istanbulkart {
12866
+ // ── İstanbulkart — the unit's own declarations, verbatim ──
12867
+ interface IstanbulkartCardFee {
12868
+ cardTypeName: string; // the site's own Turkish label, e.g. "İstanbulkart"
12869
+ feeTRY: number | null;
12870
+ visaIssuanceFeeTRY: number | null;
12871
+ }
12872
+ interface IstanbulkartTouristPass {
12873
+ days: number; // 1, 3, 5, 7 or 15 on the table measured 2026-08-29
12874
+ priceTRY: number;
12875
+ }
12876
+
12877
+ /**
12878
+ * Istanbul public transit: İstanbulkart card purchase/personalization fees and the İstanbul
12879
+ * City Card tourist unlimited-ride pass tariffs, read from istanbulkart.istanbul's own
12880
+ * price-and-limits data.
12881
+ */
12882
+ interface Unit {
12883
+ /**
12884
+ * Reads the current İstanbulkart fee table — the purchase price of every card variant
12885
+ * (İstanbulkart, İstanbulkart Plus, the discounted/free variants, the limited-ride geç
12886
+ * tickets, SMS QR) plus each variant's personalization/visa-issuance fee, in TRY, straight off
12887
+ * istanbulkart.istanbul's own price-and-limits page.
12888
+ */
12889
+ getCardFees(): Promise<IstanbulkartCardFee[]>;
12890
+
12891
+ /**
12892
+ * Reads the İstanbul City Card tariff table — the 1/3/5/7/15-day unlimited-ride visitor pass
12893
+ * prices, in TRY, straight off istanbulkart.istanbul's own price-and-limits page. This is the
12894
+ * tourist unlimited-pass answer: İstanbul City Card is the İstanbulkart variant sold
12895
+ * specifically to visitors for unlimited transit over a fixed number of days.
12896
+ */
12897
+ getTouristPassFares(): Promise<IstanbulkartTouristPass[]>;
12898
+ }
12899
+ }
12900
+
11638
12901
  declare namespace BowmarkProvider_ivoryhomes {
11639
12902
  // ── Ivory Homes — the unit's own declarations, verbatim ──
11640
12903
  // Ivory Homes' OWN shapes — not a capability contract.
@@ -12300,6 +13563,15 @@ interface KompanSparePartsDocuments {
12300
13563
  * package" PDF URL.
12301
13564
  */
12302
13565
  getSparePartsDocuments(variantId: string, purchaseDate: string): Promise<KompanSparePartsDocuments>;
13566
+
13567
+ /**
13568
+ * A single call keyed by `product_no` that reports whether a playground product has spare
13569
+ * parts listed — the same search searchProduct() runs, reshaped to a one-argument object so a
13570
+ * caller does not need to know the two-step (search, then fetch documents per variant)
13571
+ * internal shape just to ask "does this product have spare parts". `found: false` is a real
13572
+ * answer, not an error.
13573
+ */
13574
+ searchPlaygroundSpareParts(args: { product_no: string; region?: KompanRegion }): Promise<KompanSearchResult>;
12303
13575
  }
12304
13576
  }
12305
13577
 
@@ -12887,6 +14159,42 @@ interface LiquiddeathLiveCart {
12887
14159
  }
12888
14160
  }
12889
14161
 
14162
+ declare namespace BowmarkProvider_liquidspace {
14163
+ // ── LiquidSpace — the unit's own declarations, verbatim ──
14164
+ interface LiquidspaceWorkspaceRow {
14165
+ venueName: string;
14166
+ venueAddress: string;
14167
+ workspaceName: string; // e.g. "Coworking Daypass"
14168
+ scenario: string | null; // LiquidSpace's own category label, e.g. "Coworking"
14169
+ capacity: number | null;
14170
+ priceAmount: string; // e.g. "$45"
14171
+ priceAmountValue: number;
14172
+ priceDescription: string; // "/day-pass" for every row this function returns
14173
+ bookingUrl: string; // this workspace's own LiquidSpace page
14174
+ latitude: number;
14175
+ longitude: number;
14176
+ averageRating: number | null;
14177
+ ratesCount: number | null;
14178
+ }
14179
+
14180
+ /**
14181
+ * LiquidSpace's own city-listing pages — day-pass coworking pricing and availability across
14182
+ * WeWork, Industrious, Regus/Spaces and independent operators in one place, read directly from
14183
+ * the site's own embedded listing data, no browser.
14184
+ */
14185
+ interface Unit {
14186
+ /**
14187
+ * Reads LiquidSpace's own city-listing page for `state` (a US state abbreviation, e.g. "NY")
14188
+ * and `city` (e.g. "New York") and returns every workspace priced as a single-day coworking
14189
+ * pass — venue name/address, the workspace's own display name and category, price, capacity,
14190
+ * coordinates and rating, plus a direct link to book it (booking itself needs a signed-in
14191
+ * LiquidSpace account and is out of scope). Returns `[]` when the city page carries no
14192
+ * day-pass inventory today — a real, complete answer, not a failure.
14193
+ */
14194
+ search(input: { city: string; state: string }): Promise<LiquidspaceWorkspaceRow[]>;
14195
+ }
14196
+ }
14197
+
12890
14198
  declare namespace BowmarkProvider_littlewordsproject {
12891
14199
  // ── Little Words Project — the unit's own declarations, verbatim ──
12892
14200
  interface LittleWordsProjectOption {
@@ -13649,6 +14957,37 @@ interface mailchimpPlanPricing {
13649
14957
  }
13650
14958
  }
13651
14959
 
14960
+ declare namespace BowmarkProvider_marketplace_visualstudio {
14961
+ // ── Visual Studio Code Marketplace — the unit's own declarations, verbatim ──
14962
+ interface marketplaceExtensionStats {
14963
+ extensionId: string;
14964
+ displayName: string;
14965
+ publisherDisplayName: string;
14966
+ shortDescription: string;
14967
+ version: string;
14968
+ lastUpdated: string;
14969
+ installCount: number;
14970
+ averageRating: number | null;
14971
+ ratingCount: number;
14972
+ }
14973
+
14974
+ /**
14975
+ * The VS Code Marketplace — look up one extension by its publisher.name id and get its install
14976
+ * count, rating and latest version, the numbers the extension's own Marketplace page shows.
14977
+ */
14978
+ interface Unit {
14979
+ /**
14980
+ * Looks up one VS Code extension by its "publisher.name" id — the id shown in the extension's
14981
+ * own Marketplace URL (e.g. "ms-python.python" for
14982
+ * marketplace.visualstudio.com/items?itemName=ms-python.python) and in `code
14983
+ * --list-extensions` — and returns its install count, average rating, rating count, latest
14984
+ * published version and when that version last updated. Throws if the id does not match any
14985
+ * published extension.
14986
+ */
14987
+ getExtensionStats(extensionId: string): Promise<marketplaceExtensionStats>;
14988
+ }
14989
+ }
14990
+
13652
14991
  declare namespace BowmarkProvider_marriott {
13653
14992
  // ── Marriott — the unit's own declarations, verbatim ──
13654
14993
  interface MarriottHotelListing {
@@ -13801,6 +15140,39 @@ interface mcdonaldsFindStoresResult {
13801
15140
  }
13802
15141
  }
13803
15142
 
15143
+ declare namespace BowmarkProvider_mcp_registry {
15144
+ // ── MCP Registry — the unit's own declarations, verbatim ──
15145
+ interface mcpRegistryEntry {
15146
+ name: string;
15147
+ title: string | null;
15148
+ description: string;
15149
+ version: string;
15150
+ repositoryUrl: string | null;
15151
+ remoteUrl: string | null;
15152
+ status: string;
15153
+ }
15154
+
15155
+ /**
15156
+ * The official Model Context Protocol server registry — search or browse published MCP servers
15157
+ * by name, and get each one's install/connect URL.
15158
+ */
15159
+ interface Unit {
15160
+ /**
15161
+ * Lists or searches the official MCP server registry (registry.modelcontextprotocol.io) — the
15162
+ * community-run directory of published Model Context Protocol servers, the same catalogue the
15163
+ * registry's own web UI browses. `query` substring-matches the registry NAME (e.g. "weather"
15164
+ * matches `ai.smithery/smithery-ai-national-weather-service`); omit it to list the
15165
+ * newest-published entries. Each row carries the registry name, an optional title, its
15166
+ * description, its latest published version, where to install it (`repositoryUrl`) or connect
15167
+ * to it if it's hosted (`remoteUrl`), and the registry's own status (`"active"`,
15168
+ * `"deprecated"`, …). `limit` caps how many rows come back (default 30, registry maximum 100)
15169
+ * — this is a flat list, not a paged walk, since a caller asking "is there an MCP server for
15170
+ * X" wants the top matches, not the whole registry.
15171
+ */
15172
+ search(query?: string, limit?: number): Promise<mcpRegistryEntry[]>;
15173
+ }
15174
+ }
15175
+
13804
15176
  declare namespace BowmarkProvider_medicalguardian {
13805
15177
  // ── Medical Guardian — the unit's own declarations, verbatim ──
13806
15178
  // Medical Guardian's OWN shapes — not a capability contract.
@@ -14576,6 +15948,57 @@ interface medicareGetPlanQuery {
14576
15948
  }
14577
15949
  }
14578
15950
 
15951
+ declare namespace BowmarkProvider_mergify {
15952
+ // ── Mergify — the unit's own declarations, verbatim ──
15953
+ interface mergifyBatch {
15954
+ id: string;
15955
+ name: string;
15956
+ statusCode: string;
15957
+ batchFilledSlots: number | null;
15958
+ maxBatchSlots: number | null;
15959
+ retries: number;
15960
+ maxRetries: number;
15961
+ startedAt: string | null;
15962
+ estimatedMergeAt: string | null;
15963
+ estimatedCiFinishAt: string | null;
15964
+ ciFinishedAt: string | null;
15965
+ queueRuleName: string;
15966
+ checksPassed: number;
15967
+ checksTotal: number;
15968
+ pullRequestNumbers: number[];
15969
+ }
15970
+ interface mergifyQueuedPull {
15971
+ number: number;
15972
+ title: string;
15973
+ url: string;
15974
+ author: string | null;
15975
+ queuedAt: string;
15976
+ priorityRuleName: string | null;
15977
+ estimatedMergeAt: string | null;
15978
+ }
15979
+ interface mergifyQueueStatus {
15980
+ batches: mergifyBatch[];
15981
+ waitingPullRequests: mergifyQueuedPull[];
15982
+ paused: boolean;
15983
+ pauseReason: string | null;
15984
+ }
15985
+
15986
+ /**
15987
+ * Mergify's own documented REST API (api.mergify.com) — the live state of a repo's merge
15988
+ * queue: active batches, their checks and estimated merge times, and every pull request still
15989
+ * waiting to be batched.
15990
+ */
15991
+ interface Unit {
15992
+ /**
15993
+ * The live state of a repo's Mergify merge queue via Mergify's documented REST API — every
15994
+ * active batch (status, checks-passed count, estimated merge/CI-finish times, and its pull
15995
+ * requests), every pull request still waiting to be batched, and whether the queue is paused.
15996
+ * Requires a Mergify Application Key or a GitHub token — see this provider's `auth`.
15997
+ */
15998
+ queueStatus(args: { owner: string; repo: string }): Promise<mergifyQueueStatus>;
15999
+ }
16000
+ }
16001
+
14579
16002
  declare namespace BowmarkProvider_microcenter {
14580
16003
  // ── Micro Center — the unit's own declarations, verbatim ──
14581
16004
  // Micro Center's OWN row shape — not the `pcparts` capability contract.
@@ -14692,6 +16115,37 @@ interface StoreShelfRoster {
14692
16115
  }
14693
16116
  }
14694
16117
 
16118
+ declare namespace BowmarkProvider_minimax {
16119
+ // ── MiniMax — the unit's own declarations, verbatim ──
16120
+ interface MinimaxDocIndexEntry {
16121
+ title: string;
16122
+ url: string;
16123
+ description: string | null;
16124
+ }
16125
+
16126
+ interface MinimaxDocPage {
16127
+ title: string;
16128
+ url: string;
16129
+ description: string | null;
16130
+ content: string;
16131
+ }
16132
+
16133
+ /**
16134
+ * MiniMax's own developer docs (platform.minimax.io) — resolves a topic against the site's own
16135
+ * machine-readable docs index and returns that page's title, url and full Markdown body.
16136
+ */
16137
+ interface Unit {
16138
+ /**
16139
+ * Reads MiniMax's own developer documentation (platform.minimax.io). topic is a free-text
16140
+ * description of what you want, e.g. "text generation", "voice clone", "mcp guide" or "prompt
16141
+ * caching" — it is matched against the site's own docs index (title and url), and the matched
16142
+ * page's full Markdown body is returned. Throws naming real page titles when nothing matches
16143
+ * closely enough.
16144
+ */
16145
+ getDocs(topic: string): Promise<MinimaxDocPage>;
16146
+ }
16147
+ }
16148
+
14695
16149
  declare namespace BowmarkProvider_minted {
14696
16150
  // ── Minted — the unit's own declarations, verbatim ──
14697
16151
  // Minted's OWN shapes — not a capability contract.
@@ -15109,6 +16563,46 @@ interface MossyoakCheckoutLink {
15109
16563
  * available — the error names the candidate or in-stock options so the caller can retry.
15110
16564
  */
15111
16565
  getMossyoakCheckoutLink(handle: string, variantTitleOrOptions: string, opts?: { quantity?: number }): Promise<MossyoakCheckoutLink>;
16566
+
16567
+ /**
16568
+ * Reads the same live catalogue listMossyoakProducts does and filters it by product type
16569
+ * ("vest", "jacket", …, matched case-insensitively against each product's own productType)
16570
+ * before applying the limit — so a caller asking for one category does not have to fetch and
16571
+ * filter the whole storefront themselves. In-stock products first, then by handle. `warnings`
16572
+ * names it when the requested productType matched nothing.
16573
+ */
16574
+ searchProducts(opts?: { productType?: string; limit?: number }): Promise<MossyoakCatalogue>;
16575
+ }
16576
+ }
16577
+
16578
+ declare namespace BowmarkProvider_muze_gov_tr {
16579
+ // ── muze.gov.tr — Turkey Ministry of Culture and Tourism museums portal — the unit's own declarations, verbatim ──
16580
+ interface MuzeVisitingHours {
16581
+ name: string;
16582
+ openingTime: string | null; // "HH:MM"
16583
+ closingTime: string | null; // "HH:MM"
16584
+ ticketOfficeClosingTime: string | null; // "HH:MM" — often earlier than closingTime
16585
+ closedDays: string | null; // the site's own Turkish wording, e.g. "Her gün açık"
16586
+ address: string | null;
16587
+ phone: string | null;
16588
+ email: string | null;
16589
+ url: string;
16590
+ }
16591
+
16592
+ /**
16593
+ * Turkey's Ministry of Culture and Tourism museums portal — opening/closing hours,
16594
+ * ticket-office closing time and closed days for the museums and archaeological sites it
16595
+ * publishes (İstanbul Archaeological Museums, Hagia Sophia History and Experience Museum,
16596
+ * Galata Tower Museum among them), read straight off the site's own listing and detail pages.
16597
+ */
16598
+ interface Unit {
16599
+ /**
16600
+ * Matches `query` against muze.gov.tr's own museum-highlight listing (a substring match on the
16601
+ * site's own display name, e.g. "Galata Tower" or "Hagia Sophia") and reads that museum's
16602
+ * opening/closing hours, ticket-office closing time and closed days straight off its detail
16603
+ * page.
16604
+ */
16605
+ getVisitingHours(query: string): Promise<MuzeVisitingHours>;
15112
16606
  }
15113
16607
  }
15114
16608
 
@@ -15628,6 +17122,14 @@ interface NvisioncentersSavingsResult {
15628
17122
  calculatorUrl: string;
15629
17123
  }
15630
17124
 
17125
+ interface NvisioncentersEstimateSavingsInput {
17126
+ age: number;
17127
+ glasses: number;
17128
+ glasses_cost: number;
17129
+ contacts: number;
17130
+ contacts_cost: number;
17131
+ }
17132
+
15631
17133
  type NvisioncentersAgeBracket = "Under 18" | "18-34" | "35-54" | "55+";
15632
17134
 
15633
17135
  interface NvisioncentersCandidacyInput {
@@ -15664,6 +17166,13 @@ interface NvisioncentersCandidacyResult {
15664
17166
  * and prior-consultation history but its logic never uses either).
15665
17167
  */
15666
17168
  checkLasikCandidacy(input: NvisioncentersCandidacyInput): Promise<NvisioncentersCandidacyResult>;
17169
+
17170
+ /**
17171
+ * Same calculation as calculateLasikSavings, taking the snake_case argument spelling
17172
+ * (glasses_cost, contacts_cost) a caller guessed instead of the provider's camelCase — an
17173
+ * alias, not a second calculator. Throws under the same condition calculateLasikSavings does.
17174
+ */
17175
+ estimateLasikSavings(input: NvisioncentersEstimateSavingsInput): Promise<NvisioncentersSavingsResult>;
15667
17176
  }
15668
17177
  }
15669
17178
 
@@ -16523,6 +18032,35 @@ interface PizzahutDealsForRender {
16523
18032
  }
16524
18033
  }
16525
18034
 
18035
+ declare namespace BowmarkProvider_poshmark {
18036
+ // ── Poshmark — the unit's own declarations, verbatim ──
18037
+ interface PoshmarkSupportArticle {
18038
+ url: string;
18039
+ text: string;
18040
+ }
18041
+
18042
+ /**
18043
+ * Poshmark's own support-center documentation (support.poshmark.com) for Bulk Upload — the
18044
+ * CSV/template format and the zip-of-photos requirements for sellers listing many items at
18045
+ * once.
18046
+ */
18047
+ interface Unit {
18048
+ /**
18049
+ * Reads Poshmark's own 'How to use Bulk Upload Templates' support article — required columns,
18050
+ * SKU rules, the .csv file requirement, Excel-version caveats — straight off
18051
+ * support.poshmark.com.
18052
+ */
18053
+ getBulkUploadTemplateGuide(): Promise<PoshmarkSupportArticle>;
18054
+
18055
+ /**
18056
+ * Reads Poshmark's own 'How to create a Zip file for Bulk Upload' support article — how to zip
18057
+ * listing photos on Windows/Mac and which image types Bulk Upload accepts — straight off
18058
+ * support.poshmark.com.
18059
+ */
18060
+ getZipFileGuide(): Promise<PoshmarkSupportArticle>;
18061
+ }
18062
+ }
18063
+
16526
18064
  declare namespace BowmarkProvider_positivegrid {
16527
18065
  // ── Positive Grid — the unit's own declarations, verbatim ──
16528
18066
  interface positivegridFindRetailersArgs {
@@ -17356,6 +18894,45 @@ interface ContainerRecipeDetails {
17356
18894
  }
17357
18895
  }
17358
18896
 
18897
+ declare namespace BowmarkProvider_proxmox {
18898
+ // ── Proxmox — the unit's own declarations, verbatim ──
18899
+ type ProxmoxProductSlug =
18900
+ | "proxmox-virtual-environment"
18901
+ | "proxmox-backup-server"
18902
+ | "proxmox-mail-gateway"
18903
+ | "proxmox-datacenter-manager";
18904
+
18905
+ interface ProxmoxIsoDownload {
18906
+ product: ProxmoxProductSlug;
18907
+ productName: string;
18908
+ title: string;
18909
+ version: string;
18910
+ fileSizeText: string;
18911
+ lastUpdated: string;
18912
+ sha256: string | null;
18913
+ downloadUrl: string;
18914
+ torrentUrl: string | null;
18915
+ pageUrl: string;
18916
+ }
18917
+
18918
+ /**
18919
+ * Open-source virtualization/backup/mail-security vendor. getIsoDownloads is live — the
18920
+ * current ISO installer(s) for any or all of Proxmox VE, Proxmox Backup Server, Proxmox Mail
18921
+ * Gateway and Proxmox Datacenter Manager, straight off proxmox.com's own downloads pages:
18922
+ * version, file size, last-updated date, SHA256 checksum, and the real enterprise.proxmox.com
18923
+ * download/torrent URLs.
18924
+ */
18925
+ interface Unit {
18926
+ /**
18927
+ * Gets the current ISO installer download(s) for one Proxmox product, or for all four when
18928
+ * `product` is omitted. Proxmox VE's own downloads page additionally lists its current arm64
18929
+ * build and three prior major versions (8.4-1, 7.4-1, 6.4-1) alongside the current amd64
18930
+ * release — every card the site publishes comes back, not just the newest one.
18931
+ */
18932
+ getIsoDownloads(product?: "proxmox-virtual-environment" | "proxmox-backup-server" | "proxmox-mail-gateway" | "proxmox-datacenter-manager"): Promise<ProxmoxIsoDownload[]>;
18933
+ }
18934
+ }
18935
+
17359
18936
  declare namespace BowmarkProvider_reddit {
17360
18937
  // ── Reddit — the unit's own declarations, verbatim ──
17361
18938
  interface RedditSearchPost {
@@ -18884,6 +20461,43 @@ interface SitmeanssitNearestLocationsResult {
18884
20461
  }
18885
20462
  }
18886
20463
 
20464
+ declare namespace BowmarkProvider_sixflags {
20465
+ // ── Six Flags — the unit's own declarations, verbatim ──
20466
+ interface SixFlagsPassRow {
20467
+ id: string | null;
20468
+ guestFacingTitle: string; // e.g. "Park Ticket", "2027 Gold Pass"
20469
+ subtitle: string | null;
20470
+ beforePriceText: string | null; // e.g. "Starting From", "Only"
20471
+ currentPrice: string; // the site's raw text, e.g. "$$55"
20472
+ currentPriceModifier: string | null; // e.g. "/ea*", "per night"
20473
+ strikethroughPrice: string | null; // the struck-through "was" price
20474
+ buyUrl: string | null;
20475
+ }
20476
+ interface SixFlagsTicketsResult {
20477
+ parkSlug: string;
20478
+ parkTitle: string;
20479
+ groupLabel: string; // e.g. "Daily Tickets"
20480
+ passes: SixFlagsPassRow[];
20481
+ }
20482
+
20483
+ /**
20484
+ * Reads a Six Flags/Cedar Fair park's own daily-tickets page — every park in the merged
20485
+ * portfolio (Six Flags Magic Mountain, Cedar Point, Kings Island, Knott's Berry Farm,
20486
+ * Carowinds and ~30 more) runs on one shared site — and returns its current ticket/pass cards
20487
+ * straight out of the page's own server-rendered data, no browser.
20488
+ */
20489
+ interface Unit {
20490
+ /**
20491
+ * Reads a Six Flags/Cedar Fair park's own daily-tickets page by its sixflags.com URL slug
20492
+ * (e.g. `"cedarpoint"`, `"greatadventure"`, `"magicmountain"`, `"knotts"`) and returns its
20493
+ * ticket/pass cards exactly as published today — title, subtitle, raw price text (the site
20494
+ * renders it as `"$$55"`, i.e. `"$" + "$55"`), any "was" price, and a buy/learn-more link.
20495
+ * Throws if the slug does not resolve to a real park page on the site.
20496
+ */
20497
+ getTickets(park: string): Promise<SixFlagsTicketsResult>;
20498
+ }
20499
+ }
20500
+
18887
20501
  declare namespace BowmarkProvider_smartsign {
18888
20502
  // ── SmartSign — the unit's own declarations, verbatim ──
18889
20503
  interface SmartsignSearchResult {
@@ -18960,6 +20574,60 @@ interface SmartwoolSockFinderResult {
18960
20574
  }
18961
20575
  }
18962
20576
 
20577
+ declare namespace BowmarkProvider_smithery {
20578
+ // ── Smithery — the unit's own declarations, verbatim ──
20579
+ interface SmitheryServer {
20580
+ id: string;
20581
+ qualifiedName: string;
20582
+ namespace: string | null;
20583
+ slug: string | null;
20584
+ displayName: string;
20585
+ description: string;
20586
+ iconUrl: string | null;
20587
+ verified: boolean;
20588
+ useCount: number;
20589
+ remote: boolean | null;
20590
+ isDeployed: boolean;
20591
+ createdAt: string;
20592
+ homepage: string;
20593
+ bySmithery: boolean;
20594
+ owner: string | null;
20595
+ score: number | null;
20596
+ }
20597
+ interface SmitherySearchOptions {
20598
+ page?: number;
20599
+ pageSize?: number;
20600
+ verified?: boolean;
20601
+ remote?: boolean;
20602
+ isDeployed?: boolean;
20603
+ namespace?: string;
20604
+ }
20605
+ interface SmitherySearchResult {
20606
+ servers: SmitheryServer[];
20607
+ pagination: { currentPage: number; pageSize: number; totalPages: number; totalCount: number };
20608
+ warnings: string[];
20609
+ }
20610
+
20611
+ /**
20612
+ * Smithery's own registry REST API, keyless. Built: full-text/semantic search over listed MCP
20613
+ * servers, returning each server's qualified name, description, verification status, deploy
20614
+ * status and use count.
20615
+ */
20616
+ interface Unit {
20617
+ /**
20618
+ * Full-text/semantic search over Smithery's public MCP server registry. Pass a qualified name
20619
+ * (e.g. "lama/demo-mcp"), a slug, or a keyword as `query` — a known qualified name resolves as
20620
+ * the top hit. Each returned server carries `verified` (Smithery's own verification badge),
20621
+ * `isDeployed`, `useCount`, `homepage` and `description`.
20622
+ * `options.verified`/`options.remote`/`options.isDeployed`/`options.namespace` filter the
20623
+ * search; `options.page`/`options.pageSize` page through results (Smithery's own default 10,
20624
+ * max 100 per page). THROWS on a non-2xx response (e.g. rate limiting); an empty `servers`
20625
+ * array is a legitimate answer for a query that matches nothing, not a throw.
20626
+ */
20627
+ search(query: string, options?: SmitherySearchOptions): Promise<SmitherySearchResult>;
20628
+ }
20629
+ }
20630
+
18963
20631
  declare namespace BowmarkProvider_solostove {
18964
20632
  // ── Solo Stove — the unit's own declarations, verbatim ──
18965
20633
  interface SolostoveBundleComponent {
@@ -19780,13 +21448,13 @@ interface tamarackidahoUnit {
19780
21448
  /**
19781
21449
  * Searches Tamarack Resort's own direct-managed lodging (the Lodge at Osprey Meadows, the
19782
21450
  * Village at Tamarack Resort, and Tamarack Homes and Cottages — not the golf tee-time flow, a
19783
- * different vendor) for a stay and party size. `arrivalDate`/`departureDate` are "MM/DD/YYYY"
19784
- * strings (the widget's own format), `adultCount` is required and positive, `childCount`
19785
- * defaults to 0. Returns every unit type Tamarack's own booking engine (Inntopia RTP)
19786
- * currently prices as AVAILABLE for that exact query — each with its supplier (property), unit
19787
- * name, and `totalPrice` in USD for the whole queried stay (not nightly) — genuinely computed
19788
- * per call, not a cached listing. An empty `units` array is a real answer: Tamarack has
19789
- * nothing available for that stay, not a failure.
21451
+ * different vendor) for a stay and party size. `arrivalDate`/`departureDate` are "YYYY-MM-DD"
21452
+ * strings (the site's own "MM/DD/YYYY" is accepted as well and echoed back unchanged),
21453
+ * `adultCount` is required and positive, `childCount` defaults to 0. Returns every unit type
21454
+ * Tamarack's own booking engine (Inntopia RTP) currently prices as AVAILABLE for that exact
21455
+ * query — each with its supplier (property), unit name, and `totalPrice` in USD for the whole
21456
+ * queried stay (not nightly) — genuinely computed per call, not a cached listing. An empty
21457
+ * `units` array is a real answer: Tamarack has nothing available for that stay, not a failure.
19790
21458
  */
19791
21459
  searchLodging(args: tamarackidahoSearchArgs): Promise<tamarackidahoSearchResult>;
19792
21460
  }
@@ -20478,6 +22146,9 @@ interface thezebraAutoDriver {
20478
22146
  lastName: string
20479
22147
  dob: string // ISO YYYY-MM-DD — carriers rate on the DATE, not on an age
20480
22148
  email: string
22149
+ ageFirstLicensed?: number // default 16 when omitted
22150
+ violations?: { accidents: number, claims: number, tickets: number } // default a clean record
22151
+ occupation?: string // default "OTHER" — the only two confirmed-valid values are "OTHER" and "ENGINEER"
20481
22152
  }
20482
22153
 
20483
22154
  interface thezebraAutoVehicle {
@@ -20693,26 +22364,30 @@ interface thezebraAutoQuotes {
20693
22364
  * carrier's own monthly and six-month premium, deductible, and the coverage it priced, as The
20694
22365
  * Zebra's auto quote funnel prices them. This is a priced offer for the person asking, NOT the
20695
22366
  * published averages `getStateRates` and its siblings return. Pass `driver` (`firstName`,
20696
- * `lastName`, `dob` ISO YYYY-MM-DD, `email`), one `vehicle` (`year`, `make`, `model` — a model
20697
- * The Zebra does not rate THROWS naming the URL it tried), the 2-letter `state`, a 5-digit
20698
- * `zip`, and `county` (the county the ZIP sits in The Zebra validates it server-side and a
20699
- * missing or wrong county is bounced). **The write binds, the read does not yet**: the
20700
- * GraphQL gateway at `graphql-gateway.production.thezebra.com` accepts the auto seed
20701
- * (`LegacyStartInput.start.currentlyInsured` is the only field Apollo currently exposes on
20702
- * that input), but the results route STILL bounces the session to the homepage with the four
20703
- * fields this function sends. The function throws on the bounce with a message naming the gap;
20704
- * the second required field on `LegacyStartInput` is the next attempt's work, and the rejected
20705
- * probes `helpToday`, `userPurchaseTimeframe`, `hadActiveInsurance`, `residenceOwnership`,
20706
- * `presumedAnswers`, `policyLinkInfo`, `startDate`, `desiredCoverage` are documented in
20707
- * `agents/capability-engineer/instances/vertical-insurance/tools/zebra-auto-quotes/shape-summary.json`
20708
- * (and the e5 clone) so they don't have to be re-derived. **`advertisedCarriers` is not a
20709
- * quote list and must never be read as one**: the results page would carry paid carrier
20710
- * placements alongside real offers, separated by `data-cy="results-card_ad_<carrier>"` (ad)
20711
- * versus `data-cy="results-card_q2b_<carrier>"` (real offer), and the advertised names are
20712
- * returned in their own field with no price attached. Every premium is USD and
20713
- * `monthlyPremium` is per MONTH the card's own period is checked rather than assumed, and a
20714
- * card printing any other term THROWS instead of relabelling a figure. `totalPremium` is the
20715
- * site's own whole-term number and is never divided out of the monthly one.
22367
+ * `lastName`, `dob` ISO YYYY-MM-DD, `email`, and optionally
22368
+ * `ageFirstLicensed`/`violations`/`occupation` each defaults to a clean-record placeholder
22369
+ * when omitted), one `vehicle` (`year`, `make`, `model` a model The Zebra does not rate
22370
+ * THROWS naming the URL it tried), the 2-letter `state`, a 5-digit `zip`, and `county` (the
22371
+ * county the ZIP sits in — The Zebra validates it server-side and a missing or wrong county is
22372
+ * bounced). **The write always binds** the GraphQL gateway at
22373
+ * `graphql-gateway.production.thezebra.com` accepts the seed and returns 200 but AS OF
22374
+ * 2026-08-27 the results route was bouncing the session to the homepage because
22375
+ * `LegacyDriverInput` and `LegacyVehicleInput` accept more fields than an earlier version of
22376
+ * this function sent; the measured field map (every field on both inputs, which are confirmed
22377
+ * valid, which are still unmeasured) lives in
22378
+ * `agents/richard/problems/thezebra-getautoquotes-broken.md` and is not re-derived here. The
22379
+ * function throws on a bounce with a message naming the redirect target; `vehicle.submodel`,
22380
+ * `driver.education` and `driver.creditScore` remain unsent because no valid value for any of
22381
+ * them is confirmed yet sending a guess cannot break the write (all three are nullable) but
22382
+ * a wrong guess would look like a fix without being one, so they stay out until a live probe
22383
+ * confirms a value. **`advertisedCarriers` is not a quote list and must never be read as
22384
+ * one**: the results page would carry paid carrier placements alongside real offers, separated
22385
+ * by `data-cy="results-card_ad_<carrier>"` (ad) versus `data-cy="results-card_q2b_<carrier>"`
22386
+ * (real offer), and the advertised names are returned in their own field with no price
22387
+ * attached. Every premium is USD and `monthlyPremium` is per MONTH — the card's own period is
22388
+ * checked rather than assumed, and a card printing any other term THROWS instead of
22389
+ * relabelling a figure. `totalPremium` is the site's own whole-term number and is never
22390
+ * divided out of the monthly one.
20716
22391
  */
20717
22392
  getAutoQuotes(query: thezebraAutoQuotesQuery): Promise<thezebraAutoQuotes>;
20718
22393
  }
@@ -21308,25 +22983,28 @@ interface upsRatedShipment {
21308
22983
  declare namespace BowmarkProvider_usps {
21309
22984
  // ── USPS — the unit's own declarations, verbatim ──
21310
22985
  interface uspsRateOption {
21311
- sku: string;
22986
+ postageServiceId: number;
21312
22987
  description: string;
21313
- mailClass: string;
21314
22988
  price: number;
21315
- zone: string | null;
22989
+ commercialPrice: number | null;
22990
+ deliveryDay: string | null;
22991
+ flatRateBox: string | null;
21316
22992
  }
21317
22993
 
21318
22994
  /**
21319
- * USPS's own documented Domestic Prices v3 API (apis.usps.com) — prices a domestic package
21320
- * across USPS's Mail Classes for a ZIP-to-ZIP move, weight and optional dimensions, the same
21321
- * base-rate calculation usps.com's own postage calculator runs. No browser, no scraping.
22995
+ * USPS's own Retail Postage Price Calculator (postcalc.usps.com) — prices a domestic package
22996
+ * across every USPS Mail Service that quotes it for a ZIP-to-ZIP move, weight and optional
22997
+ * dimensions, and returns the counter price, the discounted Click-N-Ship price and USPS's own
22998
+ * delivery-commitment date. One keyless GET to the calculator's own JSON endpoint. No key, no
22999
+ * browser.
21322
23000
  */
21323
23001
  interface Unit {
21324
23002
  /**
21325
- * Prices a domestic package across every USPS Mail Class that quotes it, between two 5-digit
23003
+ * Prices a domestic package across every USPS Mail Service that quotes it, between two 5-digit
21326
23004
  * ZIP Codes, for a weight in ounces and optional length/width/height in inches (all three or
21327
- * none). Returns USPS's own base retail price per option the postage calculator's own
21328
- * numbers, not an estimate. Requires a USPS OAuth2 client-credentials token see this
21329
- * provider's `auth`.
23005
+ * none). Returns USPS's own retail counter price, its discounted Click-N-Ship price where one
23006
+ * exists, and its delivery-commitment date the Retail Postage Price Calculator's own
23007
+ * numbers. Needs no API key.
21330
23008
  */
21331
23009
  getRate(args: { fromZip: string; toZip: string; weightOz: number; length?: number; width?: number; height?: number }): Promise<uspsRateOption[]>;
21332
23010
  }
@@ -21544,20 +23222,21 @@ interface VillagerealtyobxQuote {
21544
23222
  * Searches Village Realty's own 900+ Outer Banks rental listings the way
21545
23223
  * villagerealtyobx.com/outer-banks-vacation-rentals does — filter by town (e.g. "Corolla",
21546
23224
  * "Nags Head"), exact bedroom count, amenities (e.g. "Private Pool", "Elevator"), and
21547
- * optionally a date range — returning each matching property's id, name, town, address,
21548
- * bedroom count, max guests and detail-page URL. Call getQuote with a result's propertyID for
21549
- * a real priced quote.
23225
+ * optionally a date range (`checkin`/`checkout` as `YYYY-MM-DD`) — returning each matching
23226
+ * property's id, name, town, address, bedroom count, max guests and detail-page URL. Call
23227
+ * getQuote with a result's propertyID for a real priced quote.
21550
23228
  */
21551
23229
  searchRentals(args?: { town?: string, bedrooms?: number, amenities?: string[], checkin?: string, checkout?: string, page?: number }): Promise<VillagerealtyobxListing[]>;
21552
23230
 
21553
23231
  /**
21554
23232
  * Gets a real-time price quote for one Village Realty property and date range — the exact
21555
23233
  * server-computed rent, taxes and total the rental detail page shows after picking dates, plus
21556
- * the book-now URL. `checkin`/`checkout` are `MM/DD/YYYY`. `available: false` is a genuine
21557
- * site answer (e.g. the dates fail the property's minimum-night-stay rule), not an error
21558
- * this is the flow ChatGPT itself cannot operate today: asked to price a Village Realty stay
21559
- * it answers "I can't complete the booking or take payment for you" and recommends competitor
21560
- * sites instead of quoting Village Realty's own live price.
23234
+ * the book-now URL. `checkin`/`checkout` are `YYYY-MM-DD` (the site's own `MM/DD/YYYY` is
23235
+ * accepted too, and whichever you pass is echoed back unchanged). `available: false` is a
23236
+ * genuine site answer (e.g. the dates fail the property's minimum-night-stay rule), not an
23237
+ * error this is the flow ChatGPT itself cannot operate today: asked to price a Village
23238
+ * Realty stay it answers "I can't complete the booking or take payment for you" and recommends
23239
+ * competitor sites instead of quoting Village Realty's own live price.
21561
23240
  */
21562
23241
  getQuote(args: { propertyID: string, checkin: string, checkout: string }): Promise<VillagerealtyobxQuote>;
21563
23242
  }
@@ -23250,9 +24929,12 @@ interface ShopifyCart {
23250
24929
  * string, so there is no camelCase alias to be uncertain about. */
23251
24930
  interface BowmarkProviders {
23252
24931
  aa: BowmarkProvider_aa.Unit;
24932
+ aauto: BowmarkProvider_aauto.Unit;
23253
24933
  abercrombie: BowmarkProvider_abercrombie.Unit;
23254
24934
  aiper: BowmarkProvider_aiper.Unit;
23255
24935
  ajmadison: BowmarkProvider_ajmadison.Unit;
24936
+ allied: BowmarkProvider_allied.Unit;
24937
+ alphavantage: BowmarkProvider_alphavantage.Unit;
23256
24938
  americanstandard: BowmarkProvider_americanstandard.Unit;
23257
24939
  amramp: BowmarkProvider_amramp.Unit;
23258
24940
  ancientnutrition: BowmarkProvider_ancientnutrition.Unit;
@@ -23270,7 +24952,9 @@ interface BowmarkProviders {
23270
24952
  azure: BowmarkProvider_azure.Unit;
23271
24953
  barletta: BowmarkProvider_barletta.Unit;
23272
24954
  baublebar: BowmarkProvider_baublebar.Unit;
24955
+ bcparkscamping: BowmarkProvider_bcparkscamping.Unit;
23273
24956
  beatthebomb: BowmarkProvider_beatthebomb.Unit;
24957
+ bennington: BowmarkProvider_bennington.Unit;
23274
24958
  bestbuy: BowmarkProvider_bestbuy.Unit;
23275
24959
  bhphoto: BowmarkProvider_bhphoto.Unit;
23276
24960
  bigjoeforklifts: BowmarkProvider_bigjoeforklifts.Unit;
@@ -23288,6 +24972,7 @@ interface BowmarkProviders {
23288
24972
  bykoket: BowmarkProvider_bykoket.Unit;
23289
24973
  byltbasics: BowmarkProvider_byltbasics.Unit;
23290
24974
  califloors: BowmarkProvider_califloors.Unit;
24975
+ camelcamelcamel: BowmarkProvider_camelcamelcamel.Unit;
23291
24976
  cancer: BowmarkProvider_cancer.Unit;
23292
24977
  capitalbrands: BowmarkProvider_capitalbrands.Unit;
23293
24978
  caraway: BowmarkProvider_caraway.Unit;
@@ -23310,12 +24995,14 @@ interface BowmarkProviders {
23310
24995
  davidsonhomes: BowmarkProvider_davidsonhomes.Unit;
23311
24996
  deangroup: BowmarkProvider_deangroup.Unit;
23312
24997
  decked: BowmarkProvider_decked.Unit;
24998
+ developersopenai: BowmarkProvider_developersopenai.Unit;
23313
24999
  dice: BowmarkProvider_dice.Unit;
23314
25000
  dickssportinggoods: BowmarkProvider_dickssportinggoods.Unit;
23315
25001
  dillards: BowmarkProvider_dillards.Unit;
23316
25002
  discounttire: BowmarkProvider_discounttire.Unit;
23317
25003
  disney: BowmarkProvider_disney.Unit;
23318
25004
  ebay: BowmarkProvider_ebay.Unit;
25005
+ elevenlabs: BowmarkProvider_elevenlabs.Unit;
23319
25006
  embroker: BowmarkProvider_embroker.Unit;
23320
25007
  eq3: BowmarkProvider_eq3.Unit;
23321
25008
  erieinsurance: BowmarkProvider_erieinsurance.Unit;
@@ -23337,6 +25024,7 @@ interface BowmarkProviders {
23337
25024
  geico: BowmarkProvider_geico.Unit;
23338
25025
  github: BowmarkProvider_github.Unit;
23339
25026
  glassesusa: BowmarkProvider_glassesusa.Unit;
25027
+ goodway: BowmarkProvider_goodway.Unit;
23340
25028
  google_flights: BowmarkProvider_google_flights.Unit;
23341
25029
  gotchacovered: BowmarkProvider_gotchacovered.Unit;
23342
25030
  grainger: BowmarkProvider_grainger.Unit;
@@ -23363,6 +25051,7 @@ interface BowmarkProviders {
23363
25051
  interiordefine: BowmarkProvider_interiordefine.Unit;
23364
25052
  iproyal: BowmarkProvider_iproyal.Unit;
23365
25053
  islllc: BowmarkProvider_islllc.Unit;
25054
+ istanbulkart: BowmarkProvider_istanbulkart.Unit;
23366
25055
  ivoryhomes: BowmarkProvider_ivoryhomes.Unit;
23367
25056
  jennikayne: BowmarkProvider_jennikayne.Unit;
23368
25057
  joybird: BowmarkProvider_joybird.Unit;
@@ -23380,6 +25069,7 @@ interface BowmarkProviders {
23380
25069
  legacyhomesal: BowmarkProvider_legacyhomesal.Unit;
23381
25070
  linkedin: BowmarkProvider_linkedin.Unit;
23382
25071
  liquiddeath: BowmarkProvider_liquiddeath.Unit;
25072
+ liquidspace: BowmarkProvider_liquidspace.Unit;
23383
25073
  littlewordsproject: BowmarkProvider_littlewordsproject.Unit;
23384
25074
  lonelyplanet: BowmarkProvider_lonelyplanet.Unit;
23385
25075
  louvershop: BowmarkProvider_louvershop.Unit;
@@ -23388,16 +25078,21 @@ interface BowmarkProviders {
23388
25078
  lululemon: BowmarkProvider_lululemon.Unit;
23389
25079
  maidenhome: BowmarkProvider_maidenhome.Unit;
23390
25080
  mailchimp: BowmarkProvider_mailchimp.Unit;
25081
+ marketplace_visualstudio: BowmarkProvider_marketplace_visualstudio.Unit;
23391
25082
  marriott: BowmarkProvider_marriott.Unit;
23392
25083
  mcdonalds: BowmarkProvider_mcdonalds.Unit;
25084
+ mcp_registry: BowmarkProvider_mcp_registry.Unit;
23393
25085
  medicalguardian: BowmarkProvider_medicalguardian.Unit;
23394
25086
  medicare: BowmarkProvider_medicare.Unit;
25087
+ mergify: BowmarkProvider_mergify.Unit;
23395
25088
  microcenter: BowmarkProvider_microcenter.Unit;
25089
+ minimax: BowmarkProvider_minimax.Unit;
23396
25090
  minted: BowmarkProvider_minted.Unit;
23397
25091
  mixbook: BowmarkProvider_mixbook.Unit;
23398
25092
  modularclosets: BowmarkProvider_modularclosets.Unit;
23399
25093
  momondo: BowmarkProvider_momondo.Unit;
23400
25094
  mossyoak: BowmarkProvider_mossyoak.Unit;
25095
+ muze_gov_tr: BowmarkProvider_muze_gov_tr.Unit;
23401
25096
  naic: BowmarkProvider_naic.Unit;
23402
25097
  namecheap: BowmarkProvider_namecheap.Unit;
23403
25098
  nationalbusinessfurniture: BowmarkProvider_nationalbusinessfurniture.Unit;
@@ -23414,11 +25109,13 @@ interface BowmarkProviders {
23414
25109
  perennialsandsutherland: BowmarkProvider_perennialsandsutherland.Unit;
23415
25110
  pirateship: BowmarkProvider_pirateship.Unit;
23416
25111
  pizzahut: BowmarkProvider_pizzahut.Unit;
25112
+ poshmark: BowmarkProvider_poshmark.Unit;
23417
25113
  positivegrid: BowmarkProvider_positivegrid.Unit;
23418
25114
  premierbuildings: BowmarkProvider_premierbuildings.Unit;
23419
25115
  progressive: BowmarkProvider_progressive.Unit;
23420
25116
  prose: BowmarkProvider_prose.Unit;
23421
25117
  provenwinners: BowmarkProvider_provenwinners.Unit;
25118
+ proxmox: BowmarkProvider_proxmox.Unit;
23422
25119
  reddit: BowmarkProvider_reddit.Unit;
23423
25120
  reliancepartners: BowmarkProvider_reliancepartners.Unit;
23424
25121
  resy: BowmarkProvider_resy.Unit;
@@ -23439,8 +25136,10 @@ interface BowmarkProviders {
23439
25136
  sellcell: BowmarkProvider_sellcell.Unit;
23440
25137
  semihandmade: BowmarkProvider_semihandmade.Unit;
23441
25138
  sitmeanssit: BowmarkProvider_sitmeanssit.Unit;
25139
+ sixflags: BowmarkProvider_sixflags.Unit;
23442
25140
  smartsign: BowmarkProvider_smartsign.Unit;
23443
25141
  smartwool: BowmarkProvider_smartwool.Unit;
25142
+ smithery: BowmarkProvider_smithery.Unit;
23444
25143
  solostove: BowmarkProvider_solostove.Unit;
23445
25144
  soundcloud: BowmarkProvider_soundcloud.Unit;
23446
25145
  starlighthomes: BowmarkProvider_starlighthomes.Unit;
@@ -75209,23 +76908,39 @@ interface BowmarkProviders {
75209
76908
  * `run()` script, and the Proxy over HTTP in a caller's own process. They are
75210
76909
  * generated once precisely so those two cannot drift. */
75211
76910
  interface BowmarkLibrary {
76911
+ bundles: BowmarkCapability_bundles.Unit;
76912
+ cable_railing_quote: BowmarkCapability_cable_railing_quote.Unit;
75212
76913
  cars: BowmarkCapability_cars.Unit;
76914
+ coworking: BowmarkCapability_coworking.Unit;
76915
+ custom_sofa_configurator: BowmarkCapability_custom_sofa_configurator.Unit;
76916
+ developer_api_key_signup: BowmarkCapability_developer_api_key_signup.Unit;
76917
+ domain: BowmarkCapability_domain.Unit;
75213
76918
  email: BowmarkCapability_email.Unit;
75214
76919
  flights: BowmarkCapability_flights.Unit;
76920
+ game_soundtrack_composer_credits: BowmarkCapability_game_soundtrack_composer_credits.Unit;
75215
76921
  git_commit_history: BowmarkCapability_git_commit_history.Unit;
76922
+ git_release_notes: BowmarkCapability_git_release_notes.Unit;
75216
76923
  hotels: BowmarkCapability_hotels.Unit;
75217
76924
  hvac: BowmarkCapability_hvac.Unit;
75218
76925
  insurance: BowmarkCapability_insurance.Unit;
76926
+ istanbul_schedules: BowmarkCapability_istanbul_schedules.Unit;
76927
+ mcp_registry: BowmarkCapability_mcp_registry.Unit;
75219
76928
  music: BowmarkCapability_music.Unit;
75220
76929
  pcparts: BowmarkCapability_pcparts.Unit;
76930
+ phone_trade_in: BowmarkCapability_phone_trade_in.Unit;
76931
+ pricing: BowmarkCapability_pricing.Unit;
75221
76932
  products: BowmarkCapability_products.Unit;
75222
76933
  promocodes: BowmarkCapability_promocodes.Unit;
75223
76934
  read: BowmarkCapability_read.Unit;
75224
76935
  restaurant_booking: BowmarkCapability_restaurant_booking.Unit;
76936
+ school_shopping_basket: BowmarkCapability_school_shopping_basket.Unit;
75225
76937
  search: BowmarkCapability_search.Unit;
75226
76938
  sheds: BowmarkCapability_sheds.Unit;
75227
76939
  shipping: BowmarkCapability_shipping.Unit;
75228
76940
  tariff: BowmarkCapability_tariff.Unit;
76941
+ text_to_speech: BowmarkCapability_text_to_speech.Unit;
76942
+ theme_park_tickets: BowmarkCapability_theme_park_tickets.Unit;
75229
76943
  weather: BowmarkCapability_weather.Unit;
76944
+ yoga_outfit_shopping: BowmarkCapability_yoga_outfit_shopping.Unit;
75230
76945
  providers: BowmarkProviders;
75231
76946
  }