@stackbilt/cli 0.6.0 → 0.9.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.
Files changed (91) hide show
  1. package/dist/__tests__/adf-context.test.d.ts +2 -0
  2. package/dist/__tests__/adf-context.test.d.ts.map +1 -0
  3. package/dist/__tests__/adf-context.test.js +60 -0
  4. package/dist/__tests__/adf-context.test.js.map +1 -0
  5. package/dist/__tests__/integration/evidence-contracts.test.d.ts +9 -0
  6. package/dist/__tests__/integration/evidence-contracts.test.d.ts.map +1 -0
  7. package/dist/__tests__/integration/evidence-contracts.test.js +203 -0
  8. package/dist/__tests__/integration/evidence-contracts.test.js.map +1 -0
  9. package/dist/__tests__/integration/precommit-hook.test.d.ts +12 -0
  10. package/dist/__tests__/integration/precommit-hook.test.d.ts.map +1 -0
  11. package/dist/__tests__/integration/precommit-hook.test.js +270 -0
  12. package/dist/__tests__/integration/precommit-hook.test.js.map +1 -0
  13. package/dist/__tests__/integration/sync-bundle.test.d.ts +10 -0
  14. package/dist/__tests__/integration/sync-bundle.test.d.ts.map +1 -0
  15. package/dist/__tests__/integration/sync-bundle.test.js +241 -0
  16. package/dist/__tests__/integration/sync-bundle.test.js.map +1 -0
  17. package/dist/__tests__/integration/vendor-bloat.test.d.ts +12 -0
  18. package/dist/__tests__/integration/vendor-bloat.test.d.ts.map +1 -0
  19. package/dist/__tests__/integration/vendor-bloat.test.js +300 -0
  20. package/dist/__tests__/integration/vendor-bloat.test.js.map +1 -0
  21. package/dist/commands/adf-context.d.ts +14 -0
  22. package/dist/commands/adf-context.d.ts.map +1 -0
  23. package/dist/commands/adf-context.js +149 -0
  24. package/dist/commands/adf-context.js.map +1 -0
  25. package/dist/commands/adf-migrate.d.ts +11 -1
  26. package/dist/commands/adf-migrate.d.ts.map +1 -1
  27. package/dist/commands/adf-migrate.js +180 -11
  28. package/dist/commands/adf-migrate.js.map +1 -1
  29. package/dist/commands/adf-populate.d.ts +12 -0
  30. package/dist/commands/adf-populate.d.ts.map +1 -0
  31. package/dist/commands/adf-populate.js +362 -0
  32. package/dist/commands/adf-populate.js.map +1 -0
  33. package/dist/commands/adf-sync.d.ts.map +1 -1
  34. package/dist/commands/adf-sync.js +3 -0
  35. package/dist/commands/adf-sync.js.map +1 -1
  36. package/dist/commands/adf-tidy.d.ts +10 -0
  37. package/dist/commands/adf-tidy.d.ts.map +1 -0
  38. package/dist/commands/adf-tidy.js +584 -0
  39. package/dist/commands/adf-tidy.js.map +1 -0
  40. package/dist/commands/adf.d.ts +15 -5
  41. package/dist/commands/adf.d.ts.map +1 -1
  42. package/dist/commands/adf.js +169 -31
  43. package/dist/commands/adf.js.map +1 -1
  44. package/dist/commands/architect.d.ts +12 -0
  45. package/dist/commands/architect.d.ts.map +1 -0
  46. package/dist/commands/architect.js +161 -0
  47. package/dist/commands/architect.js.map +1 -0
  48. package/dist/commands/bootstrap.d.ts.map +1 -1
  49. package/dist/commands/bootstrap.js +29 -12
  50. package/dist/commands/bootstrap.js.map +1 -1
  51. package/dist/commands/doctor.d.ts.map +1 -1
  52. package/dist/commands/doctor.js +114 -2
  53. package/dist/commands/doctor.js.map +1 -1
  54. package/dist/commands/hook.d.ts.map +1 -1
  55. package/dist/commands/hook.js +38 -4
  56. package/dist/commands/hook.js.map +1 -1
  57. package/dist/commands/login.d.ts +10 -0
  58. package/dist/commands/login.d.ts.map +1 -0
  59. package/dist/commands/login.js +64 -0
  60. package/dist/commands/login.js.map +1 -0
  61. package/dist/commands/run.d.ts +12 -0
  62. package/dist/commands/run.d.ts.map +1 -0
  63. package/dist/commands/run.js +212 -0
  64. package/dist/commands/run.js.map +1 -0
  65. package/dist/commands/scaffold.d.ts +11 -0
  66. package/dist/commands/scaffold.d.ts.map +1 -0
  67. package/dist/commands/scaffold.js +110 -0
  68. package/dist/commands/scaffold.js.map +1 -0
  69. package/dist/commands/serve.d.ts +14 -0
  70. package/dist/commands/serve.d.ts.map +1 -0
  71. package/dist/commands/serve.js +253 -0
  72. package/dist/commands/serve.js.map +1 -0
  73. package/dist/commands/setup.d.ts.map +1 -1
  74. package/dist/commands/setup.js +63 -2
  75. package/dist/commands/setup.js.map +1 -1
  76. package/dist/credentials.d.ts +13 -0
  77. package/dist/credentials.d.ts.map +1 -0
  78. package/dist/credentials.js +74 -0
  79. package/dist/credentials.js.map +1 -0
  80. package/dist/git-helpers.d.ts +7 -7
  81. package/dist/git-helpers.d.ts.map +1 -1
  82. package/dist/git-helpers.js +7 -8
  83. package/dist/git-helpers.js.map +1 -1
  84. package/dist/http-client.d.ts +87 -0
  85. package/dist/http-client.d.ts.map +1 -0
  86. package/dist/http-client.js +49 -0
  87. package/dist/http-client.js.map +1 -0
  88. package/dist/index.d.ts.map +1 -1
  89. package/dist/index.js +30 -0
  90. package/dist/index.js.map +1 -1
  91. package/package.json +12 -10
@@ -0,0 +1,584 @@
1
+ "use strict";
2
+ /**
3
+ * charter adf tidy
4
+ *
5
+ * Scans vendor config files for content beyond the thin pointer, classifies
6
+ * and routes it to the appropriate ADF modules, and restores the thin pointer.
7
+ * Designed as a composable primitive for the pre-commit hook (#24).
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.adfTidyCommand = adfTidyCommand;
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 flags_1 = require("../flags");
49
+ const adf_2 = require("./adf");
50
+ // ============================================================================
51
+ // Constants
52
+ // ============================================================================
53
+ const VENDOR_FILES = [
54
+ 'CLAUDE.md',
55
+ '.cursorrules',
56
+ 'agents.md',
57
+ 'AGENTS.md',
58
+ 'GEMINI.md',
59
+ 'copilot-instructions.md',
60
+ ];
61
+ /** Lazy-init to avoid circular dependency with adf.ts at module load time. */
62
+ function getPointerTemplates() {
63
+ return {
64
+ 'CLAUDE.md': adf_2.POINTER_CLAUDE_MD,
65
+ '.cursorrules': adf_2.POINTER_CURSORRULES,
66
+ 'agents.md': adf_2.POINTER_AGENTS_MD,
67
+ 'AGENTS.md': adf_2.POINTER_AGENTS_MD,
68
+ 'GEMINI.md': adf_2.POINTER_GEMINI_MD,
69
+ 'copilot-instructions.md': adf_2.POINTER_COPILOT_MD,
70
+ };
71
+ }
72
+ // ============================================================================
73
+ // Types
74
+ // ============================================================================
75
+ const SECTION_SIZE_WARN_THRESHOLD = 20;
76
+ // ============================================================================
77
+ // Command Entry
78
+ // ============================================================================
79
+ async function adfTidyCommand(options, args) {
80
+ const dryRun = args.includes('--dry-run');
81
+ const ciMode = args.includes('--ci');
82
+ const verbose = args.includes('--verbose');
83
+ const sourceFile = (0, flags_1.getFlag)(args, '--source');
84
+ const aiDir = (0, flags_1.getFlag)(args, '--ai-dir') || '.ai';
85
+ // Determine which files to scan
86
+ const targets = sourceFile
87
+ ? [sourceFile]
88
+ : VENDOR_FILES.filter(f => fs.existsSync(path.resolve(f)));
89
+ if (targets.length === 0) {
90
+ if (options.format === 'json') {
91
+ console.log(JSON.stringify({ dryRun, files: [], totalExtracted: 0, modulesModified: [], moduleWarnings: [] }, null, 2));
92
+ }
93
+ else {
94
+ console.log(' No vendor config files found.');
95
+ }
96
+ return index_1.EXIT_CODE.SUCCESS;
97
+ }
98
+ // Load trigger map from manifest
99
+ const triggerMap = loadTriggerMap(aiDir);
100
+ const fileResults = [];
101
+ const allModuleGroups = {};
102
+ for (const file of targets) {
103
+ const result = analyzeVendorFile(file, aiDir, triggerMap);
104
+ if (!result) {
105
+ fileResults.push({ file, status: 'not-found', itemsExtracted: 0, routing: {} });
106
+ continue;
107
+ }
108
+ if (result.migrateItems.length === 0) {
109
+ fileResults.push({ file, status: 'clean', itemsExtracted: 0, routing: {} });
110
+ continue;
111
+ }
112
+ // Group items by module
113
+ const moduleGroups = groupByModule(result.migrateItems);
114
+ const routing = {};
115
+ for (const [mod, sections] of Object.entries(moduleGroups)) {
116
+ const count = Object.values(sections).reduce((sum, items) => sum + items.length, 0);
117
+ routing[mod] = count;
118
+ // Accumulate for batch write
119
+ if (!allModuleGroups[mod])
120
+ allModuleGroups[mod] = {};
121
+ for (const [sec, items] of Object.entries(sections)) {
122
+ if (!allModuleGroups[mod][sec])
123
+ allModuleGroups[mod][sec] = [];
124
+ allModuleGroups[mod][sec].push(...items);
125
+ }
126
+ }
127
+ fileResults.push({
128
+ file,
129
+ status: 'tidied',
130
+ itemsExtracted: result.migrateItems.length,
131
+ routing,
132
+ });
133
+ // Restore thin pointer (if not dry-run)
134
+ if (!dryRun) {
135
+ restorePointer(file, result.stayItems);
136
+ }
137
+ }
138
+ // Apply accumulated changes to ADF modules (if not dry-run)
139
+ if (!dryRun) {
140
+ for (const [module, sectionGroups] of Object.entries(allModuleGroups)) {
141
+ const modulePath = path.join(aiDir, module);
142
+ applyMigrationToModule(modulePath, sectionGroups);
143
+ }
144
+ }
145
+ const totalExtracted = fileResults.reduce((sum, f) => sum + f.itemsExtracted, 0);
146
+ const modulesModified = Object.keys(allModuleGroups);
147
+ // Check module health — warn when sections grow past the threshold.
148
+ // In dry-run mode project counts (current + incoming); otherwise read written files.
149
+ const moduleWarnings = dryRun
150
+ ? projectModuleWarnings(aiDir, allModuleGroups)
151
+ : scanModuleWarnings(aiDir, modulesModified);
152
+ // Collect per-item routing trace when --verbose (or always in JSON mode)
153
+ let itemRoutes;
154
+ if (verbose || options.format === 'json') {
155
+ itemRoutes = [];
156
+ for (const [, sectionGroups] of Object.entries(allModuleGroups)) {
157
+ for (const [, items] of Object.entries(sectionGroups)) {
158
+ for (const item of items) {
159
+ const trace = item.classification.routingTrace;
160
+ itemRoutes.push({
161
+ item: item.element.content.slice(0, 100),
162
+ targetModule: item.classification.targetModule,
163
+ targetSection: item.classification.targetSection,
164
+ headingModule: trace?.headingModule ?? item.classification.targetModule,
165
+ phraseOverride: trace?.phraseOverride,
166
+ candidateScores: trace?.candidateScores ?? {},
167
+ });
168
+ }
169
+ }
170
+ }
171
+ }
172
+ const result = { dryRun, files: fileResults, totalExtracted, modulesModified, moduleWarnings, itemRoutes };
173
+ // Output
174
+ if (options.format === 'json') {
175
+ console.log(JSON.stringify(result, null, 2));
176
+ }
177
+ else {
178
+ printTextResult(result);
179
+ }
180
+ // Exit codes: in --ci mode, exit 1 if bloat was found (for pre-commit gating)
181
+ if (ciMode && totalExtracted > 0 && dryRun) {
182
+ return index_1.EXIT_CODE.POLICY_VIOLATION;
183
+ }
184
+ return index_1.EXIT_CODE.SUCCESS;
185
+ }
186
+ function analyzeVendorFile(filePath, aiDir, triggerMap) {
187
+ const fullPath = path.resolve(filePath);
188
+ if (!fs.existsSync(fullPath))
189
+ return null;
190
+ const content = fs.readFileSync(fullPath, 'utf-8');
191
+ // If it's not a thin pointer at all, skip — use `adf migrate` instead
192
+ if (!adf_2.POINTER_MARKERS.some(marker => content.includes(marker))) {
193
+ return null;
194
+ }
195
+ // Extract content beyond the thin pointer
196
+ const beyondPointer = extractBeyondPointer(content, filePath);
197
+ if (!beyondPointer.trim()) {
198
+ return { migrateItems: [], stayItems: [] };
199
+ }
200
+ // Parse and classify the extracted content
201
+ const sections = (0, adf_1.parseMarkdownSections)(beyondPointer);
202
+ // Load ALL existing ADF modules for dedup (not just core.adf — items may have
203
+ // been routed to any domain module in a previous session).
204
+ const existingAdf = loadAllAdfModules(aiDir);
205
+ const plan = (0, adf_1.buildMigrationPlan)(sections, existingAdf, triggerMap);
206
+ return {
207
+ migrateItems: plan.migrateItems,
208
+ stayItems: plan.stayItems,
209
+ };
210
+ }
211
+ /**
212
+ * Extract content that was added beyond the thin pointer.
213
+ *
214
+ * Strategy: scan for H2 sections that aren't ## Environment — those are bloat.
215
+ * Any content before the first H2 that isn't part of the pointer is also bloat.
216
+ * The ## Environment section and its items are legitimate retained content.
217
+ */
218
+ function extractBeyondPointer(content, fileName) {
219
+ const baseName = path.basename(fileName);
220
+ const template = getPointerTemplates()[baseName];
221
+ if (!template)
222
+ return '';
223
+ const lines = content.split('\n');
224
+ const bloatLines = [];
225
+ let inEnvironmentSection = false;
226
+ let inPointerHeader = true; // Start true — skip the pointer preamble
227
+ for (const line of lines) {
228
+ const trimmed = line.trim();
229
+ // Detect pointer header lines — skip them
230
+ if (inPointerHeader) {
231
+ if (trimmed === '' ||
232
+ trimmed.startsWith('#') && !trimmed.startsWith('## ') ||
233
+ trimmed.startsWith('>') ||
234
+ trimmed.startsWith('<!--') ||
235
+ adf_2.POINTER_MARKERS.some(m => trimmed.includes(m)) ||
236
+ trimmed.includes('.ai/manifest.adf') ||
237
+ trimmed.includes('auto-managed by Charter') ||
238
+ trimmed.includes('module routing manifest') ||
239
+ trimmed.includes('See `.ai/') ||
240
+ trimmed.startsWith('See .ai/')) {
241
+ continue;
242
+ }
243
+ // Once we hit a non-pointer line, we're past the header
244
+ if (trimmed.startsWith('## ')) {
245
+ inPointerHeader = false;
246
+ // Fall through to section detection below
247
+ }
248
+ else {
249
+ inPointerHeader = false;
250
+ // Non-header, non-section content — treat as bloat
251
+ bloatLines.push(line);
252
+ continue;
253
+ }
254
+ }
255
+ // Section detection
256
+ if (trimmed.startsWith('## ')) {
257
+ if (trimmed === '## Environment') {
258
+ inEnvironmentSection = true;
259
+ continue;
260
+ }
261
+ else {
262
+ inEnvironmentSection = false;
263
+ // Non-Environment H2 section = bloat
264
+ bloatLines.push(line);
265
+ continue;
266
+ }
267
+ }
268
+ if (inEnvironmentSection) {
269
+ // Environment items are retained — not bloat
270
+ continue;
271
+ }
272
+ // Everything else after the pointer that's not in ## Environment = bloat
273
+ bloatLines.push(line);
274
+ }
275
+ return bloatLines.join('\n');
276
+ }
277
+ // ============================================================================
278
+ // Module Mutation (reused from adf-migrate pattern)
279
+ // ============================================================================
280
+ function groupByModule(items) {
281
+ const result = {};
282
+ for (const item of items) {
283
+ const mod = item.classification.targetModule;
284
+ const sec = item.classification.targetSection;
285
+ if (!result[mod])
286
+ result[mod] = {};
287
+ if (!result[mod][sec])
288
+ result[mod][sec] = [];
289
+ result[mod][sec].push(item);
290
+ }
291
+ return result;
292
+ }
293
+ function applyMigrationToModule(modulePath, sectionGroups) {
294
+ let doc;
295
+ if (fs.existsSync(modulePath)) {
296
+ doc = (0, adf_1.parseAdf)(fs.readFileSync(modulePath, 'utf-8'));
297
+ }
298
+ else {
299
+ doc = { version: '0.1', sections: [] };
300
+ }
301
+ const ops = [];
302
+ for (const [sectionKey, items] of Object.entries(sectionGroups)) {
303
+ const existingSection = doc.sections.find(s => s.key === sectionKey);
304
+ const weight = items.some(i => i.classification.weight === 'load-bearing')
305
+ ? 'load-bearing'
306
+ : 'advisory';
307
+ if (!existingSection) {
308
+ const listItems = items.map(i => formatItemForAdf(i));
309
+ ops.push({
310
+ op: 'ADD_SECTION',
311
+ key: sectionKey,
312
+ content: { type: 'list', items: listItems },
313
+ weight,
314
+ });
315
+ }
316
+ else if (existingSection.content.type === 'text') {
317
+ const existingText = existingSection.content.value.trim();
318
+ const newItems = items.map(i => formatItemForAdf(i));
319
+ ops.push({
320
+ op: 'REPLACE_SECTION',
321
+ key: sectionKey,
322
+ content: { type: 'list', items: existingText ? [existingText, ...newItems] : newItems },
323
+ });
324
+ }
325
+ else {
326
+ for (const item of items) {
327
+ const formatted = formatItemForAdf(item);
328
+ // Dedup against existing content
329
+ if (existingSection.content.type === 'list') {
330
+ const isDup = existingSection.content.items.some(existing => (0, adf_1.isDuplicateItem)(existing, formatted));
331
+ if (isDup)
332
+ continue;
333
+ }
334
+ ops.push({ op: 'ADD_BULLET', section: sectionKey, value: formatted });
335
+ }
336
+ }
337
+ }
338
+ if (ops.length > 0) {
339
+ doc = (0, adf_1.applyPatches)(doc, ops);
340
+ }
341
+ // Post-patch weight promotion
342
+ for (const [sectionKey, items] of Object.entries(sectionGroups)) {
343
+ if (items.some(i => i.classification.weight === 'load-bearing')) {
344
+ const section = doc.sections.find(s => s.key === sectionKey);
345
+ if (section && section.weight !== 'load-bearing') {
346
+ section.weight = 'load-bearing';
347
+ }
348
+ }
349
+ }
350
+ fs.writeFileSync(modulePath, (0, adf_1.formatAdf)(doc));
351
+ }
352
+ function formatItemForAdf(item) {
353
+ const el = item.element;
354
+ switch (el.type) {
355
+ case 'rule':
356
+ return el.content;
357
+ case 'code-block':
358
+ if (el.language === 'bash' || el.language === 'sh') {
359
+ 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 ? ' (...)' : ''}`;
360
+ }
361
+ return `[${el.language || 'code'}] ${el.content.split('\n')[0]}`;
362
+ case 'table-row':
363
+ return el.content;
364
+ case 'table-block':
365
+ return el.content;
366
+ case 'prose':
367
+ return el.content;
368
+ }
369
+ return el.content;
370
+ }
371
+ // ============================================================================
372
+ // Pointer Restoration
373
+ // ============================================================================
374
+ /**
375
+ * Format a STAY item for writing back into the vendor file's ## Environment section.
376
+ * Headings (lines starting with #) are preserved as-is; everything else gets a - prefix.
377
+ */
378
+ function formatStayItem(content) {
379
+ return content.trimStart().startsWith('#') ? content : `- ${content}`;
380
+ }
381
+ function restorePointer(filePath, stayItems) {
382
+ const fullPath = path.resolve(filePath);
383
+ const baseName = path.basename(filePath);
384
+ let pointer = getPointerTemplates()[baseName];
385
+ if (!pointer) {
386
+ pointer = `# ${baseName}\n\n` +
387
+ '> **DO NOT add rules, constraints, or context to this file.**\n' +
388
+ '> All project rules are managed in `.ai/` by Charter.\n' +
389
+ '> See `.ai/manifest.adf` for the module routing manifest.\n';
390
+ }
391
+ // Re-attach retained environment items
392
+ const envItems = stayItems.filter(i => i.classification.reason.includes('Environment') ||
393
+ i.classification.reason.includes('runtime') ||
394
+ i.classification.reason.includes('STAY'));
395
+ if (envItems.length > 0) {
396
+ const envSection = '\n## Environment\n' +
397
+ envItems.map(i => formatStayItem(i.element.content)).join('\n') + '\n';
398
+ if (pointer.includes('## Environment')) {
399
+ pointer = pointer.replace(/## Environment[\s\S]*$/, envSection.trim() + '\n');
400
+ }
401
+ else {
402
+ pointer += envSection;
403
+ }
404
+ }
405
+ // Read current content to preserve any existing ## Environment items
406
+ // that were already there (not extracted as bloat)
407
+ const currentContent = fs.readFileSync(fullPath, 'utf-8');
408
+ const currentLines = currentContent.split('\n');
409
+ let inEnv = false;
410
+ const existingEnvLines = [];
411
+ for (const line of currentLines) {
412
+ if (line.trim() === '## Environment') {
413
+ inEnv = true;
414
+ continue;
415
+ }
416
+ if (line.startsWith('## ') && line.trim() !== '## Environment') {
417
+ inEnv = false;
418
+ }
419
+ if (inEnv && line.trim().startsWith('- ')) {
420
+ existingEnvLines.push(line);
421
+ }
422
+ }
423
+ // If we didn't extract any stay items but there are existing env lines, preserve them
424
+ if (envItems.length === 0 && existingEnvLines.length > 0) {
425
+ const envSection = '\n## Environment\n' + existingEnvLines.join('\n') + '\n';
426
+ if (pointer.includes('## Environment')) {
427
+ pointer = pointer.replace(/## Environment[\s\S]*$/, envSection.trim() + '\n');
428
+ }
429
+ else {
430
+ pointer += envSection;
431
+ }
432
+ }
433
+ fs.writeFileSync(fullPath, pointer);
434
+ }
435
+ // ============================================================================
436
+ // Helpers
437
+ // ============================================================================
438
+ /**
439
+ * Load and merge all .adf modules in aiDir into a single synthetic AdfDocument
440
+ * for dedup checking. This ensures items previously routed to any domain module
441
+ * (backend.adf, security.adf, etc.) are recognized as duplicates on re-injection.
442
+ */
443
+ function loadAllAdfModules(aiDir) {
444
+ if (!fs.existsSync(aiDir))
445
+ return undefined;
446
+ const allSections = [];
447
+ let files;
448
+ try {
449
+ files = fs.readdirSync(aiDir).filter(f => f.endsWith('.adf') && f !== 'manifest.adf');
450
+ }
451
+ catch {
452
+ return undefined;
453
+ }
454
+ for (const file of files) {
455
+ try {
456
+ const doc = (0, adf_1.parseAdf)(fs.readFileSync(path.join(aiDir, file), 'utf-8'));
457
+ allSections.push(...doc.sections);
458
+ }
459
+ catch {
460
+ // skip unparseable modules
461
+ }
462
+ }
463
+ if (allSections.length === 0)
464
+ return undefined;
465
+ return { sections: allSections };
466
+ }
467
+ /**
468
+ * Scan written modules post-apply for sections that exceed the warning threshold.
469
+ */
470
+ function scanModuleWarnings(aiDir, modules) {
471
+ const warnings = [];
472
+ for (const mod of modules) {
473
+ const p = path.join(aiDir, mod);
474
+ if (!fs.existsSync(p))
475
+ continue;
476
+ try {
477
+ const doc = (0, adf_1.parseAdf)(fs.readFileSync(p, 'utf-8'));
478
+ for (const section of doc.sections) {
479
+ if (section.content.type !== 'list')
480
+ continue;
481
+ const count = section.content.items.length;
482
+ if (count >= SECTION_SIZE_WARN_THRESHOLD) {
483
+ warnings.push({ module: mod, section: section.key, itemCount: count });
484
+ }
485
+ }
486
+ }
487
+ catch { /* skip unparseable */ }
488
+ }
489
+ return warnings;
490
+ }
491
+ /**
492
+ * Project module sizes in dry-run mode: current items + incoming items per section.
493
+ */
494
+ function projectModuleWarnings(aiDir, allModuleGroups) {
495
+ const warnings = [];
496
+ for (const [mod, sectionGroups] of Object.entries(allModuleGroups)) {
497
+ const p = path.join(aiDir, mod);
498
+ const currentCounts = {};
499
+ if (fs.existsSync(p)) {
500
+ try {
501
+ const doc = (0, adf_1.parseAdf)(fs.readFileSync(p, 'utf-8'));
502
+ for (const section of doc.sections) {
503
+ if (section.content.type === 'list') {
504
+ currentCounts[section.key] = section.content.items.length;
505
+ }
506
+ }
507
+ }
508
+ catch { /* skip */ }
509
+ }
510
+ for (const [sectionKey, items] of Object.entries(sectionGroups)) {
511
+ const projected = (currentCounts[sectionKey] ?? 0) + items.length;
512
+ if (projected >= SECTION_SIZE_WARN_THRESHOLD) {
513
+ warnings.push({ module: mod, section: sectionKey, itemCount: projected });
514
+ }
515
+ }
516
+ }
517
+ return warnings;
518
+ }
519
+ function loadTriggerMap(aiDir) {
520
+ const manifestPath = path.join(aiDir, 'manifest.adf');
521
+ if (!fs.existsSync(manifestPath))
522
+ return undefined;
523
+ try {
524
+ const manifestDoc = (0, adf_1.parseAdf)(fs.readFileSync(manifestPath, 'utf-8'));
525
+ const manifest = (0, adf_1.parseManifest)(manifestDoc);
526
+ const triggerMap = {};
527
+ for (const mod of manifest.onDemand) {
528
+ if (mod.triggers.length > 0) {
529
+ triggerMap[mod.path] = mod.triggers.map(t => t.toLowerCase());
530
+ }
531
+ }
532
+ return triggerMap;
533
+ }
534
+ catch {
535
+ return undefined;
536
+ }
537
+ }
538
+ // ============================================================================
539
+ // Output
540
+ // ============================================================================
541
+ function printTextResult(result) {
542
+ const tidied = result.files.filter(f => f.status === 'tidied');
543
+ const clean = result.files.filter(f => f.status === 'clean');
544
+ if (tidied.length === 0) {
545
+ console.log(' All vendor files are clean.');
546
+ return;
547
+ }
548
+ const label = result.dryRun ? 'Would tidy' : 'Tidied';
549
+ console.log(` ${label} ${tidied.length} vendor file(s):`);
550
+ for (const f of tidied) {
551
+ const routes = Object.entries(f.routing)
552
+ .map(([mod, count]) => `${mod} (${count})`)
553
+ .join(', ');
554
+ console.log(` ${f.file}: ${f.itemsExtracted} items \u2192 ${routes}`);
555
+ }
556
+ if (clean.length > 0) {
557
+ console.log(` ${clean.length} file(s) already clean.`);
558
+ }
559
+ // Verbose: per-item routing rationale
560
+ if (result.itemRoutes && result.itemRoutes.length > 0) {
561
+ console.log('');
562
+ console.log(' Routing trace:');
563
+ for (const r of result.itemRoutes) {
564
+ const preview = r.item.length > 60 ? r.item.slice(0, 57) + '...' : r.item;
565
+ const via = r.phraseOverride
566
+ ? `phrase override (${r.phraseOverride})`
567
+ : `scores: ${Object.entries(r.candidateScores).map(([m, s]) => `${m}=${s}`).join(', ')}`;
568
+ console.log(` "${preview}"`);
569
+ console.log(` → ${r.targetModule} / ${r.targetSection} [${via}]`);
570
+ }
571
+ }
572
+ if (result.moduleWarnings.length > 0) {
573
+ console.log('');
574
+ console.log(' ⚠ Module size warnings:');
575
+ for (const w of result.moduleWarnings) {
576
+ console.log(` ${w.module} > ${w.section}: ${w.itemCount} items — consider running: charter adf prune`);
577
+ }
578
+ }
579
+ if (result.dryRun) {
580
+ console.log('');
581
+ console.log(' Run without --dry-run to apply.');
582
+ }
583
+ }
584
+ //# sourceMappingURL=adf-tidy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adf-tidy.js","sourceRoot":"","sources":["../../src/commands/adf-tidy.ts"],"names":[],"mappings":"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"}
@@ -5,17 +5,27 @@
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\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";
8
+ export declare const CORE_SCAFFOLD = "ADF: 0.1\n\n\uD83D\uDCCB CONTEXT:\n - Project context (run 'charter adf populate' to auto-fill from codebase)\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 const FRONTEND_SCAFFOLD = "ADF: 0.1\n\uD83D\uDCCB CONTEXT:\n - Frontend module scaffold\n - Add framework-specific constraints and operational rules\n";
11
11
  export declare const BACKEND_SCAFFOLD = "ADF: 0.1\n\uD83D\uDCCB CONTEXT:\n - Backend module scaffold\n - Add service/API/database constraints and operational rules\n";
12
12
  export declare const DECISIONS_SCAFFOLD = "ADF: 0.1\n\uD83D\uDCCB CONTEXT:\n - Decisions module scaffold\n - Record architectural decision rationale and outcomes\n";
13
13
  export declare const PLANNING_SCAFFOLD = "ADF: 0.1\n\uD83D\uDCCB CONTEXT:\n - Planning module scaffold\n - Track project phases, milestones, and sequencing\n";
14
- export declare const MANIFEST_DOCS_SCAFFOLD = "ADF: 0.1\n\uD83C\uDFAF ROLE: Documentation workspace context router\n\n\uD83D\uDCE6 DEFAULT_LOAD:\n - core.adf\n - state.adf\n\n\uD83D\uDCC2 ON_DEMAND:\n - decisions.adf (Triggers on: ADR, decision, rationale)\n - planning.adf (Triggers on: plan, milestone, phase, roadmap)\n\n\uD83D\uDCD0 RULES:\n - Prefer smallest relevant module set.\n - Never assume unseen modules were loaded.\n";
14
+ export declare const CONTENT_SCAFFOLD = "ADF: 0.1\n\uD83D\uDCCB CONTEXT:\n - Content module scaffold\n - Add Markdown/MDX authoring conventions, frontmatter schema, and doc linting rules\n\n\u26A0\uFE0F CONSTRAINTS [load-bearing]:\n - All pages must include required frontmatter fields (title, description)\n - Use MDX for pages that require interactive components\n\n\uD83D\uDCCB ADVISORY:\n - Prefer flat URL structures; avoid deep nesting beyond 3 levels\n - Include alt text on all images\n";
15
+ export declare const MANIFEST_FRONTEND_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\n\uD83D\uDCD0 RULES:\n - Prefer smallest relevant module set.\n - Never assume unseen modules were loaded.\n";
16
+ export declare const MANIFEST_BACKEND_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 - 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";
17
+ export declare const MANIFEST_DOCS_SCAFFOLD = "ADF: 0.1\n\uD83C\uDFAF ROLE: Documentation workspace context router\n\n\uD83D\uDCE6 DEFAULT_LOAD:\n - core.adf\n - state.adf\n\n\uD83D\uDCC2 ON_DEMAND:\n - content.adf (Triggers on: Markdown, MDX, frontmatter, content, Astro, navigation, docs, authoring)\n - decisions.adf (Triggers on: ADR, decision, rationale, architecture)\n - planning.adf (Triggers on: plan, milestone, phase, roadmap)\n\n\uD83D\uDCD0 RULES:\n - Prefer smallest relevant module set.\n - Never assume unseen modules were loaded.\n";
18
+ /** Return the correct manifest scaffold for a given preset. */
19
+ export declare function manifestForPreset(preset?: string): string;
15
20
  export declare function adfCommand(options: CLIOptions, args: string[]): Promise<number>;
16
21
  /** Strings that identify an agent config file as a thin pointer to .ai/. */
17
22
  export declare const POINTER_MARKERS: string[];
18
- 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";
19
- 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";
20
- 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";
23
+ export declare const MODULE_INDEX_START = "<!-- charter:module-index:start -->";
24
+ export declare const MODULE_INDEX_END = "<!-- charter:module-index:end -->";
25
+ export declare const POINTER_CLAUDE_MD = "# CLAUDE.md\n\n> **DO NOT add rules, constraints, or context to this file.**\n> This file is auto-managed by Charter. All project rules live in `.ai/`.\n> New rules should be added to the appropriate `.ai/*.adf` module.\n> See `.ai/manifest.adf` for the module routing manifest.\n\n## Environment\n<!-- Add runtime/OS/shell-specific notes here (not stack rules) -->\n";
26
+ export declare const POINTER_CLAUDE_MD_HYBRID = "# CLAUDE.md\n\n> **DO NOT add rules, constraints, or context to this file.**\n> This file is auto-managed by Charter. All project rules live in `.ai/`.\n> New rules should be added to the appropriate `.ai/*.adf` module.\n> See `.ai/manifest.adf` for the module routing manifest.\n\n## Module Index\n<!-- charter:module-index:start -->\n<!-- charter:module-index:end -->\n\n## Environment\n<!-- Add runtime/OS/shell-specific notes here (not stack rules) -->\n";
27
+ export declare const POINTER_CURSORRULES = "DO NOT modify this file. All project rules are managed in .ai/ by Charter.\nSee .ai/manifest.adf for the module routing manifest.\n";
28
+ export declare const POINTER_AGENTS_MD = "# agents.md\n\n> **DO NOT add instructions to this file.**\n> All agent instructions are managed in `.ai/` by Charter.\n> See `.ai/manifest.adf` for the module routing manifest.\n";
29
+ export declare const POINTER_GEMINI_MD = "# GEMINI.md\n\n> **DO NOT add rules or context to this file.**\n> All project rules are managed in `.ai/` by Charter.\n> See `.ai/manifest.adf` for the module routing manifest.\n";
30
+ export declare const POINTER_COPILOT_MD = "DO NOT modify this file. All project rules are managed in .ai/ by Charter.\nSee .ai/manifest.adf for the module routing manifest.\n";
21
31
  //# sourceMappingURL=adf.d.ts.map