@stackbilt/cli 0.3.3 → 0.4.0

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.
@@ -0,0 +1,383 @@
1
+ "use strict";
2
+ /**
3
+ * charter adf migrate
4
+ *
5
+ * Scans existing agent config files (CLAUDE.md, .cursorrules, agents.md, GEMINI.md,
6
+ * copilot-instructions.md), classifies their content using the ADX-002 decision tree,
7
+ * and migrates structured blocks into ADF modules. Replaces originals with thin pointers.
8
+ */
9
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ var desc = Object.getOwnPropertyDescriptor(m, k);
12
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
13
+ desc = { enumerable: true, get: function() { return m[k]; } };
14
+ }
15
+ Object.defineProperty(o, k2, desc);
16
+ }) : (function(o, m, k, k2) {
17
+ if (k2 === undefined) k2 = k;
18
+ o[k2] = m[k];
19
+ }));
20
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
21
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
22
+ }) : function(o, v) {
23
+ o["default"] = v;
24
+ });
25
+ var __importStar = (this && this.__importStar) || (function () {
26
+ var ownKeys = function(o) {
27
+ ownKeys = Object.getOwnPropertyNames || function (o) {
28
+ var ar = [];
29
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
30
+ return ar;
31
+ };
32
+ return ownKeys(o);
33
+ };
34
+ return function (mod) {
35
+ if (mod && mod.__esModule) return mod;
36
+ var result = {};
37
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
38
+ __setModuleDefault(result, mod);
39
+ return result;
40
+ };
41
+ })();
42
+ Object.defineProperty(exports, "__esModule", { value: true });
43
+ exports.adfMigrateCommand = adfMigrateCommand;
44
+ const fs = __importStar(require("node:fs"));
45
+ const path = __importStar(require("node:path"));
46
+ const adf_1 = require("@stackbilt/adf");
47
+ const index_1 = require("../index");
48
+ const adf_2 = require("./adf");
49
+ // ============================================================================
50
+ // Constants
51
+ // ============================================================================
52
+ const AGENT_CONFIG_FILES = [
53
+ 'CLAUDE.md',
54
+ '.cursorrules',
55
+ 'agents.md',
56
+ 'GEMINI.md',
57
+ 'copilot-instructions.md',
58
+ ];
59
+ const THIN_POINTER_MARKER = 'Do not duplicate ADF rules here';
60
+ const POINTER_TEMPLATES = {
61
+ 'CLAUDE.md': adf_2.POINTER_CLAUDE_MD,
62
+ '.cursorrules': adf_2.POINTER_CURSORRULES,
63
+ 'agents.md': adf_2.POINTER_AGENTS_MD,
64
+ };
65
+ // ============================================================================
66
+ // Command Entry
67
+ // ============================================================================
68
+ async function adfMigrateCommand(options, args) {
69
+ const dryRun = args.includes('--dry-run');
70
+ const noBackup = args.includes('--no-backup');
71
+ const sourceFile = getFlag(args, '--source');
72
+ const mergeStrategy = (getFlag(args, '--merge-strategy') || 'dedupe');
73
+ const aiDir = getFlag(args, '--ai-dir') || '.ai';
74
+ if (!['append', 'dedupe', 'replace'].includes(mergeStrategy)) {
75
+ throw new index_1.CLIError(`Invalid --merge-strategy: ${mergeStrategy}. Use append, dedupe, or replace.`);
76
+ }
77
+ // Detect source files
78
+ const sources = sourceFile
79
+ ? [sourceFile]
80
+ : AGENT_CONFIG_FILES.filter(f => fs.existsSync(path.resolve(f)));
81
+ if (sources.length === 0) {
82
+ if (options.format === 'json') {
83
+ console.log(JSON.stringify({ migrated: false, reason: 'No agent config files found', scanned: AGENT_CONFIG_FILES }, null, 2));
84
+ }
85
+ else {
86
+ console.log(' No agent config files found to migrate.');
87
+ console.log(` Looked for: ${AGENT_CONFIG_FILES.join(', ')}`);
88
+ }
89
+ return index_1.EXIT_CODE.SUCCESS;
90
+ }
91
+ const results = [];
92
+ for (const source of sources) {
93
+ const result = migrateSource(source, aiDir, mergeStrategy, dryRun, noBackup, options);
94
+ results.push(result);
95
+ }
96
+ // Output
97
+ if (options.format === 'json') {
98
+ console.log(JSON.stringify({
99
+ dryRun,
100
+ mergeStrategy,
101
+ sources: results,
102
+ }, null, 2));
103
+ }
104
+ else {
105
+ for (const r of results) {
106
+ printTextResult(r, dryRun);
107
+ }
108
+ if (dryRun) {
109
+ console.log('');
110
+ console.log(' Run without --dry-run to apply.');
111
+ }
112
+ }
113
+ return index_1.EXIT_CODE.SUCCESS;
114
+ }
115
+ function migrateSource(sourcePath, aiDir, mergeStrategy, dryRun, noBackup, options) {
116
+ const fullPath = path.resolve(sourcePath);
117
+ if (!fs.existsSync(fullPath)) {
118
+ return {
119
+ source: sourcePath,
120
+ skipped: true,
121
+ skipReason: 'File not found',
122
+ lineCount: 0,
123
+ sectionCount: 0,
124
+ actions: [],
125
+ };
126
+ }
127
+ const content = fs.readFileSync(fullPath, 'utf-8');
128
+ // Skip if already a thin pointer
129
+ if (content.includes(THIN_POINTER_MARKER)) {
130
+ return {
131
+ source: sourcePath,
132
+ skipped: true,
133
+ skipReason: 'Already a thin pointer',
134
+ lineCount: content.split('\n').length,
135
+ sectionCount: 0,
136
+ actions: [{ type: 'SKIP', target: sourcePath, detail: 'Already a thin pointer' }],
137
+ };
138
+ }
139
+ const lines = content.split('\n');
140
+ const sections = (0, adf_1.parseMarkdownSections)(content);
141
+ // Load existing ADF for dedup
142
+ let existingAdf;
143
+ const coreAdfPath = path.join(aiDir, 'core.adf');
144
+ if (fs.existsSync(coreAdfPath) && mergeStrategy === 'dedupe') {
145
+ try {
146
+ existingAdf = (0, adf_1.parseAdf)(fs.readFileSync(coreAdfPath, 'utf-8'));
147
+ }
148
+ catch {
149
+ // If parse fails, proceed without dedup
150
+ }
151
+ }
152
+ const plan = (0, adf_1.buildMigrationPlan)(sections, existingAdf);
153
+ const actions = [];
154
+ // Group migrate items by target module and section
155
+ const moduleGroups = groupByModule(plan.migrateItems);
156
+ for (const [module, sectionGroups] of Object.entries(moduleGroups)) {
157
+ const counts = Object.entries(sectionGroups).map(([sec, items]) => `${items.length} ${sec}`);
158
+ actions.push({
159
+ type: 'MERGE',
160
+ target: path.join(aiDir, module),
161
+ detail: `+${counts.join(', +')}`,
162
+ });
163
+ }
164
+ if (plan.stayItems.length > 0) {
165
+ const envItems = plan.stayItems.filter(i => i.classification.reason.includes('Environment') || i.classification.reason.includes('runtime'));
166
+ actions.push({
167
+ type: 'KEEP',
168
+ target: sourcePath,
169
+ detail: `thin pointer + ${envItems.length} retained env rules`,
170
+ });
171
+ }
172
+ else {
173
+ actions.push({
174
+ type: 'KEEP',
175
+ target: sourcePath,
176
+ detail: 'thin pointer (no retained items)',
177
+ });
178
+ }
179
+ if (!noBackup) {
180
+ actions.push({
181
+ type: 'BACKUP',
182
+ target: `${sourcePath}.pre-adf-migrate.bak`,
183
+ detail: `Backup of ${sourcePath}`,
184
+ });
185
+ }
186
+ // Apply if not dry-run
187
+ if (!dryRun) {
188
+ // Backup
189
+ if (!noBackup) {
190
+ fs.writeFileSync(`${fullPath}.pre-adf-migrate.bak`, content);
191
+ }
192
+ // Ensure .ai/ exists
193
+ fs.mkdirSync(aiDir, { recursive: true });
194
+ // Merge into ADF modules
195
+ for (const [module, sectionGroups] of Object.entries(moduleGroups)) {
196
+ const modulePath = path.join(aiDir, module);
197
+ applyMigrationToModule(modulePath, sectionGroups, mergeStrategy);
198
+ }
199
+ // Write thin pointer with retained STAY items
200
+ writePointerWithRetained(fullPath, sourcePath, plan.stayItems);
201
+ }
202
+ return {
203
+ source: sourcePath,
204
+ skipped: false,
205
+ lineCount: lines.length,
206
+ sectionCount: sections.length,
207
+ plan,
208
+ actions,
209
+ };
210
+ }
211
+ // ============================================================================
212
+ // ADF Module Mutation
213
+ // ============================================================================
214
+ function groupByModule(items) {
215
+ const result = {};
216
+ for (const item of items) {
217
+ const mod = item.classification.targetModule;
218
+ const sec = item.classification.targetSection;
219
+ if (!result[mod])
220
+ result[mod] = {};
221
+ if (!result[mod][sec])
222
+ result[mod][sec] = [];
223
+ result[mod][sec].push(item);
224
+ }
225
+ return result;
226
+ }
227
+ function applyMigrationToModule(modulePath, sectionGroups, mergeStrategy) {
228
+ // Load or create module document
229
+ let doc;
230
+ if (fs.existsSync(modulePath)) {
231
+ doc = (0, adf_1.parseAdf)(fs.readFileSync(modulePath, 'utf-8'));
232
+ }
233
+ else {
234
+ doc = { version: '0.1', sections: [] };
235
+ }
236
+ const ops = [];
237
+ for (const [sectionKey, items] of Object.entries(sectionGroups)) {
238
+ const existingSection = doc.sections.find(s => s.key === sectionKey);
239
+ const weight = items.some(i => i.classification.weight === 'load-bearing')
240
+ ? 'load-bearing'
241
+ : 'advisory';
242
+ if (!existingSection) {
243
+ // Add new section with all items as list
244
+ const listItems = items.map(i => formatItemForAdf(i));
245
+ ops.push({
246
+ op: 'ADD_SECTION',
247
+ key: sectionKey,
248
+ content: { type: 'list', items: listItems },
249
+ weight,
250
+ });
251
+ }
252
+ else {
253
+ // Add individual bullets to existing section
254
+ for (const item of items) {
255
+ const formatted = formatItemForAdf(item);
256
+ // Dedup check for existing content
257
+ if (mergeStrategy === 'dedupe' && existingSection.content.type === 'list') {
258
+ const isDup = existingSection.content.items.some(existing => (0, adf_1.isDuplicateItem)(existing, formatted));
259
+ if (isDup)
260
+ continue;
261
+ }
262
+ if (mergeStrategy === 'replace') {
263
+ // Replace strategy: skip adds to existing sections (they get replaced below)
264
+ continue;
265
+ }
266
+ ops.push({
267
+ op: 'ADD_BULLET',
268
+ section: sectionKey,
269
+ value: formatted,
270
+ });
271
+ }
272
+ // Weight promotion
273
+ if (weight === 'load-bearing' && existingSection.weight !== 'load-bearing') {
274
+ // We can't directly update weight via patch, so we handle it post-patch
275
+ }
276
+ }
277
+ }
278
+ if (ops.length > 0) {
279
+ doc = (0, adf_1.applyPatches)(doc, ops);
280
+ }
281
+ // Post-patch weight promotion
282
+ for (const [sectionKey, items] of Object.entries(sectionGroups)) {
283
+ if (items.some(i => i.classification.weight === 'load-bearing')) {
284
+ const section = doc.sections.find(s => s.key === sectionKey);
285
+ if (section && section.weight !== 'load-bearing') {
286
+ section.weight = 'load-bearing';
287
+ }
288
+ }
289
+ }
290
+ fs.writeFileSync(modulePath, (0, adf_1.formatAdf)(doc));
291
+ }
292
+ function formatItemForAdf(item) {
293
+ const el = item.element;
294
+ switch (el.type) {
295
+ case 'rule':
296
+ return el.content;
297
+ case 'code-block':
298
+ // Represent code blocks as a concise description
299
+ if (el.language === 'bash' || el.language === 'sh') {
300
+ return `[Build commands] ${el.content.split('\n').filter(l => l.trim()).slice(0, 3).join('; ')}${el.content.split('\n').filter(l => l.trim()).length > 3 ? ' (...)' : ''}`;
301
+ }
302
+ return `[${el.language || 'code'}] ${el.content.split('\n')[0]}`;
303
+ case 'table-row':
304
+ return el.content;
305
+ case 'prose':
306
+ return el.content;
307
+ }
308
+ }
309
+ // ============================================================================
310
+ // Pointer Generation
311
+ // ============================================================================
312
+ function writePointerWithRetained(fullPath, fileName, stayItems) {
313
+ const baseName = path.basename(fileName);
314
+ let pointer = POINTER_TEMPLATES[baseName];
315
+ if (!pointer) {
316
+ // Generic pointer for files without a template
317
+ pointer = `# ${baseName}\n\n` +
318
+ '> This project uses [ADF](https://github.com/Stackbilt-dev/charter) for AI agent context management.\n' +
319
+ '> All stack rules, constraints, and architectural guidance live in `.ai/`.\n' +
320
+ '> **Do not duplicate ADF rules here.**\n\n' +
321
+ 'See `.ai/manifest.adf` for the module routing manifest.\n';
322
+ }
323
+ // Add retained env items
324
+ const envItems = stayItems.filter(i => i.classification.reason.includes('Environment') ||
325
+ i.classification.reason.includes('runtime') ||
326
+ i.classification.reason.includes('STAY'));
327
+ if (envItems.length > 0) {
328
+ // If pointer already has ## Environment, replace that section
329
+ // Otherwise append
330
+ const envSection = '\n## Environment\n' +
331
+ envItems.map(i => `- ${i.element.content}`).join('\n') + '\n';
332
+ if (pointer.includes('## Environment')) {
333
+ // Replace from ## Environment to end (or next ##)
334
+ pointer = pointer.replace(/## Environment[\s\S]*$/, envSection.trim() + '\n');
335
+ }
336
+ else {
337
+ pointer += envSection;
338
+ }
339
+ }
340
+ fs.writeFileSync(fullPath, pointer);
341
+ }
342
+ // ============================================================================
343
+ // Output
344
+ // ============================================================================
345
+ function printTextResult(result, dryRun) {
346
+ console.log(` Source: ${result.source} (${result.lineCount} lines, ${result.sectionCount} sections)`);
347
+ if (result.skipped) {
348
+ console.log(` Skipped: ${result.skipReason}`);
349
+ console.log('');
350
+ return;
351
+ }
352
+ if (result.plan) {
353
+ // Print per-section breakdown
354
+ for (const item of result.plan.items) {
355
+ const arrow = item.classification.decision === 'STAY' ? 'STAY' : item.classification.targetSection;
356
+ const weight = item.classification.decision === 'MIGRATE' ? ` [${item.classification.weight}]` : '';
357
+ const module = item.classification.decision === 'MIGRATE' ? ` ${item.classification.targetModule}` : '';
358
+ const reason = item.classification.decision === 'STAY' ? ` (${item.classification.reason})` : '';
359
+ const preview = item.element.content.length > 50
360
+ ? item.element.content.slice(0, 47) + '...'
361
+ : item.element.content;
362
+ console.log(` "${preview}" → ${arrow}${weight}${module}${reason}`);
363
+ }
364
+ console.log('');
365
+ // Print plan summary
366
+ console.log(' Plan:');
367
+ for (const action of result.actions) {
368
+ console.log(` ${action.type} ${action.target} (${action.detail})`);
369
+ }
370
+ }
371
+ console.log('');
372
+ }
373
+ // ============================================================================
374
+ // Helpers
375
+ // ============================================================================
376
+ function getFlag(args, flag) {
377
+ const idx = args.indexOf(flag);
378
+ if (idx !== -1 && idx + 1 < args.length) {
379
+ return args[idx + 1];
380
+ }
381
+ return undefined;
382
+ }
383
+ //# sourceMappingURL=adf-migrate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adf-migrate.js","sourceRoot":"","sources":["../../src/commands/adf-migrate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * charter adf sync
3
+ *
4
+ * Hash-based sync verification for ADF source files.
5
+ */
6
+ import type { CLIOptions } from '../index';
7
+ export declare function adfSync(options: CLIOptions, args: string[]): number;
8
+ export declare function hashContent(content: string): string;
9
+ export declare function loadLockFile(lockFile: string): Record<string, string>;
10
+ //# sourceMappingURL=adf-sync.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adf-sync.d.ts","sourceRoot":"","sources":["../../src/commands/adf-sync.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAmB3C,wBAAgB,OAAO,CAAC,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,CAwJnE;AAED,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAEnD;AAED,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAOrE"}
@@ -0,0 +1,213 @@
1
+ "use strict";
2
+ /**
3
+ * charter adf sync
4
+ *
5
+ * Hash-based sync verification for ADF source files.
6
+ */
7
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
8
+ if (k2 === undefined) k2 = k;
9
+ var desc = Object.getOwnPropertyDescriptor(m, k);
10
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
11
+ desc = { enumerable: true, get: function() { return m[k]; } };
12
+ }
13
+ Object.defineProperty(o, k2, desc);
14
+ }) : (function(o, m, k, k2) {
15
+ if (k2 === undefined) k2 = k;
16
+ o[k2] = m[k];
17
+ }));
18
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
19
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
20
+ }) : function(o, v) {
21
+ o["default"] = v;
22
+ });
23
+ var __importStar = (this && this.__importStar) || (function () {
24
+ var ownKeys = function(o) {
25
+ ownKeys = Object.getOwnPropertyNames || function (o) {
26
+ var ar = [];
27
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
28
+ return ar;
29
+ };
30
+ return ownKeys(o);
31
+ };
32
+ return function (mod) {
33
+ if (mod && mod.__esModule) return mod;
34
+ var result = {};
35
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
36
+ __setModuleDefault(result, mod);
37
+ return result;
38
+ };
39
+ })();
40
+ Object.defineProperty(exports, "__esModule", { value: true });
41
+ exports.adfSync = adfSync;
42
+ exports.hashContent = hashContent;
43
+ exports.loadLockFile = loadLockFile;
44
+ const fs = __importStar(require("node:fs"));
45
+ const path = __importStar(require("node:path"));
46
+ const crypto = __importStar(require("node:crypto"));
47
+ const adf_1 = require("@stackbilt/adf");
48
+ const index_1 = require("../index");
49
+ function adfSync(options, args) {
50
+ // --explain: output lockfile schema documentation and exit
51
+ if (args.includes('--explain')) {
52
+ const explanation = {
53
+ format: '.adf.lock',
54
+ description: 'Flat JSON map of ADF source files to SHA-256 hash prefixes (16 hex chars)',
55
+ schema: {
56
+ type: 'object',
57
+ pattern: '{ "<filename>.adf": "<sha256-prefix-16>" }',
58
+ example: {
59
+ 'core.adf': '54d5c9a146d6da3c',
60
+ 'state.adf': 'a1b2c3d4e5f67890',
61
+ },
62
+ },
63
+ hashAlgorithm: 'SHA-256, first 16 hex characters',
64
+ commands: {
65
+ check: 'charter adf sync --check \u2014 verify sources match locked hashes',
66
+ write: 'charter adf sync --write \u2014 update lock with current hashes',
67
+ },
68
+ location: '.ai/.adf.lock (relative to AI directory)',
69
+ purpose: 'Detect when ADF source files have changed since last sync. Used in CI to enforce governance drift checks.',
70
+ };
71
+ if (options.format === 'json') {
72
+ console.log(JSON.stringify(explanation, null, 2));
73
+ }
74
+ else {
75
+ console.log('ADF Sync Lock Format (.adf.lock)');
76
+ console.log('================================\n');
77
+ console.log('Format: Flat JSON map of source files to hash prefixes\n');
78
+ console.log('Schema: { "<filename>.adf": "<sha256-prefix-16>" }\n');
79
+ console.log('Hash: SHA-256, first 16 hex characters\n');
80
+ console.log('Location: .ai/.adf.lock\n');
81
+ console.log('Commands:');
82
+ console.log(' sync --check Verify sources match locked hashes');
83
+ console.log(' sync --write Update lock with current hashes');
84
+ console.log(' sync --explain Show this schema documentation\n');
85
+ console.log('Purpose: Detect ADF source drift. Used in CI governance checks.');
86
+ }
87
+ return index_1.EXIT_CODE.SUCCESS;
88
+ }
89
+ const aiDir = getFlag(args, '--ai-dir') || '.ai';
90
+ const checkMode = args.includes('--check');
91
+ const writeMode = args.includes('--write');
92
+ if (!checkMode && !writeMode) {
93
+ throw new index_1.CLIError('adf sync requires --check, --write, or --explain. Usage: charter adf sync --check');
94
+ }
95
+ const manifestPath = path.join(aiDir, 'manifest.adf');
96
+ if (!fs.existsSync(manifestPath)) {
97
+ throw new index_1.CLIError(`manifest.adf not found at ${manifestPath}. Run: charter adf init`);
98
+ }
99
+ const manifestContent = fs.readFileSync(manifestPath, 'utf-8');
100
+ const manifestDoc = (0, adf_1.parseAdf)(manifestContent);
101
+ const manifest = (0, adf_1.parseManifest)(manifestDoc);
102
+ if (manifest.sync.length === 0) {
103
+ const result = {
104
+ aiDir,
105
+ lockFile: path.join(aiDir, '.adf.lock'),
106
+ entries: [],
107
+ allInSync: true,
108
+ written: false,
109
+ };
110
+ if (options.format === 'json') {
111
+ console.log(JSON.stringify(result, null, 2));
112
+ }
113
+ else {
114
+ console.log(' No SYNC entries in manifest. Nothing to check.');
115
+ }
116
+ return index_1.EXIT_CODE.SUCCESS;
117
+ }
118
+ const lockFile = path.join(aiDir, '.adf.lock');
119
+ const locked = loadLockFile(lockFile);
120
+ const entries = [];
121
+ for (const entry of manifest.sync) {
122
+ const sourcePath = path.join(aiDir, entry.source);
123
+ if (!fs.existsSync(sourcePath)) {
124
+ throw new index_1.CLIError(`Sync source not found: ${sourcePath}`);
125
+ }
126
+ const sourceContent = fs.readFileSync(sourcePath, 'utf-8');
127
+ const sourceHash = hashContent(sourceContent);
128
+ const lockedHash = locked[entry.source] ?? null;
129
+ entries.push({
130
+ source: entry.source,
131
+ target: entry.target,
132
+ sourceHash,
133
+ lockedHash,
134
+ inSync: lockedHash === sourceHash,
135
+ });
136
+ }
137
+ const allInSync = entries.every(e => e.inSync);
138
+ if (writeMode) {
139
+ const newLock = {};
140
+ for (const e of entries) {
141
+ newLock[e.source] = e.sourceHash;
142
+ }
143
+ fs.writeFileSync(lockFile, JSON.stringify(newLock, null, 2) + '\n');
144
+ const result = {
145
+ aiDir,
146
+ lockFile,
147
+ entries,
148
+ allInSync: true,
149
+ written: true,
150
+ };
151
+ if (options.format === 'json') {
152
+ console.log(JSON.stringify(result, null, 2));
153
+ }
154
+ else {
155
+ console.log(` [ok] Updated ${lockFile} with ${entries.length} hash${entries.length === 1 ? '' : 'es'}.`);
156
+ }
157
+ return index_1.EXIT_CODE.SUCCESS;
158
+ }
159
+ // --check mode
160
+ const result = {
161
+ aiDir,
162
+ lockFile,
163
+ entries,
164
+ allInSync,
165
+ written: false,
166
+ };
167
+ if (options.format === 'json') {
168
+ const syncOut = { ...result };
169
+ if (!allInSync) {
170
+ syncOut.nextActions = ['Regenerate targets from source .adf files', 'charter adf sync --write'];
171
+ }
172
+ console.log(JSON.stringify(syncOut, null, 2));
173
+ }
174
+ else {
175
+ for (const e of entries) {
176
+ if (e.inSync) {
177
+ console.log(` [ok] ${e.source} -> ${e.target} (in sync)`);
178
+ }
179
+ else if (e.lockedHash === null) {
180
+ console.log(` [warn] ${e.source} -> ${e.target} (no lock entry — run: charter adf sync --write)`);
181
+ }
182
+ else {
183
+ console.log(` [fail] ${e.source} -> ${e.target} (source changed since last sync)`);
184
+ }
185
+ }
186
+ if (!allInSync) {
187
+ console.log('');
188
+ console.log(' Source .adf files have changed. Regenerate targets and run: charter adf sync --write');
189
+ }
190
+ }
191
+ return allInSync ? index_1.EXIT_CODE.SUCCESS : index_1.EXIT_CODE.POLICY_VIOLATION;
192
+ }
193
+ function hashContent(content) {
194
+ return crypto.createHash('sha256').update(content).digest('hex').slice(0, 16);
195
+ }
196
+ function loadLockFile(lockFile) {
197
+ if (!fs.existsSync(lockFile))
198
+ return {};
199
+ try {
200
+ return JSON.parse(fs.readFileSync(lockFile, 'utf-8'));
201
+ }
202
+ catch {
203
+ return {};
204
+ }
205
+ }
206
+ function getFlag(args, flag) {
207
+ const idx = args.indexOf(flag);
208
+ if (idx !== -1 && idx + 1 < args.length) {
209
+ return args[idx + 1];
210
+ }
211
+ return undefined;
212
+ }
213
+ //# sourceMappingURL=adf-sync.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adf-sync.js","sourceRoot":"","sources":["../../src/commands/adf-sync.ts"],"names":[],"mappings":"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"}
@@ -1,11 +1,11 @@
1
1
  /**
2
2
  * charter adf
3
3
  *
4
- * ADF (Attention-Directed Format) subcommands: init, fmt, patch, bundle, sync.
4
+ * ADF (Attention-Directed Format) subcommands: init, fmt, patch, bundle, sync, evidence, migrate.
5
5
  */
6
6
  import type { CLIOptions } from '../index';
7
7
  export declare const MANIFEST_SCAFFOLD = "ADF: 0.1\n\uD83C\uDFAF ROLE: Repo context router\n\n\uD83D\uDCE6 DEFAULT_LOAD:\n - core.adf\n - state.adf\n\n\uD83D\uDCC2 ON_DEMAND:\n - frontend.adf (Triggers on: React, CSS, UI)\n - backend.adf (Triggers on: API, Node, DB)\n\n\uD83D\uDCD0 RULES:\n - Prefer smallest relevant module set.\n - Never assume unseen modules were loaded.\n";
8
- export declare const CORE_SCAFFOLD = "ADF: 0.1\n\n# Rule Routing Guide (remove after initial setup)\n# \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n# Where does each rule belong?\n#\n# Pure runtime/environment? (OS, line endings, shell)\n# \u2192 CLAUDE.md (not ADF)\n#\n# Universal architecture constraint? (platform choice, tenant isolation)\n# \u2192 core.adf CONSTRAINTS [load-bearing]\n#\n# Stack-specific operational rule? (wrangler flags, D1 batching)\n# \u2192 domain-specific .adf module (backend.adf, frontend.adf)\n#\n# Agent identity/behavior? (\"You ARE the X agent\", bias toward action)\n# \u2192 core.adf CONTEXT\n#\n# Language/tooling discipline? (type checks, enum safety)\n# \u2192 core.adf CONSTRAINTS or dedicated section\n#\n# Section weight guide:\n# [load-bearing] = violation causes incorrect output\n# [advisory] = best practice, not enforced\n# (no tag) = informational context\n#\n# Section types (open taxonomy, custom sections allowed):\n# CONTEXT \u2014 factual project/agent identity\n# CONSTRAINTS \u2014 must/never rules\n# ADVISORY \u2014 should/prefer guidance\n# METRICS \u2014 quantitative ceilings (key: value / ceiling [unit])\n\n\u26A0\uFE0F CONSTRAINTS [load-bearing]:\n - Use Conventional Commits (feat, fix, docs, chore)\n - Never commit secrets or credentials\n - Pure functions in library code; side effects only in entry points\n\n\uD83D\uDCCA METRICS:\n entry_loc: 0 / 500 [lines]\n";
8
+ export declare const CORE_SCAFFOLD = "ADF: 0.1\n\n\uD83D\uDCD6 GUIDE [advisory]:\n - Pure runtime/environment? (OS, line endings) \u2192 CLAUDE.md, not ADF\n - Universal architecture constraint? \u2192 core.adf CONSTRAINTS [load-bearing]\n - Stack-specific operational rule? \u2192 domain .adf module (backend.adf, frontend.adf)\n - Agent identity/behavior? \u2192 core.adf CONTEXT\n - Language/tooling discipline? \u2192 core.adf CONSTRAINTS or dedicated section\n - [load-bearing] = violation causes incorrect output\n - [advisory] = best practice, not enforced\n - Section types are open: CONTEXT, CONSTRAINTS, ADVISORY, METRICS, custom\n\n\u26A0\uFE0F CONSTRAINTS [load-bearing]:\n - Use Conventional Commits (feat, fix, docs, chore)\n - Never commit secrets or credentials\n - Pure functions in library code; side effects only in entry points\n\n\uD83D\uDCCA METRICS:\n entry_loc: 0 / 500 [lines]\n";
9
9
  export declare const STATE_SCAFFOLD = "ADF: 0.1\n\uD83E\uDDE0 STATE:\n CURRENT: Repository initialized with ADF context system\n NEXT: Configure on-demand modules for your stack\n";
10
10
  export declare function adfCommand(options: CLIOptions, args: string[]): Promise<number>;
11
11
  export declare const POINTER_CLAUDE_MD = "# Project Context\n\n> This project uses [ADF](https://github.com/Stackbilt-dev/charter) for AI agent context management.\n> All stack rules, constraints, and architectural guidance live in `.ai/`.\n> **Do not duplicate ADF rules here.** Only pre-ADF bootstrap content belongs in this file.\n\nSee `.ai/manifest.adf` for the module routing manifest.\n\n## Environment\n<!-- Add runtime/OS/shell-specific notes here (not stack rules) -->\n";