@purveyors/cli 0.35.1 → 0.36.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (49) hide show
  1. package/README.md +51 -12
  2. package/dist/commands/auth.d.ts.map +1 -1
  3. package/dist/commands/auth.js +6 -6
  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 +84 -89
  7. package/dist/commands/catalog.js.map +1 -1
  8. package/dist/commands/context.js +2 -2
  9. package/dist/commands/context.js.map +1 -1
  10. package/dist/commands/inventory.js +32 -32
  11. package/dist/commands/inventory.js.map +1 -1
  12. package/dist/commands/manifest.js +3 -3
  13. package/dist/commands/manifest.js.map +1 -1
  14. package/dist/commands/market.d.ts.map +1 -1
  15. package/dist/commands/market.js +24 -24
  16. package/dist/commands/market.js.map +1 -1
  17. package/dist/commands/price-index.d.ts.map +1 -1
  18. package/dist/commands/price-index.js +17 -17
  19. package/dist/commands/price-index.js.map +1 -1
  20. package/dist/commands/procurement.d.ts.map +1 -1
  21. package/dist/commands/procurement.js +2 -2
  22. package/dist/commands/procurement.js.map +1 -1
  23. package/dist/commands/reference-profile.d.ts.map +1 -1
  24. package/dist/commands/reference-profile.js +15 -15
  25. package/dist/commands/reference-profile.js.map +1 -1
  26. package/dist/commands/roast.d.ts.map +1 -1
  27. package/dist/commands/roast.js +50 -50
  28. package/dist/commands/roast.js.map +1 -1
  29. package/dist/commands/sales.js +21 -21
  30. package/dist/commands/sales.js.map +1 -1
  31. package/dist/commands/skill.d.ts +3 -0
  32. package/dist/commands/skill.d.ts.map +1 -0
  33. package/dist/commands/skill.js +145 -0
  34. package/dist/commands/skill.js.map +1 -0
  35. package/dist/commands/tasting.d.ts.map +1 -1
  36. package/dist/commands/tasting.js +16 -16
  37. package/dist/commands/tasting.js.map +1 -1
  38. package/dist/lib/agent-skill.d.ts +110 -0
  39. package/dist/lib/agent-skill.d.ts.map +1 -0
  40. package/dist/lib/agent-skill.js +611 -0
  41. package/dist/lib/agent-skill.js.map +1 -0
  42. package/dist/lib/manifest.d.ts +2 -0
  43. package/dist/lib/manifest.d.ts.map +1 -1
  44. package/dist/lib/manifest.js +992 -351
  45. package/dist/lib/manifest.js.map +1 -1
  46. package/dist/program.d.ts.map +1 -1
  47. package/dist/program.js +68 -12
  48. package/dist/program.js.map +1 -1
  49. package/package.json +1 -1
@@ -0,0 +1,145 @@
1
+ import { Command } from 'commander';
2
+ import { AGENT_SKILL_FILE, AGENT_SKILL_FILES, AGENT_SKILL_NAME, installAgentSkill, renderAgentSkillFile, renderAgentsMdBlock, } from '../lib/agent-skill.js';
3
+ import { PrvrsError, withErrorHandling } from '../lib/errors.js';
4
+ import { info, outputData, shouldUseInteractiveOutput, success, warn } from '../lib/output.js';
5
+ const ACTION_LABELS = {
6
+ create: 'Created',
7
+ update: 'Updated',
8
+ unchanged: 'Already current:',
9
+ append: 'Appended the purvey block to',
10
+ overwrite: 'Replaced',
11
+ };
12
+ function sized(content) {
13
+ return { bytes: Buffer.byteLength(content, 'utf8'), content };
14
+ }
15
+ function parsePrintFile(value, fileGiven, agentsMd, structured) {
16
+ if (agentsMd) {
17
+ if (fileGiven) {
18
+ throw new PrvrsError('INVALID_ARGUMENT', '--agents-md prints the AGENTS.md block and cannot be combined with --file.');
19
+ }
20
+ return 'agents-md';
21
+ }
22
+ if (value === 'all') {
23
+ if (!structured) {
24
+ throw new PrvrsError('INVALID_ARGUMENT', '--file all prints several files, so it needs --json or --pretty. Use --file SKILL.md or --file workflows.md for Markdown.');
25
+ }
26
+ return [...AGENT_SKILL_FILES];
27
+ }
28
+ if (!AGENT_SKILL_FILES.includes(value)) {
29
+ throw new PrvrsError('INVALID_ARGUMENT', `Unknown --file "${value}". Use one of: ${AGENT_SKILL_FILES.join(', ')}, all.`);
30
+ }
31
+ return [value];
32
+ }
33
+ export function buildSkillCommand(version) {
34
+ const skill = new Command('skill').description('Print or install agent instructions generated from the CLI manifest');
35
+ skill
36
+ .command('print')
37
+ .description('Write the generated SKILL.md, workflows.md, or the AGENTS.md block to stdout')
38
+ .option('--file <file>', '', AGENT_SKILL_FILE)
39
+ .option('--agents-md')
40
+ .addHelpText('after', `
41
+ The skill is a folder: SKILL.md, which agents load first, and workflows.md, which it points to for
42
+ step-by-step workflows. Prints SKILL.md as Markdown by default. --json or --pretty wraps one file as
43
+ { name, file, cliVersion, bytes, content }, or every file with --file all as
44
+ { name, cliVersion, files: [{ file, bytes, content }] }.
45
+ The output is rendered from \`purvey manifest\`; no credentials are needed.
46
+
47
+ Examples:
48
+ purvey skill print
49
+ purvey skill print --file workflows.md
50
+ purvey skill print --file all --json
51
+ purvey skill print --agents-md
52
+ purvey skill print > SKILL.md
53
+ `)
54
+ .action(withErrorHandling(async (opts, cmd) => {
55
+ const globalOpts = cmd.optsWithGlobals();
56
+ if (globalOpts.csv) {
57
+ throw new PrvrsError('INVALID_ARGUMENT', 'The skill print command does not support --csv. Use Markdown (default), --json, or --pretty.');
58
+ }
59
+ const structured = Boolean(globalOpts.json || globalOpts.pretty);
60
+ const files = parsePrintFile(opts.file, cmd.getOptionValueSource('file') !== 'default', Boolean(opts.agentsMd), structured);
61
+ if (files === 'agents-md') {
62
+ const content = renderAgentsMdBlock(version);
63
+ if (structured) {
64
+ outputData({ name: AGENT_SKILL_NAME, file: 'AGENTS.md', cliVersion: version, ...sized(content) }, { pretty: globalOpts.pretty });
65
+ }
66
+ else {
67
+ process.stdout.write(content);
68
+ }
69
+ return;
70
+ }
71
+ const rendered = files.map((file) => ({
72
+ file,
73
+ ...sized(renderAgentSkillFile(file, version)),
74
+ }));
75
+ if (!structured) {
76
+ process.stdout.write(rendered[0].content);
77
+ }
78
+ else if (opts.file === 'all') {
79
+ outputData({ name: AGENT_SKILL_NAME, cliVersion: version, files: rendered }, { pretty: globalOpts.pretty });
80
+ }
81
+ else {
82
+ const [{ file, ...rest }] = rendered;
83
+ outputData({ name: AGENT_SKILL_NAME, file, cliVersion: version, ...rest }, { pretty: globalOpts.pretty });
84
+ }
85
+ }));
86
+ skill
87
+ .command('install')
88
+ .description('Install the generated instructions for Claude Code, Agent Skills clients such as Codex and Cursor, or a repository AGENTS.md')
89
+ .option('--target <target>')
90
+ .option('--scope <scope>')
91
+ .option('--force')
92
+ .option('--dry-run')
93
+ .option('--link-claude-md')
94
+ .addHelpText('after', `
95
+ Targets:
96
+ claude ~/.claude/skills/purveyors/{SKILL.md,workflows.md} (Claude Code)
97
+ agents ~/.agents/skills/purveyors/{SKILL.md,workflows.md} (Codex, Cursor, other Agent Skills clients)
98
+ agents-md ./AGENTS.md, as one marked block (repository-level instructions)
99
+
100
+ claude and agents write a skill folder: SKILL.md, which agents load first, and workflows.md, the
101
+ step-by-step workflows it points to. Each file is checked and reported on its own under "files".
102
+ Claude Code loads skills only from .claude/skills, so use --target claude there; it does not read .agents/.
103
+ --scope project writes .claude/skills/... or .agents/skills/... under the current directory instead.
104
+
105
+ Claude Code reads AGENTS.md only when no CLAUDE.md, .claude/CLAUDE.md, or CLAUDE.local.md exists in the
106
+ current directory or above it. agents-md reports this as "claudeCode" in its JSON output. --link-claude-md
107
+ adds an @AGENTS.md import to ./CLAUDE.md (or ./.claude/CLAUDE.md), creating ./CLAUDE.md if needed, and never
108
+ edits CLAUDE.local.md or a parent directory's CLAUDE.md. See https://code.claude.com/docs/en/memory#agents-md
109
+ Re-running is safe: identical files are left alone, unedited earlier output is updated, and a missing
110
+ workflows.md is created. If any file has local edits, nothing is written and the command exits 6 unless
111
+ --force is passed. No credentials are needed.
112
+
113
+ Examples:
114
+ purvey skill install --target claude
115
+ purvey skill install --target agents --dry-run
116
+ purvey skill install --target claude --scope project
117
+ purvey skill install --target agents-md
118
+ purvey skill install --target agents-md --link-claude-md
119
+ `)
120
+ .action(withErrorHandling(async (opts, cmd) => {
121
+ const globalOpts = cmd.optsWithGlobals();
122
+ const result = await installAgentSkill({ ...opts, version });
123
+ if (shouldUseInteractiveOutput(globalOpts)) {
124
+ for (const { action, path } of result.files ?? [result]) {
125
+ if (result.dryRun) {
126
+ info(`Dry run, nothing written. Would ${action}: ${path}`);
127
+ }
128
+ else {
129
+ success(`${ACTION_LABELS[action]} ${path}`);
130
+ }
131
+ }
132
+ if (result.claudeCode?.visible) {
133
+ info(result.claudeCode.reason);
134
+ }
135
+ }
136
+ const { claudeCode } = result;
137
+ if (claudeCode && !claudeCode.visible) {
138
+ // Always on stderr, so agents running non-interactively see it too.
139
+ warn(`Claude Code will not load this block. ${claudeCode.reason}`);
140
+ }
141
+ outputData(result, globalOpts);
142
+ }));
143
+ return skill;
144
+ }
145
+ //# sourceMappingURL=skill.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skill.js","sourceRoot":"","sources":["../../src/commands/skill.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"tasting.d.ts","sourceRoot":"","sources":["../../src/commands/tasting.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC,OAAO,EAGL,mBAAmB,EACnB,iBAAiB,EAClB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAOlF,YAAY,EAAE,aAAa,EAAE,WAAW,EAAE,YAAY,EAAE,CAAC;AACzD,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,CAAC;AAmClD;;;;GAIG;AACH,wBAAgB,mBAAmB,IAAI,OAAO,CA0N7C"}
1
+ {"version":3,"file":"tasting.d.ts","sourceRoot":"","sources":["../../src/commands/tasting.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC,OAAO,EAGL,mBAAmB,EACnB,iBAAiB,EAClB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAOlF,YAAY,EAAE,aAAa,EAAE,WAAW,EAAE,YAAY,EAAE,CAAC;AACzD,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,CAAC;AAmClD;;;;GAIG;AACH,wBAAgB,mBAAmB,IAAI,OAAO,CAsN7C"}
@@ -43,8 +43,8 @@ export function buildTastingCommand() {
43
43
  // ── tasting get <bean-id> ─────────────────────────────────────────────────
44
44
  tasting
45
45
  .command('get <bean-id>')
46
- .description('Retrieve tasting notes for a bean (by coffee_catalog ID). Combines supplier and user notes.')
47
- .option('--filter <type>', 'Which notes to show: user, supplier, or both (default: both)', 'both')
46
+ .description('Retrieve tasting notes for a bean (by catalog ID). Combines supplier and user notes.')
47
+ .option('--filter <type>', '', 'both')
48
48
  .addHelpText('after', `
49
49
  Examples:
50
50
  purvey tasting get 128 --pretty
@@ -53,10 +53,10 @@ Examples:
53
53
  purvey tasting get 42 | jq '.user.aroma'
54
54
 
55
55
  Notes:
56
- <bean-id> is coffee_catalog.catalog_id (NOT inventory id).
56
+ <bean-id> is a catalog ID (NOT an inventory ID).
57
57
  --filter both returns: {supplier: {flavor_notes, ...}, user: {aroma, body, ...}}
58
58
  --filter supplier: only the supplier's flavor notes from the catalog.
59
- --filter user: only your cupping scores from green_coffee_inv.
59
+ --filter user: only your own cupping scores from your inventory.
60
60
  Returns null fields if no notes exist for that filter.
61
61
  Requires authentication (member role).
62
62
  `)
@@ -77,16 +77,16 @@ Notes:
77
77
  // ── tasting rate <bean-id> ────────────────────────────────────────────────
78
78
  tasting
79
79
  .command('rate')
80
- .description('Rate a bean from your inventory using cupping scores (updates green_coffee_inv)')
81
- .argument('[bean-id]', 'Inventory item ID (green_coffee_inv.id), or use --form')
82
- .option('--aroma <1-5>', '[REQUIRED in flag mode] Aroma score, integer 1-5')
83
- .option('--body <1-5>', '[REQUIRED in flag mode] Body score, integer 1-5')
84
- .option('--acidity <1-5>', '[REQUIRED in flag mode] Acidity score, integer 1-5')
85
- .option('--sweetness <1-5>', '[REQUIRED in flag mode] Sweetness score, integer 1-5')
86
- .option('--aftertaste <1-5>', '[REQUIRED in flag mode] Aftertaste score, integer 1-5')
87
- .option('--brew-method <method>', 'Brew method used (e.g. pour_over, french_press, espresso)')
88
- .option('--notes <text>', 'Additional tasting notes')
89
- .option('--form', 'Interactive form mode (browse inventory + guided scoring)')
80
+ .description('Rate a bean from your inventory using cupping scores')
81
+ .argument('[bean-id]', 'Inventory ID of the coffee, or use --form')
82
+ .option('--aroma <1-5>')
83
+ .option('--body <1-5>')
84
+ .option('--acidity <1-5>')
85
+ .option('--sweetness <1-5>')
86
+ .option('--aftertaste <1-5>')
87
+ .option('--brew-method <method>')
88
+ .option('--notes <text>')
89
+ .option('--form')
90
90
  .addHelpText('after', `
91
91
  Examples:
92
92
  purvey tasting rate 7 --aroma 4 --body 3 --acidity 5 --sweetness 4 --aftertaste 4
@@ -95,10 +95,10 @@ Examples:
95
95
  purvey tasting rate --form # interactive wizard
96
96
 
97
97
  Required (flag mode): <bean-id> + all five score flags (--aroma, --body, --acidity, --sweetness, --aftertaste)
98
- <bean-id> is green_coffee_inv.id (your inventory ID, NOT catalog_id).
98
+ <bean-id> is your inventory ID, NOT a catalog ID.
99
99
  Use 'purvey inventory list' to find your bean IDs.
100
100
  Scores: integer 1 (low) to 5 (excellent).
101
- Scores are stored on your green_coffee_inv row (overwrite on re-rate).
101
+ Scores are saved on your inventory item; rating again replaces them.
102
102
  Requires authentication (member role).
103
103
  `)
104
104
  .action(withErrorHandling(async (beanId, opts, cmd) => {
@@ -1 +1 @@
1
- {"version":3,"file":"tasting.js","sourceRoot":"","sources":["../../src/commands/tasting.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,CAAC,MAAM,gBAAgB,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC7D,OAAO,EAAE,iBAAiB,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC5E,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EACL,eAAe,EACf,UAAU,EACV,mBAAmB,EACnB,iBAAiB,GAClB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AACpE,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAKhF,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,CAAC;AAElD,iFAAiF;AAEjF,MAAM,mBAAmB,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,YAAY,CAAU,CAAC;AAE7F,mDAAmD;AACnD,KAAK,UAAU,kBAAkB,CAAC,SAAiB;IACjD,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,IAAI,CAAC;QACvB,OAAO,EAAE,GAAG,SAAS,QAAQ;QAC7B,WAAW,EAAE,GAAG;QAChB,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE;YACd,MAAM,CAAC,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YAC9C,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;gBACxB,OAAO,qCAAqC,CAAC;YAC/C,CAAC;QACH,CAAC;KACF,CAAC,CAAC;IACH,WAAW,CAAC,GAAG,CAAC,CAAC;IACjB,OAAO,kBAAkB,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAC/C,CAAC;AAED,SAAS,cAAc,CAAC,KAAa,EAAE,KAAa;IAClD,MAAM,MAAM,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC;IACxC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QAC7B,MAAM,IAAI,UAAU,CAClB,kBAAkB,EAClB,WAAW,KAAK,MAAM,KAAK,iDAAiD,CAC7E,CAAC;IACJ,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,iFAAiF;AAEjF;;;;GAIG;AACH,MAAM,UAAU,mBAAmB;IACjC,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,SAAS,CAAC,CAAC,WAAW,CAChD,iDAAiD,CAClD,CAAC;IAEF,6EAA6E;IAC7E,OAAO;SACJ,OAAO,CAAC,eAAe,CAAC;SACxB,WAAW,CACV,6FAA6F,CAC9F;SACA,MAAM,CACL,iBAAiB,EACjB,8DAA8D,EAC9D,MAAM,CACP;SACA,WAAW,CACV,OAAO,EACP;;;;;;;;;;;;;;CAcL,CACI;SACA,MAAM,CACL,iBAAiB,CAAC,KAAK,EAAE,MAAc,EAAE,IAA6B,EAAE,GAAY,EAAE,EAAE;QACtF,MAAM,UAAU,GAAG,GAAG,CAAC,eAAe,EAAmB,CAAC;QAC1D,MAAM,MAAM,GAAG,IAAI,CAAC,MAAiC,CAAC;QAEtD,IAAI,CAAC,CAAC,MAAM,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YACnD,MAAM,IAAI,UAAU,CAClB,gBAAgB,EAChB,2BAA2B,MAAM,kCAAkC,CACpE,CAAC;QACJ,CAAC;QAED,MAAM,SAAS,GAAG,cAAc,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;QAEpD,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;QAExD,IAAI,MAAM,CAAC,QAAQ,KAAK,IAAI,IAAI,MAAM,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;YACrD,IAAI,CAAC,sCAAsC,SAAS,aAAa,MAAM,IAAI,CAAC,CAAC;YAC7E,OAAO;QACT,CAAC;QAED,UAAU,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IACjC,CAAC,CAAC,CACH,CAAC;IAEJ,6EAA6E;IAC7E,OAAO;SACJ,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,iFAAiF,CAAC;SAC9F,QAAQ,CAAC,WAAW,EAAE,wDAAwD,CAAC;SAC/E,MAAM,CAAC,eAAe,EAAE,kDAAkD,CAAC;SAC3E,MAAM,CAAC,cAAc,EAAE,iDAAiD,CAAC;SACzE,MAAM,CAAC,iBAAiB,EAAE,oDAAoD,CAAC;SAC/E,MAAM,CAAC,mBAAmB,EAAE,sDAAsD,CAAC;SACnF,MAAM,CAAC,oBAAoB,EAAE,uDAAuD,CAAC;SACrF,MAAM,CAAC,wBAAwB,EAAE,2DAA2D,CAAC;SAC7F,MAAM,CAAC,gBAAgB,EAAE,0BAA0B,CAAC;SACpD,MAAM,CAAC,QAAQ,EAAE,2DAA2D,CAAC;SAC7E,WAAW,CACV,OAAO,EACP;;;;;;;;;;;;;CAaL,CACI;SACA,MAAM,CACL,iBAAiB,CACf,KAAK,EAAE,MAA0B,EAAE,IAA6B,EAAE,GAAY,EAAE,EAAE;QAChF,MAAM,UAAU,GAAG,GAAG,CAAC,eAAe,EAAmB,CAAC;QAE1D,oEAAoE;QACpE,+DAA+D;QAC/D,0DAA0D;QAC1D,MAAM,oBAAoB,GACxB,MAAM,KAAK,SAAS,IAAI,mBAAmB,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,SAAS,CAAC,CAAC;QACvF,MAAM,QAAQ,GACZ,IAAI,CAAC,IAAI,KAAK,IAAI;YAClB,CAAC,CAAC,oBAAoB,IAAI,CAAC,MAAM,cAAc,CAAC,WAAW,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC;QAC5E,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,EAAE,iBAAiB,EAAE,GAAG,MAAM,WAAW,CAAC,QAAQ,CAAC,CAAC;YAC1D,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;YAEvB,MAAM,EACJ,IAAI,EAAE,EAAE,OAAO,EAAE,aAAa,EAAE,GACjC,GAAG,MAAM,iBAAiB,CAAC,UAAU,EAAE,CAAC;YACzC,IAAI,CAAC,aAAa,EAAE,MAAM,EAAE,CAAC;gBAC3B,MAAM,IAAI,SAAS,CAAC,qDAAqD,CAAC,CAAC;YAC7E,CAAC;YACD,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;YAElD,MAAM,KAAK,GAAG,MAAM,kBAAkB,CAAC,OAAO,CAAC,CAAC;YAChD,MAAM,IAAI,GAAG,MAAM,kBAAkB,CAAC,MAAM,CAAC,CAAC;YAC9C,MAAM,OAAO,GAAG,MAAM,kBAAkB,CAAC,SAAS,CAAC,CAAC;YACpD,MAAM,SAAS,GAAG,MAAM,kBAAkB,CAAC,WAAW,CAAC,CAAC;YACxD,MAAM,UAAU,GAAG,MAAM,kBAAkB,CAAC,YAAY,CAAC,CAAC;YAE1D,MAAM,QAAQ,GAAG,MAAM,CAAC,CAAC,IAAI,CAAC;gBAC5B,OAAO,EAAE,OAAO;gBAChB,WAAW,EAAE,UAAU;aACxB,CAAC,CAAC;YACH,WAAW,CAAC,QAAQ,CAAC,CAAC;YAEtB,MAAM,SAAS,GAAG,MAAM,CAAC,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,cAAc,EAAE,CAAC,CAAC;YAC/D,WAAW,CAAC,SAAS,CAAC,CAAC;YAEvB,IAAI,CAAC,SAAS,EAAE,CAAC;gBACf,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;gBACrB,OAAO;YACT,CAAC;YAED,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAC;YAEzC,MAAM,IAAI,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC;YACzB,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;YAC/B,MAAM,EACJ,IAAI,EAAE,EAAE,OAAO,EAAE,YAAY,EAAE,GAChC,GAAG,MAAM,iBAAiB,CAAC,UAAU,EAAE,CAAC;YACzC,IAAI,CAAC,YAAY,EAAE,MAAM,EAAE,CAAC;gBAC1B,MAAM,IAAI,SAAS,CAAC,8DAA8D,CAAC,CAAC;YACtF,CAAC;YACD,MAAM,IAAI,GAAG,MAAM,UAAU,CAC3B,IAAI,CAAC,EAAE,EACP;gBACE,KAAK;gBACL,IAAI;gBACJ,OAAO;gBACP,SAAS;gBACT,UAAU;gBACV,KAAK,EAAE,QAAQ,KAAK,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS;aAC9C,EACD,YAAY,CAAC,MAAM,CACpB,CAAC;YACF,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAElB,CAAC,CAAC,KAAK,CAAC,qBAAqB,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC;YAC5C,UAAU,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;YAC7B,OAAO;QACT,CAAC;QAED,oEAAoE;QACpE,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,UAAU,CAClB,kBAAkB,EAClB,4DAA4D,CAC7D,CAAC;QACJ,CAAC;QAED,MAAM,WAAW,GAAG,cAAc,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;QAEtD,6CAA6C;QAC7C,KAAK,MAAM,IAAI,IAAI,mBAAmB,EAAE,CAAC;YACvC,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,SAAS,EAAE,CAAC;gBAC7B,MAAM,IAAI,UAAU,CAClB,kBAAkB,EAClB,aAAa,IAAI,oCAAoC,CACtD,CAAC;YACJ,CAAC;QACH,CAAC;QAED,wDAAwD;QACxD,MAAM,KAAK,GAAG,iBAAiB,CAAC,IAAI,CAAC,KAAe,EAAE,OAAO,CAAC,CAAC;QAC/D,MAAM,IAAI,GAAG,iBAAiB,CAAC,IAAI,CAAC,IAAc,EAAE,MAAM,CAAC,CAAC;QAC5D,MAAM,OAAO,GAAG,iBAAiB,CAAC,IAAI,CAAC,OAAiB,EAAE,SAAS,CAAC,CAAC;QACrE,MAAM,SAAS,GAAG,iBAAiB,CAAC,IAAI,CAAC,SAAmB,EAAE,WAAW,CAAC,CAAC;QAC3E,MAAM,UAAU,GAAG,iBAAiB,CAAC,IAAI,CAAC,UAAoB,EAAE,YAAY,CAAC,CAAC;QAE9E,MAAM,EAAE,iBAAiB,EAAE,GAAG,MAAM,WAAW,CAAC,QAAQ,CAAC,CAAC;QAC1D,MAAM,EACJ,IAAI,EAAE,EAAE,OAAO,EAAE,YAAY,EAAE,GAChC,GAAG,MAAM,iBAAiB,CAAC,UAAU,EAAE,CAAC;QACzC,IAAI,CAAC,YAAY,EAAE,MAAM,EAAE,CAAC;YAC1B,MAAM,IAAI,SAAS,CAAC,qDAAqD,CAAC,CAAC;QAC7E,CAAC;QACD,MAAM,IAAI,GAAG,MAAM,UAAU,CAC3B,WAAW,EACX;YACE,KAAK;YACL,IAAI;YACJ,OAAO;YACP,SAAS;YACT,UAAU;YACV,UAAU,EAAE,IAAI,CAAC,UAAgC;YACjD,KAAK,EAAE,IAAI,CAAC,KAA2B;SACxC,EACD,YAAY,CAAC,MAAM,CACpB,CAAC;QAEF,OAAO,CAAC,0CAA0C,WAAW,GAAG,CAAC,CAAC;QAClE,UAAU,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;IAC/B,CAAC,CACF,CACF,CAAC;IAEJ,OAAO,OAAO,CAAC;AACjB,CAAC"}
1
+ {"version":3,"file":"tasting.js","sourceRoot":"","sources":["../../src/commands/tasting.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,110 @@
1
+ import { type CliManifest } from './manifest.js';
2
+ /**
3
+ * Agent instructions rendered from the CLI manifest. The manifest stays the
4
+ * single source of truth: commands, flags, auth, output, exit codes, ID types,
5
+ * and workflows all come from `getCliManifest()`, so the skill cannot drift
6
+ * from the contract it describes.
7
+ */
8
+ export declare const AGENT_SKILL_NAME = "purveyors";
9
+ export declare const AGENT_SKILL_FILE = "SKILL.md";
10
+ /**
11
+ * Supporting file in the same skill folder. Agent Skills clients load SKILL.md
12
+ * when the skill triggers and read other files only when SKILL.md points to
13
+ * them, so the step-by-step workflows, which grow with the manifest, live here.
14
+ * See https://code.claude.com/docs/en/skills#add-supporting-files and
15
+ * https://agentskills.io/specification#progressive-disclosure
16
+ */
17
+ export declare const AGENT_WORKFLOWS_FILE = "workflows.md";
18
+ /** Every file in the skill folder, SKILL.md first. */
19
+ export declare const AGENT_SKILL_FILES: readonly ["SKILL.md", "workflows.md"];
20
+ export type AgentSkillFile = (typeof AGENT_SKILL_FILES)[number];
21
+ /** Upper bound for the rendered SKILL.md, enforced by tests. */
22
+ export declare const AGENT_SKILL_MAX_BYTES: number;
23
+ /** Upper bound for the rendered workflows.md, enforced by tests. */
24
+ export declare const AGENT_WORKFLOWS_MAX_BYTES: number;
25
+ export declare const AGENT_SKILL_DESCRIPTION: string;
26
+ export declare const SKILL_TARGETS: readonly ["claude", "agents", "agents-md"];
27
+ export declare const SKILL_SCOPES: readonly ["user", "project"];
28
+ export type SkillTarget = (typeof SKILL_TARGETS)[number];
29
+ export type SkillScope = (typeof SKILL_SCOPES)[number];
30
+ export type SkillInstallAction = 'create' | 'update' | 'unchanged' | 'append' | 'overwrite';
31
+ export interface SkillInstallFileResult {
32
+ file: AgentSkillFile;
33
+ path: string;
34
+ action: SkillInstallAction;
35
+ written: boolean;
36
+ bytes: number;
37
+ }
38
+ export interface SkillInstallResult {
39
+ target: SkillTarget;
40
+ scope: SkillScope;
41
+ /** SKILL.md for claude and agents, AGENTS.md for agents-md. */
42
+ path: string;
43
+ /** For claude and agents, summarizes `files`: overwrite, then update, then create, then unchanged. */
44
+ action: SkillInstallAction;
45
+ /** True when any file was written. */
46
+ written: boolean;
47
+ dryRun: boolean;
48
+ cliVersion: string;
49
+ /** Total bytes across the installed content. */
50
+ bytes: number;
51
+ /** claude and agents only: each file in the skill folder, SKILL.md first. */
52
+ files?: SkillInstallFileResult[];
53
+ /** agents-md only: whether Claude Code will load the AGENTS.md block. */
54
+ claudeCode?: ClaudeCodeVisibility;
55
+ }
56
+ export type ClaudeMdLinkAction = 'create' | 'append' | 'unchanged' | 'not-needed';
57
+ /**
58
+ * Claude Code reads AGENTS.md only as a fallback: when a CLAUDE.md,
59
+ * .claude/CLAUDE.md, or CLAUDE.local.md sits in the project directory or any
60
+ * directory above it, it reads those instead, unless one imports AGENTS.md.
61
+ * See https://code.claude.com/docs/en/memory#agents-md
62
+ */
63
+ export interface ClaudeCodeVisibility {
64
+ visible: boolean;
65
+ /** How Claude Code loads the block: AGENTS.md directly, a CLAUDE.md import, or not at all. */
66
+ via: 'agents-md' | 'claude-md-import' | null;
67
+ reason: string;
68
+ /** CLAUDE.md files on the path that take precedence over AGENTS.md. */
69
+ claudeMdFiles: string[];
70
+ /** Present with --link-claude-md. */
71
+ link?: {
72
+ path: string | null;
73
+ action: ClaudeMdLinkAction;
74
+ written: boolean;
75
+ };
76
+ }
77
+ /** Render SKILL.md in the open Agent Skills format. */
78
+ export declare function renderAgentSkill(version: string, manifest?: CliManifest): string;
79
+ /** Render workflows.md, the supporting file SKILL.md points to for step-by-step workflows. */
80
+ export declare function renderAgentWorkflows(version: string, manifest?: CliManifest): string;
81
+ /** Render one file of the skill folder. */
82
+ export declare function renderAgentSkillFile(file: AgentSkillFile, version: string, manifest?: CliManifest): string;
83
+ /** Render the marked AGENTS.md block; markers let `install` refresh it in place. */
84
+ export declare function renderAgentsMdBlock(version: string, manifest?: CliManifest): string;
85
+ export declare function resolveSkillInstallPath(target: SkillTarget, scope: SkillScope, roots?: {
86
+ home?: string;
87
+ cwd?: string;
88
+ }): string;
89
+ export declare const CLAUDE_CODE_AGENTS_MD_DOCS = "https://code.claude.com/docs/en/memory#agents-md";
90
+ export interface SkillInstallOptions {
91
+ target?: string;
92
+ scope?: string;
93
+ force?: boolean;
94
+ dryRun?: boolean;
95
+ /** agents-md only: add an `@AGENTS.md` import so Claude Code loads the block past a CLAUDE.md. */
96
+ linkClaudeMd?: boolean;
97
+ version: string;
98
+ manifest?: CliManifest;
99
+ home?: string;
100
+ cwd?: string;
101
+ }
102
+ /**
103
+ * Install the generated instructions. Never touches credentials or the network.
104
+ * claude and agents write both files of the skill folder; agents-md writes one
105
+ * block. Identical content is left alone, unedited earlier output is updated,
106
+ * and anything else needs `force`. For agents-md, also reports whether Claude Code
107
+ * will load the block, and with `linkClaudeMd` makes sure it does.
108
+ */
109
+ export declare function installAgentSkill(options: SkillInstallOptions): Promise<SkillInstallResult>;
110
+ //# sourceMappingURL=agent-skill.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-skill.d.ts","sourceRoot":"","sources":["../../src/lib/agent-skill.ts"],"names":[],"mappings":"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"}