preflight-dev 3.1.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/LICENSE +21 -0
- package/README.md +172 -0
- package/bin/cli.js +11 -0
- package/dist/cli/init.d.ts +2 -0
- package/dist/cli/init.js +154 -0
- package/dist/cli/init.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +122 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/config.d.ts +34 -0
- package/dist/lib/config.js +118 -0
- package/dist/lib/config.js.map +1 -0
- package/dist/lib/embeddings.d.ts +11 -0
- package/dist/lib/embeddings.js +88 -0
- package/dist/lib/embeddings.js.map +1 -0
- package/dist/lib/files.d.ts +15 -0
- package/dist/lib/files.js +60 -0
- package/dist/lib/files.js.map +1 -0
- package/dist/lib/git-extractor.d.ts +9 -0
- package/dist/lib/git-extractor.js +116 -0
- package/dist/lib/git-extractor.js.map +1 -0
- package/dist/lib/git.d.ts +29 -0
- package/dist/lib/git.js +86 -0
- package/dist/lib/git.js.map +1 -0
- package/dist/lib/session-parser.d.ts +45 -0
- package/dist/lib/session-parser.js +267 -0
- package/dist/lib/session-parser.js.map +1 -0
- package/dist/lib/state.d.ts +21 -0
- package/dist/lib/state.js +86 -0
- package/dist/lib/state.js.map +1 -0
- package/dist/lib/timeline-db.d.ts +67 -0
- package/dist/lib/timeline-db.js +380 -0
- package/dist/lib/timeline-db.js.map +1 -0
- package/dist/lib/triage.d.ts +29 -0
- package/dist/lib/triage.js +193 -0
- package/dist/lib/triage.js.map +1 -0
- package/dist/profiles.d.ts +3 -0
- package/dist/profiles.js +65 -0
- package/dist/profiles.js.map +1 -0
- package/dist/tools/audit-workspace.d.ts +2 -0
- package/dist/tools/audit-workspace.js +86 -0
- package/dist/tools/audit-workspace.js.map +1 -0
- package/dist/tools/checkpoint.d.ts +2 -0
- package/dist/tools/checkpoint.js +108 -0
- package/dist/tools/checkpoint.js.map +1 -0
- package/dist/tools/clarify-intent.d.ts +2 -0
- package/dist/tools/clarify-intent.js +180 -0
- package/dist/tools/clarify-intent.js.map +1 -0
- package/dist/tools/enrich-agent-task.d.ts +2 -0
- package/dist/tools/enrich-agent-task.js +97 -0
- package/dist/tools/enrich-agent-task.js.map +1 -0
- package/dist/tools/generate-scorecard.d.ts +2 -0
- package/dist/tools/generate-scorecard.js +617 -0
- package/dist/tools/generate-scorecard.js.map +1 -0
- package/dist/tools/log-correction.d.ts +2 -0
- package/dist/tools/log-correction.js +76 -0
- package/dist/tools/log-correction.js.map +1 -0
- package/dist/tools/onboard-project.d.ts +2 -0
- package/dist/tools/onboard-project.js +179 -0
- package/dist/tools/onboard-project.js.map +1 -0
- package/dist/tools/preflight-check.d.ts +2 -0
- package/dist/tools/preflight-check.js +229 -0
- package/dist/tools/preflight-check.js.map +1 -0
- package/dist/tools/prompt-score.d.ts +2 -0
- package/dist/tools/prompt-score.js +132 -0
- package/dist/tools/prompt-score.js.map +1 -0
- package/dist/tools/scan-sessions.d.ts +2 -0
- package/dist/tools/scan-sessions.js +182 -0
- package/dist/tools/scan-sessions.js.map +1 -0
- package/dist/tools/scope-work.d.ts +2 -0
- package/dist/tools/scope-work.js +214 -0
- package/dist/tools/scope-work.js.map +1 -0
- package/dist/tools/search-history.d.ts +2 -0
- package/dist/tools/search-history.js +130 -0
- package/dist/tools/search-history.js.map +1 -0
- package/dist/tools/sequence-tasks.d.ts +2 -0
- package/dist/tools/sequence-tasks.js +165 -0
- package/dist/tools/sequence-tasks.js.map +1 -0
- package/dist/tools/session-handoff.d.ts +2 -0
- package/dist/tools/session-handoff.js +113 -0
- package/dist/tools/session-handoff.js.map +1 -0
- package/dist/tools/session-health.d.ts +2 -0
- package/dist/tools/session-health.js +111 -0
- package/dist/tools/session-health.js.map +1 -0
- package/dist/tools/session-stats.d.ts +2 -0
- package/dist/tools/session-stats.js +112 -0
- package/dist/tools/session-stats.js.map +1 -0
- package/dist/tools/sharpen-followup.d.ts +2 -0
- package/dist/tools/sharpen-followup.js +192 -0
- package/dist/tools/sharpen-followup.js.map +1 -0
- package/dist/tools/timeline-view.d.ts +2 -0
- package/dist/tools/timeline-view.js +165 -0
- package/dist/tools/timeline-view.js.map +1 -0
- package/dist/tools/token-audit.d.ts +2 -0
- package/dist/tools/token-audit.js +227 -0
- package/dist/tools/token-audit.js.map +1 -0
- package/dist/tools/verify-completion.d.ts +2 -0
- package/dist/tools/verify-completion.js +154 -0
- package/dist/tools/verify-completion.js.map +1 -0
- package/dist/tools/what-changed.d.ts +2 -0
- package/dist/tools/what-changed.js +40 -0
- package/dist/tools/what-changed.js.map +1 -0
- package/dist/types.d.ts +78 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/package.json +52 -0
- package/src/cli/init.ts +133 -0
- package/src/index.ts +135 -0
- package/src/lib/config.ts +157 -0
- package/src/lib/embeddings.ts +118 -0
- package/src/lib/files.ts +59 -0
- package/src/lib/git-extractor.ts +137 -0
- package/src/lib/git.ts +89 -0
- package/src/lib/session-parser.ts +325 -0
- package/src/lib/state.ts +86 -0
- package/src/lib/timeline-db.ts +490 -0
- package/src/lib/triage.ts +255 -0
- package/src/profiles.ts +70 -0
- package/src/templates/config.yml +23 -0
- package/src/templates/triage.yml +27 -0
- package/src/tools/audit-workspace.ts +97 -0
- package/src/tools/checkpoint.ts +119 -0
- package/src/tools/clarify-intent.ts +191 -0
- package/src/tools/enrich-agent-task.ts +108 -0
- package/src/tools/generate-scorecard.ts +673 -0
- package/src/tools/log-correction.ts +89 -0
- package/src/tools/onboard-project.ts +214 -0
- package/src/tools/preflight-check.ts +263 -0
- package/src/tools/prompt-score.ts +150 -0
- package/src/tools/scan-sessions.ts +209 -0
- package/src/tools/scope-work.ts +238 -0
- package/src/tools/search-history.ts +145 -0
- package/src/tools/sequence-tasks.ts +182 -0
- package/src/tools/session-handoff.ts +125 -0
- package/src/tools/session-health.ts +107 -0
- package/src/tools/session-stats.ts +134 -0
- package/src/tools/sharpen-followup.ts +200 -0
- package/src/tools/timeline-view.ts +181 -0
- package/src/tools/token-audit.ts +259 -0
- package/src/tools/verify-completion.ts +159 -0
- package/src/tools/what-changed.ts +48 -0
- package/src/types.ts +87 -0
|
@@ -0,0 +1,267 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* session-parser.ts — Parse Claude Code session JSONL files into timeline events.
|
|
3
|
+
*/
|
|
4
|
+
import { readFileSync, readdirSync, statSync, existsSync, createReadStream } from "fs";
|
|
5
|
+
import { join, basename } from "path";
|
|
6
|
+
import { homedir } from "os";
|
|
7
|
+
import { randomUUID } from "crypto";
|
|
8
|
+
import { createInterface } from "readline";
|
|
9
|
+
// ── Constants ──────────────────────────────────────────────────────────────
|
|
10
|
+
const CLAUDE_PROJECTS_DIR = join(homedir(), ".claude", "projects");
|
|
11
|
+
const LARGE_FILE_THRESHOLD = 10 * 1024 * 1024; // 10 MB
|
|
12
|
+
const CORRECTION_PATTERNS = [
|
|
13
|
+
/\bno\b/i, /\bwrong\b/i, /\bnot that\b/i, /\bi meant\b/i,
|
|
14
|
+
/\bactually\b/i, /\binstead\b/i, /\bundo\b/i,
|
|
15
|
+
];
|
|
16
|
+
// ── Helpers ────────────────────────────────────────────────────────────────
|
|
17
|
+
function extractText(content) {
|
|
18
|
+
if (typeof content === "string")
|
|
19
|
+
return content;
|
|
20
|
+
if (Array.isArray(content)) {
|
|
21
|
+
return content
|
|
22
|
+
.filter((b) => b.type === "text" && typeof b.text === "string")
|
|
23
|
+
.map((b) => b.text)
|
|
24
|
+
.join("\n");
|
|
25
|
+
}
|
|
26
|
+
return "";
|
|
27
|
+
}
|
|
28
|
+
function extractToolUseBlocks(content) {
|
|
29
|
+
if (!Array.isArray(content))
|
|
30
|
+
return [];
|
|
31
|
+
return content.filter((b) => b.type === "tool_use");
|
|
32
|
+
}
|
|
33
|
+
function normalizeTimestamp(ts, fallback) {
|
|
34
|
+
if (!ts)
|
|
35
|
+
return fallback;
|
|
36
|
+
if (typeof ts === "string") {
|
|
37
|
+
const d = new Date(ts);
|
|
38
|
+
return isNaN(d.getTime()) ? fallback : d.toISOString();
|
|
39
|
+
}
|
|
40
|
+
if (typeof ts === "number") {
|
|
41
|
+
// epoch seconds or ms
|
|
42
|
+
const d = new Date(ts < 1e12 ? ts * 1000 : ts);
|
|
43
|
+
return isNaN(d.getTime()) ? fallback : d.toISOString();
|
|
44
|
+
}
|
|
45
|
+
return fallback;
|
|
46
|
+
}
|
|
47
|
+
function preview(text, max = 120) {
|
|
48
|
+
const line = text.split("\n")[0] ?? "";
|
|
49
|
+
return line.length > max ? line.slice(0, max) + "…" : line;
|
|
50
|
+
}
|
|
51
|
+
function isCorrection(text) {
|
|
52
|
+
return CORRECTION_PATTERNS.some((p) => p.test(text));
|
|
53
|
+
}
|
|
54
|
+
function makeEvent(partial) {
|
|
55
|
+
return {
|
|
56
|
+
id: randomUUID(),
|
|
57
|
+
content_preview: partial.content_preview ?? preview(partial.content),
|
|
58
|
+
...partial,
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
// ── Public API ─────────────────────────────────────────────────────────────
|
|
62
|
+
/**
|
|
63
|
+
* Discover all Claude project session directories.
|
|
64
|
+
*/
|
|
65
|
+
export function findSessionDirs() {
|
|
66
|
+
if (!existsSync(CLAUDE_PROJECTS_DIR))
|
|
67
|
+
return [];
|
|
68
|
+
const results = [];
|
|
69
|
+
for (const entry of readdirSync(CLAUDE_PROJECTS_DIR, { withFileTypes: true })) {
|
|
70
|
+
if (!entry.isDirectory())
|
|
71
|
+
continue;
|
|
72
|
+
const sessionDir = join(CLAUDE_PROJECTS_DIR, entry.name);
|
|
73
|
+
// Decode project path: leading `-` → `/`, internal `-` are ambiguous
|
|
74
|
+
// but the last path segment is a reasonable "name"
|
|
75
|
+
const decoded = entry.name.replace(/^-/, "/").replace(/-/g, "/");
|
|
76
|
+
const projectName = decoded.split("/").filter(Boolean).pop() ?? entry.name;
|
|
77
|
+
results.push({ project: decoded, projectName, sessionDir });
|
|
78
|
+
}
|
|
79
|
+
return results;
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* List JSONL session files in a project directory (including subagent files).
|
|
83
|
+
*/
|
|
84
|
+
export function findSessionFiles(projectDir) {
|
|
85
|
+
if (!existsSync(projectDir))
|
|
86
|
+
return [];
|
|
87
|
+
const results = [];
|
|
88
|
+
for (const entry of readdirSync(projectDir, { withFileTypes: true })) {
|
|
89
|
+
if (entry.isFile() && entry.name.endsWith(".jsonl")) {
|
|
90
|
+
const p = join(projectDir, entry.name);
|
|
91
|
+
results.push({
|
|
92
|
+
sessionId: basename(entry.name, ".jsonl"),
|
|
93
|
+
path: p,
|
|
94
|
+
mtime: statSync(p).mtime,
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
// Check for subagent dirs: <uuid>/subagents/<sub-uuid>.jsonl
|
|
98
|
+
if (entry.isDirectory()) {
|
|
99
|
+
const subDir = join(projectDir, entry.name, "subagents");
|
|
100
|
+
if (existsSync(subDir)) {
|
|
101
|
+
for (const sub of readdirSync(subDir)) {
|
|
102
|
+
if (sub.endsWith(".jsonl")) {
|
|
103
|
+
const p = join(subDir, sub);
|
|
104
|
+
results.push({
|
|
105
|
+
sessionId: basename(sub, ".jsonl"),
|
|
106
|
+
path: p,
|
|
107
|
+
mtime: statSync(p).mtime,
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
return results;
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Parse a single JSONL session file into timeline events.
|
|
118
|
+
* For files >10MB, streams line-by-line.
|
|
119
|
+
*/
|
|
120
|
+
export function parseSession(filePath, project, projectName) {
|
|
121
|
+
const stat = statSync(filePath);
|
|
122
|
+
const fallbackTs = stat.mtime.toISOString();
|
|
123
|
+
if (stat.size > LARGE_FILE_THRESHOLD) {
|
|
124
|
+
// Return empty — caller should use parseSessionAsync for large files
|
|
125
|
+
// But for sync API compat, read anyway with a buffer
|
|
126
|
+
}
|
|
127
|
+
const lines = readFileSync(filePath, "utf-8").split("\n");
|
|
128
|
+
return parseLinesSync(lines, filePath, project, projectName, fallbackTs);
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Async streaming parser for large files.
|
|
132
|
+
*/
|
|
133
|
+
export async function parseSessionAsync(filePath, project, projectName) {
|
|
134
|
+
const stat = statSync(filePath);
|
|
135
|
+
const fallbackTs = stat.mtime.toISOString();
|
|
136
|
+
const events = [];
|
|
137
|
+
let branch = "";
|
|
138
|
+
let sessionId = basename(filePath, ".jsonl");
|
|
139
|
+
let lastType = "";
|
|
140
|
+
let lineNum = 0;
|
|
141
|
+
const rl = createInterface({ input: createReadStream(filePath, "utf-8"), crlfDelay: Infinity });
|
|
142
|
+
for await (const line of rl) {
|
|
143
|
+
lineNum++;
|
|
144
|
+
if (!line.trim())
|
|
145
|
+
continue;
|
|
146
|
+
let obj;
|
|
147
|
+
try {
|
|
148
|
+
obj = JSON.parse(line);
|
|
149
|
+
}
|
|
150
|
+
catch {
|
|
151
|
+
process.stderr.write(`[session-parser] malformed line ${lineNum} in ${filePath}\n`);
|
|
152
|
+
continue;
|
|
153
|
+
}
|
|
154
|
+
const evts = processRecord(obj, filePath, project, projectName, branch, sessionId, fallbackTs, lineNum, lastType);
|
|
155
|
+
if (obj.type === "summary") {
|
|
156
|
+
branch = obj.gitBranch ?? "";
|
|
157
|
+
if (obj.sessionId)
|
|
158
|
+
sessionId = obj.sessionId;
|
|
159
|
+
}
|
|
160
|
+
if (obj.type === "user" || obj.type === "assistant")
|
|
161
|
+
lastType = obj.type;
|
|
162
|
+
events.push(...evts);
|
|
163
|
+
}
|
|
164
|
+
return events;
|
|
165
|
+
}
|
|
166
|
+
// ── Internal ───────────────────────────────────────────────────────────────
|
|
167
|
+
function parseLinesSync(lines, filePath, project, projectName, fallbackTs) {
|
|
168
|
+
const events = [];
|
|
169
|
+
let branch = "";
|
|
170
|
+
let sessionId = basename(filePath, ".jsonl");
|
|
171
|
+
let lastType = "";
|
|
172
|
+
for (let i = 0; i < lines.length; i++) {
|
|
173
|
+
const line = lines[i].trim();
|
|
174
|
+
if (!line)
|
|
175
|
+
continue;
|
|
176
|
+
let obj;
|
|
177
|
+
try {
|
|
178
|
+
obj = JSON.parse(line);
|
|
179
|
+
}
|
|
180
|
+
catch {
|
|
181
|
+
process.stderr.write(`[session-parser] malformed line ${i + 1} in ${filePath}\n`);
|
|
182
|
+
continue;
|
|
183
|
+
}
|
|
184
|
+
if (obj.type === "summary") {
|
|
185
|
+
branch = obj.gitBranch ?? "";
|
|
186
|
+
if (obj.sessionId)
|
|
187
|
+
sessionId = obj.sessionId;
|
|
188
|
+
continue;
|
|
189
|
+
}
|
|
190
|
+
const evts = processRecord(obj, filePath, project, projectName, branch, sessionId, fallbackTs, i + 1, lastType);
|
|
191
|
+
if (obj.type === "user" || obj.type === "assistant")
|
|
192
|
+
lastType = obj.type;
|
|
193
|
+
events.push(...evts);
|
|
194
|
+
}
|
|
195
|
+
return events;
|
|
196
|
+
}
|
|
197
|
+
function processRecord(obj, filePath, project, projectName, branch, sessionId, fallbackTs, lineNum, lastType) {
|
|
198
|
+
const ts = normalizeTimestamp(obj.timestamp, fallbackTs);
|
|
199
|
+
const base = { project, project_name: projectName, branch, session_id: sessionId, source_file: filePath, source_line: lineNum };
|
|
200
|
+
const events = [];
|
|
201
|
+
if (obj.type === "user") {
|
|
202
|
+
const text = extractText(obj.message?.content);
|
|
203
|
+
if (!text)
|
|
204
|
+
return events;
|
|
205
|
+
const isCorr = lastType === "assistant" && isCorrection(text);
|
|
206
|
+
events.push(makeEvent({ ...base, timestamp: ts, type: isCorr ? "correction" : "prompt", content: text, metadata: "{}" }));
|
|
207
|
+
}
|
|
208
|
+
else if (obj.type === "assistant") {
|
|
209
|
+
const content = obj.message?.content;
|
|
210
|
+
const text = extractText(content);
|
|
211
|
+
if (text) {
|
|
212
|
+
events.push(makeEvent({ ...base, timestamp: ts, type: "assistant", content: text, metadata: JSON.stringify({ model: obj.model ?? "" }) }));
|
|
213
|
+
}
|
|
214
|
+
for (const tool of extractToolUseBlocks(content)) {
|
|
215
|
+
const name = tool.name ?? "unknown";
|
|
216
|
+
const argsStr = typeof tool.input === "string" ? tool.input : JSON.stringify(tool.input ?? {});
|
|
217
|
+
const isSub = name === "Task" || name === "dispatch_agent";
|
|
218
|
+
events.push(makeEvent({
|
|
219
|
+
...base,
|
|
220
|
+
timestamp: ts,
|
|
221
|
+
type: isSub ? "sub_agent_spawn" : "tool_call",
|
|
222
|
+
content: `${name}: ${argsStr.slice(0, 100)}`,
|
|
223
|
+
metadata: JSON.stringify({ tool: name }),
|
|
224
|
+
}));
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
else if (obj.type === "tool_result") {
|
|
228
|
+
const isErr = obj.is_error === true || (typeof obj.content === "string" && /stderr/i.test(obj.content));
|
|
229
|
+
if (isErr) {
|
|
230
|
+
const text = extractText(obj.content) || JSON.stringify(obj.content ?? "").slice(0, 200);
|
|
231
|
+
events.push(makeEvent({ ...base, timestamp: ts, type: "error", content: text, metadata: JSON.stringify({ tool_use_id: obj.tool_use_id ?? "" }) }));
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
else if (obj.type === "system") {
|
|
235
|
+
const text = extractText(obj.message?.content ?? obj.content ?? "");
|
|
236
|
+
if (/compact/i.test(text) || obj.subtype === "compaction") {
|
|
237
|
+
events.push(makeEvent({ ...base, timestamp: ts, type: "compaction", content: text || "context compacted", metadata: "{}" }));
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
return events;
|
|
241
|
+
}
|
|
242
|
+
/**
|
|
243
|
+
* Parse all sessions for a project directory, optionally filtering by mtime.
|
|
244
|
+
*/
|
|
245
|
+
export function parseAllSessions(projectDir, opts) {
|
|
246
|
+
const files = findSessionFiles(projectDir);
|
|
247
|
+
const { project, projectName } = inferProject(projectDir);
|
|
248
|
+
const events = [];
|
|
249
|
+
for (const f of files) {
|
|
250
|
+
if (opts?.since && f.mtime < opts.since)
|
|
251
|
+
continue;
|
|
252
|
+
try {
|
|
253
|
+
events.push(...parseSession(f.path, project, projectName));
|
|
254
|
+
}
|
|
255
|
+
catch (err) {
|
|
256
|
+
process.stderr.write(`[session-parser] failed to parse ${f.path}: ${err}\n`);
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
return events.sort((a, b) => a.timestamp.localeCompare(b.timestamp));
|
|
260
|
+
}
|
|
261
|
+
function inferProject(projectDir) {
|
|
262
|
+
const dir = basename(projectDir);
|
|
263
|
+
const decoded = dir.replace(/^-/, "/").replace(/-/g, "/");
|
|
264
|
+
const projectName = decoded.split("/").filter(Boolean).pop() ?? dir;
|
|
265
|
+
return { project: decoded, projectName };
|
|
266
|
+
}
|
|
267
|
+
//# sourceMappingURL=session-parser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-parser.js","sourceRoot":"","sources":["../../src/lib/session-parser.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export declare const STATE_DIR: string;
|
|
2
|
+
/**
|
|
3
|
+
* Load a JSON state file by name (without extension).
|
|
4
|
+
* Returns empty object if missing or corrupt.
|
|
5
|
+
*/
|
|
6
|
+
export declare function loadState(name: string): Record<string, any>;
|
|
7
|
+
/**
|
|
8
|
+
* Save a JSON state file by name (without extension).
|
|
9
|
+
*/
|
|
10
|
+
export declare function saveState(name: string, data: Record<string, any>): void;
|
|
11
|
+
/**
|
|
12
|
+
* Append a JSONL entry to a log file. Rotates if file exceeds MAX_LOG_SIZE.
|
|
13
|
+
*/
|
|
14
|
+
export declare function appendLog(filename: string, entry: Record<string, any>): void;
|
|
15
|
+
/**
|
|
16
|
+
* Read a JSONL log file. Pass `lastN` to only return the last N entries
|
|
17
|
+
* (still reads the file, but avoids allocating all parsed objects).
|
|
18
|
+
*/
|
|
19
|
+
export declare function readLog(filename: string, lastN?: number): Record<string, any>[];
|
|
20
|
+
/** ISO timestamp for the current moment. */
|
|
21
|
+
export declare function now(): string;
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import { readFileSync, writeFileSync, existsSync, mkdirSync, appendFileSync, statSync, renameSync } from "fs";
|
|
2
|
+
import { join } from "path";
|
|
3
|
+
import { PROJECT_DIR } from "./files.js";
|
|
4
|
+
export const STATE_DIR = join(PROJECT_DIR, ".claude", "preflight-state");
|
|
5
|
+
/** Max log file size in bytes (5 MB). Triggers rotation. */
|
|
6
|
+
const MAX_LOG_SIZE = 5 * 1024 * 1024;
|
|
7
|
+
/** Lazily ensures the state directory exists. Called before any write. */
|
|
8
|
+
function ensureStateDir() {
|
|
9
|
+
if (!existsSync(STATE_DIR)) {
|
|
10
|
+
mkdirSync(STATE_DIR, { recursive: true });
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Load a JSON state file by name (without extension).
|
|
15
|
+
* Returns empty object if missing or corrupt.
|
|
16
|
+
*/
|
|
17
|
+
export function loadState(name) {
|
|
18
|
+
const p = join(STATE_DIR, `${name}.json`);
|
|
19
|
+
if (!existsSync(p))
|
|
20
|
+
return {};
|
|
21
|
+
try {
|
|
22
|
+
return JSON.parse(readFileSync(p, "utf-8"));
|
|
23
|
+
}
|
|
24
|
+
catch {
|
|
25
|
+
return {};
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Save a JSON state file by name (without extension).
|
|
30
|
+
*/
|
|
31
|
+
export function saveState(name, data) {
|
|
32
|
+
ensureStateDir();
|
|
33
|
+
writeFileSync(join(STATE_DIR, `${name}.json`), JSON.stringify(data, null, 2));
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Append a JSONL entry to a log file. Rotates if file exceeds MAX_LOG_SIZE.
|
|
37
|
+
*/
|
|
38
|
+
export function appendLog(filename, entry) {
|
|
39
|
+
ensureStateDir();
|
|
40
|
+
const logFile = join(STATE_DIR, filename);
|
|
41
|
+
// Rotate if too large
|
|
42
|
+
if (existsSync(logFile)) {
|
|
43
|
+
try {
|
|
44
|
+
const size = statSync(logFile).size;
|
|
45
|
+
if (size > MAX_LOG_SIZE) {
|
|
46
|
+
const backup = logFile + ".old";
|
|
47
|
+
// Keep only one backup; overwrite previous
|
|
48
|
+
renameSync(logFile, backup);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
catch { /* stat/rename failure is non-fatal */ }
|
|
52
|
+
}
|
|
53
|
+
appendFileSync(logFile, JSON.stringify(entry) + "\n");
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Read a JSONL log file. Pass `lastN` to only return the last N entries
|
|
57
|
+
* (still reads the file, but avoids allocating all parsed objects).
|
|
58
|
+
*/
|
|
59
|
+
export function readLog(filename, lastN) {
|
|
60
|
+
const logFile = join(STATE_DIR, filename);
|
|
61
|
+
if (!existsSync(logFile))
|
|
62
|
+
return [];
|
|
63
|
+
try {
|
|
64
|
+
const raw = readFileSync(logFile, "utf-8").trim();
|
|
65
|
+
if (!raw)
|
|
66
|
+
return [];
|
|
67
|
+
const lines = raw.split("\n");
|
|
68
|
+
const subset = lastN != null && lastN > 0 ? lines.slice(-lastN) : lines;
|
|
69
|
+
const results = [];
|
|
70
|
+
for (const line of subset) {
|
|
71
|
+
try {
|
|
72
|
+
results.push(JSON.parse(line));
|
|
73
|
+
}
|
|
74
|
+
catch { /* skip corrupt line */ }
|
|
75
|
+
}
|
|
76
|
+
return results;
|
|
77
|
+
}
|
|
78
|
+
catch {
|
|
79
|
+
return [];
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
/** ISO timestamp for the current moment. */
|
|
83
|
+
export function now() {
|
|
84
|
+
return new Date().toISOString();
|
|
85
|
+
}
|
|
86
|
+
//# sourceMappingURL=state.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"state.js","sourceRoot":"","sources":["../../src/lib/state.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import * as lancedb from "@lancedb/lancedb";
|
|
2
|
+
import type { ProjectMeta, ProjectRegistry } from "../types.js";
|
|
3
|
+
export declare const EVENT_TYPES: readonly ["prompt", "assistant", "correction", "commit", "tool_call", "compaction", "sub_agent_spawn", "error"];
|
|
4
|
+
export type EventType = (typeof EVENT_TYPES)[number];
|
|
5
|
+
export interface TimelineEvent {
|
|
6
|
+
id?: string;
|
|
7
|
+
timestamp: string;
|
|
8
|
+
type: EventType;
|
|
9
|
+
project: string;
|
|
10
|
+
project_name?: string;
|
|
11
|
+
branch: string;
|
|
12
|
+
session_id: string;
|
|
13
|
+
source_file: string;
|
|
14
|
+
source_line: number;
|
|
15
|
+
content: string;
|
|
16
|
+
content_preview?: string;
|
|
17
|
+
vector?: number[];
|
|
18
|
+
metadata?: string;
|
|
19
|
+
}
|
|
20
|
+
export interface TimelineRecord extends Required<TimelineEvent> {
|
|
21
|
+
}
|
|
22
|
+
export interface SearchOptions {
|
|
23
|
+
project_dirs?: string[];
|
|
24
|
+
project?: string;
|
|
25
|
+
branch?: string;
|
|
26
|
+
type?: EventType;
|
|
27
|
+
since?: string;
|
|
28
|
+
until?: string;
|
|
29
|
+
limit?: number;
|
|
30
|
+
offset?: number;
|
|
31
|
+
}
|
|
32
|
+
export interface ProjectInfo {
|
|
33
|
+
project: string;
|
|
34
|
+
project_name: string;
|
|
35
|
+
hash: string;
|
|
36
|
+
event_count: number;
|
|
37
|
+
last_session_index?: string;
|
|
38
|
+
last_git_index?: string;
|
|
39
|
+
}
|
|
40
|
+
export interface TimelineConfig {
|
|
41
|
+
embedding_provider: "local" | "openai";
|
|
42
|
+
embedding_model: string;
|
|
43
|
+
openai_api_key?: string;
|
|
44
|
+
indexed_projects: Record<string, {
|
|
45
|
+
last_session_index: string;
|
|
46
|
+
last_git_index: string;
|
|
47
|
+
event_count: number;
|
|
48
|
+
}>;
|
|
49
|
+
}
|
|
50
|
+
export declare function loadConfig(): Promise<TimelineConfig>;
|
|
51
|
+
export declare function saveConfig(config: TimelineConfig): Promise<void>;
|
|
52
|
+
export declare function loadProjectRegistry(): Promise<ProjectRegistry>;
|
|
53
|
+
export declare function saveProjectRegistry(registry: ProjectRegistry): Promise<void>;
|
|
54
|
+
export declare function registerProject(projectDir: string): Promise<void>;
|
|
55
|
+
export declare function loadProjectMeta(projectDir: string): Promise<ProjectMeta | null>;
|
|
56
|
+
export declare function saveProjectMeta(projectDir: string, meta: ProjectMeta): Promise<void>;
|
|
57
|
+
export declare function getDb(projectDir: string): Promise<lancedb.Connection>;
|
|
58
|
+
export declare function getEventsTable(projectDir: string): Promise<lancedb.Table>;
|
|
59
|
+
export declare function insertEvents(events: TimelineEvent[], projectDir?: string): Promise<void>;
|
|
60
|
+
/** Search across multiple projects and merge results by score */
|
|
61
|
+
export declare function searchSemantic(query: string, opts?: SearchOptions): Promise<TimelineRecord[]>;
|
|
62
|
+
export declare function searchExact(query: string, opts?: SearchOptions): Promise<TimelineRecord[]>;
|
|
63
|
+
export declare function getTimeline(opts?: SearchOptions): Promise<TimelineRecord[]>;
|
|
64
|
+
export declare function listIndexedProjects(): Promise<ProjectInfo[]>;
|
|
65
|
+
export declare function getIndexedProjects(): Promise<ProjectInfo[]>;
|
|
66
|
+
export declare function getLastIndexedTimestamp(project: string, source: "session" | "git"): Promise<string | null>;
|
|
67
|
+
export declare function updateLastIndexedTimestamp(project: string, source: "session" | "git", timestamp: string): Promise<void>;
|