@codeledger/cli 0.2.1 → 0.5.1

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.
Files changed (137) hide show
  1. package/dist/artifacts/summary.d.ts +6 -0
  2. package/dist/artifacts/summary.d.ts.map +1 -0
  3. package/dist/artifacts/summary.js +49 -0
  4. package/dist/artifacts/summary.js.map +1 -0
  5. package/dist/commands/activate.d.ts.map +1 -1
  6. package/dist/commands/activate.js +155 -19
  7. package/dist/commands/activate.js.map +1 -1
  8. package/dist/commands/bundle.d.ts.map +1 -1
  9. package/dist/commands/bundle.js +28 -5
  10. package/dist/commands/bundle.js.map +1 -1
  11. package/dist/commands/checkpoint.d.ts +26 -0
  12. package/dist/commands/checkpoint.d.ts.map +1 -0
  13. package/dist/commands/checkpoint.js +382 -0
  14. package/dist/commands/checkpoint.js.map +1 -0
  15. package/dist/commands/cowork-snapshot.d.ts.map +1 -1
  16. package/dist/commands/cowork-snapshot.js +3 -2
  17. package/dist/commands/cowork-snapshot.js.map +1 -1
  18. package/dist/commands/doctor.d.ts +9 -0
  19. package/dist/commands/doctor.d.ts.map +1 -0
  20. package/dist/commands/doctor.js +169 -0
  21. package/dist/commands/doctor.js.map +1 -0
  22. package/dist/commands/init.d.ts.map +1 -1
  23. package/dist/commands/init.js +46 -12
  24. package/dist/commands/init.js.map +1 -1
  25. package/dist/commands/intent.d.ts +37 -0
  26. package/dist/commands/intent.d.ts.map +1 -0
  27. package/dist/commands/intent.js +408 -0
  28. package/dist/commands/intent.js.map +1 -0
  29. package/dist/commands/manifest.d.ts +8 -0
  30. package/dist/commands/manifest.d.ts.map +1 -0
  31. package/dist/commands/manifest.js +144 -0
  32. package/dist/commands/manifest.js.map +1 -0
  33. package/dist/commands/policy.d.ts +8 -0
  34. package/dist/commands/policy.d.ts.map +1 -0
  35. package/dist/commands/policy.js +27 -0
  36. package/dist/commands/policy.js.map +1 -0
  37. package/dist/commands/refine.d.ts.map +1 -1
  38. package/dist/commands/refine.js +16 -0
  39. package/dist/commands/refine.js.map +1 -1
  40. package/dist/commands/review-coverage.d.ts +12 -0
  41. package/dist/commands/review-coverage.d.ts.map +1 -0
  42. package/dist/commands/review-coverage.js +142 -0
  43. package/dist/commands/review-coverage.js.map +1 -0
  44. package/dist/commands/review-gate.d.ts +12 -0
  45. package/dist/commands/review-gate.d.ts.map +1 -0
  46. package/dist/commands/review-gate.js +130 -0
  47. package/dist/commands/review-gate.js.map +1 -0
  48. package/dist/commands/session-cleanup.js +1 -0
  49. package/dist/commands/session-cleanup.js.map +1 -1
  50. package/dist/commands/session-progress.d.ts.map +1 -1
  51. package/dist/commands/session-progress.js +29 -1
  52. package/dist/commands/session-progress.js.map +1 -1
  53. package/dist/commands/session-summary.d.ts.map +1 -1
  54. package/dist/commands/session-summary.js +620 -37
  55. package/dist/commands/session-summary.js.map +1 -1
  56. package/dist/commands/setup-ci.d.ts +9 -0
  57. package/dist/commands/setup-ci.d.ts.map +1 -0
  58. package/dist/commands/setup-ci.js +139 -0
  59. package/dist/commands/setup-ci.js.map +1 -0
  60. package/dist/commands/shared-summary.d.ts +15 -0
  61. package/dist/commands/shared-summary.d.ts.map +1 -0
  62. package/dist/commands/shared-summary.js +194 -0
  63. package/dist/commands/shared-summary.js.map +1 -0
  64. package/dist/commands/sign-manifest.d.ts +8 -0
  65. package/dist/commands/sign-manifest.d.ts.map +1 -0
  66. package/dist/commands/sign-manifest.js +58 -0
  67. package/dist/commands/sign-manifest.js.map +1 -0
  68. package/dist/commands/verify.d.ts +13 -0
  69. package/dist/commands/verify.d.ts.map +1 -0
  70. package/dist/commands/verify.js +288 -0
  71. package/dist/commands/verify.js.map +1 -0
  72. package/dist/index.d.ts.map +1 -1
  73. package/dist/index.js +153 -2
  74. package/dist/index.js.map +1 -1
  75. package/dist/integrations/github-actions.d.ts +17 -0
  76. package/dist/integrations/github-actions.d.ts.map +1 -0
  77. package/dist/integrations/github-actions.js +64 -0
  78. package/dist/integrations/github-actions.js.map +1 -0
  79. package/dist/manifest/build.d.ts +19 -0
  80. package/dist/manifest/build.d.ts.map +1 -0
  81. package/dist/manifest/build.js +82 -0
  82. package/dist/manifest/build.js.map +1 -0
  83. package/dist/manifest/schema.d.ts +2 -0
  84. package/dist/manifest/schema.d.ts.map +1 -0
  85. package/dist/manifest/schema.js +2 -0
  86. package/dist/manifest/schema.js.map +1 -0
  87. package/dist/manifest/write.d.ts +13 -0
  88. package/dist/manifest/write.d.ts.map +1 -0
  89. package/dist/manifest/write.js +69 -0
  90. package/dist/manifest/write.js.map +1 -0
  91. package/dist/policy/load.d.ts +21 -0
  92. package/dist/policy/load.d.ts.map +1 -0
  93. package/dist/policy/load.js +63 -0
  94. package/dist/policy/load.js.map +1 -0
  95. package/dist/policy/resolve.d.ts +18 -0
  96. package/dist/policy/resolve.d.ts.map +1 -0
  97. package/dist/policy/resolve.js +86 -0
  98. package/dist/policy/resolve.js.map +1 -0
  99. package/dist/policy/schema.d.ts +22 -0
  100. package/dist/policy/schema.d.ts.map +1 -0
  101. package/dist/policy/schema.js +82 -0
  102. package/dist/policy/schema.js.map +1 -0
  103. package/dist/session-paths.d.ts +8 -0
  104. package/dist/session-paths.d.ts.map +1 -1
  105. package/dist/session-paths.js +16 -0
  106. package/dist/session-paths.js.map +1 -1
  107. package/dist/signing/canonicalize.d.ts +17 -0
  108. package/dist/signing/canonicalize.d.ts.map +1 -0
  109. package/dist/signing/canonicalize.js +50 -0
  110. package/dist/signing/canonicalize.js.map +1 -0
  111. package/dist/signing/hmac.d.ts +8 -0
  112. package/dist/signing/hmac.d.ts.map +1 -0
  113. package/dist/signing/hmac.js +16 -0
  114. package/dist/signing/hmac.js.map +1 -0
  115. package/dist/signing/signer.d.ts +16 -0
  116. package/dist/signing/signer.d.ts.map +1 -0
  117. package/dist/signing/signer.js +2 -0
  118. package/dist/signing/signer.js.map +1 -0
  119. package/dist/templates/claude-md.d.ts.map +1 -1
  120. package/dist/templates/claude-md.js +9 -2
  121. package/dist/templates/claude-md.js.map +1 -1
  122. package/dist/templates/config.d.ts.map +1 -1
  123. package/dist/templates/config.js +48 -10
  124. package/dist/templates/config.js.map +1 -1
  125. package/dist/verify/evaluate.d.ts +10 -0
  126. package/dist/verify/evaluate.d.ts.map +1 -0
  127. package/dist/verify/evaluate.js +117 -0
  128. package/dist/verify/evaluate.js.map +1 -0
  129. package/dist/verify/policy-snapshot.d.ts +7 -0
  130. package/dist/verify/policy-snapshot.d.ts.map +1 -0
  131. package/dist/verify/policy-snapshot.js +36 -0
  132. package/dist/verify/policy-snapshot.js.map +1 -0
  133. package/dist/verify/report.d.ts +11 -0
  134. package/dist/verify/report.d.ts.map +1 -0
  135. package/dist/verify/report.js +64 -0
  136. package/dist/verify/report.js.map +1 -0
  137. package/package.json +10 -10
@@ -0,0 +1,382 @@
1
+ import { readFileSync, writeFileSync, existsSync, mkdirSync, readdirSync, statSync } from 'node:fs';
2
+ import { join, dirname } from 'node:path';
3
+ import { execSync } from 'node:child_process';
4
+ import { resolveSessionId } from '../session-id.js';
5
+ import { sessionDir, sessionBundlePath, sessionActivateRef, sessionStartRef, legacyBundlePath } from '../session-paths.js';
6
+ /**
7
+ * `codeledger checkpoint [create|restore|list] [--session <id>]`
8
+ *
9
+ * Periodic incremental snapshots that capture "work done so far" —
10
+ * enabling resume from checkpoint after interruption (rate limiting,
11
+ * crash, context window exhaustion).
12
+ *
13
+ * Each checkpoint stores:
14
+ * - The current bundle (task + selected files)
15
+ * - Git HEAD ref at checkpoint time
16
+ * - Files changed and uncommitted at that point
17
+ *
18
+ * Checkpoints are stored under .codeledger/sessions/{id}/checkpoints/
19
+ */
20
+ export async function runCheckpoint(cwd, flags) {
21
+ const subcommand = flags['_sub'] ?? 'create';
22
+ const sessionId = resolveSessionId({ session: flags['session'] });
23
+ switch (subcommand) {
24
+ case 'create':
25
+ await createCheckpoint(cwd, sessionId, flags['quiet'] === 'true');
26
+ break;
27
+ case 'restore':
28
+ await restoreCheckpoint(cwd, sessionId, flags['id'] ?? null, flags['quiet'] === 'true');
29
+ break;
30
+ case 'list':
31
+ await listCheckpoints(cwd, sessionId);
32
+ break;
33
+ default:
34
+ console.error(`Unknown checkpoint subcommand: "${subcommand}". Use create, restore, or list.`);
35
+ process.exit(1);
36
+ }
37
+ }
38
+ /**
39
+ * Create a checkpoint from the current session state.
40
+ * Called automatically during `activate` and can be called manually.
41
+ */
42
+ export function createCheckpoint(cwd, sessionId, quiet = false) {
43
+ const log = quiet ? (..._args) => { } : console.log;
44
+ const configPath = join(cwd, '.codeledger', 'config.json');
45
+ if (!existsSync(configPath)) {
46
+ if (!quiet) {
47
+ console.error('No .codeledger/ found. Run "codeledger init" first.');
48
+ }
49
+ return null;
50
+ }
51
+ let config;
52
+ try {
53
+ config = JSON.parse(readFileSync(configPath, 'utf-8'));
54
+ }
55
+ catch {
56
+ return null;
57
+ }
58
+ // Load the latest bundle
59
+ const bundle = loadLatestBundle(cwd, config);
60
+ if (!bundle) {
61
+ if (!quiet) {
62
+ console.error('No active bundle found. Run "codeledger activate --task ..." before creating a checkpoint.');
63
+ }
64
+ return null;
65
+ }
66
+ // Get current git HEAD
67
+ let gitRef;
68
+ try {
69
+ gitRef = execSync('git rev-parse HEAD', {
70
+ cwd, encoding: 'utf-8', timeout: 5000, stdio: ['pipe', 'pipe', 'pipe'],
71
+ }).trim();
72
+ }
73
+ catch {
74
+ return null;
75
+ }
76
+ // Get files changed since session start
77
+ const filesChanged = getChangedFilesSinceRef(cwd, sessionId);
78
+ // Get uncommitted files
79
+ const uncommittedFiles = getUncommittedFiles(cwd);
80
+ // Generate checkpoint ID
81
+ const checkpointId = `cp-${Date.now().toString(36)}`;
82
+ const record = {
83
+ checkpoint_id: checkpointId,
84
+ session_id: sessionId ?? 'default',
85
+ bundle_id: bundle.bundle_id,
86
+ task: bundle.task,
87
+ created_at: new Date().toISOString(),
88
+ git_ref: gitRef,
89
+ bundle_files: bundle.files.map((f) => f.path),
90
+ files_changed: filesChanged,
91
+ uncommitted_files: uncommittedFiles,
92
+ };
93
+ // Write checkpoint to disk
94
+ const checkpointDir = getCheckpointDir(cwd, sessionId);
95
+ if (!existsSync(checkpointDir))
96
+ mkdirSync(checkpointDir, { recursive: true });
97
+ const checkpointPath = join(checkpointDir, `${checkpointId}.json`);
98
+ writeFileSync(checkpointPath, JSON.stringify(record, null, 2) + '\n');
99
+ log(`Checkpoint saved: ${checkpointId} (${filesChanged.length} files changed, ${uncommittedFiles.length} uncommitted)`);
100
+ return checkpointId;
101
+ }
102
+ /**
103
+ * Restore from a checkpoint — rewrites the active bundle with checkpoint context
104
+ * and prints a progress summary so the agent knows where to resume.
105
+ */
106
+ async function restoreCheckpoint(cwd, sessionId, checkpointId, quiet = false) {
107
+ const log = quiet ? (..._args) => { } : console.log;
108
+ const checkpointDir = getCheckpointDir(cwd, sessionId);
109
+ if (!existsSync(checkpointDir)) {
110
+ console.error('No checkpoints found for this session.');
111
+ return;
112
+ }
113
+ let record;
114
+ if (checkpointId) {
115
+ // Load specific checkpoint
116
+ const path = join(checkpointDir, `${checkpointId}.json`);
117
+ if (!existsSync(path)) {
118
+ console.error(`Checkpoint "${checkpointId}" not found. Run "codeledger checkpoint list" to see available checkpoints.`);
119
+ process.exit(1);
120
+ }
121
+ record = JSON.parse(readFileSync(path, 'utf-8'));
122
+ }
123
+ else {
124
+ // Load the most recent checkpoint
125
+ const latest = getLatestCheckpoint(checkpointDir);
126
+ if (!latest) {
127
+ console.error('No checkpoints found for this session.');
128
+ return;
129
+ }
130
+ record = latest;
131
+ }
132
+ // Render a resume markdown that the agent can read
133
+ const resumeMd = renderResumeMarkdown(cwd, record);
134
+ // Write the resume info to the active-bundle path so the agent sees it
135
+ const bundlePath = sessionBundlePath(cwd, sessionId);
136
+ const dir = dirname(bundlePath);
137
+ if (!existsSync(dir))
138
+ mkdirSync(dir, { recursive: true });
139
+ // Append resume context to the existing bundle (if it exists)
140
+ let existingBundle = '';
141
+ if (existsSync(bundlePath)) {
142
+ existingBundle = readFileSync(bundlePath, 'utf-8');
143
+ }
144
+ const combined = existingBundle
145
+ ? existingBundle + '\n\n' + resumeMd
146
+ : resumeMd;
147
+ writeFileSync(bundlePath, combined);
148
+ // Also update legacy fallback
149
+ if (sessionId) {
150
+ const fallback = legacyBundlePath(cwd);
151
+ const fallbackDir = dirname(fallback);
152
+ if (!existsSync(fallbackDir))
153
+ mkdirSync(fallbackDir, { recursive: true });
154
+ writeFileSync(fallback, combined);
155
+ }
156
+ log(`Restored from checkpoint: ${record.checkpoint_id}`);
157
+ log(` Task: "${record.task}"`);
158
+ log(` Git ref at checkpoint: ${record.git_ref.slice(0, 7)}`);
159
+ log(` ${record.files_changed.length} files were changed, ${record.uncommitted_files.length} uncommitted`);
160
+ log(` Resume context written to active-bundle.md`);
161
+ }
162
+ /**
163
+ * List all available checkpoints for the current session.
164
+ */
165
+ async function listCheckpoints(cwd, sessionId) {
166
+ const checkpointDir = getCheckpointDir(cwd, sessionId);
167
+ if (!existsSync(checkpointDir)) {
168
+ console.log('No checkpoints found.');
169
+ return;
170
+ }
171
+ const files = readdirSync(checkpointDir)
172
+ .filter((f) => f.endsWith('.json'))
173
+ .map((f) => {
174
+ const path = join(checkpointDir, f);
175
+ return {
176
+ name: f,
177
+ mtime: statSync(path).mtimeMs,
178
+ record: JSON.parse(readFileSync(path, 'utf-8')),
179
+ };
180
+ })
181
+ .sort((a, b) => b.mtime - a.mtime);
182
+ if (files.length === 0) {
183
+ console.log('No checkpoints found.');
184
+ return;
185
+ }
186
+ console.log(`\n Checkpoints (${files.length}):`);
187
+ console.log(' ' + '-'.length + '-'.repeat(59));
188
+ for (const f of files) {
189
+ const r = f.record;
190
+ const age = formatAge(Date.now() - f.mtime);
191
+ console.log(` ${r.checkpoint_id} ${age} ago ${r.files_changed.length} changed ${r.uncommitted_files.length} uncommitted`);
192
+ console.log(` Task: "${truncate(r.task, 60)}"`);
193
+ }
194
+ console.log('');
195
+ }
196
+ /**
197
+ * Count how many checkpoints exist for a session.
198
+ */
199
+ export function countCheckpoints(cwd, sessionId) {
200
+ const checkpointDir = getCheckpointDir(cwd, sessionId);
201
+ if (!existsSync(checkpointDir))
202
+ return 0;
203
+ return readdirSync(checkpointDir).filter((f) => f.endsWith('.json')).length;
204
+ }
205
+ // ── Helpers ─────────────────────────────────────────────────────────────────
206
+ function getCheckpointDir(cwd, sessionId) {
207
+ return join(sessionDir(cwd, sessionId), 'checkpoints');
208
+ }
209
+ function loadLatestBundle(cwd, config) {
210
+ const bundleDir = join(cwd, config.workspace.artifacts_dir, 'bundles');
211
+ if (!existsSync(bundleDir))
212
+ return null;
213
+ const files = readdirSync(bundleDir)
214
+ .filter((f) => f.endsWith('.json'))
215
+ .map((f) => ({ name: f, mtime: statSync(join(bundleDir, f)).mtimeMs }))
216
+ .sort((a, b) => b.mtime - a.mtime);
217
+ if (files.length === 0)
218
+ return null;
219
+ try {
220
+ return JSON.parse(readFileSync(join(bundleDir, files[0].name), 'utf-8'));
221
+ }
222
+ catch {
223
+ return null;
224
+ }
225
+ }
226
+ function getChangedFilesSinceRef(cwd, sessionId) {
227
+ const files = new Set();
228
+ const activateRefPath = sessionActivateRef(cwd, sessionId);
229
+ const sessionRefPath = sessionStartRef(cwd, sessionId);
230
+ const refPath = existsSync(activateRefPath) ? activateRefPath : sessionRefPath;
231
+ if (existsSync(refPath)) {
232
+ const startRef = readFileSync(refPath, 'utf-8').trim();
233
+ if (startRef) {
234
+ try {
235
+ const diff = execSync(`git diff --name-only ${startRef}..HEAD`, {
236
+ cwd, encoding: 'utf-8', timeout: 5000, stdio: ['pipe', 'pipe', 'pipe'],
237
+ }).trim();
238
+ if (diff)
239
+ for (const f of diff.split('\n')) {
240
+ if (!f.startsWith('.codeledger/') && !f.startsWith('.claude/'))
241
+ files.add(f);
242
+ }
243
+ }
244
+ catch {
245
+ // non-fatal
246
+ }
247
+ }
248
+ }
249
+ // Include uncommitted
250
+ try {
251
+ const diff = execSync('git diff --name-only HEAD', {
252
+ cwd, encoding: 'utf-8', timeout: 5000, stdio: ['pipe', 'pipe', 'pipe'],
253
+ }).trim();
254
+ if (diff)
255
+ for (const f of diff.split('\n')) {
256
+ if (!f.startsWith('.codeledger/') && !f.startsWith('.claude/'))
257
+ files.add(f);
258
+ }
259
+ }
260
+ catch {
261
+ // non-fatal
262
+ }
263
+ return [...files];
264
+ }
265
+ function getUncommittedFiles(cwd) {
266
+ const files = new Set();
267
+ try {
268
+ const diff = execSync('git diff --name-only HEAD', {
269
+ cwd, encoding: 'utf-8', timeout: 5000, stdio: ['pipe', 'pipe', 'pipe'],
270
+ }).trim();
271
+ if (diff)
272
+ for (const f of diff.split('\n')) {
273
+ if (!f.startsWith('.codeledger/') && !f.startsWith('.claude/'))
274
+ files.add(f);
275
+ }
276
+ }
277
+ catch {
278
+ // non-fatal
279
+ }
280
+ try {
281
+ const untracked = execSync('git ls-files --others --exclude-standard', {
282
+ cwd, encoding: 'utf-8', timeout: 5000, stdio: ['pipe', 'pipe', 'pipe'],
283
+ }).trim();
284
+ if (untracked)
285
+ for (const f of untracked.split('\n')) {
286
+ if (!f.startsWith('.codeledger/') && !f.startsWith('.claude/'))
287
+ files.add(f);
288
+ }
289
+ }
290
+ catch {
291
+ // non-fatal
292
+ }
293
+ return [...files];
294
+ }
295
+ function getLatestCheckpoint(checkpointDir) {
296
+ const files = readdirSync(checkpointDir)
297
+ .filter((f) => f.endsWith('.json'))
298
+ .map((f) => ({ name: f, mtime: statSync(join(checkpointDir, f)).mtimeMs }))
299
+ .sort((a, b) => b.mtime - a.mtime);
300
+ if (files.length === 0)
301
+ return null;
302
+ try {
303
+ return JSON.parse(readFileSync(join(checkpointDir, files[0].name), 'utf-8'));
304
+ }
305
+ catch {
306
+ return null;
307
+ }
308
+ }
309
+ function renderResumeMarkdown(cwd, record) {
310
+ const lines = [];
311
+ lines.push('---');
312
+ lines.push('## Resume from Checkpoint');
313
+ lines.push('');
314
+ lines.push(`**Checkpoint:** ${record.checkpoint_id}`);
315
+ lines.push(`**Saved at:** ${record.created_at}`);
316
+ lines.push(`**Git ref:** ${record.git_ref.slice(0, 7)}`);
317
+ lines.push('');
318
+ if (record.files_changed.length > 0) {
319
+ lines.push('### Files Already Changed');
320
+ lines.push('');
321
+ lines.push('These files were modified before the interruption:');
322
+ lines.push('');
323
+ for (const f of record.files_changed) {
324
+ lines.push(`- \`${f}\``);
325
+ }
326
+ lines.push('');
327
+ }
328
+ if (record.uncommitted_files.length > 0) {
329
+ lines.push('### Uncommitted Work');
330
+ lines.push('');
331
+ lines.push('These files had uncommitted changes at checkpoint time:');
332
+ lines.push('');
333
+ for (const f of record.uncommitted_files) {
334
+ lines.push(`- \`${f}\``);
335
+ }
336
+ lines.push('');
337
+ }
338
+ // Determine what's left to do
339
+ const changedSet = new Set(record.files_changed);
340
+ const remaining = record.bundle_files.filter((f) => !changedSet.has(f));
341
+ if (remaining.length > 0) {
342
+ lines.push('### Bundle Files Not Yet Touched');
343
+ lines.push('');
344
+ lines.push('These bundle files were not modified before the interruption:');
345
+ lines.push('');
346
+ for (const f of remaining.slice(0, 15)) {
347
+ lines.push(`- \`${f}\``);
348
+ }
349
+ if (remaining.length > 15) {
350
+ lines.push(`- ... and ${remaining.length - 15} more`);
351
+ }
352
+ lines.push('');
353
+ }
354
+ // Check if git has advanced since checkpoint
355
+ try {
356
+ const currentRef = execSync('git rev-parse HEAD', {
357
+ cwd, encoding: 'utf-8', timeout: 5000, stdio: ['pipe', 'pipe', 'pipe'],
358
+ }).trim();
359
+ if (currentRef !== record.git_ref) {
360
+ lines.push(`> **Note:** HEAD has advanced since this checkpoint (was ${record.git_ref.slice(0, 7)}, now ${currentRef.slice(0, 7)}). New commits may have been added.`);
361
+ lines.push('');
362
+ }
363
+ }
364
+ catch {
365
+ // non-fatal
366
+ }
367
+ return lines.join('\n');
368
+ }
369
+ function formatAge(ms) {
370
+ const sec = Math.floor(ms / 1000);
371
+ if (sec < 60)
372
+ return `${sec}s`;
373
+ const min = Math.floor(sec / 60);
374
+ if (min < 60)
375
+ return `${min}m`;
376
+ const hr = Math.floor(min / 60);
377
+ return `${hr}h ${min % 60}m`;
378
+ }
379
+ function truncate(s, max) {
380
+ return s.length <= max ? s : s.slice(0, max - 3) + '...';
381
+ }
382
+ //# sourceMappingURL=checkpoint.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checkpoint.js","sourceRoot":"","sources":["../../src/commands/checkpoint.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"cowork-snapshot.d.ts","sourceRoot":"","sources":["../../src/commands/cowork-snapshot.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAOH,wBAAsB,iBAAiB,CACrC,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC5B,OAAO,CAAC,IAAI,CAAC,CAyBf"}
1
+ {"version":3,"file":"cowork-snapshot.d.ts","sourceRoot":"","sources":["../../src/commands/cowork-snapshot.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAOH,wBAAsB,iBAAiB,CACrC,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC5B,OAAO,CAAC,IAAI,CAAC,CA0Bf"}
@@ -25,9 +25,10 @@ export async function runCoworkSnapshot(cwd, flags) {
25
25
  process.exit(1);
26
26
  }
27
27
  writeProgressSnapshot(workspace, bundle);
28
+ const nextFiles = bundle.selected.slice(0, 5).map((f) => f.path);
28
29
  log('Progress snapshot written to .codeledger/progress-snapshot.json');
29
30
  log(` Intent: "${bundle.intent.text}"`);
30
- log(` Bundle: ${bundle.selected.length} files`);
31
- log(` Remaining unread: ${bundle.selected.length} files`);
31
+ log(` Bundle: ${bundle.selected.length} files from ${bundle.excluded_summary.total_seen} total`);
32
+ log(` Suggested next: ${nextFiles.join(', ')}`);
32
33
  }
33
34
  //# sourceMappingURL=cowork-snapshot.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"cowork-snapshot.js","sourceRoot":"","sources":["../../src/commands/cowork-snapshot.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAE1C,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAE3D,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,GAAW,EACX,KAA6B;IAE7B,MAAM,SAAS,GAAG,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IAC9E,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,MAAM,CAAC;IACxC,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,KAAgB,EAAE,EAAE,GAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC;IAE9D,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,EAAE,aAAa,EAAE,qBAAqB,CAAC,CAAC;IACzE,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC5B,OAAO,CAAC,KAAK,CAAC,oEAAoE,CAAC,CAAC;QACpF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,MAAoB,CAAC;IACzB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAiB,CAAC;IACzE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,KAAK,CAAC,sCAAsC,CAAC,CAAC;QACtD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,qBAAqB,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IAEzC,GAAG,CAAC,iEAAiE,CAAC,CAAC;IACvE,GAAG,CAAC,cAAc,MAAM,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC,CAAC;IACzC,GAAG,CAAC,aAAa,MAAM,CAAC,QAAQ,CAAC,MAAM,QAAQ,CAAC,CAAC;IACjD,GAAG,CAAC,uBAAuB,MAAM,CAAC,QAAQ,CAAC,MAAM,QAAQ,CAAC,CAAC;AAC7D,CAAC"}
1
+ {"version":3,"file":"cowork-snapshot.js","sourceRoot":"","sources":["../../src/commands/cowork-snapshot.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAE1C,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAE3D,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,GAAW,EACX,KAA6B;IAE7B,MAAM,SAAS,GAAG,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IAC9E,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,MAAM,CAAC;IACxC,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,KAAgB,EAAE,EAAE,GAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC;IAE9D,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,EAAE,aAAa,EAAE,qBAAqB,CAAC,CAAC;IACzE,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC5B,OAAO,CAAC,KAAK,CAAC,oEAAoE,CAAC,CAAC;QACpF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,MAAoB,CAAC;IACzB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAiB,CAAC;IACzE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,KAAK,CAAC,sCAAsC,CAAC,CAAC;QACtD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,qBAAqB,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IAEzC,MAAM,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IACjE,GAAG,CAAC,iEAAiE,CAAC,CAAC;IACvE,GAAG,CAAC,cAAc,MAAM,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC,CAAC;IACzC,GAAG,CAAC,aAAa,MAAM,CAAC,QAAQ,CAAC,MAAM,eAAe,MAAM,CAAC,gBAAgB,CAAC,UAAU,QAAQ,CAAC,CAAC;IAClG,GAAG,CAAC,qBAAqB,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACnD,CAAC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * `codeledger doctor`
3
+ *
4
+ * Integration health check that validates the full CodeLedger integration surface.
5
+ * Checks CLI accessibility, config validity, index freshness, hooks installation,
6
+ * SQLite accessibility, and environment compatibility.
7
+ */
8
+ export declare function runDoctor(cwd: string): Promise<void>;
9
+ //# sourceMappingURL=doctor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"AAKA;;;;;;GAMG;AACH,wBAAsB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAoD1D"}
@@ -0,0 +1,169 @@
1
+ import { existsSync, readFileSync, accessSync, statSync, constants } from 'node:fs';
2
+ import { join } from 'node:path';
3
+ import { execSync } from 'node:child_process';
4
+ /**
5
+ * `codeledger doctor`
6
+ *
7
+ * Integration health check that validates the full CodeLedger integration surface.
8
+ * Checks CLI accessibility, config validity, index freshness, hooks installation,
9
+ * SQLite accessibility, and environment compatibility.
10
+ */
11
+ export async function runDoctor(cwd) {
12
+ const checks = [];
13
+ // 1. Git installed
14
+ checks.push(checkGit(cwd));
15
+ // 2. Inside git repo
16
+ checks.push(checkGitRepo(cwd));
17
+ // 3. Node version compatible
18
+ checks.push(checkNodeVersion());
19
+ // 4. .codeledger/ directory exists
20
+ checks.push(checkCodeledgerDir(cwd));
21
+ // 5. Config valid and parseable
22
+ checks.push(checkConfig(cwd));
23
+ // 6. Repo index exists and not stale
24
+ checks.push(checkRepoIndex(cwd));
25
+ // 7. Hooks installed
26
+ checks.push(checkHooks(cwd));
27
+ // 8. SQLite ledger accessible
28
+ checks.push(checkLedger(cwd));
29
+ const allOk = checks.every((c) => c.ok);
30
+ const report = { checks, all_ok: allOk };
31
+ // Print results
32
+ console.log('');
33
+ console.log('CodeLedger Doctor');
34
+ console.log('='.repeat(50));
35
+ for (const check of report.checks) {
36
+ const icon = check.ok ? '\u2705' : '\u274C';
37
+ console.log(` ${icon} ${check.name}: ${check.message}`);
38
+ }
39
+ console.log('');
40
+ if (allOk) {
41
+ console.log('All checks passed. CodeLedger is healthy.');
42
+ }
43
+ else {
44
+ const failCount = checks.filter((c) => !c.ok).length;
45
+ console.log(`${failCount} check${failCount === 1 ? '' : 's'} failed. See above for details.`);
46
+ }
47
+ console.log('');
48
+ if (!allOk) {
49
+ process.exit(1);
50
+ }
51
+ }
52
+ function checkGit(_cwd) {
53
+ try {
54
+ const version = execSync('git --version', { encoding: 'utf-8', stdio: 'pipe' }).trim();
55
+ return { name: 'Git', ok: true, message: version };
56
+ }
57
+ catch {
58
+ return { name: 'Git', ok: false, message: 'Git is not installed' };
59
+ }
60
+ }
61
+ function checkGitRepo(cwd) {
62
+ try {
63
+ execSync('git rev-parse --git-dir', { cwd, encoding: 'utf-8', stdio: 'pipe' });
64
+ return { name: 'Git repository', ok: true, message: 'Inside a git repository' };
65
+ }
66
+ catch {
67
+ return { name: 'Git repository', ok: false, message: 'Not inside a git repository — run "git init"' };
68
+ }
69
+ }
70
+ function checkNodeVersion() {
71
+ const version = process.version;
72
+ const match = version.match(/v(\d+)/);
73
+ const major = match ? parseInt(match[1], 10) : 0;
74
+ if (major >= 18) {
75
+ return { name: 'Node.js', ok: true, message: `${version} (>= 18 required)` };
76
+ }
77
+ return { name: 'Node.js', ok: false, message: `${version} — Node.js >= 18 required` };
78
+ }
79
+ function checkCodeledgerDir(cwd) {
80
+ const dir = join(cwd, '.codeledger');
81
+ if (existsSync(dir)) {
82
+ return { name: '.codeledger/ directory', ok: true, message: 'Exists' };
83
+ }
84
+ return { name: '.codeledger/ directory', ok: false, message: 'Missing — run "codeledger init"' };
85
+ }
86
+ function checkConfig(cwd) {
87
+ const configPath = join(cwd, '.codeledger', 'config.json');
88
+ if (!existsSync(configPath)) {
89
+ return { name: 'Config', ok: false, message: 'config.json not found — run "codeledger init"' };
90
+ }
91
+ try {
92
+ const raw = readFileSync(configPath, 'utf-8');
93
+ const config = JSON.parse(raw);
94
+ if (!config['version'] || !config['selector']) {
95
+ return { name: 'Config', ok: false, message: 'config.json is missing required fields (version, selector)' };
96
+ }
97
+ return { name: 'Config', ok: true, message: `Valid (v${config['version']})` };
98
+ }
99
+ catch {
100
+ return { name: 'Config', ok: false, message: 'config.json is not valid JSON' };
101
+ }
102
+ }
103
+ function checkRepoIndex(cwd) {
104
+ const configPath = join(cwd, '.codeledger', 'config.json');
105
+ if (!existsSync(configPath)) {
106
+ return { name: 'Repo index', ok: false, message: 'No config — cannot locate index' };
107
+ }
108
+ try {
109
+ const config = JSON.parse(readFileSync(configPath, 'utf-8'));
110
+ const cacheDir = config['workspace']?.['cache_dir'] ?? '.codeledger/cache';
111
+ const indexPath = join(cwd, cacheDir, 'repo-index.json');
112
+ if (!existsSync(indexPath)) {
113
+ return { name: 'Repo index', ok: false, message: 'Missing — run "codeledger scan"' };
114
+ }
115
+ const stat = statSync(indexPath);
116
+ const ageMs = Date.now() - stat.mtimeMs;
117
+ const ageHrs = Math.round(ageMs / 3600000);
118
+ if (ageHrs > 24) {
119
+ return { name: 'Repo index', ok: true, message: `Exists but stale (${ageHrs}h old) — consider "codeledger scan"` };
120
+ }
121
+ return { name: 'Repo index', ok: true, message: `Fresh (${ageHrs}h old)` };
122
+ }
123
+ catch {
124
+ return { name: 'Repo index', ok: false, message: 'Could not read index' };
125
+ }
126
+ }
127
+ function checkHooks(cwd) {
128
+ const hooksPath = join(cwd, '.claude', 'hooks.json');
129
+ if (!existsSync(hooksPath)) {
130
+ return { name: 'Hooks', ok: false, message: '.claude/hooks.json not found — run "codeledger init"' };
131
+ }
132
+ try {
133
+ const hooks = JSON.parse(readFileSync(hooksPath, 'utf-8'));
134
+ const hookTypes = Object.keys(hooks);
135
+ const hasSessionStart = hookTypes.some((k) => k.toLowerCase().includes('sessionstart') || k === 'SessionStart');
136
+ if (!hasSessionStart) {
137
+ return { name: 'Hooks', ok: true, message: `Installed (${hookTypes.length} hooks, but no SessionStart)` };
138
+ }
139
+ return { name: 'Hooks', ok: true, message: `Installed (${hookTypes.length} hooks)` };
140
+ }
141
+ catch {
142
+ return { name: 'Hooks', ok: false, message: '.claude/hooks.json is not valid JSON' };
143
+ }
144
+ }
145
+ function checkLedger(cwd) {
146
+ const configPath = join(cwd, '.codeledger', 'config.json');
147
+ if (!existsSync(configPath)) {
148
+ return { name: 'Ledger (SQLite)', ok: false, message: 'No config — cannot locate ledger' };
149
+ }
150
+ try {
151
+ const config = JSON.parse(readFileSync(configPath, 'utf-8'));
152
+ const dbPath = config['workspace']?.['db_path'] ?? '.codeledger/ledger.db';
153
+ const fullPath = join(cwd, dbPath);
154
+ if (!existsSync(fullPath)) {
155
+ return { name: 'Ledger (SQLite)', ok: true, message: 'Not yet created (will be created on first run)' };
156
+ }
157
+ try {
158
+ accessSync(fullPath, constants.R_OK | constants.W_OK);
159
+ return { name: 'Ledger (SQLite)', ok: true, message: 'Accessible (read/write)' };
160
+ }
161
+ catch {
162
+ return { name: 'Ledger (SQLite)', ok: false, message: 'Exists but not writable' };
163
+ }
164
+ }
165
+ catch {
166
+ return { name: 'Ledger (SQLite)', ok: false, message: 'Could not check ledger' };
167
+ }
168
+ }
169
+ //# sourceMappingURL=doctor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AASA,wBAAsB,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA6G5F"}
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAUA,wBAAsB,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA8I5F"}