@lcvbeek/patina 0.2.0 → 0.4.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 (61) hide show
  1. package/README.md +211 -78
  2. package/dist/commands/apply.d.ts +5 -3
  3. package/dist/commands/apply.d.ts.map +1 -1
  4. package/dist/commands/apply.js +106 -71
  5. package/dist/commands/apply.js.map +1 -1
  6. package/dist/commands/capture.d.ts +2 -1
  7. package/dist/commands/capture.d.ts.map +1 -1
  8. package/dist/commands/capture.js +46 -32
  9. package/dist/commands/capture.js.map +1 -1
  10. package/dist/commands/ingest.d.ts.map +1 -1
  11. package/dist/commands/ingest.js +22 -9
  12. package/dist/commands/ingest.js.map +1 -1
  13. package/dist/commands/init.d.ts.map +1 -1
  14. package/dist/commands/init.js +33 -33
  15. package/dist/commands/init.js.map +1 -1
  16. package/dist/commands/layers.d.ts +5 -1
  17. package/dist/commands/layers.d.ts.map +1 -1
  18. package/dist/commands/layers.js +115 -76
  19. package/dist/commands/layers.js.map +1 -1
  20. package/dist/commands/onboard.d.ts +1 -1
  21. package/dist/commands/onboard.d.ts.map +1 -1
  22. package/dist/commands/onboard.js +90 -73
  23. package/dist/commands/onboard.js.map +1 -1
  24. package/dist/commands/reflect.d.ts +2 -0
  25. package/dist/commands/reflect.d.ts.map +1 -0
  26. package/dist/commands/reflect.js +95 -0
  27. package/dist/commands/reflect.js.map +1 -0
  28. package/dist/commands/run.d.ts +8 -6
  29. package/dist/commands/run.d.ts.map +1 -1
  30. package/dist/commands/run.js +170 -209
  31. package/dist/commands/run.js.map +1 -1
  32. package/dist/commands/status.d.ts.map +1 -1
  33. package/dist/commands/status.js +17 -25
  34. package/dist/commands/status.js.map +1 -1
  35. package/dist/index.js +50 -56
  36. package/dist/index.js.map +1 -1
  37. package/dist/lib/claude.d.ts.map +1 -1
  38. package/dist/lib/claude.js +35 -24
  39. package/dist/lib/claude.js.map +1 -1
  40. package/dist/lib/git.d.ts +2 -0
  41. package/dist/lib/git.d.ts.map +1 -0
  42. package/dist/lib/git.js +9 -0
  43. package/dist/lib/git.js.map +1 -0
  44. package/dist/lib/lint.js +14 -14
  45. package/dist/lib/metrics.d.ts +1 -1
  46. package/dist/lib/metrics.d.ts.map +1 -1
  47. package/dist/lib/metrics.js +9 -12
  48. package/dist/lib/metrics.js.map +1 -1
  49. package/dist/lib/parser.d.ts +7 -1
  50. package/dist/lib/parser.d.ts.map +1 -1
  51. package/dist/lib/parser.js +46 -37
  52. package/dist/lib/parser.js.map +1 -1
  53. package/dist/lib/questions.d.ts +14 -0
  54. package/dist/lib/questions.d.ts.map +1 -0
  55. package/dist/lib/questions.js +58 -0
  56. package/dist/lib/questions.js.map +1 -0
  57. package/dist/lib/storage.d.ts +85 -12
  58. package/dist/lib/storage.d.ts.map +1 -1
  59. package/dist/lib/storage.js +165 -57
  60. package/dist/lib/storage.js.map +1 -1
  61. package/package.json +6 -4
@@ -1,38 +1,56 @@
1
- import fs from 'fs';
2
- import path from 'path';
3
- import readline from 'readline';
4
- import { assertInitialised, readPendingDiff, LIVING_DOC_FILE, PENDING_DIFF_FILE, METRICS_FILE, SPOKE_FILES, CORE_MAX_LINES, CORE_MAX_CHARS, resolveTargetFile, ensureSpokeFiles, } from '../lib/storage.js';
5
- import { lintMarkdown, fixMarkdown } from '../lib/lint.js';
1
+ import fs from "fs";
2
+ import path from "path";
3
+ import readline from "readline";
4
+ import { assertInitialised, readPendingDiff, getDataDir, LIVING_DOC_FILE, SPOKE_FILES, CORE_MAX_LINES, CORE_MAX_CHARS, resolveTargetFile, ensureSpokeFiles, appendOpportunity, } from "../lib/storage.js";
5
+ import { lintMarkdown, fixMarkdown } from "../lib/lint.js";
6
6
  const isTTY = process.stdout.isTTY;
7
- function bold(s) { return isTTY ? `\x1b[1m${s}\x1b[0m` : s; }
8
- function dim(s) { return isTTY ? `\x1b[2m${s}\x1b[0m` : s; }
9
- function green(s) { return isTTY ? `\x1b[32m${s}\x1b[0m` : s; }
10
- function cyan(s) { return isTTY ? `\x1b[36m${s}\x1b[0m` : s; }
11
- function yellow(s) { return isTTY ? `\x1b[33m${s}\x1b[0m` : s; }
12
- function red(s) { return isTTY ? `\x1b[31m${s}\x1b[0m` : s; }
13
- function hr(len = 60) { return dim('─'.repeat(len)); }
7
+ function bold(s) {
8
+ return isTTY ? `\x1b[1m${s}\x1b[0m` : s;
9
+ }
10
+ function dim(s) {
11
+ return isTTY ? `\x1b[2m${s}\x1b[0m` : s;
12
+ }
13
+ function green(s) {
14
+ return isTTY ? `\x1b[32m${s}\x1b[0m` : s;
15
+ }
16
+ function cyan(s) {
17
+ return isTTY ? `\x1b[36m${s}\x1b[0m` : s;
18
+ }
19
+ function yellow(s) {
20
+ return isTTY ? `\x1b[33m${s}\x1b[0m` : s;
21
+ }
22
+ function red(s) {
23
+ return isTTY ? `\x1b[31m${s}\x1b[0m` : s;
24
+ }
25
+ function hr(len = 60) {
26
+ return dim("─".repeat(len));
27
+ }
14
28
  function confirm(question) {
15
- const rl = readline.createInterface({ input: process.stdin, output: process.stdout });
16
- return new Promise(resolve => {
17
- rl.question(question, answer => {
29
+ const rl = readline.createInterface({
30
+ input: process.stdin,
31
+ output: process.stdout,
32
+ });
33
+ return new Promise((resolve) => {
34
+ rl.question(question, (answer) => {
18
35
  rl.close();
19
- resolve(answer.trim().toLowerCase().startsWith('y'));
36
+ resolve(answer.trim().toLowerCase().startsWith("y"));
20
37
  });
21
38
  });
22
39
  }
23
40
  /**
24
- * Find the section header in patina.md and insert the diff text after it.
41
+ * Find the section header in PATINA.md and insert the diff text after it.
25
42
  * Falls back to appending at the end of the section if the header isn't found exactly.
26
43
  */
27
44
  export function applyDiffToDoc(content, section, diffText) {
28
- const lines = content.split('\n');
45
+ const lines = content.split("\n");
29
46
  // Try to find the matching section header (## 1. Working Agreements, etc.)
30
47
  // Match by number prefix or by full title (case-insensitive)
31
48
  const sectionLower = section.toLowerCase().trim();
32
49
  let sectionIdx = -1;
33
50
  for (let i = 0; i < lines.length; i++) {
34
51
  const line = lines[i];
35
- if (line.startsWith('## ') && line.toLowerCase().includes(sectionLower.replace(/^\d+\.\s*/, ''))) {
52
+ if (line.startsWith("## ") &&
53
+ line.toLowerCase().includes(sectionLower.replace(/^\d+\.\s*/, ""))) {
36
54
  sectionIdx = i;
37
55
  break;
38
56
  }
@@ -45,22 +63,22 @@ export function applyDiffToDoc(content, section, diffText) {
45
63
  }
46
64
  if (sectionIdx === -1) {
47
65
  // Section not found — append before the last --- or at end
48
- const lastHrIdx = lines.lastIndexOf('---');
66
+ const lastHrIdx = lines.lastIndexOf("---");
49
67
  const insertAt = lastHrIdx !== -1 ? lastHrIdx : lines.length;
50
68
  const newLines = [
51
69
  ...lines.slice(0, insertAt),
52
- '',
70
+ "",
53
71
  `<!-- Added by patina apply ${new Date().toISOString().slice(0, 10)} -->`,
54
- ...diffText.split('\n'),
55
- '',
72
+ ...diffText.split("\n"),
73
+ "",
56
74
  ...lines.slice(insertAt),
57
75
  ];
58
- return newLines.join('\n');
76
+ return newLines.join("\n");
59
77
  }
60
78
  // Find the end of this section (next ## heading, --- separator, or end of file)
61
79
  let sectionEnd = lines.length;
62
80
  for (let i = sectionIdx + 1; i < lines.length; i++) {
63
- if (lines[i].startsWith('## ') || lines[i].trim() === '---') {
81
+ if (lines[i].startsWith("## ") || lines[i].trim() === "---") {
64
82
  sectionEnd = i;
65
83
  break;
66
84
  }
@@ -68,23 +86,23 @@ export function applyDiffToDoc(content, section, diffText) {
68
86
  // Find the last non-empty, non-comment line in the section to insert after
69
87
  let insertAfter = sectionEnd - 1;
70
88
  for (let i = sectionEnd - 1; i > sectionIdx; i--) {
71
- if (lines[i].trim() !== '' && !lines[i].trim().startsWith('<!--')) {
89
+ if (lines[i].trim() !== "" && !lines[i].trim().startsWith("<!--")) {
72
90
  insertAfter = i;
73
91
  break;
74
92
  }
75
93
  }
76
94
  const newLines = [
77
95
  ...lines.slice(0, insertAfter + 1),
78
- ...diffText.split('\n'),
79
- '',
96
+ ...diffText.split("\n"),
97
+ "",
80
98
  ...lines.slice(insertAfter + 1),
81
99
  ];
82
- return newLines.join('\n');
100
+ return newLines.join("\n");
83
101
  }
84
102
  const CYCLE_HISTORY_CAP = 5;
85
103
  /**
86
104
  * Update the Retro Cycle History table.
87
- * Operates on the cycle-history spoke file content (not the core patina.md).
105
+ * Operates on the cycle-history spoke file content (not the core PATINA.md).
88
106
  * Keeps at most CYCLE_HISTORY_CAP rows — oldest rows are dropped when the cap
89
107
  * is exceeded. Full cycle detail is preserved in .patina/cycles/.
90
108
  */
@@ -92,7 +110,7 @@ export function updateCycleHistory(content, insight, changeDesc) {
92
110
  const today = new Date().toISOString().slice(0, 10);
93
111
  const cycleCount = (content.match(/^\| \d+/gm) || []).length + 1;
94
112
  const newRow = `| ${cycleCount} | ${today} | ${insight.slice(0, 60)}... | ${changeDesc.slice(0, 50)}... |`;
95
- const placeholder = '| — | — | — | — |';
113
+ const placeholder = "| — | — | — | — |";
96
114
  let updated = content;
97
115
  if (updated.includes(placeholder)) {
98
116
  updated = updated.replace(placeholder, newRow);
@@ -103,7 +121,7 @@ export function updateCycleHistory(content, insight, changeDesc) {
103
121
  const headerMatch = updated.match(tableHeaderPattern);
104
122
  if (!headerMatch) {
105
123
  // No table found — append one
106
- updated = updated.trimEnd() + '\n' + newRow + '\n';
124
+ updated = updated.trimEnd() + "\n" + newRow + "\n";
107
125
  }
108
126
  else {
109
127
  // Find the last table row and append after it
@@ -111,7 +129,7 @@ export function updateCycleHistory(content, insight, changeDesc) {
111
129
  const lastRowMatch = after.match(/(\| .+ \|\n?)(?!.*\| .+ \|)/s);
112
130
  if (lastRowMatch) {
113
131
  const insertPos = headerMatch.index + after.indexOf(lastRowMatch[0]) + lastRowMatch[0].length;
114
- updated = updated.slice(0, insertPos) + newRow + '\n' + updated.slice(insertPos);
132
+ updated = updated.slice(0, insertPos) + newRow + "\n" + updated.slice(insertPos);
115
133
  }
116
134
  }
117
135
  }
@@ -135,62 +153,70 @@ export function updateCycleHistory(content, insight, changeDesc) {
135
153
  * Update the cycle history spoke file on disk.
136
154
  */
137
155
  export function updateCycleHistoryFile(cwd, insight, changeDesc) {
138
- const spokeFile = path.join(cwd, SPOKE_FILES['cycle-history']);
139
- let content = '';
156
+ const spokeFile = path.join(cwd, SPOKE_FILES["cycle-history"]);
157
+ let content = "";
140
158
  if (fs.existsSync(spokeFile)) {
141
- content = fs.readFileSync(spokeFile, 'utf-8');
159
+ content = fs.readFileSync(spokeFile, "utf-8");
142
160
  }
143
161
  else {
144
162
  // Create with default template if missing
145
163
  ensureSpokeFiles(cwd);
146
- content = fs.readFileSync(spokeFile, 'utf-8');
164
+ content = fs.readFileSync(spokeFile, "utf-8");
147
165
  }
148
166
  const updated = updateCycleHistory(content, insight, changeDesc);
149
- fs.writeFileSync(spokeFile, updated, 'utf-8');
167
+ fs.writeFileSync(spokeFile, updated, "utf-8");
150
168
  }
151
- export async function applyCommand() {
169
+ export async function applyCommand(options = {}) {
152
170
  assertInitialised();
153
171
  const cwd = process.cwd();
154
172
  const pending = readPendingDiff(cwd);
155
173
  if (!pending) {
156
- console.log(yellow('No pending diff found.'));
157
- console.log(dim('Run `patina run` first, then `patina diff` to review.'));
174
+ console.log(yellow("No pending diff found."));
175
+ console.log(dim("Run `patina run` first to generate a retrospective."));
158
176
  return;
159
177
  }
160
- // Route diff to the correct file (core patina.md or a spoke file)
178
+ // Route diff to the correct file (core PATINA.md or a spoke file)
161
179
  const targetFilePath = resolveTargetFile(pending.section, cwd);
162
180
  const targetRelPath = path.relative(cwd, targetFilePath);
181
+ const targetExists = fs.existsSync(targetFilePath);
163
182
  const isCore = targetFilePath === path.join(cwd, LIVING_DOC_FILE);
164
- console.log(`\n${bold('patina apply')} — applying instruction change`);
183
+ console.log(`\n${bold("patina buff")} — proposed instruction change`);
165
184
  console.log(hr());
166
- console.log(` Target : ${cyan(targetRelPath)}`);
167
- console.log(` Section : ${cyan(pending.section)}`);
168
- console.log(` Adding :\n`);
169
- pending.diff.split('\n').forEach(line => {
170
- console.log(` ${green('+ ' + line)}`);
185
+ console.log(` Generated : ${dim(new Date(pending.timestamp).toLocaleString())}`);
186
+ console.log(` Target : ${cyan(targetExists ? targetRelPath : targetRelPath + " (will be created)")}`);
187
+ console.log(` Section : ${cyan(pending.section)}`);
188
+ console.log();
189
+ console.log(bold("Rationale"));
190
+ console.log(hr());
191
+ console.log(` ${pending.rationale}`);
192
+ console.log();
193
+ console.log(bold("Proposed addition"));
194
+ console.log(hr());
195
+ pending.diff.split("\n").forEach((line) => {
196
+ console.log(` ${green("+ " + line)}`);
171
197
  });
172
198
  console.log();
173
- const ok = await confirm(`Apply this change to ${targetRelPath}? [y/N] `);
199
+ const ok = options.yes || (await confirm(`Apply this change to ${targetRelPath}? [y/N] `));
174
200
  if (!ok) {
175
- console.log(dim('Aborted. Pending diff unchanged.'));
201
+ console.log(dim("Aborted. Pending diff unchanged."));
176
202
  return;
177
203
  }
178
204
  // Ensure spoke files exist before applying
179
205
  ensureSpokeFiles(cwd);
180
206
  // Read or create target file
181
207
  let content = fs.existsSync(targetFilePath)
182
- ? fs.readFileSync(targetFilePath, 'utf-8')
208
+ ? fs.readFileSync(targetFilePath, "utf-8")
183
209
  : isCore
184
- ? '# AI Operating Constitution\n\n## 1. Working Agreements\n\n'
185
- : '';
210
+ ? "# AI Operating Constitution\n\n## 1. Working Agreements\n\n"
211
+ : "";
186
212
  // Apply the diff and auto-fix common lint issues
187
213
  content = applyDiffToDoc(content, pending.section, pending.diff);
188
214
  content = fixMarkdown(content);
189
- fs.writeFileSync(targetFilePath, content, 'utf-8');
215
+ fs.writeFileSync(targetFilePath, content, "utf-8");
190
216
  // Warn about any remaining lint issues
191
217
  const warnings = lintMarkdown(content);
192
218
  if (warnings.length > 0) {
193
- console.log(yellow('!') + ` ${warnings.length} markdown lint warning(s) in ${targetRelPath}:`);
219
+ console.log(yellow("!") + ` ${warnings.length} markdown lint warning(s) in ${targetRelPath}:`);
194
220
  for (const w of warnings.slice(0, 5)) {
195
221
  console.log(dim(` line ${w.line}: ${w.rule} — ${w.message}`));
196
222
  }
@@ -200,47 +226,56 @@ export async function applyCommand() {
200
226
  }
201
227
  // Update cycle history in the spoke file
202
228
  updateCycleHistoryFile(cwd, pending.rationale, pending.diff.slice(0, 50));
203
- // Update the "last updated" timestamp in core patina.md
229
+ // Append opportunity to backlog
230
+ if (pending.opportunity) {
231
+ appendOpportunity(cwd, pending.opportunity);
232
+ }
233
+ // Update the "last updated" timestamp in core PATINA.md
204
234
  const livingDocPath = path.join(cwd, LIVING_DOC_FILE);
205
235
  if (fs.existsSync(livingDocPath)) {
206
- let coreContent = fs.readFileSync(livingDocPath, 'utf-8');
236
+ let coreContent = fs.readFileSync(livingDocPath, "utf-8");
207
237
  const today = new Date().toISOString().slice(0, 10);
208
238
  coreContent = coreContent.replace(/> Last updated: .+/, `> Last updated: ${today}`);
209
239
  // Also match the old format
210
240
  coreContent = coreContent.replace(/> Maintained by `patina`\. Last updated: .+/, `> Last updated: ${today}`);
211
- fs.writeFileSync(livingDocPath, coreContent, 'utf-8');
212
- // Enforce hard cap on core patina.md
213
- const coreLines = coreContent.split('\n');
241
+ fs.writeFileSync(livingDocPath, coreContent, "utf-8");
242
+ // Enforce hard cap on core PATINA.md
243
+ const coreLines = coreContent.split("\n");
214
244
  const coreChars = coreContent.length;
215
245
  if (coreLines.length > CORE_MAX_LINES || coreChars > CORE_MAX_CHARS) {
216
- console.log(yellow('!') +
217
- ` Core patina.md exceeds limits (${coreLines.length} lines / ${coreChars} chars).` +
246
+ console.log(yellow("!") +
247
+ ` Core PATINA.md exceeds limits (${coreLines.length} lines / ${coreChars} chars).` +
218
248
  ` Cap: ${CORE_MAX_LINES} lines / ${CORE_MAX_CHARS} chars.` +
219
249
  ` Consider pruning stale entries or moving detail to spoke files.`);
220
250
  }
221
251
  }
222
252
  // Clear pending diff
223
- const pendingDiffPath = path.join(cwd, PENDING_DIFF_FILE);
253
+ const pendingDiffPath = path.join(getDataDir(cwd), "pending-diff.json");
224
254
  if (fs.existsSync(pendingDiffPath))
225
255
  fs.unlinkSync(pendingDiffPath);
226
256
  // Update metrics.json with cycle count
227
- const metricsPath = path.join(cwd, METRICS_FILE);
257
+ const metricsPath = path.join(getDataDir(cwd), "metrics.json");
228
258
  if (fs.existsSync(metricsPath)) {
229
259
  try {
230
- const metrics = JSON.parse(fs.readFileSync(metricsPath, 'utf-8'));
260
+ const metrics = JSON.parse(fs.readFileSync(metricsPath, "utf-8"));
231
261
  metrics.cycles_completed = (metrics.cycles_completed || 0) + 1;
232
262
  metrics.last_apply = new Date().toISOString();
233
- fs.writeFileSync(metricsPath, JSON.stringify(metrics, null, 2) + '\n', 'utf-8');
263
+ fs.writeFileSync(metricsPath, JSON.stringify(metrics, null, 2) + "\n", "utf-8");
264
+ }
265
+ catch {
266
+ /* non-fatal */
234
267
  }
235
- catch { /* non-fatal */ }
236
268
  }
237
269
  console.log();
238
- console.log(green('') + ` Applied to ${bold(targetRelPath)}`);
239
- console.log(green('') + ' Cycle history updated');
240
- console.log(green('✓') + ' Pending diff cleared');
270
+ console.log(green("") + ` Applied to ${bold(targetRelPath)}`);
271
+ console.log(green("") + " Cycle history updated");
272
+ if (pending.opportunity) {
273
+ console.log(green("✓") + " Opportunity added to .patina/opportunity-backlog.md");
274
+ }
275
+ console.log(green("✓") + " Pending diff cleared");
241
276
  console.log();
242
277
  console.log(dim(`Next: review ${targetRelPath} to confirm the change looks right.`));
243
- console.log(dim('Run `patina ingest` at the start of your next cycle to continue tracking.'));
278
+ console.log(dim("Run `patina capture` anytime during your next cycle to record notable moments."));
244
279
  console.log();
245
280
  }
246
281
  //# sourceMappingURL=apply.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"apply.js","sourceRoot":"","sources":["../../src/commands/apply.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"apply.js","sourceRoot":"","sources":["../../src/commands/apply.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,6 @@
1
- export declare function getGitAuthor(): string;
1
+ import { type CaptureTag } from "../lib/storage.js";
2
2
  export declare function generateId(now: Date): string;
3
+ export declare function resolveTag(input: string): CaptureTag | undefined;
3
4
  export interface CaptureOptions {
4
5
  tag?: string;
5
6
  }
@@ -1 +1 @@
1
- {"version":3,"file":"capture.d.ts","sourceRoot":"","sources":["../../src/commands/capture.ts"],"names":[],"mappings":"AAwBA,wBAAgB,YAAY,IAAI,MAAM,CAMrC;AAED,wBAAgB,UAAU,CAAC,GAAG,EAAE,IAAI,GAAG,MAAM,CAI5C;AAMD,MAAM,WAAW,cAAc;IAC7B,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,wBAAsB,cAAc,CAClC,IAAI,EAAE,MAAM,GAAG,SAAS,EACxB,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,IAAI,CAAC,CA6Ef"}
1
+ {"version":3,"file":"capture.d.ts","sourceRoot":"","sources":["../../src/commands/capture.ts"],"names":[],"mappings":"AACA,OAAO,EAKL,KAAK,UAAU,EAChB,MAAM,mBAAmB,CAAC;AAyB3B,wBAAgB,UAAU,CAAC,GAAG,EAAE,IAAI,GAAG,MAAM,CAI5C;AAUD,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS,CAMhE;AAMD,MAAM,WAAW,cAAc;IAC7B,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,wBAAsB,cAAc,CAClC,IAAI,EAAE,MAAM,GAAG,SAAS,EACxB,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,IAAI,CAAC,CA6Ef"}
@@ -1,40 +1,54 @@
1
- import { spawnSync } from 'child_process';
2
- import readline from 'readline';
3
- import { assertInitialised, writeCapture, CAPTURE_TAGS, } from '../lib/storage.js';
1
+ import readline from "readline";
2
+ import { assertInitialised, writeCapture, CAPTURE_TAGS, } from "../lib/storage.js";
3
+ import { getGitAuthor } from "../lib/git.js";
4
4
  // ---------------------------------------------------------------------------
5
5
  // ANSI helpers
6
6
  // ---------------------------------------------------------------------------
7
7
  const isTTY = process.stdout.isTTY;
8
- function bold(s) { return isTTY ? `\x1b[1m${s}\x1b[0m` : s; }
9
- function dim(s) { return isTTY ? `\x1b[2m${s}\x1b[0m` : s; }
10
- function green(s) { return isTTY ? `\x1b[32m${s}\x1b[0m` : s; }
11
- function cyan(s) { return isTTY ? `\x1b[36m${s}\x1b[0m` : s; }
8
+ function bold(s) {
9
+ return isTTY ? `\x1b[1m${s}\x1b[0m` : s;
10
+ }
11
+ function dim(s) {
12
+ return isTTY ? `\x1b[2m${s}\x1b[0m` : s;
13
+ }
14
+ function green(s) {
15
+ return isTTY ? `\x1b[32m${s}\x1b[0m` : s;
16
+ }
17
+ function cyan(s) {
18
+ return isTTY ? `\x1b[36m${s}\x1b[0m` : s;
19
+ }
12
20
  // ---------------------------------------------------------------------------
13
21
  // Helpers
14
22
  // ---------------------------------------------------------------------------
15
- export function getGitAuthor() {
16
- const result = spawnSync('git', ['config', 'user.name'], { encoding: 'utf8' });
17
- if (result.status === 0 && result.stdout.trim()) {
18
- return result.stdout.trim();
19
- }
20
- return process.env.USER ?? 'unknown';
21
- }
22
23
  export function generateId(now) {
23
- const ts = now.toISOString().replace(/[:.]/g, '-');
24
+ const ts = now.toISOString().replace(/[:.]/g, "-");
24
25
  const rand = Math.random().toString(36).slice(2, 6);
25
26
  return `${ts}-${rand}`;
26
27
  }
28
+ const TAG_SHORTHANDS = {
29
+ n: "near-miss",
30
+ w: "went-well",
31
+ f: "frustration",
32
+ p: "pattern",
33
+ o: "other",
34
+ };
35
+ export function resolveTag(input) {
36
+ const lower = input.toLowerCase();
37
+ return (TAG_SHORTHANDS[lower] ??
38
+ (CAPTURE_TAGS.includes(lower) ? lower : undefined));
39
+ }
27
40
  export async function captureCommand(text, options) {
28
41
  assertInitialised();
29
42
  let captureText = text?.trim();
30
43
  let captureTag;
31
44
  // Validate tag option if provided
32
45
  if (options.tag) {
33
- if (!CAPTURE_TAGS.includes(options.tag)) {
34
- console.error(`Invalid tag "${options.tag}". Valid tags: ${CAPTURE_TAGS.join(', ')}`);
46
+ const resolved = resolveTag(options.tag);
47
+ if (!resolved) {
48
+ console.error(`Invalid tag "${options.tag}". Valid tags: ${CAPTURE_TAGS.join(", ")} (or shorthands: n, w, f, p, o)`);
35
49
  process.exit(1);
36
50
  }
37
- captureTag = options.tag;
51
+ captureTag = resolved;
38
52
  }
39
53
  // Interactive mode when no inline text given
40
54
  if (!captureText) {
@@ -44,22 +58,22 @@ export async function captureCommand(text, options) {
44
58
  terminal: isTTY,
45
59
  });
46
60
  captureText = await new Promise((resolve) => {
47
- rl.question(`${bold('What happened?')}\n> `, (answer) => {
61
+ rl.question(`${bold("What happened?")}\n> `, (answer) => {
48
62
  resolve(answer.trim());
49
63
  });
50
64
  });
51
65
  if (!captureText) {
52
66
  rl.close();
53
- console.log(dim('Nothing captured.'));
67
+ console.log(dim("Nothing captured."));
54
68
  return;
55
69
  }
56
70
  if (!captureTag) {
57
71
  const tagAnswer = await new Promise((resolve) => {
58
- rl.question(`\n${bold('Tag')} ${dim(`(${CAPTURE_TAGS.join(' / ')} — Enter to skip)`)}\n> `, (answer) => resolve(answer.trim().toLowerCase()));
72
+ rl.question(`\n${bold("Tag")} ${dim(`(${CAPTURE_TAGS.join(" / ")} — or n/w/f/p/o — Enter to skip)`)}\n> `, (answer) => resolve(answer.trim().toLowerCase()));
59
73
  });
60
- if (CAPTURE_TAGS.includes(tagAnswer)) {
61
- captureTag = tagAnswer;
62
- }
74
+ const resolved = resolveTag(tagAnswer);
75
+ if (resolved)
76
+ captureTag = resolved;
63
77
  }
64
78
  rl.close();
65
79
  }
@@ -72,17 +86,17 @@ export async function captureCommand(text, options) {
72
86
  timestamp: now.toISOString(),
73
87
  };
74
88
  writeCapture(capture);
75
- const tagLabel = captureTag ? ` ${cyan(`[${captureTag}]`)}` : '';
76
- const when = now.toLocaleDateString('en-US', {
77
- month: 'short',
78
- day: 'numeric',
79
- hour: '2-digit',
80
- minute: '2-digit',
89
+ const tagLabel = captureTag ? ` ${cyan(`[${captureTag}]`)}` : "";
90
+ const when = now.toLocaleDateString("en-US", {
91
+ month: "short",
92
+ day: "numeric",
93
+ hour: "2-digit",
94
+ minute: "2-digit",
81
95
  });
82
96
  console.log();
83
- console.log(`${green('')} Captured${tagLabel}: ${captureText}`);
97
+ console.log(`${green("")} Captured${tagLabel}: ${captureText}`);
84
98
  console.log(dim(` by ${capture.author} · ${when}`));
85
- console.log(dim(' Feeds into your next `patina run`.'));
99
+ console.log(dim(" Feeds into your next `patina run`."));
86
100
  console.log();
87
101
  }
88
102
  //# sourceMappingURL=capture.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"capture.js","sourceRoot":"","sources":["../../src/commands/capture.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"capture.js","sourceRoot":"","sources":["../../src/commands/capture.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"ingest.d.ts","sourceRoot":"","sources":["../../src/commands/ingest.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,aAAa;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,OAAO,GAAE,aAAkB,GAAG;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CA0C5G;AAED,wBAAsB,aAAa,CAAC,OAAO,GAAE,aAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CA6E9E"}
1
+ {"version":3,"file":"ingest.d.ts","sourceRoot":"","sources":["../../src/commands/ingest.ts"],"names":[],"mappings":"AAWA,MAAM,WAAW,aAAa;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,OAAO,GAAE,aAAkB,GAAG;IACtD,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;CAChB,CAyDA;AAED,wBAAsB,aAAa,CAAC,OAAO,GAAE,aAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CAiF9E"}
@@ -1,10 +1,14 @@
1
- import { assertInitialised, sessionExists, writeSession, } from '../lib/storage.js';
2
- import { discoverProjects, parseConversationFile } from '../lib/parser.js';
1
+ import path from "path";
2
+ import { assertInitialised, sessionExists, writeSession, readConfig, } from "../lib/storage.js";
3
+ import { discoverProjects, cwdToSlug, parseConversationFile } from "../lib/parser.js";
4
+ import { getGitAuthor } from "../lib/git.js";
3
5
  /**
4
6
  * Core ingest logic — returns counts. Used by both ingestCommand and auto-ingest in patina run.
5
7
  */
6
8
  export function runIngest(options = {}) {
7
- const projects = discoverProjects(options.claudeDir);
9
+ const { include, exclude } = readConfig();
10
+ const includeSlugs = [cwdToSlug(process.cwd()), ...include];
11
+ const projects = discoverProjects(options.claudeDir, includeSlugs, exclude);
8
12
  let ingested = 0;
9
13
  let skipped = 0;
10
14
  let errors = 0;
@@ -30,7 +34,12 @@ export function runIngest(options = {}) {
30
34
  console.log(` skip ${parsed.session_id} (already ingested)`);
31
35
  continue;
32
36
  }
33
- const summary = { ...parsed, ingested_at: new Date().toISOString() };
37
+ const summary = {
38
+ ...parsed,
39
+ ingested_at: new Date().toISOString(),
40
+ author: getGitAuthor(),
41
+ projectAlias: path.basename(process.cwd()),
42
+ };
34
43
  try {
35
44
  writeSession(summary);
36
45
  ingested++;
@@ -48,11 +57,13 @@ export function runIngest(options = {}) {
48
57
  }
49
58
  export async function ingestCommand(options = {}) {
50
59
  assertInitialised();
51
- const projects = discoverProjects(options.claudeDir);
60
+ const { include, exclude } = readConfig();
61
+ const includeSlugs = [cwdToSlug(process.cwd()), ...include];
62
+ const projects = discoverProjects(options.claudeDir, includeSlugs, exclude);
52
63
  if (projects.length === 0) {
53
- const dir = options.claudeDir ?? '~/.claude/projects/';
64
+ const dir = options.claudeDir ?? "~/.claude/projects/";
54
65
  console.log(`No Claude Code project logs found in ${dir}`);
55
- console.log('Make sure you have run Claude Code at least once, or specify a different path with --claude-dir.');
66
+ console.log("Make sure you have run Claude Code at least once, or specify a different path with --claude-dir.");
56
67
  return;
57
68
  }
58
69
  if (options.verbose) {
@@ -85,6 +96,8 @@ export async function ingestCommand(options = {}) {
85
96
  const summary = {
86
97
  ...parsed,
87
98
  ingested_at: new Date().toISOString(),
99
+ author: getGitAuthor(),
100
+ projectAlias: path.basename(process.cwd()),
88
101
  };
89
102
  try {
90
103
  writeSession(summary);
@@ -103,9 +116,9 @@ export async function ingestCommand(options = {}) {
103
116
  const parts = [`${ingested} session(s) ingested`, `${skipped} skipped`];
104
117
  if (errors > 0)
105
118
  parts.push(`${errors} error(s)`);
106
- console.log(`\nDone. ${parts.join(', ')}.`);
119
+ console.log(`\nDone. ${parts.join(", ")}.`);
107
120
  if (ingested > 0) {
108
- console.log('Run `patina status` to see metrics.');
121
+ console.log("Run `patina status` to see metrics.");
109
122
  }
110
123
  }
111
124
  //# sourceMappingURL=ingest.js.map