promptvc 0.1.0 → 0.1.4
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/dist/capture.d.ts +8 -0
- package/dist/capture.d.ts.map +1 -0
- package/dist/capture.js +383 -0
- package/dist/capture.js.map +1 -0
- package/dist/proxyCodex.d.ts.map +1 -1
- package/dist/proxyCodex.js +14 -1
- package/dist/proxyCodex.js.map +1 -1
- package/dist/redact.d.ts +2 -0
- package/dist/redact.d.ts.map +1 -0
- package/dist/redact.js +35 -0
- package/dist/redact.js.map +1 -0
- package/dist/store.d.ts.map +1 -1
- package/dist/store.js +23 -4
- package/dist/store.js.map +1 -1
- package/hooks/codex-notify.sh +70 -5
- package/package.json +3 -3
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capture.d.ts","sourceRoot":"","sources":["../src/capture.ts"],"names":[],"mappings":"AA6SA,wBAAsB,sBAAsB,CAAC,OAAO,CAAC,EAAE;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA4B3F;AAED,wBAAsB,oBAAoB,CAAC,OAAO,CAAC,EAAE;IACnD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,GAAG,OAAO,CAAC,IAAI,CAAC,CA+IhB"}
|
package/dist/capture.js
ADDED
|
@@ -0,0 +1,383 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.prepareCaptureBaseline = prepareCaptureBaseline;
|
|
7
|
+
exports.capturePromptChanges = capturePromptChanges;
|
|
8
|
+
const fs_1 = __importDefault(require("fs"));
|
|
9
|
+
const path_1 = __importDefault(require("path"));
|
|
10
|
+
const child_process_1 = require("child_process");
|
|
11
|
+
const git_1 = require("./git");
|
|
12
|
+
const store_1 = require("./store");
|
|
13
|
+
const PROMPTVC_DIR_NAME = '.promptvc';
|
|
14
|
+
const STATE_FILE_NAME = 'notify_state.json';
|
|
15
|
+
const INDEX_DIR_NAME = 'indexes';
|
|
16
|
+
const PENDING_BASELINE_FILE_NAME = 'pending_baseline.json';
|
|
17
|
+
const SYSTEM_PROMPT_MARKERS = [
|
|
18
|
+
'# AGENTS.md',
|
|
19
|
+
'<INSTRUCTIONS>',
|
|
20
|
+
'<environment_context>',
|
|
21
|
+
'## Skills',
|
|
22
|
+
'These skills are discovered at startup',
|
|
23
|
+
'skill-creator:',
|
|
24
|
+
'skill-installer:',
|
|
25
|
+
];
|
|
26
|
+
function runGit(args, repoRoot, indexFile, allowFailure = false) {
|
|
27
|
+
try {
|
|
28
|
+
const env = indexFile
|
|
29
|
+
? { ...process.env, GIT_INDEX_FILE: indexFile }
|
|
30
|
+
: process.env;
|
|
31
|
+
return (0, child_process_1.execFileSync)('git', args, { cwd: repoRoot, env, encoding: 'utf-8' });
|
|
32
|
+
}
|
|
33
|
+
catch (error) {
|
|
34
|
+
if (allowFailure) {
|
|
35
|
+
return '';
|
|
36
|
+
}
|
|
37
|
+
throw error;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
function readJsonFile(filePath, fallback) {
|
|
41
|
+
try {
|
|
42
|
+
if (!fs_1.default.existsSync(filePath)) {
|
|
43
|
+
return fallback;
|
|
44
|
+
}
|
|
45
|
+
const content = fs_1.default.readFileSync(filePath, 'utf-8');
|
|
46
|
+
return JSON.parse(content);
|
|
47
|
+
}
|
|
48
|
+
catch (error) {
|
|
49
|
+
return fallback;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
function writeJsonFile(filePath, value) {
|
|
53
|
+
fs_1.default.writeFileSync(filePath, JSON.stringify(value, null, 2));
|
|
54
|
+
}
|
|
55
|
+
function isSystemPrompt(prompt) {
|
|
56
|
+
return SYSTEM_PROMPT_MARKERS.some(marker => prompt.startsWith(marker) || prompt.includes(marker));
|
|
57
|
+
}
|
|
58
|
+
function parseSessionPrompts(sessionFile) {
|
|
59
|
+
const content = fs_1.default.readFileSync(sessionFile, 'utf-8');
|
|
60
|
+
const lines = content.split('\n').filter(line => line.trim());
|
|
61
|
+
const prompts = [];
|
|
62
|
+
for (const line of lines) {
|
|
63
|
+
try {
|
|
64
|
+
const entry = JSON.parse(line);
|
|
65
|
+
if (entry.type === 'response_item' &&
|
|
66
|
+
entry.payload?.role === 'user' &&
|
|
67
|
+
entry.payload?.content?.[0]?.text) {
|
|
68
|
+
const promptText = entry.payload.content[0].text;
|
|
69
|
+
if (!isSystemPrompt(promptText)) {
|
|
70
|
+
prompts.push(promptText);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
catch (error) {
|
|
75
|
+
continue;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
return prompts;
|
|
79
|
+
}
|
|
80
|
+
function listSessionFiles(dir) {
|
|
81
|
+
if (!fs_1.default.existsSync(dir)) {
|
|
82
|
+
return [];
|
|
83
|
+
}
|
|
84
|
+
const entries = fs_1.default.readdirSync(dir, { withFileTypes: true });
|
|
85
|
+
const files = [];
|
|
86
|
+
for (const entry of entries) {
|
|
87
|
+
const fullPath = path_1.default.join(dir, entry.name);
|
|
88
|
+
if (entry.isDirectory()) {
|
|
89
|
+
files.push(...listSessionFiles(fullPath));
|
|
90
|
+
}
|
|
91
|
+
else if (entry.isFile() && entry.name.startsWith('rollout-') && entry.name.endsWith('.jsonl')) {
|
|
92
|
+
files.push(fullPath);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
return files;
|
|
96
|
+
}
|
|
97
|
+
function findLatestSessionFile(homeDir) {
|
|
98
|
+
const sessionsDir = path_1.default.join(homeDir, '.codex', 'sessions');
|
|
99
|
+
const files = listSessionFiles(sessionsDir);
|
|
100
|
+
if (files.length === 0) {
|
|
101
|
+
return null;
|
|
102
|
+
}
|
|
103
|
+
let latestFile = files[0];
|
|
104
|
+
let latestTime = fs_1.default.statSync(latestFile).mtimeMs;
|
|
105
|
+
for (const file of files.slice(1)) {
|
|
106
|
+
const mtime = fs_1.default.statSync(file).mtimeMs;
|
|
107
|
+
if (mtime > latestTime) {
|
|
108
|
+
latestTime = mtime;
|
|
109
|
+
latestFile = file;
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
return latestFile;
|
|
113
|
+
}
|
|
114
|
+
function resolveSessionFileFromEnv() {
|
|
115
|
+
const candidates = [
|
|
116
|
+
process.env.CODEX_SESSION_FILE,
|
|
117
|
+
process.env.CODEX_SESSION_PATH,
|
|
118
|
+
];
|
|
119
|
+
for (const candidate of candidates) {
|
|
120
|
+
if (!candidate) {
|
|
121
|
+
continue;
|
|
122
|
+
}
|
|
123
|
+
const trimmed = candidate.trim();
|
|
124
|
+
if (trimmed && fs_1.default.existsSync(trimmed)) {
|
|
125
|
+
return trimmed;
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
return null;
|
|
129
|
+
}
|
|
130
|
+
function initIndexFile(indexFile, repoRoot, includeWorkingTree = true) {
|
|
131
|
+
fs_1.default.mkdirSync(path_1.default.dirname(indexFile), { recursive: true });
|
|
132
|
+
runGit(['read-tree', 'HEAD'], repoRoot, indexFile, true);
|
|
133
|
+
if (includeWorkingTree) {
|
|
134
|
+
runGit(['add', '-A'], repoRoot, indexFile, true);
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
function refreshIndexFile(indexFile, repoRoot) {
|
|
138
|
+
runGit(['add', '-A'], repoRoot, indexFile, true);
|
|
139
|
+
}
|
|
140
|
+
function getDiffAgainstIndex(repoRoot, indexFile) {
|
|
141
|
+
const diff = runGit(['diff'], repoRoot, indexFile, true);
|
|
142
|
+
const filesOutput = runGit(['diff', '--name-only'], repoRoot, indexFile, true).trim();
|
|
143
|
+
const files = filesOutput ? filesOutput.split('\n').filter(Boolean) : [];
|
|
144
|
+
return { diff, files };
|
|
145
|
+
}
|
|
146
|
+
function writeTreeFromIndex(repoRoot, indexFile) {
|
|
147
|
+
return runGit(['write-tree'], repoRoot, indexFile, true).trim();
|
|
148
|
+
}
|
|
149
|
+
function getDiffBetweenTrees(repoRoot, baseTree, nextTree) {
|
|
150
|
+
if (!baseTree || !nextTree || baseTree === nextTree) {
|
|
151
|
+
return { diff: '', files: [] };
|
|
152
|
+
}
|
|
153
|
+
const diff = runGit(['diff', baseTree, nextTree], repoRoot, undefined, true);
|
|
154
|
+
const filesOutput = runGit(['diff', '--name-only', baseTree, nextTree], repoRoot, undefined, true).trim();
|
|
155
|
+
const files = filesOutput ? filesOutput.split('\n').filter(Boolean) : [];
|
|
156
|
+
return { diff, files };
|
|
157
|
+
}
|
|
158
|
+
function mergeFiles(existing, incoming) {
|
|
159
|
+
const merged = new Set(existing);
|
|
160
|
+
for (const file of incoming) {
|
|
161
|
+
merged.add(file);
|
|
162
|
+
}
|
|
163
|
+
return Array.from(merged);
|
|
164
|
+
}
|
|
165
|
+
function responseSnippet(promptCount) {
|
|
166
|
+
return `Interactive session: ${promptCount} prompt${promptCount === 1 ? '' : 's'}`;
|
|
167
|
+
}
|
|
168
|
+
async function safeGetBranch(repoRoot) {
|
|
169
|
+
try {
|
|
170
|
+
return await (0, git_1.getBranch)(repoRoot);
|
|
171
|
+
}
|
|
172
|
+
catch (error) {
|
|
173
|
+
return '';
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
async function safeGetHeadHash(repoRoot) {
|
|
177
|
+
try {
|
|
178
|
+
return await (0, git_1.getHeadHash)(repoRoot);
|
|
179
|
+
}
|
|
180
|
+
catch (error) {
|
|
181
|
+
return '';
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
function readSessions(repoRoot) {
|
|
185
|
+
const sessionsPath = path_1.default.join(repoRoot, PROMPTVC_DIR_NAME, 'sessions.json');
|
|
186
|
+
return readJsonFile(sessionsPath, []);
|
|
187
|
+
}
|
|
188
|
+
function writeSessions(repoRoot, sessions) {
|
|
189
|
+
const sessionsPath = path_1.default.join(repoRoot, PROMPTVC_DIR_NAME, 'sessions.json');
|
|
190
|
+
writeJsonFile(sessionsPath, sessions);
|
|
191
|
+
}
|
|
192
|
+
function endSession(sessions, sessionId, endedAt) {
|
|
193
|
+
const session = sessions.find(item => item.id === sessionId);
|
|
194
|
+
if (!session) {
|
|
195
|
+
return;
|
|
196
|
+
}
|
|
197
|
+
session.inProgress = false;
|
|
198
|
+
session.endedAt = endedAt;
|
|
199
|
+
}
|
|
200
|
+
function applyPromptChanges(sessions, sessionId, repoRoot, branch, timestamp, latestPrompt, headHash, preHash, sessionDiff, promptChanges) {
|
|
201
|
+
const existing = sessions.find(session => session.id === sessionId);
|
|
202
|
+
const promptCount = (existing?.perPromptChanges?.length || 0) + promptChanges.length;
|
|
203
|
+
if (existing) {
|
|
204
|
+
existing.provider = 'codex';
|
|
205
|
+
existing.repoRoot = repoRoot;
|
|
206
|
+
existing.branch = branch;
|
|
207
|
+
existing.prompt = latestPrompt;
|
|
208
|
+
existing.diff = sessionDiff.diff;
|
|
209
|
+
existing.mode = 'interactive';
|
|
210
|
+
existing.autoTagged = true;
|
|
211
|
+
existing.inProgress = true;
|
|
212
|
+
existing.updatedAt = timestamp;
|
|
213
|
+
existing.preHash = existing.preHash || preHash || headHash;
|
|
214
|
+
existing.postHash = existing.postHash ?? null;
|
|
215
|
+
existing.createdAt = existing.createdAt || timestamp;
|
|
216
|
+
existing.files = mergeFiles(existing.files || [], sessionDiff.files);
|
|
217
|
+
existing.perPromptChanges = (existing.perPromptChanges || []).concat(promptChanges);
|
|
218
|
+
existing.responseSnippet = responseSnippet(promptCount);
|
|
219
|
+
}
|
|
220
|
+
else {
|
|
221
|
+
const newSession = {
|
|
222
|
+
id: sessionId,
|
|
223
|
+
provider: 'codex',
|
|
224
|
+
repoRoot,
|
|
225
|
+
branch,
|
|
226
|
+
preHash: preHash || headHash,
|
|
227
|
+
postHash: null,
|
|
228
|
+
prompt: latestPrompt,
|
|
229
|
+
responseSnippet: responseSnippet(promptChanges.length),
|
|
230
|
+
files: sessionDiff.files,
|
|
231
|
+
diff: sessionDiff.diff,
|
|
232
|
+
createdAt: timestamp,
|
|
233
|
+
updatedAt: timestamp,
|
|
234
|
+
mode: 'interactive',
|
|
235
|
+
autoTagged: true,
|
|
236
|
+
inProgress: true,
|
|
237
|
+
perPromptChanges: promptChanges,
|
|
238
|
+
};
|
|
239
|
+
sessions.unshift(newSession);
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
async function prepareCaptureBaseline(options) {
|
|
243
|
+
let repoRoot;
|
|
244
|
+
try {
|
|
245
|
+
repoRoot = options?.repoRoot || await (0, git_1.getRepoRoot)();
|
|
246
|
+
}
|
|
247
|
+
catch (error) {
|
|
248
|
+
return;
|
|
249
|
+
}
|
|
250
|
+
(0, store_1.initDb)(repoRoot);
|
|
251
|
+
const promptvcDir = path_1.default.join(repoRoot, PROMPTVC_DIR_NAME);
|
|
252
|
+
const indexDir = path_1.default.join(promptvcDir, INDEX_DIR_NAME);
|
|
253
|
+
const baseIndexFile = path_1.default.join(indexDir, 'pending-base.index');
|
|
254
|
+
const promptIndexFile = path_1.default.join(indexDir, 'pending-prompt.index');
|
|
255
|
+
const preHash = await safeGetHeadHash(repoRoot);
|
|
256
|
+
const pendingPath = path_1.default.join(promptvcDir, PENDING_BASELINE_FILE_NAME);
|
|
257
|
+
initIndexFile(baseIndexFile, repoRoot);
|
|
258
|
+
initIndexFile(promptIndexFile, repoRoot);
|
|
259
|
+
const pending = {
|
|
260
|
+
baseIndexFile,
|
|
261
|
+
promptIndexFile,
|
|
262
|
+
preHash,
|
|
263
|
+
createdAt: new Date().toISOString(),
|
|
264
|
+
};
|
|
265
|
+
writeJsonFile(pendingPath, pending);
|
|
266
|
+
}
|
|
267
|
+
async function capturePromptChanges(options) {
|
|
268
|
+
let repoRoot;
|
|
269
|
+
try {
|
|
270
|
+
repoRoot = options?.repoRoot || await (0, git_1.getRepoRoot)();
|
|
271
|
+
}
|
|
272
|
+
catch (error) {
|
|
273
|
+
return;
|
|
274
|
+
}
|
|
275
|
+
(0, store_1.initDb)(repoRoot);
|
|
276
|
+
const homeDir = process.env.HOME || process.env.USERPROFILE;
|
|
277
|
+
if (!homeDir) {
|
|
278
|
+
return;
|
|
279
|
+
}
|
|
280
|
+
const sessionFile = options?.sessionFile || resolveSessionFileFromEnv() || findLatestSessionFile(homeDir);
|
|
281
|
+
if (!sessionFile || !fs_1.default.existsSync(sessionFile)) {
|
|
282
|
+
return;
|
|
283
|
+
}
|
|
284
|
+
const prompts = parseSessionPrompts(sessionFile);
|
|
285
|
+
if (prompts.length === 0) {
|
|
286
|
+
return;
|
|
287
|
+
}
|
|
288
|
+
const promptvcDir = path_1.default.join(repoRoot, PROMPTVC_DIR_NAME);
|
|
289
|
+
const statePath = path_1.default.join(promptvcDir, STATE_FILE_NAME);
|
|
290
|
+
const pendingPath = path_1.default.join(promptvcDir, PENDING_BASELINE_FILE_NAME);
|
|
291
|
+
const sessions = readSessions(repoRoot);
|
|
292
|
+
const timestamp = new Date().toISOString();
|
|
293
|
+
let state = readJsonFile(statePath, null);
|
|
294
|
+
const sessionId = path_1.default.basename(sessionFile, '.jsonl');
|
|
295
|
+
if (!state || state.sessionFile !== sessionFile) {
|
|
296
|
+
if (state?.sessionId) {
|
|
297
|
+
endSession(sessions, state.sessionId, timestamp);
|
|
298
|
+
}
|
|
299
|
+
const indexDir = path_1.default.join(promptvcDir, INDEX_DIR_NAME);
|
|
300
|
+
let baseIndexFile = path_1.default.join(indexDir, `${sessionId}-base.index`);
|
|
301
|
+
let promptIndexFile = path_1.default.join(indexDir, `${sessionId}-prompt.index`);
|
|
302
|
+
let preHash = await safeGetHeadHash(repoRoot);
|
|
303
|
+
const pending = readJsonFile(pendingPath, null);
|
|
304
|
+
if (pending && fs_1.default.existsSync(pending.baseIndexFile) && fs_1.default.existsSync(pending.promptIndexFile)) {
|
|
305
|
+
fs_1.default.mkdirSync(indexDir, { recursive: true });
|
|
306
|
+
try {
|
|
307
|
+
fs_1.default.renameSync(pending.baseIndexFile, baseIndexFile);
|
|
308
|
+
fs_1.default.renameSync(pending.promptIndexFile, promptIndexFile);
|
|
309
|
+
preHash = pending.preHash || preHash;
|
|
310
|
+
}
|
|
311
|
+
catch (error) {
|
|
312
|
+
initIndexFile(baseIndexFile, repoRoot, false);
|
|
313
|
+
initIndexFile(promptIndexFile, repoRoot, false);
|
|
314
|
+
}
|
|
315
|
+
try {
|
|
316
|
+
fs_1.default.unlinkSync(pendingPath);
|
|
317
|
+
}
|
|
318
|
+
catch (error) {
|
|
319
|
+
// Ignore stale pending baseline cleanup failures.
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
else {
|
|
323
|
+
initIndexFile(baseIndexFile, repoRoot, false);
|
|
324
|
+
initIndexFile(promptIndexFile, repoRoot, false);
|
|
325
|
+
}
|
|
326
|
+
state = {
|
|
327
|
+
sessionFile,
|
|
328
|
+
sessionId,
|
|
329
|
+
promptCount: 0,
|
|
330
|
+
baseIndexFile,
|
|
331
|
+
promptIndexFile,
|
|
332
|
+
preHash,
|
|
333
|
+
};
|
|
334
|
+
}
|
|
335
|
+
const currentCount = prompts.length;
|
|
336
|
+
if (currentCount <= state.promptCount) {
|
|
337
|
+
writeJsonFile(statePath, state);
|
|
338
|
+
writeSessions(repoRoot, sessions);
|
|
339
|
+
return;
|
|
340
|
+
}
|
|
341
|
+
const branch = await safeGetBranch(repoRoot);
|
|
342
|
+
const headHash = await safeGetHeadHash(repoRoot);
|
|
343
|
+
const latestPrompt = prompts[prompts.length - 1];
|
|
344
|
+
const fallbackSessionDiff = getDiffAgainstIndex(repoRoot, state.baseIndexFile);
|
|
345
|
+
const fallbackPromptDiff = getDiffAgainstIndex(repoRoot, state.promptIndexFile);
|
|
346
|
+
const baseTree = writeTreeFromIndex(repoRoot, state.baseIndexFile);
|
|
347
|
+
const previousPromptTree = writeTreeFromIndex(repoRoot, state.promptIndexFile);
|
|
348
|
+
refreshIndexFile(state.promptIndexFile, repoRoot);
|
|
349
|
+
const currentPromptTree = writeTreeFromIndex(repoRoot, state.promptIndexFile);
|
|
350
|
+
let promptDiff = fallbackPromptDiff;
|
|
351
|
+
let sessionDiff = fallbackSessionDiff;
|
|
352
|
+
if (previousPromptTree && currentPromptTree) {
|
|
353
|
+
const treePromptDiff = getDiffBetweenTrees(repoRoot, previousPromptTree, currentPromptTree);
|
|
354
|
+
if (treePromptDiff.diff || treePromptDiff.files.length > 0 || (!promptDiff.diff && promptDiff.files.length === 0)) {
|
|
355
|
+
promptDiff = treePromptDiff;
|
|
356
|
+
}
|
|
357
|
+
}
|
|
358
|
+
if (baseTree && currentPromptTree) {
|
|
359
|
+
const treeSessionDiff = getDiffBetweenTrees(repoRoot, baseTree, currentPromptTree);
|
|
360
|
+
if (treeSessionDiff.diff || treeSessionDiff.files.length > 0 || (!sessionDiff.diff && sessionDiff.files.length === 0)) {
|
|
361
|
+
sessionDiff = treeSessionDiff;
|
|
362
|
+
}
|
|
363
|
+
}
|
|
364
|
+
const promptChanges = [];
|
|
365
|
+
const startIndex = state.promptCount;
|
|
366
|
+
const endIndex = currentCount - 1;
|
|
367
|
+
for (let i = startIndex; i <= endIndex; i++) {
|
|
368
|
+
const prompt = prompts[i];
|
|
369
|
+
const useDiff = i === endIndex ? promptDiff : { diff: '', files: [] };
|
|
370
|
+
promptChanges.push({
|
|
371
|
+
prompt,
|
|
372
|
+
timestamp,
|
|
373
|
+
hash: headHash,
|
|
374
|
+
files: useDiff.files,
|
|
375
|
+
diff: useDiff.diff,
|
|
376
|
+
});
|
|
377
|
+
}
|
|
378
|
+
applyPromptChanges(sessions, sessionId, repoRoot, branch, timestamp, latestPrompt, headHash, state.preHash, sessionDiff, promptChanges);
|
|
379
|
+
state.promptCount = currentCount;
|
|
380
|
+
writeJsonFile(statePath, state);
|
|
381
|
+
writeSessions(repoRoot, sessions);
|
|
382
|
+
}
|
|
383
|
+
//# sourceMappingURL=capture.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capture.js","sourceRoot":"","sources":["../src/capture.ts"],"names":[],"mappings":"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"}
|
package/dist/proxyCodex.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"proxyCodex.d.ts","sourceRoot":"","sources":["../src/proxyCodex.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"proxyCodex.d.ts","sourceRoot":"","sources":["../src/proxyCodex.ts"],"names":[],"mappings":"AAoIA;;GAEG;AACH,wBAAsB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAqK1C"}
|
package/dist/proxyCodex.js
CHANGED
|
@@ -39,6 +39,7 @@ const path = __importStar(require("path"));
|
|
|
39
39
|
const fs = __importStar(require("fs"));
|
|
40
40
|
const git_1 = require("./git");
|
|
41
41
|
const store_1 = require("./store");
|
|
42
|
+
const redact_1 = require("./redact");
|
|
42
43
|
/**
|
|
43
44
|
* Maximum length for prompt and response snippets
|
|
44
45
|
*/
|
|
@@ -172,6 +173,9 @@ async function main() {
|
|
|
172
173
|
}
|
|
173
174
|
// Extract prompt from args
|
|
174
175
|
let promptFromArgs = extractPrompt(args);
|
|
176
|
+
if (promptFromArgs) {
|
|
177
|
+
promptFromArgs = (0, redact_1.redactSensitive)(promptFromArgs);
|
|
178
|
+
}
|
|
175
179
|
// Spawn the real codex CLI with inherited stdio
|
|
176
180
|
// This allows codex to detect it's running in a terminal
|
|
177
181
|
// Note: We can't capture output without breaking TTY detection
|
|
@@ -201,6 +205,7 @@ async function main() {
|
|
|
201
205
|
// Get the diff for committed changes
|
|
202
206
|
diff = await (0, git_1.getDiff)(preHash, 'HEAD');
|
|
203
207
|
}
|
|
208
|
+
diff = (0, redact_1.redactSensitive)(diff);
|
|
204
209
|
// Try to read prompts from notify hook first (faster, real-time)
|
|
205
210
|
let capturedPrompts = [];
|
|
206
211
|
let perPromptChanges;
|
|
@@ -213,7 +218,11 @@ async function main() {
|
|
|
213
218
|
// Check if it's the new format (array of PromptChange objects)
|
|
214
219
|
if (sessionData.length > 0 && typeof sessionData[0] === 'object' && 'prompt' in sessionData[0]) {
|
|
215
220
|
// New format: array of PromptChange objects
|
|
216
|
-
perPromptChanges = sessionData
|
|
221
|
+
perPromptChanges = sessionData.map((change) => ({
|
|
222
|
+
...change,
|
|
223
|
+
prompt: (0, redact_1.redactSensitive)(change.prompt),
|
|
224
|
+
diff: (0, redact_1.redactSensitive)(change.diff),
|
|
225
|
+
}));
|
|
217
226
|
capturedPrompts = perPromptChanges.map(pc => pc.prompt);
|
|
218
227
|
}
|
|
219
228
|
else {
|
|
@@ -238,6 +247,9 @@ async function main() {
|
|
|
238
247
|
capturedPrompts = readCodexSessionPrompts();
|
|
239
248
|
}
|
|
240
249
|
}
|
|
250
|
+
if (capturedPrompts.length > 0) {
|
|
251
|
+
capturedPrompts = capturedPrompts.map(redact_1.redactSensitive);
|
|
252
|
+
}
|
|
241
253
|
// Determine the final prompt to use
|
|
242
254
|
let finalPrompt;
|
|
243
255
|
let responseSnippet;
|
|
@@ -257,6 +269,7 @@ async function main() {
|
|
|
257
269
|
finalPrompt = generatePromptFromFiles(changedFiles);
|
|
258
270
|
responseSnippet = `Modified ${changedFiles.length} file(s)`;
|
|
259
271
|
}
|
|
272
|
+
finalPrompt = (0, redact_1.redactSensitive)(finalPrompt);
|
|
260
273
|
// Determine mode
|
|
261
274
|
const mode = promptFromArgs ? 'oneshot' : 'interactive';
|
|
262
275
|
// Prepare session data
|
package/dist/proxyCodex.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"proxyCodex.js","sourceRoot":"","sources":["../src/proxyCodex.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"proxyCodex.js","sourceRoot":"","sources":["../src/proxyCodex.ts"],"names":[],"mappings":"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"}
|
package/dist/redact.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"redact.d.ts","sourceRoot":"","sources":["../src/redact.ts"],"names":[],"mappings":"AAiBA,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAkBrD"}
|
package/dist/redact.js
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.redactSensitive = redactSensitive;
|
|
4
|
+
const PRIVATE_KEY_BLOCK = /-----BEGIN [A-Z ]*PRIVATE KEY-----[\s\S]*?-----END [A-Z ]*PRIVATE KEY-----/g;
|
|
5
|
+
const REDACTION_PATTERNS = [
|
|
6
|
+
[/\bgh[pousr]_[A-Za-z0-9]{20,}\b/g, '[REDACTED_GITHUB_TOKEN]'],
|
|
7
|
+
[/\bgithub_pat_[A-Za-z0-9_]{20,}\b/g, '[REDACTED_GITHUB_TOKEN]'],
|
|
8
|
+
[/\bsk-[A-Za-z0-9]{20,}\b/g, '[REDACTED_OPENAI_KEY]'],
|
|
9
|
+
[/\bxox[baprs]-[A-Za-z0-9-]{10,}\b/g, '[REDACTED_SLACK_TOKEN]'],
|
|
10
|
+
[/\bAIza[0-9A-Za-z_-]{35}\b/g, '[REDACTED_GOOGLE_KEY]'],
|
|
11
|
+
[/\b(?:AKIA|ASIA)[0-9A-Z]{16}\b/g, '[REDACTED_AWS_ACCESS_KEY]'],
|
|
12
|
+
[/\beyJ[A-Za-z0-9_-]{10,}\.[A-Za-z0-9._-]{10,}\.[A-Za-z0-9_-]{10,}\b/g, '[REDACTED_JWT]'],
|
|
13
|
+
[/(authorization\s*:\s*bearer)\s+[^\s]+/gi, '$1 [REDACTED]'],
|
|
14
|
+
[/(\b(?:postgres|mysql|mongodb|redis|amqp)s?:\/\/)([^:\s/@]+):([^\s/@]+)@/gi, '$1$2:[REDACTED]@'],
|
|
15
|
+
[/(\b(?:api[_-]?key|secret|password|passwd|token|access[_-]?key|client[_-]?secret|private[_-]?key|auth[_-]?token)\b)(\s*[=:]\s*)(['"]?)([^'"\r\n]+)\3/gi, '$1$2[REDACTED]'],
|
|
16
|
+
[/(\b(?:api[_-]?key|secret|password|passwd|token|access[_-]?key|client[_-]?secret|private[_-]?key|auth[_-]?token)\b)\s+([A-Za-z0-9+/_=-]{8,})/gi, '$1 [REDACTED]'],
|
|
17
|
+
[/(\bssh-(?:rsa|ed25519)\b|\becdsa-[^\s]+)\s+[A-Za-z0-9+/=]{40,}/g, '$1 [REDACTED_SSH_KEY]'],
|
|
18
|
+
];
|
|
19
|
+
function redactSensitive(value) {
|
|
20
|
+
if (!value) {
|
|
21
|
+
return value;
|
|
22
|
+
}
|
|
23
|
+
let redacted = value.replace(PRIVATE_KEY_BLOCK, (match) => {
|
|
24
|
+
const lines = match.split('\n');
|
|
25
|
+
if (lines.length >= 2) {
|
|
26
|
+
return `${lines[0]}\n[REDACTED_PRIVATE_KEY]\n${lines[lines.length - 1]}`;
|
|
27
|
+
}
|
|
28
|
+
return '[REDACTED_PRIVATE_KEY]';
|
|
29
|
+
});
|
|
30
|
+
for (const [pattern, replacement] of REDACTION_PATTERNS) {
|
|
31
|
+
redacted = redacted.replace(pattern, replacement);
|
|
32
|
+
}
|
|
33
|
+
return redacted;
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=redact.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"redact.js","sourceRoot":"","sources":["../src/redact.ts"],"names":[],"mappings":";;AAiBA,0CAkBC;AAnCD,MAAM,iBAAiB,GAAG,6EAA6E,CAAC;AAExG,MAAM,kBAAkB,GAA4B;IAClD,CAAC,iCAAiC,EAAE,yBAAyB,CAAC;IAC9D,CAAC,mCAAmC,EAAE,yBAAyB,CAAC;IAChE,CAAC,0BAA0B,EAAE,uBAAuB,CAAC;IACrD,CAAC,mCAAmC,EAAE,wBAAwB,CAAC;IAC/D,CAAC,4BAA4B,EAAE,uBAAuB,CAAC;IACvD,CAAC,gCAAgC,EAAE,2BAA2B,CAAC;IAC/D,CAAC,qEAAqE,EAAE,gBAAgB,CAAC;IACzF,CAAC,yCAAyC,EAAE,eAAe,CAAC;IAC5D,CAAC,2EAA2E,EAAE,kBAAkB,CAAC;IACjG,CAAC,uJAAuJ,EAAE,gBAAgB,CAAC;IAC3K,CAAC,+IAA+I,EAAE,eAAe,CAAC;IAClK,CAAC,iEAAiE,EAAE,uBAAuB,CAAC;CAC7F,CAAC;AAEF,SAAgB,eAAe,CAAC,KAAa;IAC3C,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,iBAAiB,EAAE,CAAC,KAAK,EAAE,EAAE;QACxD,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAChC,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;YACtB,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,6BAA6B,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC;QAC3E,CAAC;QACD,OAAO,wBAAwB,CAAC;IAClC,CAAC,CAAC,CAAC;IAEH,KAAK,MAAM,CAAC,OAAO,EAAE,WAAW,CAAC,IAAI,kBAAkB,EAAE,CAAC;QACxD,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;IACpD,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC"}
|
package/dist/store.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,
|
|
1
|
+
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAgB,MAAM,iBAAiB,CAAC;AAO9D;;;GAGG;AACH,wBAAgB,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAc7C;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG;IACjD,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,EAAE,MAAM,CAAC;IACzB,gBAAgB,EAAE,MAAM,CAAC;CAC1B,CAgBA;AAiDD;;GAEG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,GAAG,MAAM,CAaxE;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,KAAK,GAAE,MAAW,EAAE,MAAM,GAAE,MAAU,GAAG,aAAa,EAAE,CAGnF;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI,CAI/D;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,GAAE,MAAW,GAAG,aAAa,EAAE,CAG3F"}
|
package/dist/store.js
CHANGED
|
@@ -42,6 +42,7 @@ exports.getSessionsByProvider = getSessionsByProvider;
|
|
|
42
42
|
const fs = __importStar(require("fs"));
|
|
43
43
|
const path = __importStar(require("path"));
|
|
44
44
|
const uuid_1 = require("uuid");
|
|
45
|
+
const redact_1 = require("./redact");
|
|
45
46
|
let sessionsFilePath = null;
|
|
46
47
|
const DEFAULT_SETTINGS = { notifySoundEnabled: true };
|
|
47
48
|
/**
|
|
@@ -93,6 +94,22 @@ function readSessions() {
|
|
|
93
94
|
return [];
|
|
94
95
|
}
|
|
95
96
|
}
|
|
97
|
+
function redactPromptChange(change) {
|
|
98
|
+
return {
|
|
99
|
+
...change,
|
|
100
|
+
prompt: (0, redact_1.redactSensitive)(change.prompt),
|
|
101
|
+
diff: (0, redact_1.redactSensitive)(change.diff),
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
function redactPromptSession(session) {
|
|
105
|
+
return {
|
|
106
|
+
...session,
|
|
107
|
+
prompt: (0, redact_1.redactSensitive)(session.prompt),
|
|
108
|
+
responseSnippet: (0, redact_1.redactSensitive)(session.responseSnippet),
|
|
109
|
+
diff: (0, redact_1.redactSensitive)(session.diff),
|
|
110
|
+
perPromptChanges: session.perPromptChanges?.map(redactPromptChange),
|
|
111
|
+
};
|
|
112
|
+
}
|
|
96
113
|
/**
|
|
97
114
|
* Write sessions to the JSON file
|
|
98
115
|
*/
|
|
@@ -100,7 +117,8 @@ function writeSessions(sessions) {
|
|
|
100
117
|
if (!sessionsFilePath) {
|
|
101
118
|
throw new Error('Storage not initialized. Call initDb first.');
|
|
102
119
|
}
|
|
103
|
-
|
|
120
|
+
const redactedSessions = sessions.map(redactPromptSession);
|
|
121
|
+
fs.writeFileSync(sessionsFilePath, JSON.stringify(redactedSessions, null, 2));
|
|
104
122
|
}
|
|
105
123
|
/**
|
|
106
124
|
* Insert a new prompt session into the JSON file
|
|
@@ -123,20 +141,21 @@ function insertSession(session) {
|
|
|
123
141
|
*/
|
|
124
142
|
function getSessions(limit = 50, offset = 0) {
|
|
125
143
|
const sessions = readSessions();
|
|
126
|
-
return sessions.slice(offset, offset + limit);
|
|
144
|
+
return sessions.slice(offset, offset + limit).map(redactPromptSession);
|
|
127
145
|
}
|
|
128
146
|
/**
|
|
129
147
|
* Get a single session by ID
|
|
130
148
|
*/
|
|
131
149
|
function getSessionById(id) {
|
|
132
150
|
const sessions = readSessions();
|
|
133
|
-
|
|
151
|
+
const session = sessions.find(s => s.id === id) || null;
|
|
152
|
+
return session ? redactPromptSession(session) : null;
|
|
134
153
|
}
|
|
135
154
|
/**
|
|
136
155
|
* Get sessions by provider
|
|
137
156
|
*/
|
|
138
157
|
function getSessionsByProvider(provider, limit = 50) {
|
|
139
158
|
const sessions = readSessions();
|
|
140
|
-
return sessions.filter(s => s.provider === provider).slice(0, limit);
|
|
159
|
+
return sessions.filter(s => s.provider === provider).slice(0, limit).map(redactPromptSession);
|
|
141
160
|
}
|
|
142
161
|
//# sourceMappingURL=store.js.map
|
package/dist/store.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store.js","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"store.js","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"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"}
|
package/hooks/codex-notify.sh
CHANGED
|
@@ -20,6 +20,7 @@ LAST_PROMPT_FILE="$PROMPTVC_DIR/last_prompt_count"
|
|
|
20
20
|
LAST_SESSION_FILE="$PROMPTVC_DIR/last_session_file"
|
|
21
21
|
TEMP_PROMPTS_FILE="$PROMPTVC_DIR/temp_prompts.json"
|
|
22
22
|
SETTINGS_FILE="$PROMPTVC_DIR/settings.json"
|
|
23
|
+
LAST_GIT_STATE_FILE="$PROMPTVC_DIR/last_git_state.json"
|
|
23
24
|
|
|
24
25
|
# Create .promptvc directory if it doesn't exist
|
|
25
26
|
mkdir -p "$PROMPTVC_DIR"
|
|
@@ -86,6 +87,8 @@ NEW_SESSION="false"
|
|
|
86
87
|
if [ "$LATEST_SESSION" != "$PREV_SESSION" ]; then
|
|
87
88
|
echo "0" > "$LAST_PROMPT_FILE"
|
|
88
89
|
echo "$LATEST_SESSION" > "$LAST_SESSION_FILE"
|
|
90
|
+
# Reset git state for new session to start fresh
|
|
91
|
+
rm -f "$LAST_GIT_STATE_FILE"
|
|
89
92
|
NEW_SESSION="true"
|
|
90
93
|
fi
|
|
91
94
|
|
|
@@ -157,14 +160,73 @@ NEW_PROMPTS=$(echo "$FILTERED_PROMPTS" | jq ".[$LAST_PROMPT_COUNT:]" 2>/dev/null
|
|
|
157
160
|
|
|
158
161
|
# Capture current git state
|
|
159
162
|
GIT_HASH=$(git rev-parse HEAD 2>/dev/null || echo "")
|
|
160
|
-
GIT_DIFF=$(git diff 2>/dev/null || echo "")
|
|
161
|
-
CHANGED_FILES_RAW=$(git diff --name-only 2>/dev/null || echo "")
|
|
162
163
|
|
|
163
|
-
#
|
|
164
|
-
|
|
164
|
+
# Load previous git state to calculate incremental changes
|
|
165
|
+
PREV_STATE="{}"
|
|
166
|
+
if [ -f "$LAST_GIT_STATE_FILE" ]; then
|
|
167
|
+
PREV_STATE=$(cat "$LAST_GIT_STATE_FILE" 2>/dev/null || echo "{}")
|
|
168
|
+
fi
|
|
169
|
+
|
|
170
|
+
# Get all currently changed files
|
|
171
|
+
ALL_CHANGED_FILES=$(git diff --name-only 2>/dev/null || echo "")
|
|
172
|
+
|
|
173
|
+
# Build current state: map of file -> checksum
|
|
174
|
+
CURRENT_STATE="{}"
|
|
175
|
+
if [ -n "$ALL_CHANGED_FILES" ]; then
|
|
176
|
+
while IFS= read -r file; do
|
|
177
|
+
if [ -f "$REPO_DIR/$file" ]; then
|
|
178
|
+
# Calculate checksum of current file content
|
|
179
|
+
CHECKSUM=$(git hash-object "$REPO_DIR/$file" 2>/dev/null || echo "")
|
|
180
|
+
if [ -n "$CHECKSUM" ]; then
|
|
181
|
+
CURRENT_STATE=$(echo "$CURRENT_STATE" | jq --arg file "$file" --arg sum "$CHECKSUM" '. + {($file): $sum}')
|
|
182
|
+
fi
|
|
183
|
+
fi
|
|
184
|
+
done <<< "$ALL_CHANGED_FILES"
|
|
185
|
+
fi
|
|
186
|
+
|
|
187
|
+
# Identify newly changed files (files that are new or have different checksums)
|
|
188
|
+
NEW_CHANGED_FILES=""
|
|
189
|
+
if [ "$PREV_STATE" = "{}" ]; then
|
|
190
|
+
# First run - all changed files are new
|
|
191
|
+
NEW_CHANGED_FILES="$ALL_CHANGED_FILES"
|
|
192
|
+
else
|
|
193
|
+
# Compare current state with previous state
|
|
194
|
+
while IFS= read -r file; do
|
|
195
|
+
if [ -z "$file" ]; then
|
|
196
|
+
continue
|
|
197
|
+
fi
|
|
198
|
+
CURRENT_SUM=$(echo "$CURRENT_STATE" | jq -r --arg file "$file" '.[$file] // ""')
|
|
199
|
+
PREV_SUM=$(echo "$PREV_STATE" | jq -r --arg file "$file" '.[$file] // ""')
|
|
200
|
+
|
|
201
|
+
# Include file if it's new or checksum changed
|
|
202
|
+
if [ "$CURRENT_SUM" != "$PREV_SUM" ]; then
|
|
203
|
+
if [ -z "$NEW_CHANGED_FILES" ]; then
|
|
204
|
+
NEW_CHANGED_FILES="$file"
|
|
205
|
+
else
|
|
206
|
+
NEW_CHANGED_FILES="$NEW_CHANGED_FILES"$'\n'"$file"
|
|
207
|
+
fi
|
|
208
|
+
fi
|
|
209
|
+
done <<< "$ALL_CHANGED_FILES"
|
|
210
|
+
fi
|
|
211
|
+
|
|
212
|
+
# Generate diff only for newly changed files
|
|
213
|
+
if [ -z "$NEW_CHANGED_FILES" ]; then
|
|
214
|
+
GIT_DIFF=""
|
|
215
|
+
CHANGED_FILES_RAW=""
|
|
165
216
|
FILES_ARRAY="[]"
|
|
166
217
|
else
|
|
167
|
-
|
|
218
|
+
# Create array of files for git diff
|
|
219
|
+
FILE_ARGS=""
|
|
220
|
+
while IFS= read -r file; do
|
|
221
|
+
if [ -n "$file" ]; then
|
|
222
|
+
FILE_ARGS="$FILE_ARGS $file"
|
|
223
|
+
fi
|
|
224
|
+
done <<< "$NEW_CHANGED_FILES"
|
|
225
|
+
|
|
226
|
+
# Generate diff only for these files
|
|
227
|
+
GIT_DIFF=$(git diff -- $FILE_ARGS 2>/dev/null || echo "")
|
|
228
|
+
CHANGED_FILES_RAW="$NEW_CHANGED_FILES"
|
|
229
|
+
FILES_ARRAY=$(echo "$NEW_CHANGED_FILES" | jq -R -s 'split("\n") | map(select(length > 0))')
|
|
168
230
|
fi
|
|
169
231
|
|
|
170
232
|
# Escape diff for JSON
|
|
@@ -277,6 +339,9 @@ if [ "$NEW_ENTRIES" != "[]" ]; then
|
|
|
277
339
|
|
|
278
340
|
# Update last prompt count
|
|
279
341
|
echo "$CURRENT_PROMPT_COUNT" > "$LAST_PROMPT_FILE"
|
|
342
|
+
|
|
343
|
+
# Save current git state for next incremental diff
|
|
344
|
+
echo "$CURRENT_STATE" > "$LAST_GIT_STATE_FILE"
|
|
280
345
|
fi
|
|
281
346
|
|
|
282
347
|
# Clean up
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "promptvc",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.4",
|
|
4
4
|
"description": "CLI tool to wrap AI assistants and log prompts/diffs",
|
|
5
5
|
"homepage": "https://v0-prompt-version-control-pi.vercel.app/",
|
|
6
6
|
"repository": {
|
|
@@ -25,17 +25,17 @@
|
|
|
25
25
|
"build": "tsc",
|
|
26
26
|
"clean": "rm -rf dist",
|
|
27
27
|
"dev": "tsc --watch",
|
|
28
|
-
"prepublishOnly": "
|
|
28
|
+
"prepublishOnly": "pnpm run build",
|
|
29
29
|
"typecheck": "tsc --noEmit"
|
|
30
30
|
},
|
|
31
31
|
"dependencies": {
|
|
32
|
-
"@promptvc/types": "workspace:*",
|
|
33
32
|
"kleur": "^4.1.5",
|
|
34
33
|
"commander": "^11.1.0",
|
|
35
34
|
"simple-git": "^3.22.0",
|
|
36
35
|
"uuid": "^9.0.1"
|
|
37
36
|
},
|
|
38
37
|
"devDependencies": {
|
|
38
|
+
"@promptvc/types": "workspace:*",
|
|
39
39
|
"@types/node": "^20.10.6",
|
|
40
40
|
"@types/uuid": "^9.0.7",
|
|
41
41
|
"typescript": "^5.3.3"
|