@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.
- package/dist/artifacts/summary.d.ts +6 -0
- package/dist/artifacts/summary.d.ts.map +1 -0
- package/dist/artifacts/summary.js +49 -0
- package/dist/artifacts/summary.js.map +1 -0
- package/dist/commands/activate.d.ts.map +1 -1
- package/dist/commands/activate.js +155 -19
- package/dist/commands/activate.js.map +1 -1
- package/dist/commands/bundle.d.ts.map +1 -1
- package/dist/commands/bundle.js +28 -5
- package/dist/commands/bundle.js.map +1 -1
- package/dist/commands/checkpoint.d.ts +26 -0
- package/dist/commands/checkpoint.d.ts.map +1 -0
- package/dist/commands/checkpoint.js +382 -0
- package/dist/commands/checkpoint.js.map +1 -0
- package/dist/commands/cowork-snapshot.d.ts.map +1 -1
- package/dist/commands/cowork-snapshot.js +3 -2
- package/dist/commands/cowork-snapshot.js.map +1 -1
- package/dist/commands/doctor.d.ts +9 -0
- package/dist/commands/doctor.d.ts.map +1 -0
- package/dist/commands/doctor.js +169 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +46 -12
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/intent.d.ts +37 -0
- package/dist/commands/intent.d.ts.map +1 -0
- package/dist/commands/intent.js +408 -0
- package/dist/commands/intent.js.map +1 -0
- package/dist/commands/manifest.d.ts +8 -0
- package/dist/commands/manifest.d.ts.map +1 -0
- package/dist/commands/manifest.js +144 -0
- package/dist/commands/manifest.js.map +1 -0
- package/dist/commands/policy.d.ts +8 -0
- package/dist/commands/policy.d.ts.map +1 -0
- package/dist/commands/policy.js +27 -0
- package/dist/commands/policy.js.map +1 -0
- package/dist/commands/refine.d.ts.map +1 -1
- package/dist/commands/refine.js +16 -0
- package/dist/commands/refine.js.map +1 -1
- package/dist/commands/review-coverage.d.ts +12 -0
- package/dist/commands/review-coverage.d.ts.map +1 -0
- package/dist/commands/review-coverage.js +142 -0
- package/dist/commands/review-coverage.js.map +1 -0
- package/dist/commands/review-gate.d.ts +12 -0
- package/dist/commands/review-gate.d.ts.map +1 -0
- package/dist/commands/review-gate.js +130 -0
- package/dist/commands/review-gate.js.map +1 -0
- package/dist/commands/session-cleanup.js +1 -0
- package/dist/commands/session-cleanup.js.map +1 -1
- package/dist/commands/session-progress.d.ts.map +1 -1
- package/dist/commands/session-progress.js +29 -1
- package/dist/commands/session-progress.js.map +1 -1
- package/dist/commands/session-summary.d.ts.map +1 -1
- package/dist/commands/session-summary.js +620 -37
- package/dist/commands/session-summary.js.map +1 -1
- package/dist/commands/setup-ci.d.ts +9 -0
- package/dist/commands/setup-ci.d.ts.map +1 -0
- package/dist/commands/setup-ci.js +139 -0
- package/dist/commands/setup-ci.js.map +1 -0
- package/dist/commands/shared-summary.d.ts +15 -0
- package/dist/commands/shared-summary.d.ts.map +1 -0
- package/dist/commands/shared-summary.js +194 -0
- package/dist/commands/shared-summary.js.map +1 -0
- package/dist/commands/sign-manifest.d.ts +8 -0
- package/dist/commands/sign-manifest.d.ts.map +1 -0
- package/dist/commands/sign-manifest.js +58 -0
- package/dist/commands/sign-manifest.js.map +1 -0
- package/dist/commands/verify.d.ts +13 -0
- package/dist/commands/verify.d.ts.map +1 -0
- package/dist/commands/verify.js +288 -0
- package/dist/commands/verify.js.map +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +153 -2
- package/dist/index.js.map +1 -1
- package/dist/integrations/github-actions.d.ts +17 -0
- package/dist/integrations/github-actions.d.ts.map +1 -0
- package/dist/integrations/github-actions.js +64 -0
- package/dist/integrations/github-actions.js.map +1 -0
- package/dist/manifest/build.d.ts +19 -0
- package/dist/manifest/build.d.ts.map +1 -0
- package/dist/manifest/build.js +82 -0
- package/dist/manifest/build.js.map +1 -0
- package/dist/manifest/schema.d.ts +2 -0
- package/dist/manifest/schema.d.ts.map +1 -0
- package/dist/manifest/schema.js +2 -0
- package/dist/manifest/schema.js.map +1 -0
- package/dist/manifest/write.d.ts +13 -0
- package/dist/manifest/write.d.ts.map +1 -0
- package/dist/manifest/write.js +69 -0
- package/dist/manifest/write.js.map +1 -0
- package/dist/policy/load.d.ts +21 -0
- package/dist/policy/load.d.ts.map +1 -0
- package/dist/policy/load.js +63 -0
- package/dist/policy/load.js.map +1 -0
- package/dist/policy/resolve.d.ts +18 -0
- package/dist/policy/resolve.d.ts.map +1 -0
- package/dist/policy/resolve.js +86 -0
- package/dist/policy/resolve.js.map +1 -0
- package/dist/policy/schema.d.ts +22 -0
- package/dist/policy/schema.d.ts.map +1 -0
- package/dist/policy/schema.js +82 -0
- package/dist/policy/schema.js.map +1 -0
- package/dist/session-paths.d.ts +8 -0
- package/dist/session-paths.d.ts.map +1 -1
- package/dist/session-paths.js +16 -0
- package/dist/session-paths.js.map +1 -1
- package/dist/signing/canonicalize.d.ts +17 -0
- package/dist/signing/canonicalize.d.ts.map +1 -0
- package/dist/signing/canonicalize.js +50 -0
- package/dist/signing/canonicalize.js.map +1 -0
- package/dist/signing/hmac.d.ts +8 -0
- package/dist/signing/hmac.d.ts.map +1 -0
- package/dist/signing/hmac.js +16 -0
- package/dist/signing/hmac.js.map +1 -0
- package/dist/signing/signer.d.ts +16 -0
- package/dist/signing/signer.d.ts.map +1 -0
- package/dist/signing/signer.js +2 -0
- package/dist/signing/signer.js.map +1 -0
- package/dist/templates/claude-md.d.ts.map +1 -1
- package/dist/templates/claude-md.js +9 -2
- package/dist/templates/claude-md.js.map +1 -1
- package/dist/templates/config.d.ts.map +1 -1
- package/dist/templates/config.js +48 -10
- package/dist/templates/config.js.map +1 -1
- package/dist/verify/evaluate.d.ts +10 -0
- package/dist/verify/evaluate.d.ts.map +1 -0
- package/dist/verify/evaluate.js +117 -0
- package/dist/verify/evaluate.js.map +1 -0
- package/dist/verify/policy-snapshot.d.ts +7 -0
- package/dist/verify/policy-snapshot.d.ts.map +1 -0
- package/dist/verify/policy-snapshot.js +36 -0
- package/dist/verify/policy-snapshot.js.map +1 -0
- package/dist/verify/report.d.ts +11 -0
- package/dist/verify/report.d.ts.map +1 -0
- package/dist/verify/report.js +64 -0
- package/dist/verify/report.js.map +1 -0
- package/package.json +10 -10
package/dist/commands/init.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { writeFileSync, readFileSync, mkdirSync, existsSync, rmSync } from 'node:fs';
|
|
2
2
|
import { join } from 'node:path';
|
|
3
|
+
import { execSync } from 'node:child_process';
|
|
3
4
|
import { defaultConfig } from '../templates/config.js';
|
|
4
5
|
import { defaultHarnessPack } from '../templates/harness-pack.js';
|
|
5
6
|
import { starterScenarios } from '../templates/scenarios.js';
|
|
@@ -32,14 +33,47 @@ export async function runInit(cwd, flags = {}) {
|
|
|
32
33
|
for (const dir of dirs) {
|
|
33
34
|
mkdirSync(dir, { recursive: true });
|
|
34
35
|
}
|
|
36
|
+
// Check if we're inside a git repo (Fix 3.6)
|
|
37
|
+
let isGitRepo = true;
|
|
38
|
+
try {
|
|
39
|
+
execSync('git rev-parse --git-dir', {
|
|
40
|
+
cwd,
|
|
41
|
+
encoding: 'utf-8',
|
|
42
|
+
timeout: 5000,
|
|
43
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
catch {
|
|
47
|
+
isGitRepo = false;
|
|
48
|
+
console.log(' ⚠️ Warning: Not inside a git repository. Features like churn analysis, session-progress, and session-summary require git.');
|
|
49
|
+
}
|
|
50
|
+
// Add .codeledger/ and .claude/ to .gitignore (Fix 1.1)
|
|
51
|
+
if (isGitRepo) {
|
|
52
|
+
const gitignorePath = join(cwd, '.gitignore');
|
|
53
|
+
const entriesToAdd = ['.codeledger/', '.claude/'];
|
|
54
|
+
if (existsSync(gitignorePath)) {
|
|
55
|
+
const existing = readFileSync(gitignorePath, 'utf-8');
|
|
56
|
+
const linesToAdd = entriesToAdd.filter((entry) => !existing.split('\n').some((line) => line.trim() === entry));
|
|
57
|
+
if (linesToAdd.length > 0) {
|
|
58
|
+
const suffix = existing.endsWith('\n') ? '' : '\n';
|
|
59
|
+
writeFileSync(gitignorePath, existing + suffix + linesToAdd.join('\n') + '\n');
|
|
60
|
+
console.log(` ✅ Added ${linesToAdd.join(', ')} to .gitignore`);
|
|
61
|
+
}
|
|
62
|
+
else {
|
|
63
|
+
console.log(' ⏭️ .gitignore already contains CodeLedger entries');
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
else {
|
|
67
|
+
writeFileSync(gitignorePath, entriesToAdd.join('\n') + '\n');
|
|
68
|
+
console.log(' ✅ Created .gitignore with .codeledger/ and .claude/');
|
|
69
|
+
}
|
|
70
|
+
}
|
|
35
71
|
// Write config
|
|
36
72
|
const config = defaultConfig();
|
|
37
73
|
writeFileSync(join(base, 'config.json'), JSON.stringify(config, null, 2) + '\n');
|
|
38
|
-
console.log(' ✅ Created .codeledger/config.json');
|
|
39
74
|
// Write harness pack
|
|
40
75
|
const pack = defaultHarnessPack();
|
|
41
76
|
writeFileSync(join(base, 'harness', 'pack.json'), JSON.stringify(pack, null, 2) + '\n');
|
|
42
|
-
console.log(' ✅ Created .codeledger/harness/pack.json');
|
|
43
77
|
// Write starter scenarios
|
|
44
78
|
const scenarios = starterScenarios();
|
|
45
79
|
for (let i = 0; i < scenarios.length; i++) {
|
|
@@ -47,7 +81,7 @@ export async function runInit(cwd, flags = {}) {
|
|
|
47
81
|
const filename = pack.scenarios[i];
|
|
48
82
|
writeFileSync(join(base, 'harness', 'scenarios', filename), JSON.stringify(scenario, null, 2) + '\n');
|
|
49
83
|
}
|
|
50
|
-
console.log(
|
|
84
|
+
console.log(' Created config, harness pack, and starter scenarios.');
|
|
51
85
|
const force = flags['force'] === 'true';
|
|
52
86
|
// Write or update CLAUDE.md section
|
|
53
87
|
const claudeMdPath = join(cwd, 'CLAUDE.md');
|
|
@@ -88,15 +122,15 @@ export async function runInit(cwd, flags = {}) {
|
|
|
88
122
|
const verb = existsSync(hooksPath) ? 'Updated' : 'Created';
|
|
89
123
|
console.log(` ✅ ${verb} .claude/hooks.json (auto-summary on commit, session hooks)`);
|
|
90
124
|
}
|
|
91
|
-
console.log('\
|
|
92
|
-
console.log('
|
|
93
|
-
console.log('
|
|
94
|
-
console.log('
|
|
95
|
-
console.log('
|
|
96
|
-
console.log('
|
|
97
|
-
console.log('
|
|
98
|
-
console.log('
|
|
99
|
-
console.log('
|
|
125
|
+
console.log('\nReady. Generate your first context bundle:\n');
|
|
126
|
+
console.log(' codeledger activate --task "describe your task here"\n');
|
|
127
|
+
console.log(' This scans your repo, selects the most relevant files, and writes');
|
|
128
|
+
console.log(' them to .codeledger/active-bundle.md for your agent to read.\n');
|
|
129
|
+
console.log(' Once you see results, try:');
|
|
130
|
+
console.log(' --explain See why each file was selected');
|
|
131
|
+
console.log(' --expand Double the budget for broader coverage');
|
|
132
|
+
console.log(' --branch-aware Prioritize files changed on your branch\n');
|
|
133
|
+
console.log(' Docs: codeledger help | Health check: codeledger doctor');
|
|
100
134
|
}
|
|
101
135
|
/**
|
|
102
136
|
* Replace the CodeLedger section in an existing CLAUDE.md, preserving
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACrF,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAClE,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,GAAW,EAAE,QAAgC,EAAE;IAC3E,OAAO,CAAC,GAAG,CAAC,eAAe,WAAW,IAAI,CAAC,CAAC;IAC5C,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC;IAEtC,IAAI,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACrB,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,MAAM,CAAC;QACxC,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,CAAC,KAAK,CAAC,4DAA4D,CAAC,CAAC;YAC5E,OAAO;QACT,CAAC;QAED,MAAM,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAC/C,OAAO,CAAC,GAAG,CAAC,uDAAuD,CAAC,CAAC;IACvE,CAAC;IAED,6BAA6B;IAC7B,MAAM,IAAI,GAAG;QACX,IAAI;QACJ,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC;QACnB,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC;QACvB,IAAI,CAAC,IAAI,EAAE,WAAW,EAAE,SAAS,CAAC;QAClC,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC;QACrB,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC;QACvB,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC;QACrB,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,WAAW,CAAC;KACnC,CAAC;IAEF,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACtC,CAAC;IAED,
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import type { SessionId } from '@codeledger/types';
|
|
2
|
+
import type { DriftResult } from '@codeledger/selector';
|
|
3
|
+
/**
|
|
4
|
+
* `codeledger intent [init|show|set|ack] [--session <id>]`
|
|
5
|
+
*
|
|
6
|
+
* Intent Governance Layer — detect when the user's objective/scope/constraints
|
|
7
|
+
* change mid-session such that the current bundle/plan is likely stale.
|
|
8
|
+
*
|
|
9
|
+
* All drift detection is deterministic: normalized token Jaccard distance,
|
|
10
|
+
* weighted field scoring, no LLM reasoning.
|
|
11
|
+
*/
|
|
12
|
+
export declare function runIntent(cwd: string, flags: Record<string, string>): Promise<void>;
|
|
13
|
+
/**
|
|
14
|
+
* Evaluate current drift for a session. Returns null if no intent contract exists.
|
|
15
|
+
* Used by activate, refine, and session-summary for integration.
|
|
16
|
+
*/
|
|
17
|
+
export declare function evaluateDrift(cwd: string, sessionId: SessionId | null): {
|
|
18
|
+
drift: DriftResult;
|
|
19
|
+
baselineHash: string;
|
|
20
|
+
currentHash: string;
|
|
21
|
+
} | null;
|
|
22
|
+
/**
|
|
23
|
+
* Check if intent drift requires acknowledgment (CRITICAL level).
|
|
24
|
+
* Returns true if the session is in a "soft block" state.
|
|
25
|
+
*/
|
|
26
|
+
export declare function isIntentBlocked(cwd: string, sessionId: SessionId | null): boolean;
|
|
27
|
+
/**
|
|
28
|
+
* Auto-create an intent contract from a task string (called by activate).
|
|
29
|
+
* Only creates if no baseline exists yet for this session.
|
|
30
|
+
*/
|
|
31
|
+
export declare function autoInitIntent(cwd: string, sessionId: SessionId | null, taskText: string, scopePaths?: string[]): void;
|
|
32
|
+
/**
|
|
33
|
+
* Update the current contract's objective when task changes (e.g., during refine).
|
|
34
|
+
* Preserves other fields. Only updates if intent was already initialized.
|
|
35
|
+
*/
|
|
36
|
+
export declare function updateIntentObjective(cwd: string, sessionId: SessionId | null, newObjective: string): void;
|
|
37
|
+
//# sourceMappingURL=intent.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"intent.d.ts","sourceRoot":"","sources":["../../src/commands/intent.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAoB,MAAM,mBAAmB,CAAC;AAMrE,OAAO,KAAK,EAEV,WAAW,EAEZ,MAAM,sBAAsB,CAAC;AAI9B;;;;;;;;GAQG;AACH,wBAAsB,SAAS,CAC7B,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC5B,OAAO,CAAC,IAAI,CAAC,CAqBf;AAwQD;;;GAGG;AACH,wBAAgB,aAAa,CAC3B,GAAG,EAAE,MAAM,EACX,SAAS,EAAE,SAAS,GAAG,IAAI,GAC1B;IAAE,KAAK,EAAE,WAAW,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAgB1E;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAC7B,GAAG,EAAE,MAAM,EACX,SAAS,EAAE,SAAS,GAAG,IAAI,GAC1B,OAAO,CAgBT;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAC5B,GAAG,EAAE,MAAM,EACX,SAAS,EAAE,SAAS,GAAG,IAAI,EAC3B,QAAQ,EAAE,MAAM,EAChB,UAAU,CAAC,EAAE,MAAM,EAAE,GACpB,IAAI,CAwBN;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CACnC,GAAG,EAAE,MAAM,EACX,SAAS,EAAE,SAAS,GAAG,IAAI,EAC3B,YAAY,EAAE,MAAM,GACnB,IAAI,CAoBN"}
|
|
@@ -0,0 +1,408 @@
|
|
|
1
|
+
import { readFileSync, writeFileSync, existsSync, mkdirSync, appendFileSync } from 'node:fs';
|
|
2
|
+
import { join, dirname } from 'node:path';
|
|
3
|
+
import { intentHash, computeDrift, recommendedAction, } from '@codeledger/selector';
|
|
4
|
+
import { resolveSessionId } from '../session-id.js';
|
|
5
|
+
import { sessionDir } from '../session-paths.js';
|
|
6
|
+
/**
|
|
7
|
+
* `codeledger intent [init|show|set|ack] [--session <id>]`
|
|
8
|
+
*
|
|
9
|
+
* Intent Governance Layer — detect when the user's objective/scope/constraints
|
|
10
|
+
* change mid-session such that the current bundle/plan is likely stale.
|
|
11
|
+
*
|
|
12
|
+
* All drift detection is deterministic: normalized token Jaccard distance,
|
|
13
|
+
* weighted field scoring, no LLM reasoning.
|
|
14
|
+
*/
|
|
15
|
+
export async function runIntent(cwd, flags) {
|
|
16
|
+
const subcommand = flags['_sub'] ?? 'show';
|
|
17
|
+
const sessionId = resolveSessionId({ session: flags['session'] });
|
|
18
|
+
switch (subcommand) {
|
|
19
|
+
case 'init':
|
|
20
|
+
await intentInit(cwd, sessionId, flags);
|
|
21
|
+
break;
|
|
22
|
+
case 'show':
|
|
23
|
+
await intentShow(cwd, sessionId);
|
|
24
|
+
break;
|
|
25
|
+
case 'set':
|
|
26
|
+
await intentSet(cwd, sessionId, flags);
|
|
27
|
+
break;
|
|
28
|
+
case 'ack':
|
|
29
|
+
await intentAck(cwd, sessionId, flags);
|
|
30
|
+
break;
|
|
31
|
+
default:
|
|
32
|
+
console.error(`Unknown intent subcommand: "${subcommand}". Use init, show, set, or ack.`);
|
|
33
|
+
process.exit(1);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
// ── intent init ─────────────────────────────────────────────────────────────
|
|
37
|
+
async function intentInit(cwd, sessionId, flags) {
|
|
38
|
+
const objective = flags['objective'];
|
|
39
|
+
if (!objective || objective.trim() === '') {
|
|
40
|
+
console.error('--objective is required for intent init. Provide an objective: codeledger intent init --objective "describe your objective"');
|
|
41
|
+
process.exit(1);
|
|
42
|
+
}
|
|
43
|
+
const contract = {
|
|
44
|
+
version: 1,
|
|
45
|
+
objective,
|
|
46
|
+
deliverable: flags['deliverable'] ?? null,
|
|
47
|
+
scope_in: parseCSV(flags['scope-in']),
|
|
48
|
+
scope_out: parseCSV(flags['scope-out']),
|
|
49
|
+
constraints: parseCSV(flags['constraint']),
|
|
50
|
+
acceptance_criteria: parseCSV(flags['accept']),
|
|
51
|
+
risk_flags: parseCSV(flags['risk']),
|
|
52
|
+
repo_paths_in_scope: parseCSV(flags['paths']),
|
|
53
|
+
timestamp: new Date().toISOString(),
|
|
54
|
+
};
|
|
55
|
+
const intentDir = getIntentDir(cwd, sessionId);
|
|
56
|
+
ensureDir(intentDir);
|
|
57
|
+
// Write baseline contract
|
|
58
|
+
writeContract(intentDir, 'baseline_contract.json', contract);
|
|
59
|
+
writeContract(intentDir, 'current_contract.json', contract);
|
|
60
|
+
// Write hash
|
|
61
|
+
const hash = intentHash(contract);
|
|
62
|
+
writeFileSync(join(intentDir, 'baseline_hash.txt'), hash + '\n');
|
|
63
|
+
writeFileSync(join(intentDir, 'current_hash.txt'), hash + '\n');
|
|
64
|
+
console.log(`Intent initialized.`);
|
|
65
|
+
console.log(` Objective: "${contract.objective}"`);
|
|
66
|
+
if (contract.scope_in.length > 0) {
|
|
67
|
+
console.log(` Scope (in): ${contract.scope_in.join(', ')}`);
|
|
68
|
+
}
|
|
69
|
+
if (contract.scope_out.length > 0) {
|
|
70
|
+
console.log(` Scope (out): ${contract.scope_out.join(', ')}`);
|
|
71
|
+
}
|
|
72
|
+
if (contract.constraints.length > 0) {
|
|
73
|
+
console.log(` Constraints: ${contract.constraints.join(', ')}`);
|
|
74
|
+
}
|
|
75
|
+
if (contract.deliverable) {
|
|
76
|
+
console.log(` Deliverable: ${contract.deliverable}`);
|
|
77
|
+
}
|
|
78
|
+
if (contract.acceptance_criteria.length > 0) {
|
|
79
|
+
console.log(` Acceptance: ${contract.acceptance_criteria.join(', ')}`);
|
|
80
|
+
}
|
|
81
|
+
console.log(` Hash: ${hash.slice(0, 12)}...`);
|
|
82
|
+
console.log(` Drift: NONE (baseline established)`);
|
|
83
|
+
}
|
|
84
|
+
// ── intent show ─────────────────────────────────────────────────────────────
|
|
85
|
+
async function intentShow(cwd, sessionId) {
|
|
86
|
+
const intentDir = getIntentDir(cwd, sessionId);
|
|
87
|
+
if (!existsSync(join(intentDir, 'baseline_contract.json'))) {
|
|
88
|
+
console.log('No intent contract found. Run "codeledger intent init --objective ..." first.');
|
|
89
|
+
return;
|
|
90
|
+
}
|
|
91
|
+
const baseline = loadContract(intentDir, 'baseline_contract.json');
|
|
92
|
+
const current = loadContract(intentDir, 'current_contract.json');
|
|
93
|
+
if (!baseline || !current) {
|
|
94
|
+
console.error('Failed to load intent contracts.');
|
|
95
|
+
return;
|
|
96
|
+
}
|
|
97
|
+
const baselineHash = intentHash(baseline);
|
|
98
|
+
const currentHash = intentHash(current);
|
|
99
|
+
const drift = computeDrift(baseline, current);
|
|
100
|
+
const action = recommendedAction(drift.drift_level);
|
|
101
|
+
const lines = [];
|
|
102
|
+
lines.push('');
|
|
103
|
+
lines.push('-- Intent Governance -----------------------------------------');
|
|
104
|
+
// Always show contract content (Fix 3.5)
|
|
105
|
+
lines.push(` Objective: "${truncate(current.objective, 60)}"`);
|
|
106
|
+
if (current.scope_in.length > 0) {
|
|
107
|
+
lines.push(` Scope (in): ${current.scope_in.join(', ')}`);
|
|
108
|
+
}
|
|
109
|
+
if (current.scope_out.length > 0) {
|
|
110
|
+
lines.push(` Scope (out): ${current.scope_out.join(', ')}`);
|
|
111
|
+
}
|
|
112
|
+
if (current.constraints.length > 0) {
|
|
113
|
+
lines.push(` Constraints: ${current.constraints.join(', ')}`);
|
|
114
|
+
}
|
|
115
|
+
if (current.deliverable) {
|
|
116
|
+
lines.push(` Deliverable: ${current.deliverable}`);
|
|
117
|
+
}
|
|
118
|
+
lines.push('');
|
|
119
|
+
lines.push(` Baseline hash: ${baselineHash.slice(0, 16)}...`);
|
|
120
|
+
lines.push(` Current hash: ${currentHash.slice(0, 16)}...`);
|
|
121
|
+
lines.push(` Drift: ${drift.drift_level}${drift.drift_level !== 'NONE' ? ` (${drift.drift_score.toFixed(3)})` : ''}`);
|
|
122
|
+
if (drift.drift_level !== 'NONE') {
|
|
123
|
+
lines.push(` Action: ${action}`);
|
|
124
|
+
lines.push('');
|
|
125
|
+
lines.push(' Drift by field:');
|
|
126
|
+
for (const r of drift.reasons) {
|
|
127
|
+
if (r.distance > 0) {
|
|
128
|
+
lines.push(` ${r.field}: ${r.distance.toFixed(3)}`);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
// Show diff summary
|
|
133
|
+
if (baseline.objective !== current.objective) {
|
|
134
|
+
lines.push('');
|
|
135
|
+
lines.push(` Objective changed:`);
|
|
136
|
+
lines.push(` was: "${truncate(baseline.objective, 60)}"`);
|
|
137
|
+
lines.push(` now: "${truncate(current.objective, 60)}"`);
|
|
138
|
+
}
|
|
139
|
+
const addedScopeIn = current.scope_in.filter((x) => !baseline.scope_in.includes(x));
|
|
140
|
+
const removedScopeIn = baseline.scope_in.filter((x) => !current.scope_in.includes(x));
|
|
141
|
+
if (addedScopeIn.length > 0 || removedScopeIn.length > 0) {
|
|
142
|
+
lines.push('');
|
|
143
|
+
lines.push(' Scope changes:');
|
|
144
|
+
for (const a of addedScopeIn)
|
|
145
|
+
lines.push(` + scope_in: "${a}"`);
|
|
146
|
+
for (const r of removedScopeIn)
|
|
147
|
+
lines.push(` - scope_in: "${r}"`);
|
|
148
|
+
}
|
|
149
|
+
const addedConstraints = current.constraints.filter((x) => !baseline.constraints.includes(x));
|
|
150
|
+
if (addedConstraints.length > 0) {
|
|
151
|
+
lines.push('');
|
|
152
|
+
lines.push(' New constraints:');
|
|
153
|
+
for (const c of addedConstraints)
|
|
154
|
+
lines.push(` + "${c}"`);
|
|
155
|
+
}
|
|
156
|
+
// Check for acknowledged contract
|
|
157
|
+
if (existsSync(join(intentDir, 'acknowledged_contract.json'))) {
|
|
158
|
+
const acked = loadContract(intentDir, 'acknowledged_contract.json');
|
|
159
|
+
if (acked) {
|
|
160
|
+
const ackedHash = intentHash(acked);
|
|
161
|
+
lines.push('');
|
|
162
|
+
lines.push(` Last acknowledged: ${ackedHash.slice(0, 16)}...`);
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
lines.push('-'.repeat(61));
|
|
166
|
+
lines.push('');
|
|
167
|
+
console.log(lines.join('\n'));
|
|
168
|
+
}
|
|
169
|
+
// ── intent set ──────────────────────────────────────────────────────────────
|
|
170
|
+
async function intentSet(cwd, sessionId, flags) {
|
|
171
|
+
const intentDir = getIntentDir(cwd, sessionId);
|
|
172
|
+
if (!existsSync(join(intentDir, 'baseline_contract.json'))) {
|
|
173
|
+
console.error('No intent contract found. Run "codeledger intent init --objective ..." first.');
|
|
174
|
+
process.exit(1);
|
|
175
|
+
}
|
|
176
|
+
const current = loadContract(intentDir, 'current_contract.json');
|
|
177
|
+
if (!current) {
|
|
178
|
+
console.error('Failed to load current intent contract.');
|
|
179
|
+
process.exit(1);
|
|
180
|
+
}
|
|
181
|
+
// Apply updates
|
|
182
|
+
if (flags['objective'])
|
|
183
|
+
current.objective = flags['objective'];
|
|
184
|
+
if (flags['deliverable'])
|
|
185
|
+
current.deliverable = flags['deliverable'];
|
|
186
|
+
if (flags['scope-in'])
|
|
187
|
+
current.scope_in = mergeArrays(current.scope_in, parseCSV(flags['scope-in']));
|
|
188
|
+
if (flags['scope-out'])
|
|
189
|
+
current.scope_out = mergeArrays(current.scope_out, parseCSV(flags['scope-out']));
|
|
190
|
+
if (flags['constraint'])
|
|
191
|
+
current.constraints = mergeArrays(current.constraints, parseCSV(flags['constraint']));
|
|
192
|
+
if (flags['accept'])
|
|
193
|
+
current.acceptance_criteria = mergeArrays(current.acceptance_criteria, parseCSV(flags['accept']));
|
|
194
|
+
if (flags['risk'])
|
|
195
|
+
current.risk_flags = mergeArrays(current.risk_flags, parseCSV(flags['risk']));
|
|
196
|
+
if (flags['paths'])
|
|
197
|
+
current.repo_paths_in_scope = mergeArrays(current.repo_paths_in_scope, parseCSV(flags['paths']));
|
|
198
|
+
current.timestamp = new Date().toISOString();
|
|
199
|
+
// Save updated contract
|
|
200
|
+
writeContract(intentDir, 'current_contract.json', current);
|
|
201
|
+
const hash = intentHash(current);
|
|
202
|
+
writeFileSync(join(intentDir, 'current_hash.txt'), hash + '\n');
|
|
203
|
+
// Evaluate drift against baseline
|
|
204
|
+
const baseline = loadContract(intentDir, 'baseline_contract.json');
|
|
205
|
+
const drift = computeDrift(baseline, current);
|
|
206
|
+
// Log drift event
|
|
207
|
+
logDriftEvent(intentDir, baseline, current, drift);
|
|
208
|
+
console.log(`Intent updated.`);
|
|
209
|
+
console.log(` Hash: ${hash.slice(0, 12)}...`);
|
|
210
|
+
console.log(` Drift: ${drift.drift_level} (${drift.drift_score.toFixed(3)})`);
|
|
211
|
+
const prefill = loadPrefillTask(cwd);
|
|
212
|
+
const objArg = prefill && current.objective ? `"${current.objective}"` : '"..."';
|
|
213
|
+
if (drift.drift_level === 'MAJOR') {
|
|
214
|
+
console.log(` Recommendation: Refresh bundle with "codeledger refine --refresh" or "codeledger activate --task ${objArg}"`);
|
|
215
|
+
}
|
|
216
|
+
else if (drift.drift_level === 'CRITICAL') {
|
|
217
|
+
console.log(` WARNING: Critical intent drift detected.`);
|
|
218
|
+
console.log(` Required: Run one of:`);
|
|
219
|
+
console.log(` codeledger intent ack`);
|
|
220
|
+
console.log(` codeledger refine --refresh`);
|
|
221
|
+
console.log(` codeledger intent set --objective ${objArg} (restate contract)`);
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
// ── intent ack ──────────────────────────────────────────────────────────────
|
|
225
|
+
async function intentAck(cwd, sessionId, flags) {
|
|
226
|
+
const intentDir = getIntentDir(cwd, sessionId);
|
|
227
|
+
if (!existsSync(join(intentDir, 'current_contract.json'))) {
|
|
228
|
+
console.error('No intent contract found. Nothing to acknowledge.');
|
|
229
|
+
return;
|
|
230
|
+
}
|
|
231
|
+
const current = loadContract(intentDir, 'current_contract.json');
|
|
232
|
+
if (!current) {
|
|
233
|
+
console.error('Failed to load current intent contract.');
|
|
234
|
+
return;
|
|
235
|
+
}
|
|
236
|
+
const ackAsBaseline = flags['as-baseline'] === 'true';
|
|
237
|
+
if (ackAsBaseline) {
|
|
238
|
+
// Promote current → baseline (resets drift to NONE)
|
|
239
|
+
writeContract(intentDir, 'baseline_contract.json', current);
|
|
240
|
+
const hash = intentHash(current);
|
|
241
|
+
writeFileSync(join(intentDir, 'baseline_hash.txt'), hash + '\n');
|
|
242
|
+
console.log(`Intent acknowledged as new baseline.`);
|
|
243
|
+
console.log(` Baseline hash: ${hash.slice(0, 12)}...`);
|
|
244
|
+
console.log(` Drift reset to NONE.`);
|
|
245
|
+
}
|
|
246
|
+
else {
|
|
247
|
+
// Save as acknowledged (drift still visible but accepted)
|
|
248
|
+
writeContract(intentDir, 'acknowledged_contract.json', current);
|
|
249
|
+
const hash = intentHash(current);
|
|
250
|
+
console.log(`Intent drift acknowledged (accepted change).`);
|
|
251
|
+
console.log(` Acknowledged hash: ${hash.slice(0, 12)}...`);
|
|
252
|
+
console.log(` Drift is still tracked but no longer blocks.`);
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
// ── Public helpers for integration ──────────────────────────────────────────
|
|
256
|
+
/**
|
|
257
|
+
* Evaluate current drift for a session. Returns null if no intent contract exists.
|
|
258
|
+
* Used by activate, refine, and session-summary for integration.
|
|
259
|
+
*/
|
|
260
|
+
export function evaluateDrift(cwd, sessionId) {
|
|
261
|
+
const intentDir = getIntentDir(cwd, sessionId);
|
|
262
|
+
if (!existsSync(join(intentDir, 'baseline_contract.json')))
|
|
263
|
+
return null;
|
|
264
|
+
if (!existsSync(join(intentDir, 'current_contract.json')))
|
|
265
|
+
return null;
|
|
266
|
+
const baseline = loadContract(intentDir, 'baseline_contract.json');
|
|
267
|
+
const current = loadContract(intentDir, 'current_contract.json');
|
|
268
|
+
if (!baseline || !current)
|
|
269
|
+
return null;
|
|
270
|
+
const drift = computeDrift(baseline, current);
|
|
271
|
+
return {
|
|
272
|
+
drift,
|
|
273
|
+
baselineHash: intentHash(baseline),
|
|
274
|
+
currentHash: intentHash(current),
|
|
275
|
+
};
|
|
276
|
+
}
|
|
277
|
+
/**
|
|
278
|
+
* Check if intent drift requires acknowledgment (CRITICAL level).
|
|
279
|
+
* Returns true if the session is in a "soft block" state.
|
|
280
|
+
*/
|
|
281
|
+
export function isIntentBlocked(cwd, sessionId) {
|
|
282
|
+
const result = evaluateDrift(cwd, sessionId);
|
|
283
|
+
if (!result)
|
|
284
|
+
return false;
|
|
285
|
+
if (result.drift.drift_level !== 'CRITICAL')
|
|
286
|
+
return false;
|
|
287
|
+
// Check if already acknowledged
|
|
288
|
+
const intentDir = getIntentDir(cwd, sessionId);
|
|
289
|
+
if (existsSync(join(intentDir, 'acknowledged_contract.json'))) {
|
|
290
|
+
const acked = loadContract(intentDir, 'acknowledged_contract.json');
|
|
291
|
+
if (acked) {
|
|
292
|
+
const ackedHash = intentHash(acked);
|
|
293
|
+
if (ackedHash === result.currentHash)
|
|
294
|
+
return false; // already acknowledged
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
return true;
|
|
298
|
+
}
|
|
299
|
+
/**
|
|
300
|
+
* Auto-create an intent contract from a task string (called by activate).
|
|
301
|
+
* Only creates if no baseline exists yet for this session.
|
|
302
|
+
*/
|
|
303
|
+
export function autoInitIntent(cwd, sessionId, taskText, scopePaths) {
|
|
304
|
+
const intentDir = getIntentDir(cwd, sessionId);
|
|
305
|
+
if (existsSync(join(intentDir, 'baseline_contract.json')))
|
|
306
|
+
return; // already initialized
|
|
307
|
+
const contract = {
|
|
308
|
+
version: 1,
|
|
309
|
+
objective: taskText,
|
|
310
|
+
deliverable: null,
|
|
311
|
+
scope_in: [],
|
|
312
|
+
scope_out: [],
|
|
313
|
+
constraints: [],
|
|
314
|
+
acceptance_criteria: [],
|
|
315
|
+
risk_flags: [],
|
|
316
|
+
repo_paths_in_scope: scopePaths ?? [],
|
|
317
|
+
timestamp: new Date().toISOString(),
|
|
318
|
+
};
|
|
319
|
+
ensureDir(intentDir);
|
|
320
|
+
writeContract(intentDir, 'baseline_contract.json', contract);
|
|
321
|
+
writeContract(intentDir, 'current_contract.json', contract);
|
|
322
|
+
const hash = intentHash(contract);
|
|
323
|
+
writeFileSync(join(intentDir, 'baseline_hash.txt'), hash + '\n');
|
|
324
|
+
writeFileSync(join(intentDir, 'current_hash.txt'), hash + '\n');
|
|
325
|
+
}
|
|
326
|
+
/**
|
|
327
|
+
* Update the current contract's objective when task changes (e.g., during refine).
|
|
328
|
+
* Preserves other fields. Only updates if intent was already initialized.
|
|
329
|
+
*/
|
|
330
|
+
export function updateIntentObjective(cwd, sessionId, newObjective) {
|
|
331
|
+
const intentDir = getIntentDir(cwd, sessionId);
|
|
332
|
+
if (!existsSync(join(intentDir, 'current_contract.json')))
|
|
333
|
+
return;
|
|
334
|
+
const current = loadContract(intentDir, 'current_contract.json');
|
|
335
|
+
if (!current)
|
|
336
|
+
return;
|
|
337
|
+
current.objective = newObjective;
|
|
338
|
+
current.timestamp = new Date().toISOString();
|
|
339
|
+
writeContract(intentDir, 'current_contract.json', current);
|
|
340
|
+
const hash = intentHash(current);
|
|
341
|
+
writeFileSync(join(intentDir, 'current_hash.txt'), hash + '\n');
|
|
342
|
+
// Log drift event
|
|
343
|
+
const baseline = loadContract(intentDir, 'baseline_contract.json');
|
|
344
|
+
if (baseline) {
|
|
345
|
+
const drift = computeDrift(baseline, current);
|
|
346
|
+
logDriftEvent(intentDir, baseline, current, drift);
|
|
347
|
+
}
|
|
348
|
+
}
|
|
349
|
+
// ── Internal helpers ────────────────────────────────────────────────────────
|
|
350
|
+
function getIntentDir(cwd, sessionId) {
|
|
351
|
+
return join(sessionDir(cwd, sessionId), 'intent');
|
|
352
|
+
}
|
|
353
|
+
function ensureDir(dir) {
|
|
354
|
+
if (!existsSync(dir))
|
|
355
|
+
mkdirSync(dir, { recursive: true });
|
|
356
|
+
}
|
|
357
|
+
function writeContract(dir, filename, contract) {
|
|
358
|
+
writeFileSync(join(dir, filename), JSON.stringify(contract, null, 2) + '\n');
|
|
359
|
+
}
|
|
360
|
+
function loadContract(dir, filename) {
|
|
361
|
+
try {
|
|
362
|
+
return JSON.parse(readFileSync(join(dir, filename), 'utf-8'));
|
|
363
|
+
}
|
|
364
|
+
catch {
|
|
365
|
+
return null;
|
|
366
|
+
}
|
|
367
|
+
}
|
|
368
|
+
function logDriftEvent(intentDir, baseline, current, drift) {
|
|
369
|
+
const event = {
|
|
370
|
+
ts: new Date().toISOString(),
|
|
371
|
+
type: 'INTENT_DRIFT',
|
|
372
|
+
baseline_hash: intentHash(baseline),
|
|
373
|
+
current_hash: intentHash(current),
|
|
374
|
+
drift_score: drift.drift_score,
|
|
375
|
+
drift_level: drift.drift_level,
|
|
376
|
+
reasons: drift.reasons.filter((r) => r.distance > 0),
|
|
377
|
+
recommended_action: recommendedAction(drift.drift_level),
|
|
378
|
+
};
|
|
379
|
+
const eventsDir = join(dirname(intentDir), 'events');
|
|
380
|
+
ensureDir(eventsDir);
|
|
381
|
+
appendFileSync(join(eventsDir, 'intent_drift.jsonl'), JSON.stringify(event) + '\n');
|
|
382
|
+
}
|
|
383
|
+
function parseCSV(value) {
|
|
384
|
+
if (!value)
|
|
385
|
+
return [];
|
|
386
|
+
return value.split(',').map((s) => s.trim()).filter(Boolean);
|
|
387
|
+
}
|
|
388
|
+
function mergeArrays(existing, additions) {
|
|
389
|
+
const set = new Set([...existing, ...additions]);
|
|
390
|
+
return [...set];
|
|
391
|
+
}
|
|
392
|
+
function truncate(s, max) {
|
|
393
|
+
return s.length <= max ? s : s.slice(0, max - 3) + '...';
|
|
394
|
+
}
|
|
395
|
+
/** Read the prefill_task setting from config. Returns false if config missing or unset. */
|
|
396
|
+
function loadPrefillTask(cwd) {
|
|
397
|
+
try {
|
|
398
|
+
const configPath = join(cwd, '.codeledger', 'config.json');
|
|
399
|
+
if (!existsSync(configPath))
|
|
400
|
+
return false;
|
|
401
|
+
const config = JSON.parse(readFileSync(configPath, 'utf-8'));
|
|
402
|
+
return config.suggestions?.prefill_task === true;
|
|
403
|
+
}
|
|
404
|
+
catch {
|
|
405
|
+
return false;
|
|
406
|
+
}
|
|
407
|
+
}
|
|
408
|
+
//# sourceMappingURL=intent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"intent.js","sourceRoot":"","sources":["../../src/commands/intent.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `codeledger manifest --task "..." [--out <path>] [--artifacts-dir <dir>]`
|
|
3
|
+
*
|
|
4
|
+
* Emit a deterministic context manifest — the canonical evidence payload for
|
|
5
|
+
* Mustang Phase 1. No timestamps, no signing (Phase 2), no policy (Phase 3).
|
|
6
|
+
*/
|
|
7
|
+
export declare function runManifest(cwd: string, flags: Record<string, string>): Promise<void>;
|
|
8
|
+
//# sourceMappingURL=manifest.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../../src/commands/manifest.ts"],"names":[],"mappings":"AAgBA;;;;;GAKG;AACH,wBAAsB,WAAW,CAC/B,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC5B,OAAO,CAAC,IAAI,CAAC,CA4Gf"}
|