@x-code-cli/core 0.3.1 → 0.3.3
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/agent/compression.d.ts.map +1 -1
- package/dist/agent/compression.js +33 -3
- package/dist/agent/compression.js.map +1 -1
- package/dist/agent/light-compact.d.ts +12 -0
- package/dist/agent/light-compact.d.ts.map +1 -1
- package/dist/agent/light-compact.js +75 -0
- package/dist/agent/light-compact.js.map +1 -1
- package/dist/agent/loop-state.d.ts +18 -0
- package/dist/agent/loop-state.d.ts.map +1 -1
- package/dist/agent/loop-state.js +3 -0
- package/dist/agent/loop-state.js.map +1 -1
- package/dist/agent/loop.d.ts.map +1 -1
- package/dist/agent/loop.js +33 -1
- package/dist/agent/loop.js.map +1 -1
- package/dist/agent/plan-tools.d.ts.map +1 -1
- package/dist/agent/plan-tools.js +2 -0
- package/dist/agent/plan-tools.js.map +1 -1
- package/dist/agent/session-store.d.ts +11 -0
- package/dist/agent/session-store.d.ts.map +1 -1
- package/dist/agent/session-store.js +59 -15
- package/dist/agent/session-store.js.map +1 -1
- package/dist/agent/snapshot.d.ts +45 -0
- package/dist/agent/snapshot.d.ts.map +1 -0
- package/dist/agent/snapshot.js +277 -0
- package/dist/agent/snapshot.js.map +1 -0
- package/dist/agent/sub-agents/built-in.js +1 -1
- package/dist/agent/sub-agents/built-in.js.map +1 -1
- package/dist/agent/system-prompt.d.ts.map +1 -1
- package/dist/agent/system-prompt.js +17 -8
- package/dist/agent/system-prompt.js.map +1 -1
- package/dist/index.d.ts +4 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -1
- package/dist/index.js.map +1 -1
- package/dist/permissions/index.d.ts.map +1 -1
- package/dist/permissions/index.js +0 -2
- package/dist/permissions/index.js.map +1 -1
- package/dist/tools/task.d.ts.map +1 -1
- package/dist/tools/task.js +28 -15
- package/dist/tools/task.js.map +1 -1
- package/dist/types/index.d.ts +3 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -37,12 +37,23 @@ export function getSessionFilePath(state, cwd = process.cwd()) {
|
|
|
37
37
|
}
|
|
38
38
|
// ── Append helpers (fire-and-forget; never throw) ───────────────────────
|
|
39
39
|
async function appendLine(filePath, entry) {
|
|
40
|
+
await appendRawLines(filePath, [JSON.stringify(entry)]);
|
|
41
|
+
}
|
|
42
|
+
/** Batch-append pre-serialised jsonl rows. Returns true on success so
|
|
43
|
+
* callers can keep "only advance state when disk write succeeded" — e.g.
|
|
44
|
+
* markBoundaryAndReflush mustn't clear the in-memory checkpoint list
|
|
45
|
+
* unless the boundary actually landed on disk. */
|
|
46
|
+
async function appendRawLines(filePath, lines) {
|
|
47
|
+
if (lines.length === 0)
|
|
48
|
+
return true;
|
|
40
49
|
try {
|
|
41
50
|
await fs.mkdir(path.dirname(filePath), { recursive: true });
|
|
42
|
-
await fs.appendFile(filePath,
|
|
51
|
+
await fs.appendFile(filePath, lines.join('\n') + '\n', 'utf-8');
|
|
52
|
+
return true;
|
|
43
53
|
}
|
|
44
54
|
catch {
|
|
45
55
|
// Persistence is best-effort — never block the agent loop on FS errors.
|
|
56
|
+
return false;
|
|
46
57
|
}
|
|
47
58
|
}
|
|
48
59
|
/** Try to read the current git branch from `.git/HEAD`. Cheap, fully sync
|
|
@@ -108,16 +119,15 @@ export async function flushPendingMessages(state) {
|
|
|
108
119
|
const entry = { t: 'msg', message, ts };
|
|
109
120
|
lines.push(JSON.stringify(entry));
|
|
110
121
|
}
|
|
122
|
+
// Preserve the pre-refactor early-bail: when the loop produces nothing
|
|
123
|
+
// (every unpersisted slot was a defensive `!message` skip), leave
|
|
124
|
+
// persistedMessageCount alone so a future repeat-with-real-messages
|
|
125
|
+
// doesn't think it already covered the range.
|
|
111
126
|
if (lines.length === 0)
|
|
112
127
|
return;
|
|
113
|
-
|
|
114
|
-
await fs.mkdir(path.dirname(filePath), { recursive: true });
|
|
115
|
-
await fs.appendFile(filePath, lines.join('\n') + '\n', 'utf-8');
|
|
128
|
+
if (await appendRawLines(filePath, lines)) {
|
|
116
129
|
state.persistedMessageCount = state.messages.length;
|
|
117
130
|
}
|
|
118
|
-
catch {
|
|
119
|
-
// best-effort
|
|
120
|
-
}
|
|
121
131
|
}
|
|
122
132
|
/** Append a usage snapshot for the current turn. Called from the agent loop
|
|
123
133
|
* after `collectTurnResponse` accepts the provider's `usage` object. The
|
|
@@ -160,14 +170,34 @@ export async function markBoundaryAndReflush(state, summary) {
|
|
|
160
170
|
const entry = { t: 'msg', message, ts };
|
|
161
171
|
lines.push(JSON.stringify(entry));
|
|
162
172
|
}
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
173
|
+
if (!(await appendRawLines(filePath, lines)))
|
|
174
|
+
return;
|
|
175
|
+
state.persistedMessageCount = state.messages.length;
|
|
176
|
+
// Compaction shrinks/rewrites the messages array — every prior
|
|
177
|
+
// checkpoint's `messageCount` now points past the end. Clear the
|
|
178
|
+
// in-memory list to mirror the loader's behaviour (which drops
|
|
179
|
+
// pre-boundary checkpoint lines on resume).
|
|
180
|
+
state.checkpoints = [];
|
|
181
|
+
}
|
|
182
|
+
/** Append a rewind checkpoint marker. Fire-and-forget, like the other
|
|
183
|
+
* append helpers. On resume, `loadSession` collects these into
|
|
184
|
+
* `LoadedSession.checkpoints` so the picker can offer the same rewind
|
|
185
|
+
* points across CLI restarts. The "everything-after-last-boundary wins"
|
|
186
|
+
* loader rule naturally drops checkpoints whose `messageCount` was
|
|
187
|
+
* invalidated by a compaction. */
|
|
188
|
+
export async function appendCheckpoint(state, entry) {
|
|
189
|
+
if (!state.sessionId)
|
|
190
|
+
return;
|
|
191
|
+
const filePath = getSessionFilePath(state);
|
|
192
|
+
const jsonl = {
|
|
193
|
+
t: 'meta',
|
|
194
|
+
kind: 'checkpoint',
|
|
195
|
+
ckptId: entry.ckptId,
|
|
196
|
+
messageCount: entry.messageCount,
|
|
197
|
+
ts: entry.ts,
|
|
198
|
+
userPrompt: entry.userPrompt,
|
|
199
|
+
};
|
|
200
|
+
await appendLine(filePath, jsonl);
|
|
171
201
|
}
|
|
172
202
|
/** Append an `interrupted` marker. Purely informational — the loader
|
|
173
203
|
* ignores it for state reconstruction; the picker can show "interrupted"
|
|
@@ -210,6 +240,7 @@ export async function loadSession(filePath) {
|
|
|
210
240
|
let header = null;
|
|
211
241
|
let lastUsage = null;
|
|
212
242
|
let messages = [];
|
|
243
|
+
let checkpoints = [];
|
|
213
244
|
for (const line of raw.split('\n')) {
|
|
214
245
|
if (!line.trim())
|
|
215
246
|
continue;
|
|
@@ -229,6 +260,17 @@ export async function loadSession(filePath) {
|
|
|
229
260
|
}
|
|
230
261
|
else if (entry.kind === 'compact-boundary') {
|
|
231
262
|
messages = [];
|
|
263
|
+
// Checkpoints anchored to pre-compaction message counts are now
|
|
264
|
+
// meaningless — the array shrank under them. Drop along with msgs.
|
|
265
|
+
checkpoints = [];
|
|
266
|
+
}
|
|
267
|
+
else if (entry.kind === 'checkpoint') {
|
|
268
|
+
checkpoints.push({
|
|
269
|
+
ckptId: entry.ckptId,
|
|
270
|
+
messageCount: entry.messageCount,
|
|
271
|
+
ts: entry.ts,
|
|
272
|
+
userPrompt: entry.userPrompt,
|
|
273
|
+
});
|
|
232
274
|
}
|
|
233
275
|
// 'interrupted' is informational only — doesn't affect state
|
|
234
276
|
}
|
|
@@ -248,6 +290,7 @@ export async function loadSession(filePath) {
|
|
|
248
290
|
firstPrompt: header.firstPrompt,
|
|
249
291
|
messages: sanitizeMessageTail(messages),
|
|
250
292
|
tokenUsage: lastUsage?.usage ?? EMPTY_USAGE,
|
|
293
|
+
checkpoints,
|
|
251
294
|
filePath,
|
|
252
295
|
};
|
|
253
296
|
}
|
|
@@ -407,6 +450,7 @@ export function hydrateLoopState(loaded, initialMode = 'default') {
|
|
|
407
450
|
state.tokenUsage = { ...loaded.tokenUsage };
|
|
408
451
|
state.lastInputTokens = loaded.tokenUsage.inputTokens;
|
|
409
452
|
state.persistedMessageCount = loaded.messages.length;
|
|
453
|
+
state.checkpoints = loaded.checkpoints.slice();
|
|
410
454
|
return state;
|
|
411
455
|
}
|
|
412
456
|
//# sourceMappingURL=session-store.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-store.js","sourceRoot":"","sources":["../../src/agent/session-store.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"session-store.js","sourceRoot":"","sources":["../../src/agent/session-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import type { LoopState } from './loop-state.js';
|
|
2
|
+
/** Public, in-memory representation of a checkpoint. Mirrored to jsonl as
|
|
3
|
+
* a `meta:checkpoint` line so /rewind survives /resume. */
|
|
4
|
+
export interface CheckpointEntry {
|
|
5
|
+
ckptId: string;
|
|
6
|
+
/** `state.messages.length` immediately AFTER the user message was pushed.
|
|
7
|
+
* Rewind truncates messages to `messageCount - 1` (drops that user msg
|
|
8
|
+
* + everything after). Not stable across compaction — the in-memory
|
|
9
|
+
* list is cleared by markBoundaryAndReflush. */
|
|
10
|
+
messageCount: number;
|
|
11
|
+
ts: string;
|
|
12
|
+
/** First ~200 chars of the user message that triggered this checkpoint —
|
|
13
|
+
* drives the picker's preview. */
|
|
14
|
+
userPrompt: string;
|
|
15
|
+
}
|
|
16
|
+
/** Capture the current on-disk state of every file in `state.filesModified`
|
|
17
|
+
* into a new content-addressed checkpoint and append the entry to
|
|
18
|
+
* `state.checkpoints`. Returns the entry on success, null on FS failure
|
|
19
|
+
* (in which case rewind to this point would be unsafe — caller should
|
|
20
|
+
* treat the snapshot as unavailable, NOT silently skip it).
|
|
21
|
+
*
|
|
22
|
+
* Snapshotting is best-effort per-file: a read failure on one path marks
|
|
23
|
+
* it `skip` and continues, so a transient EACCES on a single file doesn't
|
|
24
|
+
* doom the whole checkpoint. */
|
|
25
|
+
export declare function createCheckpoint(state: LoopState, userPromptPreview: string, cwd?: string): Promise<CheckpointEntry | null>;
|
|
26
|
+
/** Restore the working tree to the state captured at `ckptId`. Algorithm,
|
|
27
|
+
* applied to the union of (current `filesModified`, manifest keys):
|
|
28
|
+
* - in manifest with `hash` → write blob content back
|
|
29
|
+
* - in manifest with `absent` → unlink (if present)
|
|
30
|
+
* - in manifest with `skip` → leave alone (couldn't capture)
|
|
31
|
+
* - NOT in manifest → unlink (was created after the checkpoint)
|
|
32
|
+
* Files outside this union are untouched — we only undo what the agent
|
|
33
|
+
* has historically touched.
|
|
34
|
+
*
|
|
35
|
+
* After a successful restore:
|
|
36
|
+
* - `state.filesModified` is rebuilt from the manifest's keys (so the
|
|
37
|
+
* agent's notion of "touched files" matches the restored point).
|
|
38
|
+
* - Checkpoints after the target are dropped from `state.checkpoints`
|
|
39
|
+
* and their manifests deleted; orphaned blobs get GC'd.
|
|
40
|
+
*
|
|
41
|
+
* Caller (use-agent) is responsible for truncating `state.messages` to
|
|
42
|
+
* `entry.messageCount - 1` and rewriting the session jsonl — restore
|
|
43
|
+
* here only touches the working tree + checkpoint bookkeeping. */
|
|
44
|
+
export declare function restoreCheckpoint(state: LoopState, ckptId: string, cwd?: string): Promise<boolean>;
|
|
45
|
+
//# sourceMappingURL=snapshot.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"snapshot.d.ts","sourceRoot":"","sources":["../../src/agent/snapshot.ts"],"names":[],"mappings":"AAyBA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAgBhD;4DAC4D;AAC5D,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAA;IACd;;;qDAGiD;IACjD,YAAY,EAAE,MAAM,CAAA;IACpB,EAAE,EAAE,MAAM,CAAA;IACV;uCACmC;IACnC,UAAU,EAAE,MAAM,CAAA;CACnB;AAoFD;;;;;;;;iCAQiC;AACjC,wBAAsB,gBAAgB,CACpC,KAAK,EAAE,SAAS,EAChB,iBAAiB,EAAE,MAAM,EACzB,GAAG,GAAE,MAAsB,GAC1B,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CAyEjC;AAED;;;;;;;;;;;;;;;;;mEAiBmE;AACnE,wBAAsB,iBAAiB,CACrC,KAAK,EAAE,SAAS,EAChB,MAAM,EAAE,MAAM,EACd,GAAG,GAAE,MAAsB,GAC1B,OAAO,CAAC,OAAO,CAAC,CA2DlB"}
|
|
@@ -0,0 +1,277 @@
|
|
|
1
|
+
// @x-code-cli/core — File-history snapshot store (content-addressed)
|
|
2
|
+
//
|
|
3
|
+
// Backs the `/rewind` command. Each user-message turn produces a checkpoint
|
|
4
|
+
// that captures the current state of every file in `state.filesModified`.
|
|
5
|
+
// Content is deduplicated by sha256 blob — repeated files across checkpoints
|
|
6
|
+
// occupy disk once. Per session, layout under .x-code/file-history/<sid>/:
|
|
7
|
+
//
|
|
8
|
+
// blobs/<sha256> — content-addressed file contents (shared)
|
|
9
|
+
// checkpoints/<id>.json — manifest mapping abs path -> blob hash | absent | skip
|
|
10
|
+
//
|
|
11
|
+
// Why content-addressed (vs per-checkpoint copies): in a typical agent run
|
|
12
|
+
// most files are unchanged between adjacent user messages — the model edits
|
|
13
|
+
// 1-3 files per turn while `filesModified` may have 30+ accumulated. With
|
|
14
|
+
// dedup the marginal cost of a new checkpoint is just the bytes of the
|
|
15
|
+
// files that actually changed, not the whole tracked set.
|
|
16
|
+
//
|
|
17
|
+
// Why no shadow-git (per the design discussion): file-copy keeps this
|
|
18
|
+
// working in non-git projects, sidesteps .gitignore conflicts, and avoids
|
|
19
|
+
// any chance of touching the user's real .git index.
|
|
20
|
+
import { createHash } from 'node:crypto';
|
|
21
|
+
import fs from 'node:fs/promises';
|
|
22
|
+
import path from 'node:path';
|
|
23
|
+
import { XCODE_DIR } from '../utils.js';
|
|
24
|
+
const FILE_HISTORY_SUBDIR = 'file-history';
|
|
25
|
+
const BLOBS_SUBDIR = 'blobs';
|
|
26
|
+
const CHECKPOINTS_SUBDIR = 'checkpoints';
|
|
27
|
+
/** Files larger than this are recorded with `skip: true` in the manifest
|
|
28
|
+
* and left untouched on restore. Keeps a stray build artifact (megabytes
|
|
29
|
+
* to gigabytes) from blowing up the blob store; agent-tracked source
|
|
30
|
+
* files are essentially never this large. */
|
|
31
|
+
const MAX_FILE_BYTES = 10 * 1024 * 1024;
|
|
32
|
+
/** Ring-buffer cap. Older checkpoints are evicted; orphaned blobs are GC'd
|
|
33
|
+
* on the next restore or eviction. 100 matches Claude Code's bound. */
|
|
34
|
+
const MAX_CHECKPOINTS = 100;
|
|
35
|
+
function historyDir(sessionId, cwd) {
|
|
36
|
+
return path.join(cwd, XCODE_DIR, FILE_HISTORY_SUBDIR, sessionId);
|
|
37
|
+
}
|
|
38
|
+
function blobsDir(sessionId, cwd) {
|
|
39
|
+
return path.join(historyDir(sessionId, cwd), BLOBS_SUBDIR);
|
|
40
|
+
}
|
|
41
|
+
function checkpointsDir(sessionId, cwd) {
|
|
42
|
+
return path.join(historyDir(sessionId, cwd), CHECKPOINTS_SUBDIR);
|
|
43
|
+
}
|
|
44
|
+
function manifestPath(sessionId, ckptId, cwd) {
|
|
45
|
+
return path.join(checkpointsDir(sessionId, cwd), `${ckptId}.json`);
|
|
46
|
+
}
|
|
47
|
+
function blobPath(sessionId, hash, cwd) {
|
|
48
|
+
return path.join(blobsDir(sessionId, cwd), hash);
|
|
49
|
+
}
|
|
50
|
+
/** Local-time YYYYMMDD-HHMMSS-mmm, matching the sessionId shape so a
|
|
51
|
+
* directory listing of checkpoints sorts chronologically. */
|
|
52
|
+
function genCkptId(now = new Date()) {
|
|
53
|
+
const pad = (n, w = 2) => String(n).padStart(w, '0');
|
|
54
|
+
return (`${now.getFullYear()}${pad(now.getMonth() + 1)}${pad(now.getDate())}` +
|
|
55
|
+
`-${pad(now.getHours())}${pad(now.getMinutes())}${pad(now.getSeconds())}` +
|
|
56
|
+
`-${pad(now.getMilliseconds(), 3)}`);
|
|
57
|
+
}
|
|
58
|
+
async function exists(p) {
|
|
59
|
+
try {
|
|
60
|
+
await fs.access(p);
|
|
61
|
+
return true;
|
|
62
|
+
}
|
|
63
|
+
catch {
|
|
64
|
+
return false;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
async function statSafe(p) {
|
|
68
|
+
try {
|
|
69
|
+
return { kind: 'ok', stat: await fs.stat(p) };
|
|
70
|
+
}
|
|
71
|
+
catch (err) {
|
|
72
|
+
const code = err.code;
|
|
73
|
+
if (code === 'ENOENT' || code === 'ENOTDIR')
|
|
74
|
+
return { kind: 'absent' };
|
|
75
|
+
return { kind: 'unreadable' };
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
async function writeBlobIfMissing(sessionId, hash, content, cwd) {
|
|
79
|
+
const p = blobPath(sessionId, hash, cwd);
|
|
80
|
+
if (await exists(p))
|
|
81
|
+
return;
|
|
82
|
+
await fs.mkdir(path.dirname(p), { recursive: true });
|
|
83
|
+
await fs.writeFile(p, content);
|
|
84
|
+
}
|
|
85
|
+
/** Capture the current on-disk state of every file in `state.filesModified`
|
|
86
|
+
* into a new content-addressed checkpoint and append the entry to
|
|
87
|
+
* `state.checkpoints`. Returns the entry on success, null on FS failure
|
|
88
|
+
* (in which case rewind to this point would be unsafe — caller should
|
|
89
|
+
* treat the snapshot as unavailable, NOT silently skip it).
|
|
90
|
+
*
|
|
91
|
+
* Snapshotting is best-effort per-file: a read failure on one path marks
|
|
92
|
+
* it `skip` and continues, so a transient EACCES on a single file doesn't
|
|
93
|
+
* doom the whole checkpoint. */
|
|
94
|
+
export async function createCheckpoint(state, userPromptPreview, cwd = process.cwd()) {
|
|
95
|
+
const ckptId = genCkptId();
|
|
96
|
+
const ts = new Date().toISOString();
|
|
97
|
+
const messageCount = state.messages.length;
|
|
98
|
+
const files = {};
|
|
99
|
+
for (const absPath of state.filesModified) {
|
|
100
|
+
const outcome = await statSafe(absPath);
|
|
101
|
+
if (outcome.kind === 'absent') {
|
|
102
|
+
files[absPath] = { absent: true };
|
|
103
|
+
continue;
|
|
104
|
+
}
|
|
105
|
+
if (outcome.kind === 'unreadable') {
|
|
106
|
+
// Couldn't stat for reasons OTHER than "file doesn't exist" — most
|
|
107
|
+
// likely a permission issue. Mark skip so restore won't try to delete
|
|
108
|
+
// a file the user (or another process) actively cares about.
|
|
109
|
+
files[absPath] = { skip: true };
|
|
110
|
+
continue;
|
|
111
|
+
}
|
|
112
|
+
const stat = outcome.stat;
|
|
113
|
+
if (!stat.isFile() || stat.size > MAX_FILE_BYTES) {
|
|
114
|
+
// Symlinks / dirs / oversized blobs — record as skip so restore knows
|
|
115
|
+
// to leave them alone (vs misclassifying as absent and deleting).
|
|
116
|
+
files[absPath] = { skip: true };
|
|
117
|
+
continue;
|
|
118
|
+
}
|
|
119
|
+
try {
|
|
120
|
+
const buf = await fs.readFile(absPath);
|
|
121
|
+
const hash = createHash('sha256').update(buf).digest('hex');
|
|
122
|
+
await writeBlobIfMissing(state.sessionId, hash, buf, cwd);
|
|
123
|
+
files[absPath] = { hash };
|
|
124
|
+
}
|
|
125
|
+
catch {
|
|
126
|
+
files[absPath] = { skip: true };
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
const manifest = {
|
|
130
|
+
ckptId,
|
|
131
|
+
ts,
|
|
132
|
+
messageCount,
|
|
133
|
+
userPrompt: userPromptPreview.slice(0, 200),
|
|
134
|
+
files,
|
|
135
|
+
};
|
|
136
|
+
try {
|
|
137
|
+
await fs.mkdir(checkpointsDir(state.sessionId, cwd), { recursive: true });
|
|
138
|
+
await fs.writeFile(manifestPath(state.sessionId, ckptId, cwd), JSON.stringify(manifest, null, 2), 'utf-8');
|
|
139
|
+
}
|
|
140
|
+
catch {
|
|
141
|
+
return null;
|
|
142
|
+
}
|
|
143
|
+
const entry = { ckptId, messageCount, ts, userPrompt: manifest.userPrompt };
|
|
144
|
+
state.checkpoints.push(entry);
|
|
145
|
+
// Ring-buffer eviction. Drop oldest manifests; defer blob GC to the
|
|
146
|
+
// amortized sweep below so we don't re-read remaining manifests on every
|
|
147
|
+
// eviction.
|
|
148
|
+
let evicted = false;
|
|
149
|
+
while (state.checkpoints.length > MAX_CHECKPOINTS) {
|
|
150
|
+
const dropped = state.checkpoints.shift();
|
|
151
|
+
if (!dropped)
|
|
152
|
+
break;
|
|
153
|
+
void fs.unlink(manifestPath(state.sessionId, dropped.ckptId, cwd)).catch(() => undefined);
|
|
154
|
+
evicted = true;
|
|
155
|
+
}
|
|
156
|
+
if (evicted) {
|
|
157
|
+
// Awaited (not fire-and-forget) so tests see deterministic blob counts
|
|
158
|
+
// and so a subsequent eviction can't race a still-running sweep into
|
|
159
|
+
// double-deleting a blob the new manifest references. GC is O(remaining
|
|
160
|
+
// checkpoints * files per manifest) — a few hundred reads at most,
|
|
161
|
+
// amortized over hundreds of normal checkpoints between evictions.
|
|
162
|
+
await garbageCollectBlobs(state, cwd).catch(() => undefined);
|
|
163
|
+
}
|
|
164
|
+
return entry;
|
|
165
|
+
}
|
|
166
|
+
/** Restore the working tree to the state captured at `ckptId`. Algorithm,
|
|
167
|
+
* applied to the union of (current `filesModified`, manifest keys):
|
|
168
|
+
* - in manifest with `hash` → write blob content back
|
|
169
|
+
* - in manifest with `absent` → unlink (if present)
|
|
170
|
+
* - in manifest with `skip` → leave alone (couldn't capture)
|
|
171
|
+
* - NOT in manifest → unlink (was created after the checkpoint)
|
|
172
|
+
* Files outside this union are untouched — we only undo what the agent
|
|
173
|
+
* has historically touched.
|
|
174
|
+
*
|
|
175
|
+
* After a successful restore:
|
|
176
|
+
* - `state.filesModified` is rebuilt from the manifest's keys (so the
|
|
177
|
+
* agent's notion of "touched files" matches the restored point).
|
|
178
|
+
* - Checkpoints after the target are dropped from `state.checkpoints`
|
|
179
|
+
* and their manifests deleted; orphaned blobs get GC'd.
|
|
180
|
+
*
|
|
181
|
+
* Caller (use-agent) is responsible for truncating `state.messages` to
|
|
182
|
+
* `entry.messageCount - 1` and rewriting the session jsonl — restore
|
|
183
|
+
* here only touches the working tree + checkpoint bookkeeping. */
|
|
184
|
+
export async function restoreCheckpoint(state, ckptId, cwd = process.cwd()) {
|
|
185
|
+
let raw;
|
|
186
|
+
try {
|
|
187
|
+
raw = await fs.readFile(manifestPath(state.sessionId, ckptId, cwd), 'utf-8');
|
|
188
|
+
}
|
|
189
|
+
catch {
|
|
190
|
+
return false;
|
|
191
|
+
}
|
|
192
|
+
let manifest;
|
|
193
|
+
try {
|
|
194
|
+
manifest = JSON.parse(raw);
|
|
195
|
+
}
|
|
196
|
+
catch {
|
|
197
|
+
return false;
|
|
198
|
+
}
|
|
199
|
+
const allFiles = new Set([...state.filesModified, ...Object.keys(manifest.files)]);
|
|
200
|
+
for (const absPath of allFiles) {
|
|
201
|
+
const entry = manifest.files[absPath];
|
|
202
|
+
if (!entry) {
|
|
203
|
+
// Created in a turn AFTER this checkpoint — delete to roll back.
|
|
204
|
+
await fs.unlink(absPath).catch(() => undefined);
|
|
205
|
+
continue;
|
|
206
|
+
}
|
|
207
|
+
if (entry.skip)
|
|
208
|
+
continue;
|
|
209
|
+
if (entry.absent) {
|
|
210
|
+
await fs.unlink(absPath).catch(() => undefined);
|
|
211
|
+
continue;
|
|
212
|
+
}
|
|
213
|
+
if (entry.hash) {
|
|
214
|
+
try {
|
|
215
|
+
const buf = await fs.readFile(blobPath(state.sessionId, entry.hash, cwd));
|
|
216
|
+
await fs.mkdir(path.dirname(absPath), { recursive: true });
|
|
217
|
+
await fs.writeFile(absPath, buf);
|
|
218
|
+
}
|
|
219
|
+
catch {
|
|
220
|
+
// Missing blob → can't restore this file. Don't fail the whole
|
|
221
|
+
// rewind: a single bad file is better than leaving the rest in a
|
|
222
|
+
// half-restored state.
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
// Rebuild filesModified from the manifest so subsequent checkpoints cover
|
|
227
|
+
// the right set. Includes absent/skip entries: those files have been
|
|
228
|
+
// touched by the agent historically and should remain in scope.
|
|
229
|
+
state.filesModified.clear();
|
|
230
|
+
for (const absPath of Object.keys(manifest.files)) {
|
|
231
|
+
state.filesModified.add(absPath);
|
|
232
|
+
}
|
|
233
|
+
// Drop checkpoints AFTER the restored one (keep the target — the user is
|
|
234
|
+
// now "at" that point and can re-rewind to it).
|
|
235
|
+
const cutoffIndex = state.checkpoints.findIndex((c) => c.ckptId === ckptId);
|
|
236
|
+
if (cutoffIndex >= 0) {
|
|
237
|
+
const dropped = state.checkpoints.splice(cutoffIndex + 1);
|
|
238
|
+
for (const d of dropped) {
|
|
239
|
+
void fs.unlink(manifestPath(state.sessionId, d.ckptId, cwd)).catch(() => undefined);
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
await garbageCollectBlobs(state, cwd).catch(() => undefined);
|
|
243
|
+
return true;
|
|
244
|
+
}
|
|
245
|
+
/** Sweep blobs/ and unlink any blob not referenced by a remaining manifest.
|
|
246
|
+
* Cheap: O(remaining checkpoints * files per manifest) reads + one readdir.
|
|
247
|
+
* Runs after eviction and after restore — the only paths that orphan blobs. */
|
|
248
|
+
async function garbageCollectBlobs(state, cwd) {
|
|
249
|
+
const referenced = new Set();
|
|
250
|
+
for (const ckpt of state.checkpoints) {
|
|
251
|
+
try {
|
|
252
|
+
const raw = await fs.readFile(manifestPath(state.sessionId, ckpt.ckptId, cwd), 'utf-8');
|
|
253
|
+
const m = JSON.parse(raw);
|
|
254
|
+
for (const entry of Object.values(m.files)) {
|
|
255
|
+
if (entry.hash)
|
|
256
|
+
referenced.add(entry.hash);
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
catch {
|
|
260
|
+
// Manifest gone or unreadable — skip; its blobs become candidates for
|
|
261
|
+
// collection along with the rest.
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
let names;
|
|
265
|
+
try {
|
|
266
|
+
names = await fs.readdir(blobsDir(state.sessionId, cwd));
|
|
267
|
+
}
|
|
268
|
+
catch {
|
|
269
|
+
return;
|
|
270
|
+
}
|
|
271
|
+
for (const name of names) {
|
|
272
|
+
if (!referenced.has(name)) {
|
|
273
|
+
await fs.unlink(blobPath(state.sessionId, name, cwd)).catch(() => undefined);
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
//# sourceMappingURL=snapshot.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"snapshot.js","sourceRoot":"","sources":["../../src/agent/snapshot.ts"],"names":[],"mappings":"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"}
|
|
@@ -35,7 +35,7 @@ const FINAL_MESSAGE_CONTRACT_HEADER = "CRITICAL — your final message is ALL th
|
|
|
35
35
|
export const builtInAgents = [
|
|
36
36
|
{
|
|
37
37
|
name: 'explore',
|
|
38
|
-
description: 'Read-only codebase exploration. Use
|
|
38
|
+
description: 'Read-only codebase exploration. Use when broad, multi-directory search is needed (4+ searches). For targeted lookups ("where is X", "callers of Y"), prefer grep directly — it\'s faster.',
|
|
39
39
|
prompt: `You are a read-only codebase explorer. Your job is to find information, trace code paths, and report findings clearly.
|
|
40
40
|
|
|
41
41
|
Guidelines:
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"built-in.js","sourceRoot":"","sources":["../../../src/agent/sub-agents/built-in.ts"],"names":[],"mappings":"AAGA,MAAM,mBAAmB,GAAG;IAC1B,KAAK;IACL,MAAM;IACN,OAAO;IACP,MAAM;IACN,KAAK;IACL,KAAK;IACL,OAAO;IACP,MAAM;IACN,YAAY;IACZ,UAAU;IACV,WAAW;IACX,YAAY;IACZ,WAAW;IACX,iBAAiB;IACjB,eAAe;IACf,eAAe;IACf,GAAG;IACH,IAAI;IACJ,MAAM;IACN,OAAO;IACP,OAAO;IACP,OAAO;IACP,aAAa;IACb,cAAc;IACd,cAAc;IACd,WAAW;IACX,YAAY;CACb,CAAA;AAED,0EAA0E;AAC1E,kEAAkE;AAClE,2EAA2E;AAC3E,oEAAoE;AACpE,MAAM,6BAA6B,GACjC,4GAA4G,CAAA;AAE9G,MAAM,CAAC,MAAM,aAAa,GAAyB;IACjD;QACE,IAAI,EAAE,SAAS;QACf,WAAW,EACT,
|
|
1
|
+
{"version":3,"file":"built-in.js","sourceRoot":"","sources":["../../../src/agent/sub-agents/built-in.ts"],"names":[],"mappings":"AAGA,MAAM,mBAAmB,GAAG;IAC1B,KAAK;IACL,MAAM;IACN,OAAO;IACP,MAAM;IACN,KAAK;IACL,KAAK;IACL,OAAO;IACP,MAAM;IACN,YAAY;IACZ,UAAU;IACV,WAAW;IACX,YAAY;IACZ,WAAW;IACX,iBAAiB;IACjB,eAAe;IACf,eAAe;IACf,GAAG;IACH,IAAI;IACJ,MAAM;IACN,OAAO;IACP,OAAO;IACP,OAAO;IACP,aAAa;IACb,cAAc;IACd,cAAc;IACd,WAAW;IACX,YAAY;CACb,CAAA;AAED,0EAA0E;AAC1E,kEAAkE;AAClE,2EAA2E;AAC3E,oEAAoE;AACpE,MAAM,6BAA6B,GACjC,4GAA4G,CAAA;AAE9G,MAAM,CAAC,MAAM,aAAa,GAAyB;IACjD;QACE,IAAI,EAAE,SAAS;QACf,WAAW,EACT,2LAA2L;QAC7L,MAAM,EAAE;;;;;;;;EAQV,6BAA6B;;;;;kGAKmE;QAC9F,KAAK,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC;QACvD,iBAAiB,EAAE,mBAAmB;QACtC,QAAQ,EAAE,EAAE;QACZ,MAAM,EAAE,UAAU;KACnB;IACD;QACE,IAAI,EAAE,iBAAiB;QACvB,WAAW,EACT,8GAA8G;QAChH,MAAM,EAAE;;;;;;;;;;EAUV,6BAA6B;;;+FAGgE;QAC3F,KAAK,EAAE,CAAC,GAAG,CAAC;QACZ,QAAQ,EAAE,EAAE;QACZ,MAAM,EAAE,UAAU;KACnB;IACD;QACE,IAAI,EAAE,MAAM;QACZ,WAAW,EACT,4GAA4G;QAC9G,MAAM,EAAE;;;;;;;;;;;;;6EAaiE;QACzE,KAAK,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC;QAC9C,QAAQ,EAAE,EAAE;QACZ,MAAM,EAAE,UAAU;KACnB;IACD;QACE,IAAI,EAAE,eAAe;QACrB,WAAW,EACT,mHAAmH;QACrH,MAAM,EAAE;;;;;;;;;;;;;;0FAc8E;QACtF,KAAK,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC;QACvD,iBAAiB,EAAE,mBAAmB;QACtC,QAAQ,EAAE,EAAE;QACZ,MAAM,EAAE,UAAU;KACnB;CACF,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"system-prompt.d.ts","sourceRoot":"","sources":["../../src/agent/system-prompt.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"system-prompt.d.ts","sourceRoot":"","sources":["../../src/agent/system-prompt.ts"],"names":[],"mappings":"AA6MA;;gFAEgF;AAChF,wBAAgB,yBAAyB,CAAC,OAAO,EAAE;IACjD,WAAW,EAAE,MAAM,CAAA;IACnB,gBAAgB,EAAE,MAAM,CAAA;IACxB,SAAS,EAAE,OAAO,CAAA;CACnB,GAAG,MAAM,CAuBT;AAED;;;mBAGmB;AACnB,MAAM,WAAW,mBAAmB;IAClC,YAAY,EAAE,MAAM,CAAA;IACpB,UAAU,EAAE,MAAM,CAAA;IAClB,WAAW,EAAE,MAAM,CAAA;CACpB;AAsED,sFAAsF;AACtF,wBAAgB,iBAAiB,CAAC,OAAO,CAAC,EAAE;IAC1C,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB;;4CAEwC;IACxC,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB;kDAC8C;IAC9C,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB;;;2BAGuB;IACvB,QAAQ,CAAC,EAAE,SAAS,mBAAmB,EAAE,CAAA;IACzC;;gFAE4E;IAC5E,MAAM,CAAC,EAAE,SAAS;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,EAAE,CAAA;CAC1D,GAAG,MAAM,CAoBT"}
|
|
@@ -25,20 +25,26 @@ You have access to these tools:
|
|
|
25
25
|
- task: Delegate a task to a specialized sub-agent (explore, plan, review, general-purpose){mcpCapabilities}{skillCapabilities}
|
|
26
26
|
|
|
27
27
|
## Sub-agent Delegation
|
|
28
|
-
Use the task tool to delegate
|
|
28
|
+
Use the task tool to delegate complex tasks to a specialized sub-agent. Sub-agents run in isolated context — they don't see your conversation history and their intermediate tool calls never pollute your context window. Only the final conclusion comes back.
|
|
29
|
+
|
|
30
|
+
Sub-agent invocation has significant overhead (fresh context window, separate prompt cache, extra system prompt tokens). Always prefer direct tool use when practical — a task completable with a few direct tool calls is always faster and cheaper than delegating.
|
|
29
31
|
|
|
30
32
|
When to delegate:
|
|
31
|
-
-
|
|
32
|
-
- Code review of pending changes
|
|
33
|
-
- Implementation planning that requires reading
|
|
34
|
-
-
|
|
33
|
+
- Broad codebase exploration that clearly requires more than 3-4 searches across many directories
|
|
34
|
+
- Code review of pending changes (dedicated reviewer with structured output)
|
|
35
|
+
- Implementation planning that requires reading 5+ files to form a plan
|
|
36
|
+
- Multi-step investigation where you only need the conclusion, not the raw tool output
|
|
35
37
|
|
|
36
38
|
When NOT to delegate:
|
|
37
|
-
-
|
|
38
|
-
-
|
|
39
|
+
- Tasks completable in 3 or fewer tool calls — just do them directly
|
|
40
|
+
- Reading 1-3 specific files — use readFile directly
|
|
41
|
+
- Searching for a known symbol or pattern — use grep directly
|
|
42
|
+
- Questions answerable from files you've already read in this conversation
|
|
39
43
|
- Simple single-step tasks you can do faster yourself
|
|
40
44
|
- Tasks where your immediate next step is blocked on the raw output
|
|
41
45
|
|
|
46
|
+
Try direct tools first. Only escalate to a sub-agent when a simple, directed search proves insufficient or when the task will clearly require extensive multi-file exploration.
|
|
47
|
+
|
|
42
48
|
Your prompt to the sub-agent must be self-contained: include file paths, function names, what you've already learned, and what you need back. Terse prompts produce shallow results.
|
|
43
49
|
|
|
44
50
|
IMPORTANT — trust sub-agent results. When a sub-agent returns findings (file contents, code snippets, architecture descriptions), do NOT re-read the same files yourself. The sub-agent has already done that work. If the result is missing specific details, ask a follow-up sub-agent with a targeted prompt rather than duplicating the exploration manually.
|
|
@@ -72,7 +78,7 @@ Break down and manage your work with the todoWrite tool. The user sees a live ch
|
|
|
72
78
|
### Command Execution
|
|
73
79
|
- Generate commands compatible with the current shell ({shell})
|
|
74
80
|
- Use platform-appropriate path separators and syntax
|
|
75
|
-
-
|
|
81
|
+
- For destructive commands (rm -rf, format, drop table), proceed when the user asks — the permission system will show a [dangerous] warning and require confirmation
|
|
76
82
|
- Prefer dedicated tools over shell commands: use glob instead of find/ls, grep instead of grep/rg, readFile instead of cat
|
|
77
83
|
|
|
78
84
|
### Interaction
|
|
@@ -81,6 +87,9 @@ Break down and manage your work with the todoWrite tool. The user sees a live ch
|
|
|
81
87
|
- For research, summarization, or explanation tasks (e.g. summarizing a fetched article, explaining a codebase, answering "what is X"): be thorough — preserve key points, concrete examples, and structure; don't over-compress
|
|
82
88
|
- Use markdown formatting with language-tagged code blocks
|
|
83
89
|
|
|
90
|
+
### Truncated Tool Results
|
|
91
|
+
When you see a tool result starting with [Truncated:], the original output was removed to save context. Do NOT rely on partial information or guess the full content — re-read the file or re-run the search if you need the actual data.
|
|
92
|
+
|
|
84
93
|
### Security
|
|
85
94
|
- NEVER output API keys, passwords, or secrets in responses
|
|
86
95
|
- NEVER generate code with known security vulnerabilities (injection, XSS, etc.)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"system-prompt.js","sourceRoot":"","sources":["../../src/agent/system-prompt.ts"],"names":[],"mappings":"AAAA,8CAA8C;AAC9C,OAAO,IAAI,MAAM,WAAW,CAAA;AAE5B,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAA;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAE5C,MAAM,kBAAkB,GAAG
|
|
1
|
+
{"version":3,"file":"system-prompt.js","sourceRoot":"","sources":["../../src/agent/system-prompt.ts"],"names":[],"mappings":"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"}
|