@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.
- package/README.md +211 -78
- package/dist/commands/apply.d.ts +5 -3
- package/dist/commands/apply.d.ts.map +1 -1
- package/dist/commands/apply.js +106 -71
- package/dist/commands/apply.js.map +1 -1
- package/dist/commands/capture.d.ts +2 -1
- package/dist/commands/capture.d.ts.map +1 -1
- package/dist/commands/capture.js +46 -32
- package/dist/commands/capture.js.map +1 -1
- package/dist/commands/ingest.d.ts.map +1 -1
- package/dist/commands/ingest.js +22 -9
- package/dist/commands/ingest.js.map +1 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +33 -33
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/layers.d.ts +5 -1
- package/dist/commands/layers.d.ts.map +1 -1
- package/dist/commands/layers.js +115 -76
- package/dist/commands/layers.js.map +1 -1
- package/dist/commands/onboard.d.ts +1 -1
- package/dist/commands/onboard.d.ts.map +1 -1
- package/dist/commands/onboard.js +90 -73
- package/dist/commands/onboard.js.map +1 -1
- package/dist/commands/reflect.d.ts +2 -0
- package/dist/commands/reflect.d.ts.map +1 -0
- package/dist/commands/reflect.js +95 -0
- package/dist/commands/reflect.js.map +1 -0
- package/dist/commands/run.d.ts +8 -6
- package/dist/commands/run.d.ts.map +1 -1
- package/dist/commands/run.js +170 -209
- package/dist/commands/run.js.map +1 -1
- package/dist/commands/status.d.ts.map +1 -1
- package/dist/commands/status.js +17 -25
- package/dist/commands/status.js.map +1 -1
- package/dist/index.js +50 -56
- package/dist/index.js.map +1 -1
- package/dist/lib/claude.d.ts.map +1 -1
- package/dist/lib/claude.js +35 -24
- package/dist/lib/claude.js.map +1 -1
- package/dist/lib/git.d.ts +2 -0
- package/dist/lib/git.d.ts.map +1 -0
- package/dist/lib/git.js +9 -0
- package/dist/lib/git.js.map +1 -0
- package/dist/lib/lint.js +14 -14
- package/dist/lib/metrics.d.ts +1 -1
- package/dist/lib/metrics.d.ts.map +1 -1
- package/dist/lib/metrics.js +9 -12
- package/dist/lib/metrics.js.map +1 -1
- package/dist/lib/parser.d.ts +7 -1
- package/dist/lib/parser.d.ts.map +1 -1
- package/dist/lib/parser.js +46 -37
- package/dist/lib/parser.js.map +1 -1
- package/dist/lib/questions.d.ts +14 -0
- package/dist/lib/questions.d.ts.map +1 -0
- package/dist/lib/questions.js +58 -0
- package/dist/lib/questions.js.map +1 -0
- package/dist/lib/storage.d.ts +85 -12
- package/dist/lib/storage.d.ts.map +1 -1
- package/dist/lib/storage.js +165 -57
- package/dist/lib/storage.js.map +1 -1
- package/package.json +6 -4
package/dist/commands/apply.js
CHANGED
|
@@ -1,38 +1,56 @@
|
|
|
1
|
-
import fs from
|
|
2
|
-
import path from
|
|
3
|
-
import readline from
|
|
4
|
-
import { assertInitialised, readPendingDiff,
|
|
5
|
-
import { lintMarkdown, fixMarkdown } from
|
|
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) {
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
function
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
function
|
|
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({
|
|
16
|
-
|
|
17
|
-
|
|
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(
|
|
36
|
+
resolve(answer.trim().toLowerCase().startsWith("y"));
|
|
20
37
|
});
|
|
21
38
|
});
|
|
22
39
|
}
|
|
23
40
|
/**
|
|
24
|
-
* Find the section header in
|
|
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(
|
|
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(
|
|
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(
|
|
55
|
-
|
|
72
|
+
...diffText.split("\n"),
|
|
73
|
+
"",
|
|
56
74
|
...lines.slice(insertAt),
|
|
57
75
|
];
|
|
58
|
-
return newLines.join(
|
|
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(
|
|
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() !==
|
|
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(
|
|
79
|
-
|
|
96
|
+
...diffText.split("\n"),
|
|
97
|
+
"",
|
|
80
98
|
...lines.slice(insertAfter + 1),
|
|
81
99
|
];
|
|
82
|
-
return newLines.join(
|
|
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
|
|
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() +
|
|
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 +
|
|
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[
|
|
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,
|
|
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,
|
|
164
|
+
content = fs.readFileSync(spokeFile, "utf-8");
|
|
147
165
|
}
|
|
148
166
|
const updated = updateCycleHistory(content, insight, changeDesc);
|
|
149
|
-
fs.writeFileSync(spokeFile, updated,
|
|
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(
|
|
157
|
-
console.log(dim(
|
|
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
|
|
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(
|
|
183
|
+
console.log(`\n${bold("patina buff")} — proposed instruction change`);
|
|
165
184
|
console.log(hr());
|
|
166
|
-
console.log(`
|
|
167
|
-
console.log(`
|
|
168
|
-
console.log(`
|
|
169
|
-
|
|
170
|
-
|
|
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(
|
|
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,
|
|
208
|
+
? fs.readFileSync(targetFilePath, "utf-8")
|
|
183
209
|
: isCore
|
|
184
|
-
?
|
|
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,
|
|
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(
|
|
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
|
-
//
|
|
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,
|
|
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,
|
|
212
|
-
// Enforce hard cap on core
|
|
213
|
-
const coreLines = coreContent.split(
|
|
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
|
|
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,
|
|
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,
|
|
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,
|
|
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) +
|
|
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(
|
|
239
|
-
console.log(green(
|
|
240
|
-
|
|
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(
|
|
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
|
-
|
|
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":"
|
|
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"}
|
package/dist/commands/capture.js
CHANGED
|
@@ -1,40 +1,54 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
3
|
-
import {
|
|
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) {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
function
|
|
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
|
-
|
|
34
|
-
|
|
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 =
|
|
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(
|
|
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(
|
|
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(
|
|
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
|
-
|
|
61
|
-
|
|
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(
|
|
77
|
-
month:
|
|
78
|
-
day:
|
|
79
|
-
hour:
|
|
80
|
-
minute:
|
|
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(
|
|
97
|
+
console.log(`${green("✓")} Captured${tagLabel}: ${captureText}`);
|
|
84
98
|
console.log(dim(` by ${capture.author} · ${when}`));
|
|
85
|
-
console.log(dim(
|
|
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":"AAAA,OAAO,
|
|
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":"
|
|
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"}
|
package/dist/commands/ingest.js
CHANGED
|
@@ -1,10 +1,14 @@
|
|
|
1
|
-
import
|
|
2
|
-
import {
|
|
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
|
|
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 = {
|
|
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
|
|
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 ??
|
|
64
|
+
const dir = options.claudeDir ?? "~/.claude/projects/";
|
|
54
65
|
console.log(`No Claude Code project logs found in ${dir}`);
|
|
55
|
-
console.log(
|
|
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(
|
|
121
|
+
console.log("Run `patina status` to see metrics.");
|
|
109
122
|
}
|
|
110
123
|
}
|
|
111
124
|
//# sourceMappingURL=ingest.js.map
|