@purveyors/cli 0.33.2 → 0.35.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.
Files changed (87) hide show
  1. package/README.md +176 -13
  2. package/dist/commands/auth.d.ts.map +1 -1
  3. package/dist/commands/auth.js +21 -0
  4. package/dist/commands/auth.js.map +1 -1
  5. package/dist/commands/catalog.d.ts.map +1 -1
  6. package/dist/commands/catalog.js +40 -13
  7. package/dist/commands/catalog.js.map +1 -1
  8. package/dist/commands/context.d.ts.map +1 -1
  9. package/dist/commands/context.js +2 -0
  10. package/dist/commands/context.js.map +1 -1
  11. package/dist/commands/inventory.d.ts.map +1 -1
  12. package/dist/commands/inventory.js +34 -11
  13. package/dist/commands/inventory.js.map +1 -1
  14. package/dist/commands/manifest.d.ts.map +1 -1
  15. package/dist/commands/manifest.js +2 -0
  16. package/dist/commands/manifest.js.map +1 -1
  17. package/dist/commands/market.d.ts.map +1 -1
  18. package/dist/commands/market.js +40 -2
  19. package/dist/commands/market.js.map +1 -1
  20. package/dist/commands/price-index.d.ts +4 -2
  21. package/dist/commands/price-index.d.ts.map +1 -1
  22. package/dist/commands/price-index.js +148 -5
  23. package/dist/commands/price-index.js.map +1 -1
  24. package/dist/commands/reference-profile.d.ts +4 -0
  25. package/dist/commands/reference-profile.d.ts.map +1 -0
  26. package/dist/commands/reference-profile.js +200 -0
  27. package/dist/commands/reference-profile.js.map +1 -0
  28. package/dist/commands/roast.d.ts.map +1 -1
  29. package/dist/commands/roast.js +42 -1
  30. package/dist/commands/roast.js.map +1 -1
  31. package/dist/lib/catalog.d.ts +26 -18
  32. package/dist/lib/catalog.d.ts.map +1 -1
  33. package/dist/lib/catalog.js +38 -46
  34. package/dist/lib/catalog.js.map +1 -1
  35. package/dist/lib/cherry.d.ts +2 -16
  36. package/dist/lib/cherry.d.ts.map +1 -1
  37. package/dist/lib/cherry.js +19 -5
  38. package/dist/lib/cherry.js.map +1 -1
  39. package/dist/lib/interactive/watch.d.ts +2 -3
  40. package/dist/lib/interactive/watch.d.ts.map +1 -1
  41. package/dist/lib/interactive/watch.js +4 -26
  42. package/dist/lib/interactive/watch.js.map +1 -1
  43. package/dist/lib/inventory.d.ts +8 -1
  44. package/dist/lib/inventory.d.ts.map +1 -1
  45. package/dist/lib/inventory.js +19 -5
  46. package/dist/lib/inventory.js.map +1 -1
  47. package/dist/lib/manifest.d.ts +13 -0
  48. package/dist/lib/manifest.d.ts.map +1 -1
  49. package/dist/lib/manifest.js +498 -18
  50. package/dist/lib/manifest.js.map +1 -1
  51. package/dist/lib/market.d.ts.map +1 -1
  52. package/dist/lib/numeric-contracts.d.ts +8 -0
  53. package/dist/lib/numeric-contracts.d.ts.map +1 -1
  54. package/dist/lib/numeric-contracts.js +2 -0
  55. package/dist/lib/numeric-contracts.js.map +1 -1
  56. package/dist/lib/parchment.d.ts +10 -1
  57. package/dist/lib/parchment.d.ts.map +1 -1
  58. package/dist/lib/parchment.js +11 -1
  59. package/dist/lib/parchment.js.map +1 -1
  60. package/dist/lib/reference-profiles.d.ts +182 -0
  61. package/dist/lib/reference-profiles.d.ts.map +1 -0
  62. package/dist/lib/reference-profiles.js +236 -0
  63. package/dist/lib/reference-profiles.js.map +1 -0
  64. package/dist/lib/roast.d.ts +36 -2
  65. package/dist/lib/roast.d.ts.map +1 -1
  66. package/dist/lib/roast.js +23 -0
  67. package/dist/lib/roast.js.map +1 -1
  68. package/dist/program.d.ts.map +1 -1
  69. package/dist/program.js +23 -0
  70. package/dist/program.js.map +1 -1
  71. package/package.json +2 -2
  72. package/dist/lib/artisan/parser.d.ts +0 -19
  73. package/dist/lib/artisan/parser.d.ts.map +0 -1
  74. package/dist/lib/artisan/parser.js +0 -376
  75. package/dist/lib/artisan/parser.js.map +0 -1
  76. package/dist/lib/artisan/temperature.d.ts +0 -52
  77. package/dist/lib/artisan/temperature.d.ts.map +0 -1
  78. package/dist/lib/artisan/temperature.js +0 -101
  79. package/dist/lib/artisan/temperature.js.map +0 -1
  80. package/dist/lib/artisan/types.d.ts +0 -195
  81. package/dist/lib/artisan/types.d.ts.map +0 -1
  82. package/dist/lib/artisan/types.js +0 -35
  83. package/dist/lib/artisan/types.js.map +0 -1
  84. package/dist/lib/artisan/validator.d.ts +0 -14
  85. package/dist/lib/artisan/validator.d.ts.map +0 -1
  86. package/dist/lib/artisan/validator.js +0 -228
  87. package/dist/lib/artisan/validator.js.map +0 -1
@@ -0,0 +1,236 @@
1
+ import { randomUUID } from 'node:crypto';
2
+ import { readFile, writeFile } from 'node:fs/promises';
3
+ import { resolve } from 'node:path';
4
+ import { z } from 'zod';
5
+ import { PrvrsError } from './errors.js';
6
+ import { createParchmentClient, unwrapParchment } from './parchment.js';
7
+ import { normalizePathInput } from './path-input.js';
8
+ import { POSTGRES_INT4_MAX } from './strict-number.js';
9
+ export const REFERENCE_PROFILE_SOURCE_MAX_BYTES = 10_000_000;
10
+ /** Bounds and default published by Parchment for `POST /v1/profile-comparisons`. */
11
+ export const PROFILE_COMPARISON_TARGET_POINTS = {
12
+ minimum: 50,
13
+ maximum: 1000,
14
+ default: 400,
15
+ };
16
+ export const profileComparisonUnits = ['F', 'C'];
17
+ const referenceProfileUuidSchema = z.string().uuid();
18
+ const idempotencyKeySchema = z.string().trim().min(1).max(255);
19
+ const temperatureAdjustmentSchema = z
20
+ .object({
21
+ kind: z.enum(['bean_temperature', 'environmental_temperature']),
22
+ startMilliseconds: z.number().finite().nonnegative(),
23
+ endMilliseconds: z.number().finite().positive(),
24
+ delta: z
25
+ .number()
26
+ .finite()
27
+ .min(-20)
28
+ .max(20)
29
+ .refine((value) => value !== 0),
30
+ })
31
+ .strict()
32
+ .refine((adjustment) => adjustment.endMilliseconds > adjustment.startMilliseconds, {
33
+ path: ['endMilliseconds'],
34
+ message: 'must be later than startMilliseconds',
35
+ });
36
+ const generationRequestSchema = z
37
+ .object({
38
+ title: z.string().trim().min(1).max(200),
39
+ notes: z.string().max(4000).optional(),
40
+ userGoal: z.string().trim().min(1).max(600).optional(),
41
+ modelRecommendation: z.string().trim().min(1).max(800).optional(),
42
+ userEdits: z.string().trim().min(1).max(800).optional(),
43
+ changes: z
44
+ .object({
45
+ temperatureAdjustments: z.array(temperatureAdjustmentSchema).min(1).max(12),
46
+ })
47
+ .strict(),
48
+ })
49
+ .strict();
50
+ const importRequestSchema = z
51
+ .object({
52
+ title: z.string().trim().min(1).max(200).optional(),
53
+ notes: z.string().max(4000).optional(),
54
+ fileName: z.string().min(1).max(255),
55
+ fileContent: z.string().min(1).max(REFERENCE_PROFILE_SOURCE_MAX_BYTES),
56
+ fileSize: z.number().int().positive().max(REFERENCE_PROFILE_SOURCE_MAX_BYTES),
57
+ })
58
+ .strict();
59
+ /** Validate a canonical UUID before making an owner-scoped API call. */
60
+ export function parseReferenceProfileId(value, label) {
61
+ const parsed = referenceProfileUuidSchema.safeParse(value);
62
+ if (!parsed.success) {
63
+ throw new PrvrsError('INVALID_ARGUMENT', `Invalid ${label}: expected a UUID.`);
64
+ }
65
+ return parsed.data;
66
+ }
67
+ /** Use one stable non-secret key per immutable write, matching Parchment's header contract. */
68
+ export function resolveReferenceProfileIdempotencyKey(value) {
69
+ return value === undefined ? randomUUID() : idempotencyKeySchema.parse(value);
70
+ }
71
+ /** Validate the bounded temperature-edit request locally; Parchment remains authoritative. */
72
+ export function parseReferenceProfileGenerationRequest(value) {
73
+ return generationRequestSchema.parse(value);
74
+ }
75
+ export function parseReferenceProfileImportRequest(value) {
76
+ return importRequestSchema.parse(value);
77
+ }
78
+ /** Write a returned plan without replacing a local file unless explicitly requested. */
79
+ export async function writeGeneratedReferenceFile(fileContent, destination, overwrite = false) {
80
+ const filePath = normalizePathInput(destination);
81
+ if (!filePath) {
82
+ throw new PrvrsError('INVALID_ARGUMENT', 'The export destination path cannot be blank.');
83
+ }
84
+ const outputPath = resolve(filePath);
85
+ try {
86
+ await writeFile(outputPath, fileContent, {
87
+ encoding: 'utf8',
88
+ flag: overwrite ? 'w' : 'wx',
89
+ });
90
+ }
91
+ catch (error) {
92
+ if (error && typeof error === 'object' && 'code' in error && error.code === 'EEXIST') {
93
+ throw new PrvrsError('INVALID_ARGUMENT', `The destination "${outputPath}" already exists. Pass --force to overwrite it.`);
94
+ }
95
+ throw error;
96
+ }
97
+ return outputPath;
98
+ }
99
+ /** Read the JSON edit set used by preview and save without interpreting profile data. */
100
+ export async function readReferenceProfileGenerationRequest(inputPath) {
101
+ const filePath = normalizePathInput(inputPath);
102
+ if (!filePath) {
103
+ throw new PrvrsError('INVALID_ARGUMENT', 'The request file path cannot be blank.');
104
+ }
105
+ const raw = await readFile(filePath, 'utf8');
106
+ let parsed;
107
+ try {
108
+ parsed = JSON.parse(raw);
109
+ }
110
+ catch {
111
+ throw new PrvrsError('INVALID_ARGUMENT', `The request file "${filePath}" must contain valid JSON.`);
112
+ }
113
+ return parseReferenceProfileGenerationRequest(parsed);
114
+ }
115
+ export async function listReferenceProfiles(includeArchived = false) {
116
+ const client = await createParchmentClient('member');
117
+ return unwrapParchment(await client.referenceProfiles.list(includeArchived), 'reference-profile list');
118
+ }
119
+ export async function getReferenceProfile(id) {
120
+ const profileId = parseReferenceProfileId(id, 'profile id');
121
+ const client = await createParchmentClient('member');
122
+ return unwrapParchment(await client.referenceProfiles.get(profileId), 'reference-profile get');
123
+ }
124
+ export async function getReferenceProfileChart(id, revisionId) {
125
+ const profileId = parseReferenceProfileId(id, 'profile id');
126
+ const parentRevisionId = parseReferenceProfileId(revisionId, 'revision id');
127
+ const client = await createParchmentClient('member');
128
+ return unwrapParchment(await client.referenceProfiles.chart(profileId, parentRevisionId), 'reference-profile chart');
129
+ }
130
+ export async function importReferenceProfile(body, idempotencyKey) {
131
+ const key = resolveReferenceProfileIdempotencyKey(idempotencyKey);
132
+ const client = await createParchmentClient('member');
133
+ return unwrapParchment(await client.referenceProfiles.import(body, key), 'reference-profile import');
134
+ }
135
+ export async function previewReferenceProfile(id, revisionId, body) {
136
+ const profileId = parseReferenceProfileId(id, 'profile id');
137
+ const parentRevisionId = parseReferenceProfileId(revisionId, 'revision id');
138
+ const request = parseReferenceProfileGenerationRequest(body);
139
+ const client = await createParchmentClient('member');
140
+ return unwrapParchment(await client.referenceProfiles.preview(profileId, parentRevisionId, request), 'reference-profile preview');
141
+ }
142
+ export async function saveGeneratedReferenceProfile(id, revisionId, body, idempotencyKey) {
143
+ const profileId = parseReferenceProfileId(id, 'profile id');
144
+ const parentRevisionId = parseReferenceProfileId(revisionId, 'revision id');
145
+ const request = parseReferenceProfileGenerationRequest(body);
146
+ const key = resolveReferenceProfileIdempotencyKey(idempotencyKey);
147
+ const client = await createParchmentClient('member');
148
+ return unwrapParchment(await client.referenceProfiles.generate(profileId, parentRevisionId, request, key), 'reference-profile save');
149
+ }
150
+ export async function exportGeneratedReferenceProfile(id, revisionId) {
151
+ const profileId = parseReferenceProfileId(id, 'profile id');
152
+ const generatedRevisionId = parseReferenceProfileId(revisionId, 'revision id');
153
+ const client = await createParchmentClient('member');
154
+ return unwrapParchment(await client.referenceProfiles.exportGenerated(profileId, generatedRevisionId), 'reference-profile export');
155
+ }
156
+ const ROAST_SELECTOR_PATTERN = /^roast:([1-9]\d{0,9})(?:@(.+))?$/;
157
+ /** Parse `revision:<uuid>`, `profile:<uuid>`, `roast:<id>`, or `roast:<id>@<revision>`. */
158
+ export function parseProfileComparisonSelector(value, label) {
159
+ const trimmed = value.trim();
160
+ const usage = `Invalid ${label} selector: "${value}". Use revision:<reference-revision-uuid>, profile:<reference-profile-uuid>, roast:<roast-id>, or roast:<roast-id>@<chart-revision>.`;
161
+ if (trimmed.startsWith('revision:')) {
162
+ const parsed = referenceProfileUuidSchema.safeParse(trimmed.slice('revision:'.length));
163
+ if (!parsed.success)
164
+ throw new PrvrsError('INVALID_ARGUMENT', usage);
165
+ return { kind: 'revision', revisionId: parsed.data };
166
+ }
167
+ if (trimmed.startsWith('profile:')) {
168
+ const parsed = referenceProfileUuidSchema.safeParse(trimmed.slice('profile:'.length));
169
+ if (!parsed.success)
170
+ throw new PrvrsError('INVALID_ARGUMENT', usage);
171
+ return { kind: 'profile', profileId: parsed.data };
172
+ }
173
+ const roast = ROAST_SELECTOR_PATTERN.exec(trimmed);
174
+ if (roast) {
175
+ const roastId = Number(roast[1]);
176
+ if (!Number.isSafeInteger(roastId) || roastId > POSTGRES_INT4_MAX) {
177
+ throw new PrvrsError('INVALID_ARGUMENT', usage);
178
+ }
179
+ const roastRevision = roast[2]?.trim();
180
+ if (roast[2] !== undefined && !roastRevision) {
181
+ throw new PrvrsError('INVALID_ARGUMENT', usage);
182
+ }
183
+ return roastRevision ? { kind: 'roast', roastId, roastRevision } : { kind: 'roast', roastId };
184
+ }
185
+ throw new PrvrsError('INVALID_ARGUMENT', usage);
186
+ }
187
+ async function resolveProfileComparisonInput(client, selector) {
188
+ if (selector.kind === 'revision') {
189
+ return { type: 'reference_revision', revisionId: selector.revisionId };
190
+ }
191
+ if (selector.kind === 'profile') {
192
+ const profile = unwrapParchment(await client.referenceProfiles.get(selector.profileId), 'reference-profile compare');
193
+ return { type: 'reference_revision', revisionId: profile.data.currentRevisionId };
194
+ }
195
+ if (selector.roastRevision) {
196
+ return {
197
+ type: 'executed_roast',
198
+ roastId: selector.roastId,
199
+ roastRevision: selector.roastRevision,
200
+ };
201
+ }
202
+ const chart = unwrapParchment(await client.roasts.chartData(String(selector.roastId)), `Roast ${selector.roastId} chart data`);
203
+ const roastRevision = chart.data.metadata.revision;
204
+ if (!roastRevision) {
205
+ throw new PrvrsError('INVALID_ARGUMENT', `Roast ${selector.roastId} does not have an immutable chart revision and cannot be compared yet.`);
206
+ }
207
+ return { type: 'executed_roast', roastId: selector.roastId, roastRevision };
208
+ }
209
+ /**
210
+ * Compare two immutable revisions with Parchment's charge-aligned measured deltas.
211
+ * The canonical comparison envelope is returned unchanged.
212
+ */
213
+ export async function compareProfiles(input) {
214
+ const targetPoints = input.targetPoints ?? PROFILE_COMPARISON_TARGET_POINTS.default;
215
+ if (!Number.isInteger(targetPoints) ||
216
+ targetPoints < PROFILE_COMPARISON_TARGET_POINTS.minimum ||
217
+ targetPoints > PROFILE_COMPARISON_TARGET_POINTS.maximum) {
218
+ throw new PrvrsError('INVALID_ARGUMENT', `Invalid target points: ${targetPoints}. Must be an integer between ${PROFILE_COMPARISON_TARGET_POINTS.minimum} and ${PROFILE_COMPARISON_TARGET_POINTS.maximum}.`);
219
+ }
220
+ if (!profileComparisonUnits.includes(input.targetUnit)) {
221
+ throw new PrvrsError('INVALID_ARGUMENT', `Invalid unit: "${input.targetUnit}". Must be one of: ${profileComparisonUnits.join(', ')}.`);
222
+ }
223
+ const client = await createParchmentClient('member');
224
+ const [left, right] = await Promise.all([
225
+ resolveProfileComparisonInput(client, input.left),
226
+ resolveProfileComparisonInput(client, input.right),
227
+ ]);
228
+ return unwrapParchment(await client.referenceProfiles.compare({
229
+ left,
230
+ right,
231
+ alignment: 'charge',
232
+ targetUnit: input.targetUnit,
233
+ targetPoints,
234
+ }), 'reference-profile compare');
235
+ }
236
+ //# sourceMappingURL=reference-profiles.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reference-profiles.js","sourceRoot":"","sources":["../../src/lib/reference-profiles.ts"],"names":[],"mappings":"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"}
@@ -1,12 +1,12 @@
1
1
  import { z } from 'zod';
2
2
  import type { components } from '@purveyors/sdk';
3
- import type { MilestoneData, ProcessedRoastData } from './artisan/types.js';
4
3
  export type RoastListProfile = components['schemas']['RoastListResource'];
5
4
  export type RoastDetailProfile = components['schemas']['RoastDetailResource'];
6
5
  /** Backward-compatible detail-shaped alias for existing CLI consumers. */
7
6
  export type RoastProfile = RoastDetailProfile;
8
7
  export type TemperatureEntry = components['schemas']['RoastTemperature'];
9
8
  export type RoastEventEntry = components['schemas']['RoastEvent'];
9
+ export type RoastChartDataResponse = components['schemas']['RoastChartDataResponse'];
10
10
  export declare const listRoastsSchema: z.ZodObject<{
11
11
  coffee_id: z.ZodOptional<z.ZodNumber>;
12
12
  roast_id: z.ZodOptional<z.ZodNumber>;
@@ -26,6 +26,16 @@ export declare const getRoastSchema: z.ZodObject<{
26
26
  includeEvents: z.ZodOptional<z.ZodBoolean>;
27
27
  }, z.core.$strip>;
28
28
  export type GetRoastInput = z.input<typeof getRoastSchema>;
29
+ /** Bounds published by Parchment for `/v1/roasts/{id}/chart-data?target_points=`. */
30
+ export declare const ROAST_CHART_TARGET_POINTS: {
31
+ readonly minimum: 50;
32
+ readonly maximum: 1000;
33
+ };
34
+ export declare const getRoastChartDataSchema: z.ZodObject<{
35
+ id: z.ZodNumber;
36
+ targetPoints: z.ZodOptional<z.ZodNumber>;
37
+ }, z.core.$strip>;
38
+ export type GetRoastChartDataInput = z.input<typeof getRoastChartDataSchema>;
29
39
  export declare const createRoastSchema: z.ZodObject<{
30
40
  coffeeId: z.ZodNumber;
31
41
  batchName: z.ZodOptional<z.ZodString>;
@@ -33,6 +43,8 @@ export declare const createRoastSchema: z.ZodObject<{
33
43
  ozOut: z.ZodOptional<z.ZodNumber>;
34
44
  roastDate: z.ZodOptional<z.ZodString>;
35
45
  notes: z.ZodOptional<z.ZodString>;
46
+ targets: z.ZodOptional<z.ZodString>;
47
+ roasterType: z.ZodOptional<z.ZodString>;
36
48
  }, z.core.$strip>;
37
49
  export type CreateRoastInput = z.input<typeof createRoastSchema>;
38
50
  export declare const deleteRoastSchema: z.ZodObject<{
@@ -51,6 +63,12 @@ export declare function getRoast(id: number, opts?: {
51
63
  includeTemps?: boolean;
52
64
  includeEvents?: boolean;
53
65
  }, tokenOverride?: string): Promise<RoastDetailProfile>;
66
+ /**
67
+ * Fetch Parchment's sampled chart model for one owned roast. The canonical
68
+ * envelope is returned unchanged: series, events, and metadata (including the
69
+ * immutable `metadata.revision` used by profile comparisons).
70
+ */
71
+ export declare function getRoastChartData(input: GetRoastChartDataInput, tokenOverride?: string): Promise<RoastChartDataResponse>;
54
72
  export declare function createRoast(input: CreateRoastInput, tokenOverride?: string): Promise<RoastDetailProfile>;
55
73
  export declare function deleteRoast(id: number, tokenOverride?: string): Promise<void>;
56
74
  export declare function updateRoast(id: number, input: UpdateRoastInput, tokenOverride?: string): Promise<RoastDetailProfile>;
@@ -74,11 +92,27 @@ export declare const importRoastSchema: z.ZodObject<{
74
92
  roastTargets: z.ZodOptional<z.ZodString>;
75
93
  }, z.core.$strip>;
76
94
  export type ImportRoastInput = z.input<typeof importRoastSchema>;
95
+ export interface MilestoneData {
96
+ charge?: number;
97
+ dry_end?: number;
98
+ fc_start?: number;
99
+ fc_end?: number;
100
+ sc_start?: number;
101
+ sc_end?: number;
102
+ drop?: number;
103
+ cool?: number;
104
+ }
105
+ export interface RoastPhaseSummary {
106
+ drying_percent: number;
107
+ maillard_percent: number;
108
+ development_percent: number;
109
+ total_time_seconds: number;
110
+ }
77
111
  export interface ImportRoastResult {
78
112
  success: boolean;
79
113
  message: string;
80
114
  milestones: MilestoneData;
81
- phases: ProcessedRoastData['phases'];
115
+ phases: RoastPhaseSummary;
82
116
  total_time: number;
83
117
  temperature_unit: 'F' | 'C';
84
118
  milestone_events: number;
@@ -1 +1 @@
1
- {"version":3,"file":"roast.d.ts","sourceRoot":"","sources":["../../src/lib/roast.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"roast.d.ts","sourceRoot":"","sources":["../../src/lib/roast.ts"],"names":[],"mappings":"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"}
package/dist/lib/roast.js CHANGED
@@ -53,6 +53,17 @@ export const getRoastSchema = z.object({
53
53
  includeTemps: z.boolean().optional(),
54
54
  includeEvents: z.boolean().optional(),
55
55
  });
56
+ /** Bounds published by Parchment for `/v1/roasts/{id}/chart-data?target_points=`. */
57
+ export const ROAST_CHART_TARGET_POINTS = { minimum: 50, maximum: 1000 };
58
+ export const getRoastChartDataSchema = z.object({
59
+ id: z.number().int().min(1).max(POSTGRES_INT4_MAX),
60
+ targetPoints: z
61
+ .number()
62
+ .int()
63
+ .min(ROAST_CHART_TARGET_POINTS.minimum)
64
+ .max(ROAST_CHART_TARGET_POINTS.maximum)
65
+ .optional(),
66
+ });
56
67
  export const createRoastSchema = z.object({
57
68
  coffeeId: z.number().int().min(1).max(POSTGRES_INT4_MAX),
58
69
  batchName: z.string().optional(),
@@ -60,6 +71,8 @@ export const createRoastSchema = z.object({
60
71
  ozOut: z.number().positive().optional(),
61
72
  roastDate: z.string().optional(),
62
73
  notes: z.string().optional(),
74
+ targets: z.string().optional(),
75
+ roasterType: z.string().optional(),
63
76
  });
64
77
  export const deleteRoastSchema = z.object({
65
78
  id: z.number().int().min(1).max(POSTGRES_INT4_MAX),
@@ -87,6 +100,16 @@ export async function getRoast(id, opts = {}, tokenOverride) {
87
100
  const envelope = unwrapParchment(await client.roasts.get(String(id), opts), `Roast ${id}`);
88
101
  return envelope.data;
89
102
  }
103
+ /**
104
+ * Fetch Parchment's sampled chart model for one owned roast. The canonical
105
+ * envelope is returned unchanged: series, events, and metadata (including the
106
+ * immutable `metadata.revision` used by profile comparisons).
107
+ */
108
+ export async function getRoastChartData(input, tokenOverride) {
109
+ const parsed = getRoastChartDataSchema.parse(input);
110
+ const client = await createParchmentClient('member', tokenOverride);
111
+ return unwrapParchment(await client.roasts.chartData(String(parsed.id), parsed.targetPoints === undefined ? undefined : { target_points: parsed.targetPoints }), `Roast ${parsed.id} chart data`);
112
+ }
90
113
  export async function createRoast(input, tokenOverride) {
91
114
  const parsed = createRoastSchema.parse(input);
92
115
  const client = await createParchmentClient('member', tokenOverride);
@@ -1 +1 @@
1
- {"version":3,"file":"roast.js","sourceRoot":"","sources":["../../src/lib/roast.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"roast.js","sourceRoot":"","sources":["../../src/lib/roast.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"program.d.ts","sourceRoot":"","sources":["../src/program.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAuB,MAAM,WAAW,CAAC;AAyCzD,wBAAgB,aAAa,IAAI,MAAM,CAatC;AAED,wBAAgB,aAAa,CAAC,OAAO,SAAkB,GAAG,OAAO,CAiHhE"}
1
+ {"version":3,"file":"program.d.ts","sourceRoot":"","sources":["../src/program.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAuB,MAAM,WAAW,CAAC;AA0CzD,wBAAgB,aAAa,IAAI,MAAM,CAatC;AAED,wBAAgB,aAAa,CAAC,OAAO,SAAkB,GAAG,OAAO,CAuIhE"}
package/dist/program.js CHANGED
@@ -11,6 +11,7 @@ import { buildManifestCommand } from './commands/manifest.js';
11
11
  import { buildMarketCommand } from './commands/market.js';
12
12
  import { buildPriceIndexCommand } from './commands/price-index.js';
13
13
  import { buildProcurementCommand } from './commands/procurement.js';
14
+ import { buildReferenceProfileCommand } from './commands/reference-profile.js';
14
15
  import { buildRoastCommand } from './commands/roast.js';
15
16
  import { buildSalesCommand } from './commands/sales.js';
16
17
  import { buildTastingCommand } from './commands/tasting.js';
@@ -57,12 +58,15 @@ export function createProgram(version = getCliVersion()) {
57
58
  Authentication:
58
59
  auth login Log in to purveyors.io (--headless for agents)
59
60
  auth status Show current login status and role
61
+ auth whoami Show canonical identity, plan, scopes, and capabilities
60
62
  auth logout Clear stored credentials
61
63
 
62
64
  Catalog (viewer role required, member role required for structured process filters):
63
65
  catalog search Search the coffee catalog with filters
64
66
  catalog get Get details for a specific coffee by ID
65
67
  catalog stats Aggregate statistics for the catalog
68
+ catalog facets Counted facet values for filter discovery
69
+ catalog rank Rank catalog candidates by a deterministic objective
66
70
  catalog rank-premium Rank premium catalog candidates by Purveyor Score
67
71
  catalog supplier-rank Rank suppliers by average Purveyor Score
68
72
  catalog similar Fetch canonical candidates and similar recommendations by catalog ID
@@ -75,6 +79,7 @@ Personal Data (member role required):
75
79
  inventory delete Delete an inventory item
76
80
  roast list List your roast profiles
77
81
  roast get Get a single roast profile
82
+ roast chart Get sampled chart data and the chart revision for a roast
78
83
  roast create Create a new roast profile
79
84
  roast update Update a roast profile
80
85
  roast delete Delete a roast profile
@@ -91,11 +96,26 @@ Market intelligence (canonical API; entitled slices require Parchment Intelligen
91
96
  market signals Actionable value signals (public summary via --summary)
92
97
  market stats Price movement-significance stats (public retail summary)
93
98
  market metadata Metadata-trend index (public process/retail/month slice)
99
+ market overview Aggregate market overview (any signed-in session or API key)
100
+ market evidence Named lots and supplier evidence (Intelligence access)
94
101
  price-index Parchment Price Index aggregate snapshots
102
+ price-index comparisons Available 30-day matched comparisons with significance
103
+ price-index comparison Matched comparison for one origin between two dates
104
+ price-index history Chart history (public up to 90 days)
95
105
  procurement list List your saved sourcing briefs
96
106
  procurement get Get a saved sourcing brief by id
97
107
  procurement matches Page through catalog matches for a brief
98
108
 
109
+ Studio reference profiles (member credential plus Studio access):
110
+ reference-profile list List your saved reference profiles
111
+ reference-profile get Get a profile and its current revision
112
+ reference-profile chart Get a typed chart for a revision
113
+ reference-profile compare Compare two roast or reference revisions
114
+ reference-profile import Upload an Artisan file as a reference profile
115
+ reference-profile preview Preview bounded temperature adjustments
116
+ reference-profile save Save an immutable generated plan
117
+ reference-profile export Download a saved plan as an unsigned .alog
118
+
99
119
  Local and reference commands (no pre-existing credentials required):
100
120
  config list Show all config values
101
121
  config get Get a config value
@@ -119,6 +139,8 @@ Examples:
119
139
  $ purvey catalog similar 1182 --threshold 0.85 --stocked-only --json | jq '.data.groups'
120
140
  $ purvey inventory list --stocked --pretty
121
141
  $ purvey roast import my-roast.alog --coffee-id 7
142
+ $ purvey reference-profile list --pretty
143
+ $ purvey reference-profile preview 5ea1af6f-234c-43a9-9bf8-5678dd24f854 8d2c41e0-7b9a-4f3e-a6d1-2c9e5f07b3a4 --request changes.json --pretty
122
144
  $ purvey roast watch ~/artisan/ --auto-match
123
145
  $ purvey tasting rate 42 --aroma 4 --body 3 --acidity 5 --sweetness 4 --aftertaste 4
124
146
  $ purvey --help
@@ -145,6 +167,7 @@ Module import: @purveyors/cli/manifest
145
167
  program.addCommand(buildMarketCommand());
146
168
  program.addCommand(buildPriceIndexCommand());
147
169
  program.addCommand(buildProcurementCommand());
170
+ program.addCommand(buildReferenceProfileCommand());
148
171
  program.addCommand(buildRoastCommand());
149
172
  program.addCommand(buildSalesCommand());
150
173
  program.addCommand(buildTastingCommand());
@@ -1 +1 @@
1
- {"version":3,"file":"program.js","sourceRoot":"","sources":["../src/program.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"program.js","sourceRoot":"","sources":["../src/program.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@purveyors/cli",
3
- "version": "0.33.2",
3
+ "version": "0.35.0",
4
4
  "description": "The official CLI for purveyors.io — coffee intelligence from your terminal",
5
5
  "type": "module",
6
6
  "bin": {
@@ -57,7 +57,7 @@
57
57
  },
58
58
  "dependencies": {
59
59
  "@clack/prompts": "^1.1.0",
60
- "@purveyors/sdk": "^0.35.0",
60
+ "@purveyors/sdk": "^0.47.0",
61
61
  "chalk": "^5.4.1",
62
62
  "commander": "^13.1.0",
63
63
  "ora": "^8.2.0",
@@ -1,19 +0,0 @@
1
- /**
2
- * Parser for Artisan .alog files which use Python literal syntax
3
- * Converts Python literals to JSON format for processing
4
- */
5
- export declare function parseAlogFile(alogContent: string): unknown;
6
- /**
7
- * Validate that a file is likely an Artisan .alog file
8
- */
9
- export declare function isValidAlogFile(content: string): boolean;
10
- /**
11
- * Clean up common .alog file formatting issues
12
- */
13
- export declare function preprocessAlogContent(content: string): string;
14
- /**
15
- * Main entry point for .alog file processing (formerly processAlogFile).
16
- * Preprocesses, validates, and parses Artisan .alog files.
17
- */
18
- export declare function processAlogFile(fileContent: string): unknown;
19
- //# sourceMappingURL=parser.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../../src/lib/artisan/parser.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,wBAAgB,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAoE1D;AA+OD;;GAEG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAgCxD;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAW7D;AAwED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CA4B5D"}