@purveyors/cli 0.14.0 → 0.19.2

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.
Files changed (53) hide show
  1. package/README.md +444 -217
  2. package/dist/commands/auth.d.ts +17 -0
  3. package/dist/commands/auth.d.ts.map +1 -1
  4. package/dist/commands/auth.js +160 -62
  5. package/dist/commands/auth.js.map +1 -1
  6. package/dist/commands/catalog.d.ts +3 -1
  7. package/dist/commands/catalog.d.ts.map +1 -1
  8. package/dist/commands/catalog.js +239 -42
  9. package/dist/commands/catalog.js.map +1 -1
  10. package/dist/commands/context.d.ts.map +1 -1
  11. package/dist/commands/context.js +5 -3
  12. package/dist/commands/context.js.map +1 -1
  13. package/dist/commands/manifest.d.ts.map +1 -1
  14. package/dist/commands/manifest.js +5 -1
  15. package/dist/commands/manifest.js.map +1 -1
  16. package/dist/commands/roast.d.ts.map +1 -1
  17. package/dist/commands/roast.js +115 -10
  18. package/dist/commands/roast.js.map +1 -1
  19. package/dist/commands/sales.d.ts.map +1 -1
  20. package/dist/commands/sales.js +87 -40
  21. package/dist/commands/sales.js.map +1 -1
  22. package/dist/lib/catalog.d.ts +332 -1
  23. package/dist/lib/catalog.d.ts.map +1 -1
  24. package/dist/lib/catalog.js +654 -2
  25. package/dist/lib/catalog.js.map +1 -1
  26. package/dist/lib/interactive/forms.d.ts +10 -0
  27. package/dist/lib/interactive/forms.d.ts.map +1 -1
  28. package/dist/lib/interactive/forms.js +10 -8
  29. package/dist/lib/interactive/forms.js.map +1 -1
  30. package/dist/lib/interactive/watch.d.ts +38 -4
  31. package/dist/lib/interactive/watch.d.ts.map +1 -1
  32. package/dist/lib/interactive/watch.js +294 -86
  33. package/dist/lib/interactive/watch.js.map +1 -1
  34. package/dist/lib/manifest.d.ts +7 -0
  35. package/dist/lib/manifest.d.ts.map +1 -1
  36. package/dist/lib/manifest.js +231 -26
  37. package/dist/lib/manifest.js.map +1 -1
  38. package/dist/lib/path-input.d.ts +3 -0
  39. package/dist/lib/path-input.d.ts.map +1 -0
  40. package/dist/lib/path-input.js +13 -0
  41. package/dist/lib/path-input.js.map +1 -0
  42. package/dist/lib/roast.d.ts +2 -0
  43. package/dist/lib/roast.d.ts.map +1 -1
  44. package/dist/lib/roast.js +5 -2
  45. package/dist/lib/roast.js.map +1 -1
  46. package/dist/lib/sales.d.ts +15 -2
  47. package/dist/lib/sales.d.ts.map +1 -1
  48. package/dist/lib/sales.js +77 -15
  49. package/dist/lib/sales.js.map +1 -1
  50. package/dist/program.d.ts.map +1 -1
  51. package/dist/program.js +17 -9
  52. package/dist/program.js.map +1 -1
  53. package/package.json +6 -1
@@ -2,8 +2,25 @@ import { Command } from 'commander';
2
2
  import { outputData, info } from '../lib/output.js';
3
3
  import { withErrorHandling, PrvrsError } from '../lib/errors.js';
4
4
  import { requireAuth } from '../lib/auth-guard.js';
5
- import { searchCatalog, getCatalog, getCatalogStats, findSimilarBeans, computeCatalogStats, sanitizeFilterValue, catalogSortFields, } from '../lib/catalog.js';
5
+ import { searchCatalog, getCatalog, getCatalogStats, getCatalogSimilarity, catalogRankPremium, supplierList, supplierDetail, supplierRank, computeCatalogStats, sanitizeFilterValue, catalogSortFields, catalogSimilarityModes, } from '../lib/catalog.js';
6
6
  export { sanitizeFilterValue, computeCatalogStats };
7
+ function hasCatalogApiKeyEnv() {
8
+ return Boolean(process.env.PARCHMENT_API_KEY || process.env.PURVEYORS_API_KEY);
9
+ }
10
+ function createApiKeyOnlyCatalogClient() {
11
+ return {
12
+ auth: {
13
+ getSession: async () => ({ data: { session: null }, error: null }),
14
+ },
15
+ };
16
+ }
17
+ async function resolveCatalogReadClient(requiredRole, useApiKeyWithoutSession) {
18
+ if (useApiKeyWithoutSession && hasCatalogApiKeyEnv()) {
19
+ return createApiKeyOnlyCatalogClient();
20
+ }
21
+ const { supabase } = await requireAuth(requiredRole);
22
+ return supabase;
23
+ }
7
24
  function parseFiniteNumberArg(rawValue, message) {
8
25
  const trimmed = rawValue.trim();
9
26
  if (trimmed.length === 0) {
@@ -22,6 +39,13 @@ function parsePositiveIntegerArg(rawValue, message) {
22
39
  }
23
40
  return parsed;
24
41
  }
42
+ function parseBoundedPositiveIntegerArg(rawValue, flag, min, max) {
43
+ const parsed = parsePositiveIntegerArg(rawValue, `Invalid ${flag}: "${rawValue}". Must be a positive integer.`);
44
+ if (parsed < min || parsed > max) {
45
+ throw new PrvrsError('INVALID_ARGUMENT', `Invalid ${flag}: "${rawValue}". Must be between ${min} and ${max}.`);
46
+ }
47
+ return parsed;
48
+ }
25
49
  function parseNonNegativeIntegerArg(rawValue, message) {
26
50
  const parsed = parseFiniteNumberArg(rawValue, message);
27
51
  if (!Number.isInteger(parsed) || parsed < 0) {
@@ -32,7 +56,9 @@ function parseNonNegativeIntegerArg(rawValue, message) {
32
56
  // ─── Command builder ──────────────────────────────────────────────────────────
33
57
  /**
34
58
  * `purvey catalog` — Browse the coffee catalog.
35
- * Requires an authenticated viewer session.
59
+ * Requires an authenticated viewer session. Structured process filters on
60
+ * `catalog search` require member access under the current session-authenticated
61
+ * CLI path.
36
62
  */
37
63
  export function buildCatalogCommand() {
38
64
  const catalog = new Command('catalog').description('Browse the coffee catalog');
@@ -42,6 +68,11 @@ export function buildCatalogCommand() {
42
68
  .description('Search coffees by origin, process, price, or flavor')
43
69
  .option('--origin <origin>', 'Filter by origin (country, continent, or region)')
44
70
  .option('--process <method>', 'Filter by processing method (e.g. natural, washed)')
71
+ .option('--processing-base-method <method>', 'Filter by canonical process base method')
72
+ .option('--fermentation-type <type>', 'Filter by structured fermentation type')
73
+ .option('--process-additive <additive>', 'Filter by disclosed process additive')
74
+ .option('--processing-disclosure-level <level>', 'Filter by process disclosure level')
75
+ .option('--processing-confidence-min <n>', 'Minimum process metadata confidence (0-1)')
45
76
  .option('--price-min <n>', 'Minimum price per lb (USD)')
46
77
  .option('--price-max <n>', 'Maximum price per lb (USD)')
47
78
  .option('--flavor <keywords>', 'Flavor keywords, comma-separated (e.g. "berry,chocolate")')
@@ -55,11 +86,14 @@ export function buildCatalogCommand() {
55
86
  .option('--sort <field>', `Sort results by: ${catalogSortFields.join(', ')}`)
56
87
  .option('--offset <n>', 'Skip N results (for pagination)', '0')
57
88
  .option('--limit <n>', 'Maximum results to return', '10')
89
+ .option('--include-proof', 'Request canonical catalog proof summaries from /v1/catalog')
58
90
  .addHelpText('after', `
59
91
  Examples:
60
92
  purvey catalog search --origin "Ethiopia" --pretty
61
93
  purvey catalog search --origin "Colombia" --process "honey" --pretty
62
94
  purvey catalog search --process "natural" --flavor "blueberry,citrus" --stocked
95
+ purvey catalog search --processing-base-method "Natural" --fermentation-type "Anaerobic" --pretty
96
+ purvey catalog search --process-additive "hops" --processing-confidence-min 0.8 --pretty
63
97
  purvey catalog search --price-min 5 --price-max 12 --stocked --limit 20
64
98
  purvey catalog search --stocked --sort price --pretty
65
99
  purvey catalog search --sort newest --limit 20
@@ -72,6 +106,7 @@ Examples:
72
106
  purvey catalog search --variety "gesha" --stocked --pretty
73
107
  purvey catalog search --drying-method "sun" --origin "Ethiopia" --pretty
74
108
  purvey catalog search --stocked-days 30 --pretty
109
+ purvey catalog search --origin "Ethiopia" --include-proof --json
75
110
 
76
111
  Sort fields:
77
112
  price cheapest first
@@ -83,12 +118,22 @@ Sort fields:
83
118
  Notes:
84
119
  All filters are optional. Without flags, returns up to --limit results.
85
120
  --origin accepts partial matches (e.g. "Ethiopia" matches "Ethiopia Guji").
121
+ Structured process filters map to canonical /v1/catalog query names.
122
+ --process remains the legacy broad processing-label filter.
123
+ --processing-base-method, --fermentation-type, --process-additive,
124
+ --processing-disclosure-level, and --processing-confidence-min require member
125
+ access under the current session-authenticated CLI path.
126
+ --processing-base-method, --fermentation-type, --process-additive, and
127
+ --processing-disclosure-level require exact structured metadata matches.
128
+ --processing-confidence-min accepts a decimal from 0 to 1.
86
129
  --name and --supplier accept partial matches (case-insensitive).
87
130
  --variety filters on cultivar_detail (partial match, case-insensitive).
88
131
  --drying-method filters on drying_method (partial match, case-insensitive).
89
132
  --stocked-days N shows only coffees stocked within the last N days.
90
133
  --ids fetches specific catalog items by ID, ignoring --limit and --offset.
91
134
  --offset + --limit enables pagination through large result sets.
135
+ --include-proof uses the canonical /v1/catalog?include=proof response and does
136
+ not compute proof fields locally in the CLI.
92
137
  Requires an authenticated viewer session.
93
138
  `)
94
139
  .action(withErrorHandling(async (opts, cmd) => {
@@ -120,11 +165,25 @@ Notes:
120
165
  const stockedDays = opts.stockedDays !== undefined
121
166
  ? parsePositiveIntegerArg(opts.stockedDays, `Invalid --stocked-days: "${opts.stockedDays}". Must be a positive integer.`)
122
167
  : undefined;
168
+ const processingConfidenceMin = opts.processingConfidenceMin !== undefined
169
+ ? parseFiniteNumberArg(opts.processingConfidenceMin, `Invalid --processing-confidence-min: "${opts.processingConfidenceMin}". Must be a number from 0 to 1.`)
170
+ : undefined;
171
+ if (processingConfidenceMin !== undefined &&
172
+ (processingConfidenceMin < 0 || processingConfidenceMin > 1)) {
173
+ throw new PrvrsError('INVALID_ARGUMENT', `Invalid --processing-confidence-min: "${opts.processingConfidenceMin}". Must be a number from 0 to 1.`);
174
+ }
123
175
  const offset = opts.offset !== undefined
124
176
  ? parseNonNegativeIntegerArg(opts.offset, `Invalid --offset: "${opts.offset}". Must be a non-negative integer.`)
125
177
  : undefined;
126
178
  const limit = parsePositiveIntegerArg(opts.limit, `Invalid --limit: "${opts.limit}". Must be a positive integer.`);
127
- const { supabase } = await requireAuth('viewer');
179
+ const hasStructuredProcessFilters = opts.processingBaseMethod !== undefined ||
180
+ opts.fermentationType !== undefined ||
181
+ opts.processAdditive !== undefined ||
182
+ opts.processingDisclosureLevel !== undefined ||
183
+ opts.processingConfidenceMin !== undefined;
184
+ const requiredRole = hasStructuredProcessFilters ? 'member' : 'viewer';
185
+ const includeProof = opts.includeProof ? true : undefined;
186
+ const supabase = await resolveCatalogReadClient(requiredRole, Boolean(includeProof));
128
187
  const data = await searchCatalog(supabase, {
129
188
  origin: opts.origin,
130
189
  process: opts.process,
@@ -137,10 +196,16 @@ Notes:
137
196
  variety: opts.variety,
138
197
  dryingMethod: opts.dryingMethod,
139
198
  stockedDays,
199
+ processingBaseMethod: opts.processingBaseMethod,
200
+ fermentationType: opts.fermentationType,
201
+ processAdditive: opts.processAdditive,
202
+ processingDisclosureLevel: opts.processingDisclosureLevel,
203
+ processingConfidenceMin,
140
204
  stocked: opts.stocked ? true : undefined,
141
205
  sort: sortValue,
142
206
  offset,
143
207
  limit,
208
+ includeProof,
144
209
  });
145
210
  if (data.length === 0) {
146
211
  info('No coffees found matching your criteria.');
@@ -152,22 +217,29 @@ Notes:
152
217
  catalog
153
218
  .command('get <id>')
154
219
  .description('Fetch a single coffee by ID')
220
+ .option('--include-proof', 'Request the canonical catalog proof summary from /v1/catalog')
155
221
  .addHelpText('after', `
156
222
  Examples:
157
223
  purvey catalog get 128 --pretty
224
+ purvey catalog get 128 --include-proof --json
158
225
  purvey catalog get 42 | jq '{name, origin, process, cost_lb}'
159
226
  purvey catalog get 77 --csv
160
227
 
161
228
  Notes:
162
229
  <id> is the coffee_catalog.catalog_id (integer).
163
230
  Use 'purvey catalog search' to find IDs.
231
+ --include-proof uses the canonical /v1/catalog?include=proof response and does
232
+ not compute proof fields locally in the CLI.
164
233
  Requires an authenticated viewer session.
165
234
  `)
166
- .action(withErrorHandling(async (id, _opts, cmd) => {
235
+ .action(withErrorHandling(async (id, opts, cmd) => {
167
236
  const globalOpts = cmd.optsWithGlobals();
168
237
  const catalogId = parsePositiveIntegerArg(id, `Invalid ID: "${id}". Please provide a numeric coffee_catalog ID.`);
169
- const { supabase } = await requireAuth('viewer');
170
- const data = await getCatalog(supabase, catalogId);
238
+ const includeProof = opts.includeProof ? true : undefined;
239
+ const supabase = await resolveCatalogReadClient('viewer', Boolean(includeProof));
240
+ const data = await getCatalog(supabase, catalogId, {
241
+ includeProof,
242
+ });
171
243
  outputData(data, globalOpts);
172
244
  }));
173
245
  // ── catalog stats ─────────────────────────────────────────────────────────
@@ -191,62 +263,187 @@ Notes:
191
263
  const stats = await getCatalogStats(supabase);
192
264
  outputData(stats, globalOpts);
193
265
  }));
266
+ // ── catalog rank-premium ─────────────────────────────────────────────────
267
+ catalog
268
+ .command('rank-premium')
269
+ .description('Rank premium catalog candidates by Purveyor Score')
270
+ .option('--origin <origin>', 'Filter by origin (country, continent, or region)')
271
+ .option('--process <method>', 'Filter by processing method')
272
+ .option('--supplier <name>', 'Filter by supplier/source name')
273
+ .option('--stocked', 'Only include currently stocked coffees')
274
+ .option('--price-max <n>', 'Maximum price per lb (USD)')
275
+ .option('--min-score <n>', 'Minimum Purveyor Score')
276
+ .option('--include-unscored', 'Allow unscored rows to appear after scored rows')
277
+ .option('--sample-size <n>', 'Rows to sample before ranking (1-5000)', '250')
278
+ .option('--limit <n>', 'Maximum ranked coffees to return (1-50)', '10')
279
+ .addHelpText('after', `
280
+ Examples:
281
+ purvey catalog rank-premium --stocked --limit 10 --pretty
282
+ purvey catalog rank-premium --origin Ethiopia --min-score 88 --json
283
+ purvey catalog rank-premium --supplier "Royal Coffee" --price-max 12 --pretty
284
+
285
+ Notes:
286
+ Ranks by coffee_catalog.score_value, exposed as purveyor_score in output.
287
+ The CLI does not recompute the upstream score model; it preserves the score field
288
+ and adds transparent ranking signals for agents.
289
+ Requires an authenticated viewer session.
290
+ `)
291
+ .action(withErrorHandling(async (opts, cmd) => {
292
+ const globalOpts = cmd.optsWithGlobals();
293
+ const input = {
294
+ origin: opts.origin,
295
+ process: opts.process,
296
+ supplier: opts.supplier,
297
+ stocked: opts.stocked ? true : undefined,
298
+ priceMax: opts.priceMax !== undefined
299
+ ? parseFiniteNumberArg(opts.priceMax, `Invalid --price-max: "${opts.priceMax}". Must be a number.`)
300
+ : undefined,
301
+ minScore: opts.minScore !== undefined
302
+ ? parseFiniteNumberArg(opts.minScore, `Invalid --min-score: "${opts.minScore}". Must be a number.`)
303
+ : undefined,
304
+ includeUnscored: opts.includeUnscored ? true : undefined,
305
+ sampleSize: parseBoundedPositiveIntegerArg(opts.sampleSize, '--sample-size', 1, 5000),
306
+ limit: parseBoundedPositiveIntegerArg(opts.limit, '--limit', 1, 50),
307
+ };
308
+ const { supabase } = await requireAuth('viewer');
309
+ const data = await catalogRankPremium(supabase, input);
310
+ outputData(data, globalOpts);
311
+ }));
312
+ // ── catalog supplier aggregates ──────────────────────────────────────────
313
+ catalog
314
+ .command('supplier-list')
315
+ .description('List supplier aggregates from catalog rows')
316
+ .option('--stocked', 'Only include currently stocked coffees')
317
+ .option('--sample-size <n>', 'Catalog rows to fetch per page before aggregation (1-5000)', '5000')
318
+ .option('--limit <n>', 'Maximum suppliers to return (1-100)', '25')
319
+ .addHelpText('after', `
320
+ Examples:
321
+ purvey catalog supplier-list --stocked --pretty
322
+ purvey catalog supplier-list --limit 50 --json
323
+
324
+ Notes:
325
+ Aggregates supplier count, stocked count, Purveyor Score coverage, average score,
326
+ price range, origin coverage, process coverage, and representative top coffees.
327
+ Requires an authenticated viewer session.
328
+ `)
329
+ .action(withErrorHandling(async (opts, cmd) => {
330
+ const globalOpts = cmd.optsWithGlobals();
331
+ const input = {
332
+ stocked: opts.stocked ? true : undefined,
333
+ sampleSize: parseBoundedPositiveIntegerArg(opts.sampleSize, '--sample-size', 1, 5000),
334
+ limit: parseBoundedPositiveIntegerArg(opts.limit, '--limit', 1, 100),
335
+ };
336
+ const { supabase } = await requireAuth('viewer');
337
+ const data = await supplierList(supabase, input);
338
+ outputData(data, globalOpts);
339
+ }));
340
+ catalog
341
+ .command('supplier-detail <supplier>')
342
+ .description('Show aggregate detail for a supplier query')
343
+ .option('--stocked', 'Only include currently stocked coffees')
344
+ .option('--top-coffees <n>', 'Representative top coffees to include (1-25)', '5')
345
+ .option('--sample-size <n>', 'Catalog rows to fetch per page before aggregation (1-5000)', '5000')
346
+ .addHelpText('after', `
347
+ Examples:
348
+ purvey catalog supplier-detail "Royal Coffee" --pretty
349
+ purvey catalog supplier-detail "Cafe Imports" --stocked --json
350
+
351
+ Notes:
352
+ Supplier matching is case-insensitive and partial, mirroring catalog search.
353
+ Requires an authenticated viewer session.
354
+ `)
355
+ .action(withErrorHandling(async (supplier, opts, cmd) => {
356
+ const globalOpts = cmd.optsWithGlobals();
357
+ const input = {
358
+ supplier,
359
+ stocked: opts.stocked ? true : undefined,
360
+ topCoffees: parseBoundedPositiveIntegerArg(opts.topCoffees, '--top-coffees', 1, 25),
361
+ sampleSize: parseBoundedPositiveIntegerArg(opts.sampleSize, '--sample-size', 1, 5000),
362
+ };
363
+ const { supabase } = await requireAuth('viewer');
364
+ const data = await supplierDetail(supabase, input);
365
+ outputData(data, globalOpts);
366
+ }));
367
+ catalog
368
+ .command('supplier-rank')
369
+ .description('Rank suppliers by average Purveyor Score and stocked coverage')
370
+ .option('--stocked', 'Only include currently stocked coffees')
371
+ .option('--min-coffees <n>', 'Minimum catalog rows required per supplier', '1')
372
+ .option('--sample-size <n>', 'Catalog rows to fetch per page before aggregation (1-5000)', '5000')
373
+ .option('--limit <n>', 'Maximum suppliers to return (1-100)', '25')
374
+ .addHelpText('after', `
375
+ Examples:
376
+ purvey catalog supplier-rank --stocked --min-coffees 3 --pretty
377
+ purvey catalog supplier-rank --limit 10 --json
378
+
379
+ Notes:
380
+ Ranks suppliers by average Purveyor Score, then currently stocked count.
381
+ Requires an authenticated viewer session.
382
+ `)
383
+ .action(withErrorHandling(async (opts, cmd) => {
384
+ const globalOpts = cmd.optsWithGlobals();
385
+ const input = {
386
+ stocked: opts.stocked ? true : undefined,
387
+ minCoffees: parsePositiveIntegerArg(opts.minCoffees, `Invalid --min-coffees: "${opts.minCoffees}". Must be a positive integer.`),
388
+ sampleSize: parseBoundedPositiveIntegerArg(opts.sampleSize, '--sample-size', 1, 5000),
389
+ limit: parseBoundedPositiveIntegerArg(opts.limit, '--limit', 1, 100),
390
+ };
391
+ const { supabase } = await requireAuth('viewer');
392
+ const data = await supplierRank(supabase, input);
393
+ outputData(data, globalOpts);
394
+ }));
194
395
  // ── catalog similar <id> ──────────────────────────────────────────────────
195
396
  catalog
196
397
  .command('similar <id>')
197
- .description('Find similar beans across all suppliers')
198
- .option('--threshold <score>', 'Minimum similarity (0-1)', '0.70')
199
- .option('--limit <count>', 'Max results', '10')
398
+ .description('Find canonical candidates and similar recommendations for a catalog coffee')
399
+ .option('--threshold <score>', 'Minimum canonical similarity threshold (0.5-0.99)', '0.70')
400
+ .option('--limit <count>', 'Max results (1-25)', '10')
200
401
  .option('--stocked-only', 'Only show currently stocked beans')
402
+ .option('--mode <mode>', `Filter canonical groups by mode: ${catalogSimilarityModes.join(', ')}`, 'all')
201
403
  .addHelpText('after', `
202
404
  Examples:
203
405
  purvey catalog similar 1182
204
406
  purvey catalog similar 1182 --threshold 0.85 --stocked-only --pretty
205
- purvey catalog similar 1182 --json | jq '.[0]'
407
+ purvey catalog similar 1182 --mode likely_same --json | jq '.data.groups.canonical_candidates'
408
+ purvey catalog similar 1182 --json | jq '.data.groups.similar_recommendations[0].match.classification.blockers'
206
409
 
207
410
  Notes:
208
- Uses pgvector cosine similarity on tasting notes and bean descriptors.
209
- --threshold controls sensitivity (higher = more strict match).
411
+ Uses the beta canonical /v1/catalog/{id}/similar contract.
412
+ JSON output is the canonical grouped response object, not the legacy flat RPC array.
413
+ data.groups.canonical_candidates are likely same-lot candidates.
414
+ data.groups.similar_recommendations are useful substitutes or profile matches.
415
+ Blockers, proof summaries, score dimensions, classification_version,
416
+ query_strategy, and pricing metadata are preserved when supplied by the API.
417
+ --threshold controls sensitivity (higher = more strict match, 0.5-0.99).
418
+ --mode can be all, likely_same, or similar_profile.
210
419
  Default output is compact JSON. Use --pretty for formatted JSON.
211
- Returns beans sorted by similarity score (highest first).
212
- Requires an authenticated viewer session.
420
+ Requires an authenticated member session, or a paid PARCHMENT_API_KEY/PURVEYORS_API_KEY.
213
421
  `)
214
422
  .action(withErrorHandling(async (id, opts, cmd) => {
215
423
  const globalOpts = cmd.optsWithGlobals();
216
424
  const coffeeId = parsePositiveIntegerArg(id, `Invalid ID: "${id}". Please provide a numeric coffee_catalog ID.`);
217
425
  const threshold = parseFiniteNumberArg(opts.threshold, `Invalid --threshold: "${opts.threshold}". Must be a number between 0 and 1.`);
218
426
  const limit = parsePositiveIntegerArg(opts.limit, `Invalid --limit: "${opts.limit}". Must be a positive integer.`);
219
- const stockedOnly = Boolean(opts.stockedOnly);
220
- const { supabase } = await requireAuth('viewer');
221
- // Confirm the target bean exists before running similarity lookup.
222
- const { data: targetBean, error: targetError } = await supabase
223
- .from('coffee_catalog')
224
- .select('catalog_id')
225
- .eq('catalog_id', coffeeId)
226
- .single();
227
- if (targetError || !targetBean) {
228
- throw new PrvrsError('NOT_FOUND', `Coffee ID ${coffeeId} not found in catalog.`);
427
+ if (threshold < 0.5 || threshold > 0.99) {
428
+ throw new PrvrsError('INVALID_ARGUMENT', `Invalid --threshold: "${opts.threshold}". Must be a number between 0.5 and 0.99.`);
229
429
  }
230
- // Call the lib function
231
- const results = await findSimilarBeans(supabase, {
232
- coffee_id: coffeeId,
233
- threshold: threshold,
234
- limit: limit,
235
- });
236
- if (results.length === 0) {
237
- info(`No embeddings found for coffee ID ${coffeeId}.`);
238
- return;
430
+ if (limit > 25) {
431
+ throw new PrvrsError('INVALID_ARGUMENT', `Invalid --limit: "${opts.limit}". Must be a positive integer up to 25.`);
239
432
  }
240
- // Filter stocked-only client-side
241
- let filtered = results;
242
- if (stockedOnly) {
243
- filtered = filtered.filter((r) => r.stocked);
244
- if (filtered.length === 0) {
245
- info('No stocked beans found matching the similarity threshold.');
246
- return;
247
- }
433
+ const mode = opts.mode;
434
+ if (!catalogSimilarityModes.includes(mode)) {
435
+ throw new PrvrsError('INVALID_ARGUMENT', `Invalid --mode: "${mode}". Must be one of: ${catalogSimilarityModes.join(', ')}.`);
248
436
  }
249
- outputData(filtered, globalOpts);
437
+ const stockedOnly = Boolean(opts.stockedOnly);
438
+ const supabase = await resolveCatalogReadClient('member', true);
439
+ const response = await getCatalogSimilarity(supabase, {
440
+ coffee_id: coffeeId,
441
+ threshold,
442
+ limit,
443
+ stockedOnly,
444
+ mode: mode,
445
+ });
446
+ outputData(response, globalOpts);
250
447
  }));
251
448
  return catalog;
252
449
  }
@@ -1 +1 @@
1
- {"version":3,"file":"catalog.js","sourceRoot":"","sources":["../../src/commands/catalog.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"catalog.js","sourceRoot":"","sources":["../../src/commands/catalog.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/commands/context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMpC,wBAAgB,mBAAmB,IAAI,OAAO,CAkD7C"}
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/commands/context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMpC,wBAAgB,mBAAmB,IAAI,OAAO,CAoD7C"}
@@ -4,12 +4,14 @@ import { getCliManifest, renderContextText } from '../lib/manifest.js';
4
4
  import { outputData } from '../lib/output.js';
5
5
  export function buildContextCommand() {
6
6
  return new Command('context')
7
- .description('Output the dense human-readable CLI reference, or the JSON manifest with --json/--pretty')
7
+ .description('Output the dense human-readable operator reference; use --json/--pretty only for manifest parity')
8
8
  .option('--json', 'Emit the machine-readable manifest contract as compact JSON')
9
9
  .option('--pretty', 'Emit the machine-readable manifest contract as indented JSON')
10
10
  .addHelpText('after', `
11
- Default output is dense human-readable reference text.
12
- Use --json or --pretty for the same machine-readable manifest emitted by \`purvey manifest\`.
11
+ Default output is the dense human-readable operator reference.
12
+ Preferred machine contract: \`purvey manifest\`.
13
+ Use --json or --pretty only when an existing \`purvey context\` caller needs manifest parity.
14
+ Use \`@purveyors/cli/manifest\` for the same contract inside Node.js or agent runtimes.
13
15
 
14
16
  Examples:
15
17
  purvey context
@@ -1 +1 @@
1
- {"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/commands/context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACjE,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvE,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAG9C,MAAM,UAAU,mBAAmB;IACjC,OAAO,IAAI,OAAO,CAAC,SAAS,CAAC;SAC1B,WAAW,CACV,0FAA0F,CAC3F;SACA,MAAM,CAAC,QAAQ,EAAE,6DAA6D,CAAC;SAC/E,MAAM,CAAC,UAAU,EAAE,8DAA8D,CAAC;SAClF,WAAW,CACV,OAAO,EACP;;;;;;;;;;;CAWL,CACI;SACA,MAAM,CACL,iBAAiB,CAAC,KAAK,EAAE,IAA6B,EAAE,GAAY,EAAE,EAAE;QACtE,MAAM,UAAU,GAAG,GAAG,CAAC,eAAe,EAAmB,CAAC;QAC1D,MAAM,QAAQ,GAAG,cAAc,EAAE,CAAC;QAClC,MAAM,SAAS,GACb,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;YAClB,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC;YACpB,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC;YACxB,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QAE7B,IAAI,UAAU,CAAC,GAAG,EAAE,CAAC;YACnB,MAAM,IAAI,UAAU,CAClB,kBAAkB,EAClB,4EAA4E,CAC7E,CAAC;QACJ,CAAC;QAED,IAAI,SAAS,EAAE,CAAC;YACd,UAAU,CAAC,QAAQ,EAAE;gBACnB,IAAI,EAAE,IAAI;gBACV,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC;aAC3D,CAAC,CAAC;YACH,OAAO;QACT,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC3C,CAAC,CAAC,CACH,CAAC;AACN,CAAC"}
1
+ {"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/commands/context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACjE,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvE,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAG9C,MAAM,UAAU,mBAAmB;IACjC,OAAO,IAAI,OAAO,CAAC,SAAS,CAAC;SAC1B,WAAW,CACV,kGAAkG,CACnG;SACA,MAAM,CAAC,QAAQ,EAAE,6DAA6D,CAAC;SAC/E,MAAM,CAAC,UAAU,EAAE,8DAA8D,CAAC;SAClF,WAAW,CACV,OAAO,EACP;;;;;;;;;;;;;CAaL,CACI;SACA,MAAM,CACL,iBAAiB,CAAC,KAAK,EAAE,IAA6B,EAAE,GAAY,EAAE,EAAE;QACtE,MAAM,UAAU,GAAG,GAAG,CAAC,eAAe,EAAmB,CAAC;QAC1D,MAAM,QAAQ,GAAG,cAAc,EAAE,CAAC;QAClC,MAAM,SAAS,GACb,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;YAClB,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC;YACpB,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC;YACxB,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QAE7B,IAAI,UAAU,CAAC,GAAG,EAAE,CAAC;YACnB,MAAM,IAAI,UAAU,CAClB,kBAAkB,EAClB,4EAA4E,CAC7E,CAAC;QACJ,CAAC;QAED,IAAI,SAAS,EAAE,CAAC;YACd,UAAU,CAAC,QAAQ,EAAE;gBACnB,IAAI,EAAE,IAAI;gBACV,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC;aAC3D,CAAC,CAAC;YACH,OAAO;QACT,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC3C,CAAC,CAAC,CACH,CAAC;AACN,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../../src/commands/manifest.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMpC,wBAAgB,oBAAoB,IAAI,OAAO,CAgC9C"}
1
+ {"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../../src/commands/manifest.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMpC,wBAAgB,oBAAoB,IAAI,OAAO,CAsC9C"}
@@ -4,15 +4,19 @@ import { getCliManifest } from '../lib/manifest.js';
4
4
  import { outputData } from '../lib/output.js';
5
5
  export function buildManifestCommand() {
6
6
  return new Command('manifest')
7
- .description('Output the machine-readable CLI manifest contract')
7
+ .description('Output the preferred stable machine-readable CLI manifest contract for shells and agents')
8
8
  .option('--json', 'Emit the manifest as compact JSON (default)')
9
9
  .option('--pretty', 'Emit the manifest as indented JSON')
10
10
  .addHelpText('after', `
11
+ Preferred machine-readable entrypoint for shells, scripts, and agents.
12
+ Use \`purvey context --json\` only for compatibility with existing context-based callers.
13
+
11
14
  Examples:
12
15
  purvey manifest
13
16
  purvey manifest --pretty
14
17
  purvey manifest > cli-manifest.json
15
18
  purvey manifest | jq '.commandGroups[].name'
19
+ node --input-type=module -e "import { getCliManifest } from '@purveyors/cli/manifest'; console.log(JSON.stringify(getCliManifest()))"
16
20
  `)
17
21
  .action(withErrorHandling(async (opts, cmd) => {
18
22
  const globalOpts = cmd.optsWithGlobals();
@@ -1 +1 @@
1
- {"version":3,"file":"manifest.js","sourceRoot":"","sources":["../../src/commands/manifest.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACjE,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAG9C,MAAM,UAAU,oBAAoB;IAClC,OAAO,IAAI,OAAO,CAAC,UAAU,CAAC;SAC3B,WAAW,CAAC,mDAAmD,CAAC;SAChE,MAAM,CAAC,QAAQ,EAAE,6CAA6C,CAAC;SAC/D,MAAM,CAAC,UAAU,EAAE,oCAAoC,CAAC;SACxD,WAAW,CACV,OAAO,EACP;;;;;;CAML,CACI;SACA,MAAM,CACL,iBAAiB,CAAC,KAAK,EAAE,IAA6B,EAAE,GAAY,EAAE,EAAE;QACtE,MAAM,UAAU,GAAG,GAAG,CAAC,eAAe,EAAmB,CAAC;QAE1D,IAAI,UAAU,CAAC,GAAG,EAAE,CAAC;YACnB,MAAM,IAAI,UAAU,CAClB,kBAAkB,EAClB,sEAAsE,CACvE,CAAC;QACJ,CAAC;QAED,UAAU,CAAC,cAAc,EAAE,EAAE;YAC3B,IAAI,EAAE,IAAI;YACV,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC;SAC3D,CAAC,CAAC;IACL,CAAC,CAAC,CACH,CAAC;AACN,CAAC"}
1
+ {"version":3,"file":"manifest.js","sourceRoot":"","sources":["../../src/commands/manifest.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACjE,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAG9C,MAAM,UAAU,oBAAoB;IAClC,OAAO,IAAI,OAAO,CAAC,UAAU,CAAC;SAC3B,WAAW,CACV,0FAA0F,CAC3F;SACA,MAAM,CAAC,QAAQ,EAAE,6CAA6C,CAAC;SAC/D,MAAM,CAAC,UAAU,EAAE,oCAAoC,CAAC;SACxD,WAAW,CACV,OAAO,EACP;;;;;;;;;;CAUL,CACI;SACA,MAAM,CACL,iBAAiB,CAAC,KAAK,EAAE,IAA6B,EAAE,GAAY,EAAE,EAAE;QACtE,MAAM,UAAU,GAAG,GAAG,CAAC,eAAe,EAAmB,CAAC;QAE1D,IAAI,UAAU,CAAC,GAAG,EAAE,CAAC;YACnB,MAAM,IAAI,UAAU,CAClB,kBAAkB,EAClB,sEAAsE,CACvE,CAAC;QACJ,CAAC;QAED,UAAU,CAAC,cAAc,EAAE,EAAE;YAC3B,IAAI,EAAE,IAAI;YACV,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC;SAC3D,CAAC,CAAC;IACL,CAAC,CAAC,CACH,CAAC;AACN,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"roast.d.ts","sourceRoot":"","sources":["../../src/commands/roast.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAgBpC,OAAO,KAAK,EACV,YAAY,EACZ,gBAAgB,EAChB,eAAe,EAEhB,MAAM,iBAAiB,CAAC;AAOzB,YAAY,EAAE,YAAY,EAAE,gBAAgB,EAAE,eAAe,EAAE,CAAC;AAIhE;;;GAGG;AACH,wBAAgB,iBAAiB,IAAI,OAAO,CAyyB3C"}
1
+ {"version":3,"file":"roast.d.ts","sourceRoot":"","sources":["../../src/commands/roast.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAgBpC,OAAO,KAAK,EACV,YAAY,EACZ,gBAAgB,EAChB,eAAe,EAEhB,MAAM,iBAAiB,CAAC;AAQzB,YAAY,EAAE,YAAY,EAAE,gBAAgB,EAAE,eAAe,EAAE,CAAC;AAIhE;;;GAGG;AACH,wBAAgB,iBAAiB,IAAI,OAAO,CAw6B3C"}