@purveyors/sdk 0.56.0 → 0.57.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.ts CHANGED
@@ -4362,6 +4362,9 @@ interface paths {
4362
4362
  has_additives?: "true" | "false";
4363
4363
  processing_disclosure_level?: string;
4364
4364
  processing_confidence_min?: number | null;
4365
+ varietyCode?: string | string[];
4366
+ speciesCode?: string | string[];
4367
+ dryingMethodCode?: string | string[];
4365
4368
  };
4366
4369
  header?: {
4367
4370
  Prefer?: string;
@@ -4386,6 +4389,21 @@ interface paths {
4386
4389
  "application/json": components["schemas"]["CatalogListResponse"];
4387
4390
  };
4388
4391
  };
4392
+ /** @description Invalid query: an unknown variety, species or drying method code */
4393
+ 400: {
4394
+ headers: {
4395
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
4396
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
4397
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
4398
+ "X-RateLimit-Burst-Limit": components["headers"]["X-RateLimit-Burst-Limit"];
4399
+ "X-RateLimit-Burst-Remaining": components["headers"]["X-RateLimit-Burst-Remaining"];
4400
+ "X-RateLimit-Burst-Reset": components["headers"]["X-RateLimit-Burst-Reset"];
4401
+ [name: string]: unknown;
4402
+ };
4403
+ content: {
4404
+ "application/json": components["schemas"]["ErrorResponse"];
4405
+ };
4406
+ };
4389
4407
  /** @description Authentication required */
4390
4408
  401: {
4391
4409
  headers: {
@@ -4486,6 +4504,9 @@ interface paths {
4486
4504
  has_additives?: "true" | "false";
4487
4505
  processing_disclosure_level?: string;
4488
4506
  processing_confidence_min?: number | null;
4507
+ varietyCode?: string | string[];
4508
+ speciesCode?: string | string[];
4509
+ dryingMethodCode?: string | string[];
4489
4510
  place_id?: string;
4490
4511
  bbox?: string;
4491
4512
  zoom?: number;
@@ -4515,7 +4536,7 @@ interface paths {
4515
4536
  "application/json": components["schemas"]["CatalogMapResponse"];
4516
4537
  };
4517
4538
  };
4518
- /** @description Malformed map geometry, zoom, place id, or elevation range */
4539
+ /** @description Malformed map geometry, zoom, place id, or elevation range, or an unknown variety, species or drying method code */
4519
4540
  400: {
4520
4541
  headers: {
4521
4542
  "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
@@ -4600,7 +4621,7 @@ interface paths {
4600
4621
  get: {
4601
4622
  parameters: {
4602
4623
  query?: {
4603
- include?: "grading";
4624
+ include?: ("grading" | "taxonomy" | "grading,taxonomy" | "taxonomy,grading") | ("grading" | "taxonomy" | "grading,taxonomy" | "taxonomy,grading")[];
4604
4625
  stocked?: "true" | "false" | "all";
4605
4626
  showWholesale?: "true" | "false";
4606
4627
  wholesaleOnly?: "true" | "false";
@@ -4640,6 +4661,9 @@ interface paths {
4640
4661
  waterActivityMax?: number | null;
4641
4662
  densityMin?: number | null;
4642
4663
  scoreProtocol?: "sca_2004" | "cva_affective" | "q_arabica" | "coe" | "supplier_unspecified";
4664
+ varietyCode?: string | string[];
4665
+ speciesCode?: string | string[];
4666
+ dryingMethodCode?: string | string[];
4643
4667
  processing_base_method?: string;
4644
4668
  fermentation_type?: string;
4645
4669
  process_additive?: string;
@@ -4670,6 +4694,21 @@ interface paths {
4670
4694
  "application/json": components["schemas"]["CatalogFacetsResponse"];
4671
4695
  };
4672
4696
  };
4697
+ /** @description Invalid query: an unknown variety, species or drying method code */
4698
+ 400: {
4699
+ headers: {
4700
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
4701
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
4702
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
4703
+ "X-RateLimit-Burst-Limit": components["headers"]["X-RateLimit-Burst-Limit"];
4704
+ "X-RateLimit-Burst-Remaining": components["headers"]["X-RateLimit-Burst-Remaining"];
4705
+ "X-RateLimit-Burst-Reset": components["headers"]["X-RateLimit-Burst-Reset"];
4706
+ [name: string]: unknown;
4707
+ };
4708
+ content: {
4709
+ "application/json": components["schemas"]["ErrorResponse"];
4710
+ };
4711
+ };
4673
4712
  /** @description Authentication required */
4674
4713
  401: {
4675
4714
  headers: {
@@ -15085,6 +15124,28 @@ interface components {
15085
15124
  protocol: "sca_2004" | "cva_affective" | "q_arabica" | "coe" | "supplier_unspecified" | null;
15086
15125
  };
15087
15126
  };
15127
+ /** @description ADR-018 canonical variety, species and drying values mapped from the supplier text, which stays in cultivar_detail and drying_method. Omitted when no stated value matched the vocabulary; nothing is inferred. */
15128
+ taxonomy?: {
15129
+ varieties: {
15130
+ code: string;
15131
+ label: string;
15132
+ /** @description Family this value belongs to, when it has one */
15133
+ parent_code: string | null;
15134
+ }[];
15135
+ species: {
15136
+ code: string;
15137
+ label: string;
15138
+ /** @description Family this value belongs to, when it has one */
15139
+ parent_code: string | null;
15140
+ }[];
15141
+ /** @description Returned where the projection includes drying_method */
15142
+ drying_methods?: {
15143
+ code: string;
15144
+ label: string;
15145
+ /** @description Family this value belongs to, when it has one */
15146
+ parent_code: string | null;
15147
+ }[];
15148
+ };
15088
15149
  proof?: components["schemas"]["CatalogProofSummary"];
15089
15150
  /** @description Entitled metadata-presence signals returned only by projection=summary; false also covers fields outside the caller projection. */
15090
15151
  summarySignals?: {
@@ -15322,6 +15383,9 @@ interface components {
15322
15383
  grade_preparation?: string[];
15323
15384
  screen_size_min?: string[];
15324
15385
  elevation_band?: string[];
15386
+ varieties?: string[];
15387
+ species_codes?: string[];
15388
+ drying_methods?: string[];
15325
15389
  };
15326
15390
  /** @description Counted facet values for CLI/agent use. Counts are computed after visibility and entitled query filters are applied. */
15327
15391
  facets: {
@@ -15417,6 +15481,18 @@ interface components {
15417
15481
  value: string;
15418
15482
  count: number;
15419
15483
  }[];
15484
+ varieties?: {
15485
+ value: string;
15486
+ count: number;
15487
+ }[];
15488
+ species_codes?: {
15489
+ value: string;
15490
+ count: number;
15491
+ }[];
15492
+ drying_methods?: {
15493
+ value: string;
15494
+ count: number;
15495
+ }[];
15420
15496
  };
15421
15497
  meta: {
15422
15498
  /** @enum {string} */
@@ -21601,6 +21677,9 @@ declare function createParchmentClient(options: ParchmentClientOptions): {
21601
21677
  has_additives?: "true" | "false";
21602
21678
  processing_disclosure_level?: string;
21603
21679
  processing_confidence_min?: number | null;
21680
+ varietyCode?: string | string[];
21681
+ speciesCode?: string | string[];
21682
+ dryingMethodCode?: string | string[];
21604
21683
  };
21605
21684
  header?: {
21606
21685
  Prefer?: string;
@@ -21624,6 +21703,20 @@ declare function createParchmentClient(options: ParchmentClientOptions): {
21624
21703
  "application/json": components["schemas"]["CatalogListResponse"];
21625
21704
  };
21626
21705
  };
21706
+ 400: {
21707
+ headers: {
21708
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
21709
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
21710
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
21711
+ "X-RateLimit-Burst-Limit": components["headers"]["X-RateLimit-Burst-Limit"];
21712
+ "X-RateLimit-Burst-Remaining": components["headers"]["X-RateLimit-Burst-Remaining"];
21713
+ "X-RateLimit-Burst-Reset": components["headers"]["X-RateLimit-Burst-Reset"];
21714
+ [name: string]: unknown;
21715
+ };
21716
+ content: {
21717
+ "application/json": components["schemas"]["ErrorResponse"];
21718
+ };
21719
+ };
21627
21720
  401: {
21628
21721
  headers: {
21629
21722
  "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
@@ -21708,6 +21801,9 @@ declare function createParchmentClient(options: ParchmentClientOptions): {
21708
21801
  has_additives?: "true" | "false";
21709
21802
  processing_disclosure_level?: string;
21710
21803
  processing_confidence_min?: number | null;
21804
+ varietyCode?: string | string[];
21805
+ speciesCode?: string | string[];
21806
+ dryingMethodCode?: string | string[];
21711
21807
  } | undefined;
21712
21808
  header: {
21713
21809
  Prefer?: string;
@@ -21763,6 +21859,9 @@ declare function createParchmentClient(options: ParchmentClientOptions): {
21763
21859
  has_additives?: "true" | "false";
21764
21860
  processing_disclosure_level?: string;
21765
21861
  processing_confidence_min?: number | null;
21862
+ varietyCode?: string | string[];
21863
+ speciesCode?: string | string[];
21864
+ dryingMethodCode?: string | string[];
21766
21865
  place_id?: string;
21767
21866
  bbox?: string;
21768
21867
  zoom?: number;
@@ -21897,6 +21996,9 @@ declare function createParchmentClient(options: ParchmentClientOptions): {
21897
21996
  has_additives?: "true" | "false";
21898
21997
  processing_disclosure_level?: string;
21899
21998
  processing_confidence_min?: number | null;
21999
+ varietyCode?: string | string[];
22000
+ speciesCode?: string | string[];
22001
+ dryingMethodCode?: string | string[];
21900
22002
  place_id?: string;
21901
22003
  bbox?: string;
21902
22004
  zoom?: number;
@@ -21915,7 +22017,7 @@ declare function createParchmentClient(options: ParchmentClientOptions): {
21915
22017
  facets: (query?: CatalogFacetsQuery, headers?: CatalogFacetsHeaders) => Promise<openapi_fetch.FetchResponse<{
21916
22018
  parameters: {
21917
22019
  query?: {
21918
- include?: "grading";
22020
+ include?: ("grading" | "taxonomy" | "grading,taxonomy" | "taxonomy,grading") | ("grading" | "taxonomy" | "grading,taxonomy" | "taxonomy,grading")[];
21919
22021
  stocked?: "true" | "false" | "all";
21920
22022
  showWholesale?: "true" | "false";
21921
22023
  wholesaleOnly?: "true" | "false";
@@ -21955,6 +22057,9 @@ declare function createParchmentClient(options: ParchmentClientOptions): {
21955
22057
  waterActivityMax?: number | null;
21956
22058
  densityMin?: number | null;
21957
22059
  scoreProtocol?: "sca_2004" | "cva_affective" | "q_arabica" | "coe" | "supplier_unspecified";
22060
+ varietyCode?: string | string[];
22061
+ speciesCode?: string | string[];
22062
+ dryingMethodCode?: string | string[];
21958
22063
  processing_base_method?: string;
21959
22064
  fermentation_type?: string;
21960
22065
  process_additive?: string;
@@ -21984,6 +22089,20 @@ declare function createParchmentClient(options: ParchmentClientOptions): {
21984
22089
  "application/json": components["schemas"]["CatalogFacetsResponse"];
21985
22090
  };
21986
22091
  };
22092
+ 400: {
22093
+ headers: {
22094
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
22095
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
22096
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
22097
+ "X-RateLimit-Burst-Limit": components["headers"]["X-RateLimit-Burst-Limit"];
22098
+ "X-RateLimit-Burst-Remaining": components["headers"]["X-RateLimit-Burst-Remaining"];
22099
+ "X-RateLimit-Burst-Reset": components["headers"]["X-RateLimit-Burst-Reset"];
22100
+ [name: string]: unknown;
22101
+ };
22102
+ content: {
22103
+ "application/json": components["schemas"]["ErrorResponse"];
22104
+ };
22105
+ };
21987
22106
  401: {
21988
22107
  headers: {
21989
22108
  "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
@@ -22017,7 +22136,7 @@ declare function createParchmentClient(options: ParchmentClientOptions): {
22017
22136
  }, {
22018
22137
  params: {
22019
22138
  query: {
22020
- include?: "grading";
22139
+ include?: ("grading" | "taxonomy" | "grading,taxonomy" | "taxonomy,grading") | ("grading" | "taxonomy" | "grading,taxonomy" | "taxonomy,grading")[];
22021
22140
  stocked?: "true" | "false" | "all";
22022
22141
  showWholesale?: "true" | "false";
22023
22142
  wholesaleOnly?: "true" | "false";
@@ -22057,6 +22176,9 @@ declare function createParchmentClient(options: ParchmentClientOptions): {
22057
22176
  waterActivityMax?: number | null;
22058
22177
  densityMin?: number | null;
22059
22178
  scoreProtocol?: "sca_2004" | "cva_affective" | "q_arabica" | "coe" | "supplier_unspecified";
22179
+ varietyCode?: string | string[];
22180
+ speciesCode?: string | string[];
22181
+ dryingMethodCode?: string | string[];
22060
22182
  processing_base_method?: string;
22061
22183
  fermentation_type?: string;
22062
22184
  process_additive?: string;
@@ -33041,7 +33163,7 @@ type ParchmentClientMethod = MethodPaths<Omit<ParchmentClient, "raw">>;
33041
33163
  * SDK (such as the CLI) can import this list to prove they cover everything
33042
33164
  * the web agent can do.
33043
33165
  */
33044
- declare const CHAT_AGENT_CAPABILITIES: readonly ["me", "catalog.list", "catalog.facets", "catalog.rank", "catalog.suppliers", "catalog.similar", "catalog.compare", "catalog.grades", "catalog.priceHistory", "inventory.list", "roasts.list", "roasts.get", "roasts.chartData", "referenceProfiles.list", "referenceProfiles.get", "referenceProfiles.chart", "referenceProfiles.compare", "referenceProfiles.preview", "referenceProfiles.roastCandidates", "referenceProfiles.previewFromRoast", "tasting.get", "priceIndex.list", "priceIndex.stats", "priceIndex.comparisons", "priceIndex.comparison", "priceIndex.history", "market.signals", "market.metadataIndex", "market.overview", "market.evidence"];
33166
+ declare const CHAT_AGENT_CAPABILITIES: readonly ["me", "catalog.list", "catalog.facets", "catalog.rank", "catalog.suppliers", "catalog.similar", "catalog.compare", "catalog.grades", "catalog.taxonomies", "catalog.priceHistory", "inventory.list", "roasts.list", "roasts.get", "roasts.chartData", "referenceProfiles.list", "referenceProfiles.get", "referenceProfiles.chart", "referenceProfiles.compare", "referenceProfiles.preview", "referenceProfiles.roastCandidates", "referenceProfiles.previewFromRoast", "tasting.get", "priceIndex.list", "priceIndex.stats", "priceIndex.comparisons", "priceIndex.comparison", "priceIndex.history", "market.signals", "market.metadataIndex", "market.overview", "market.evidence"];
33045
33167
  type ChatAgentCapability = (typeof CHAT_AGENT_CAPABILITIES)[number];
33046
33168
  /**
33047
33169
  * Writes the web agent can propose. The agent never writes directly: it
package/dist/index.js CHANGED
@@ -648,6 +648,7 @@ var CHAT_AGENT_CAPABILITIES = [
648
648
  "catalog.similar",
649
649
  "catalog.compare",
650
650
  "catalog.grades",
651
+ "catalog.taxonomies",
651
652
  "catalog.priceHistory",
652
653
  "inventory.list",
653
654
  "roasts.list",
@@ -762,10 +763,6 @@ var CHAT_AGENT_CAPABILITY_EXCLUSIONS = {
762
763
  reason: "read_not_wired",
763
764
  note: "Catalog visibility metadata; the agent reads `me` instead."
764
765
  },
765
- "catalog.taxonomies": {
766
- reason: "read_not_wired",
767
- note: "ADR-018 vocabulary; the Cherry lookup tool ships with the code filters."
768
- },
769
766
  "catalog.map": {
770
767
  reason: "read_not_wired",
771
768
  note: "Map clusters and geometry for the web map view."
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/client.ts","../src/chatAgentCapabilities.ts"],"sourcesContent":["import createClient, { type ClientOptions } from \"openapi-fetch\";\nimport type { components, paths } from \"./schema\";\n\nexport interface ParchmentClientOptions {\n /** Base URL of the Parchment API, e.g. https://api.purveyors.io */\n baseUrl: string;\n /**\n * Optional bearer token (a Supabase JWT, API key, or dedicated machine\n * credential). Sent as\n * `Authorization: Bearer <token>`. Auth is resolved server-side at the route\n * boundary; the SDK only forwards the credential.\n */\n token?: string;\n /** Override the fetch implementation (useful for tests or custom runtimes). */\n fetch?: ClientOptions[\"fetch\"];\n}\n\n/** Query parameters for {@link ParchmentClient.catalog.list}. */\nexport type CatalogListQuery = NonNullable<\n paths[\"/v1/catalog\"][\"get\"][\"parameters\"][\"query\"]\n>;\n/** A catalog row returned by the canonical listing resource. */\nexport type CatalogItem = components[\"schemas\"][\"CatalogItem\"];\n/** API-owned row-level trust summary returned when `include=proof`. */\nexport type CatalogProofSummary = components[\"schemas\"][\"CatalogProofSummary\"];\n/** Query parameters for {@link ParchmentClient.catalog.facets}. */\nexport type CatalogFacetsQuery = NonNullable<\n paths[\"/v1/catalog/facets\"][\"get\"][\"parameters\"][\"query\"]\n>;\n/**\n * Optional headers for {@link ParchmentClient.catalog.list}, notably the\n * RFC 7240 `Prefer: handling=lenient|strict` override (PADR-0013 §7). Sending\n * `handling=lenient` opts a strict caller (API key or bearer-session JWT) back\n * into strip-with-notice degradation instead of a 401/403 hard-deny.\n */\nexport type CatalogListHeaders = NonNullable<\n paths[\"/v1/catalog\"][\"get\"][\"parameters\"][\"header\"]\n>;\n/** Query parameters for {@link ParchmentClient.catalog.map}. */\nexport type CatalogMapQuery = NonNullable<\n paths[\"/v1/catalog/map\"][\"get\"][\"parameters\"][\"query\"]\n>;\n/** Optional handling headers for {@link ParchmentClient.catalog.map}. */\nexport type CatalogMapHeaders = NonNullable<\n paths[\"/v1/catalog/map\"][\"get\"][\"parameters\"][\"header\"]\n>;\n/** Lightweight map projection over the caller-visible catalog. */\nexport type CatalogMapResponse = components[\"schemas\"][\"CatalogMapResponse\"];\n/** Optional headers for {@link ParchmentClient.catalog.facets}; see {@link CatalogListHeaders}. */\nexport type CatalogFacetsHeaders = NonNullable<\n paths[\"/v1/catalog/facets\"][\"get\"][\"parameters\"][\"header\"]\n>;\n/** Query parameters for {@link ParchmentClient.catalog.originPriceStats}. */\nexport type CatalogOriginPriceStatsQuery = NonNullable<\n paths[\"/v1/catalog/origin-price-stats\"][\"get\"][\"parameters\"][\"query\"]\n>;\n/** Query parameters for {@link ParchmentClient.catalog.stats}. */\nexport type CatalogStatsQuery = NonNullable<\n paths[\"/v1/catalog/stats\"][\"get\"][\"parameters\"][\"query\"]\n>;\n/** Query parameters for {@link ParchmentClient.catalog.rank}. */\nexport type CatalogRankQuery = NonNullable<\n paths[\"/v1/catalog/rank\"][\"get\"][\"parameters\"][\"query\"]\n>;\n/** Query parameters for {@link ParchmentClient.catalog.rankPremium}. */\nexport type CatalogRankPremiumQuery = NonNullable<\n paths[\"/v1/catalog/rank-premium\"][\"get\"][\"parameters\"][\"query\"]\n>;\n/** Query parameters for {@link ParchmentClient.catalog.suppliers}. */\nexport type CatalogSuppliersQuery = NonNullable<\n paths[\"/v1/catalog/suppliers\"][\"get\"][\"parameters\"][\"query\"]\n>;\n/** Query parameters for {@link ParchmentClient.catalog.supplierDetail}. */\nexport type CatalogSupplierDetailQuery = NonNullable<\n paths[\"/v1/catalog/suppliers/detail\"][\"get\"][\"parameters\"][\"query\"]\n>;\n/** Query parameters for {@link ParchmentClient.catalog.supplierRank}. */\nexport type CatalogSupplierRankQuery = NonNullable<\n paths[\"/v1/catalog/suppliers/rank\"][\"get\"][\"parameters\"][\"query\"]\n>;\n/** Optional headers for ranking endpoints; see {@link CatalogListHeaders}. */\nexport type CatalogRankHeaders = NonNullable<\n paths[\"/v1/catalog/rank\"][\"get\"][\"parameters\"][\"header\"]\n>;\n/** Optional headers for premium ranking endpoints; see {@link CatalogListHeaders}. */\nexport type CatalogRankPremiumHeaders = NonNullable<\n paths[\"/v1/catalog/rank-premium\"][\"get\"][\"parameters\"][\"header\"]\n>;\n/** Optional headers for supplier aggregate endpoints; see {@link CatalogListHeaders}. */\nexport type CatalogSupplierHeaders = NonNullable<\n paths[\"/v1/catalog/suppliers\"][\"get\"][\"parameters\"][\"header\"]\n>;\n/** Query parameters for {@link ParchmentClient.catalog.similar}. */\nexport type CatalogSimilarQuery = NonNullable<\n paths[\"/v1/catalog/{id}/similar\"][\"get\"][\"parameters\"][\"query\"]\n>;\n/** Query parameters for {@link ParchmentClient.catalog.compare}. */\nexport type CatalogCompareQuery = NonNullable<\n paths[\"/v1/catalog/compare\"][\"get\"][\"parameters\"][\"query\"]\n>;\n/** Query parameters for {@link ParchmentClient.catalog.grades}. */\nexport type CatalogGradesQuery = NonNullable<\n paths[\"/v1/catalog/grades\"][\"get\"][\"parameters\"][\"query\"]\n>;\n/** Query parameters for {@link ParchmentClient.catalog.taxonomies}. */\nexport type CatalogTaxonomiesQuery = NonNullable<\n paths[\"/v1/catalog/taxonomies\"][\"get\"][\"parameters\"][\"query\"]\n>;\n/** Query parameters for {@link ParchmentClient.catalog.priceHistory}. */\nexport type CatalogPriceHistoryQuery = NonNullable<\n paths[\"/v1/catalog/{id}/price-history\"][\"get\"][\"parameters\"][\"query\"]\n>;\n/** Query parameters for {@link ParchmentClient.priceIndex.list}. */\nexport type PriceIndexQuery = NonNullable<\n paths[\"/v1/price-index\"][\"get\"][\"parameters\"][\"query\"]\n>;\n/** Query parameters for {@link ParchmentClient.priceIndex.history}. */\nexport type PriceIndexHistoryQuery = NonNullable<\n paths[\"/v1/price-index/history\"][\"get\"][\"parameters\"][\"query\"]\n>;\n/** Query parameters for {@link ParchmentClient.market.signals}. */\nexport type MarketSignalsQuery = NonNullable<\n paths[\"/v1/market/signals\"][\"get\"][\"parameters\"][\"query\"]\n>;\n/** Aggregate-only public green-coffee market evidence. */\nexport type MarketOverview = components[\"schemas\"][\"MarketOverviewResponse\"];\n/** Named public-catalog and supplier evidence for Parchment Intelligence callers. */\nexport type MarketEvidence = components[\"schemas\"][\"MarketEvidenceResponse\"];\n/** Query parameters for {@link ParchmentClient.priceIndex.stats}. */\nexport type PriceIndexStatsQuery = NonNullable<\n paths[\"/v1/price-index/stats\"][\"get\"][\"parameters\"][\"query\"]\n>;\n/** Query parameters for {@link ParchmentClient.market.metadataIndex}. */\nexport type MetadataIndexQuery = NonNullable<\n paths[\"/v1/market/metadata-index\"][\"get\"][\"parameters\"][\"query\"]\n>;\n/** Query parameters for {@link ParchmentClient.procurement.briefs.matches}. */\nexport type BriefMatchesQuery = NonNullable<\n paths[\"/v1/procurement/briefs/{id}/matches\"][\"get\"][\"parameters\"][\"query\"]\n>;\n/** Request body for {@link ParchmentClient.procurement.briefs.create}. */\nexport type SourcingBriefCreateRequest =\n components[\"schemas\"][\"SourcingBriefCreateRequest\"];\n/** Query parameters for {@link ParchmentClient.portfolio.trackedLots.list}. */\nexport type TrackedLotsListQuery = NonNullable<\n paths[\"/v1/portfolio/tracked-lots\"][\"get\"][\"parameters\"][\"query\"]\n>;\n/** A tracked catalog lot enriched with current catalog and price state. */\nexport type TrackedLotSummary = components[\"schemas\"][\"TrackedLotSummary\"];\n/** State returned by tracked-lot PUT and DELETE mutations. */\nexport type TrackedLotMutation =\n components[\"schemas\"][\"TrackedLotMutationResponse\"];\n/** Closed session-only command for {@link ParchmentClient.confirmedActions.execute}. */\nexport type ConfirmedActionExecuteRequest = NonNullable<\n paths[\"/v1/confirmed-actions/execute\"][\"post\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\n/** Create-or-get body for {@link ParchmentClient.conversation.workspaces.getOrCreate}. */\nexport type ConversationWorkspaceCreateRequest = NonNullable<\n paths[\"/v1/conversation/workspaces\"][\"post\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\nexport type ConversationWorkspaceMetadataRequest = NonNullable<\n paths[\"/v1/conversation/workspaces/{workspaceId}\"][\"patch\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\nexport type ConversationMessageAppendRequest = NonNullable<\n paths[\"/v1/conversation/workspaces/{workspaceId}/messages\"][\"post\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\nexport type ConversationWorkspaceClearRequest = NonNullable<\n paths[\"/v1/conversation/workspaces/{workspaceId}/messages/clear\"][\"post\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\nexport type ConversationCanvasUpdateRequest = NonNullable<\n paths[\"/v1/conversation/workspaces/{workspaceId}/canvas\"][\"put\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\nexport type ConversationSummaryUpdateRequest = NonNullable<\n paths[\"/v1/conversation/workspaces/{workspaceId}/summary\"][\"put\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\nexport type ConversationMemoryUpdateRequest = NonNullable<\n paths[\"/v1/conversation/memory\"][\"put\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\nexport type ConversationMemoryDreamRequest = NonNullable<\n paths[\"/v1/conversation/memory/dream\"][\"post\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\n/** Query parameters for {@link ParchmentClient.inventory.list}. */\nexport type InventoryListQuery = NonNullable<\n paths[\"/v1/inventory\"][\"get\"][\"parameters\"][\"query\"]\n>;\n/** Request body for {@link ParchmentClient.inventory.create}. */\nexport type InventoryCreateRequest = NonNullable<\n paths[\"/v1/inventory\"][\"post\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\n/** Stable-operation request for {@link ParchmentClient.inventory.shareGrants.create}. */\nexport type InventoryShareGrantCreateRequest = NonNullable<\n paths[\"/v1/inventory/share-grants\"][\"post\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\n/** The one-time raw-token grant returned by create or same-operation replay. */\nexport type InventoryShareGrant = components[\"schemas\"][\"InventoryShareGrant\"];\n/** Anonymous capability body for {@link ParchmentClient.inventory.shareGrants.redeem}. */\nexport type InventoryShareGrantRedeemRequest = NonNullable<\n paths[\"/v1/inventory/share-grants/redeem\"][\"post\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\n/** Safe legacy-oriented inventory row returned by capability redemption. */\nexport type InventoryShareInventory =\n components[\"schemas\"][\"InventoryShareInventory\"];\n/** Catalog allowlist nested in a shared inventory row. */\nexport type InventoryShareCatalog =\n components[\"schemas\"][\"InventoryShareCatalog\"];\n/** Six-field roast summary nested in member/admin shares. */\nexport type InventoryShareRoastSummary =\n components[\"schemas\"][\"InventoryShareRoastSummary\"];\ntype CatalogInventoryCreateRequest =\n components[\"schemas\"][\"CatalogInventoryCreateRequest\"];\ntype ManualInventoryCreateRequest =\n components[\"schemas\"][\"ManualInventoryCreateRequest\"];\n/** Request body for {@link ParchmentClient.inventory.createManualBatch}. */\nexport type ManualInventoryBatchCreateRequest = NonNullable<\n paths[\"/v1/inventory/manual-batches\"][\"post\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\n/** Request body for reserving durable server-owned manual-batch intent. */\nexport type ManualInventoryBatchReserveRequest = NonNullable<\n paths[\"/v1/inventory/manual-batches/reservations\"][\"post\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\n/** Complete canonical intent accepted by the catalog-batch reservation lane. */\nexport type CatalogInventoryBatchReserveRequest = NonNullable<\n paths[\"/v1/inventory/catalog-batches/reservations\"][\"post\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\n/** Durable catalog-batch state returned by reserve, commit, and status. */\nexport type CatalogInventoryBatchLifecycle =\n components[\"schemas\"][\"CatalogInventoryBatchLifecycle\"];\n/** Identity-only terminal result; catalog resources remain a separate read. */\nexport type CatalogInventoryBatchResult =\n components[\"schemas\"][\"CatalogInventoryBatchResult\"];\n/** Request body for {@link ParchmentClient.inventory.update}. */\nexport type InventoryUpdateRequest = NonNullable<\n paths[\"/v1/inventory/{id}\"][\"patch\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\n/** Query parameters for {@link ParchmentClient.roasts.list}. */\nexport type RoastListQuery = NonNullable<\n paths[\"/v1/roasts\"][\"get\"][\"parameters\"][\"query\"]\n>;\n/** Query parameters for {@link ParchmentClient.roasts.get}. */\nexport type RoastGetQuery = NonNullable<\n paths[\"/v1/roasts/{id}\"][\"get\"][\"parameters\"][\"query\"]\n>;\n/** Query parameters for {@link ParchmentClient.roasts.chartData}. */\nexport type RoastChartDataQuery = NonNullable<\n paths[\"/v1/roasts/{id}/chart-data\"][\"get\"][\"parameters\"][\"query\"]\n>;\n/** Typed chart payload returned by {@link ParchmentClient.roasts.chartData}. */\nexport type RoastChartData =\n components[\"schemas\"][\"RoastChartDataResponse\"][\"data\"];\n/** One sampled primary or auxiliary series in a roast chart payload. */\nexport type RoastChartSeries = components[\"schemas\"][\"RoastChartSeries\"];\n/** One discrete milestone or control event in a roast chart payload. */\nexport type RoastChartEvent = components[\"schemas\"][\"RoastChartEvent\"];\nexport type ReferenceProfile =\n components[\"schemas\"][\"ReferenceProfileResponse\"][\"data\"];\nexport type ReferenceProfileSummary =\n components[\"schemas\"][\"ReferenceProfileSummary\"];\nexport type ReferenceProfileChart =\n components[\"schemas\"][\"ReferenceProfileChart\"];\nexport type ReferenceProfileImportRequest = NonNullable<\n paths[\"/v1/reference-profiles/imports\"][\"post\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\nexport type ReferenceProfileFromRoastRequest = NonNullable<\n paths[\"/v1/reference-profiles/from-roast\"][\"post\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\n/** Request body for {@link ParchmentClient.referenceProfiles.previewFromRoast}. */\nexport type ReferenceProfileRoastGenerationRequest = NonNullable<\n paths[\"/v1/reference-profiles/from-roast/preview\"][\"post\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\n/** Query parameters for {@link ParchmentClient.referenceProfiles.roastCandidates}. */\nexport type ReferenceProfileRoastCandidatesQuery = NonNullable<\n paths[\"/v1/reference-profiles/from-roast/candidates\"][\"get\"][\"parameters\"][\"query\"]\n>;\n/** One executed roast that can be the base for a planned profile. */\nexport type ReferenceProfileRoastCandidate =\n components[\"schemas\"][\"ReferenceProfileRoastCandidatesResponse\"][\"data\"][\"roasts\"][number];\nexport type ReferenceProfileUpdateRequest = NonNullable<\n paths[\"/v1/reference-profiles/{id}\"][\"patch\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\nexport type ReferenceProfileGenerationRequest = NonNullable<\n paths[\"/v1/reference-profiles/{id}/revisions/{revisionId}/preview\"][\"post\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\nexport type ProfileComparisonRequest = NonNullable<\n paths[\"/v1/profile-comparisons\"][\"post\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\n/** Request body for {@link ParchmentClient.roasts.classify}. */\nexport type RoastClassificationRequest = NonNullable<\n paths[\"/v1/roasts/classify\"][\"post\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\n/** Request body for {@link ParchmentClient.roasts.create}. */\nexport type RoastCreateRequest = NonNullable<\n paths[\"/v1/roasts\"][\"post\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\n/** Atomic named-batch body for {@link ParchmentClient.roasts.createBatch}. */\nexport type RoastBatchCreateRequest = NonNullable<\n paths[\"/v1/roasts/batches\"][\"post\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\n/** Request body for {@link ParchmentClient.roasts.update}. */\nexport type RoastUpdateRequest = NonNullable<\n paths[\"/v1/roasts/{id}\"][\"patch\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\n/** Source-aware live curve body for {@link ParchmentClient.roasts.replaceLiveCurve}. */\nexport type RoastLiveCurveRequest = NonNullable<\n paths[\"/v1/roasts/{id}/live-curve\"][\"put\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\n/** Request body for {@link ParchmentClient.roasts.import}. */\nexport type RoastImportRequest = NonNullable<\n paths[\"/v1/roasts/imports\"][\"post\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\n/** Request body for {@link ParchmentClient.roasts.importFromReference}. */\nexport type RoastImportFromReferenceRequest = NonNullable<\n paths[\"/v1/roasts/imports/from-reference\"][\"post\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\n/** Request body for {@link ParchmentClient.roasts.replaceArtisanImport}. */\nexport type RoastArtisanImportReplaceRequest = NonNullable<\n paths[\"/v1/roasts/{id}/artisan-import\"][\"put\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\n/** Query parameters for {@link ParchmentClient.sales.list}. */\nexport type SalesListQuery = NonNullable<\n paths[\"/v1/sales\"][\"get\"][\"parameters\"][\"query\"]\n>;\n/** Query parameters for {@link ParchmentClient.profit.list}. */\nexport type ProfitListQuery = NonNullable<\n paths[\"/v1/profit\"][\"get\"][\"parameters\"][\"query\"]\n>;\n/** One owner inventory lot's canonical cost, revenue, and roast summary. */\nexport type ProfitItem = components[\"schemas\"][\"ProfitItem\"];\n/** Request body for {@link ParchmentClient.sales.create}. */\nexport type SalesCreateRequest = NonNullable<\n paths[\"/v1/sales\"][\"post\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\n/** Request body for {@link ParchmentClient.sales.update}. */\nexport type SalesUpdateRequest = NonNullable<\n paths[\"/v1/sales/{id}\"][\"patch\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\n/** Query parameters for {@link ParchmentClient.tasting.get}. */\nexport type TastingGetQuery = NonNullable<\n paths[\"/v1/tasting/{catalogId}\"][\"get\"][\"parameters\"][\"query\"]\n>;\n/** Request body for {@link ParchmentClient.tasting.rate}. */\nexport type TastingRateRequest = NonNullable<\n paths[\"/v1/tasting/inventory/{inventoryId}\"][\"put\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\n/** Request body for {@link ParchmentClient.apiKeys.create}. */\nexport type ApiKeyCreateRequest = NonNullable<\n paths[\"/v1/api-keys\"][\"post\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\n/** Query parameters for the session owner's API-key traffic analytics. */\nexport type OwnerApiUsageQuery = NonNullable<\n paths[\"/v1/api-usage\"][\"get\"][\"parameters\"][\"query\"]\n>;\n/** Bounded owner API-key traffic analytics (not session or billing usage). */\nexport type OwnerApiUsage = components[\"schemas\"][\"OwnerApiUsageResponse\"];\n/** Request body for {@link ParchmentClient.emailSubscriptions.setMarketRead}. */\nexport type MarketReadPreferenceRequest = NonNullable<\n paths[\"/v1/email-subscriptions/market-read\"][\"put\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\n/** Request body for {@link ParchmentClient.emailSubscriptions.unsubscribeMarketRead}. */\nexport type MarketReadUnsubscribeRequest = NonNullable<\n paths[\"/v1/email-subscriptions/market-read/unsubscribe\"][\"post\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\n/** Immutable deployed projection accepted by {@link ParchmentClient.marketBrief.drafts.create}. */\nexport type MarketBriefDraftCreateRequest = NonNullable<\n paths[\"/v1/market-brief/drafts\"][\"post\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\n/** Durable Parchment-owned provider-draft state. */\nexport type MarketBriefDraftState =\n components[\"schemas\"][\"MarketBriefDraftState\"];\n/** Account-owned Market Read email preference. */\nexport type EmailSubscriptionPreference =\n components[\"schemas\"][\"EmailSubscriptionPreference\"];\n/** Durable state returned by an account-deletion request. */\nexport type AccountDeletionOperation =\n components[\"schemas\"][\"AccountDeletionOperation\"];\n/** Purpose-bound recent-reauthentication assertion for account deletion. */\nexport type AccountDeletionRequest = NonNullable<\n paths[\"/v1/account-deletion\"][\"post\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\n/** Purchase-key request for dormant direct Parchment Checkout creation/replay. */\nexport type BillingCheckoutCreateRequest = NonNullable<\n paths[\"/v1/billing/checkout-sessions\"][\"post\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\n/** Durable Checkout admission state; provider Session id stays server-side. */\nexport type BillingCheckoutSession =\n components[\"schemas\"][\"BillingCheckoutSession\"];\n/** Durable cancellation/resume request. */\nexport type BillingSubscriptionMutationRequest = NonNullable<\n paths[\"/v1/billing/subscriptions/{subscriptionId}\"][\"patch\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\n/** Durable provider subscription-operation state. */\nexport type BillingSubscriptionOperation =\n components[\"schemas\"][\"BillingSubscriptionOperation\"];\n/** Manual entitlement baseline update for administrators. */\nexport type BillingManualEntitlementsRequest = NonNullable<\n paths[\"/v1/admin/billing-entitlements/{ownerId}/manual\"][\"patch\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\nexport type CliAuthRequestCreate = NonNullable<\n paths[\"/v1/cli-auth/requests\"][\"post\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\nexport type CliAuthInspectRequest = NonNullable<\n paths[\"/v1/cli-auth/inspect\"][\"post\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\nexport type CliAuthApproveRequest = NonNullable<\n paths[\"/v1/cli-auth/approve\"][\"post\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\nexport type CliAuthExchangeRequest = NonNullable<\n paths[\"/v1/cli-auth/token\"][\"post\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\n/** Browser-compatible AI SDK UI-message stream request. */\nexport type ConversationChatStreamRequest =\n components[\"schemas\"][\"ConversationChatStreamRequest\"];\n\n/**\n * Create a typed Parchment API client.\n *\n * The generated core (openapi-fetch over the generated `paths` types) is the\n * contract truth; the named helpers below are the hand-maintained ergonomic\n * layer and grow as endpoints land. `raw` always exposes the underlying typed\n * client for direct path access to anything not yet wrapped.\n */\nexport function createParchmentClient(options: ParchmentClientOptions) {\n const { baseUrl, token, fetch: fetchImpl } = options;\n\n const client = createClient<paths>({\n baseUrl,\n fetch: fetchImpl,\n headers: token ? { Authorization: `Bearer ${token}` } : undefined,\n });\n\n const postInventory = (\n body: InventoryCreateRequest,\n options?: { idempotencyKey?: string },\n ) =>\n client.POST(\"/v1/inventory\", {\n body,\n params: options?.idempotencyKey\n ? { header: { \"idempotency-key\": options.idempotencyKey } }\n : undefined,\n });\n\n function createInventory(\n body: ManualInventoryCreateRequest,\n options: { idempotencyKey: string },\n ): ReturnType<typeof postInventory>;\n function createInventory(\n body: CatalogInventoryCreateRequest,\n options?: { idempotencyKey?: string },\n ): ReturnType<typeof postInventory>;\n function createInventory(\n body: InventoryCreateRequest,\n options?: { idempotencyKey?: string },\n ): ReturnType<typeof postInventory> {\n return postInventory(body, options);\n }\n\n return {\n /** The underlying typed openapi-fetch client for direct path access. */\n raw: client,\n /** Liveness and service identity. */\n health: () => client.GET(\"/health\"),\n /** Resolved principal and entitlements for the caller. */\n me: () => client.GET(\"/v1/me\"),\n apiKeys: {\n /** List API keys owned by the authenticated session user. */\n list: () => client.GET(\"/v1/api-keys\"),\n /** Create an API key. The raw secret is returned only once. */\n create: (body: ApiKeyCreateRequest) =>\n client.POST(\"/v1/api-keys\", { body }),\n /** Revoke an API key owned by the authenticated session user. */\n revoke: (id: string) =>\n client.DELETE(\"/v1/api-keys/{id}\", {\n params: { path: { id } },\n }),\n /** Rotate an API key and return the replacement secret once. */\n rotate: (id: string) =>\n client.POST(\"/v1/api-keys/{id}/rotate\", {\n params: { path: { id } },\n }),\n },\n apiUsage: {\n /**\n * Read bounded API-key traffic analytics for the authenticated session\n * owner. Headline monthly/hourly counts are exact; daily/per-key series\n * carry explicit truncation metadata.\n */\n get: (query?: OwnerApiUsageQuery) =>\n client.GET(\"/v1/api-usage\", { params: { query } }),\n },\n emailSubscriptions: {\n /** Get the authenticated session user's Market Read preference. */\n get: () => client.GET(\"/v1/email-subscriptions\"),\n /** Idempotently set the authenticated session user's Market Read preference. */\n setMarketRead: (body: MarketReadPreferenceRequest) =>\n client.PUT(\"/v1/email-subscriptions/market-read\", { body }),\n /** Idempotently unsubscribe using an opaque capability without requiring a session. */\n unsubscribeMarketRead: (body: MarketReadUnsubscribeRequest) =>\n client.POST(\"/v1/email-subscriptions/market-read/unsubscribe\", {\n body,\n }),\n },\n marketBrief: {\n drafts: {\n /** Accept, create, or recover one immutable deployed edition version. */\n create: (body: MarketBriefDraftCreateRequest) =>\n client.POST(\"/v1/market-brief/drafts\", { body }),\n },\n },\n accountDeletion: {\n /** Accept or replay deletion using a purpose-bound reauthentication assertion. */\n request: (body: AccountDeletionRequest) =>\n client.POST(\"/v1/account-deletion\", { body }),\n },\n billing: {\n checkout: {\n /** Create or replay an embedded Checkout Session after activation. */\n create: (body: BillingCheckoutCreateRequest) =>\n client.POST(\"/v1/billing/checkout-sessions\", { body }),\n /** Read owner-bound durable admission state. */\n get: (admissionId: string) =>\n client.GET(\"/v1/billing/checkout-sessions/{admissionId}\", {\n params: { path: { admissionId } },\n }),\n /** Authoritatively reconcile an admission with Stripe. */\n reconcile: (admissionId: string) =>\n client.POST(\"/v1/billing/checkout-sessions/{admissionId}/reconcile\", {\n params: { path: { admissionId } },\n }),\n },\n subscriptions: {\n /** List canonical owner subscription snapshots. */\n list: () => client.GET(\"/v1/billing/subscriptions\"),\n /** Durably cancel or resume the complete provider subscription. */\n mutate: (\n subscriptionId: string,\n body: BillingSubscriptionMutationRequest,\n ) =>\n client.PATCH(\"/v1/billing/subscriptions/{subscriptionId}\", {\n params: { path: { subscriptionId } },\n body,\n }),\n },\n },\n billingAdministration: {\n /** Read bounded canonical-entitlement discrepancies. */\n discrepancies: () =>\n client.GET(\"/v1/admin/billing-entitlement-discrepancies\"),\n /** Recompute billing contribution without changing manual grants. */\n recompute: (ownerId: string) =>\n client.POST(\n \"/v1/admin/billing-entitlement-discrepancies/{ownerId}/recompute\",\n { params: { path: { ownerId } } },\n ),\n /** Update the preserved manual entitlement baseline. */\n setManual: (ownerId: string, body: BillingManualEntitlementsRequest) =>\n client.PATCH(\"/v1/admin/billing-entitlements/{ownerId}/manual\", {\n params: { path: { ownerId } },\n body,\n }),\n },\n cliAuth: {\n /** Create a signed, short-lived login request bound to a PKCE challenge. */\n create: (body: CliAuthRequestCreate) =>\n client.POST(\"/v1/cli-auth/requests\", { body }),\n /** Inspect a signed request before displaying the web consent screen. */\n inspect: (body: CliAuthInspectRequest) =>\n client.POST(\"/v1/cli-auth/inspect\", { body }),\n /** Approve a request using the client's authenticated user session. */\n approve: (body: CliAuthApproveRequest) =>\n client.POST(\"/v1/cli-auth/approve\", { body }),\n /** Exchange an approved request and verifier for the one-time raw key. */\n exchange: (body: CliAuthExchangeRequest) =>\n client.POST(\"/v1/cli-auth/token\", { body }),\n },\n catalog: {\n /** Catalog capabilities and visibility for the caller. */\n access: () => client.GET(\"/v1/catalog/access\"),\n /**\n * List public catalog coffees (paginated). Pass `headers` to send the\n * `Prefer: handling=lenient|strict` override (see {@link CatalogListHeaders}).\n */\n list: (query?: CatalogListQuery, headers?: CatalogListHeaders) =>\n client.GET(\"/v1/catalog\", { params: { query, header: headers } }),\n /** Deterministic clusters, canonical place features, and elevation profile. */\n map: (query?: CatalogMapQuery, headers?: CatalogMapHeaders) =>\n client.GET(\"/v1/catalog/map\", {\n params: { query, header: headers },\n }),\n /**\n * Catalog filter metadata and counted facets. Pass `headers` to send the\n * `Prefer: handling=lenient|strict` override (see {@link CatalogFacetsHeaders}).\n */\n facets: (query?: CatalogFacetsQuery, headers?: CatalogFacetsHeaders) =>\n client.GET(\"/v1/catalog/facets\", {\n params: { query, header: headers },\n }),\n /** Live catalog price context by origin. */\n originPriceStats: (query?: CatalogOriginPriceStatsQuery) =>\n client.GET(\"/v1/catalog/origin-price-stats\", { params: { query } }),\n /** Aggregate stats over the caller-visible catalog. */\n stats: (query?: CatalogStatsQuery) =>\n client.GET(\"/v1/catalog/stats\", { params: { query } }),\n /** Rank caller-visible catalog coffees by deterministic objectives. */\n rank: (query?: CatalogRankQuery, headers?: CatalogRankHeaders) =>\n client.GET(\"/v1/catalog/rank\", {\n params: { query, header: headers },\n }),\n /** Rank premium catalog candidates by Purveyor Score. */\n rankPremium: (\n query?: CatalogRankPremiumQuery,\n headers?: CatalogRankPremiumHeaders,\n ) =>\n client.GET(\"/v1/catalog/rank-premium\", {\n params: { query, header: headers },\n }),\n /** List supplier aggregates over caller-visible catalog coffees. */\n suppliers: (\n query?: CatalogSuppliersQuery,\n headers?: CatalogSupplierHeaders,\n ) =>\n client.GET(\"/v1/catalog/suppliers\", {\n params: { query, header: headers },\n }),\n /** Return aggregate detail for a supplier query. */\n supplierDetail: (\n query: CatalogSupplierDetailQuery,\n headers?: CatalogSupplierHeaders,\n ) =>\n client.GET(\"/v1/catalog/suppliers/detail\", {\n params: { query, header: headers },\n }),\n /** Rank suppliers by catalog score and availability. */\n supplierRank: (\n query?: CatalogSupplierRankQuery,\n headers?: CatalogSupplierHeaders,\n ) =>\n client.GET(\"/v1/catalog/suppliers/rank\", {\n params: { query, header: headers },\n }),\n /** Aggregate proof-coverage over the public catalog. */\n proofCoverage: () => client.GET(\"/v1/catalog/proof-coverage\"),\n /** Find catalog coffees similar to a target coffee. */\n similar: (id: string, query?: CatalogSimilarQuery) =>\n client.GET(\"/v1/catalog/{id}/similar\", {\n params: { path: { id }, query },\n }),\n /** Compare 2 to 6 catalog coffees side by side. */\n compare: (query: CatalogCompareQuery) =>\n client.GET(\"/v1/catalog/compare\", { params: { query } }),\n /** Daily price history for one catalog coffee, with minimum-tier change events. */\n priceHistory: (id: string, query?: CatalogPriceHistoryQuery) =>\n client.GET(\"/v1/catalog/{id}/price-history\", {\n params: { path: { id }, query },\n }),\n /** Green grade designation vocabulary, e.g. KE:AA, GT:SHB, PREP:EP. */\n grades: (query?: CatalogGradesQuery) =>\n client.GET(\"/v1/catalog/grades\", { params: { query } }),\n /** Variety, species, and drying-method vocabularies with aliases and family links. */\n taxonomies: (query?: CatalogTaxonomiesQuery) =>\n client.GET(\"/v1/catalog/taxonomies\", { params: { query } }),\n },\n priceIndex: {\n /** Available exact 30-day comparisons, with no empty-origin search. */\n comparisons: (query?: { wholesale?: \"true\" | \"false\" | \"all\" }) =>\n client.GET(\"/v1/price-index/comparisons\", { params: { query } }),\n /** Fresh matched-listing movement, not catalog composition or a canonical publication. */\n comparison: (query: {\n from: string;\n to: string;\n origin: string;\n wholesale?: \"true\" | \"false\";\n }) => client.GET(\"/v1/price-index/comparison\", { params: { query } }),\n /** Parchment Price Index (aggregate snapshots). */\n list: (query?: PriceIndexQuery) =>\n client.GET(\"/v1/price-index\", { params: { query } }),\n /** Tier-one price-index chart history. */\n history: (query?: PriceIndexHistoryQuery) =>\n client.GET(\"/v1/price-index/history\", { params: { query } }),\n /** Price movement significance stats (precomputed). */\n stats: (query?: PriceIndexStatsQuery) =>\n client.GET(\"/v1/price-index/stats\", { params: { query } }),\n },\n market: {\n /** Aggregate daily changes, catalog coverage, movement, processing, and origin prices. */\n overview: () => client.GET(\"/v1/market/overview\"),\n /** Entitled named-lot and supplier evidence over the public catalog. */\n evidence: () => client.GET(\"/v1/market/evidence\"),\n /** Actionable market value signals. */\n signals: (query?: MarketSignalsQuery) =>\n client.GET(\"/v1/market/signals\", { params: { query } }),\n /** Metadata-trend index (process/disclosure/Purveyor Score over time). */\n metadataIndex: (query?: MetadataIndexQuery) =>\n client.GET(\"/v1/market/metadata-index\", { params: { query } }),\n },\n procurement: {\n briefs: {\n /** List the caller's saved sourcing briefs. */\n list: () => client.GET(\"/v1/procurement/briefs\"),\n /** Create a saved sourcing brief. */\n create: (body: SourcingBriefCreateRequest) =>\n client.POST(\"/v1/procurement/briefs\", { body }),\n /** Fetch one of the caller's sourcing briefs by id. */\n get: (id: string) =>\n client.GET(\"/v1/procurement/briefs/{id}\", {\n params: { path: { id } },\n }),\n /** Run a saved brief against the catalog (paginated matches). */\n matches: (id: string, query?: BriefMatchesQuery) =>\n client.GET(\"/v1/procurement/briefs/{id}/matches\", {\n params: { path: { id }, query },\n }),\n },\n },\n portfolio: {\n trackedLots: {\n /**\n * List an owner-scoped tracked catalog-id page and bounded recent\n * summaries enriched with live catalog state. Follow nextCursor when\n * a capped response reports truncation.\n */\n list: (query?: TrackedLotsListQuery) =>\n client.GET(\"/v1/portfolio/tracked-lots\", {\n params: { query },\n }),\n /** Idempotently set a visible catalog lot to tracked. */\n track: (catalogId: number) =>\n client.PUT(\"/v1/portfolio/tracked-lots/{catalogId}\", {\n params: { path: { catalogId } },\n }),\n /** Idempotently set an owner catalog lot to untracked. */\n untrack: (catalogId: number) =>\n client.DELETE(\"/v1/portfolio/tracked-lots/{catalogId}\", {\n params: { path: { catalogId } },\n }),\n },\n },\n confirmedActions: {\n /**\n * Execute or replay one user-confirmed product action. Session-only;\n * executionId is the durable payload-bound replay key.\n */\n execute: (body: ConfirmedActionExecuteRequest) =>\n client.POST(\"/v1/confirmed-actions/execute\", { body }),\n },\n conversation: {\n chat: {\n /**\n * Open a raw AI SDK UI-message stream. The response body is deliberately\n * left unread so BFFs and browser transports can forward chunks without\n * buffering. Aborting the supplied signal cancels the upstream request.\n */\n stream: (\n body: ConversationChatStreamRequest,\n init: { signal?: AbortSignal } = {},\n ): Promise<Response> => {\n const requestFetch = fetchImpl ?? globalThis.fetch;\n return requestFetch(\n new Request(`${baseUrl.replace(/\\/$/, \"\")}/v1/conversation/chat`, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n ...(token ? { Authorization: `Bearer ${token}` } : {}),\n },\n body: JSON.stringify(body),\n signal: init.signal,\n }),\n );\n },\n },\n workspaces: {\n /** Get or create the session owner's singleton workspace. */\n getOrCreate: (body: ConversationWorkspaceCreateRequest) =>\n client.POST(\"/v1/conversation/workspaces\", { body }),\n /** Read the bounded canonical workspace and message state. */\n get: (workspaceId: string, messageLimit = 50) =>\n client.GET(\"/v1/conversation/workspaces/{workspaceId}\", {\n params: { path: { workspaceId }, query: { messageLimit } },\n }),\n /** Update owner workspace title or type. */\n update: (\n workspaceId: string,\n body: ConversationWorkspaceMetadataRequest,\n ) =>\n client.PATCH(\"/v1/conversation/workspaces/{workspaceId}\", {\n params: { path: { workspaceId } },\n body,\n }),\n messages: {\n /** Read older messages before a canonical sequence cursor. */\n history: (\n workspaceId: string,\n expectedResetEpoch: number,\n beforeSequence: number,\n messageLimit = 100,\n ) =>\n client.GET(\n \"/v1/conversation/workspaces/{workspaceId}/messages/history\",\n {\n params: {\n path: { workspaceId },\n query: { expectedResetEpoch, beforeSequence, messageLimit },\n },\n },\n ),\n /** Append or replay payload-bound messages under a reset epoch. */\n append: (\n workspaceId: string,\n body: ConversationMessageAppendRequest,\n ) =>\n client.POST(\"/v1/conversation/workspaces/{workspaceId}/messages\", {\n params: { path: { workspaceId } },\n body,\n }),\n /** Clear messages and advance the workspace reset epoch. */\n clear: (\n workspaceId: string,\n body: ConversationWorkspaceClearRequest,\n ) =>\n client.POST(\n \"/v1/conversation/workspaces/{workspaceId}/messages/clear\",\n { params: { path: { workspaceId } }, body },\n ),\n },\n /** Optimistically replace canvas state. */\n updateCanvas: (\n workspaceId: string,\n body: ConversationCanvasUpdateRequest,\n ) =>\n client.PUT(\"/v1/conversation/workspaces/{workspaceId}/canvas\", {\n params: { path: { workspaceId } },\n body,\n }),\n /** Read bounded inputs for summary compaction. */\n getCompactionInputs: (workspaceId: string, messageLimit = 30) =>\n client.GET(\n \"/v1/conversation/workspaces/{workspaceId}/compaction-inputs\",\n {\n params: { path: { workspaceId }, query: { messageLimit } },\n },\n ),\n /** Commit a summary only if epoch, version, and high-water still match. */\n updateSummary: (\n workspaceId: string,\n body: ConversationSummaryUpdateRequest,\n ) =>\n client.PUT(\"/v1/conversation/workspaces/{workspaceId}/summary\", {\n params: { path: { workspaceId } },\n body,\n }),\n /** Generate and CAS-commit a Parchment-owned workspace summary. */\n compactSummary: (workspaceId: string) =>\n client.POST(\n \"/v1/conversation/workspaces/{workspaceId}/summary/compact\",\n { params: { path: { workspaceId } } },\n ),\n },\n memory: {\n /** Read the session owner's versioned durable memory. */\n get: () => client.GET(\"/v1/conversation/memory\"),\n /** Optimistically update session-owner memory. */\n update: (body: ConversationMemoryUpdateRequest) =>\n client.PUT(\"/v1/conversation/memory\", { body }),\n /** Reflect bounded recent messages into versioned session-owner memory. */\n dream: (body: ConversationMemoryDreamRequest) =>\n client.POST(\"/v1/conversation/memory/dream\", { body }),\n },\n },\n inventory: {\n /** List the caller's own green-coffee inventory (owner-scoped). */\n list: (query?: InventoryListQuery) =>\n client.GET(\"/v1/inventory\", { params: { query } }),\n shareGrants: {\n /**\n * Mint or replay a bounded cross-principal inventory capability. The\n * operation UUID is payload-bound and the raw token is returned only\n * by this response.\n */\n create: (body: InventoryShareGrantCreateRequest) =>\n client.POST(\"/v1/inventory/share-grants\", { body }),\n /**\n * Redeem a capability supplied in JSON (never in a URL). This helper\n * does not require the client to be configured with a bearer token.\n */\n redeem: (body: InventoryShareGrantRedeemRequest) =>\n client.POST(\"/v1/inventory/share-grants/redeem\", { body }),\n },\n /**\n * Create an owner inventory lot. Requires a session or an owner-bound API\n * key carrying the exact `inventory:write` scope. Manual coffee creates\n * require `idempotencyKey`; catalog-backed creates accept it optionally.\n * The same key and payload replay the original result.\n */\n create: createInventory,\n /**\n * Atomically create owner-private manual inventory lots. The required\n * idempotency UUID is the stable batch identity and can be reconciled\n * with `getManualBatch` after an uncertain response.\n */\n createManualBatch: (\n body: ManualInventoryBatchCreateRequest,\n options: { idempotencyKey: string },\n ) =>\n client.POST(\"/v1/inventory/manual-batches\", {\n params: {\n header: { \"idempotency-key\": options.idempotencyKey },\n },\n body,\n }),\n /** Return the durable terminal result for a manual inventory batch. */\n getManualBatch: (batchId: string) =>\n client.GET(\"/v1/inventory/manual-batches/{batchId}\", {\n params: { path: { batchId } },\n }),\n /**\n * Durably reserve a complete manual-batch request. Once accepted, clients\n * only need to persist the batch UUID.\n */\n reserveManualBatch: (body: ManualInventoryBatchReserveRequest) =>\n client.POST(\"/v1/inventory/manual-batches/reservations\", { body }),\n /** Commit a reserved batch by UUID with no request body. */\n commitManualBatch: (batchId: string) =>\n client.POST(\"/v1/inventory/manual-batches/{batchId}/commit\", {\n params: { path: { batchId } },\n }),\n /**\n * Get unknown, accepted, in-progress, completed, or terminal-rejected\n * state. Unknown is explicitly nonterminal, including missing or\n * cross-tenant UUIDs, so clients retain the UUID and retry.\n */\n getManualBatchStatus: (batchId: string) =>\n client.GET(\"/v1/inventory/manual-batches/{batchId}/status\", {\n params: { path: { batchId } },\n }),\n /** Durably reserve canonical catalog-backed inventory intent. */\n reserveCatalogBatch: (body: CatalogInventoryBatchReserveRequest) =>\n client.POST(\"/v1/inventory/catalog-batches/reservations\", { body }),\n /** Atomically commit a reserved catalog batch by UUID, with no body. */\n commitCatalogBatch: (batchId: string) =>\n client.POST(\"/v1/inventory/catalog-batches/{batchId}/commit\", {\n params: { path: { batchId } },\n }),\n /** Recover the owner-scoped lifecycle; missing batches remain unknown. */\n getCatalogBatchStatus: (batchId: string) =>\n client.GET(\"/v1/inventory/catalog-batches/{batchId}/status\", {\n params: { path: { batchId } },\n }),\n /**\n * Update one of the caller's own inventory rows. Pass `ifMatch` (the\n * row's `last_updated`) to enable optimistic concurrency (409 on mismatch).\n */\n update: (\n id: number,\n body: InventoryUpdateRequest,\n options?: { ifMatch?: string },\n ) =>\n client.PATCH(\"/v1/inventory/{id}\", {\n params: {\n path: { id },\n header: options?.ifMatch\n ? { \"if-match\": options.ifMatch }\n : undefined,\n },\n body,\n }),\n /**\n * Delete one of the caller's own inventory rows. Returns 409 if dependent\n * roast profiles or sales exist (no force-cascade).\n */\n delete: (id: number) =>\n client.DELETE(\"/v1/inventory/{id}\", { params: { path: { id } } }),\n },\n roasts: {\n /** Match Artisan roast metadata to one of the supplied inventory rows. */\n classify: (body: RoastClassificationRequest) =>\n client.POST(\"/v1/roasts/classify\", { body }),\n /** List the caller's own roast profiles (owner-scoped). */\n list: (query?: RoastListQuery) =>\n client.GET(\"/v1/roasts\", { params: { query } }),\n /**\n * Fetch one of the caller's roast profiles by id, optionally with its\n * temperature curve (`includeTemps`) and event markers (`includeEvents`).\n */\n get: (id: string, query?: RoastGetQuery) =>\n client.GET(\"/v1/roasts/{id}\", { params: { path: { id }, query } }),\n /** Fetch an owner roast's adaptively sampled chart curve and metadata. */\n chartData: (id: string, query?: RoastChartDataQuery) =>\n client.GET(\"/v1/roasts/{id}/chart-data\", {\n params: { path: { id }, query },\n }),\n /**\n * Create an owner roast profile, optionally with nested temperature/event\n * rows. Requires a session or an owner-bound API key carrying the exact\n * `roast:write` scope. The optional `idempotencyKey` is payload-bound:\n * same-key, same-payload retries replay, while changed payloads conflict.\n */\n create: (\n body: RoastCreateRequest,\n options?: { idempotencyKey?: string },\n ) =>\n client.POST(\"/v1/roasts\", {\n body,\n params: options?.idempotencyKey\n ? { header: { \"idempotency-key\": options.idempotencyKey } }\n : undefined,\n }),\n /**\n * Create every profile in one named batch atomically. The required\n * payload-bound idempotency key makes transport retries safe.\n */\n createBatch: (body: RoastBatchCreateRequest, idempotencyKey: string) =>\n client.POST(\"/v1/roasts/batches\", {\n body,\n params: { header: { \"idempotency-key\": idempotencyKey } },\n }),\n /**\n * Update one of the caller's own roast profiles. Pass `ifMatch` (the\n * row's `last_updated`) to enable optimistic concurrency (409 on mismatch).\n */\n update: (\n id: number,\n body: RoastUpdateRequest,\n options?: { ifMatch?: string },\n ) =>\n client.PATCH(\"/v1/roasts/{id}\", {\n params: {\n path: { id },\n header: options?.ifMatch\n ? { \"if-match\": options.ifMatch }\n : undefined,\n },\n body,\n }),\n /** Delete one of the caller's own roast profiles. */\n delete: (id: number) =>\n client.DELETE(\"/v1/roasts/{id}\", { params: { path: { id } } }),\n /** Delete every owner roast carrying one exact batch name. Session-only. */\n deleteBatch: (batchName: string) =>\n client.DELETE(\"/v1/roasts/batches/{batchName}\", {\n params: { path: { batchName } },\n }),\n /**\n * Replace live temperature samples and all event markers atomically,\n * while preserving non-live temperatures and deriving milestone fields.\n */\n replaceLiveCurve: (\n id: number,\n body: RoastLiveCurveRequest,\n options?: { ifMatch?: string },\n ) =>\n client.PUT(\"/v1/roasts/{id}/live-curve\", {\n params: {\n path: { id },\n header: options?.ifMatch\n ? { \"if-match\": options.ifMatch }\n : undefined,\n },\n body,\n }),\n /**\n * Create a roast profile from an Artisan `.alog` file against one of the\n * caller's green-coffee lots, persisting the imported curve, events, and\n * an artisan_import_log entry atomically. Requires a session or an\n * owner-bound API key carrying the exact `roast:write` scope. The\n * optional `idempotencyKey` is payload-bound: same-key, same-payload\n * retries replay, while changed payloads conflict.\n */\n import: (\n body: RoastImportRequest,\n options?: { idempotencyKey?: string },\n ) =>\n client.POST(\"/v1/roasts/imports\", {\n body,\n params: options?.idempotencyKey\n ? { header: { \"idempotency-key\": options.idempotencyKey } }\n : undefined,\n }),\n /**\n * Create a roast profile from the Artisan file stored with one of the\n * caller's uploaded reference profiles. Only uploaded Artisan references\n * qualify: planned (generated) profiles are never recorded as roasts,\n * and a reference saved from an existing roast is refused. Requires\n * Mallard Studio plus a session, or an owner-bound API key carrying the\n * exact `roast:read` and `roast:write` scopes. The optional\n * `idempotencyKey` is payload-bound.\n */\n importFromReference: (\n body: RoastImportFromReferenceRequest,\n options?: { idempotencyKey?: string },\n ) =>\n client.POST(\"/v1/roasts/imports/from-reference\", {\n body,\n params: options?.idempotencyKey\n ? { header: { \"idempotency-key\": options.idempotencyKey } }\n : undefined,\n }),\n /**\n * Replace the Artisan import data on one of the caller's existing roasts,\n * re-deriving its curve, events, and computed metrics while preserving the\n * roast's identity. Pass `ifMatch` (the roast's `last_updated`) to enable\n * optimistic concurrency (409 on mismatch).\n */\n replaceArtisanImport: (\n id: number,\n body: RoastArtisanImportReplaceRequest,\n options?: { ifMatch?: string },\n ) =>\n client.PUT(\"/v1/roasts/{id}/artisan-import\", {\n params: {\n path: { id },\n header: options?.ifMatch\n ? { \"if-match\": options.ifMatch }\n : undefined,\n },\n body,\n }),\n /**\n * Clear import-derived curve, events, metrics, and provenance data from\n * one of the caller's existing roasts without deleting the roast profile.\n */\n clearArtisanImport: (id: number) =>\n client.DELETE(\"/v1/roasts/{id}/artisan-import\", {\n params: { path: { id } },\n }),\n },\n referenceProfiles: {\n /** List Studio reference profiles without mixing them into roast history. */\n list: (includeArchived = false) =>\n client.GET(\"/v1/reference-profiles\", {\n params: { query: { includeArchived } },\n }),\n get: (id: string) =>\n client.GET(\"/v1/reference-profiles/{id}\", {\n params: { path: { id } },\n }),\n chart: (id: string, revisionId: string) =>\n client.GET(\"/v1/reference-profiles/{id}/revisions/{revisionId}/chart\", {\n params: { path: { id, revisionId } },\n }),\n /** Preview explicit changes without saving or changing the parent. */\n preview: (\n id: string,\n revisionId: string,\n body: ReferenceProfileGenerationRequest,\n ) =>\n client.POST(\n \"/v1/reference-profiles/{id}/revisions/{revisionId}/preview\",\n {\n params: { path: { id, revisionId } },\n body,\n },\n ),\n /** Save an immutable generated reference with parent lineage. */\n generate: (\n id: string,\n revisionId: string,\n body: ReferenceProfileGenerationRequest,\n idempotencyKey: string,\n ) =>\n client.POST(\n \"/v1/reference-profiles/{id}/revisions/{revisionId}/generated\",\n {\n params: {\n path: { id, revisionId },\n header: { \"idempotency-key\": idempotencyKey },\n },\n body,\n },\n ),\n /** Retrieve only a saved unsigned generated background profile. */\n exportGenerated: (id: string, revisionId: string) =>\n client.GET(\n \"/v1/reference-profiles/{id}/revisions/{revisionId}/export\",\n {\n params: { path: { id, revisionId } },\n },\n ),\n import: (body: ReferenceProfileImportRequest, idempotencyKey: string) =>\n client.POST(\"/v1/reference-profiles/imports\", {\n body,\n params: { header: { \"idempotency-key\": idempotencyKey } },\n }),\n /**\n * Save an executed roast as a reference. `basis: \"artisan_source\"`\n * copies the roast's stored Artisan file so a planned profile can be\n * built from it, and returns the reference already saved from that\n * roast's file instead of a duplicate; the default\n * `\"chart_snapshot\"` keeps a comparison-only chart.\n */\n fromRoast: (\n body: ReferenceProfileFromRoastRequest,\n idempotencyKey: string,\n ) =>\n client.POST(\"/v1/reference-profiles/from-roast\", {\n body,\n params: { header: { \"idempotency-key\": idempotencyKey } },\n }),\n /**\n * List the caller's executed roasts whose Artisan file is on record and\n * can therefore be the base for a planned profile, newest first.\n */\n roastCandidates: (query?: ReferenceProfileRoastCandidatesQuery) =>\n client.GET(\"/v1/reference-profiles/from-roast/candidates\", {\n params: { query },\n }),\n /**\n * Preview a planned profile built directly on an executed roast's stored\n * Artisan file. Read-only: nothing is saved and the roast is unchanged.\n */\n previewFromRoast: (body: ReferenceProfileRoastGenerationRequest) =>\n client.POST(\"/v1/reference-profiles/from-roast/preview\", { body }),\n update: (id: string, body: ReferenceProfileUpdateRequest) =>\n client.PATCH(\"/v1/reference-profiles/{id}\", {\n params: { path: { id } },\n body,\n }),\n delete: (id: string) =>\n client.DELETE(\"/v1/reference-profiles/{id}\", {\n params: { path: { id } },\n }),\n linkRoast: (id: string, roastId: number) =>\n client.PUT(\"/v1/reference-profiles/{id}/roast-links/{roastId}\", {\n params: { path: { id, roastId } },\n }),\n unlinkRoast: (id: string, roastId: number) =>\n client.DELETE(\"/v1/reference-profiles/{id}/roast-links/{roastId}\", {\n params: { path: { id, roastId } },\n }),\n compare: (body: ProfileComparisonRequest) =>\n client.POST(\"/v1/profile-comparisons\", { body }),\n },\n sales: {\n /** List the caller's own sales (owner-scoped). */\n list: (query?: SalesListQuery) =>\n client.GET(\"/v1/sales\", { params: { query } }),\n /**\n * Record a sale against one of the caller's own green-coffee inventory\n * lots. Requires a session or an owner-bound API key carrying the exact\n * `sales:write` scope. The optional `idempotencyKey` is payload-bound:\n * same-key, same-payload retries replay, while changed payloads or a\n * concurrent duplicate return 409.\n */\n create: (\n body: SalesCreateRequest,\n options?: { idempotencyKey?: string },\n ) =>\n client.POST(\"/v1/sales\", {\n body,\n params: options?.idempotencyKey\n ? { header: { \"idempotency-key\": options.idempotencyKey } }\n : undefined,\n }),\n /**\n * Update one of the caller's own sales. The sales table carries no\n * `last_updated` column, so no If-Match optimistic concurrency is\n * offered.\n */\n update: (id: number, body: SalesUpdateRequest) =>\n client.PATCH(\"/v1/sales/{id}\", {\n params: { path: { id } },\n body,\n }),\n /** Delete one of the caller's own sales. */\n delete: (id: number) =>\n client.DELETE(\"/v1/sales/{id}\", { params: { path: { id } } }),\n },\n profit: {\n /**\n * List the caller's owner-scoped profit summaries. API keys require\n * inventory:read, roast:read, and sales:read. Use pagination.total to\n * exhaust the complete owner result set.\n */\n list: (query?: ProfitListQuery) =>\n client.GET(\"/v1/profit\", { params: { query } }),\n },\n tasting: {\n /** Fetch supplier notes plus the caller's own latest tasting notes. */\n get: (catalogId: string, query?: TastingGetQuery) =>\n client.GET(\"/v1/tasting/{catalogId}\", {\n params: { path: { catalogId }, query },\n }),\n /** Replace the caller's rating for one owned inventory lot. */\n rate: (inventoryId: number, body: TastingRateRequest) =>\n client.PUT(\"/v1/tasting/inventory/{inventoryId}\", {\n params: { path: { inventoryId } },\n body,\n }),\n },\n };\n}\n\nexport type ParchmentClient = ReturnType<typeof createParchmentClient>;\n","import type { ConfirmedActionExecuteRequest, ParchmentClient } from \"./client\";\n\n/**\n * Dotted paths of every callable ParchmentClient helper, for example\n * `\"priceIndex.comparisons\"`. `raw` is the untyped openapi-fetch escape hatch\n * and is not a named helper.\n */\ntype MethodPaths<T, Prefix extends string = \"\"> = {\n [K in keyof T & string]: T[K] extends (...args: never[]) => unknown\n ? `${Prefix}${K}`\n : T[K] extends object\n ? MethodPaths<T[K], `${Prefix}${K}.`>\n : never;\n}[keyof T & string];\n\nexport type ParchmentClientMethod = MethodPaths<Omit<ParchmentClient, \"raw\">>;\n\n/**\n * The SDK reads the Cherry web agent can perform on the signed-in user's\n * behalf. Parchment's in-process chat adapter implements exactly these\n * methods, and its tests fail if the two drift. Agent surfaces built on the\n * SDK (such as the CLI) can import this list to prove they cover everything\n * the web agent can do.\n */\nexport const CHAT_AGENT_CAPABILITIES = [\n \"me\",\n \"catalog.list\",\n \"catalog.facets\",\n \"catalog.rank\",\n \"catalog.suppliers\",\n \"catalog.similar\",\n \"catalog.compare\",\n \"catalog.grades\",\n \"catalog.priceHistory\",\n \"inventory.list\",\n \"roasts.list\",\n \"roasts.get\",\n \"roasts.chartData\",\n \"referenceProfiles.list\",\n \"referenceProfiles.get\",\n \"referenceProfiles.chart\",\n \"referenceProfiles.compare\",\n \"referenceProfiles.preview\",\n \"referenceProfiles.roastCandidates\",\n \"referenceProfiles.previewFromRoast\",\n \"tasting.get\",\n \"priceIndex.list\",\n \"priceIndex.stats\",\n \"priceIndex.comparisons\",\n \"priceIndex.comparison\",\n \"priceIndex.history\",\n \"market.signals\",\n \"market.metadataIndex\",\n \"market.overview\",\n \"market.evidence\",\n] as const satisfies readonly ParchmentClientMethod[];\n\nexport type ChatAgentCapability = (typeof CHAT_AGENT_CAPABILITIES)[number];\n\n/**\n * Writes the web agent can propose. The agent never writes directly: it\n * returns an action card, and only the user's confirmation executes the\n * action through the session-only `confirmedActions.execute` endpoint.\n */\nexport const CHAT_AGENT_CONFIRMED_ACTION_TYPES = [\n \"add_bean_to_inventory\",\n \"update_bean\",\n \"create_roast_session\",\n \"create_roast_from_reference\",\n \"create_generated_reference\",\n \"update_roast_notes\",\n \"record_sale\",\n] as const satisfies readonly ConfirmedActionExecuteRequest[\"actionType\"][];\n\nexport type ChatAgentConfirmedActionType =\n (typeof CHAT_AGENT_CONFIRMED_ACTION_TYPES)[number];\n\nexport type ChatAgentCapabilityExclusionReason =\n /** Same write as a confirmed action; the agent proposes and the user confirms. */\n | \"confirmed_action_write\"\n /** Bound to the signed-in user's own session; never called by the agent. */\n | \"session_only\"\n /** Credential issuance or exchange. */\n | \"auth_bootstrap\"\n /** Staff-only administration or publication. */\n | \"admin_only\"\n /** A write with no confirmed-action path; the agent must not perform it. */\n | \"write_not_agent_facing\"\n /** A read the agent has no tool for yet. */\n | \"read_not_wired\"\n /** Service plumbing with no user data. */\n | \"infrastructure\";\n\nexport interface ChatAgentCapabilityExclusion {\n reason: ChatAgentCapabilityExclusionReason;\n note: string;\n}\n\n/**\n * Every ParchmentClient helper that is not a chat-agent capability, with the\n * reason. The mapped type makes adding an SDK helper a compile error here\n * until it is classified as a capability or an exclusion.\n */\nexport const CHAT_AGENT_CAPABILITY_EXCLUSIONS: {\n readonly [\n K in Exclude<ParchmentClientMethod, ChatAgentCapability>\n ]: ChatAgentCapabilityExclusion;\n} = {\n health: { reason: \"infrastructure\", note: \"Liveness only.\" },\n \"apiKeys.list\": {\n reason: \"session_only\",\n note: \"API key management belongs to the account owner.\",\n },\n \"apiKeys.create\": {\n reason: \"auth_bootstrap\",\n note: \"Issues a raw credential.\",\n },\n \"apiKeys.revoke\": {\n reason: \"session_only\",\n note: \"API key management belongs to the account owner.\",\n },\n \"apiKeys.rotate\": {\n reason: \"auth_bootstrap\",\n note: \"Issues a replacement raw credential.\",\n },\n \"apiUsage.get\": {\n reason: \"session_only\",\n note: \"Developer account analytics, not coffee data.\",\n },\n \"emailSubscriptions.get\": {\n reason: \"session_only\",\n note: \"Email preferences are managed in account settings.\",\n },\n \"emailSubscriptions.setMarketRead\": {\n reason: \"session_only\",\n note: \"Email preferences are managed in account settings.\",\n },\n \"emailSubscriptions.unsubscribeMarketRead\": {\n reason: \"session_only\",\n note: \"Capability-link unsubscribe from email.\",\n },\n \"marketBrief.drafts.create\": {\n reason: \"admin_only\",\n note: \"Market Brief publication pipeline.\",\n },\n \"accountDeletion.request\": {\n reason: \"session_only\",\n note: \"Requires a purpose-bound reauthentication assertion.\",\n },\n \"billing.checkout.create\": {\n reason: \"session_only\",\n note: \"Billing is user-driven checkout.\",\n },\n \"billing.checkout.get\": {\n reason: \"session_only\",\n note: \"Billing is user-driven checkout.\",\n },\n \"billing.checkout.reconcile\": {\n reason: \"session_only\",\n note: \"Billing is user-driven checkout.\",\n },\n \"billing.subscriptions.list\": {\n reason: \"session_only\",\n note: \"Billing state is shown in account settings.\",\n },\n \"billing.subscriptions.mutate\": {\n reason: \"session_only\",\n note: \"Cancel or resume is user-driven.\",\n },\n \"billingAdministration.discrepancies\": {\n reason: \"admin_only\",\n note: \"Staff billing reconciliation.\",\n },\n \"billingAdministration.recompute\": {\n reason: \"admin_only\",\n note: \"Staff billing reconciliation.\",\n },\n \"billingAdministration.setManual\": {\n reason: \"admin_only\",\n note: \"Staff entitlement grants.\",\n },\n \"cliAuth.create\": { reason: \"auth_bootstrap\", note: \"CLI login flow.\" },\n \"cliAuth.inspect\": { reason: \"auth_bootstrap\", note: \"CLI login flow.\" },\n \"cliAuth.approve\": { reason: \"auth_bootstrap\", note: \"CLI login flow.\" },\n \"cliAuth.exchange\": { reason: \"auth_bootstrap\", note: \"CLI login flow.\" },\n \"catalog.access\": {\n reason: \"read_not_wired\",\n note: \"Catalog visibility metadata; the agent reads `me` instead.\",\n },\n \"catalog.taxonomies\": {\n reason: \"read_not_wired\",\n note: \"ADR-018 vocabulary; the Cherry lookup tool ships with the code filters.\",\n },\n \"catalog.map\": {\n reason: \"read_not_wired\",\n note: \"Map clusters and geometry for the web map view.\",\n },\n \"catalog.originPriceStats\": {\n reason: \"read_not_wired\",\n note: \"Covered for the agent by market.overview origin price distribution.\",\n },\n \"catalog.stats\": {\n reason: \"read_not_wired\",\n note: \"No chat tool yet.\",\n },\n \"catalog.rankPremium\": {\n reason: \"read_not_wired\",\n note: \"The agent ranks through catalog.rank objectives.\",\n },\n \"catalog.supplierDetail\": {\n reason: \"read_not_wired\",\n note: \"The agent reads supplier aggregates through catalog.suppliers.\",\n },\n \"catalog.supplierRank\": {\n reason: \"read_not_wired\",\n note: \"The agent reads supplier aggregates through catalog.suppliers.\",\n },\n \"catalog.proofCoverage\": {\n reason: \"read_not_wired\",\n note: \"No chat tool yet.\",\n },\n \"procurement.briefs.list\": {\n reason: \"read_not_wired\",\n note: \"Active briefs reach the agent as prompt context, not a tool.\",\n },\n \"procurement.briefs.create\": {\n reason: \"write_not_agent_facing\",\n note: \"No confirmed action exists for sourcing briefs.\",\n },\n \"procurement.briefs.get\": {\n reason: \"read_not_wired\",\n note: \"Active briefs reach the agent as prompt context, not a tool.\",\n },\n \"procurement.briefs.matches\": {\n reason: \"read_not_wired\",\n note: \"No chat tool yet.\",\n },\n \"portfolio.trackedLots.list\": {\n reason: \"read_not_wired\",\n note: \"Tracked lots reach the agent as prompt context, not a tool.\",\n },\n \"portfolio.trackedLots.track\": {\n reason: \"write_not_agent_facing\",\n note: \"No confirmed action exists for tracked lots.\",\n },\n \"portfolio.trackedLots.untrack\": {\n reason: \"write_not_agent_facing\",\n note: \"No confirmed action exists for tracked lots.\",\n },\n \"confirmedActions.execute\": {\n reason: \"session_only\",\n note: \"Runs only after the user confirms an agent-proposed action card.\",\n },\n \"conversation.chat.stream\": {\n reason: \"session_only\",\n note: \"The agent's own transport.\",\n },\n \"conversation.workspaces.getOrCreate\": {\n reason: \"session_only\",\n note: \"Conversation persistence owned by the chat client.\",\n },\n \"conversation.workspaces.get\": {\n reason: \"session_only\",\n note: \"Conversation persistence owned by the chat client.\",\n },\n \"conversation.workspaces.update\": {\n reason: \"session_only\",\n note: \"Conversation persistence owned by the chat client.\",\n },\n \"conversation.workspaces.messages.history\": {\n reason: \"session_only\",\n note: \"Conversation persistence owned by the chat client.\",\n },\n \"conversation.workspaces.messages.append\": {\n reason: \"session_only\",\n note: \"Conversation persistence owned by the chat client.\",\n },\n \"conversation.workspaces.messages.clear\": {\n reason: \"session_only\",\n note: \"Conversation persistence owned by the chat client.\",\n },\n \"conversation.workspaces.updateCanvas\": {\n reason: \"session_only\",\n note: \"Conversation persistence owned by the chat client.\",\n },\n \"conversation.workspaces.getCompactionInputs\": {\n reason: \"session_only\",\n note: \"Conversation persistence owned by the chat client.\",\n },\n \"conversation.workspaces.updateSummary\": {\n reason: \"session_only\",\n note: \"Conversation persistence owned by the chat client.\",\n },\n \"conversation.workspaces.compactSummary\": {\n reason: \"session_only\",\n note: \"Conversation persistence owned by the chat client.\",\n },\n \"conversation.memory.get\": {\n reason: \"session_only\",\n note: \"Memory reaches the agent as prompt context.\",\n },\n \"conversation.memory.update\": {\n reason: \"session_only\",\n note: \"Memory is edited by the user or the memory pipeline.\",\n },\n \"conversation.memory.dream\": {\n reason: \"session_only\",\n note: \"Memory is edited by the user or the memory pipeline.\",\n },\n \"inventory.shareGrants.create\": {\n reason: \"write_not_agent_facing\",\n note: \"Mints a cross-user capability token.\",\n },\n \"inventory.shareGrants.redeem\": {\n reason: \"write_not_agent_facing\",\n note: \"Redeems a cross-user capability token.\",\n },\n \"inventory.create\": {\n reason: \"confirmed_action_write\",\n note: \"Confirmed action add_bean_to_inventory.\",\n },\n \"inventory.createManualBatch\": {\n reason: \"write_not_agent_facing\",\n note: \"Bulk import; no confirmed action.\",\n },\n \"inventory.getManualBatch\": {\n reason: \"read_not_wired\",\n note: \"Bulk-import recovery read.\",\n },\n \"inventory.reserveManualBatch\": {\n reason: \"write_not_agent_facing\",\n note: \"Bulk import; no confirmed action.\",\n },\n \"inventory.commitManualBatch\": {\n reason: \"write_not_agent_facing\",\n note: \"Bulk import; no confirmed action.\",\n },\n \"inventory.getManualBatchStatus\": {\n reason: \"read_not_wired\",\n note: \"Bulk-import recovery read.\",\n },\n \"inventory.reserveCatalogBatch\": {\n reason: \"write_not_agent_facing\",\n note: \"Bulk import; no confirmed action.\",\n },\n \"inventory.commitCatalogBatch\": {\n reason: \"write_not_agent_facing\",\n note: \"Bulk import; no confirmed action.\",\n },\n \"inventory.getCatalogBatchStatus\": {\n reason: \"read_not_wired\",\n note: \"Bulk-import recovery read.\",\n },\n \"inventory.update\": {\n reason: \"confirmed_action_write\",\n note: \"Confirmed action update_bean.\",\n },\n \"inventory.delete\": {\n reason: \"write_not_agent_facing\",\n note: \"Destructive; no confirmed action.\",\n },\n \"roasts.classify\": {\n reason: \"read_not_wired\",\n note: \"Artisan import matching helper for upload flows.\",\n },\n \"roasts.create\": {\n reason: \"confirmed_action_write\",\n note: \"Confirmed action create_roast_session.\",\n },\n \"roasts.createBatch\": {\n reason: \"write_not_agent_facing\",\n note: \"Bulk roast creation; no confirmed action.\",\n },\n \"roasts.update\": {\n reason: \"confirmed_action_write\",\n note: \"Confirmed action update_roast_notes (notes and targets only).\",\n },\n \"roasts.delete\": {\n reason: \"write_not_agent_facing\",\n note: \"Destructive; no confirmed action.\",\n },\n \"roasts.deleteBatch\": {\n reason: \"write_not_agent_facing\",\n note: \"Destructive; no confirmed action.\",\n },\n \"roasts.replaceLiveCurve\": {\n reason: \"write_not_agent_facing\",\n note: \"Live roast logging client only.\",\n },\n \"roasts.import\": {\n reason: \"write_not_agent_facing\",\n note: \"Artisan file upload; saved references import through confirmed action create_roast_from_reference.\",\n },\n \"roasts.importFromReference\": {\n reason: \"confirmed_action_write\",\n note: \"Confirmed action create_roast_from_reference.\",\n },\n \"roasts.replaceArtisanImport\": {\n reason: \"write_not_agent_facing\",\n note: \"Artisan file upload.\",\n },\n \"roasts.clearArtisanImport\": {\n reason: \"write_not_agent_facing\",\n note: \"Destructive; no confirmed action.\",\n },\n \"referenceProfiles.generate\": {\n reason: \"confirmed_action_write\",\n note: \"Confirmed action create_generated_reference.\",\n },\n \"referenceProfiles.exportGenerated\": {\n reason: \"read_not_wired\",\n note: \"File export for Artisan, not a chat read.\",\n },\n \"referenceProfiles.import\": {\n reason: \"write_not_agent_facing\",\n note: \"Artisan file upload.\",\n },\n \"referenceProfiles.fromRoast\": {\n reason: \"confirmed_action_write\",\n note: \"Confirmed action create_generated_reference saves a roast's stored Artisan file as the plan's parent reference (basis artisan_source). The chart_snapshot basis has no confirmed action.\",\n },\n \"referenceProfiles.update\": {\n reason: \"write_not_agent_facing\",\n note: \"No confirmed action.\",\n },\n \"referenceProfiles.delete\": {\n reason: \"write_not_agent_facing\",\n note: \"Destructive; no confirmed action.\",\n },\n \"referenceProfiles.linkRoast\": {\n reason: \"write_not_agent_facing\",\n note: \"No confirmed action.\",\n },\n \"referenceProfiles.unlinkRoast\": {\n reason: \"write_not_agent_facing\",\n note: \"No confirmed action.\",\n },\n \"sales.list\": {\n reason: \"read_not_wired\",\n note: \"No chat tool yet.\",\n },\n \"sales.create\": {\n reason: \"confirmed_action_write\",\n note: \"Confirmed action record_sale.\",\n },\n \"sales.update\": {\n reason: \"write_not_agent_facing\",\n note: \"No confirmed action.\",\n },\n \"sales.delete\": {\n reason: \"write_not_agent_facing\",\n note: \"Destructive; no confirmed action.\",\n },\n \"profit.list\": {\n reason: \"read_not_wired\",\n note: \"No chat tool yet.\",\n },\n \"tasting.rate\": {\n reason: \"write_not_agent_facing\",\n note: \"No confirmed action.\",\n },\n};\n\n/**\n * The narrowed client shape the chat agent receives: only the capability\n * helpers, with their SDK signatures.\n */\ntype PickPaths<T, P extends string> = {\n [\n K in keyof T & string as K extends (\n P extends `${infer Head}.${string}` ? Head : P\n )\n ? K\n : never\n ]: K extends P\n ? T[K]\n : PickPaths<T[K], P extends `${K}.${infer Rest}` ? Rest : never>;\n};\n\nexport type ChatAgentClient = PickPaths<ParchmentClient, ChatAgentCapability>;\n"],"mappings":"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","names":["options"]}
1
+ {"version":3,"sources":["../src/client.ts","../src/chatAgentCapabilities.ts"],"sourcesContent":["import createClient, { type ClientOptions } from \"openapi-fetch\";\nimport type { components, paths } from \"./schema\";\n\nexport interface ParchmentClientOptions {\n /** Base URL of the Parchment API, e.g. https://api.purveyors.io */\n baseUrl: string;\n /**\n * Optional bearer token (a Supabase JWT, API key, or dedicated machine\n * credential). Sent as\n * `Authorization: Bearer <token>`. Auth is resolved server-side at the route\n * boundary; the SDK only forwards the credential.\n */\n token?: string;\n /** Override the fetch implementation (useful for tests or custom runtimes). */\n fetch?: ClientOptions[\"fetch\"];\n}\n\n/** Query parameters for {@link ParchmentClient.catalog.list}. */\nexport type CatalogListQuery = NonNullable<\n paths[\"/v1/catalog\"][\"get\"][\"parameters\"][\"query\"]\n>;\n/** A catalog row returned by the canonical listing resource. */\nexport type CatalogItem = components[\"schemas\"][\"CatalogItem\"];\n/** API-owned row-level trust summary returned when `include=proof`. */\nexport type CatalogProofSummary = components[\"schemas\"][\"CatalogProofSummary\"];\n/** Query parameters for {@link ParchmentClient.catalog.facets}. */\nexport type CatalogFacetsQuery = NonNullable<\n paths[\"/v1/catalog/facets\"][\"get\"][\"parameters\"][\"query\"]\n>;\n/**\n * Optional headers for {@link ParchmentClient.catalog.list}, notably the\n * RFC 7240 `Prefer: handling=lenient|strict` override (PADR-0013 §7). Sending\n * `handling=lenient` opts a strict caller (API key or bearer-session JWT) back\n * into strip-with-notice degradation instead of a 401/403 hard-deny.\n */\nexport type CatalogListHeaders = NonNullable<\n paths[\"/v1/catalog\"][\"get\"][\"parameters\"][\"header\"]\n>;\n/** Query parameters for {@link ParchmentClient.catalog.map}. */\nexport type CatalogMapQuery = NonNullable<\n paths[\"/v1/catalog/map\"][\"get\"][\"parameters\"][\"query\"]\n>;\n/** Optional handling headers for {@link ParchmentClient.catalog.map}. */\nexport type CatalogMapHeaders = NonNullable<\n paths[\"/v1/catalog/map\"][\"get\"][\"parameters\"][\"header\"]\n>;\n/** Lightweight map projection over the caller-visible catalog. */\nexport type CatalogMapResponse = components[\"schemas\"][\"CatalogMapResponse\"];\n/** Optional headers for {@link ParchmentClient.catalog.facets}; see {@link CatalogListHeaders}. */\nexport type CatalogFacetsHeaders = NonNullable<\n paths[\"/v1/catalog/facets\"][\"get\"][\"parameters\"][\"header\"]\n>;\n/** Query parameters for {@link ParchmentClient.catalog.originPriceStats}. */\nexport type CatalogOriginPriceStatsQuery = NonNullable<\n paths[\"/v1/catalog/origin-price-stats\"][\"get\"][\"parameters\"][\"query\"]\n>;\n/** Query parameters for {@link ParchmentClient.catalog.stats}. */\nexport type CatalogStatsQuery = NonNullable<\n paths[\"/v1/catalog/stats\"][\"get\"][\"parameters\"][\"query\"]\n>;\n/** Query parameters for {@link ParchmentClient.catalog.rank}. */\nexport type CatalogRankQuery = NonNullable<\n paths[\"/v1/catalog/rank\"][\"get\"][\"parameters\"][\"query\"]\n>;\n/** Query parameters for {@link ParchmentClient.catalog.rankPremium}. */\nexport type CatalogRankPremiumQuery = NonNullable<\n paths[\"/v1/catalog/rank-premium\"][\"get\"][\"parameters\"][\"query\"]\n>;\n/** Query parameters for {@link ParchmentClient.catalog.suppliers}. */\nexport type CatalogSuppliersQuery = NonNullable<\n paths[\"/v1/catalog/suppliers\"][\"get\"][\"parameters\"][\"query\"]\n>;\n/** Query parameters for {@link ParchmentClient.catalog.supplierDetail}. */\nexport type CatalogSupplierDetailQuery = NonNullable<\n paths[\"/v1/catalog/suppliers/detail\"][\"get\"][\"parameters\"][\"query\"]\n>;\n/** Query parameters for {@link ParchmentClient.catalog.supplierRank}. */\nexport type CatalogSupplierRankQuery = NonNullable<\n paths[\"/v1/catalog/suppliers/rank\"][\"get\"][\"parameters\"][\"query\"]\n>;\n/** Optional headers for ranking endpoints; see {@link CatalogListHeaders}. */\nexport type CatalogRankHeaders = NonNullable<\n paths[\"/v1/catalog/rank\"][\"get\"][\"parameters\"][\"header\"]\n>;\n/** Optional headers for premium ranking endpoints; see {@link CatalogListHeaders}. */\nexport type CatalogRankPremiumHeaders = NonNullable<\n paths[\"/v1/catalog/rank-premium\"][\"get\"][\"parameters\"][\"header\"]\n>;\n/** Optional headers for supplier aggregate endpoints; see {@link CatalogListHeaders}. */\nexport type CatalogSupplierHeaders = NonNullable<\n paths[\"/v1/catalog/suppliers\"][\"get\"][\"parameters\"][\"header\"]\n>;\n/** Query parameters for {@link ParchmentClient.catalog.similar}. */\nexport type CatalogSimilarQuery = NonNullable<\n paths[\"/v1/catalog/{id}/similar\"][\"get\"][\"parameters\"][\"query\"]\n>;\n/** Query parameters for {@link ParchmentClient.catalog.compare}. */\nexport type CatalogCompareQuery = NonNullable<\n paths[\"/v1/catalog/compare\"][\"get\"][\"parameters\"][\"query\"]\n>;\n/** Query parameters for {@link ParchmentClient.catalog.grades}. */\nexport type CatalogGradesQuery = NonNullable<\n paths[\"/v1/catalog/grades\"][\"get\"][\"parameters\"][\"query\"]\n>;\n/** Query parameters for {@link ParchmentClient.catalog.taxonomies}. */\nexport type CatalogTaxonomiesQuery = NonNullable<\n paths[\"/v1/catalog/taxonomies\"][\"get\"][\"parameters\"][\"query\"]\n>;\n/** Query parameters for {@link ParchmentClient.catalog.priceHistory}. */\nexport type CatalogPriceHistoryQuery = NonNullable<\n paths[\"/v1/catalog/{id}/price-history\"][\"get\"][\"parameters\"][\"query\"]\n>;\n/** Query parameters for {@link ParchmentClient.priceIndex.list}. */\nexport type PriceIndexQuery = NonNullable<\n paths[\"/v1/price-index\"][\"get\"][\"parameters\"][\"query\"]\n>;\n/** Query parameters for {@link ParchmentClient.priceIndex.history}. */\nexport type PriceIndexHistoryQuery = NonNullable<\n paths[\"/v1/price-index/history\"][\"get\"][\"parameters\"][\"query\"]\n>;\n/** Query parameters for {@link ParchmentClient.market.signals}. */\nexport type MarketSignalsQuery = NonNullable<\n paths[\"/v1/market/signals\"][\"get\"][\"parameters\"][\"query\"]\n>;\n/** Aggregate-only public green-coffee market evidence. */\nexport type MarketOverview = components[\"schemas\"][\"MarketOverviewResponse\"];\n/** Named public-catalog and supplier evidence for Parchment Intelligence callers. */\nexport type MarketEvidence = components[\"schemas\"][\"MarketEvidenceResponse\"];\n/** Query parameters for {@link ParchmentClient.priceIndex.stats}. */\nexport type PriceIndexStatsQuery = NonNullable<\n paths[\"/v1/price-index/stats\"][\"get\"][\"parameters\"][\"query\"]\n>;\n/** Query parameters for {@link ParchmentClient.market.metadataIndex}. */\nexport type MetadataIndexQuery = NonNullable<\n paths[\"/v1/market/metadata-index\"][\"get\"][\"parameters\"][\"query\"]\n>;\n/** Query parameters for {@link ParchmentClient.procurement.briefs.matches}. */\nexport type BriefMatchesQuery = NonNullable<\n paths[\"/v1/procurement/briefs/{id}/matches\"][\"get\"][\"parameters\"][\"query\"]\n>;\n/** Request body for {@link ParchmentClient.procurement.briefs.create}. */\nexport type SourcingBriefCreateRequest =\n components[\"schemas\"][\"SourcingBriefCreateRequest\"];\n/** Query parameters for {@link ParchmentClient.portfolio.trackedLots.list}. */\nexport type TrackedLotsListQuery = NonNullable<\n paths[\"/v1/portfolio/tracked-lots\"][\"get\"][\"parameters\"][\"query\"]\n>;\n/** A tracked catalog lot enriched with current catalog and price state. */\nexport type TrackedLotSummary = components[\"schemas\"][\"TrackedLotSummary\"];\n/** State returned by tracked-lot PUT and DELETE mutations. */\nexport type TrackedLotMutation =\n components[\"schemas\"][\"TrackedLotMutationResponse\"];\n/** Closed session-only command for {@link ParchmentClient.confirmedActions.execute}. */\nexport type ConfirmedActionExecuteRequest = NonNullable<\n paths[\"/v1/confirmed-actions/execute\"][\"post\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\n/** Create-or-get body for {@link ParchmentClient.conversation.workspaces.getOrCreate}. */\nexport type ConversationWorkspaceCreateRequest = NonNullable<\n paths[\"/v1/conversation/workspaces\"][\"post\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\nexport type ConversationWorkspaceMetadataRequest = NonNullable<\n paths[\"/v1/conversation/workspaces/{workspaceId}\"][\"patch\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\nexport type ConversationMessageAppendRequest = NonNullable<\n paths[\"/v1/conversation/workspaces/{workspaceId}/messages\"][\"post\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\nexport type ConversationWorkspaceClearRequest = NonNullable<\n paths[\"/v1/conversation/workspaces/{workspaceId}/messages/clear\"][\"post\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\nexport type ConversationCanvasUpdateRequest = NonNullable<\n paths[\"/v1/conversation/workspaces/{workspaceId}/canvas\"][\"put\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\nexport type ConversationSummaryUpdateRequest = NonNullable<\n paths[\"/v1/conversation/workspaces/{workspaceId}/summary\"][\"put\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\nexport type ConversationMemoryUpdateRequest = NonNullable<\n paths[\"/v1/conversation/memory\"][\"put\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\nexport type ConversationMemoryDreamRequest = NonNullable<\n paths[\"/v1/conversation/memory/dream\"][\"post\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\n/** Query parameters for {@link ParchmentClient.inventory.list}. */\nexport type InventoryListQuery = NonNullable<\n paths[\"/v1/inventory\"][\"get\"][\"parameters\"][\"query\"]\n>;\n/** Request body for {@link ParchmentClient.inventory.create}. */\nexport type InventoryCreateRequest = NonNullable<\n paths[\"/v1/inventory\"][\"post\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\n/** Stable-operation request for {@link ParchmentClient.inventory.shareGrants.create}. */\nexport type InventoryShareGrantCreateRequest = NonNullable<\n paths[\"/v1/inventory/share-grants\"][\"post\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\n/** The one-time raw-token grant returned by create or same-operation replay. */\nexport type InventoryShareGrant = components[\"schemas\"][\"InventoryShareGrant\"];\n/** Anonymous capability body for {@link ParchmentClient.inventory.shareGrants.redeem}. */\nexport type InventoryShareGrantRedeemRequest = NonNullable<\n paths[\"/v1/inventory/share-grants/redeem\"][\"post\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\n/** Safe legacy-oriented inventory row returned by capability redemption. */\nexport type InventoryShareInventory =\n components[\"schemas\"][\"InventoryShareInventory\"];\n/** Catalog allowlist nested in a shared inventory row. */\nexport type InventoryShareCatalog =\n components[\"schemas\"][\"InventoryShareCatalog\"];\n/** Six-field roast summary nested in member/admin shares. */\nexport type InventoryShareRoastSummary =\n components[\"schemas\"][\"InventoryShareRoastSummary\"];\ntype CatalogInventoryCreateRequest =\n components[\"schemas\"][\"CatalogInventoryCreateRequest\"];\ntype ManualInventoryCreateRequest =\n components[\"schemas\"][\"ManualInventoryCreateRequest\"];\n/** Request body for {@link ParchmentClient.inventory.createManualBatch}. */\nexport type ManualInventoryBatchCreateRequest = NonNullable<\n paths[\"/v1/inventory/manual-batches\"][\"post\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\n/** Request body for reserving durable server-owned manual-batch intent. */\nexport type ManualInventoryBatchReserveRequest = NonNullable<\n paths[\"/v1/inventory/manual-batches/reservations\"][\"post\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\n/** Complete canonical intent accepted by the catalog-batch reservation lane. */\nexport type CatalogInventoryBatchReserveRequest = NonNullable<\n paths[\"/v1/inventory/catalog-batches/reservations\"][\"post\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\n/** Durable catalog-batch state returned by reserve, commit, and status. */\nexport type CatalogInventoryBatchLifecycle =\n components[\"schemas\"][\"CatalogInventoryBatchLifecycle\"];\n/** Identity-only terminal result; catalog resources remain a separate read. */\nexport type CatalogInventoryBatchResult =\n components[\"schemas\"][\"CatalogInventoryBatchResult\"];\n/** Request body for {@link ParchmentClient.inventory.update}. */\nexport type InventoryUpdateRequest = NonNullable<\n paths[\"/v1/inventory/{id}\"][\"patch\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\n/** Query parameters for {@link ParchmentClient.roasts.list}. */\nexport type RoastListQuery = NonNullable<\n paths[\"/v1/roasts\"][\"get\"][\"parameters\"][\"query\"]\n>;\n/** Query parameters for {@link ParchmentClient.roasts.get}. */\nexport type RoastGetQuery = NonNullable<\n paths[\"/v1/roasts/{id}\"][\"get\"][\"parameters\"][\"query\"]\n>;\n/** Query parameters for {@link ParchmentClient.roasts.chartData}. */\nexport type RoastChartDataQuery = NonNullable<\n paths[\"/v1/roasts/{id}/chart-data\"][\"get\"][\"parameters\"][\"query\"]\n>;\n/** Typed chart payload returned by {@link ParchmentClient.roasts.chartData}. */\nexport type RoastChartData =\n components[\"schemas\"][\"RoastChartDataResponse\"][\"data\"];\n/** One sampled primary or auxiliary series in a roast chart payload. */\nexport type RoastChartSeries = components[\"schemas\"][\"RoastChartSeries\"];\n/** One discrete milestone or control event in a roast chart payload. */\nexport type RoastChartEvent = components[\"schemas\"][\"RoastChartEvent\"];\nexport type ReferenceProfile =\n components[\"schemas\"][\"ReferenceProfileResponse\"][\"data\"];\nexport type ReferenceProfileSummary =\n components[\"schemas\"][\"ReferenceProfileSummary\"];\nexport type ReferenceProfileChart =\n components[\"schemas\"][\"ReferenceProfileChart\"];\nexport type ReferenceProfileImportRequest = NonNullable<\n paths[\"/v1/reference-profiles/imports\"][\"post\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\nexport type ReferenceProfileFromRoastRequest = NonNullable<\n paths[\"/v1/reference-profiles/from-roast\"][\"post\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\n/** Request body for {@link ParchmentClient.referenceProfiles.previewFromRoast}. */\nexport type ReferenceProfileRoastGenerationRequest = NonNullable<\n paths[\"/v1/reference-profiles/from-roast/preview\"][\"post\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\n/** Query parameters for {@link ParchmentClient.referenceProfiles.roastCandidates}. */\nexport type ReferenceProfileRoastCandidatesQuery = NonNullable<\n paths[\"/v1/reference-profiles/from-roast/candidates\"][\"get\"][\"parameters\"][\"query\"]\n>;\n/** One executed roast that can be the base for a planned profile. */\nexport type ReferenceProfileRoastCandidate =\n components[\"schemas\"][\"ReferenceProfileRoastCandidatesResponse\"][\"data\"][\"roasts\"][number];\nexport type ReferenceProfileUpdateRequest = NonNullable<\n paths[\"/v1/reference-profiles/{id}\"][\"patch\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\nexport type ReferenceProfileGenerationRequest = NonNullable<\n paths[\"/v1/reference-profiles/{id}/revisions/{revisionId}/preview\"][\"post\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\nexport type ProfileComparisonRequest = NonNullable<\n paths[\"/v1/profile-comparisons\"][\"post\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\n/** Request body for {@link ParchmentClient.roasts.classify}. */\nexport type RoastClassificationRequest = NonNullable<\n paths[\"/v1/roasts/classify\"][\"post\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\n/** Request body for {@link ParchmentClient.roasts.create}. */\nexport type RoastCreateRequest = NonNullable<\n paths[\"/v1/roasts\"][\"post\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\n/** Atomic named-batch body for {@link ParchmentClient.roasts.createBatch}. */\nexport type RoastBatchCreateRequest = NonNullable<\n paths[\"/v1/roasts/batches\"][\"post\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\n/** Request body for {@link ParchmentClient.roasts.update}. */\nexport type RoastUpdateRequest = NonNullable<\n paths[\"/v1/roasts/{id}\"][\"patch\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\n/** Source-aware live curve body for {@link ParchmentClient.roasts.replaceLiveCurve}. */\nexport type RoastLiveCurveRequest = NonNullable<\n paths[\"/v1/roasts/{id}/live-curve\"][\"put\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\n/** Request body for {@link ParchmentClient.roasts.import}. */\nexport type RoastImportRequest = NonNullable<\n paths[\"/v1/roasts/imports\"][\"post\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\n/** Request body for {@link ParchmentClient.roasts.importFromReference}. */\nexport type RoastImportFromReferenceRequest = NonNullable<\n paths[\"/v1/roasts/imports/from-reference\"][\"post\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\n/** Request body for {@link ParchmentClient.roasts.replaceArtisanImport}. */\nexport type RoastArtisanImportReplaceRequest = NonNullable<\n paths[\"/v1/roasts/{id}/artisan-import\"][\"put\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\n/** Query parameters for {@link ParchmentClient.sales.list}. */\nexport type SalesListQuery = NonNullable<\n paths[\"/v1/sales\"][\"get\"][\"parameters\"][\"query\"]\n>;\n/** Query parameters for {@link ParchmentClient.profit.list}. */\nexport type ProfitListQuery = NonNullable<\n paths[\"/v1/profit\"][\"get\"][\"parameters\"][\"query\"]\n>;\n/** One owner inventory lot's canonical cost, revenue, and roast summary. */\nexport type ProfitItem = components[\"schemas\"][\"ProfitItem\"];\n/** Request body for {@link ParchmentClient.sales.create}. */\nexport type SalesCreateRequest = NonNullable<\n paths[\"/v1/sales\"][\"post\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\n/** Request body for {@link ParchmentClient.sales.update}. */\nexport type SalesUpdateRequest = NonNullable<\n paths[\"/v1/sales/{id}\"][\"patch\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\n/** Query parameters for {@link ParchmentClient.tasting.get}. */\nexport type TastingGetQuery = NonNullable<\n paths[\"/v1/tasting/{catalogId}\"][\"get\"][\"parameters\"][\"query\"]\n>;\n/** Request body for {@link ParchmentClient.tasting.rate}. */\nexport type TastingRateRequest = NonNullable<\n paths[\"/v1/tasting/inventory/{inventoryId}\"][\"put\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\n/** Request body for {@link ParchmentClient.apiKeys.create}. */\nexport type ApiKeyCreateRequest = NonNullable<\n paths[\"/v1/api-keys\"][\"post\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\n/** Query parameters for the session owner's API-key traffic analytics. */\nexport type OwnerApiUsageQuery = NonNullable<\n paths[\"/v1/api-usage\"][\"get\"][\"parameters\"][\"query\"]\n>;\n/** Bounded owner API-key traffic analytics (not session or billing usage). */\nexport type OwnerApiUsage = components[\"schemas\"][\"OwnerApiUsageResponse\"];\n/** Request body for {@link ParchmentClient.emailSubscriptions.setMarketRead}. */\nexport type MarketReadPreferenceRequest = NonNullable<\n paths[\"/v1/email-subscriptions/market-read\"][\"put\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\n/** Request body for {@link ParchmentClient.emailSubscriptions.unsubscribeMarketRead}. */\nexport type MarketReadUnsubscribeRequest = NonNullable<\n paths[\"/v1/email-subscriptions/market-read/unsubscribe\"][\"post\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\n/** Immutable deployed projection accepted by {@link ParchmentClient.marketBrief.drafts.create}. */\nexport type MarketBriefDraftCreateRequest = NonNullable<\n paths[\"/v1/market-brief/drafts\"][\"post\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\n/** Durable Parchment-owned provider-draft state. */\nexport type MarketBriefDraftState =\n components[\"schemas\"][\"MarketBriefDraftState\"];\n/** Account-owned Market Read email preference. */\nexport type EmailSubscriptionPreference =\n components[\"schemas\"][\"EmailSubscriptionPreference\"];\n/** Durable state returned by an account-deletion request. */\nexport type AccountDeletionOperation =\n components[\"schemas\"][\"AccountDeletionOperation\"];\n/** Purpose-bound recent-reauthentication assertion for account deletion. */\nexport type AccountDeletionRequest = NonNullable<\n paths[\"/v1/account-deletion\"][\"post\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\n/** Purchase-key request for dormant direct Parchment Checkout creation/replay. */\nexport type BillingCheckoutCreateRequest = NonNullable<\n paths[\"/v1/billing/checkout-sessions\"][\"post\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\n/** Durable Checkout admission state; provider Session id stays server-side. */\nexport type BillingCheckoutSession =\n components[\"schemas\"][\"BillingCheckoutSession\"];\n/** Durable cancellation/resume request. */\nexport type BillingSubscriptionMutationRequest = NonNullable<\n paths[\"/v1/billing/subscriptions/{subscriptionId}\"][\"patch\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\n/** Durable provider subscription-operation state. */\nexport type BillingSubscriptionOperation =\n components[\"schemas\"][\"BillingSubscriptionOperation\"];\n/** Manual entitlement baseline update for administrators. */\nexport type BillingManualEntitlementsRequest = NonNullable<\n paths[\"/v1/admin/billing-entitlements/{ownerId}/manual\"][\"patch\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\nexport type CliAuthRequestCreate = NonNullable<\n paths[\"/v1/cli-auth/requests\"][\"post\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\nexport type CliAuthInspectRequest = NonNullable<\n paths[\"/v1/cli-auth/inspect\"][\"post\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\nexport type CliAuthApproveRequest = NonNullable<\n paths[\"/v1/cli-auth/approve\"][\"post\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\nexport type CliAuthExchangeRequest = NonNullable<\n paths[\"/v1/cli-auth/token\"][\"post\"][\"requestBody\"]\n>[\"content\"][\"application/json\"];\n/** Browser-compatible AI SDK UI-message stream request. */\nexport type ConversationChatStreamRequest =\n components[\"schemas\"][\"ConversationChatStreamRequest\"];\n\n/**\n * Create a typed Parchment API client.\n *\n * The generated core (openapi-fetch over the generated `paths` types) is the\n * contract truth; the named helpers below are the hand-maintained ergonomic\n * layer and grow as endpoints land. `raw` always exposes the underlying typed\n * client for direct path access to anything not yet wrapped.\n */\nexport function createParchmentClient(options: ParchmentClientOptions) {\n const { baseUrl, token, fetch: fetchImpl } = options;\n\n const client = createClient<paths>({\n baseUrl,\n fetch: fetchImpl,\n headers: token ? { Authorization: `Bearer ${token}` } : undefined,\n });\n\n const postInventory = (\n body: InventoryCreateRequest,\n options?: { idempotencyKey?: string },\n ) =>\n client.POST(\"/v1/inventory\", {\n body,\n params: options?.idempotencyKey\n ? { header: { \"idempotency-key\": options.idempotencyKey } }\n : undefined,\n });\n\n function createInventory(\n body: ManualInventoryCreateRequest,\n options: { idempotencyKey: string },\n ): ReturnType<typeof postInventory>;\n function createInventory(\n body: CatalogInventoryCreateRequest,\n options?: { idempotencyKey?: string },\n ): ReturnType<typeof postInventory>;\n function createInventory(\n body: InventoryCreateRequest,\n options?: { idempotencyKey?: string },\n ): ReturnType<typeof postInventory> {\n return postInventory(body, options);\n }\n\n return {\n /** The underlying typed openapi-fetch client for direct path access. */\n raw: client,\n /** Liveness and service identity. */\n health: () => client.GET(\"/health\"),\n /** Resolved principal and entitlements for the caller. */\n me: () => client.GET(\"/v1/me\"),\n apiKeys: {\n /** List API keys owned by the authenticated session user. */\n list: () => client.GET(\"/v1/api-keys\"),\n /** Create an API key. The raw secret is returned only once. */\n create: (body: ApiKeyCreateRequest) =>\n client.POST(\"/v1/api-keys\", { body }),\n /** Revoke an API key owned by the authenticated session user. */\n revoke: (id: string) =>\n client.DELETE(\"/v1/api-keys/{id}\", {\n params: { path: { id } },\n }),\n /** Rotate an API key and return the replacement secret once. */\n rotate: (id: string) =>\n client.POST(\"/v1/api-keys/{id}/rotate\", {\n params: { path: { id } },\n }),\n },\n apiUsage: {\n /**\n * Read bounded API-key traffic analytics for the authenticated session\n * owner. Headline monthly/hourly counts are exact; daily/per-key series\n * carry explicit truncation metadata.\n */\n get: (query?: OwnerApiUsageQuery) =>\n client.GET(\"/v1/api-usage\", { params: { query } }),\n },\n emailSubscriptions: {\n /** Get the authenticated session user's Market Read preference. */\n get: () => client.GET(\"/v1/email-subscriptions\"),\n /** Idempotently set the authenticated session user's Market Read preference. */\n setMarketRead: (body: MarketReadPreferenceRequest) =>\n client.PUT(\"/v1/email-subscriptions/market-read\", { body }),\n /** Idempotently unsubscribe using an opaque capability without requiring a session. */\n unsubscribeMarketRead: (body: MarketReadUnsubscribeRequest) =>\n client.POST(\"/v1/email-subscriptions/market-read/unsubscribe\", {\n body,\n }),\n },\n marketBrief: {\n drafts: {\n /** Accept, create, or recover one immutable deployed edition version. */\n create: (body: MarketBriefDraftCreateRequest) =>\n client.POST(\"/v1/market-brief/drafts\", { body }),\n },\n },\n accountDeletion: {\n /** Accept or replay deletion using a purpose-bound reauthentication assertion. */\n request: (body: AccountDeletionRequest) =>\n client.POST(\"/v1/account-deletion\", { body }),\n },\n billing: {\n checkout: {\n /** Create or replay an embedded Checkout Session after activation. */\n create: (body: BillingCheckoutCreateRequest) =>\n client.POST(\"/v1/billing/checkout-sessions\", { body }),\n /** Read owner-bound durable admission state. */\n get: (admissionId: string) =>\n client.GET(\"/v1/billing/checkout-sessions/{admissionId}\", {\n params: { path: { admissionId } },\n }),\n /** Authoritatively reconcile an admission with Stripe. */\n reconcile: (admissionId: string) =>\n client.POST(\"/v1/billing/checkout-sessions/{admissionId}/reconcile\", {\n params: { path: { admissionId } },\n }),\n },\n subscriptions: {\n /** List canonical owner subscription snapshots. */\n list: () => client.GET(\"/v1/billing/subscriptions\"),\n /** Durably cancel or resume the complete provider subscription. */\n mutate: (\n subscriptionId: string,\n body: BillingSubscriptionMutationRequest,\n ) =>\n client.PATCH(\"/v1/billing/subscriptions/{subscriptionId}\", {\n params: { path: { subscriptionId } },\n body,\n }),\n },\n },\n billingAdministration: {\n /** Read bounded canonical-entitlement discrepancies. */\n discrepancies: () =>\n client.GET(\"/v1/admin/billing-entitlement-discrepancies\"),\n /** Recompute billing contribution without changing manual grants. */\n recompute: (ownerId: string) =>\n client.POST(\n \"/v1/admin/billing-entitlement-discrepancies/{ownerId}/recompute\",\n { params: { path: { ownerId } } },\n ),\n /** Update the preserved manual entitlement baseline. */\n setManual: (ownerId: string, body: BillingManualEntitlementsRequest) =>\n client.PATCH(\"/v1/admin/billing-entitlements/{ownerId}/manual\", {\n params: { path: { ownerId } },\n body,\n }),\n },\n cliAuth: {\n /** Create a signed, short-lived login request bound to a PKCE challenge. */\n create: (body: CliAuthRequestCreate) =>\n client.POST(\"/v1/cli-auth/requests\", { body }),\n /** Inspect a signed request before displaying the web consent screen. */\n inspect: (body: CliAuthInspectRequest) =>\n client.POST(\"/v1/cli-auth/inspect\", { body }),\n /** Approve a request using the client's authenticated user session. */\n approve: (body: CliAuthApproveRequest) =>\n client.POST(\"/v1/cli-auth/approve\", { body }),\n /** Exchange an approved request and verifier for the one-time raw key. */\n exchange: (body: CliAuthExchangeRequest) =>\n client.POST(\"/v1/cli-auth/token\", { body }),\n },\n catalog: {\n /** Catalog capabilities and visibility for the caller. */\n access: () => client.GET(\"/v1/catalog/access\"),\n /**\n * List public catalog coffees (paginated). Pass `headers` to send the\n * `Prefer: handling=lenient|strict` override (see {@link CatalogListHeaders}).\n */\n list: (query?: CatalogListQuery, headers?: CatalogListHeaders) =>\n client.GET(\"/v1/catalog\", { params: { query, header: headers } }),\n /** Deterministic clusters, canonical place features, and elevation profile. */\n map: (query?: CatalogMapQuery, headers?: CatalogMapHeaders) =>\n client.GET(\"/v1/catalog/map\", {\n params: { query, header: headers },\n }),\n /**\n * Catalog filter metadata and counted facets. Pass `headers` to send the\n * `Prefer: handling=lenient|strict` override (see {@link CatalogFacetsHeaders}).\n */\n facets: (query?: CatalogFacetsQuery, headers?: CatalogFacetsHeaders) =>\n client.GET(\"/v1/catalog/facets\", {\n params: { query, header: headers },\n }),\n /** Live catalog price context by origin. */\n originPriceStats: (query?: CatalogOriginPriceStatsQuery) =>\n client.GET(\"/v1/catalog/origin-price-stats\", { params: { query } }),\n /** Aggregate stats over the caller-visible catalog. */\n stats: (query?: CatalogStatsQuery) =>\n client.GET(\"/v1/catalog/stats\", { params: { query } }),\n /** Rank caller-visible catalog coffees by deterministic objectives. */\n rank: (query?: CatalogRankQuery, headers?: CatalogRankHeaders) =>\n client.GET(\"/v1/catalog/rank\", {\n params: { query, header: headers },\n }),\n /** Rank premium catalog candidates by Purveyor Score. */\n rankPremium: (\n query?: CatalogRankPremiumQuery,\n headers?: CatalogRankPremiumHeaders,\n ) =>\n client.GET(\"/v1/catalog/rank-premium\", {\n params: { query, header: headers },\n }),\n /** List supplier aggregates over caller-visible catalog coffees. */\n suppliers: (\n query?: CatalogSuppliersQuery,\n headers?: CatalogSupplierHeaders,\n ) =>\n client.GET(\"/v1/catalog/suppliers\", {\n params: { query, header: headers },\n }),\n /** Return aggregate detail for a supplier query. */\n supplierDetail: (\n query: CatalogSupplierDetailQuery,\n headers?: CatalogSupplierHeaders,\n ) =>\n client.GET(\"/v1/catalog/suppliers/detail\", {\n params: { query, header: headers },\n }),\n /** Rank suppliers by catalog score and availability. */\n supplierRank: (\n query?: CatalogSupplierRankQuery,\n headers?: CatalogSupplierHeaders,\n ) =>\n client.GET(\"/v1/catalog/suppliers/rank\", {\n params: { query, header: headers },\n }),\n /** Aggregate proof-coverage over the public catalog. */\n proofCoverage: () => client.GET(\"/v1/catalog/proof-coverage\"),\n /** Find catalog coffees similar to a target coffee. */\n similar: (id: string, query?: CatalogSimilarQuery) =>\n client.GET(\"/v1/catalog/{id}/similar\", {\n params: { path: { id }, query },\n }),\n /** Compare 2 to 6 catalog coffees side by side. */\n compare: (query: CatalogCompareQuery) =>\n client.GET(\"/v1/catalog/compare\", { params: { query } }),\n /** Daily price history for one catalog coffee, with minimum-tier change events. */\n priceHistory: (id: string, query?: CatalogPriceHistoryQuery) =>\n client.GET(\"/v1/catalog/{id}/price-history\", {\n params: { path: { id }, query },\n }),\n /** Green grade designation vocabulary, e.g. KE:AA, GT:SHB, PREP:EP. */\n grades: (query?: CatalogGradesQuery) =>\n client.GET(\"/v1/catalog/grades\", { params: { query } }),\n /** Variety, species, and drying-method vocabularies with aliases and family links. */\n taxonomies: (query?: CatalogTaxonomiesQuery) =>\n client.GET(\"/v1/catalog/taxonomies\", { params: { query } }),\n },\n priceIndex: {\n /** Available exact 30-day comparisons, with no empty-origin search. */\n comparisons: (query?: { wholesale?: \"true\" | \"false\" | \"all\" }) =>\n client.GET(\"/v1/price-index/comparisons\", { params: { query } }),\n /** Fresh matched-listing movement, not catalog composition or a canonical publication. */\n comparison: (query: {\n from: string;\n to: string;\n origin: string;\n wholesale?: \"true\" | \"false\";\n }) => client.GET(\"/v1/price-index/comparison\", { params: { query } }),\n /** Parchment Price Index (aggregate snapshots). */\n list: (query?: PriceIndexQuery) =>\n client.GET(\"/v1/price-index\", { params: { query } }),\n /** Tier-one price-index chart history. */\n history: (query?: PriceIndexHistoryQuery) =>\n client.GET(\"/v1/price-index/history\", { params: { query } }),\n /** Price movement significance stats (precomputed). */\n stats: (query?: PriceIndexStatsQuery) =>\n client.GET(\"/v1/price-index/stats\", { params: { query } }),\n },\n market: {\n /** Aggregate daily changes, catalog coverage, movement, processing, and origin prices. */\n overview: () => client.GET(\"/v1/market/overview\"),\n /** Entitled named-lot and supplier evidence over the public catalog. */\n evidence: () => client.GET(\"/v1/market/evidence\"),\n /** Actionable market value signals. */\n signals: (query?: MarketSignalsQuery) =>\n client.GET(\"/v1/market/signals\", { params: { query } }),\n /** Metadata-trend index (process/disclosure/Purveyor Score over time). */\n metadataIndex: (query?: MetadataIndexQuery) =>\n client.GET(\"/v1/market/metadata-index\", { params: { query } }),\n },\n procurement: {\n briefs: {\n /** List the caller's saved sourcing briefs. */\n list: () => client.GET(\"/v1/procurement/briefs\"),\n /** Create a saved sourcing brief. */\n create: (body: SourcingBriefCreateRequest) =>\n client.POST(\"/v1/procurement/briefs\", { body }),\n /** Fetch one of the caller's sourcing briefs by id. */\n get: (id: string) =>\n client.GET(\"/v1/procurement/briefs/{id}\", {\n params: { path: { id } },\n }),\n /** Run a saved brief against the catalog (paginated matches). */\n matches: (id: string, query?: BriefMatchesQuery) =>\n client.GET(\"/v1/procurement/briefs/{id}/matches\", {\n params: { path: { id }, query },\n }),\n },\n },\n portfolio: {\n trackedLots: {\n /**\n * List an owner-scoped tracked catalog-id page and bounded recent\n * summaries enriched with live catalog state. Follow nextCursor when\n * a capped response reports truncation.\n */\n list: (query?: TrackedLotsListQuery) =>\n client.GET(\"/v1/portfolio/tracked-lots\", {\n params: { query },\n }),\n /** Idempotently set a visible catalog lot to tracked. */\n track: (catalogId: number) =>\n client.PUT(\"/v1/portfolio/tracked-lots/{catalogId}\", {\n params: { path: { catalogId } },\n }),\n /** Idempotently set an owner catalog lot to untracked. */\n untrack: (catalogId: number) =>\n client.DELETE(\"/v1/portfolio/tracked-lots/{catalogId}\", {\n params: { path: { catalogId } },\n }),\n },\n },\n confirmedActions: {\n /**\n * Execute or replay one user-confirmed product action. Session-only;\n * executionId is the durable payload-bound replay key.\n */\n execute: (body: ConfirmedActionExecuteRequest) =>\n client.POST(\"/v1/confirmed-actions/execute\", { body }),\n },\n conversation: {\n chat: {\n /**\n * Open a raw AI SDK UI-message stream. The response body is deliberately\n * left unread so BFFs and browser transports can forward chunks without\n * buffering. Aborting the supplied signal cancels the upstream request.\n */\n stream: (\n body: ConversationChatStreamRequest,\n init: { signal?: AbortSignal } = {},\n ): Promise<Response> => {\n const requestFetch = fetchImpl ?? globalThis.fetch;\n return requestFetch(\n new Request(`${baseUrl.replace(/\\/$/, \"\")}/v1/conversation/chat`, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n ...(token ? { Authorization: `Bearer ${token}` } : {}),\n },\n body: JSON.stringify(body),\n signal: init.signal,\n }),\n );\n },\n },\n workspaces: {\n /** Get or create the session owner's singleton workspace. */\n getOrCreate: (body: ConversationWorkspaceCreateRequest) =>\n client.POST(\"/v1/conversation/workspaces\", { body }),\n /** Read the bounded canonical workspace and message state. */\n get: (workspaceId: string, messageLimit = 50) =>\n client.GET(\"/v1/conversation/workspaces/{workspaceId}\", {\n params: { path: { workspaceId }, query: { messageLimit } },\n }),\n /** Update owner workspace title or type. */\n update: (\n workspaceId: string,\n body: ConversationWorkspaceMetadataRequest,\n ) =>\n client.PATCH(\"/v1/conversation/workspaces/{workspaceId}\", {\n params: { path: { workspaceId } },\n body,\n }),\n messages: {\n /** Read older messages before a canonical sequence cursor. */\n history: (\n workspaceId: string,\n expectedResetEpoch: number,\n beforeSequence: number,\n messageLimit = 100,\n ) =>\n client.GET(\n \"/v1/conversation/workspaces/{workspaceId}/messages/history\",\n {\n params: {\n path: { workspaceId },\n query: { expectedResetEpoch, beforeSequence, messageLimit },\n },\n },\n ),\n /** Append or replay payload-bound messages under a reset epoch. */\n append: (\n workspaceId: string,\n body: ConversationMessageAppendRequest,\n ) =>\n client.POST(\"/v1/conversation/workspaces/{workspaceId}/messages\", {\n params: { path: { workspaceId } },\n body,\n }),\n /** Clear messages and advance the workspace reset epoch. */\n clear: (\n workspaceId: string,\n body: ConversationWorkspaceClearRequest,\n ) =>\n client.POST(\n \"/v1/conversation/workspaces/{workspaceId}/messages/clear\",\n { params: { path: { workspaceId } }, body },\n ),\n },\n /** Optimistically replace canvas state. */\n updateCanvas: (\n workspaceId: string,\n body: ConversationCanvasUpdateRequest,\n ) =>\n client.PUT(\"/v1/conversation/workspaces/{workspaceId}/canvas\", {\n params: { path: { workspaceId } },\n body,\n }),\n /** Read bounded inputs for summary compaction. */\n getCompactionInputs: (workspaceId: string, messageLimit = 30) =>\n client.GET(\n \"/v1/conversation/workspaces/{workspaceId}/compaction-inputs\",\n {\n params: { path: { workspaceId }, query: { messageLimit } },\n },\n ),\n /** Commit a summary only if epoch, version, and high-water still match. */\n updateSummary: (\n workspaceId: string,\n body: ConversationSummaryUpdateRequest,\n ) =>\n client.PUT(\"/v1/conversation/workspaces/{workspaceId}/summary\", {\n params: { path: { workspaceId } },\n body,\n }),\n /** Generate and CAS-commit a Parchment-owned workspace summary. */\n compactSummary: (workspaceId: string) =>\n client.POST(\n \"/v1/conversation/workspaces/{workspaceId}/summary/compact\",\n { params: { path: { workspaceId } } },\n ),\n },\n memory: {\n /** Read the session owner's versioned durable memory. */\n get: () => client.GET(\"/v1/conversation/memory\"),\n /** Optimistically update session-owner memory. */\n update: (body: ConversationMemoryUpdateRequest) =>\n client.PUT(\"/v1/conversation/memory\", { body }),\n /** Reflect bounded recent messages into versioned session-owner memory. */\n dream: (body: ConversationMemoryDreamRequest) =>\n client.POST(\"/v1/conversation/memory/dream\", { body }),\n },\n },\n inventory: {\n /** List the caller's own green-coffee inventory (owner-scoped). */\n list: (query?: InventoryListQuery) =>\n client.GET(\"/v1/inventory\", { params: { query } }),\n shareGrants: {\n /**\n * Mint or replay a bounded cross-principal inventory capability. The\n * operation UUID is payload-bound and the raw token is returned only\n * by this response.\n */\n create: (body: InventoryShareGrantCreateRequest) =>\n client.POST(\"/v1/inventory/share-grants\", { body }),\n /**\n * Redeem a capability supplied in JSON (never in a URL). This helper\n * does not require the client to be configured with a bearer token.\n */\n redeem: (body: InventoryShareGrantRedeemRequest) =>\n client.POST(\"/v1/inventory/share-grants/redeem\", { body }),\n },\n /**\n * Create an owner inventory lot. Requires a session or an owner-bound API\n * key carrying the exact `inventory:write` scope. Manual coffee creates\n * require `idempotencyKey`; catalog-backed creates accept it optionally.\n * The same key and payload replay the original result.\n */\n create: createInventory,\n /**\n * Atomically create owner-private manual inventory lots. The required\n * idempotency UUID is the stable batch identity and can be reconciled\n * with `getManualBatch` after an uncertain response.\n */\n createManualBatch: (\n body: ManualInventoryBatchCreateRequest,\n options: { idempotencyKey: string },\n ) =>\n client.POST(\"/v1/inventory/manual-batches\", {\n params: {\n header: { \"idempotency-key\": options.idempotencyKey },\n },\n body,\n }),\n /** Return the durable terminal result for a manual inventory batch. */\n getManualBatch: (batchId: string) =>\n client.GET(\"/v1/inventory/manual-batches/{batchId}\", {\n params: { path: { batchId } },\n }),\n /**\n * Durably reserve a complete manual-batch request. Once accepted, clients\n * only need to persist the batch UUID.\n */\n reserveManualBatch: (body: ManualInventoryBatchReserveRequest) =>\n client.POST(\"/v1/inventory/manual-batches/reservations\", { body }),\n /** Commit a reserved batch by UUID with no request body. */\n commitManualBatch: (batchId: string) =>\n client.POST(\"/v1/inventory/manual-batches/{batchId}/commit\", {\n params: { path: { batchId } },\n }),\n /**\n * Get unknown, accepted, in-progress, completed, or terminal-rejected\n * state. Unknown is explicitly nonterminal, including missing or\n * cross-tenant UUIDs, so clients retain the UUID and retry.\n */\n getManualBatchStatus: (batchId: string) =>\n client.GET(\"/v1/inventory/manual-batches/{batchId}/status\", {\n params: { path: { batchId } },\n }),\n /** Durably reserve canonical catalog-backed inventory intent. */\n reserveCatalogBatch: (body: CatalogInventoryBatchReserveRequest) =>\n client.POST(\"/v1/inventory/catalog-batches/reservations\", { body }),\n /** Atomically commit a reserved catalog batch by UUID, with no body. */\n commitCatalogBatch: (batchId: string) =>\n client.POST(\"/v1/inventory/catalog-batches/{batchId}/commit\", {\n params: { path: { batchId } },\n }),\n /** Recover the owner-scoped lifecycle; missing batches remain unknown. */\n getCatalogBatchStatus: (batchId: string) =>\n client.GET(\"/v1/inventory/catalog-batches/{batchId}/status\", {\n params: { path: { batchId } },\n }),\n /**\n * Update one of the caller's own inventory rows. Pass `ifMatch` (the\n * row's `last_updated`) to enable optimistic concurrency (409 on mismatch).\n */\n update: (\n id: number,\n body: InventoryUpdateRequest,\n options?: { ifMatch?: string },\n ) =>\n client.PATCH(\"/v1/inventory/{id}\", {\n params: {\n path: { id },\n header: options?.ifMatch\n ? { \"if-match\": options.ifMatch }\n : undefined,\n },\n body,\n }),\n /**\n * Delete one of the caller's own inventory rows. Returns 409 if dependent\n * roast profiles or sales exist (no force-cascade).\n */\n delete: (id: number) =>\n client.DELETE(\"/v1/inventory/{id}\", { params: { path: { id } } }),\n },\n roasts: {\n /** Match Artisan roast metadata to one of the supplied inventory rows. */\n classify: (body: RoastClassificationRequest) =>\n client.POST(\"/v1/roasts/classify\", { body }),\n /** List the caller's own roast profiles (owner-scoped). */\n list: (query?: RoastListQuery) =>\n client.GET(\"/v1/roasts\", { params: { query } }),\n /**\n * Fetch one of the caller's roast profiles by id, optionally with its\n * temperature curve (`includeTemps`) and event markers (`includeEvents`).\n */\n get: (id: string, query?: RoastGetQuery) =>\n client.GET(\"/v1/roasts/{id}\", { params: { path: { id }, query } }),\n /** Fetch an owner roast's adaptively sampled chart curve and metadata. */\n chartData: (id: string, query?: RoastChartDataQuery) =>\n client.GET(\"/v1/roasts/{id}/chart-data\", {\n params: { path: { id }, query },\n }),\n /**\n * Create an owner roast profile, optionally with nested temperature/event\n * rows. Requires a session or an owner-bound API key carrying the exact\n * `roast:write` scope. The optional `idempotencyKey` is payload-bound:\n * same-key, same-payload retries replay, while changed payloads conflict.\n */\n create: (\n body: RoastCreateRequest,\n options?: { idempotencyKey?: string },\n ) =>\n client.POST(\"/v1/roasts\", {\n body,\n params: options?.idempotencyKey\n ? { header: { \"idempotency-key\": options.idempotencyKey } }\n : undefined,\n }),\n /**\n * Create every profile in one named batch atomically. The required\n * payload-bound idempotency key makes transport retries safe.\n */\n createBatch: (body: RoastBatchCreateRequest, idempotencyKey: string) =>\n client.POST(\"/v1/roasts/batches\", {\n body,\n params: { header: { \"idempotency-key\": idempotencyKey } },\n }),\n /**\n * Update one of the caller's own roast profiles. Pass `ifMatch` (the\n * row's `last_updated`) to enable optimistic concurrency (409 on mismatch).\n */\n update: (\n id: number,\n body: RoastUpdateRequest,\n options?: { ifMatch?: string },\n ) =>\n client.PATCH(\"/v1/roasts/{id}\", {\n params: {\n path: { id },\n header: options?.ifMatch\n ? { \"if-match\": options.ifMatch }\n : undefined,\n },\n body,\n }),\n /** Delete one of the caller's own roast profiles. */\n delete: (id: number) =>\n client.DELETE(\"/v1/roasts/{id}\", { params: { path: { id } } }),\n /** Delete every owner roast carrying one exact batch name. Session-only. */\n deleteBatch: (batchName: string) =>\n client.DELETE(\"/v1/roasts/batches/{batchName}\", {\n params: { path: { batchName } },\n }),\n /**\n * Replace live temperature samples and all event markers atomically,\n * while preserving non-live temperatures and deriving milestone fields.\n */\n replaceLiveCurve: (\n id: number,\n body: RoastLiveCurveRequest,\n options?: { ifMatch?: string },\n ) =>\n client.PUT(\"/v1/roasts/{id}/live-curve\", {\n params: {\n path: { id },\n header: options?.ifMatch\n ? { \"if-match\": options.ifMatch }\n : undefined,\n },\n body,\n }),\n /**\n * Create a roast profile from an Artisan `.alog` file against one of the\n * caller's green-coffee lots, persisting the imported curve, events, and\n * an artisan_import_log entry atomically. Requires a session or an\n * owner-bound API key carrying the exact `roast:write` scope. The\n * optional `idempotencyKey` is payload-bound: same-key, same-payload\n * retries replay, while changed payloads conflict.\n */\n import: (\n body: RoastImportRequest,\n options?: { idempotencyKey?: string },\n ) =>\n client.POST(\"/v1/roasts/imports\", {\n body,\n params: options?.idempotencyKey\n ? { header: { \"idempotency-key\": options.idempotencyKey } }\n : undefined,\n }),\n /**\n * Create a roast profile from the Artisan file stored with one of the\n * caller's uploaded reference profiles. Only uploaded Artisan references\n * qualify: planned (generated) profiles are never recorded as roasts,\n * and a reference saved from an existing roast is refused. Requires\n * Mallard Studio plus a session, or an owner-bound API key carrying the\n * exact `roast:read` and `roast:write` scopes. The optional\n * `idempotencyKey` is payload-bound.\n */\n importFromReference: (\n body: RoastImportFromReferenceRequest,\n options?: { idempotencyKey?: string },\n ) =>\n client.POST(\"/v1/roasts/imports/from-reference\", {\n body,\n params: options?.idempotencyKey\n ? { header: { \"idempotency-key\": options.idempotencyKey } }\n : undefined,\n }),\n /**\n * Replace the Artisan import data on one of the caller's existing roasts,\n * re-deriving its curve, events, and computed metrics while preserving the\n * roast's identity. Pass `ifMatch` (the roast's `last_updated`) to enable\n * optimistic concurrency (409 on mismatch).\n */\n replaceArtisanImport: (\n id: number,\n body: RoastArtisanImportReplaceRequest,\n options?: { ifMatch?: string },\n ) =>\n client.PUT(\"/v1/roasts/{id}/artisan-import\", {\n params: {\n path: { id },\n header: options?.ifMatch\n ? { \"if-match\": options.ifMatch }\n : undefined,\n },\n body,\n }),\n /**\n * Clear import-derived curve, events, metrics, and provenance data from\n * one of the caller's existing roasts without deleting the roast profile.\n */\n clearArtisanImport: (id: number) =>\n client.DELETE(\"/v1/roasts/{id}/artisan-import\", {\n params: { path: { id } },\n }),\n },\n referenceProfiles: {\n /** List Studio reference profiles without mixing them into roast history. */\n list: (includeArchived = false) =>\n client.GET(\"/v1/reference-profiles\", {\n params: { query: { includeArchived } },\n }),\n get: (id: string) =>\n client.GET(\"/v1/reference-profiles/{id}\", {\n params: { path: { id } },\n }),\n chart: (id: string, revisionId: string) =>\n client.GET(\"/v1/reference-profiles/{id}/revisions/{revisionId}/chart\", {\n params: { path: { id, revisionId } },\n }),\n /** Preview explicit changes without saving or changing the parent. */\n preview: (\n id: string,\n revisionId: string,\n body: ReferenceProfileGenerationRequest,\n ) =>\n client.POST(\n \"/v1/reference-profiles/{id}/revisions/{revisionId}/preview\",\n {\n params: { path: { id, revisionId } },\n body,\n },\n ),\n /** Save an immutable generated reference with parent lineage. */\n generate: (\n id: string,\n revisionId: string,\n body: ReferenceProfileGenerationRequest,\n idempotencyKey: string,\n ) =>\n client.POST(\n \"/v1/reference-profiles/{id}/revisions/{revisionId}/generated\",\n {\n params: {\n path: { id, revisionId },\n header: { \"idempotency-key\": idempotencyKey },\n },\n body,\n },\n ),\n /** Retrieve only a saved unsigned generated background profile. */\n exportGenerated: (id: string, revisionId: string) =>\n client.GET(\n \"/v1/reference-profiles/{id}/revisions/{revisionId}/export\",\n {\n params: { path: { id, revisionId } },\n },\n ),\n import: (body: ReferenceProfileImportRequest, idempotencyKey: string) =>\n client.POST(\"/v1/reference-profiles/imports\", {\n body,\n params: { header: { \"idempotency-key\": idempotencyKey } },\n }),\n /**\n * Save an executed roast as a reference. `basis: \"artisan_source\"`\n * copies the roast's stored Artisan file so a planned profile can be\n * built from it, and returns the reference already saved from that\n * roast's file instead of a duplicate; the default\n * `\"chart_snapshot\"` keeps a comparison-only chart.\n */\n fromRoast: (\n body: ReferenceProfileFromRoastRequest,\n idempotencyKey: string,\n ) =>\n client.POST(\"/v1/reference-profiles/from-roast\", {\n body,\n params: { header: { \"idempotency-key\": idempotencyKey } },\n }),\n /**\n * List the caller's executed roasts whose Artisan file is on record and\n * can therefore be the base for a planned profile, newest first.\n */\n roastCandidates: (query?: ReferenceProfileRoastCandidatesQuery) =>\n client.GET(\"/v1/reference-profiles/from-roast/candidates\", {\n params: { query },\n }),\n /**\n * Preview a planned profile built directly on an executed roast's stored\n * Artisan file. Read-only: nothing is saved and the roast is unchanged.\n */\n previewFromRoast: (body: ReferenceProfileRoastGenerationRequest) =>\n client.POST(\"/v1/reference-profiles/from-roast/preview\", { body }),\n update: (id: string, body: ReferenceProfileUpdateRequest) =>\n client.PATCH(\"/v1/reference-profiles/{id}\", {\n params: { path: { id } },\n body,\n }),\n delete: (id: string) =>\n client.DELETE(\"/v1/reference-profiles/{id}\", {\n params: { path: { id } },\n }),\n linkRoast: (id: string, roastId: number) =>\n client.PUT(\"/v1/reference-profiles/{id}/roast-links/{roastId}\", {\n params: { path: { id, roastId } },\n }),\n unlinkRoast: (id: string, roastId: number) =>\n client.DELETE(\"/v1/reference-profiles/{id}/roast-links/{roastId}\", {\n params: { path: { id, roastId } },\n }),\n compare: (body: ProfileComparisonRequest) =>\n client.POST(\"/v1/profile-comparisons\", { body }),\n },\n sales: {\n /** List the caller's own sales (owner-scoped). */\n list: (query?: SalesListQuery) =>\n client.GET(\"/v1/sales\", { params: { query } }),\n /**\n * Record a sale against one of the caller's own green-coffee inventory\n * lots. Requires a session or an owner-bound API key carrying the exact\n * `sales:write` scope. The optional `idempotencyKey` is payload-bound:\n * same-key, same-payload retries replay, while changed payloads or a\n * concurrent duplicate return 409.\n */\n create: (\n body: SalesCreateRequest,\n options?: { idempotencyKey?: string },\n ) =>\n client.POST(\"/v1/sales\", {\n body,\n params: options?.idempotencyKey\n ? { header: { \"idempotency-key\": options.idempotencyKey } }\n : undefined,\n }),\n /**\n * Update one of the caller's own sales. The sales table carries no\n * `last_updated` column, so no If-Match optimistic concurrency is\n * offered.\n */\n update: (id: number, body: SalesUpdateRequest) =>\n client.PATCH(\"/v1/sales/{id}\", {\n params: { path: { id } },\n body,\n }),\n /** Delete one of the caller's own sales. */\n delete: (id: number) =>\n client.DELETE(\"/v1/sales/{id}\", { params: { path: { id } } }),\n },\n profit: {\n /**\n * List the caller's owner-scoped profit summaries. API keys require\n * inventory:read, roast:read, and sales:read. Use pagination.total to\n * exhaust the complete owner result set.\n */\n list: (query?: ProfitListQuery) =>\n client.GET(\"/v1/profit\", { params: { query } }),\n },\n tasting: {\n /** Fetch supplier notes plus the caller's own latest tasting notes. */\n get: (catalogId: string, query?: TastingGetQuery) =>\n client.GET(\"/v1/tasting/{catalogId}\", {\n params: { path: { catalogId }, query },\n }),\n /** Replace the caller's rating for one owned inventory lot. */\n rate: (inventoryId: number, body: TastingRateRequest) =>\n client.PUT(\"/v1/tasting/inventory/{inventoryId}\", {\n params: { path: { inventoryId } },\n body,\n }),\n },\n };\n}\n\nexport type ParchmentClient = ReturnType<typeof createParchmentClient>;\n","import type { ConfirmedActionExecuteRequest, ParchmentClient } from \"./client\";\n\n/**\n * Dotted paths of every callable ParchmentClient helper, for example\n * `\"priceIndex.comparisons\"`. `raw` is the untyped openapi-fetch escape hatch\n * and is not a named helper.\n */\ntype MethodPaths<T, Prefix extends string = \"\"> = {\n [K in keyof T & string]: T[K] extends (...args: never[]) => unknown\n ? `${Prefix}${K}`\n : T[K] extends object\n ? MethodPaths<T[K], `${Prefix}${K}.`>\n : never;\n}[keyof T & string];\n\nexport type ParchmentClientMethod = MethodPaths<Omit<ParchmentClient, \"raw\">>;\n\n/**\n * The SDK reads the Cherry web agent can perform on the signed-in user's\n * behalf. Parchment's in-process chat adapter implements exactly these\n * methods, and its tests fail if the two drift. Agent surfaces built on the\n * SDK (such as the CLI) can import this list to prove they cover everything\n * the web agent can do.\n */\nexport const CHAT_AGENT_CAPABILITIES = [\n \"me\",\n \"catalog.list\",\n \"catalog.facets\",\n \"catalog.rank\",\n \"catalog.suppliers\",\n \"catalog.similar\",\n \"catalog.compare\",\n \"catalog.grades\",\n \"catalog.taxonomies\",\n \"catalog.priceHistory\",\n \"inventory.list\",\n \"roasts.list\",\n \"roasts.get\",\n \"roasts.chartData\",\n \"referenceProfiles.list\",\n \"referenceProfiles.get\",\n \"referenceProfiles.chart\",\n \"referenceProfiles.compare\",\n \"referenceProfiles.preview\",\n \"referenceProfiles.roastCandidates\",\n \"referenceProfiles.previewFromRoast\",\n \"tasting.get\",\n \"priceIndex.list\",\n \"priceIndex.stats\",\n \"priceIndex.comparisons\",\n \"priceIndex.comparison\",\n \"priceIndex.history\",\n \"market.signals\",\n \"market.metadataIndex\",\n \"market.overview\",\n \"market.evidence\",\n] as const satisfies readonly ParchmentClientMethod[];\n\nexport type ChatAgentCapability = (typeof CHAT_AGENT_CAPABILITIES)[number];\n\n/**\n * Writes the web agent can propose. The agent never writes directly: it\n * returns an action card, and only the user's confirmation executes the\n * action through the session-only `confirmedActions.execute` endpoint.\n */\nexport const CHAT_AGENT_CONFIRMED_ACTION_TYPES = [\n \"add_bean_to_inventory\",\n \"update_bean\",\n \"create_roast_session\",\n \"create_roast_from_reference\",\n \"create_generated_reference\",\n \"update_roast_notes\",\n \"record_sale\",\n] as const satisfies readonly ConfirmedActionExecuteRequest[\"actionType\"][];\n\nexport type ChatAgentConfirmedActionType =\n (typeof CHAT_AGENT_CONFIRMED_ACTION_TYPES)[number];\n\nexport type ChatAgentCapabilityExclusionReason =\n /** Same write as a confirmed action; the agent proposes and the user confirms. */\n | \"confirmed_action_write\"\n /** Bound to the signed-in user's own session; never called by the agent. */\n | \"session_only\"\n /** Credential issuance or exchange. */\n | \"auth_bootstrap\"\n /** Staff-only administration or publication. */\n | \"admin_only\"\n /** A write with no confirmed-action path; the agent must not perform it. */\n | \"write_not_agent_facing\"\n /** A read the agent has no tool for yet. */\n | \"read_not_wired\"\n /** Service plumbing with no user data. */\n | \"infrastructure\";\n\nexport interface ChatAgentCapabilityExclusion {\n reason: ChatAgentCapabilityExclusionReason;\n note: string;\n}\n\n/**\n * Every ParchmentClient helper that is not a chat-agent capability, with the\n * reason. The mapped type makes adding an SDK helper a compile error here\n * until it is classified as a capability or an exclusion.\n */\nexport const CHAT_AGENT_CAPABILITY_EXCLUSIONS: {\n readonly [\n K in Exclude<ParchmentClientMethod, ChatAgentCapability>\n ]: ChatAgentCapabilityExclusion;\n} = {\n health: { reason: \"infrastructure\", note: \"Liveness only.\" },\n \"apiKeys.list\": {\n reason: \"session_only\",\n note: \"API key management belongs to the account owner.\",\n },\n \"apiKeys.create\": {\n reason: \"auth_bootstrap\",\n note: \"Issues a raw credential.\",\n },\n \"apiKeys.revoke\": {\n reason: \"session_only\",\n note: \"API key management belongs to the account owner.\",\n },\n \"apiKeys.rotate\": {\n reason: \"auth_bootstrap\",\n note: \"Issues a replacement raw credential.\",\n },\n \"apiUsage.get\": {\n reason: \"session_only\",\n note: \"Developer account analytics, not coffee data.\",\n },\n \"emailSubscriptions.get\": {\n reason: \"session_only\",\n note: \"Email preferences are managed in account settings.\",\n },\n \"emailSubscriptions.setMarketRead\": {\n reason: \"session_only\",\n note: \"Email preferences are managed in account settings.\",\n },\n \"emailSubscriptions.unsubscribeMarketRead\": {\n reason: \"session_only\",\n note: \"Capability-link unsubscribe from email.\",\n },\n \"marketBrief.drafts.create\": {\n reason: \"admin_only\",\n note: \"Market Brief publication pipeline.\",\n },\n \"accountDeletion.request\": {\n reason: \"session_only\",\n note: \"Requires a purpose-bound reauthentication assertion.\",\n },\n \"billing.checkout.create\": {\n reason: \"session_only\",\n note: \"Billing is user-driven checkout.\",\n },\n \"billing.checkout.get\": {\n reason: \"session_only\",\n note: \"Billing is user-driven checkout.\",\n },\n \"billing.checkout.reconcile\": {\n reason: \"session_only\",\n note: \"Billing is user-driven checkout.\",\n },\n \"billing.subscriptions.list\": {\n reason: \"session_only\",\n note: \"Billing state is shown in account settings.\",\n },\n \"billing.subscriptions.mutate\": {\n reason: \"session_only\",\n note: \"Cancel or resume is user-driven.\",\n },\n \"billingAdministration.discrepancies\": {\n reason: \"admin_only\",\n note: \"Staff billing reconciliation.\",\n },\n \"billingAdministration.recompute\": {\n reason: \"admin_only\",\n note: \"Staff billing reconciliation.\",\n },\n \"billingAdministration.setManual\": {\n reason: \"admin_only\",\n note: \"Staff entitlement grants.\",\n },\n \"cliAuth.create\": { reason: \"auth_bootstrap\", note: \"CLI login flow.\" },\n \"cliAuth.inspect\": { reason: \"auth_bootstrap\", note: \"CLI login flow.\" },\n \"cliAuth.approve\": { reason: \"auth_bootstrap\", note: \"CLI login flow.\" },\n \"cliAuth.exchange\": { reason: \"auth_bootstrap\", note: \"CLI login flow.\" },\n \"catalog.access\": {\n reason: \"read_not_wired\",\n note: \"Catalog visibility metadata; the agent reads `me` instead.\",\n },\n \"catalog.map\": {\n reason: \"read_not_wired\",\n note: \"Map clusters and geometry for the web map view.\",\n },\n \"catalog.originPriceStats\": {\n reason: \"read_not_wired\",\n note: \"Covered for the agent by market.overview origin price distribution.\",\n },\n \"catalog.stats\": {\n reason: \"read_not_wired\",\n note: \"No chat tool yet.\",\n },\n \"catalog.rankPremium\": {\n reason: \"read_not_wired\",\n note: \"The agent ranks through catalog.rank objectives.\",\n },\n \"catalog.supplierDetail\": {\n reason: \"read_not_wired\",\n note: \"The agent reads supplier aggregates through catalog.suppliers.\",\n },\n \"catalog.supplierRank\": {\n reason: \"read_not_wired\",\n note: \"The agent reads supplier aggregates through catalog.suppliers.\",\n },\n \"catalog.proofCoverage\": {\n reason: \"read_not_wired\",\n note: \"No chat tool yet.\",\n },\n \"procurement.briefs.list\": {\n reason: \"read_not_wired\",\n note: \"Active briefs reach the agent as prompt context, not a tool.\",\n },\n \"procurement.briefs.create\": {\n reason: \"write_not_agent_facing\",\n note: \"No confirmed action exists for sourcing briefs.\",\n },\n \"procurement.briefs.get\": {\n reason: \"read_not_wired\",\n note: \"Active briefs reach the agent as prompt context, not a tool.\",\n },\n \"procurement.briefs.matches\": {\n reason: \"read_not_wired\",\n note: \"No chat tool yet.\",\n },\n \"portfolio.trackedLots.list\": {\n reason: \"read_not_wired\",\n note: \"Tracked lots reach the agent as prompt context, not a tool.\",\n },\n \"portfolio.trackedLots.track\": {\n reason: \"write_not_agent_facing\",\n note: \"No confirmed action exists for tracked lots.\",\n },\n \"portfolio.trackedLots.untrack\": {\n reason: \"write_not_agent_facing\",\n note: \"No confirmed action exists for tracked lots.\",\n },\n \"confirmedActions.execute\": {\n reason: \"session_only\",\n note: \"Runs only after the user confirms an agent-proposed action card.\",\n },\n \"conversation.chat.stream\": {\n reason: \"session_only\",\n note: \"The agent's own transport.\",\n },\n \"conversation.workspaces.getOrCreate\": {\n reason: \"session_only\",\n note: \"Conversation persistence owned by the chat client.\",\n },\n \"conversation.workspaces.get\": {\n reason: \"session_only\",\n note: \"Conversation persistence owned by the chat client.\",\n },\n \"conversation.workspaces.update\": {\n reason: \"session_only\",\n note: \"Conversation persistence owned by the chat client.\",\n },\n \"conversation.workspaces.messages.history\": {\n reason: \"session_only\",\n note: \"Conversation persistence owned by the chat client.\",\n },\n \"conversation.workspaces.messages.append\": {\n reason: \"session_only\",\n note: \"Conversation persistence owned by the chat client.\",\n },\n \"conversation.workspaces.messages.clear\": {\n reason: \"session_only\",\n note: \"Conversation persistence owned by the chat client.\",\n },\n \"conversation.workspaces.updateCanvas\": {\n reason: \"session_only\",\n note: \"Conversation persistence owned by the chat client.\",\n },\n \"conversation.workspaces.getCompactionInputs\": {\n reason: \"session_only\",\n note: \"Conversation persistence owned by the chat client.\",\n },\n \"conversation.workspaces.updateSummary\": {\n reason: \"session_only\",\n note: \"Conversation persistence owned by the chat client.\",\n },\n \"conversation.workspaces.compactSummary\": {\n reason: \"session_only\",\n note: \"Conversation persistence owned by the chat client.\",\n },\n \"conversation.memory.get\": {\n reason: \"session_only\",\n note: \"Memory reaches the agent as prompt context.\",\n },\n \"conversation.memory.update\": {\n reason: \"session_only\",\n note: \"Memory is edited by the user or the memory pipeline.\",\n },\n \"conversation.memory.dream\": {\n reason: \"session_only\",\n note: \"Memory is edited by the user or the memory pipeline.\",\n },\n \"inventory.shareGrants.create\": {\n reason: \"write_not_agent_facing\",\n note: \"Mints a cross-user capability token.\",\n },\n \"inventory.shareGrants.redeem\": {\n reason: \"write_not_agent_facing\",\n note: \"Redeems a cross-user capability token.\",\n },\n \"inventory.create\": {\n reason: \"confirmed_action_write\",\n note: \"Confirmed action add_bean_to_inventory.\",\n },\n \"inventory.createManualBatch\": {\n reason: \"write_not_agent_facing\",\n note: \"Bulk import; no confirmed action.\",\n },\n \"inventory.getManualBatch\": {\n reason: \"read_not_wired\",\n note: \"Bulk-import recovery read.\",\n },\n \"inventory.reserveManualBatch\": {\n reason: \"write_not_agent_facing\",\n note: \"Bulk import; no confirmed action.\",\n },\n \"inventory.commitManualBatch\": {\n reason: \"write_not_agent_facing\",\n note: \"Bulk import; no confirmed action.\",\n },\n \"inventory.getManualBatchStatus\": {\n reason: \"read_not_wired\",\n note: \"Bulk-import recovery read.\",\n },\n \"inventory.reserveCatalogBatch\": {\n reason: \"write_not_agent_facing\",\n note: \"Bulk import; no confirmed action.\",\n },\n \"inventory.commitCatalogBatch\": {\n reason: \"write_not_agent_facing\",\n note: \"Bulk import; no confirmed action.\",\n },\n \"inventory.getCatalogBatchStatus\": {\n reason: \"read_not_wired\",\n note: \"Bulk-import recovery read.\",\n },\n \"inventory.update\": {\n reason: \"confirmed_action_write\",\n note: \"Confirmed action update_bean.\",\n },\n \"inventory.delete\": {\n reason: \"write_not_agent_facing\",\n note: \"Destructive; no confirmed action.\",\n },\n \"roasts.classify\": {\n reason: \"read_not_wired\",\n note: \"Artisan import matching helper for upload flows.\",\n },\n \"roasts.create\": {\n reason: \"confirmed_action_write\",\n note: \"Confirmed action create_roast_session.\",\n },\n \"roasts.createBatch\": {\n reason: \"write_not_agent_facing\",\n note: \"Bulk roast creation; no confirmed action.\",\n },\n \"roasts.update\": {\n reason: \"confirmed_action_write\",\n note: \"Confirmed action update_roast_notes (notes and targets only).\",\n },\n \"roasts.delete\": {\n reason: \"write_not_agent_facing\",\n note: \"Destructive; no confirmed action.\",\n },\n \"roasts.deleteBatch\": {\n reason: \"write_not_agent_facing\",\n note: \"Destructive; no confirmed action.\",\n },\n \"roasts.replaceLiveCurve\": {\n reason: \"write_not_agent_facing\",\n note: \"Live roast logging client only.\",\n },\n \"roasts.import\": {\n reason: \"write_not_agent_facing\",\n note: \"Artisan file upload; saved references import through confirmed action create_roast_from_reference.\",\n },\n \"roasts.importFromReference\": {\n reason: \"confirmed_action_write\",\n note: \"Confirmed action create_roast_from_reference.\",\n },\n \"roasts.replaceArtisanImport\": {\n reason: \"write_not_agent_facing\",\n note: \"Artisan file upload.\",\n },\n \"roasts.clearArtisanImport\": {\n reason: \"write_not_agent_facing\",\n note: \"Destructive; no confirmed action.\",\n },\n \"referenceProfiles.generate\": {\n reason: \"confirmed_action_write\",\n note: \"Confirmed action create_generated_reference.\",\n },\n \"referenceProfiles.exportGenerated\": {\n reason: \"read_not_wired\",\n note: \"File export for Artisan, not a chat read.\",\n },\n \"referenceProfiles.import\": {\n reason: \"write_not_agent_facing\",\n note: \"Artisan file upload.\",\n },\n \"referenceProfiles.fromRoast\": {\n reason: \"confirmed_action_write\",\n note: \"Confirmed action create_generated_reference saves a roast's stored Artisan file as the plan's parent reference (basis artisan_source). The chart_snapshot basis has no confirmed action.\",\n },\n \"referenceProfiles.update\": {\n reason: \"write_not_agent_facing\",\n note: \"No confirmed action.\",\n },\n \"referenceProfiles.delete\": {\n reason: \"write_not_agent_facing\",\n note: \"Destructive; no confirmed action.\",\n },\n \"referenceProfiles.linkRoast\": {\n reason: \"write_not_agent_facing\",\n note: \"No confirmed action.\",\n },\n \"referenceProfiles.unlinkRoast\": {\n reason: \"write_not_agent_facing\",\n note: \"No confirmed action.\",\n },\n \"sales.list\": {\n reason: \"read_not_wired\",\n note: \"No chat tool yet.\",\n },\n \"sales.create\": {\n reason: \"confirmed_action_write\",\n note: \"Confirmed action record_sale.\",\n },\n \"sales.update\": {\n reason: \"write_not_agent_facing\",\n note: \"No confirmed action.\",\n },\n \"sales.delete\": {\n reason: \"write_not_agent_facing\",\n note: \"Destructive; no confirmed action.\",\n },\n \"profit.list\": {\n reason: \"read_not_wired\",\n note: \"No chat tool yet.\",\n },\n \"tasting.rate\": {\n reason: \"write_not_agent_facing\",\n note: \"No confirmed action.\",\n },\n};\n\n/**\n * The narrowed client shape the chat agent receives: only the capability\n * helpers, with their SDK signatures.\n */\ntype PickPaths<T, P extends string> = {\n [\n K in keyof T & string as K extends (\n P extends `${infer Head}.${string}` ? Head : P\n )\n ? K\n : never\n ]: K extends P\n ? T[K]\n : PickPaths<T[K], P extends `${K}.${infer Rest}` ? Rest : never>;\n};\n\nexport type ChatAgentClient = PickPaths<ParchmentClient, ChatAgentCapability>;\n"],"mappings":"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","names":["options"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@purveyors/sdk",
3
- "version": "0.56.0",
3
+ "version": "0.57.0",
4
4
  "description": "Typed client for the Purveyors Parchment API, generated from its OpenAPI spec.",
5
5
  "license": "MIT",
6
6
  "type": "module",