@tyroneross/bookmark 0.2.0 → 0.3.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-plugin/marketplace.json +29 -12
- package/.claude-plugin/plugin.json +12 -8
- package/.codex-plugin/plugin.json +31 -0
- package/.mcp.json +8 -0
- package/CLAUDE.md +82 -38
- package/LICENSE +202 -21
- package/README.md +150 -57
- package/agents/snapshot-analyst.md +1 -1
- package/commands/bookmark.md +29 -0
- package/commands/feedback.md +37 -0
- package/commands/restore.md +14 -4
- package/commands/snapshot.md +19 -7
- package/commands/status.md +1 -1
- package/dist/cli/index.js +600 -66
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/snapshot-resolution.d.ts +15 -0
- package/dist/cli/snapshot-resolution.d.ts.map +1 -0
- package/dist/cli/snapshot-resolution.js +21 -0
- package/dist/cli/snapshot-resolution.js.map +1 -0
- package/dist/config.d.ts +19 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +150 -19
- package/dist/config.js.map +1 -1
- package/dist/context/freshness.d.ts +3 -0
- package/dist/context/freshness.d.ts.map +1 -0
- package/dist/context/freshness.js +29 -0
- package/dist/context/freshness.js.map +1 -0
- package/dist/context/handoff-prompt.d.ts +12 -0
- package/dist/context/handoff-prompt.d.ts.map +1 -0
- package/dist/context/handoff-prompt.js +29 -0
- package/dist/context/handoff-prompt.js.map +1 -0
- package/dist/index.d.ts +7 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -3
- package/dist/index.js.map +1 -1
- package/dist/mcp/server.d.ts +9 -0
- package/dist/mcp/server.d.ts.map +1 -0
- package/dist/mcp/server.js +85 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/mcp/tools.d.ts +97 -0
- package/dist/mcp/tools.d.ts.map +1 -0
- package/dist/mcp/tools.js +304 -0
- package/dist/mcp/tools.js.map +1 -0
- package/dist/registry.d.ts +40 -0
- package/dist/registry.d.ts.map +1 -0
- package/dist/registry.js +134 -0
- package/dist/registry.js.map +1 -0
- package/dist/restore/index.d.ts +13 -1
- package/dist/restore/index.d.ts.map +1 -1
- package/dist/restore/index.js +154 -256
- package/dist/restore/index.js.map +1 -1
- package/dist/setup/auto-setup.d.ts +8 -2
- package/dist/setup/auto-setup.d.ts.map +1 -1
- package/dist/setup/auto-setup.js +281 -66
- package/dist/setup/auto-setup.js.map +1 -1
- package/dist/setup/configure-hooks.d.ts +14 -3
- package/dist/setup/configure-hooks.d.ts.map +1 -1
- package/dist/setup/configure-hooks.js +156 -24
- package/dist/setup/configure-hooks.js.map +1 -1
- package/dist/snapshot/capture.d.ts +12 -10
- package/dist/snapshot/capture.d.ts.map +1 -1
- package/dist/snapshot/capture.js +36 -48
- package/dist/snapshot/capture.js.map +1 -1
- package/dist/snapshot/compress.d.ts +3 -3
- package/dist/snapshot/compress.d.ts.map +1 -1
- package/dist/snapshot/compress.js +16 -51
- package/dist/snapshot/compress.js.map +1 -1
- package/dist/snapshot/storage.d.ts +1 -0
- package/dist/snapshot/storage.d.ts.map +1 -1
- package/dist/snapshot/storage.js +7 -6
- package/dist/snapshot/storage.js.map +1 -1
- package/dist/threshold/state.d.ts +5 -0
- package/dist/threshold/state.d.ts.map +1 -1
- package/dist/threshold/state.js +28 -2
- package/dist/threshold/state.js.map +1 -1
- package/dist/threshold/token-usage.d.ts +29 -0
- package/dist/threshold/token-usage.d.ts.map +1 -0
- package/dist/threshold/token-usage.js +128 -0
- package/dist/threshold/token-usage.js.map +1 -0
- package/dist/trails/identity.d.ts +76 -0
- package/dist/trails/identity.d.ts.map +1 -0
- package/dist/trails/identity.js +117 -0
- package/dist/trails/identity.js.map +1 -0
- package/dist/trails/reader.d.ts +1 -1
- package/dist/trails/reader.js +2 -2
- package/dist/trails/reader.js.map +1 -1
- package/dist/trails/writer.d.ts +2 -8
- package/dist/trails/writer.d.ts.map +1 -1
- package/dist/trails/writer.js +33 -191
- package/dist/trails/writer.js.map +1 -1
- package/dist/transcript/extractor.d.ts +8 -9
- package/dist/transcript/extractor.d.ts.map +1 -1
- package/dist/transcript/extractor.js +97 -360
- package/dist/transcript/extractor.js.map +1 -1
- package/dist/types.d.ts +34 -41
- package/dist/types.d.ts.map +1 -1
- package/hooks/hooks.json +12 -14
- package/package.json +13 -7
- package/scripts/install-plugin.sh +48 -0
- package/skills/context-continuity/SKILL.md +43 -24
- package/commands/activate.md +0 -20
- package/dist/transcript/estimator.d.ts +0 -20
- package/dist/transcript/estimator.d.ts.map +0 -1
- package/dist/transcript/estimator.js +0 -95
- package/dist/transcript/estimator.js.map +0 -1
|
@@ -1,221 +1,58 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
1
|
+
import { relative, isAbsolute } from 'node:path';
|
|
2
|
+
/**
|
|
3
|
+
* Convert an absolute file path to a project-relative one. Falls back to
|
|
4
|
+
* the original path when projectPath is missing or the file isn't under
|
|
5
|
+
* it (e.g. a tool call that touched something outside the repo, like a
|
|
6
|
+
* scratchpad in /tmp).
|
|
7
|
+
*
|
|
8
|
+
* Why: snapshots used to embed absolute paths
|
|
9
|
+
* (e.g. /Users/tyroneross/Desktop/git-folder/...). When the project moved
|
|
10
|
+
* to ~/dev/git-folder/... every old absolute path went stale, defeating
|
|
11
|
+
* the whole point of the snapshot. Going forward we store paths relative
|
|
12
|
+
* to project_path so a move only needs the project_path field updated
|
|
13
|
+
* (or — for git-tracked moves — nothing at all).
|
|
14
|
+
*/
|
|
15
|
+
function toProjectRelative(filePath, projectPath) {
|
|
16
|
+
if (!projectPath || !filePath)
|
|
17
|
+
return filePath;
|
|
18
|
+
if (!isAbsolute(filePath))
|
|
19
|
+
return filePath;
|
|
20
|
+
if (!filePath.startsWith(projectPath))
|
|
21
|
+
return filePath;
|
|
22
|
+
const rel = relative(projectPath, filePath);
|
|
23
|
+
// `relative` returns '' when paths match exactly; preserve a sentinel so
|
|
24
|
+
// downstream code knows it's the project root rather than the empty
|
|
25
|
+
// string (which can read as "missing data").
|
|
26
|
+
return rel === '' ? '.' : rel;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Extractor v0.3 — file tracking + tool summary only.
|
|
30
|
+
*
|
|
31
|
+
* Removed: decision extraction, open items, unknowns, errors, sentiment, status.
|
|
32
|
+
* These produced noise (not signal) via regex. Claude writes semantic content
|
|
33
|
+
* when a lifecycle or token hook requests the handoff instead.
|
|
34
|
+
*
|
|
35
|
+
* Kept: file change tracking (accurate) and tool usage summary (accurate).
|
|
36
|
+
*/
|
|
33
37
|
const FILE_TOOL_NAMES = new Set(['Write', 'Edit', 'write', 'edit']);
|
|
34
38
|
const FILE_CREATING_BASH_PATTERNS = [
|
|
35
39
|
/\b(?:mkdir|touch|mv|cp|cat\s+>|echo\s+>|tee)\b/,
|
|
36
40
|
];
|
|
37
41
|
/**
|
|
38
|
-
* Extract
|
|
39
|
-
*
|
|
42
|
+
* Extract file changes and tool usage from transcript entries.
|
|
43
|
+
* These are the two extraction functions that actually produce accurate data.
|
|
40
44
|
*/
|
|
41
|
-
export function
|
|
45
|
+
export function extractFilesAndTools(entries, options) {
|
|
42
46
|
const projectPath = options?.projectPath;
|
|
43
|
-
const decisions = extractDecisions(entries);
|
|
44
|
-
const openItems = extractOpenItems(entries);
|
|
45
|
-
const unknowns = extractUnknowns(entries);
|
|
46
|
-
const filesChanged = extractFilesChanged(entries, projectPath);
|
|
47
|
-
const errors = extractErrors(entries);
|
|
48
|
-
const toolsSummary = extractToolsSummary(entries);
|
|
49
|
-
const currentStatus = extractCurrentStatus(entries);
|
|
50
|
-
const sentiment = extractUserSentiment(entries);
|
|
51
47
|
return {
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
open_items: openItems,
|
|
55
|
-
unknowns,
|
|
56
|
-
files_changed: filesChanged,
|
|
57
|
-
errors_encountered: errors,
|
|
58
|
-
tools_summary: toolsSummary,
|
|
59
|
-
user_sentiment: sentiment,
|
|
48
|
+
files_changed: extractFilesChanged(entries, projectPath),
|
|
49
|
+
tools_summary: extractToolsSummary(entries),
|
|
60
50
|
};
|
|
61
51
|
}
|
|
62
|
-
function extractDecisions(entries) {
|
|
63
|
-
const decisions = [];
|
|
64
|
-
const seen = new Set();
|
|
65
|
-
// Decisions come from assistant messages where the assistant explicitly
|
|
66
|
-
// states a choice. Require strong decision language + rationale.
|
|
67
|
-
for (const entry of entries) {
|
|
68
|
-
if (entry.type !== 'assistant')
|
|
69
|
-
continue;
|
|
70
|
-
const text = getEntryText(entry);
|
|
71
|
-
if (!text || text.length < 30 || text.length > 2000)
|
|
72
|
-
continue;
|
|
73
|
-
// Skip formatted output (markdown headers, code blocks)
|
|
74
|
-
if (/^#{1,3}\s/m.test(text) || /^```/m.test(text))
|
|
75
|
-
continue;
|
|
76
|
-
// Must have BOTH a decision keyword AND a rationale keyword
|
|
77
|
-
if (!DECISION_PATTERNS[0].test(text) || !DECISION_PATTERNS[1].test(text))
|
|
78
|
-
continue;
|
|
79
|
-
const sentences = text.split(/[.!?\n]/).filter(s => s.trim().length > 25);
|
|
80
|
-
for (const sentence of sentences) {
|
|
81
|
-
if (DECISION_PATTERNS[0].test(sentence)) {
|
|
82
|
-
const clean = sentence.trim().slice(0, 150);
|
|
83
|
-
if (DECISION_NOISE.some(p => p.test(clean)))
|
|
84
|
-
continue;
|
|
85
|
-
if (clean.split(/\s+/).length < 6)
|
|
86
|
-
continue;
|
|
87
|
-
// Skip bug descriptions, status reports, code artifacts
|
|
88
|
-
if (/^\*\*/.test(clean))
|
|
89
|
-
continue;
|
|
90
|
-
if (/[/\\](?:b|i|s)\b/.test(clean))
|
|
91
|
-
continue;
|
|
92
|
-
const key = clean.toLowerCase().slice(0, 50);
|
|
93
|
-
if (!seen.has(key)) {
|
|
94
|
-
seen.add(key);
|
|
95
|
-
decisions.push({ description: clean });
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
return decisions.slice(0, 6);
|
|
101
|
-
}
|
|
102
|
-
/** Fragments that look like open items but are just conversational narration or artifact */
|
|
103
|
-
const OPEN_ITEM_NOISE = [
|
|
104
|
-
/^let me /i,
|
|
105
|
-
/^I'll /i,
|
|
106
|
-
/^I need to /i,
|
|
107
|
-
/^I should /i,
|
|
108
|
-
/^now I /i,
|
|
109
|
-
/^now let me /i,
|
|
110
|
-
/^first,? /i,
|
|
111
|
-
/^next,? /i,
|
|
112
|
-
/^let's /i,
|
|
113
|
-
/^we need to /i,
|
|
114
|
-
/^you'll need to /i,
|
|
115
|
-
/^no need to /i,
|
|
116
|
-
/^there's no need /i,
|
|
117
|
-
/^\d+→/, // Line-number prefixed (from file reads)
|
|
118
|
-
/^\d+\|/, // Alt line-number format
|
|
119
|
-
/^- \[ \] (?:\d+→|>)/, // Checkbox with line prefix
|
|
120
|
-
/^> /, // Blockquote content
|
|
121
|
-
/^SNAP_/, // Snapshot IDs
|
|
122
|
-
/^\|/, // Table rows
|
|
123
|
-
/^```/, // Code blocks
|
|
124
|
-
/^\*bookmark/, // Bookmark signature
|
|
125
|
-
];
|
|
126
|
-
function extractOpenItems(entries) {
|
|
127
|
-
const items = [];
|
|
128
|
-
const seen = new Set();
|
|
129
|
-
// Strategy: user messages are the source of truth for "what needs to be done"
|
|
130
|
-
// Assistant messages only contribute if they have explicit TODO/FIXME markers
|
|
131
|
-
const startIdx = Math.floor(entries.length * 0.7);
|
|
132
|
-
for (let i = entries.length - 1; i >= startIdx; i--) {
|
|
133
|
-
const entry = entries[i];
|
|
134
|
-
if (entry.type !== 'assistant' && entry.type !== 'user')
|
|
135
|
-
continue;
|
|
136
|
-
const text = getEntryText(entry);
|
|
137
|
-
if (!text || text.length > 2000)
|
|
138
|
-
continue;
|
|
139
|
-
// For assistant messages: only extract literal TODO/FIXME markers
|
|
140
|
-
// Must be at start of line or after whitespace, not inside backticks/quotes
|
|
141
|
-
if (entry.type === 'assistant') {
|
|
142
|
-
// Strip backtick-quoted content before matching
|
|
143
|
-
const stripped = text.replace(/`[^`]*`/g, '').replace(/"[^"]*"/g, '');
|
|
144
|
-
const todoMatches = stripped.match(/^[ \t]*(?:\/\/|#|--|%%)?\s*(?:TODO|FIXME):\s+(.{10,100})/gm);
|
|
145
|
-
if (todoMatches) {
|
|
146
|
-
for (const match of todoMatches.slice(0, 2)) {
|
|
147
|
-
const clean = match.trim();
|
|
148
|
-
if (isCodeArtifact(clean))
|
|
149
|
-
continue;
|
|
150
|
-
const key = clean.toLowerCase().slice(0, 50);
|
|
151
|
-
if (!seen.has(key)) {
|
|
152
|
-
seen.add(key);
|
|
153
|
-
items.push({ description: clean, priority: 'medium' });
|
|
154
|
-
}
|
|
155
|
-
}
|
|
156
|
-
}
|
|
157
|
-
continue; // Skip all other assistant patterns — too noisy
|
|
158
|
-
}
|
|
159
|
-
// For user messages: use pattern matching but with strict code-artifact filtering
|
|
160
|
-
const sentences = text.split(/[.!?\n]/).filter(s => s.trim().length > 25);
|
|
161
|
-
for (const sentence of sentences) {
|
|
162
|
-
if (OPEN_ITEM_PATTERNS.some(p => p.test(sentence))) {
|
|
163
|
-
const clean = sentence.trim().slice(0, 150);
|
|
164
|
-
if (OPEN_ITEM_NOISE.some(p => p.test(clean)))
|
|
165
|
-
continue;
|
|
166
|
-
if (clean.split(/\s+/).length < 5)
|
|
167
|
-
continue;
|
|
168
|
-
// Hard filter: skip anything that looks like code, regex, or technical artifact
|
|
169
|
-
if (isCodeArtifact(clean))
|
|
170
|
-
continue;
|
|
171
|
-
const key = clean.toLowerCase().slice(0, 50);
|
|
172
|
-
if (!seen.has(key)) {
|
|
173
|
-
seen.add(key);
|
|
174
|
-
items.push({
|
|
175
|
-
description: clean,
|
|
176
|
-
priority: inferPriority(clean),
|
|
177
|
-
});
|
|
178
|
-
}
|
|
179
|
-
}
|
|
180
|
-
}
|
|
181
|
-
}
|
|
182
|
-
return items.slice(0, 5);
|
|
183
|
-
}
|
|
184
|
-
function extractUnknowns(entries) {
|
|
185
|
-
const unknowns = [];
|
|
186
|
-
const seen = new Set();
|
|
187
|
-
// Only recent entries, skip research/formatted output
|
|
188
|
-
const startIdx = Math.floor(entries.length * 0.7);
|
|
189
|
-
for (let i = entries.length - 1; i >= startIdx; i--) {
|
|
190
|
-
const entry = entries[i];
|
|
191
|
-
if (entry.type !== 'assistant' && entry.type !== 'user')
|
|
192
|
-
continue;
|
|
193
|
-
const text = getEntryText(entry);
|
|
194
|
-
if (!text || text.length > 2000)
|
|
195
|
-
continue;
|
|
196
|
-
if (/^#{1,3}\s/m.test(text))
|
|
197
|
-
continue;
|
|
198
|
-
const sentences = text.split(/[.!?\n]/).filter(s => s.trim().length > 20);
|
|
199
|
-
for (const sentence of sentences) {
|
|
200
|
-
if (UNKNOWN_PATTERNS.some(p => p.test(sentence))) {
|
|
201
|
-
const clean = sentence.trim().slice(0, 150);
|
|
202
|
-
if (clean.split(/\s+/).length < 5)
|
|
203
|
-
continue;
|
|
204
|
-
if (/^let me /i.test(clean))
|
|
205
|
-
continue;
|
|
206
|
-
const key = clean.toLowerCase().slice(0, 50);
|
|
207
|
-
if (!seen.has(key)) {
|
|
208
|
-
seen.add(key);
|
|
209
|
-
unknowns.push(clean);
|
|
210
|
-
}
|
|
211
|
-
}
|
|
212
|
-
}
|
|
213
|
-
}
|
|
214
|
-
return unknowns.slice(0, 3);
|
|
215
|
-
}
|
|
216
52
|
function extractFilesChanged(entries, projectPath) {
|
|
217
53
|
const fileMap = new Map();
|
|
218
54
|
const fileLinesChanged = new Map();
|
|
55
|
+
const fileStructuralChanges = new Map();
|
|
219
56
|
for (const entry of entries) {
|
|
220
57
|
if (entry.type === 'tool_use') {
|
|
221
58
|
const toolName = entry.tool_name ?? '';
|
|
@@ -223,31 +60,31 @@ function extractFilesChanged(entries, projectPath) {
|
|
|
223
60
|
if (FILE_TOOL_NAMES.has(toolName)) {
|
|
224
61
|
const filePath = input.file_path ?? input.path ?? '';
|
|
225
62
|
if (filePath) {
|
|
226
|
-
// Skip files outside the project directory
|
|
227
63
|
if (projectPath && !filePath.startsWith(projectPath))
|
|
228
64
|
continue;
|
|
229
65
|
const ops = fileMap.get(filePath) ?? new Set();
|
|
230
66
|
ops.add(toolName.toLowerCase());
|
|
231
67
|
fileMap.set(filePath, ops);
|
|
232
|
-
// Estimate lines changed from Edit tool inputs
|
|
233
68
|
const newStr = input.new_string ?? input.content ?? '';
|
|
234
69
|
const oldStr = input.old_string ?? '';
|
|
235
70
|
const linesAdded = newStr ? newStr.split('\n').length : 0;
|
|
236
71
|
const linesRemoved = oldStr ? oldStr.split('\n').length : 0;
|
|
237
72
|
const delta = Math.abs(linesAdded - linesRemoved) + Math.min(linesAdded, linesRemoved);
|
|
238
73
|
fileLinesChanged.set(filePath, (fileLinesChanged.get(filePath) ?? 0) + delta);
|
|
74
|
+
const changes = fileStructuralChanges.get(filePath) ?? new Set();
|
|
75
|
+
extractStructuralHints(newStr, oldStr, changes);
|
|
76
|
+
if (changes.size > 0) {
|
|
77
|
+
fileStructuralChanges.set(filePath, changes);
|
|
78
|
+
}
|
|
239
79
|
}
|
|
240
80
|
}
|
|
241
|
-
// Detect file operations in Bash commands
|
|
242
81
|
if (toolName === 'Bash' || toolName === 'bash') {
|
|
243
82
|
const cmd = input.command ?? '';
|
|
244
83
|
for (const pattern of FILE_CREATING_BASH_PATTERNS) {
|
|
245
84
|
if (pattern.test(cmd)) {
|
|
246
|
-
// Try to extract file path from command
|
|
247
85
|
const parts = cmd.split(/\s+/);
|
|
248
86
|
const lastPart = parts[parts.length - 1];
|
|
249
87
|
if (lastPart && !lastPart.startsWith('-')) {
|
|
250
|
-
// Skip files outside the project directory
|
|
251
88
|
if (projectPath && !lastPart.startsWith(projectPath))
|
|
252
89
|
break;
|
|
253
90
|
const ops = fileMap.get(lastPart) ?? new Set();
|
|
@@ -262,62 +99,68 @@ function extractFilesChanged(entries, projectPath) {
|
|
|
262
99
|
}
|
|
263
100
|
const result = [];
|
|
264
101
|
for (const [path, ops] of fileMap) {
|
|
102
|
+
const changes = fileStructuralChanges.get(path);
|
|
103
|
+
const summary = changes && changes.size > 0
|
|
104
|
+
? [...changes].slice(0, 4).join(', ')
|
|
105
|
+
: undefined;
|
|
265
106
|
result.push({
|
|
266
|
-
|
|
107
|
+
// Store relative to projectPath so snapshots survive a project move.
|
|
108
|
+
// The original absolute path is preserved in `absolute_path` for
|
|
109
|
+
// diagnostic use; consumers should prefer `path` joined to the
|
|
110
|
+
// current project_path.
|
|
111
|
+
path: toProjectRelative(path, projectPath),
|
|
267
112
|
operations: [...ops],
|
|
268
113
|
lines_changed: fileLinesChanged.get(path) ?? 0,
|
|
114
|
+
summary,
|
|
269
115
|
});
|
|
270
116
|
}
|
|
271
|
-
return result.slice(0, 20);
|
|
117
|
+
return result.slice(0, 20);
|
|
272
118
|
}
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
119
|
+
function extractStructuralHints(newStr, oldStr, changes) {
|
|
120
|
+
if (!newStr && !oldStr)
|
|
121
|
+
return;
|
|
122
|
+
const newLines = new Set(newStr.split('\n').map(l => l.trim()));
|
|
123
|
+
const oldLines = new Set(oldStr.split('\n').map(l => l.trim()));
|
|
124
|
+
const STRUCTURAL_PATTERNS = [
|
|
125
|
+
{ pattern: /^export\s+(?:async\s+)?function\s+(\w+)/, prefix: '+fn' },
|
|
126
|
+
{ pattern: /^(?:async\s+)?function\s+(\w+)/, prefix: '+fn' },
|
|
127
|
+
{ pattern: /^export\s+(?:const|let)\s+(\w+)\s*=\s*(?:async\s*)?\(/, prefix: '+fn' },
|
|
128
|
+
{ pattern: /^(?:const|let)\s+(\w+)\s*=\s*(?:async\s*)?\(/, prefix: '+fn' },
|
|
129
|
+
{ pattern: /^export\s+class\s+(\w+)/, prefix: '+class' },
|
|
130
|
+
{ pattern: /^class\s+(\w+)/, prefix: '+class' },
|
|
131
|
+
{ pattern: /^export\s+interface\s+(\w+)/, prefix: '+interface' },
|
|
132
|
+
{ pattern: /^interface\s+(\w+)/, prefix: '+interface' },
|
|
133
|
+
{ pattern: /^export\s+type\s+(\w+)/, prefix: '+type' },
|
|
134
|
+
{ pattern: /^type\s+(\w+)/, prefix: '+type' },
|
|
135
|
+
{ pattern: /^import\s+.*from\s+['"]([^'"]+)['"]/, prefix: '+import' },
|
|
136
|
+
];
|
|
137
|
+
for (const line of newLines) {
|
|
138
|
+
if (oldLines.has(line))
|
|
139
|
+
continue;
|
|
140
|
+
for (const { pattern, prefix } of STRUCTURAL_PATTERNS) {
|
|
141
|
+
const match = line.match(pattern);
|
|
142
|
+
if (match) {
|
|
143
|
+
changes.add(`${prefix} ${match[1]}`);
|
|
144
|
+
break;
|
|
145
|
+
}
|
|
292
146
|
}
|
|
293
147
|
}
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
const text = getEntryText(entry);
|
|
298
|
-
if (!text || text.length < 10)
|
|
299
|
-
continue;
|
|
300
|
-
if (ERROR_PATTERNS.some(p => p.test(text))) {
|
|
301
|
-
// Extract first meaningful error line
|
|
302
|
-
const firstLine = text.split('\n')[0]?.trim().slice(0, 200) ?? '';
|
|
303
|
-
// Skip false positives
|
|
304
|
-
if (ERROR_FALSE_POSITIVES.some(p => p.test(firstLine)))
|
|
305
|
-
continue;
|
|
306
|
-
// Skip very short matches (likely noise)
|
|
307
|
-
if (firstLine.length < 15)
|
|
148
|
+
if (oldStr) {
|
|
149
|
+
for (const line of oldLines) {
|
|
150
|
+
if (newLines.has(line))
|
|
308
151
|
continue;
|
|
309
|
-
const
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
152
|
+
for (const { pattern, prefix } of STRUCTURAL_PATTERNS) {
|
|
153
|
+
const match = line.match(pattern);
|
|
154
|
+
if (match) {
|
|
155
|
+
const removePrefix = prefix.replace('+', '-');
|
|
156
|
+
if (!changes.has(`${prefix} ${match[1]}`)) {
|
|
157
|
+
changes.add(`${removePrefix} ${match[1]}`);
|
|
158
|
+
}
|
|
159
|
+
break;
|
|
160
|
+
}
|
|
317
161
|
}
|
|
318
162
|
}
|
|
319
163
|
}
|
|
320
|
-
return errors.slice(0, 10); // maxErrorsTracked
|
|
321
164
|
}
|
|
322
165
|
function extractToolsSummary(entries) {
|
|
323
166
|
const summary = {};
|
|
@@ -328,112 +171,7 @@ function extractToolsSummary(entries) {
|
|
|
328
171
|
}
|
|
329
172
|
return summary;
|
|
330
173
|
}
|
|
331
|
-
function extractCurrentStatus(entries) {
|
|
332
|
-
// Derive status from what was DONE, not from conversational text.
|
|
333
|
-
// Look for the last user request to understand the task context.
|
|
334
|
-
let lastUserRequest = '';
|
|
335
|
-
for (let i = entries.length - 1; i >= 0; i--) {
|
|
336
|
-
const entry = entries[i];
|
|
337
|
-
if (entry.type !== 'user')
|
|
338
|
-
continue;
|
|
339
|
-
const text = getEntryText(entry);
|
|
340
|
-
if (!text || text.length < 10)
|
|
341
|
-
continue;
|
|
342
|
-
// Skip very long user messages (likely pasted content)
|
|
343
|
-
if (text.length > 500)
|
|
344
|
-
continue;
|
|
345
|
-
lastUserRequest = text.trim().slice(0, 150);
|
|
346
|
-
break;
|
|
347
|
-
}
|
|
348
|
-
// Count recent tool actions for a factual summary
|
|
349
|
-
const recentTools = {};
|
|
350
|
-
const startIdx = Math.max(0, entries.length - 30);
|
|
351
|
-
for (let i = startIdx; i < entries.length; i++) {
|
|
352
|
-
if (entries[i].type === 'tool_use' && entries[i].tool_name) {
|
|
353
|
-
const name = entries[i].tool_name;
|
|
354
|
-
recentTools[name] = (recentTools[name] ?? 0) + 1;
|
|
355
|
-
}
|
|
356
|
-
}
|
|
357
|
-
const toolSummary = Object.entries(recentTools)
|
|
358
|
-
.sort((a, b) => b[1] - a[1])
|
|
359
|
-
.slice(0, 3)
|
|
360
|
-
.map(([t, c]) => `${t}(${c})`)
|
|
361
|
-
.join(', ');
|
|
362
|
-
if (lastUserRequest) {
|
|
363
|
-
return `Last user direction: "${lastUserRequest}"${toolSummary ? `. Recent activity: ${toolSummary}` : ''}`;
|
|
364
|
-
}
|
|
365
|
-
return toolSummary ? `Recent activity: ${toolSummary}` : 'No status available';
|
|
366
|
-
}
|
|
367
|
-
function getEntryText(entry) {
|
|
368
|
-
if (typeof entry.content === 'string')
|
|
369
|
-
return entry.content;
|
|
370
|
-
return '';
|
|
371
|
-
}
|
|
372
|
-
/** Detect if text is a code artifact rather than natural language */
|
|
373
|
-
function isCodeArtifact(text) {
|
|
374
|
-
// Regex patterns (contains /pattern/ or \b)
|
|
375
|
-
if (/[/](?:[a-z]+\||\\.|\^|\$|\(|\[)/.test(text))
|
|
376
|
-
return true;
|
|
377
|
-
// Variable/function syntax
|
|
378
|
-
if (/(?:const|let|var|function|=>|===|!==)\s/.test(text))
|
|
379
|
-
return true;
|
|
380
|
-
// Contains backticks (inline code)
|
|
381
|
-
if (/`[^`]+`/.test(text) && text.indexOf('`') < 20)
|
|
382
|
-
return true;
|
|
383
|
-
// Pipe-delimited (regex alternation or table)
|
|
384
|
-
if ((text.match(/\|/g) ?? []).length >= 2)
|
|
385
|
-
return true;
|
|
386
|
-
// Starts with punctuation that indicates code output
|
|
387
|
-
if (/^[:\-*#>]/.test(text.trim()))
|
|
388
|
-
return true;
|
|
389
|
-
return false;
|
|
390
|
-
}
|
|
391
|
-
function inferPriority(text) {
|
|
392
|
-
const lower = text.toLowerCase();
|
|
393
|
-
if (/\b(?:must|critical|urgent|blocker|breaking|immediately)\b/.test(lower))
|
|
394
|
-
return 'high';
|
|
395
|
-
if (/\b(?:should|important|next|before|required)\b/.test(lower))
|
|
396
|
-
return 'medium';
|
|
397
|
-
return 'low';
|
|
398
|
-
}
|
|
399
|
-
// ─── User Sentiment ───
|
|
400
|
-
const POSITIVE_PATTERNS = [
|
|
401
|
-
/\b(?:great|good|perfect|nice|awesome|excellent|looks good|well done|love it|thank|thanks)\b/i,
|
|
402
|
-
/\b(?:works|working|fixed|solved|nailed it|ship it|lgtm)\b/i,
|
|
403
|
-
];
|
|
404
|
-
const NEGATIVE_PATTERNS = [
|
|
405
|
-
/\b(?:wrong|broken|doesn't work|not what I|revert|undo|bad|terrible|hate)\b/i,
|
|
406
|
-
/\b(?:no no|stop|don't|shouldn't have|why did you|that's not)\b/i,
|
|
407
|
-
];
|
|
408
|
-
function extractUserSentiment(entries) {
|
|
409
|
-
let positive = 0;
|
|
410
|
-
let negative = 0;
|
|
411
|
-
// Only look at recent user messages (last 30%)
|
|
412
|
-
const startIdx = Math.floor(entries.length * 0.7);
|
|
413
|
-
for (let i = startIdx; i < entries.length; i++) {
|
|
414
|
-
const entry = entries[i];
|
|
415
|
-
if (entry.type !== 'user')
|
|
416
|
-
continue;
|
|
417
|
-
const text = getEntryText(entry);
|
|
418
|
-
if (!text)
|
|
419
|
-
continue;
|
|
420
|
-
if (POSITIVE_PATTERNS.some(p => p.test(text)))
|
|
421
|
-
positive++;
|
|
422
|
-
if (NEGATIVE_PATTERNS.some(p => p.test(text)))
|
|
423
|
-
negative++;
|
|
424
|
-
}
|
|
425
|
-
if (positive > negative && positive >= 2)
|
|
426
|
-
return 'positive';
|
|
427
|
-
if (negative > positive && negative >= 2)
|
|
428
|
-
return 'negative';
|
|
429
|
-
return 'neutral';
|
|
430
|
-
}
|
|
431
|
-
/**
|
|
432
|
-
* Detect how many file edits have happened since the last git commit.
|
|
433
|
-
* If no commit is found, returns total edits.
|
|
434
|
-
*/
|
|
435
174
|
export function extractCommitGap(entries) {
|
|
436
|
-
// Find the last git commit in the transcript
|
|
437
175
|
let lastCommitIdx = -1;
|
|
438
176
|
for (let i = entries.length - 1; i >= 0; i--) {
|
|
439
177
|
const entry = entries[i];
|
|
@@ -445,7 +183,6 @@ export function extractCommitGap(entries) {
|
|
|
445
183
|
}
|
|
446
184
|
}
|
|
447
185
|
}
|
|
448
|
-
// Count edits since that commit
|
|
449
186
|
let editCount = 0;
|
|
450
187
|
const filesEdited = new Set();
|
|
451
188
|
const searchFrom = lastCommitIdx >= 0 ? lastCommitIdx + 1 : 0;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"extractor.js","sourceRoot":"","sources":["../../src/transcript/extractor.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"extractor.js","sourceRoot":"","sources":["../../src/transcript/extractor.ts"],"names":[],"mappings":"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"}
|