@stackbilt/cli 0.5.0 → 0.7.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/dist/__tests__/integration/evidence-contracts.test.d.ts +9 -0
- package/dist/__tests__/integration/evidence-contracts.test.d.ts.map +1 -0
- package/dist/__tests__/integration/evidence-contracts.test.js +203 -0
- package/dist/__tests__/integration/evidence-contracts.test.js.map +1 -0
- package/dist/__tests__/integration/precommit-hook.test.d.ts +12 -0
- package/dist/__tests__/integration/precommit-hook.test.d.ts.map +1 -0
- package/dist/__tests__/integration/precommit-hook.test.js +270 -0
- package/dist/__tests__/integration/precommit-hook.test.js.map +1 -0
- package/dist/__tests__/integration/sync-bundle.test.d.ts +10 -0
- package/dist/__tests__/integration/sync-bundle.test.d.ts.map +1 -0
- package/dist/__tests__/integration/sync-bundle.test.js +241 -0
- package/dist/__tests__/integration/sync-bundle.test.js.map +1 -0
- package/dist/__tests__/integration/vendor-bloat.test.d.ts +12 -0
- package/dist/__tests__/integration/vendor-bloat.test.d.ts.map +1 -0
- package/dist/__tests__/integration/vendor-bloat.test.js +300 -0
- package/dist/__tests__/integration/vendor-bloat.test.js.map +1 -0
- package/dist/commands/adf-evidence.d.ts.map +1 -1
- package/dist/commands/adf-evidence.js +35 -66
- package/dist/commands/adf-evidence.js.map +1 -1
- package/dist/commands/adf-migrate.d.ts +17 -0
- package/dist/commands/adf-migrate.d.ts.map +1 -1
- package/dist/commands/adf-migrate.js +24 -2
- package/dist/commands/adf-migrate.js.map +1 -1
- package/dist/commands/adf-tidy.d.ts +10 -0
- package/dist/commands/adf-tidy.d.ts.map +1 -0
- package/dist/commands/adf-tidy.js +547 -0
- package/dist/commands/adf-tidy.js.map +1 -0
- package/dist/commands/adf.d.ts +9 -3
- package/dist/commands/adf.d.ts.map +1 -1
- package/dist/commands/adf.js +87 -23
- package/dist/commands/adf.js.map +1 -1
- package/dist/commands/bootstrap.d.ts.map +1 -1
- package/dist/commands/bootstrap.js +137 -25
- package/dist/commands/bootstrap.js.map +1 -1
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +98 -1
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/hook.d.ts.map +1 -1
- package/dist/commands/hook.js +38 -4
- package/dist/commands/hook.js.map +1 -1
- package/dist/commands/init.d.ts +1 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +27 -1
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/serve.d.ts +14 -0
- package/dist/commands/serve.d.ts.map +1 -0
- package/dist/commands/serve.js +253 -0
- package/dist/commands/serve.js.map +1 -0
- package/dist/commands/setup.d.ts.map +1 -1
- package/dist/commands/setup.js +69 -2
- package/dist/commands/setup.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -1
- package/package.json +9 -8
|
@@ -0,0 +1,547 @@
|
|
|
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 sourceFile = (0, flags_1.getFlag)(args, '--source');
|
|
83
|
+
const aiDir = (0, flags_1.getFlag)(args, '--ai-dir') || '.ai';
|
|
84
|
+
// Determine which files to scan
|
|
85
|
+
const targets = sourceFile
|
|
86
|
+
? [sourceFile]
|
|
87
|
+
: VENDOR_FILES.filter(f => fs.existsSync(path.resolve(f)));
|
|
88
|
+
if (targets.length === 0) {
|
|
89
|
+
if (options.format === 'json') {
|
|
90
|
+
console.log(JSON.stringify({ dryRun, files: [], totalExtracted: 0, modulesModified: [], moduleWarnings: [] }, null, 2));
|
|
91
|
+
}
|
|
92
|
+
else {
|
|
93
|
+
console.log(' No vendor config files found.');
|
|
94
|
+
}
|
|
95
|
+
return index_1.EXIT_CODE.SUCCESS;
|
|
96
|
+
}
|
|
97
|
+
// Load trigger map from manifest
|
|
98
|
+
const triggerMap = loadTriggerMap(aiDir);
|
|
99
|
+
const fileResults = [];
|
|
100
|
+
const allModuleGroups = {};
|
|
101
|
+
for (const file of targets) {
|
|
102
|
+
const result = analyzeVendorFile(file, aiDir, triggerMap);
|
|
103
|
+
if (!result) {
|
|
104
|
+
fileResults.push({ file, status: 'not-found', itemsExtracted: 0, routing: {} });
|
|
105
|
+
continue;
|
|
106
|
+
}
|
|
107
|
+
if (result.migrateItems.length === 0) {
|
|
108
|
+
fileResults.push({ file, status: 'clean', itemsExtracted: 0, routing: {} });
|
|
109
|
+
continue;
|
|
110
|
+
}
|
|
111
|
+
// Group items by module
|
|
112
|
+
const moduleGroups = groupByModule(result.migrateItems);
|
|
113
|
+
const routing = {};
|
|
114
|
+
for (const [mod, sections] of Object.entries(moduleGroups)) {
|
|
115
|
+
const count = Object.values(sections).reduce((sum, items) => sum + items.length, 0);
|
|
116
|
+
routing[mod] = count;
|
|
117
|
+
// Accumulate for batch write
|
|
118
|
+
if (!allModuleGroups[mod])
|
|
119
|
+
allModuleGroups[mod] = {};
|
|
120
|
+
for (const [sec, items] of Object.entries(sections)) {
|
|
121
|
+
if (!allModuleGroups[mod][sec])
|
|
122
|
+
allModuleGroups[mod][sec] = [];
|
|
123
|
+
allModuleGroups[mod][sec].push(...items);
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
fileResults.push({
|
|
127
|
+
file,
|
|
128
|
+
status: 'tidied',
|
|
129
|
+
itemsExtracted: result.migrateItems.length,
|
|
130
|
+
routing,
|
|
131
|
+
});
|
|
132
|
+
// Restore thin pointer (if not dry-run)
|
|
133
|
+
if (!dryRun) {
|
|
134
|
+
restorePointer(file, result.stayItems);
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
// Apply accumulated changes to ADF modules (if not dry-run)
|
|
138
|
+
if (!dryRun) {
|
|
139
|
+
for (const [module, sectionGroups] of Object.entries(allModuleGroups)) {
|
|
140
|
+
const modulePath = path.join(aiDir, module);
|
|
141
|
+
applyMigrationToModule(modulePath, sectionGroups);
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
const totalExtracted = fileResults.reduce((sum, f) => sum + f.itemsExtracted, 0);
|
|
145
|
+
const modulesModified = Object.keys(allModuleGroups);
|
|
146
|
+
// Check module health — warn when sections grow past the threshold.
|
|
147
|
+
// In dry-run mode project counts (current + incoming); otherwise read written files.
|
|
148
|
+
const moduleWarnings = dryRun
|
|
149
|
+
? projectModuleWarnings(aiDir, allModuleGroups)
|
|
150
|
+
: scanModuleWarnings(aiDir, modulesModified);
|
|
151
|
+
const result = { dryRun, files: fileResults, totalExtracted, modulesModified, moduleWarnings };
|
|
152
|
+
// Output
|
|
153
|
+
if (options.format === 'json') {
|
|
154
|
+
console.log(JSON.stringify(result, null, 2));
|
|
155
|
+
}
|
|
156
|
+
else {
|
|
157
|
+
printTextResult(result);
|
|
158
|
+
}
|
|
159
|
+
// Exit codes: in --ci mode, exit 1 if bloat was found (for pre-commit gating)
|
|
160
|
+
if (ciMode && totalExtracted > 0 && dryRun) {
|
|
161
|
+
return index_1.EXIT_CODE.POLICY_VIOLATION;
|
|
162
|
+
}
|
|
163
|
+
return index_1.EXIT_CODE.SUCCESS;
|
|
164
|
+
}
|
|
165
|
+
function analyzeVendorFile(filePath, aiDir, triggerMap) {
|
|
166
|
+
const fullPath = path.resolve(filePath);
|
|
167
|
+
if (!fs.existsSync(fullPath))
|
|
168
|
+
return null;
|
|
169
|
+
const content = fs.readFileSync(fullPath, 'utf-8');
|
|
170
|
+
// If it's not a thin pointer at all, skip — use `adf migrate` instead
|
|
171
|
+
if (!adf_2.POINTER_MARKERS.some(marker => content.includes(marker))) {
|
|
172
|
+
return null;
|
|
173
|
+
}
|
|
174
|
+
// Extract content beyond the thin pointer
|
|
175
|
+
const beyondPointer = extractBeyondPointer(content, filePath);
|
|
176
|
+
if (!beyondPointer.trim()) {
|
|
177
|
+
return { migrateItems: [], stayItems: [] };
|
|
178
|
+
}
|
|
179
|
+
// Parse and classify the extracted content
|
|
180
|
+
const sections = (0, adf_1.parseMarkdownSections)(beyondPointer);
|
|
181
|
+
// Load ALL existing ADF modules for dedup (not just core.adf — items may have
|
|
182
|
+
// been routed to any domain module in a previous session).
|
|
183
|
+
const existingAdf = loadAllAdfModules(aiDir);
|
|
184
|
+
const plan = (0, adf_1.buildMigrationPlan)(sections, existingAdf, triggerMap);
|
|
185
|
+
return {
|
|
186
|
+
migrateItems: plan.migrateItems,
|
|
187
|
+
stayItems: plan.stayItems,
|
|
188
|
+
};
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* Extract content that was added beyond the thin pointer.
|
|
192
|
+
*
|
|
193
|
+
* Strategy: scan for H2 sections that aren't ## Environment — those are bloat.
|
|
194
|
+
* Any content before the first H2 that isn't part of the pointer is also bloat.
|
|
195
|
+
* The ## Environment section and its items are legitimate retained content.
|
|
196
|
+
*/
|
|
197
|
+
function extractBeyondPointer(content, fileName) {
|
|
198
|
+
const baseName = path.basename(fileName);
|
|
199
|
+
const template = getPointerTemplates()[baseName];
|
|
200
|
+
if (!template)
|
|
201
|
+
return '';
|
|
202
|
+
const lines = content.split('\n');
|
|
203
|
+
const bloatLines = [];
|
|
204
|
+
let inEnvironmentSection = false;
|
|
205
|
+
let inPointerHeader = true; // Start true — skip the pointer preamble
|
|
206
|
+
for (const line of lines) {
|
|
207
|
+
const trimmed = line.trim();
|
|
208
|
+
// Detect pointer header lines — skip them
|
|
209
|
+
if (inPointerHeader) {
|
|
210
|
+
if (trimmed === '' ||
|
|
211
|
+
trimmed.startsWith('#') && !trimmed.startsWith('## ') ||
|
|
212
|
+
trimmed.startsWith('>') ||
|
|
213
|
+
trimmed.startsWith('<!--') ||
|
|
214
|
+
adf_2.POINTER_MARKERS.some(m => trimmed.includes(m)) ||
|
|
215
|
+
trimmed.includes('.ai/manifest.adf') ||
|
|
216
|
+
trimmed.includes('auto-managed by Charter') ||
|
|
217
|
+
trimmed.includes('module routing manifest') ||
|
|
218
|
+
trimmed.includes('See `.ai/') ||
|
|
219
|
+
trimmed.startsWith('See .ai/')) {
|
|
220
|
+
continue;
|
|
221
|
+
}
|
|
222
|
+
// Once we hit a non-pointer line, we're past the header
|
|
223
|
+
if (trimmed.startsWith('## ')) {
|
|
224
|
+
inPointerHeader = false;
|
|
225
|
+
// Fall through to section detection below
|
|
226
|
+
}
|
|
227
|
+
else {
|
|
228
|
+
inPointerHeader = false;
|
|
229
|
+
// Non-header, non-section content — treat as bloat
|
|
230
|
+
bloatLines.push(line);
|
|
231
|
+
continue;
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
// Section detection
|
|
235
|
+
if (trimmed.startsWith('## ')) {
|
|
236
|
+
if (trimmed === '## Environment') {
|
|
237
|
+
inEnvironmentSection = true;
|
|
238
|
+
continue;
|
|
239
|
+
}
|
|
240
|
+
else {
|
|
241
|
+
inEnvironmentSection = false;
|
|
242
|
+
// Non-Environment H2 section = bloat
|
|
243
|
+
bloatLines.push(line);
|
|
244
|
+
continue;
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
if (inEnvironmentSection) {
|
|
248
|
+
// Environment items are retained — not bloat
|
|
249
|
+
continue;
|
|
250
|
+
}
|
|
251
|
+
// Everything else after the pointer that's not in ## Environment = bloat
|
|
252
|
+
bloatLines.push(line);
|
|
253
|
+
}
|
|
254
|
+
return bloatLines.join('\n');
|
|
255
|
+
}
|
|
256
|
+
// ============================================================================
|
|
257
|
+
// Module Mutation (reused from adf-migrate pattern)
|
|
258
|
+
// ============================================================================
|
|
259
|
+
function groupByModule(items) {
|
|
260
|
+
const result = {};
|
|
261
|
+
for (const item of items) {
|
|
262
|
+
const mod = item.classification.targetModule;
|
|
263
|
+
const sec = item.classification.targetSection;
|
|
264
|
+
if (!result[mod])
|
|
265
|
+
result[mod] = {};
|
|
266
|
+
if (!result[mod][sec])
|
|
267
|
+
result[mod][sec] = [];
|
|
268
|
+
result[mod][sec].push(item);
|
|
269
|
+
}
|
|
270
|
+
return result;
|
|
271
|
+
}
|
|
272
|
+
function applyMigrationToModule(modulePath, sectionGroups) {
|
|
273
|
+
let doc;
|
|
274
|
+
if (fs.existsSync(modulePath)) {
|
|
275
|
+
doc = (0, adf_1.parseAdf)(fs.readFileSync(modulePath, 'utf-8'));
|
|
276
|
+
}
|
|
277
|
+
else {
|
|
278
|
+
doc = { version: '0.1', sections: [] };
|
|
279
|
+
}
|
|
280
|
+
const ops = [];
|
|
281
|
+
for (const [sectionKey, items] of Object.entries(sectionGroups)) {
|
|
282
|
+
const existingSection = doc.sections.find(s => s.key === sectionKey);
|
|
283
|
+
const weight = items.some(i => i.classification.weight === 'load-bearing')
|
|
284
|
+
? 'load-bearing'
|
|
285
|
+
: 'advisory';
|
|
286
|
+
if (!existingSection) {
|
|
287
|
+
const listItems = items.map(i => formatItemForAdf(i));
|
|
288
|
+
ops.push({
|
|
289
|
+
op: 'ADD_SECTION',
|
|
290
|
+
key: sectionKey,
|
|
291
|
+
content: { type: 'list', items: listItems },
|
|
292
|
+
weight,
|
|
293
|
+
});
|
|
294
|
+
}
|
|
295
|
+
else if (existingSection.content.type === 'text') {
|
|
296
|
+
const existingText = existingSection.content.value.trim();
|
|
297
|
+
const newItems = items.map(i => formatItemForAdf(i));
|
|
298
|
+
ops.push({
|
|
299
|
+
op: 'REPLACE_SECTION',
|
|
300
|
+
key: sectionKey,
|
|
301
|
+
content: { type: 'list', items: existingText ? [existingText, ...newItems] : newItems },
|
|
302
|
+
});
|
|
303
|
+
}
|
|
304
|
+
else {
|
|
305
|
+
for (const item of items) {
|
|
306
|
+
const formatted = formatItemForAdf(item);
|
|
307
|
+
// Dedup against existing content
|
|
308
|
+
if (existingSection.content.type === 'list') {
|
|
309
|
+
const isDup = existingSection.content.items.some(existing => (0, adf_1.isDuplicateItem)(existing, formatted));
|
|
310
|
+
if (isDup)
|
|
311
|
+
continue;
|
|
312
|
+
}
|
|
313
|
+
ops.push({ op: 'ADD_BULLET', section: sectionKey, value: formatted });
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
if (ops.length > 0) {
|
|
318
|
+
doc = (0, adf_1.applyPatches)(doc, ops);
|
|
319
|
+
}
|
|
320
|
+
// Post-patch weight promotion
|
|
321
|
+
for (const [sectionKey, items] of Object.entries(sectionGroups)) {
|
|
322
|
+
if (items.some(i => i.classification.weight === 'load-bearing')) {
|
|
323
|
+
const section = doc.sections.find(s => s.key === sectionKey);
|
|
324
|
+
if (section && section.weight !== 'load-bearing') {
|
|
325
|
+
section.weight = 'load-bearing';
|
|
326
|
+
}
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
fs.writeFileSync(modulePath, (0, adf_1.formatAdf)(doc));
|
|
330
|
+
}
|
|
331
|
+
function formatItemForAdf(item) {
|
|
332
|
+
const el = item.element;
|
|
333
|
+
switch (el.type) {
|
|
334
|
+
case 'rule':
|
|
335
|
+
return el.content;
|
|
336
|
+
case 'code-block':
|
|
337
|
+
if (el.language === 'bash' || el.language === 'sh') {
|
|
338
|
+
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 ? ' (...)' : ''}`;
|
|
339
|
+
}
|
|
340
|
+
return `[${el.language || 'code'}] ${el.content.split('\n')[0]}`;
|
|
341
|
+
case 'table-row':
|
|
342
|
+
return el.content;
|
|
343
|
+
case 'prose':
|
|
344
|
+
return el.content;
|
|
345
|
+
}
|
|
346
|
+
}
|
|
347
|
+
// ============================================================================
|
|
348
|
+
// Pointer Restoration
|
|
349
|
+
// ============================================================================
|
|
350
|
+
/**
|
|
351
|
+
* Format a STAY item for writing back into the vendor file's ## Environment section.
|
|
352
|
+
* Headings (lines starting with #) are preserved as-is; everything else gets a - prefix.
|
|
353
|
+
*/
|
|
354
|
+
function formatStayItem(content) {
|
|
355
|
+
return content.trimStart().startsWith('#') ? content : `- ${content}`;
|
|
356
|
+
}
|
|
357
|
+
function restorePointer(filePath, stayItems) {
|
|
358
|
+
const fullPath = path.resolve(filePath);
|
|
359
|
+
const baseName = path.basename(filePath);
|
|
360
|
+
let pointer = getPointerTemplates()[baseName];
|
|
361
|
+
if (!pointer) {
|
|
362
|
+
pointer = `# ${baseName}\n\n` +
|
|
363
|
+
'> **DO NOT add rules, constraints, or context to this file.**\n' +
|
|
364
|
+
'> All project rules are managed in `.ai/` by Charter.\n' +
|
|
365
|
+
'> See `.ai/manifest.adf` for the module routing manifest.\n';
|
|
366
|
+
}
|
|
367
|
+
// Re-attach retained environment items
|
|
368
|
+
const envItems = stayItems.filter(i => i.classification.reason.includes('Environment') ||
|
|
369
|
+
i.classification.reason.includes('runtime') ||
|
|
370
|
+
i.classification.reason.includes('STAY'));
|
|
371
|
+
if (envItems.length > 0) {
|
|
372
|
+
const envSection = '\n## Environment\n' +
|
|
373
|
+
envItems.map(i => formatStayItem(i.element.content)).join('\n') + '\n';
|
|
374
|
+
if (pointer.includes('## Environment')) {
|
|
375
|
+
pointer = pointer.replace(/## Environment[\s\S]*$/, envSection.trim() + '\n');
|
|
376
|
+
}
|
|
377
|
+
else {
|
|
378
|
+
pointer += envSection;
|
|
379
|
+
}
|
|
380
|
+
}
|
|
381
|
+
// Read current content to preserve any existing ## Environment items
|
|
382
|
+
// that were already there (not extracted as bloat)
|
|
383
|
+
const currentContent = fs.readFileSync(fullPath, 'utf-8');
|
|
384
|
+
const currentLines = currentContent.split('\n');
|
|
385
|
+
let inEnv = false;
|
|
386
|
+
const existingEnvLines = [];
|
|
387
|
+
for (const line of currentLines) {
|
|
388
|
+
if (line.trim() === '## Environment') {
|
|
389
|
+
inEnv = true;
|
|
390
|
+
continue;
|
|
391
|
+
}
|
|
392
|
+
if (line.startsWith('## ') && line.trim() !== '## Environment') {
|
|
393
|
+
inEnv = false;
|
|
394
|
+
}
|
|
395
|
+
if (inEnv && line.trim().startsWith('- ')) {
|
|
396
|
+
existingEnvLines.push(line);
|
|
397
|
+
}
|
|
398
|
+
}
|
|
399
|
+
// If we didn't extract any stay items but there are existing env lines, preserve them
|
|
400
|
+
if (envItems.length === 0 && existingEnvLines.length > 0) {
|
|
401
|
+
const envSection = '\n## Environment\n' + existingEnvLines.join('\n') + '\n';
|
|
402
|
+
if (pointer.includes('## Environment')) {
|
|
403
|
+
pointer = pointer.replace(/## Environment[\s\S]*$/, envSection.trim() + '\n');
|
|
404
|
+
}
|
|
405
|
+
else {
|
|
406
|
+
pointer += envSection;
|
|
407
|
+
}
|
|
408
|
+
}
|
|
409
|
+
fs.writeFileSync(fullPath, pointer);
|
|
410
|
+
}
|
|
411
|
+
// ============================================================================
|
|
412
|
+
// Helpers
|
|
413
|
+
// ============================================================================
|
|
414
|
+
/**
|
|
415
|
+
* Load and merge all .adf modules in aiDir into a single synthetic AdfDocument
|
|
416
|
+
* for dedup checking. This ensures items previously routed to any domain module
|
|
417
|
+
* (backend.adf, security.adf, etc.) are recognized as duplicates on re-injection.
|
|
418
|
+
*/
|
|
419
|
+
function loadAllAdfModules(aiDir) {
|
|
420
|
+
if (!fs.existsSync(aiDir))
|
|
421
|
+
return undefined;
|
|
422
|
+
const allSections = [];
|
|
423
|
+
let files;
|
|
424
|
+
try {
|
|
425
|
+
files = fs.readdirSync(aiDir).filter(f => f.endsWith('.adf') && f !== 'manifest.adf');
|
|
426
|
+
}
|
|
427
|
+
catch {
|
|
428
|
+
return undefined;
|
|
429
|
+
}
|
|
430
|
+
for (const file of files) {
|
|
431
|
+
try {
|
|
432
|
+
const doc = (0, adf_1.parseAdf)(fs.readFileSync(path.join(aiDir, file), 'utf-8'));
|
|
433
|
+
allSections.push(...doc.sections);
|
|
434
|
+
}
|
|
435
|
+
catch {
|
|
436
|
+
// skip unparseable modules
|
|
437
|
+
}
|
|
438
|
+
}
|
|
439
|
+
if (allSections.length === 0)
|
|
440
|
+
return undefined;
|
|
441
|
+
return { sections: allSections };
|
|
442
|
+
}
|
|
443
|
+
/**
|
|
444
|
+
* Scan written modules post-apply for sections that exceed the warning threshold.
|
|
445
|
+
*/
|
|
446
|
+
function scanModuleWarnings(aiDir, modules) {
|
|
447
|
+
const warnings = [];
|
|
448
|
+
for (const mod of modules) {
|
|
449
|
+
const p = path.join(aiDir, mod);
|
|
450
|
+
if (!fs.existsSync(p))
|
|
451
|
+
continue;
|
|
452
|
+
try {
|
|
453
|
+
const doc = (0, adf_1.parseAdf)(fs.readFileSync(p, 'utf-8'));
|
|
454
|
+
for (const section of doc.sections) {
|
|
455
|
+
if (section.content.type !== 'list')
|
|
456
|
+
continue;
|
|
457
|
+
const count = section.content.items.length;
|
|
458
|
+
if (count >= SECTION_SIZE_WARN_THRESHOLD) {
|
|
459
|
+
warnings.push({ module: mod, section: section.key, itemCount: count });
|
|
460
|
+
}
|
|
461
|
+
}
|
|
462
|
+
}
|
|
463
|
+
catch { /* skip unparseable */ }
|
|
464
|
+
}
|
|
465
|
+
return warnings;
|
|
466
|
+
}
|
|
467
|
+
/**
|
|
468
|
+
* Project module sizes in dry-run mode: current items + incoming items per section.
|
|
469
|
+
*/
|
|
470
|
+
function projectModuleWarnings(aiDir, allModuleGroups) {
|
|
471
|
+
const warnings = [];
|
|
472
|
+
for (const [mod, sectionGroups] of Object.entries(allModuleGroups)) {
|
|
473
|
+
const p = path.join(aiDir, mod);
|
|
474
|
+
const currentCounts = {};
|
|
475
|
+
if (fs.existsSync(p)) {
|
|
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
|
+
currentCounts[section.key] = section.content.items.length;
|
|
481
|
+
}
|
|
482
|
+
}
|
|
483
|
+
}
|
|
484
|
+
catch { /* skip */ }
|
|
485
|
+
}
|
|
486
|
+
for (const [sectionKey, items] of Object.entries(sectionGroups)) {
|
|
487
|
+
const projected = (currentCounts[sectionKey] ?? 0) + items.length;
|
|
488
|
+
if (projected >= SECTION_SIZE_WARN_THRESHOLD) {
|
|
489
|
+
warnings.push({ module: mod, section: sectionKey, itemCount: projected });
|
|
490
|
+
}
|
|
491
|
+
}
|
|
492
|
+
}
|
|
493
|
+
return warnings;
|
|
494
|
+
}
|
|
495
|
+
function loadTriggerMap(aiDir) {
|
|
496
|
+
const manifestPath = path.join(aiDir, 'manifest.adf');
|
|
497
|
+
if (!fs.existsSync(manifestPath))
|
|
498
|
+
return undefined;
|
|
499
|
+
try {
|
|
500
|
+
const manifestDoc = (0, adf_1.parseAdf)(fs.readFileSync(manifestPath, 'utf-8'));
|
|
501
|
+
const manifest = (0, adf_1.parseManifest)(manifestDoc);
|
|
502
|
+
const triggerMap = {};
|
|
503
|
+
for (const mod of manifest.onDemand) {
|
|
504
|
+
if (mod.triggers.length > 0) {
|
|
505
|
+
triggerMap[mod.path] = mod.triggers.map(t => t.toLowerCase());
|
|
506
|
+
}
|
|
507
|
+
}
|
|
508
|
+
return triggerMap;
|
|
509
|
+
}
|
|
510
|
+
catch {
|
|
511
|
+
return undefined;
|
|
512
|
+
}
|
|
513
|
+
}
|
|
514
|
+
// ============================================================================
|
|
515
|
+
// Output
|
|
516
|
+
// ============================================================================
|
|
517
|
+
function printTextResult(result) {
|
|
518
|
+
const tidied = result.files.filter(f => f.status === 'tidied');
|
|
519
|
+
const clean = result.files.filter(f => f.status === 'clean');
|
|
520
|
+
if (tidied.length === 0) {
|
|
521
|
+
console.log(' All vendor files are clean.');
|
|
522
|
+
return;
|
|
523
|
+
}
|
|
524
|
+
const label = result.dryRun ? 'Would tidy' : 'Tidied';
|
|
525
|
+
console.log(` ${label} ${tidied.length} vendor file(s):`);
|
|
526
|
+
for (const f of tidied) {
|
|
527
|
+
const routes = Object.entries(f.routing)
|
|
528
|
+
.map(([mod, count]) => `${mod} (${count})`)
|
|
529
|
+
.join(', ');
|
|
530
|
+
console.log(` ${f.file}: ${f.itemsExtracted} items \u2192 ${routes}`);
|
|
531
|
+
}
|
|
532
|
+
if (clean.length > 0) {
|
|
533
|
+
console.log(` ${clean.length} file(s) already clean.`);
|
|
534
|
+
}
|
|
535
|
+
if (result.moduleWarnings.length > 0) {
|
|
536
|
+
console.log('');
|
|
537
|
+
console.log(' ⚠ Module size warnings:');
|
|
538
|
+
for (const w of result.moduleWarnings) {
|
|
539
|
+
console.log(` ${w.module} > ${w.section}: ${w.itemCount} items — consider running: charter adf prune`);
|
|
540
|
+
}
|
|
541
|
+
}
|
|
542
|
+
if (result.dryRun) {
|
|
543
|
+
console.log('');
|
|
544
|
+
console.log(' Run without --dry-run to apply.');
|
|
545
|
+
}
|
|
546
|
+
}
|
|
547
|
+
//# sourceMappingURL=adf-tidy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adf-tidy.js","sourceRoot":"","sources":["../../src/commands/adf-tidy.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2EH,wCAkGC;AA3KD,4CAA8B;AAC9B,gDAAkC;AAClC,wCAQwB;AAGxB,oCAAqC;AACrC,oCAAmC;AACnC,+BAA0I;AAE1I,+EAA+E;AAC/E,YAAY;AACZ,+EAA+E;AAE/E,MAAM,YAAY,GAAG;IACnB,WAAW;IACX,cAAc;IACd,WAAW;IACX,WAAW;IACX,WAAW;IACX,yBAAyB;CAC1B,CAAC;AAEF,8EAA8E;AAC9E,SAAS,mBAAmB;IAC1B,OAAO;QACL,WAAW,EAAE,uBAAiB;QAC9B,cAAc,EAAE,yBAAmB;QACnC,WAAW,EAAE,uBAAiB;QAC9B,WAAW,EAAE,uBAAiB;QAC9B,WAAW,EAAE,uBAAiB;QAC9B,yBAAyB,EAAE,wBAAkB;KAC9C,CAAC;AACJ,CAAC;AAED,+EAA+E;AAC/E,QAAQ;AACR,+EAA+E;AAE/E,MAAM,2BAA2B,GAAG,EAAE,CAAC;AAuBvC,+EAA+E;AAC/E,gBAAgB;AAChB,+EAA+E;AAExE,KAAK,UAAU,cAAc,CAAC,OAAmB,EAAE,IAAc;IACtE,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;IAC1C,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IACrC,MAAM,UAAU,GAAG,IAAA,eAAO,EAAC,IAAI,EAAE,UAAU,CAAC,CAAC;IAC7C,MAAM,KAAK,GAAG,IAAA,eAAO,EAAC,IAAI,EAAE,UAAU,CAAC,IAAI,KAAK,CAAC;IAEjD,gCAAgC;IAChC,MAAM,OAAO,GAAG,UAAU;QACxB,CAAC,CAAC,CAAC,UAAU,CAAC;QACd,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAE7D,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,IAAI,OAAO,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;YAC9B,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE,cAAc,EAAE,CAAC,EAAE,eAAe,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAC1H,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC;QACjD,CAAC;QACD,OAAO,iBAAS,CAAC,OAAO,CAAC;IAC3B,CAAC;IAED,iCAAiC;IACjC,MAAM,UAAU,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;IAEzC,MAAM,WAAW,GAAqB,EAAE,CAAC;IACzC,MAAM,eAAe,GAAoD,EAAE,CAAC;IAE5E,KAAK,MAAM,IAAI,IAAI,OAAO,EAAE,CAAC;QAC3B,MAAM,MAAM,GAAG,iBAAiB,CAAC,IAAI,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC;QAE1D,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,WAAW,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,cAAc,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;YAChF,SAAS;QACX,CAAC;QAED,IAAI,MAAM,CAAC,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACrC,WAAW,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;YAC5E,SAAS;QACX,CAAC;QAED,wBAAwB;QACxB,MAAM,YAAY,GAAG,aAAa,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;QACxD,MAAM,OAAO,GAA2B,EAAE,CAAC;QAC3C,KAAK,MAAM,CAAC,GAAG,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC;YAC3D,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,GAAG,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;YACpF,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;YACrB,6BAA6B;YAC7B,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC;gBAAE,eAAe,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;YACrD,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACpD,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC;oBAAE,eAAe,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;gBAC/D,eAAe,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC;YAC3C,CAAC;QACH,CAAC;QAED,WAAW,CAAC,IAAI,CAAC;YACf,IAAI;YACJ,MAAM,EAAE,QAAQ;YAChB,cAAc,EAAE,MAAM,CAAC,YAAY,CAAC,MAAM;YAC1C,OAAO;SACR,CAAC,CAAC;QAEH,wCAAwC;QACxC,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,cAAc,CAAC,IAAI,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;QACzC,CAAC;IACH,CAAC;IAED,4DAA4D;IAC5D,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,KAAK,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,EAAE,CAAC;YACtE,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;YAC5C,sBAAsB,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;QACpD,CAAC;IACH,CAAC;IAED,MAAM,cAAc,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC;IACjF,MAAM,eAAe,GAAG,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IAErD,oEAAoE;IACpE,qFAAqF;IACrF,MAAM,cAAc,GAAwB,MAAM;QAChD,CAAC,CAAC,qBAAqB,CAAC,KAAK,EAAE,eAAe,CAAC;QAC/C,CAAC,CAAC,kBAAkB,CAAC,KAAK,EAAE,eAAe,CAAC,CAAC;IAE/C,MAAM,MAAM,GAAe,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,eAAe,EAAE,cAAc,EAAE,CAAC;IAE3G,SAAS;IACT,IAAI,OAAO,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;QAC9B,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAC/C,CAAC;SAAM,CAAC;QACN,eAAe,CAAC,MAAM,CAAC,CAAC;IAC1B,CAAC;IAED,8EAA8E;IAC9E,IAAI,MAAM,IAAI,cAAc,GAAG,CAAC,IAAI,MAAM,EAAE,CAAC;QAC3C,OAAO,iBAAS,CAAC,gBAAgB,CAAC;IACpC,CAAC;IAED,OAAO,iBAAS,CAAC,OAAO,CAAC;AAC3B,CAAC;AAWD,SAAS,iBAAiB,CACxB,QAAgB,EAChB,KAAa,EACb,UAAkC;IAElC,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACxC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC;QAAE,OAAO,IAAI,CAAC;IAE1C,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAEnD,sEAAsE;IACtE,IAAI,CAAC,qBAAe,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC;QAC9D,OAAO,IAAI,CAAC;IACd,CAAC;IAED,0CAA0C;IAC1C,MAAM,aAAa,GAAG,oBAAoB,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IAC9D,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,EAAE,CAAC;QAC1B,OAAO,EAAE,YAAY,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC;IAC7C,CAAC;IAED,2CAA2C;IAC3C,MAAM,QAAQ,GAAG,IAAA,2BAAqB,EAAC,aAAa,CAAC,CAAC;IAEtD,8EAA8E;IAC9E,2DAA2D;IAC3D,MAAM,WAAW,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC;IAE7C,MAAM,IAAI,GAAG,IAAA,wBAAkB,EAAC,QAAQ,EAAE,WAAW,EAAE,UAAU,CAAC,CAAC;IACnE,OAAO;QACL,YAAY,EAAE,IAAI,CAAC,YAAY;QAC/B,SAAS,EAAE,IAAI,CAAC,SAAS;KAC1B,CAAC;AACJ,CAAC;AAED;;;;;;GAMG;AACH,SAAS,oBAAoB,CAAC,OAAe,EAAE,QAAgB;IAC7D,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACzC,MAAM,QAAQ,GAAG,mBAAmB,EAAE,CAAC,QAAQ,CAAC,CAAC;IAEjD,IAAI,CAAC,QAAQ;QAAE,OAAO,EAAE,CAAC;IAEzB,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAClC,MAAM,UAAU,GAAa,EAAE,CAAC;IAChC,IAAI,oBAAoB,GAAG,KAAK,CAAC;IACjC,IAAI,eAAe,GAAG,IAAI,CAAC,CAAC,yCAAyC;IAErE,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAE5B,0CAA0C;QAC1C,IAAI,eAAe,EAAE,CAAC;YACpB,IACE,OAAO,KAAK,EAAE;gBACd,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC;gBACrD,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC;gBACvB,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC;gBAC1B,qBAAe,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;gBAC9C,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAC;gBACpC,OAAO,CAAC,QAAQ,CAAC,yBAAyB,CAAC;gBAC3C,OAAO,CAAC,QAAQ,CAAC,yBAAyB,CAAC;gBAC3C,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC;gBAC7B,OAAO,CAAC,UAAU,CAAC,UAAU,CAAC,EAC9B,CAAC;gBACD,SAAS;YACX,CAAC;YACD,wDAAwD;YACxD,IAAI,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC9B,eAAe,GAAG,KAAK,CAAC;gBACxB,0CAA0C;YAC5C,CAAC;iBAAM,CAAC;gBACN,eAAe,GAAG,KAAK,CAAC;gBACxB,mDAAmD;gBACnD,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACtB,SAAS;YACX,CAAC;QACH,CAAC;QAED,oBAAoB;QACpB,IAAI,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;YAC9B,IAAI,OAAO,KAAK,gBAAgB,EAAE,CAAC;gBACjC,oBAAoB,GAAG,IAAI,CAAC;gBAC5B,SAAS;YACX,CAAC;iBAAM,CAAC;gBACN,oBAAoB,GAAG,KAAK,CAAC;gBAC7B,qCAAqC;gBACrC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACtB,SAAS;YACX,CAAC;QACH,CAAC;QAED,IAAI,oBAAoB,EAAE,CAAC;YACzB,6CAA6C;YAC7C,SAAS;QACX,CAAC;QAED,yEAAyE;QACzE,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACxB,CAAC;IAED,OAAO,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC/B,CAAC;AAED,+EAA+E;AAC/E,oDAAoD;AACpD,+EAA+E;AAE/E,SAAS,aAAa,CACpB,KAAsB;IAEtB,MAAM,MAAM,GAAoD,EAAE,CAAC;IACnE,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,GAAG,GAAG,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC;QAC7C,MAAM,GAAG,GAAG,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC;QAC9C,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC;YAAE,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;QACnC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC;YAAE,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;QAC7C,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC9B,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,sBAAsB,CAC7B,UAAkB,EAClB,aAA8C;IAE9C,IAAI,GAAgB,CAAC;IACrB,IAAI,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC9B,GAAG,GAAG,IAAA,cAAQ,EAAC,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC;IACvD,CAAC;SAAM,CAAC;QACN,GAAG,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;IACzC,CAAC;IAED,MAAM,GAAG,GAAqB,EAAE,CAAC;IAEjC,KAAK,MAAM,CAAC,UAAU,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,CAAC;QAChE,MAAM,eAAe,GAAG,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,UAAU,CAAC,CAAC;QACrE,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,cAAc,CAAC,MAAM,KAAK,cAAc,CAAC;YACxE,CAAC,CAAC,cAAuB;YACzB,CAAC,CAAC,UAAmB,CAAC;QAExB,IAAI,CAAC,eAAe,EAAE,CAAC;YACrB,MAAM,SAAS,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC;YACtD,GAAG,CAAC,IAAI,CAAC;gBACP,EAAE,EAAE,aAAa;gBACjB,GAAG,EAAE,UAAU;gBACf,OAAO,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE;gBAC3C,MAAM;aACP,CAAC,CAAC;QACL,CAAC;aAAM,IAAI,eAAe,CAAC,OAAO,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YACnD,MAAM,YAAY,GAAG,eAAe,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;YAC1D,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC;YACrD,GAAG,CAAC,IAAI,CAAC;gBACP,EAAE,EAAE,iBAAiB;gBACrB,GAAG,EAAE,UAAU;gBACf,OAAO,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,YAAY,EAAE,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;aACxF,CAAC,CAAC;QACL,CAAC;aAAM,CAAC;YACN,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACzB,MAAM,SAAS,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC;gBACzC,iCAAiC;gBACjC,IAAI,eAAe,CAAC,OAAO,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;oBAC5C,MAAM,KAAK,GAAG,eAAe,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAC1D,IAAA,qBAAe,EAAC,QAAQ,EAAE,SAAS,CAAC,CACrC,CAAC;oBACF,IAAI,KAAK;wBAAE,SAAS;gBACtB,CAAC;gBACD,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,YAAY,EAAE,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;YACxE,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACnB,GAAG,GAAG,IAAA,kBAAY,EAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IAC/B,CAAC;IAED,8BAA8B;IAC9B,KAAK,MAAM,CAAC,UAAU,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,CAAC;QAChE,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,cAAc,CAAC,MAAM,KAAK,cAAc,CAAC,EAAE,CAAC;YAChE,MAAM,OAAO,GAAG,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,UAAU,CAAC,CAAC;YAC7D,IAAI,OAAO,IAAI,OAAO,CAAC,MAAM,KAAK,cAAc,EAAE,CAAC;gBACjD,OAAO,CAAC,MAAM,GAAG,cAAc,CAAC;YAClC,CAAC;QACH,CAAC;IACH,CAAC;IAED,EAAE,CAAC,aAAa,CAAC,UAAU,EAAE,IAAA,eAAS,EAAC,GAAG,CAAC,CAAC,CAAC;AAC/C,CAAC;AAED,SAAS,gBAAgB,CAAC,IAAmB;IAC3C,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC;IACxB,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC;QAChB,KAAK,MAAM;YACT,OAAO,EAAE,CAAC,OAAO,CAAC;QACpB,KAAK,YAAY;YACf,IAAI,EAAE,CAAC,QAAQ,KAAK,MAAM,IAAI,EAAE,CAAC,QAAQ,KAAK,IAAI,EAAE,CAAC;gBACnD,OAAO,oBAAoB,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;YAC7K,CAAC;YACD,OAAO,IAAI,EAAE,CAAC,QAAQ,IAAI,MAAM,KAAK,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACnE,KAAK,WAAW;YACd,OAAO,EAAE,CAAC,OAAO,CAAC;QACpB,KAAK,OAAO;YACV,OAAO,EAAE,CAAC,OAAO,CAAC;IACtB,CAAC;AACH,CAAC;AAED,+EAA+E;AAC/E,sBAAsB;AACtB,+EAA+E;AAE/E;;;GAGG;AACH,SAAS,cAAc,CAAC,OAAe;IACrC,OAAO,OAAO,CAAC,SAAS,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,OAAO,EAAE,CAAC;AACxE,CAAC;AAED,SAAS,cAAc,CAAC,QAAgB,EAAE,SAA0B;IAClE,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACxC,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACzC,IAAI,OAAO,GAAG,mBAAmB,EAAE,CAAC,QAAQ,CAAC,CAAC;IAE9C,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,GAAG,KAAK,QAAQ,MAAM;YAC3B,iEAAiE;YACjE,yDAAyD;YACzD,6DAA6D,CAAC;IAClE,CAAC;IAED,uCAAuC;IACvC,MAAM,QAAQ,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CACpC,CAAC,CAAC,cAAc,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC;QAC/C,CAAC,CAAC,cAAc,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC;QAC3C,CAAC,CAAC,cAAc,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CACzC,CAAC;IAEF,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,MAAM,UAAU,GAAG,oBAAoB;YACrC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;QAEzE,IAAI,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,CAAC;YACvC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,wBAAwB,EAAE,UAAU,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,CAAC;QAChF,CAAC;aAAM,CAAC;YACN,OAAO,IAAI,UAAU,CAAC;QACxB,CAAC;IACH,CAAC;IAED,qEAAqE;IACrE,mDAAmD;IACnD,MAAM,cAAc,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAC1D,MAAM,YAAY,GAAG,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAChD,IAAI,KAAK,GAAG,KAAK,CAAC;IAClB,MAAM,gBAAgB,GAAa,EAAE,CAAC;IACtC,KAAK,MAAM,IAAI,IAAI,YAAY,EAAE,CAAC;QAChC,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,gBAAgB,EAAE,CAAC;YACrC,KAAK,GAAG,IAAI,CAAC;YACb,SAAS;QACX,CAAC;QACD,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,gBAAgB,EAAE,CAAC;YAC/D,KAAK,GAAG,KAAK,CAAC;QAChB,CAAC;QACD,IAAI,KAAK,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YAC1C,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC;IAED,sFAAsF;IACtF,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI,gBAAgB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACzD,MAAM,UAAU,GAAG,oBAAoB,GAAG,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;QAC7E,IAAI,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,CAAC;YACvC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,wBAAwB,EAAE,UAAU,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,CAAC;QAChF,CAAC;aAAM,CAAC;YACN,OAAO,IAAI,UAAU,CAAC;QACxB,CAAC;IACH,CAAC;IAED,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;AACtC,CAAC;AAED,+EAA+E;AAC/E,UAAU;AACV,+EAA+E;AAE/E;;;;GAIG;AACH,SAAS,iBAAiB,CAAC,KAAa;IACtC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IAE5C,MAAM,WAAW,GAA4B,EAAE,CAAC;IAEhD,IAAI,KAAe,CAAC;IACpB,IAAI,CAAC;QACH,KAAK,GAAG,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,cAAc,CAAC,CAAC;IACxF,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,IAAA,cAAQ,EAAC,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;YACvE,WAAW,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,QAAQ,CAAC,CAAC;QACpC,CAAC;QAAC,MAAM,CAAC;YACP,2BAA2B;QAC7B,CAAC;IACH,CAAC;IAED,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IAC/C,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAiB,CAAC;AAClD,CAAC;AAED;;GAEG;AACH,SAAS,kBAAkB,CAAC,KAAa,EAAE,OAAiB;IAC1D,MAAM,QAAQ,GAAwB,EAAE,CAAC;IACzC,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;QAC1B,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QAChC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC;YAAE,SAAS;QAChC,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,IAAA,cAAQ,EAAC,EAAE,CAAC,YAAY,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;YAClD,KAAK,MAAM,OAAO,IAAI,GAAG,CAAC,QAAQ,EAAE,CAAC;gBACnC,IAAI,OAAO,CAAC,OAAO,CAAC,IAAI,KAAK,MAAM;oBAAE,SAAS;gBAC9C,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC;gBAC3C,IAAI,KAAK,IAAI,2BAA2B,EAAE,CAAC;oBACzC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,OAAO,CAAC,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;gBACzE,CAAC;YACH,CAAC;QACH,CAAC;QAAC,MAAM,CAAC,CAAC,sBAAsB,CAAC,CAAC;IACpC,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;GAEG;AACH,SAAS,qBAAqB,CAC5B,KAAa,EACb,eAAgE;IAEhE,MAAM,QAAQ,GAAwB,EAAE,CAAC;IACzC,KAAK,MAAM,CAAC,GAAG,EAAE,aAAa,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,EAAE,CAAC;QACnE,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QAChC,MAAM,aAAa,GAA2B,EAAE,CAAC;QACjD,IAAI,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;YACrB,IAAI,CAAC;gBACH,MAAM,GAAG,GAAG,IAAA,cAAQ,EAAC,EAAE,CAAC,YAAY,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;gBAClD,KAAK,MAAM,OAAO,IAAI,GAAG,CAAC,QAAQ,EAAE,CAAC;oBACnC,IAAI,OAAO,CAAC,OAAO,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;wBACpC,aAAa,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC;oBAC5D,CAAC;gBACH,CAAC;YACH,CAAC;YAAC,MAAM,CAAC,CAAC,UAAU,CAAC,CAAC;QACxB,CAAC;QACD,KAAK,MAAM,CAAC,UAAU,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,CAAC;YAChE,MAAM,SAAS,GAAG,CAAC,aAAa,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC;YAClE,IAAI,SAAS,IAAI,2BAA2B,EAAE,CAAC;gBAC7C,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,CAAC;YAC5E,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,cAAc,CAAC,KAAa;IACnC,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;IACtD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC;QAAE,OAAO,SAAS,CAAC;IAEnD,IAAI,CAAC;QACH,MAAM,WAAW,GAAG,IAAA,cAAQ,EAAC,EAAE,CAAC,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC,CAAC;QACrE,MAAM,QAAQ,GAAG,IAAA,mBAAa,EAAC,WAAW,CAAC,CAAC;QAC5C,MAAM,UAAU,GAAe,EAAE,CAAC;QAClC,KAAK,MAAM,GAAG,IAAI,QAAQ,CAAC,QAAQ,EAAE,CAAC;YACpC,IAAI,GAAG,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC5B,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;YAChE,CAAC;QACH,CAAC;QACD,OAAO,UAAU,CAAC;IACpB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED,+EAA+E;AAC/E,SAAS;AACT,+EAA+E;AAE/E,SAAS,eAAe,CAAC,MAAkB;IACzC,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC;IAC/D,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,OAAO,CAAC,CAAC;IAE7D,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,OAAO,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC;QAC7C,OAAO;IACT,CAAC;IAED,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,QAAQ,CAAC;IACtD,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,IAAI,MAAM,CAAC,MAAM,kBAAkB,CAAC,CAAC;IAE3D,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;QACvB,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC;aACrC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,KAAK,KAAK,GAAG,CAAC;aAC1C,IAAI,CAAC,IAAI,CAAC,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,cAAc,iBAAiB,MAAM,EAAE,CAAC,CAAC;IAC3E,CAAC;IAED,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACrB,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,MAAM,yBAAyB,CAAC,CAAC;IAC1D,CAAC;IAED,IAAI,MAAM,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACrC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC;QACzC,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,cAAc,EAAE,CAAC;YACtC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,MAAM,MAAM,CAAC,CAAC,OAAO,KAAK,CAAC,CAAC,SAAS,8CAA8C,CAAC,CAAC;QAC5G,CAAC;IACH,CAAC;IAED,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;QAClB,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC;IACnD,CAAC;AACH,CAAC"}
|
package/dist/commands/adf.d.ts
CHANGED
|
@@ -9,10 +9,16 @@ export declare const CORE_SCAFFOLD = "ADF: 0.1\n\n\uD83D\uDCD6 GUIDE [advisory]:
|
|
|
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
|
+
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
|
+
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 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_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";
|
|
12
16
|
export declare function adfCommand(options: CLIOptions, args: string[]): Promise<number>;
|
|
13
17
|
/** Strings that identify an agent config file as a thin pointer to .ai/. */
|
|
14
18
|
export declare const POINTER_MARKERS: string[];
|
|
15
|
-
export declare const POINTER_CLAUDE_MD = "#
|
|
16
|
-
export declare const POINTER_CURSORRULES = "
|
|
17
|
-
export declare const POINTER_AGENTS_MD = "#
|
|
19
|
+
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";
|
|
20
|
+
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";
|
|
21
|
+
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";
|
|
22
|
+
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";
|
|
23
|
+
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";
|
|
18
24
|
//# sourceMappingURL=adf.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adf.d.ts","sourceRoot":"","sources":["../../src/commands/adf.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAWH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"adf.d.ts","sourceRoot":"","sources":["../../src/commands/adf.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAWH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAc3C,eAAO,MAAM,iBAAiB,0VAc7B,CAAC;AAEF,eAAO,MAAM,aAAa,k3BAmBzB,CAAC;AAEF,eAAO,MAAM,cAAc,mJAI1B,CAAC;AAEF,eAAO,MAAM,iBAAiB,kIAI7B,CAAC;AAEF,eAAO,MAAM,gBAAgB,mIAI5B,CAAC;AAEF,eAAO,MAAM,kBAAkB,+HAI9B,CAAC;AAEF,eAAO,MAAM,iBAAiB,0HAI7B,CAAC;AAGF,eAAO,MAAM,gBAAgB,gdAY5B,CAAC;AAEF,eAAO,MAAM,sBAAsB,igBAelC,CAAC;AAMF,wBAAsB,UAAU,CAAC,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAiCrF;AAeD,4EAA4E;AAC5E,eAAO,MAAM,eAAe,UAQ3B,CAAC;AAIF,eAAO,MAAM,iBAAiB,oXAS7B,CAAC;AAEF,eAAO,MAAM,mBAAmB,wIAE/B,CAAC;AAEF,eAAO,MAAM,iBAAiB,wLAK7B,CAAC;AAEF,eAAO,MAAM,iBAAiB,uLAK7B,CAAC;AAEF,eAAO,MAAM,kBAAkB,wIAE9B,CAAC"}
|