@stackbilt/cli 0.3.2 → 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.
- package/README.md +18 -5
- package/dist/commands/adf-bundle.d.ts +8 -0
- package/dist/commands/adf-bundle.d.ts.map +1 -0
- package/dist/commands/adf-bundle.js +169 -0
- package/dist/commands/adf-bundle.js.map +1 -0
- package/dist/commands/adf-evidence.d.ts +8 -0
- package/dist/commands/adf-evidence.d.ts.map +1 -0
- package/dist/commands/adf-evidence.js +273 -0
- package/dist/commands/adf-evidence.js.map +1 -0
- package/dist/commands/adf-migrate.d.ts +10 -0
- package/dist/commands/adf-migrate.d.ts.map +1 -0
- package/dist/commands/adf-migrate.js +383 -0
- package/dist/commands/adf-migrate.js.map +1 -0
- package/dist/commands/adf-sync.d.ts +10 -0
- package/dist/commands/adf-sync.d.ts.map +1 -0
- package/dist/commands/adf-sync.js +213 -0
- package/dist/commands/adf-sync.js.map +1 -0
- package/dist/commands/adf.d.ts +7 -1
- package/dist/commands/adf.d.ts.map +1 -1
- package/dist/commands/adf.js +109 -472
- package/dist/commands/adf.js.map +1 -1
- package/dist/commands/bootstrap.d.ts +9 -0
- package/dist/commands/bootstrap.d.ts.map +1 -0
- package/dist/commands/bootstrap.js +660 -0
- package/dist/commands/bootstrap.js.map +1 -0
- package/dist/commands/hook.d.ts.map +1 -1
- package/dist/commands/hook.js +69 -10
- package/dist/commands/hook.js.map +1 -1
- package/dist/commands/setup.d.ts +103 -0
- package/dist/commands/setup.d.ts.map +1 -1
- package/dist/commands/setup.js +7 -0
- package/dist/commands/setup.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +9 -2
- package/dist/index.js.map +1 -1
- package/package.json +8 -8
|
@@ -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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"}
|
package/dist/commands/adf.d.ts
CHANGED
|
@@ -1,8 +1,14 @@
|
|
|
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
|
+
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\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
|
+
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";
|
|
7
10
|
export declare function adfCommand(options: CLIOptions, args: string[]): Promise<number>;
|
|
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";
|
|
12
|
+
export declare const POINTER_CURSORRULES = "# Cursor Rules\n\nThis project uses ADF (Attention-Directed Format) for context management.\nAll rules and constraints are in .ai/ \u2014 see .ai/manifest.adf for routing.\n\nDo not add stack rules here. This file exists only as a pointer.\nSee: .ai/core.adf for universal constraints.\n";
|
|
13
|
+
export declare const POINTER_AGENTS_MD = "# Agent Guidelines\n\nThis project uses ADF for structured agent context.\nAll architectural rules, constraints, and guidance live in `.ai/`.\n\nModule manifest: .ai/manifest.adf\nUniversal rules: .ai/core.adf\nCurrent state: .ai/state.adf\n\nDo not duplicate rules from .ai/ modules into this file or other agent config files.\n";
|
|
8
14
|
//# sourceMappingURL=adf.d.ts.map
|