@stackbilt/cli 0.12.1 → 0.15.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (62) hide show
  1. package/dist/__tests__/adf-init.test.d.ts +2 -0
  2. package/dist/__tests__/adf-init.test.d.ts.map +1 -0
  3. package/dist/__tests__/adf-init.test.js +116 -0
  4. package/dist/__tests__/adf-init.test.js.map +1 -0
  5. package/dist/__tests__/bootstrap.test.js +63 -0
  6. package/dist/__tests__/bootstrap.test.js.map +1 -1
  7. package/dist/__tests__/context.test.d.ts +2 -0
  8. package/dist/__tests__/context.test.d.ts.map +1 -0
  9. package/dist/__tests__/context.test.js +137 -0
  10. package/dist/__tests__/context.test.js.map +1 -0
  11. package/dist/__tests__/deprecated-commands.test.d.ts +2 -0
  12. package/dist/__tests__/deprecated-commands.test.d.ts.map +1 -0
  13. package/dist/__tests__/deprecated-commands.test.js +59 -0
  14. package/dist/__tests__/deprecated-commands.test.js.map +1 -0
  15. package/dist/__tests__/login.test.js +24 -1
  16. package/dist/__tests__/login.test.js.map +1 -1
  17. package/dist/__tests__/stamp-policies.test.d.ts +2 -0
  18. package/dist/__tests__/stamp-policies.test.d.ts.map +1 -0
  19. package/dist/__tests__/stamp-policies.test.js +120 -0
  20. package/dist/__tests__/stamp-policies.test.js.map +1 -0
  21. package/dist/commands/adf.d.ts.map +1 -1
  22. package/dist/commands/adf.js +38 -15
  23. package/dist/commands/adf.js.map +1 -1
  24. package/dist/commands/architect.d.ts.map +1 -1
  25. package/dist/commands/architect.js +2 -0
  26. package/dist/commands/architect.js.map +1 -1
  27. package/dist/commands/bootstrap.d.ts.map +1 -1
  28. package/dist/commands/bootstrap.js +153 -5
  29. package/dist/commands/bootstrap.js.map +1 -1
  30. package/dist/commands/context.d.ts +27 -0
  31. package/dist/commands/context.d.ts.map +1 -0
  32. package/dist/commands/context.js +650 -0
  33. package/dist/commands/context.js.map +1 -0
  34. package/dist/commands/deprecation-warning.d.ts +4 -0
  35. package/dist/commands/deprecation-warning.d.ts.map +1 -0
  36. package/dist/commands/deprecation-warning.js +20 -0
  37. package/dist/commands/deprecation-warning.js.map +1 -0
  38. package/dist/commands/drift.js +2 -4
  39. package/dist/commands/drift.js.map +1 -1
  40. package/dist/commands/init.d.ts.map +1 -1
  41. package/dist/commands/init.js +1 -0
  42. package/dist/commands/init.js.map +1 -1
  43. package/dist/commands/login.d.ts.map +1 -1
  44. package/dist/commands/login.js +2 -7
  45. package/dist/commands/login.js.map +1 -1
  46. package/dist/commands/run.d.ts.map +1 -1
  47. package/dist/commands/run.js +2 -0
  48. package/dist/commands/run.js.map +1 -1
  49. package/dist/commands/scaffold.d.ts.map +1 -1
  50. package/dist/commands/scaffold.js +2 -0
  51. package/dist/commands/scaffold.js.map +1 -1
  52. package/dist/commands/serve.d.ts.map +1 -1
  53. package/dist/commands/serve.js +34 -3
  54. package/dist/commands/serve.js.map +1 -1
  55. package/dist/commands/stamp-policies.d.ts +15 -0
  56. package/dist/commands/stamp-policies.d.ts.map +1 -0
  57. package/dist/commands/stamp-policies.js +127 -0
  58. package/dist/commands/stamp-policies.js.map +1 -0
  59. package/dist/index.d.ts.map +1 -1
  60. package/dist/index.js +18 -0
  61. package/dist/index.js.map +1 -1
  62. package/package.json +11 -10
@@ -0,0 +1,650 @@
1
+ "use strict";
2
+ /**
3
+ * charter context
4
+ *
5
+ * Generates a pre-digested repo brief for AI agents: routes, hotspots,
6
+ * governance, and sensitivity — all within a token budget.
7
+ *
8
+ * Output modes:
9
+ * charter context print to stdout + write .charter/context.md
10
+ * charter context --stdout-only print to stdout only
11
+ * charter context --verbose no token ceiling (for human review)
12
+ * charter context --write write .charter/context.md only, no stdout
13
+ */
14
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
15
+ if (k2 === undefined) k2 = k;
16
+ var desc = Object.getOwnPropertyDescriptor(m, k);
17
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
18
+ desc = { enumerable: true, get: function() { return m[k]; } };
19
+ }
20
+ Object.defineProperty(o, k2, desc);
21
+ }) : (function(o, m, k, k2) {
22
+ if (k2 === undefined) k2 = k;
23
+ o[k2] = m[k];
24
+ }));
25
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
26
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
27
+ }) : function(o, v) {
28
+ o["default"] = v;
29
+ });
30
+ var __importStar = (this && this.__importStar) || (function () {
31
+ var ownKeys = function(o) {
32
+ ownKeys = Object.getOwnPropertyNames || function (o) {
33
+ var ar = [];
34
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
35
+ return ar;
36
+ };
37
+ return ownKeys(o);
38
+ };
39
+ return function (mod) {
40
+ if (mod && mod.__esModule) return mod;
41
+ var result = {};
42
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
43
+ __setModuleDefault(result, mod);
44
+ return result;
45
+ };
46
+ })();
47
+ Object.defineProperty(exports, "__esModule", { value: true });
48
+ exports.generateBrief = generateBrief;
49
+ exports.contextCommand = contextCommand;
50
+ const fs = __importStar(require("node:fs"));
51
+ const path = __importStar(require("node:path"));
52
+ const node_child_process_1 = require("node:child_process");
53
+ const blast_1 = require("@stackbilt/blast");
54
+ const surface_1 = require("@stackbilt/surface");
55
+ const adf_1 = require("@stackbilt/adf");
56
+ const blast_2 = require("./blast");
57
+ const index_1 = require("../index");
58
+ // ============================================================================
59
+ // Constants
60
+ // ============================================================================
61
+ const TOKEN_CEILING = 2000;
62
+ const CHAR_CEILING = TOKEN_CEILING * 4; // 8000 chars
63
+ /** Estimate tokens from a string (ceiling). */
64
+ function estimateTokens(text) {
65
+ return Math.ceil(text.length / 4);
66
+ }
67
+ // ============================================================================
68
+ // Git SHA
69
+ // ============================================================================
70
+ function getGitSha() {
71
+ try {
72
+ return (0, node_child_process_1.execSync)('git rev-parse HEAD', {
73
+ stdio: ['ignore', 'pipe', 'ignore'],
74
+ encoding: 'utf8',
75
+ })
76
+ .trim()
77
+ .slice(0, 8);
78
+ }
79
+ catch {
80
+ return '<no-git>';
81
+ }
82
+ }
83
+ // ============================================================================
84
+ // Seed strategy (keyed by preset)
85
+ // ============================================================================
86
+ function getSeedCandidates(preset, root, pkgBin) {
87
+ const candidates = [];
88
+ const tryExts = (base) => ['.ts', '.tsx', '.js', '.jsx', '.mts', '.mjs'].map((ext) => base + ext);
89
+ const srcIndex = tryExts(path.join(root, 'src', 'index'));
90
+ const srcMain = tryExts(path.join(root, 'src', 'main'));
91
+ const srcApp = tryExts(path.join(root, 'src', 'App'));
92
+ const srcServer = tryExts(path.join(root, 'src', 'server'));
93
+ const srcAppLower = tryExts(path.join(root, 'src', 'app'));
94
+ const wranglerEntry = resolveWranglerEntry(root);
95
+ // Files with "routes" in name
96
+ const routeFiles = findFilesWithNamePattern(root, /routes/i);
97
+ const workerSeeds = [
98
+ ...srcIndex,
99
+ ...routeFiles,
100
+ ...(wranglerEntry ? [wranglerEntry] : []),
101
+ ];
102
+ const frontendSeeds = [...srcApp, ...srcMain, ...srcIndex];
103
+ const backendSeeds = [...srcIndex, ...srcServer, ...srcAppLower];
104
+ const cliSeeds = [
105
+ ...Object.values(pkgBin).map((b) => path.resolve(root, b)),
106
+ ...findCommandFiles(root),
107
+ ];
108
+ switch (preset) {
109
+ case 'worker':
110
+ candidates.push(...workerSeeds);
111
+ break;
112
+ case 'frontend':
113
+ candidates.push(...frontendSeeds);
114
+ break;
115
+ case 'backend':
116
+ candidates.push(...backendSeeds);
117
+ break;
118
+ case 'fullstack':
119
+ candidates.push(...workerSeeds, ...frontendSeeds);
120
+ break;
121
+ case 'cli':
122
+ candidates.push(...cliSeeds);
123
+ break;
124
+ case 'docs': {
125
+ const readme = path.join(root, 'README.md');
126
+ if (fs.existsSync(readme))
127
+ candidates.push(readme);
128
+ const docsMds = findMarkdownFiles(root);
129
+ candidates.push(...docsMds);
130
+ break;
131
+ }
132
+ default:
133
+ candidates.push(...srcIndex, ...srcMain);
134
+ break;
135
+ }
136
+ // Filter to existing files, deduplicate, cap at 10
137
+ const seen = new Set();
138
+ const result = [];
139
+ for (const c of candidates) {
140
+ if (!seen.has(c) && fs.existsSync(c)) {
141
+ seen.add(c);
142
+ result.push(c);
143
+ if (result.length >= 10)
144
+ break;
145
+ }
146
+ }
147
+ return result;
148
+ }
149
+ function resolveWranglerEntry(root) {
150
+ const wranglerPath = path.join(root, 'wrangler.toml');
151
+ if (!fs.existsSync(wranglerPath))
152
+ return null;
153
+ try {
154
+ const content = fs.readFileSync(wranglerPath, 'utf8');
155
+ const m = content.match(/^main\s*=\s*["']?([^"'\n]+)["']?/m);
156
+ if (m)
157
+ return path.resolve(root, m[1].trim());
158
+ }
159
+ catch {
160
+ // ignore
161
+ }
162
+ return null;
163
+ }
164
+ function findFilesWithNamePattern(root, pattern) {
165
+ const result = [];
166
+ const ignore = new Set(['node_modules', 'dist', 'build', '.git', '.next', 'coverage', '__tests__']);
167
+ function walk(dir) {
168
+ let entries;
169
+ try {
170
+ entries = fs.readdirSync(dir, { withFileTypes: true });
171
+ }
172
+ catch {
173
+ return;
174
+ }
175
+ for (const e of entries) {
176
+ if (ignore.has(e.name))
177
+ continue;
178
+ const full = path.join(dir, e.name);
179
+ if (e.isDirectory())
180
+ walk(full);
181
+ else if (e.isFile() && pattern.test(e.name))
182
+ result.push(full);
183
+ }
184
+ }
185
+ walk(root);
186
+ return result.slice(0, 5);
187
+ }
188
+ function findCommandFiles(root) {
189
+ const cmdsDir = path.join(root, 'src', 'commands');
190
+ if (!fs.existsSync(cmdsDir))
191
+ return [];
192
+ try {
193
+ return fs
194
+ .readdirSync(cmdsDir)
195
+ .filter((f) => /\.[mc]?[tj]sx?$/.test(f))
196
+ .slice(0, 5)
197
+ .map((f) => path.join(cmdsDir, f));
198
+ }
199
+ catch {
200
+ return [];
201
+ }
202
+ }
203
+ function findMarkdownFiles(root) {
204
+ const docsDir = path.join(root, 'docs');
205
+ if (!fs.existsSync(docsDir))
206
+ return [];
207
+ try {
208
+ return fs
209
+ .readdirSync(docsDir)
210
+ .filter((f) => /\.md$/i.test(f))
211
+ .slice(0, 5)
212
+ .map((f) => path.join(docsDir, f));
213
+ }
214
+ catch {
215
+ return [];
216
+ }
217
+ }
218
+ // ============================================================================
219
+ // Rendering
220
+ // ============================================================================
221
+ function renderBrief(model, opts) {
222
+ const lines = [];
223
+ // Title
224
+ lines.push(`# ${model.packageName} — repo brief`);
225
+ lines.push('');
226
+ // Identity
227
+ lines.push('## Identity');
228
+ lines.push(`- **Stack**: ${model.stack}`);
229
+ lines.push(`- **Preset**: ${model.preset}`);
230
+ lines.push(`- **Package**: ${model.packageName} v${model.version}`);
231
+ if (model.description)
232
+ lines.push(`- **Description**: ${model.description}`);
233
+ if (model.bin)
234
+ lines.push(`- **Bin**: ${model.bin}`);
235
+ lines.push('');
236
+ // Surface
237
+ const routeLimit = opts.routeLimit;
238
+ const tableLimit = opts.tableLimit;
239
+ const displayedRoutes = model.routes.slice(0, routeLimit);
240
+ const displayedTables = model.schemas.slice(0, tableLimit);
241
+ lines.push('## Surface');
242
+ lines.push(`${model.totalRoutes} routes across ${model.totalFrameworks} frameworks · ${model.totalTables} D1 tables`);
243
+ lines.push('');
244
+ if (displayedRoutes.length > 0) {
245
+ lines.push('| Method | Path | Framework |');
246
+ lines.push('| ------ | ---- | --------- |');
247
+ for (const r of displayedRoutes) {
248
+ lines.push(`| ${r.method} | ${r.path} | ${r.framework} |`);
249
+ }
250
+ lines.push('');
251
+ }
252
+ if (displayedTables.length > 0) {
253
+ lines.push(`D1 Tables (top ${Math.min(tableLimit, displayedTables.length)} max):`);
254
+ for (const t of displayedTables) {
255
+ lines.push(`- \`${t.name}\`: ${t.columns.join(', ')}`);
256
+ }
257
+ lines.push('');
258
+ }
259
+ if (displayedRoutes.length === 0 && displayedTables.length === 0) {
260
+ lines.push('_No routes or D1 tables detected._');
261
+ lines.push('');
262
+ }
263
+ // Hotspots
264
+ const hotfileLimit = opts.hotfileLimit;
265
+ const displayedHotfiles = model.hotFiles.slice(0, hotfileLimit);
266
+ lines.push('## Hotspots');
267
+ if (model.hotspotError) {
268
+ lines.push(`Hotspots: ${model.hotspotError}`);
269
+ }
270
+ else {
271
+ lines.push(`${model.fileCount} source files scanned · top hot files by importer count`);
272
+ lines.push('');
273
+ if (displayedHotfiles.length > 0) {
274
+ lines.push('| File | Importers | Flag |');
275
+ lines.push('| ---- | --------- | ---- |');
276
+ for (const h of displayedHotfiles) {
277
+ const flag = h.importers >= 10 ? 'CROSS_CUTTING' : '';
278
+ lines.push(`| ${h.file} | ${h.importers} | ${flag} |`);
279
+ }
280
+ }
281
+ }
282
+ lines.push('');
283
+ // Sensitivity
284
+ lines.push('## Sensitivity');
285
+ if (model.sensitivityTags.length > 0) {
286
+ for (const tag of model.sensitivityTags) {
287
+ lines.push(`- ${tag}`);
288
+ }
289
+ }
290
+ else {
291
+ lines.push('No sensitivity configuration found.');
292
+ }
293
+ lines.push('');
294
+ // Governance
295
+ lines.push('## Governance');
296
+ if (model.noManifest) {
297
+ lines.push('No ADF manifest found.');
298
+ }
299
+ else {
300
+ lines.push(`**DEFAULT_LOAD**: ${model.defaultLoad.join(', ') || '(none)'}`);
301
+ const onDemandEntries = opts.onDemandLimit !== null
302
+ ? model.onDemand.slice(0, opts.onDemandLimit)
303
+ : model.onDemand;
304
+ if (onDemandEntries.length > 0) {
305
+ const parts = onDemandEntries.map((m) => {
306
+ const triggers = m.triggers.length > 0 ? ` (triggers: ${m.triggers.join(', ')})` : '';
307
+ return `${m.path}${triggers}`;
308
+ });
309
+ lines.push(`**ON_DEMAND**: ${parts.join(', ')}`);
310
+ }
311
+ else {
312
+ lines.push('**ON_DEMAND**: (none)');
313
+ }
314
+ }
315
+ lines.push('');
316
+ // See also
317
+ lines.push('## See also');
318
+ lines.push('- `CLAUDE.md` for human-authored rules and project conventions');
319
+ lines.push('');
320
+ // Truncated section
321
+ if (opts.truncatedSections.length > 0) {
322
+ lines.push('## Truncated');
323
+ for (const s of opts.truncatedSections) {
324
+ lines.push(`- ${s}`);
325
+ }
326
+ lines.push('');
327
+ }
328
+ // Footer
329
+ lines.push('---');
330
+ lines.push(`_Generated from git SHA ${model.gitSha} · ${model.timestamp}_`);
331
+ return lines.join('\n');
332
+ }
333
+ // ============================================================================
334
+ // generateBrief — core implementation
335
+ // ============================================================================
336
+ async function generateBrief(options) {
337
+ const configPath = path.resolve(options?.configPath ?? '.charter');
338
+ const aiDir = path.resolve(options?.aiDir ?? '.ai');
339
+ const verbose = options?.verbose ?? false;
340
+ const root = process.cwd();
341
+ // ---- Load .charter/config.json ----
342
+ let charterConfig = {};
343
+ try {
344
+ const cfgPath = path.join(configPath, 'config.json');
345
+ if (fs.existsSync(cfgPath)) {
346
+ charterConfig = JSON.parse(fs.readFileSync(cfgPath, 'utf8'));
347
+ }
348
+ }
349
+ catch {
350
+ // ignore
351
+ }
352
+ const stack = charterConfig.stack ?? 'unknown';
353
+ const preset = charterConfig.preset ?? 'default';
354
+ const sensitivityTags = [];
355
+ const sensCfg = charterConfig.sensitivity;
356
+ if (sensCfg && typeof sensCfg === 'object' && sensCfg !== null) {
357
+ if (Array.isArray(sensCfg.tags)) {
358
+ for (const t of sensCfg.tags) {
359
+ if (typeof t === 'string')
360
+ sensitivityTags.push(t);
361
+ }
362
+ }
363
+ }
364
+ else if (Array.isArray(charterConfig.sensitivityTags)) {
365
+ for (const t of charterConfig.sensitivityTags) {
366
+ if (typeof t === 'string')
367
+ sensitivityTags.push(t);
368
+ }
369
+ }
370
+ // ---- Load package.json ----
371
+ let packageName = path.basename(root);
372
+ let version = '0.0.0';
373
+ let description = null;
374
+ let binString = null;
375
+ let pkgBin = {};
376
+ try {
377
+ const pkgPath = path.join(root, 'package.json');
378
+ if (fs.existsSync(pkgPath)) {
379
+ const pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf8'));
380
+ if (typeof pkg.name === 'string')
381
+ packageName = pkg.name;
382
+ if (typeof pkg.version === 'string')
383
+ version = pkg.version;
384
+ if (typeof pkg.description === 'string')
385
+ description = pkg.description;
386
+ if (pkg.bin && typeof pkg.bin === 'object' && pkg.bin !== null) {
387
+ pkgBin = pkg.bin;
388
+ binString = Object.entries(pkgBin)
389
+ .map(([k, v]) => `${k} → ${v}`)
390
+ .join(', ');
391
+ }
392
+ else if (typeof pkg.bin === 'string') {
393
+ binString = pkg.bin;
394
+ }
395
+ }
396
+ }
397
+ catch {
398
+ // ignore
399
+ }
400
+ // ---- Surface analysis ----
401
+ let routes = [];
402
+ let totalRoutes = 0;
403
+ let totalFrameworks = 0;
404
+ let schemas = [];
405
+ let totalTables = 0;
406
+ try {
407
+ const surfaceInput = surface_1.SurfaceInputSchema.parse({ root });
408
+ const surface = (0, surface_1.analyze)(surfaceInput);
409
+ routes = surface.routes.map((r) => ({
410
+ method: r.method,
411
+ path: r.prefix ? `${r.prefix}${r.path}` : r.path,
412
+ framework: r.framework,
413
+ }));
414
+ totalRoutes = surface.summary.routeCount;
415
+ totalFrameworks = Object.keys(surface.summary.routesByFramework).length;
416
+ schemas = surface.schemas.map((t) => ({
417
+ name: t.name,
418
+ columns: t.columns.map((c) => {
419
+ const flags = [];
420
+ if (c.primaryKey)
421
+ flags.push('pk');
422
+ const base = c.name;
423
+ return flags.length > 0 ? `${base} (${flags.join(', ')})` : base;
424
+ }),
425
+ }));
426
+ totalTables = surface.summary.schemaTableCount;
427
+ }
428
+ catch {
429
+ // surface analysis failure is non-fatal
430
+ }
431
+ // ---- Blast / hotspot analysis ----
432
+ let hotFiles = [];
433
+ let fileCount = 0;
434
+ let hotspotError = null;
435
+ try {
436
+ const seeds = getSeedCandidates(preset, root, pkgBin);
437
+ if (seeds.length === 0) {
438
+ hotspotError = 'analysis unavailable';
439
+ }
440
+ else {
441
+ const aliases = (0, blast_2.detectTsconfigAliases)(root);
442
+ const blastInput = blast_1.BlastInputSchema.parse({
443
+ seeds,
444
+ root,
445
+ aliases,
446
+ });
447
+ const blastResult = (0, blast_1.analyze)(blastInput);
448
+ fileCount = blastResult.fileCount;
449
+ hotFiles = blastResult.hotFiles.map((h) => ({
450
+ file: h.file,
451
+ importers: h.importers,
452
+ }));
453
+ }
454
+ }
455
+ catch {
456
+ hotspotError = 'analysis unavailable';
457
+ }
458
+ // ---- ADF manifest ----
459
+ let defaultLoad = [];
460
+ let onDemand = [];
461
+ let noManifest = false;
462
+ try {
463
+ const manifestPath = path.join(aiDir, 'manifest.adf');
464
+ if (fs.existsSync(manifestPath)) {
465
+ const raw = fs.readFileSync(manifestPath, 'utf8');
466
+ const doc = (0, adf_1.parseAdf)(raw);
467
+ const manifest = (0, adf_1.parseManifest)(doc);
468
+ defaultLoad = manifest.defaultLoad;
469
+ onDemand = manifest.onDemand.map((m) => ({ path: m.path, triggers: m.triggers }));
470
+ }
471
+ else {
472
+ noManifest = true;
473
+ }
474
+ }
475
+ catch {
476
+ noManifest = true;
477
+ }
478
+ // ---- Build model ----
479
+ const model = {
480
+ packageName,
481
+ stack,
482
+ preset,
483
+ version,
484
+ description,
485
+ bin: binString,
486
+ routes,
487
+ totalRoutes,
488
+ totalFrameworks,
489
+ schemas,
490
+ totalTables,
491
+ hotFiles,
492
+ fileCount,
493
+ hotspotError,
494
+ sensitivityTags,
495
+ defaultLoad,
496
+ onDemand,
497
+ noManifest,
498
+ gitSha: getGitSha(),
499
+ timestamp: new Date().toISOString(),
500
+ };
501
+ // ---- Truncation loop ----
502
+ if (verbose) {
503
+ const markdown = renderBrief(model, {
504
+ routeLimit: model.routes.length,
505
+ tableLimit: model.schemas.length,
506
+ hotfileLimit: model.hotFiles.length,
507
+ onDemandLimit: null,
508
+ truncatedSections: [],
509
+ });
510
+ return {
511
+ markdown,
512
+ tokenCount: estimateTokens(markdown),
513
+ truncated: false,
514
+ truncatedSections: [],
515
+ };
516
+ }
517
+ // Truncation parameters (start at max)
518
+ let routeLimit = Math.min(10, model.routes.length);
519
+ let tableLimit = Math.min(5, model.schemas.length);
520
+ let hotfileLimit = Math.min(10, model.hotFiles.length);
521
+ let onDemandLimit = null;
522
+ const truncatedSections = [];
523
+ // Helper to try rendering and check budget
524
+ const tryRender = () => renderBrief(model, {
525
+ routeLimit,
526
+ tableLimit,
527
+ hotfileLimit,
528
+ onDemandLimit,
529
+ truncatedSections,
530
+ });
531
+ let markdown = tryRender();
532
+ if (markdown.length <= CHAR_CEILING) {
533
+ return {
534
+ markdown,
535
+ tokenCount: estimateTokens(markdown),
536
+ truncated: false,
537
+ truncatedSections: [],
538
+ };
539
+ }
540
+ // Step 1: Reduce hotspots to top 5
541
+ if (hotfileLimit > 5) {
542
+ const before = hotfileLimit;
543
+ hotfileLimit = 5;
544
+ truncatedSections.push(`Hotspots: reduced from ${before} to ${hotfileLimit} files`);
545
+ markdown = tryRender();
546
+ if (markdown.length <= CHAR_CEILING) {
547
+ return {
548
+ markdown,
549
+ tokenCount: estimateTokens(markdown),
550
+ truncated: true,
551
+ truncatedSections: [...truncatedSections],
552
+ };
553
+ }
554
+ }
555
+ // Step 2: Reduce D1 tables to top 3
556
+ if (tableLimit > 3) {
557
+ const before = tableLimit;
558
+ tableLimit = 3;
559
+ truncatedSections.push(`D1 Tables: reduced from ${before} to ${tableLimit} tables`);
560
+ markdown = tryRender();
561
+ if (markdown.length <= CHAR_CEILING) {
562
+ return {
563
+ markdown,
564
+ tokenCount: estimateTokens(markdown),
565
+ truncated: true,
566
+ truncatedSections: [...truncatedSections],
567
+ };
568
+ }
569
+ }
570
+ // Step 3: Reduce routes to top 5
571
+ if (routeLimit > 5) {
572
+ const before = routeLimit;
573
+ routeLimit = 5;
574
+ truncatedSections.push(`Routes: reduced from ${before} to ${routeLimit} routes`);
575
+ markdown = tryRender();
576
+ if (markdown.length <= CHAR_CEILING) {
577
+ return {
578
+ markdown,
579
+ tokenCount: estimateTokens(markdown),
580
+ truncated: true,
581
+ truncatedSections: [...truncatedSections],
582
+ };
583
+ }
584
+ }
585
+ // Step 4: Truncate Governance ON_DEMAND to first 3
586
+ if (onDemandLimit === null || (typeof onDemandLimit === 'number' && onDemandLimit > 3)) {
587
+ const before = model.onDemand.length;
588
+ onDemandLimit = 3;
589
+ truncatedSections.push(`Governance ON_DEMAND: reduced from ${before} to ${onDemandLimit} entries`);
590
+ markdown = tryRender();
591
+ if (markdown.length <= CHAR_CEILING) {
592
+ return {
593
+ markdown,
594
+ tokenCount: estimateTokens(markdown),
595
+ truncated: true,
596
+ truncatedSections: [...truncatedSections],
597
+ };
598
+ }
599
+ }
600
+ // Step 5: Hard-slice to guarantee the budget is never exceeded.
601
+ // Reached only when all prior steps still leave the brief over budget
602
+ // (e.g. very long route paths or ON_DEMAND trigger lists).
603
+ if (markdown.length > CHAR_CEILING) {
604
+ truncatedSections.push('Content hard-sliced to fit token budget');
605
+ markdown = markdown.slice(0, CHAR_CEILING) + '\n\n## Truncated\n- Content hard-sliced to fit token budget\n';
606
+ }
607
+ return {
608
+ markdown,
609
+ tokenCount: estimateTokens(markdown),
610
+ truncated: truncatedSections.length > 0,
611
+ truncatedSections: [...truncatedSections],
612
+ };
613
+ }
614
+ // ============================================================================
615
+ // CLI adapter
616
+ // ============================================================================
617
+ async function contextCommand(options, args) {
618
+ const stdoutOnly = args.includes('--stdout-only');
619
+ const verbose = args.includes('--verbose');
620
+ const writeOnly = args.includes('--write');
621
+ if (stdoutOnly && writeOnly) {
622
+ process.stderr.write('charter context: --stdout-only and --write are mutually exclusive\n');
623
+ return index_1.EXIT_CODE.RUNTIME_ERROR;
624
+ }
625
+ const result = await generateBrief({
626
+ configPath: options.configPath,
627
+ aiDir: '.ai',
628
+ verbose,
629
+ });
630
+ const { markdown } = result;
631
+ if (!writeOnly) {
632
+ console.log(markdown);
633
+ }
634
+ if (!stdoutOnly) {
635
+ const configDir = path.resolve(options.configPath);
636
+ try {
637
+ if (!fs.existsSync(configDir)) {
638
+ fs.mkdirSync(configDir, { recursive: true });
639
+ }
640
+ const outPath = path.join(configDir, 'context.md');
641
+ fs.writeFileSync(outPath, markdown, 'utf8');
642
+ }
643
+ catch (err) {
644
+ // Writing to .charter/ is non-fatal — log and continue
645
+ process.stderr.write(`charter context: failed to write .charter/context.md: ${err.message}\n`);
646
+ }
647
+ }
648
+ return index_1.EXIT_CODE.SUCCESS;
649
+ }
650
+ //# sourceMappingURL=context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/commands/context.ts"],"names":[],"mappings":"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"}