@codeledger/cli 0.1.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 (94) hide show
  1. package/LICENSE +27 -0
  2. package/dist/commands/activate.d.ts +18 -0
  3. package/dist/commands/activate.d.ts.map +1 -0
  4. package/dist/commands/activate.js +326 -0
  5. package/dist/commands/activate.js.map +1 -0
  6. package/dist/commands/bundle.d.ts +2 -0
  7. package/dist/commands/bundle.d.ts.map +1 -0
  8. package/dist/commands/bundle.js +144 -0
  9. package/dist/commands/bundle.js.map +1 -0
  10. package/dist/commands/clean.d.ts +2 -0
  11. package/dist/commands/clean.d.ts.map +1 -0
  12. package/dist/commands/clean.js +28 -0
  13. package/dist/commands/clean.js.map +1 -0
  14. package/dist/commands/compare.d.ts +2 -0
  15. package/dist/commands/compare.d.ts.map +1 -0
  16. package/dist/commands/compare.js +216 -0
  17. package/dist/commands/compare.js.map +1 -0
  18. package/dist/commands/init.d.ts +2 -0
  19. package/dist/commands/init.d.ts.map +1 -0
  20. package/dist/commands/init.js +135 -0
  21. package/dist/commands/init.js.map +1 -0
  22. package/dist/commands/run.d.ts +2 -0
  23. package/dist/commands/run.d.ts.map +1 -0
  24. package/dist/commands/run.js +57 -0
  25. package/dist/commands/run.js.map +1 -0
  26. package/dist/commands/scan.d.ts +2 -0
  27. package/dist/commands/scan.d.ts.map +1 -0
  28. package/dist/commands/scan.js +27 -0
  29. package/dist/commands/scan.js.map +1 -0
  30. package/dist/commands/session-cleanup.d.ts +11 -0
  31. package/dist/commands/session-cleanup.d.ts.map +1 -0
  32. package/dist/commands/session-cleanup.js +81 -0
  33. package/dist/commands/session-cleanup.js.map +1 -0
  34. package/dist/commands/session-init.d.ts +10 -0
  35. package/dist/commands/session-init.d.ts.map +1 -0
  36. package/dist/commands/session-init.js +46 -0
  37. package/dist/commands/session-init.js.map +1 -0
  38. package/dist/commands/session-progress.d.ts +12 -0
  39. package/dist/commands/session-progress.d.ts.map +1 -0
  40. package/dist/commands/session-progress.js +259 -0
  41. package/dist/commands/session-progress.js.map +1 -0
  42. package/dist/commands/session-summary.d.ts +14 -0
  43. package/dist/commands/session-summary.d.ts.map +1 -0
  44. package/dist/commands/session-summary.js +287 -0
  45. package/dist/commands/session-summary.js.map +1 -0
  46. package/dist/commands/sessions.d.ts +9 -0
  47. package/dist/commands/sessions.d.ts.map +1 -0
  48. package/dist/commands/sessions.js +60 -0
  49. package/dist/commands/sessions.js.map +1 -0
  50. package/dist/commands/share.d.ts +9 -0
  51. package/dist/commands/share.d.ts.map +1 -0
  52. package/dist/commands/share.js +275 -0
  53. package/dist/commands/share.js.map +1 -0
  54. package/dist/index.d.ts +3 -0
  55. package/dist/index.d.ts.map +1 -0
  56. package/dist/index.js +150 -0
  57. package/dist/index.js.map +1 -0
  58. package/dist/session-id.d.ts +22 -0
  59. package/dist/session-id.d.ts.map +1 -0
  60. package/dist/session-id.js +49 -0
  61. package/dist/session-id.js.map +1 -0
  62. package/dist/session-paths.d.ts +23 -0
  63. package/dist/session-paths.d.ts.map +1 -0
  64. package/dist/session-paths.js +44 -0
  65. package/dist/session-paths.js.map +1 -0
  66. package/dist/session-registry.d.ts +19 -0
  67. package/dist/session-registry.d.ts.map +1 -0
  68. package/dist/session-registry.js +180 -0
  69. package/dist/session-registry.js.map +1 -0
  70. package/dist/templates/claude-md.d.ts +10 -0
  71. package/dist/templates/claude-md.d.ts.map +1 -0
  72. package/dist/templates/claude-md.js +107 -0
  73. package/dist/templates/claude-md.js.map +1 -0
  74. package/dist/templates/config.d.ts +3 -0
  75. package/dist/templates/config.d.ts.map +1 -0
  76. package/dist/templates/config.js +82 -0
  77. package/dist/templates/config.js.map +1 -0
  78. package/dist/templates/harness-pack.d.ts +3 -0
  79. package/dist/templates/harness-pack.d.ts.map +1 -0
  80. package/dist/templates/harness-pack.js +26 -0
  81. package/dist/templates/harness-pack.js.map +1 -0
  82. package/dist/templates/hooks.d.ts +34 -0
  83. package/dist/templates/hooks.d.ts.map +1 -0
  84. package/dist/templates/hooks.js +149 -0
  85. package/dist/templates/hooks.js.map +1 -0
  86. package/dist/templates/scenarios.d.ts +3 -0
  87. package/dist/templates/scenarios.d.ts.map +1 -0
  88. package/dist/templates/scenarios.js +335 -0
  89. package/dist/templates/scenarios.js.map +1 -0
  90. package/dist/version.d.ts +2 -0
  91. package/dist/version.d.ts.map +1 -0
  92. package/dist/version.js +5 -0
  93. package/dist/version.js.map +1 -0
  94. package/package.json +45 -0
package/LICENSE ADDED
@@ -0,0 +1,27 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025 Intelligent Context AI, Inc.
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
22
+
23
+ ---
24
+
25
+ Note: This license applies to the CLI wrapper, types, repository scanning,
26
+ instrumentation, harness, and report packages (the "Plugin"). The scoring
27
+ engine (packages/core-engine/bin/) is licensed separately under LICENSE-CORE.
@@ -0,0 +1,18 @@
1
+ /**
2
+ * `codeledger activate [--task "..."] [--session <id>]`
3
+ *
4
+ * All-in-one command: scan if stale -> generate bundle -> write active-bundle.md.
5
+ * Designed to be called by agent hooks (Claude Code, Cursor, Codex) so that
6
+ * context is ready before the agent starts working on a task.
7
+ *
8
+ * When called without --task (e.g. from SessionStart hook), only scans the
9
+ * repo index so it's warm for future bundle generation. No bundle is written
10
+ * because there's no real task to select context for.
11
+ *
12
+ * Multi-session: when a --session ID is provided (or resolved from env/PID),
13
+ * all state files are written to .codeledger/sessions/{id}/ instead of the
14
+ * shared .codeledger/ root. A copy is also written to the legacy fallback
15
+ * path for non-session-aware agents.
16
+ */
17
+ export declare function runActivate(cwd: string, flags: Record<string, string>): Promise<void>;
18
+ //# sourceMappingURL=activate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"activate.d.ts","sourceRoot":"","sources":["../../src/commands/activate.ts"],"names":[],"mappings":"AAgBA;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,WAAW,CAC/B,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC5B,OAAO,CAAC,IAAI,CAAC,CAyLf"}
@@ -0,0 +1,326 @@
1
+ import { readFileSync, writeFileSync, existsSync, mkdirSync, statSync, readdirSync } from 'node:fs';
2
+ import { join, dirname } from 'node:path';
3
+ import { execSync } from 'node:child_process';
4
+ import { buildBundleViaEngine } from '@codeledger/core-engine';
5
+ import { buildRepoIndex } from '@codeledger/repo';
6
+ import { renderBundleMarkdown } from '@codeledger/harness';
7
+ import { resolveSessionId } from '../session-id.js';
8
+ import { sessionBundlePath, sessionActivateRef, sessionStartRef, legacyBundlePath, } from '../session-paths.js';
9
+ import { updateSession, findOverlappingFiles } from '../session-registry.js';
10
+ /**
11
+ * `codeledger activate [--task "..."] [--session <id>]`
12
+ *
13
+ * All-in-one command: scan if stale -> generate bundle -> write active-bundle.md.
14
+ * Designed to be called by agent hooks (Claude Code, Cursor, Codex) so that
15
+ * context is ready before the agent starts working on a task.
16
+ *
17
+ * When called without --task (e.g. from SessionStart hook), only scans the
18
+ * repo index so it's warm for future bundle generation. No bundle is written
19
+ * because there's no real task to select context for.
20
+ *
21
+ * Multi-session: when a --session ID is provided (or resolved from env/PID),
22
+ * all state files are written to .codeledger/sessions/{id}/ instead of the
23
+ * shared .codeledger/ root. A copy is also written to the legacy fallback
24
+ * path for non-session-aware agents.
25
+ */
26
+ export async function runActivate(cwd, flags) {
27
+ const task = flags['task'];
28
+ const quiet = flags['quiet'] === 'true';
29
+ const log = quiet ? (..._args) => { } : console.log;
30
+ const sessionId = resolveSessionId({ session: flags['session'] });
31
+ const configPath = join(cwd, '.codeledger', 'config.json');
32
+ if (!existsSync(configPath)) {
33
+ console.error('No .codeledger/config.json found. Run "codeledger init" first.');
34
+ process.exit(1);
35
+ }
36
+ let config;
37
+ try {
38
+ config = JSON.parse(readFileSync(configPath, 'utf-8'));
39
+ }
40
+ catch {
41
+ console.error('Failed to parse .codeledger/config.json. Check for syntax errors.');
42
+ process.exit(1);
43
+ }
44
+ const indexPath = join(cwd, config.workspace.cache_dir, 'repo-index.json');
45
+ // -- Step 1: Scan if stale ------------------------------------------------
46
+ const staleSec = flags['stale-after']
47
+ ? parsePositiveInt(flags['stale-after'], 'stale-after')
48
+ : 3600; // default: re-scan if index is >1 hour old
49
+ if (isIndexStale(indexPath, staleSec)) {
50
+ log('Repo index is stale or missing -- rescanning...');
51
+ buildRepoIndex({
52
+ root: cwd,
53
+ repoConfig: config.repo,
54
+ outputPath: indexPath,
55
+ log,
56
+ });
57
+ log(' Scan complete.');
58
+ }
59
+ // -- Save session start ref for session-progress (full session view) ------
60
+ // Only write if no ref exists yet (first activate of the session)
61
+ saveSessionStartRef(cwd, sessionId);
62
+ // -- Scan-only mode: no task means just warm the index --------------------
63
+ if (!task) {
64
+ log('Index is warm. Run "codeledger activate --task ..." to generate a context bundle.');
65
+ // Write a placeholder active-bundle.md so the agent knows no bundle exists
66
+ const placeholderContent = [
67
+ '# CodeLedger Context Bundle',
68
+ '',
69
+ 'No task specified yet. The repo index has been scanned and is ready.',
70
+ '',
71
+ 'To generate a context bundle for your task, run:',
72
+ '',
73
+ '```',
74
+ 'codeledger activate --task "describe your task here"',
75
+ '```',
76
+ '',
77
+ 'The bundle will list the most relevant files ranked by score with',
78
+ 'relevance reasons and code excerpts.',
79
+ '',
80
+ ].join('\n');
81
+ // Write to session-specific path (or legacy path if no session)
82
+ const bundlePath = sessionBundlePath(cwd, sessionId);
83
+ ensureDir(bundlePath);
84
+ writeFileSync(bundlePath, placeholderContent);
85
+ // Also update the legacy fallback for non-session-aware agents
86
+ if (sessionId) {
87
+ const fallback = legacyBundlePath(cwd);
88
+ ensureDir(fallback);
89
+ writeFileSync(fallback, placeholderContent);
90
+ }
91
+ return;
92
+ }
93
+ let repoIndex;
94
+ try {
95
+ repoIndex = JSON.parse(readFileSync(indexPath, 'utf-8'));
96
+ }
97
+ catch {
98
+ console.error('Failed to parse repo index. Try running "codeledger scan" to rebuild it.');
99
+ process.exit(1);
100
+ }
101
+ // -- Step 2: Generate bundle ----------------------------------------------
102
+ const budgetTokens = flags['budget']
103
+ ? parsePositiveInt(flags['budget'], 'budget')
104
+ : config.selector.default_budget.tokens;
105
+ const maxFiles = flags['max-files']
106
+ ? parsePositiveInt(flags['max-files'], 'max-files')
107
+ : config.selector.default_budget.max_files;
108
+ // -- Auto-close previous task: print mini-recap before overwriting ref ------
109
+ emitPreviousTaskRecap(cwd, config, sessionId, log);
110
+ // -- Save activate ref for session-summary (per-task scoping) --------------
111
+ saveActivateRef(cwd, sessionId);
112
+ log(`Generating context bundle for: "${truncate(task, 80)}"`);
113
+ const bundle = await buildBundleViaEngine({
114
+ taskText: task,
115
+ repoIndex,
116
+ selectorConfig: config.selector,
117
+ budget: { tokens: budgetTokens, max_files: maxFiles },
118
+ indexPath: indexPath,
119
+ });
120
+ // -- Step 3: Write active-bundle.md ----------------------------------------
121
+ const bundleMd = renderBundleMarkdown(bundle);
122
+ // Write to session-specific path
123
+ const bundlePath = sessionBundlePath(cwd, sessionId);
124
+ ensureDir(bundlePath);
125
+ writeFileSync(bundlePath, bundleMd);
126
+ // Also update the legacy fallback for non-session-aware agents
127
+ if (sessionId) {
128
+ const fallback = legacyBundlePath(cwd);
129
+ ensureDir(fallback);
130
+ writeFileSync(fallback, bundleMd);
131
+ }
132
+ // Also save the JSON artifact
133
+ const bundleDir = join(cwd, config.workspace.artifacts_dir, 'bundles');
134
+ if (!existsSync(bundleDir)) {
135
+ mkdirSync(bundleDir, { recursive: true });
136
+ }
137
+ writeFileSync(join(bundleDir, `${bundle.bundle_id}.json`), JSON.stringify(bundle, null, 2) + '\n');
138
+ // -- Update session registry with task and bundle files --------------------
139
+ if (sessionId) {
140
+ const bundleFiles = bundle.files.map((f) => f.path);
141
+ updateSession(cwd, sessionId, {
142
+ task,
143
+ last_active_at: new Date().toISOString(),
144
+ bundle_files: bundleFiles,
145
+ });
146
+ // -- Conflict detection: check for overlapping files with other sessions --
147
+ emitOverlapWarnings(cwd, sessionId, bundleFiles, log);
148
+ }
149
+ log(`\u{1F4E6} Bundle: ${bundle.files.length} files, ~${bundle.total_tokens} tokens`);
150
+ // Show confidence
151
+ if (bundle.confidence) {
152
+ const c = bundle.confidence;
153
+ const icon = c.level === 'high' ? '\u{1F7E2}' : c.level === 'medium' ? '\u{1F7E1}' : '\u{1F534}';
154
+ log(` Confidence: ${icon} ${c.level.toUpperCase()}`);
155
+ if (c.level === 'low') {
156
+ for (const reason of c.reasons) {
157
+ log(` - ${reason}`);
158
+ }
159
+ }
160
+ }
161
+ const displayPath = sessionId
162
+ ? `.codeledger/sessions/${sessionId}/active-bundle.md`
163
+ : config.injection.file_drop_path;
164
+ log(`\u{2705} Active bundle written to ${displayPath}`);
165
+ if (!quiet) {
166
+ const fullFiles = bundle.files.filter((f) => !f.is_stub);
167
+ log('\n Top files:');
168
+ for (const f of fullFiles.slice(0, 5)) {
169
+ log(` ${f.score.toFixed(3)} ${f.path} [${f.reasons.join(', ')}]`);
170
+ }
171
+ if (fullFiles.length > 5) {
172
+ log(` ... and ${fullFiles.length - 5} more`);
173
+ }
174
+ const stubs = bundle.files.filter((f) => f.is_stub);
175
+ if (stubs.length > 0) {
176
+ log(` + ${stubs.length} interface stubs`);
177
+ }
178
+ if (sessionId) {
179
+ log(` Session: ${sessionId}`);
180
+ }
181
+ }
182
+ }
183
+ // โ”€โ”€ Conflict Detection โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
184
+ function emitOverlapWarnings(cwd, sessionId, bundleFiles, log) {
185
+ const overlaps = findOverlappingFiles(cwd, sessionId, bundleFiles);
186
+ if (overlaps.size === 0)
187
+ return;
188
+ for (const [otherSessionId, files] of overlaps) {
189
+ const severity = files.length >= 4 ? '\u{1F534}' : '\u{1F7E1}';
190
+ log('');
191
+ log(`${severity} Session ${otherSessionId} has ${files.length} overlapping file${files.length === 1 ? '' : 's'}:`);
192
+ for (const f of files.slice(0, 5)) {
193
+ log(` ${f}`);
194
+ }
195
+ if (files.length > 5) {
196
+ log(` ... and ${files.length - 5} more`);
197
+ }
198
+ if (files.length >= 4) {
199
+ log(' Concurrent edits to these files may cause conflicts.');
200
+ }
201
+ }
202
+ }
203
+ // โ”€โ”€ Helpers โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
204
+ function ensureDir(filePath) {
205
+ const dir = dirname(filePath);
206
+ if (!existsSync(dir))
207
+ mkdirSync(dir, { recursive: true });
208
+ }
209
+ function isIndexStale(indexPath, maxAgeSec) {
210
+ if (!existsSync(indexPath))
211
+ return true;
212
+ try {
213
+ const stat = statSync(indexPath);
214
+ const ageMs = Date.now() - stat.mtimeMs;
215
+ return ageMs > maxAgeSec * 1000;
216
+ }
217
+ catch {
218
+ return true;
219
+ }
220
+ }
221
+ function parsePositiveInt(value, flagName) {
222
+ const n = parseInt(value, 10);
223
+ if (Number.isNaN(n) || n <= 0) {
224
+ console.error(`Invalid value for --${flagName}: "${value}" (expected a positive integer)`);
225
+ process.exit(1);
226
+ }
227
+ return n;
228
+ }
229
+ function truncate(s, max) {
230
+ return s.length <= max ? s : s.slice(0, max - 3) + '...';
231
+ }
232
+ /**
233
+ * Save the current HEAD sha for session-progress (full session view).
234
+ * Only writes once per session (first activate call).
235
+ */
236
+ function saveSessionStartRef(cwd, sessionId) {
237
+ const refPath = sessionStartRef(cwd, sessionId);
238
+ if (existsSync(refPath))
239
+ return; // already saved this session
240
+ try {
241
+ const head = execSync('git rev-parse HEAD', {
242
+ cwd,
243
+ encoding: 'utf-8',
244
+ timeout: 5000,
245
+ stdio: ['pipe', 'pipe', 'pipe'],
246
+ }).trim();
247
+ ensureDir(refPath);
248
+ writeFileSync(refPath, head + '\n');
249
+ }
250
+ catch {
251
+ // Non-fatal: fresh repo with no commits, or not a git repo
252
+ }
253
+ }
254
+ /**
255
+ * If a previous task's `.activate-ref` exists, print a mini-recap before
256
+ * overwriting it. This ensures no task's metrics are silently lost when the
257
+ * developer moves to a new task without manually calling session-summary.
258
+ */
259
+ function emitPreviousTaskRecap(cwd, config, sessionId, log) {
260
+ const activateRefPath = sessionActivateRef(cwd, sessionId);
261
+ if (!existsSync(activateRefPath))
262
+ return;
263
+ const startRef = readFileSync(activateRefPath, 'utf-8').trim();
264
+ if (!startRef)
265
+ return;
266
+ // Load the latest bundle to get previous task info
267
+ const bundleDir = join(cwd, config.workspace.artifacts_dir, 'bundles');
268
+ if (!existsSync(bundleDir))
269
+ return;
270
+ const bundleFiles = readdirSync(bundleDir)
271
+ .filter((f) => f.endsWith('.json'))
272
+ .map((f) => ({ name: f, mtime: statSync(join(bundleDir, f)).mtimeMs }))
273
+ .sort((a, b) => b.mtime - a.mtime);
274
+ if (bundleFiles.length === 0)
275
+ return;
276
+ let bundle;
277
+ try {
278
+ bundle = JSON.parse(readFileSync(join(bundleDir, bundleFiles[0].name), 'utf-8'));
279
+ }
280
+ catch {
281
+ return;
282
+ }
283
+ // Get files changed since previous activate-ref
284
+ let changedFiles;
285
+ try {
286
+ const diff = execSync(`git diff --name-only ${startRef}..HEAD`, {
287
+ cwd,
288
+ encoding: 'utf-8',
289
+ timeout: 5000,
290
+ stdio: ['pipe', 'pipe', 'pipe'],
291
+ }).trim();
292
+ changedFiles = diff ? diff.split('\n') : [];
293
+ }
294
+ catch {
295
+ return;
296
+ }
297
+ if (changedFiles.length === 0)
298
+ return;
299
+ const paths = bundle.files.map((f) => f.path);
300
+ const overlap = changedFiles.filter((f) => paths.includes(f));
301
+ const recall = changedFiles.length > 0 ? overlap.length / changedFiles.length : 0;
302
+ const recallPct = Math.round(recall * 100);
303
+ log('');
304
+ log('-- Previous task recap ----------------------------------------');
305
+ log(` Task: "${truncate(bundle.task, 60)}"`);
306
+ log(` Bundle predicted ${overlap.length}/${changedFiles.length} files changed (${recallPct}% recall)`);
307
+ log('-'.repeat(61));
308
+ log('');
309
+ }
310
+ function saveActivateRef(cwd, sessionId) {
311
+ const refPath = sessionActivateRef(cwd, sessionId);
312
+ try {
313
+ const head = execSync('git rev-parse HEAD', {
314
+ cwd,
315
+ encoding: 'utf-8',
316
+ timeout: 5000,
317
+ stdio: ['pipe', 'pipe', 'pipe'],
318
+ }).trim();
319
+ ensureDir(refPath);
320
+ writeFileSync(refPath, head + '\n');
321
+ }
322
+ catch {
323
+ // Non-fatal: fresh repo with no commits, or not a git repo
324
+ }
325
+ }
326
+ //# sourceMappingURL=activate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"activate.js","sourceRoot":"","sources":["../../src/commands/activate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function runBundle(cwd: string, flags: Record<string, string>): Promise<void>;
2
+ //# sourceMappingURL=bundle.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bundle.d.ts","sourceRoot":"","sources":["../../src/commands/bundle.ts"],"names":[],"mappings":"AAMA,wBAAsB,SAAS,CAC7B,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC5B,OAAO,CAAC,IAAI,CAAC,CAkJf"}
@@ -0,0 +1,144 @@
1
+ import { readFileSync, existsSync, writeFileSync, mkdirSync } from 'node:fs';
2
+ import { join } from 'node:path';
3
+ import { buildBundleViaEngine } from '@codeledger/core-engine';
4
+ import { buildRepoIndex } from '@codeledger/repo';
5
+ export async function runBundle(cwd, flags) {
6
+ const task = flags['task'];
7
+ if (!task) {
8
+ console.error('โŒ --task is required. Usage: codeledger bundle --task "your task description"');
9
+ process.exit(1);
10
+ }
11
+ const jsonMode = flags['json'] === 'true';
12
+ // In --json mode, all human-readable output goes to stderr so stdout is pure JSON
13
+ const log = jsonMode
14
+ ? (...args) => { console.error(...args); }
15
+ : console.log.bind(console);
16
+ const configPath = join(cwd, '.codeledger', 'config.json');
17
+ if (!existsSync(configPath)) {
18
+ console.error('โŒ No .codeledger/config.json found. Run "codeledger init" first.');
19
+ process.exit(1);
20
+ }
21
+ let config;
22
+ try {
23
+ config = JSON.parse(readFileSync(configPath, 'utf-8'));
24
+ }
25
+ catch {
26
+ console.error('Failed to parse .codeledger/config.json. Check for syntax errors.');
27
+ process.exit(1);
28
+ }
29
+ const indexPath = join(cwd, config.workspace.cache_dir, 'repo-index.json');
30
+ // Auto-scan if no index
31
+ if (!existsSync(indexPath)) {
32
+ log('โš ๏ธ No repo index found. Running scan first...\n');
33
+ buildRepoIndex({
34
+ root: cwd,
35
+ repoConfig: config.repo,
36
+ outputPath: indexPath,
37
+ log,
38
+ });
39
+ log('');
40
+ }
41
+ let repoIndex;
42
+ try {
43
+ repoIndex = JSON.parse(readFileSync(indexPath, 'utf-8'));
44
+ }
45
+ catch {
46
+ console.error('Failed to parse repo index. Try running "codeledger scan" to rebuild it.');
47
+ process.exit(1);
48
+ }
49
+ // Parse budget
50
+ const budgetTokens = flags['budget']
51
+ ? parseBudget(flags['budget'])
52
+ : config.selector.default_budget.tokens;
53
+ const maxFiles = flags['max-files']
54
+ ? parsePositiveInt(flags['max-files'], 'max-files')
55
+ : config.selector.default_budget.max_files;
56
+ log(`๐ŸŽฏ Generating context bundle for: "${task}"\n`);
57
+ log(` Budget: ${budgetTokens ?? 'unlimited'} tokens, ${maxFiles ?? 'unlimited'} max files`);
58
+ log(` Sufficiency threshold: ${config.selector.sufficiency_threshold}\n`);
59
+ const explain = flags['explain'] === 'true';
60
+ const bundle = await buildBundleViaEngine({
61
+ taskText: task,
62
+ repoIndex,
63
+ selectorConfig: config.selector,
64
+ budget: { tokens: budgetTokens, max_files: maxFiles },
65
+ explain,
66
+ indexPath: indexPath,
67
+ });
68
+ // Write bundle artifact to disk
69
+ const bundleDir = join(cwd, config.workspace.artifacts_dir, 'bundles');
70
+ if (!existsSync(bundleDir)) {
71
+ mkdirSync(bundleDir, { recursive: true });
72
+ }
73
+ const bundlePath = join(bundleDir, `${bundle.bundle_id}.json`);
74
+ writeFileSync(bundlePath, JSON.stringify(bundle, null, 2) + '\n');
75
+ // --json mode: emit pure JSON to stdout and exit
76
+ if (jsonMode) {
77
+ process.stdout.write(JSON.stringify(bundle, null, 2) + '\n');
78
+ return;
79
+ }
80
+ // Print summary
81
+ log(`๐Ÿ“ฆ Bundle: ${bundle.bundle_id}`);
82
+ log(` Files selected: ${bundle.files.length}`);
83
+ log(` Total tokens: ~${bundle.total_tokens}`);
84
+ log(` Cumulative score: ${bundle.cumulative_score}`);
85
+ // Print confidence
86
+ if (bundle.confidence) {
87
+ const c = bundle.confidence;
88
+ const icon = c.level === 'high' ? '๐ŸŸข' : c.level === 'medium' ? '๐ŸŸก' : '๐Ÿ”ด';
89
+ log(` Confidence: ${icon} ${c.level.toUpperCase()} (${c.score})`);
90
+ if (c.level !== 'high') {
91
+ for (const reason of c.reasons) {
92
+ log(` - ${reason}`);
93
+ }
94
+ }
95
+ }
96
+ log('');
97
+ // Print stubs count
98
+ const stubs = bundle.files.filter((f) => f.is_stub);
99
+ if (stubs.length > 0) {
100
+ log(` Interface stubs: ${stubs.length} (adjacent dependency signatures)`);
101
+ }
102
+ // Print deprecation warnings count
103
+ const filesWithWarnings = bundle.files.filter((f) => f.deprecation_warnings && f.deprecation_warnings.length > 0);
104
+ if (filesWithWarnings.length > 0) {
105
+ const totalWarnings = filesWithWarnings.reduce((sum, f) => sum + (f.deprecation_warnings?.length ?? 0), 0);
106
+ log(` Deprecation warnings: ${totalWarnings} across ${filesWithWarnings.length} files`);
107
+ }
108
+ log('\n Top files:');
109
+ const top = bundle.files.filter((f) => !f.is_stub).slice(0, 10);
110
+ for (const f of top) {
111
+ const reasons = f.reasons.join(', ');
112
+ log(` ${f.score.toFixed(3)} ${f.path} [${reasons}]`);
113
+ }
114
+ if (bundle.files.length > 10) {
115
+ log(` ... and ${bundle.files.length - 10} more`);
116
+ }
117
+ // Print explain table if requested
118
+ if (explain && bundle.explain) {
119
+ log('\n Scoring Breakdown (--explain):');
120
+ log(' %-40s kw cent churn recnt test szpen succ fail errin', 'File');
121
+ for (const f of bundle.files.filter((bf) => !bf.is_stub)) {
122
+ const feat = bundle.explain[f.path];
123
+ if (!feat)
124
+ continue;
125
+ const name = f.path.length > 40 ? '...' + f.path.slice(-37) : f.path.padEnd(40);
126
+ log(` ${name} ${feat.keyword.toFixed(2)} ${feat.centrality.toFixed(2)} ${feat.churn.toFixed(2)} ${feat.recent_touch.toFixed(2)} ${feat.test_relevance.toFixed(2)} ${feat.size_penalty.toFixed(2)} ${feat.success_prior.toFixed(2)} ${feat.fail_prior.toFixed(2)} ${feat.error_infrastructure.toFixed(2)}`);
127
+ }
128
+ }
129
+ log(`\nโœ… Bundle written to ${bundlePath}`);
130
+ }
131
+ function parsePositiveInt(value, flagName) {
132
+ const n = parseInt(value, 10);
133
+ if (Number.isNaN(n) || n <= 0) {
134
+ console.error(`Invalid value for --${flagName}: "${value}" (expected a positive integer)`);
135
+ process.exit(1);
136
+ }
137
+ return n;
138
+ }
139
+ function parseBudget(budgetStr) {
140
+ // Supports: "tokens=6000" or just "6000"
141
+ const match = budgetStr.match(/(?:tokens=)?(\d+)/);
142
+ return match ? parseInt(match[1], 10) : undefined;
143
+ }
144
+ //# sourceMappingURL=bundle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bundle.js","sourceRoot":"","sources":["../../src/commands/bundle.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function runClean(cwd: string): Promise<void>;
2
+ //# sourceMappingURL=clean.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clean.d.ts","sourceRoot":"","sources":["../../src/commands/clean.ts"],"names":[],"mappings":"AAKA,wBAAsB,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAyBzD"}
@@ -0,0 +1,28 @@
1
+ import { readFileSync, existsSync } from 'node:fs';
2
+ import { join } from 'node:path';
3
+ import { cleanupAllWorktrees } from '@codeledger/harness';
4
+ export async function runClean(cwd) {
5
+ const configPath = join(cwd, '.codeledger', 'config.json');
6
+ if (!existsSync(configPath)) {
7
+ console.error('โŒ No .codeledger/config.json found. Run "codeledger init" first.');
8
+ process.exit(1);
9
+ }
10
+ let config;
11
+ try {
12
+ config = JSON.parse(readFileSync(configPath, 'utf-8'));
13
+ }
14
+ catch {
15
+ console.error('Failed to parse .codeledger/config.json. Check for syntax errors.');
16
+ process.exit(1);
17
+ }
18
+ const worktreeRoot = join(cwd, config.workspace.worktree_root);
19
+ console.log('๐Ÿงน Cleaning up orphaned worktrees...');
20
+ const removed = cleanupAllWorktrees(cwd, worktreeRoot);
21
+ if (removed > 0) {
22
+ console.log(`โœ… Removed ${removed} orphaned worktree${removed > 1 ? 's' : ''}.`);
23
+ }
24
+ else {
25
+ console.log('โœ… No orphaned worktrees found.');
26
+ }
27
+ }
28
+ //# sourceMappingURL=clean.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clean.js","sourceRoot":"","sources":["../../src/commands/clean.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAE1D,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,GAAW;IACxC,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,aAAa,EAAE,aAAa,CAAC,CAAC;IAC3D,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC5B,OAAO,CAAC,KAAK,CAAC,kEAAkE,CAAC,CAAC;QAClF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,MAAwB,CAAC;IAC7B,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAqB,CAAC;IAC7E,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,KAAK,CAAC,mEAAmE,CAAC,CAAC;QACnF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;IAE/D,OAAO,CAAC,GAAG,CAAC,sCAAsC,CAAC,CAAC;IACpD,MAAM,OAAO,GAAG,mBAAmB,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;IAEvD,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,aAAa,OAAO,qBAAqB,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAClF,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC;IAChD,CAAC;AACH,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function runCompare(cwd: string, flags: Record<string, string>): Promise<void>;
2
+ //# sourceMappingURL=compare.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compare.d.ts","sourceRoot":"","sources":["../../src/commands/compare.ts"],"names":[],"mappings":"AA6EA,wBAAsB,UAAU,CAC9B,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC5B,OAAO,CAAC,IAAI,CAAC,CAqGf"}