@stackbilt/cli 0.1.20 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +126 -67
- package/dist/commands/adf.d.ts +8 -0
- package/dist/commands/adf.d.ts.map +1 -0
- package/dist/commands/adf.js +763 -0
- package/dist/commands/adf.js.map +1 -0
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +64 -0
- package/dist/commands/doctor.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/package.json +8 -7
package/README.md
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
# @stackbilt/cli
|
|
2
|
-
|
|
3
|
-
CLI entry point for Charter Kit -- a local-first governance toolkit for software repositories. Orchestrates all other `@stackbilt/*` packages to parse commit trailers, score risk, detect blessed-stack drift, and classify change scope. No LLM calls at runtime.
|
|
4
|
-
|
|
5
|
-
> **This is the only package most users need.** One install gives you the full Charter Kit toolkit.
|
|
6
|
-
|
|
1
|
+
# @stackbilt/cli
|
|
2
|
+
|
|
3
|
+
CLI entry point for Charter Kit -- a local-first governance toolkit for software repositories. Orchestrates all other `@stackbilt/*` packages to parse commit trailers, score risk, detect blessed-stack drift, and classify change scope. No LLM calls at runtime.
|
|
4
|
+
|
|
5
|
+
> **This is the only package most users need.** One install gives you the full Charter Kit toolkit.
|
|
6
|
+
|
|
7
7
|
## Install (Recommended)
|
|
8
8
|
|
|
9
9
|
```bash
|
|
@@ -43,11 +43,11 @@ npx --no-install charter --version
|
|
|
43
43
|
```
|
|
44
44
|
|
|
45
45
|
For CI pipelines, install as a dev dependency:
|
|
46
|
-
|
|
47
|
-
```bash
|
|
48
|
-
npm install --save-dev @stackbilt/cli
|
|
49
|
-
```
|
|
50
|
-
|
|
46
|
+
|
|
47
|
+
```bash
|
|
48
|
+
npm install --save-dev @stackbilt/cli
|
|
49
|
+
```
|
|
50
|
+
|
|
51
51
|
Requires Node >= 18.
|
|
52
52
|
|
|
53
53
|
## Quick Start
|
|
@@ -62,6 +62,11 @@ charter drift # scan for blessed-stack drift
|
|
|
62
62
|
charter audit # generate governance audit report
|
|
63
63
|
charter classify "migrate auth provider"
|
|
64
64
|
charter hook install --commit-msg
|
|
65
|
+
charter adf init # scaffold .ai/ context directory
|
|
66
|
+
charter adf fmt .ai/core.adf # reformat ADF to canonical form
|
|
67
|
+
charter adf bundle --task "fix React component"
|
|
68
|
+
charter adf sync --check # verify .adf files match locked hashes
|
|
69
|
+
charter adf evidence --auto-measure --format json # validate metric ceilings
|
|
65
70
|
```
|
|
66
71
|
|
|
67
72
|
## Human Onboarding (Copy/Paste)
|
|
@@ -128,13 +133,17 @@ npx charter validate --ci --format json
|
|
|
128
133
|
npx charter drift --ci --format json
|
|
129
134
|
npx charter audit --format json
|
|
130
135
|
|
|
136
|
+
# ADF context management
|
|
137
|
+
npx charter adf evidence --auto-measure --format json --ci
|
|
138
|
+
npx charter adf sync --check --format json
|
|
139
|
+
|
|
131
140
|
# recurring maintenance
|
|
132
141
|
npx charter doctor --format json
|
|
133
142
|
npx charter audit --format json
|
|
134
143
|
```
|
|
135
|
-
|
|
136
|
-
## Commands
|
|
137
|
-
|
|
144
|
+
|
|
145
|
+
## Commands
|
|
146
|
+
|
|
138
147
|
### `charter` (no args)
|
|
139
148
|
|
|
140
149
|
Default first-run experience. Shows:
|
|
@@ -169,20 +178,20 @@ Detection output includes `detected.sources` in JSON mode so agents can verify w
|
|
|
169
178
|
Setup also adds optional root scripts when missing: `charter:detect` and `charter:setup`.
|
|
170
179
|
Setup JSON now includes `mutationPlan` and `appliedMutations` so side effects are explicit before/after apply.
|
|
171
180
|
Setup baseline mutation metadata now includes `configHashBefore`, `configHashAfter`, and `writesPerformed`.
|
|
172
|
-
|
|
181
|
+
|
|
173
182
|
### `charter init`
|
|
174
183
|
|
|
175
184
|
Scaffold `.charter/` config templates only. Supports `--preset worker|frontend|backend|fullstack`.
|
|
176
|
-
|
|
177
|
-
### `charter doctor`
|
|
178
|
-
|
|
179
|
-
Validate CLI installation
|
|
180
|
-
|
|
185
|
+
|
|
186
|
+
### `charter doctor`
|
|
187
|
+
|
|
188
|
+
Validate CLI installation, `.charter/` config, and ADF readiness (manifest existence, module parseability, sync lock status).
|
|
189
|
+
|
|
181
190
|
### `charter validate`
|
|
182
191
|
|
|
183
192
|
Validate git commits for `Governed-By` and `Resolves-Request` trailers.
|
|
184
|
-
|
|
185
|
-
```bash
|
|
193
|
+
|
|
194
|
+
```bash
|
|
186
195
|
charter validate --ci --format json
|
|
187
196
|
charter validate --range HEAD~10..HEAD --format json
|
|
188
197
|
```
|
|
@@ -213,17 +222,17 @@ Resolves-Request: REQ-078
|
|
|
213
222
|
|
|
214
223
|
Co-Authored-By: Dev <dev@example.com>
|
|
215
224
|
```
|
|
216
|
-
|
|
225
|
+
|
|
217
226
|
### `charter drift`
|
|
218
|
-
|
|
219
|
-
Scan files against blessed-stack patterns in `.charter/patterns/*.json`.
|
|
220
|
-
|
|
221
|
-
```bash
|
|
227
|
+
|
|
228
|
+
Scan files against blessed-stack patterns in `.charter/patterns/*.json`.
|
|
229
|
+
|
|
230
|
+
```bash
|
|
222
231
|
charter drift --path ./src --ci
|
|
223
232
|
```
|
|
224
233
|
|
|
225
234
|
JSON output includes `patternsCustomized` when pattern files declare customization metadata.
|
|
226
|
-
|
|
235
|
+
|
|
227
236
|
### `charter audit`
|
|
228
237
|
|
|
229
238
|
Generate a governance audit report covering trailers, risk, drift, and policy-section coverage quality.
|
|
@@ -231,12 +240,12 @@ Use `--range <revset>` to audit the same commit window used by validation in rev
|
|
|
231
240
|
|
|
232
241
|
If score is held down by trailer coverage, enforce `validate --ci` in PR checks and add commit-template guidance for required trailers.
|
|
233
242
|
Audit output includes whether preset pattern files are still uncustomized when metadata is present.
|
|
234
|
-
|
|
243
|
+
|
|
235
244
|
### `charter classify`
|
|
236
|
-
|
|
237
|
-
Classify a change as `SURFACE`, `LOCAL`, or `CROSS_CUTTING`.
|
|
238
|
-
|
|
239
|
-
```bash
|
|
245
|
+
|
|
246
|
+
Classify a change as `SURFACE`, `LOCAL`, or `CROSS_CUTTING`.
|
|
247
|
+
|
|
248
|
+
```bash
|
|
240
249
|
charter classify "update button color"
|
|
241
250
|
```
|
|
242
251
|
|
|
@@ -249,43 +258,93 @@ charter hook install --commit-msg
|
|
|
249
258
|
```
|
|
250
259
|
|
|
251
260
|
`--force` (or global `--yes`) allows overwrite when a non-Charter `commit-msg` hook already exists.
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
261
|
+
|
|
262
|
+
### `charter adf`
|
|
263
|
+
|
|
264
|
+
ADF (Attention-Directed Format) context management. Replaces monolithic `.cursorrules`/`claude.md` files with a modular, AST-backed `.ai/` directory.
|
|
265
|
+
|
|
266
|
+
```bash
|
|
267
|
+
charter adf init [--ai-dir <dir>] [--force]
|
|
268
|
+
charter adf fmt <file> [--check] [--write]
|
|
269
|
+
charter adf patch <file> --ops '<json>' | --ops-file <path>
|
|
270
|
+
charter adf bundle --task "Fix React component" [--ai-dir <dir>]
|
|
271
|
+
charter adf sync --check [--ai-dir <dir>]
|
|
272
|
+
charter adf sync --write [--ai-dir <dir>]
|
|
273
|
+
charter adf evidence [--task "<prompt>"] [--ai-dir <dir>] [--auto-measure]
|
|
274
|
+
[--context '{"key": value}'] [--context-file <path>]
|
|
275
|
+
```
|
|
276
|
+
|
|
277
|
+
- `init`: Scaffold `.ai/` with `manifest.adf`, `core.adf`, and `state.adf`. Core module includes a 500-line LOC guardrail metric by default.
|
|
278
|
+
- `fmt`: Parse and reformat to canonical ADF. `--check` exits 1 if not canonical. `--write` reformats in place. Default prints to stdout.
|
|
279
|
+
- `patch`: Apply typed delta operations (ADD_BULLET, REPLACE_BULLET, REMOVE_BULLET, ADD_SECTION, REPLACE_SECTION, REMOVE_SECTION, UPDATE_METRIC). Accepts `--ops <json>` inline or `--ops-file <path>` from a file.
|
|
280
|
+
- `bundle`: Read `manifest.adf`, resolve ON_DEMAND modules via keyword matching against the task, and output merged context with token estimate, trigger observability (matched keywords, load reasons), unmatched modules, and advisory-only warnings.
|
|
281
|
+
- `sync --check`: Verify source `.adf` files match their locked hashes. Exits 1 if any source has drifted since last sync.
|
|
282
|
+
- `sync --write`: Update `.adf.lock` with current source hashes.
|
|
283
|
+
- `evidence`: Validate all metric ceilings in the merged document and produce a structured pass/fail evidence report. `--auto-measure` counts lines in files referenced by the manifest METRICS section. `--context` or `--context-file` inject external metric overrides that take precedence over auto-measured and document values. In `--ci` mode, exits 1 on constraint failures (warnings don't fail).
|
|
284
|
+
|
|
285
|
+
#### Evidence Example (from Charter's own repo)
|
|
286
|
+
|
|
287
|
+
Charter uses its own ADF system for self-governance. Running evidence with auto-measurement:
|
|
288
|
+
|
|
289
|
+
```bash
|
|
290
|
+
charter adf evidence --auto-measure --format json --ci
|
|
291
|
+
```
|
|
292
|
+
|
|
293
|
+
Produces constraint checks against live source file line counts:
|
|
294
|
+
|
|
295
|
+
```json
|
|
296
|
+
{
|
|
297
|
+
"constraints": [
|
|
298
|
+
{ "metric": "adf_commands_loc", "value": 835, "ceiling": 900, "status": "pass", "source": "context" },
|
|
299
|
+
{ "metric": "bundler_loc", "value": 389, "ceiling": 500, "status": "pass", "source": "context" },
|
|
300
|
+
{ "metric": "parser_loc", "value": 214, "ceiling": 300, "status": "pass", "source": "context" },
|
|
301
|
+
{ "metric": "cli_entry_loc", "value": 142, "ceiling": 200, "status": "pass", "source": "context" }
|
|
302
|
+
],
|
|
303
|
+
"allPassing": true,
|
|
304
|
+
"failCount": 0,
|
|
305
|
+
"nextActions": []
|
|
306
|
+
}
|
|
307
|
+
```
|
|
308
|
+
|
|
309
|
+
`source: "context"` indicates values were auto-measured from source files (not from the document's static values). In `--ci` mode, exit code 1 is returned when any constraint fails.
|
|
310
|
+
|
|
311
|
+
## Global Options
|
|
312
|
+
|
|
313
|
+
| Option | Description | Default |
|
|
314
|
+
|---|---|---|
|
|
315
|
+
| `--config <path>` | Path to `.charter/` directory | `.charter/` |
|
|
316
|
+
| `--format <mode>` | Output: `text` or `json` | `text` |
|
|
317
|
+
| `--ci` | CI mode: exit non-zero on WARN or FAIL | off |
|
|
260
318
|
| `--yes` | Auto-accept safe setup overwrites | off |
|
|
261
319
|
|
|
262
320
|
Setup-only options:
|
|
263
321
|
- `--preset <worker|frontend|backend|fullstack>`: override auto-detected preset
|
|
264
322
|
- `--detect-only`: print stack detection result and selected preset without writing files
|
|
265
323
|
- `--no-dependency-sync`: skip rewriting `devDependencies["@stackbilt/cli"]` during setup
|
|
266
|
-
|
|
267
|
-
## Exit Codes
|
|
268
|
-
|
|
269
|
-
| Code | Meaning |
|
|
270
|
-
|------|---------|
|
|
271
|
-
| 0 | Success |
|
|
272
|
-
| 1 | Policy violation (CI mode) |
|
|
273
|
-
| 2 | Runtime or usage error |
|
|
274
|
-
|
|
275
|
-
## Related Packages
|
|
276
|
-
|
|
277
|
-
- `@stackbilt/types` -- shared enums and interfaces
|
|
278
|
-
- `@stackbilt/core` -- Zod schemas and sanitization helpers
|
|
279
|
-
- `@stackbilt/git` -- trailer parsing and commit risk assessment
|
|
280
|
-
- `@stackbilt/classify` -- heuristic change classification
|
|
281
|
-
- `@stackbilt/drift` -- blessed-stack pattern drift detection
|
|
282
|
-
- `@stackbilt/validate` -- citation validation and intent classification
|
|
283
|
-
- `@stackbilt/
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
324
|
+
|
|
325
|
+
## Exit Codes
|
|
326
|
+
|
|
327
|
+
| Code | Meaning |
|
|
328
|
+
|------|---------|
|
|
329
|
+
| 0 | Success |
|
|
330
|
+
| 1 | Policy violation (CI mode) |
|
|
331
|
+
| 2 | Runtime or usage error |
|
|
332
|
+
|
|
333
|
+
## Related Packages
|
|
334
|
+
|
|
335
|
+
- `@stackbilt/types` -- shared enums and interfaces
|
|
336
|
+
- `@stackbilt/core` -- Zod schemas and sanitization helpers
|
|
337
|
+
- `@stackbilt/git` -- trailer parsing and commit risk assessment
|
|
338
|
+
- `@stackbilt/classify` -- heuristic change classification
|
|
339
|
+
- `@stackbilt/drift` -- blessed-stack pattern drift detection
|
|
340
|
+
- `@stackbilt/validate` -- citation validation and intent classification
|
|
341
|
+
- `@stackbilt/adf` -- ADF parser, formatter, patcher, and bundler
|
|
342
|
+
- `@stackbilt/ci` -- GitHub Actions integration helpers
|
|
343
|
+
|
|
344
|
+
## License
|
|
345
|
+
|
|
346
|
+
Apache-2.0
|
|
347
|
+
|
|
348
|
+
## Repository
|
|
349
|
+
|
|
350
|
+
[https://github.com/Stackbilt-dev/charter](https://github.com/Stackbilt-dev/charter)
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* charter adf
|
|
3
|
+
*
|
|
4
|
+
* ADF (Attention-Directed Format) subcommands: init, fmt, patch, bundle, sync.
|
|
5
|
+
*/
|
|
6
|
+
import type { CLIOptions } from '../index';
|
|
7
|
+
export declare function adfCommand(options: CLIOptions, args: string[]): Promise<number>;
|
|
8
|
+
//# sourceMappingURL=adf.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adf.d.ts","sourceRoot":"","sources":["../../src/commands/adf.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAeH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAiD3C,wBAAsB,UAAU,CAAC,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAyBrF"}
|
|
@@ -0,0 +1,763 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* charter adf
|
|
4
|
+
*
|
|
5
|
+
* ADF (Attention-Directed Format) subcommands: init, fmt, patch, bundle, sync.
|
|
6
|
+
*/
|
|
7
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
8
|
+
if (k2 === undefined) k2 = k;
|
|
9
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
10
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
11
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
12
|
+
}
|
|
13
|
+
Object.defineProperty(o, k2, desc);
|
|
14
|
+
}) : (function(o, m, k, k2) {
|
|
15
|
+
if (k2 === undefined) k2 = k;
|
|
16
|
+
o[k2] = m[k];
|
|
17
|
+
}));
|
|
18
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
19
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
20
|
+
}) : function(o, v) {
|
|
21
|
+
o["default"] = v;
|
|
22
|
+
});
|
|
23
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
24
|
+
var ownKeys = function(o) {
|
|
25
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
26
|
+
var ar = [];
|
|
27
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
28
|
+
return ar;
|
|
29
|
+
};
|
|
30
|
+
return ownKeys(o);
|
|
31
|
+
};
|
|
32
|
+
return function (mod) {
|
|
33
|
+
if (mod && mod.__esModule) return mod;
|
|
34
|
+
var result = {};
|
|
35
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
36
|
+
__setModuleDefault(result, mod);
|
|
37
|
+
return result;
|
|
38
|
+
};
|
|
39
|
+
})();
|
|
40
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
41
|
+
exports.adfCommand = adfCommand;
|
|
42
|
+
const fs = __importStar(require("node:fs"));
|
|
43
|
+
const path = __importStar(require("node:path"));
|
|
44
|
+
const crypto = __importStar(require("node:crypto"));
|
|
45
|
+
const adf_1 = require("@stackbilt/adf");
|
|
46
|
+
const index_1 = require("../index");
|
|
47
|
+
// ============================================================================
|
|
48
|
+
// Scaffold Content
|
|
49
|
+
// ============================================================================
|
|
50
|
+
const MANIFEST_SCAFFOLD = `ADF: 0.1
|
|
51
|
+
\u{1F3AF} ROLE: Repo context router
|
|
52
|
+
|
|
53
|
+
\u{1F4E6} DEFAULT_LOAD:
|
|
54
|
+
- core.adf
|
|
55
|
+
- state.adf
|
|
56
|
+
|
|
57
|
+
\u{1F4C2} ON_DEMAND:
|
|
58
|
+
- frontend.adf (Triggers on: React, CSS, UI)
|
|
59
|
+
- backend.adf (Triggers on: API, Node, DB)
|
|
60
|
+
|
|
61
|
+
\u{1F4D0} RULES:
|
|
62
|
+
- Prefer smallest relevant module set.
|
|
63
|
+
- Never assume unseen modules were loaded.
|
|
64
|
+
`;
|
|
65
|
+
const CORE_SCAFFOLD = `ADF: 0.1
|
|
66
|
+
\u{1F3AF} TASK: Define universal repository rules
|
|
67
|
+
|
|
68
|
+
\u{2699}\u{FE0F} CONTEXT:
|
|
69
|
+
- This file is loaded by default for every task.
|
|
70
|
+
- Keep it lean — add domain-specific rules to on-demand modules.
|
|
71
|
+
|
|
72
|
+
\u{26A0}\u{FE0F} CONSTRAINTS [load-bearing]:
|
|
73
|
+
- Follow conventional commits.
|
|
74
|
+
- No secrets in source code.
|
|
75
|
+
- Prefer pure functions in library code.
|
|
76
|
+
|
|
77
|
+
\u{1F4CA} METRICS [load-bearing]:
|
|
78
|
+
entry_loc: 0 / 500 [lines]
|
|
79
|
+
`;
|
|
80
|
+
const STATE_SCAFFOLD = `ADF: 0.1
|
|
81
|
+
\u{1F9E0} STATE:
|
|
82
|
+
CURRENT: Repository initialized with ADF context system
|
|
83
|
+
NEXT: Configure on-demand modules for your stack
|
|
84
|
+
`;
|
|
85
|
+
// ============================================================================
|
|
86
|
+
// Dispatcher
|
|
87
|
+
// ============================================================================
|
|
88
|
+
async function adfCommand(options, args) {
|
|
89
|
+
if (args.length === 0 || args.includes('--help') || args.includes('-h')) {
|
|
90
|
+
printHelp();
|
|
91
|
+
return index_1.EXIT_CODE.SUCCESS;
|
|
92
|
+
}
|
|
93
|
+
const subcommand = args[0];
|
|
94
|
+
const restArgs = args.slice(1);
|
|
95
|
+
switch (subcommand) {
|
|
96
|
+
case 'init':
|
|
97
|
+
return adfInit(options, restArgs);
|
|
98
|
+
case 'fmt':
|
|
99
|
+
return adfFmt(options, restArgs);
|
|
100
|
+
case 'patch':
|
|
101
|
+
return adfPatch(options, restArgs);
|
|
102
|
+
case 'bundle':
|
|
103
|
+
return adfBundle(options, restArgs);
|
|
104
|
+
case 'sync':
|
|
105
|
+
return adfSync(options, restArgs);
|
|
106
|
+
case 'evidence':
|
|
107
|
+
return adfEvidence(options, restArgs);
|
|
108
|
+
default:
|
|
109
|
+
throw new index_1.CLIError(`Unknown adf subcommand: ${subcommand}. Supported: init, fmt, patch, bundle, sync, evidence`);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
function adfInit(options, args) {
|
|
113
|
+
const force = options.yes || args.includes('--force');
|
|
114
|
+
const aiDir = getFlag(args, '--ai-dir') || '.ai';
|
|
115
|
+
const manifestPath = path.join(aiDir, 'manifest.adf');
|
|
116
|
+
if (fs.existsSync(manifestPath) && !force) {
|
|
117
|
+
const result = { created: false, aiDir, files: [] };
|
|
118
|
+
if (options.format === 'json') {
|
|
119
|
+
console.log(JSON.stringify({ ...result, nextActions: ['charter adf fmt .ai/core.adf --check', 'charter adf bundle --task "<prompt>"'] }, null, 2));
|
|
120
|
+
}
|
|
121
|
+
else {
|
|
122
|
+
console.log(` .ai/ already exists at ${aiDir}/`);
|
|
123
|
+
console.log(' Use --force (or --yes) to overwrite.');
|
|
124
|
+
}
|
|
125
|
+
return index_1.EXIT_CODE.SUCCESS;
|
|
126
|
+
}
|
|
127
|
+
fs.mkdirSync(aiDir, { recursive: true });
|
|
128
|
+
fs.writeFileSync(path.join(aiDir, 'manifest.adf'), MANIFEST_SCAFFOLD);
|
|
129
|
+
fs.writeFileSync(path.join(aiDir, 'core.adf'), CORE_SCAFFOLD);
|
|
130
|
+
fs.writeFileSync(path.join(aiDir, 'state.adf'), STATE_SCAFFOLD);
|
|
131
|
+
const result = {
|
|
132
|
+
created: true,
|
|
133
|
+
aiDir,
|
|
134
|
+
files: ['manifest.adf', 'core.adf', 'state.adf'],
|
|
135
|
+
};
|
|
136
|
+
if (options.format === 'json') {
|
|
137
|
+
console.log(JSON.stringify({
|
|
138
|
+
...result,
|
|
139
|
+
nextActions: [
|
|
140
|
+
'Edit core.adf with your universal repo rules',
|
|
141
|
+
'charter adf fmt .ai/core.adf --check',
|
|
142
|
+
'charter adf bundle --task "<prompt>"',
|
|
143
|
+
],
|
|
144
|
+
}, null, 2));
|
|
145
|
+
}
|
|
146
|
+
else {
|
|
147
|
+
console.log(` Initialized ADF context at ${aiDir}/`);
|
|
148
|
+
console.log('');
|
|
149
|
+
console.log(' Created:');
|
|
150
|
+
for (const file of result.files) {
|
|
151
|
+
console.log(` ${file}`);
|
|
152
|
+
}
|
|
153
|
+
console.log('');
|
|
154
|
+
console.log(' Next steps:');
|
|
155
|
+
console.log(' 1. Edit core.adf with your universal repo rules');
|
|
156
|
+
console.log(' 2. Add on-demand modules (e.g. frontend.adf, backend.adf)');
|
|
157
|
+
console.log(' 3. Run: charter adf fmt .ai/core.adf --check');
|
|
158
|
+
}
|
|
159
|
+
return index_1.EXIT_CODE.SUCCESS;
|
|
160
|
+
}
|
|
161
|
+
// ============================================================================
|
|
162
|
+
// adf fmt
|
|
163
|
+
// ============================================================================
|
|
164
|
+
function adfFmt(options, args) {
|
|
165
|
+
const filePath = args.find(a => !a.startsWith('-'));
|
|
166
|
+
if (!filePath) {
|
|
167
|
+
throw new index_1.CLIError('adf fmt requires a file path. Usage: charter adf fmt <file> [--check] [--write]');
|
|
168
|
+
}
|
|
169
|
+
if (!fs.existsSync(filePath)) {
|
|
170
|
+
throw new index_1.CLIError(`File not found: ${filePath}`);
|
|
171
|
+
}
|
|
172
|
+
const input = fs.readFileSync(filePath, 'utf-8');
|
|
173
|
+
const doc = (0, adf_1.parseAdf)(input);
|
|
174
|
+
const formatted = (0, adf_1.formatAdf)(doc);
|
|
175
|
+
const checkMode = args.includes('--check');
|
|
176
|
+
const writeMode = args.includes('--write');
|
|
177
|
+
if (checkMode) {
|
|
178
|
+
const isCanonical = input === formatted;
|
|
179
|
+
if (options.format === 'json') {
|
|
180
|
+
console.log(JSON.stringify({ file: filePath, canonical: isCanonical }, null, 2));
|
|
181
|
+
}
|
|
182
|
+
else if (isCanonical) {
|
|
183
|
+
console.log(` [ok] ${filePath} is canonical.`);
|
|
184
|
+
}
|
|
185
|
+
else {
|
|
186
|
+
console.log(` [warn] ${filePath} is not in canonical format.`);
|
|
187
|
+
console.log(' Run: charter adf fmt <file> --write');
|
|
188
|
+
}
|
|
189
|
+
return isCanonical ? index_1.EXIT_CODE.SUCCESS : index_1.EXIT_CODE.POLICY_VIOLATION;
|
|
190
|
+
}
|
|
191
|
+
if (writeMode) {
|
|
192
|
+
fs.writeFileSync(filePath, formatted);
|
|
193
|
+
if (options.format === 'json') {
|
|
194
|
+
console.log(JSON.stringify({ file: filePath, written: true }, null, 2));
|
|
195
|
+
}
|
|
196
|
+
else {
|
|
197
|
+
console.log(` [ok] Reformatted ${filePath}`);
|
|
198
|
+
}
|
|
199
|
+
return index_1.EXIT_CODE.SUCCESS;
|
|
200
|
+
}
|
|
201
|
+
// Default: print to stdout
|
|
202
|
+
process.stdout.write(formatted);
|
|
203
|
+
return index_1.EXIT_CODE.SUCCESS;
|
|
204
|
+
}
|
|
205
|
+
// ============================================================================
|
|
206
|
+
// adf patch
|
|
207
|
+
// ============================================================================
|
|
208
|
+
function adfPatch(options, args) {
|
|
209
|
+
const filePath = args.find(a => !a.startsWith('-'));
|
|
210
|
+
if (!filePath) {
|
|
211
|
+
throw new index_1.CLIError('adf patch requires a file path. Usage: charter adf patch <file> --ops <json>');
|
|
212
|
+
}
|
|
213
|
+
const opsJson = getFlag(args, '--ops');
|
|
214
|
+
const opsFile = getFlag(args, '--ops-file');
|
|
215
|
+
if (!opsJson && !opsFile) {
|
|
216
|
+
throw new index_1.CLIError('adf patch requires --ops <json> or --ops-file <path>.');
|
|
217
|
+
}
|
|
218
|
+
if (!fs.existsSync(filePath)) {
|
|
219
|
+
throw new index_1.CLIError(`File not found: ${filePath}`);
|
|
220
|
+
}
|
|
221
|
+
const rawOps = opsFile ? readJsonFlag(opsFile, '--ops-file') : opsJson;
|
|
222
|
+
let ops;
|
|
223
|
+
try {
|
|
224
|
+
ops = JSON.parse(rawOps);
|
|
225
|
+
if (!Array.isArray(ops)) {
|
|
226
|
+
throw new Error('ops must be an array');
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
catch (e) {
|
|
230
|
+
const msg = e instanceof Error ? e.message : String(e);
|
|
231
|
+
throw new index_1.CLIError(`Invalid --ops JSON: ${msg}`);
|
|
232
|
+
}
|
|
233
|
+
const input = fs.readFileSync(filePath, 'utf-8');
|
|
234
|
+
const doc = (0, adf_1.parseAdf)(input);
|
|
235
|
+
try {
|
|
236
|
+
const patched = (0, adf_1.applyPatches)(doc, ops);
|
|
237
|
+
const output = (0, adf_1.formatAdf)(patched);
|
|
238
|
+
fs.writeFileSync(filePath, output);
|
|
239
|
+
if (options.format === 'json') {
|
|
240
|
+
console.log(JSON.stringify({ file: filePath, patched: true, opsApplied: ops.length }, null, 2));
|
|
241
|
+
}
|
|
242
|
+
else {
|
|
243
|
+
console.log(` [ok] Applied ${ops.length} patch${ops.length === 1 ? '' : 'es'} to ${filePath}`);
|
|
244
|
+
}
|
|
245
|
+
return index_1.EXIT_CODE.SUCCESS;
|
|
246
|
+
}
|
|
247
|
+
catch (e) {
|
|
248
|
+
if (e instanceof Error && e.name === 'AdfPatchError') {
|
|
249
|
+
if (options.format === 'json') {
|
|
250
|
+
console.log(JSON.stringify({ file: filePath, patched: false, error: e.message }, null, 2));
|
|
251
|
+
}
|
|
252
|
+
else {
|
|
253
|
+
console.error(` [error] ${e.message}`);
|
|
254
|
+
}
|
|
255
|
+
return index_1.EXIT_CODE.RUNTIME_ERROR;
|
|
256
|
+
}
|
|
257
|
+
throw e;
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
// ============================================================================
|
|
261
|
+
// adf bundle
|
|
262
|
+
// ============================================================================
|
|
263
|
+
function adfBundle(options, args) {
|
|
264
|
+
const task = getFlag(args, '--task');
|
|
265
|
+
if (!task) {
|
|
266
|
+
throw new index_1.CLIError('adf bundle requires --task "<prompt>". Usage: charter adf bundle --task "Fix React component"');
|
|
267
|
+
}
|
|
268
|
+
const aiDir = getFlag(args, '--ai-dir') || '.ai';
|
|
269
|
+
const manifestPath = path.join(aiDir, 'manifest.adf');
|
|
270
|
+
if (!fs.existsSync(manifestPath)) {
|
|
271
|
+
throw new index_1.CLIError(`manifest.adf not found at ${manifestPath}. Run: charter adf init`);
|
|
272
|
+
}
|
|
273
|
+
const manifestContent = fs.readFileSync(manifestPath, 'utf-8');
|
|
274
|
+
const manifestDoc = (0, adf_1.parseAdf)(manifestContent);
|
|
275
|
+
const manifest = (0, adf_1.parseManifest)(manifestDoc);
|
|
276
|
+
// Tokenize task into keywords (simple word split)
|
|
277
|
+
const keywords = task
|
|
278
|
+
.split(/[\s,;:()[\]{}]+/)
|
|
279
|
+
.filter(w => w.length > 1)
|
|
280
|
+
.map(w => w.replace(/[^a-zA-Z0-9]/g, ''));
|
|
281
|
+
const modulePaths = (0, adf_1.resolveModules)(manifest, keywords);
|
|
282
|
+
const readFile = (p) => fs.readFileSync(p, 'utf-8');
|
|
283
|
+
try {
|
|
284
|
+
const result = (0, adf_1.bundleModules)(aiDir, modulePaths, readFile, keywords);
|
|
285
|
+
if (options.format === 'json') {
|
|
286
|
+
const jsonOut = {
|
|
287
|
+
task,
|
|
288
|
+
keywords,
|
|
289
|
+
resolvedModules: result.resolvedModules,
|
|
290
|
+
tokenEstimate: result.tokenEstimate,
|
|
291
|
+
tokenBudget: result.tokenBudget,
|
|
292
|
+
tokenUtilization: result.tokenUtilization,
|
|
293
|
+
perModuleTokens: result.perModuleTokens,
|
|
294
|
+
triggerMatches: result.triggerMatches,
|
|
295
|
+
};
|
|
296
|
+
if (result.unmatchedModules.length > 0) {
|
|
297
|
+
jsonOut.unmatchedModules = result.unmatchedModules;
|
|
298
|
+
}
|
|
299
|
+
if (result.moduleBudgetOverruns.length > 0) {
|
|
300
|
+
jsonOut.moduleBudgetOverruns = result.moduleBudgetOverruns;
|
|
301
|
+
}
|
|
302
|
+
if (result.advisoryOnlyModules.length > 0) {
|
|
303
|
+
jsonOut.advisoryOnlyModules = result.advisoryOnlyModules;
|
|
304
|
+
}
|
|
305
|
+
if (result.manifest.cadence.length > 0) {
|
|
306
|
+
jsonOut.cadence = result.manifest.cadence;
|
|
307
|
+
}
|
|
308
|
+
console.log(JSON.stringify(jsonOut, null, 2));
|
|
309
|
+
}
|
|
310
|
+
else {
|
|
311
|
+
console.log(` Task: "${task}"`);
|
|
312
|
+
console.log(` Keywords: ${keywords.join(', ')}`);
|
|
313
|
+
console.log(` Resolved modules: ${result.resolvedModules.join(', ')}`);
|
|
314
|
+
console.log(` Token estimate: ~${result.tokenEstimate}`);
|
|
315
|
+
if (result.tokenBudget !== null) {
|
|
316
|
+
const pct = result.tokenUtilization !== null
|
|
317
|
+
? ` (${(result.tokenUtilization * 100).toFixed(0)}%)`
|
|
318
|
+
: '';
|
|
319
|
+
console.log(` Token budget: ${result.tokenBudget}${pct}`);
|
|
320
|
+
}
|
|
321
|
+
console.log('');
|
|
322
|
+
if (result.moduleBudgetOverruns.length > 0) {
|
|
323
|
+
console.log(' Module budget overruns:');
|
|
324
|
+
for (const o of result.moduleBudgetOverruns) {
|
|
325
|
+
console.log(` [!] ${o.module}: ~${o.tokens} tokens (budget: ${o.budget})`);
|
|
326
|
+
}
|
|
327
|
+
console.log('');
|
|
328
|
+
}
|
|
329
|
+
if (result.triggerMatches.length > 0) {
|
|
330
|
+
console.log(' Trigger report:');
|
|
331
|
+
for (const tm of result.triggerMatches) {
|
|
332
|
+
const icon = tm.matched ? '+' : '-';
|
|
333
|
+
const kw = tm.matchedKeywords.length > 0 ? ` [${tm.matchedKeywords.join(', ')}]` : '';
|
|
334
|
+
console.log(` [${icon}] ${tm.module} (${tm.trigger})${kw}`);
|
|
335
|
+
}
|
|
336
|
+
console.log('');
|
|
337
|
+
}
|
|
338
|
+
if (result.unmatchedModules.length > 0) {
|
|
339
|
+
console.log(' Unmatched modules (not loaded):');
|
|
340
|
+
for (const m of result.unmatchedModules) {
|
|
341
|
+
console.log(` [-] ${m}`);
|
|
342
|
+
}
|
|
343
|
+
console.log('');
|
|
344
|
+
}
|
|
345
|
+
if (result.advisoryOnlyModules.length > 0) {
|
|
346
|
+
console.log(' Advisory-only modules:');
|
|
347
|
+
for (const m of result.advisoryOnlyModules) {
|
|
348
|
+
console.log(` [!] ${m}: no load-bearing sections`);
|
|
349
|
+
}
|
|
350
|
+
console.log('');
|
|
351
|
+
}
|
|
352
|
+
if (result.manifest.cadence.length > 0) {
|
|
353
|
+
console.log(' Cadence schedule:');
|
|
354
|
+
for (const c of result.manifest.cadence) {
|
|
355
|
+
console.log(` ${c.check}: ${c.frequency}`);
|
|
356
|
+
}
|
|
357
|
+
console.log('');
|
|
358
|
+
}
|
|
359
|
+
// Output merged document
|
|
360
|
+
const output = (0, adf_1.formatAdf)(result.mergedDocument);
|
|
361
|
+
console.log(' --- Merged Context ---');
|
|
362
|
+
console.log(output);
|
|
363
|
+
}
|
|
364
|
+
return index_1.EXIT_CODE.SUCCESS;
|
|
365
|
+
}
|
|
366
|
+
catch (e) {
|
|
367
|
+
if (e instanceof Error && e.name === 'AdfBundleError') {
|
|
368
|
+
if (options.format === 'json') {
|
|
369
|
+
console.log(JSON.stringify({ error: e.message }, null, 2));
|
|
370
|
+
}
|
|
371
|
+
else {
|
|
372
|
+
console.error(` [error] ${e.message}`);
|
|
373
|
+
}
|
|
374
|
+
return index_1.EXIT_CODE.RUNTIME_ERROR;
|
|
375
|
+
}
|
|
376
|
+
throw e;
|
|
377
|
+
}
|
|
378
|
+
}
|
|
379
|
+
function adfSync(options, args) {
|
|
380
|
+
const aiDir = getFlag(args, '--ai-dir') || '.ai';
|
|
381
|
+
const checkMode = args.includes('--check');
|
|
382
|
+
const writeMode = args.includes('--write');
|
|
383
|
+
if (!checkMode && !writeMode) {
|
|
384
|
+
throw new index_1.CLIError('adf sync requires --check or --write. Usage: charter adf sync --check');
|
|
385
|
+
}
|
|
386
|
+
const manifestPath = path.join(aiDir, 'manifest.adf');
|
|
387
|
+
if (!fs.existsSync(manifestPath)) {
|
|
388
|
+
throw new index_1.CLIError(`manifest.adf not found at ${manifestPath}. Run: charter adf init`);
|
|
389
|
+
}
|
|
390
|
+
const manifestContent = fs.readFileSync(manifestPath, 'utf-8');
|
|
391
|
+
const manifestDoc = (0, adf_1.parseAdf)(manifestContent);
|
|
392
|
+
const manifest = (0, adf_1.parseManifest)(manifestDoc);
|
|
393
|
+
if (manifest.sync.length === 0) {
|
|
394
|
+
const result = {
|
|
395
|
+
aiDir,
|
|
396
|
+
lockFile: path.join(aiDir, '.adf.lock'),
|
|
397
|
+
entries: [],
|
|
398
|
+
allInSync: true,
|
|
399
|
+
written: false,
|
|
400
|
+
};
|
|
401
|
+
if (options.format === 'json') {
|
|
402
|
+
console.log(JSON.stringify(result, null, 2));
|
|
403
|
+
}
|
|
404
|
+
else {
|
|
405
|
+
console.log(' No SYNC entries in manifest. Nothing to check.');
|
|
406
|
+
}
|
|
407
|
+
return index_1.EXIT_CODE.SUCCESS;
|
|
408
|
+
}
|
|
409
|
+
const lockFile = path.join(aiDir, '.adf.lock');
|
|
410
|
+
const locked = loadLockFile(lockFile);
|
|
411
|
+
const entries = [];
|
|
412
|
+
for (const entry of manifest.sync) {
|
|
413
|
+
const sourcePath = path.join(aiDir, entry.source);
|
|
414
|
+
if (!fs.existsSync(sourcePath)) {
|
|
415
|
+
throw new index_1.CLIError(`Sync source not found: ${sourcePath}`);
|
|
416
|
+
}
|
|
417
|
+
const sourceContent = fs.readFileSync(sourcePath, 'utf-8');
|
|
418
|
+
const sourceHash = hashContent(sourceContent);
|
|
419
|
+
const lockedHash = locked[entry.source] ?? null;
|
|
420
|
+
entries.push({
|
|
421
|
+
source: entry.source,
|
|
422
|
+
target: entry.target,
|
|
423
|
+
sourceHash,
|
|
424
|
+
lockedHash,
|
|
425
|
+
inSync: lockedHash === sourceHash,
|
|
426
|
+
});
|
|
427
|
+
}
|
|
428
|
+
const allInSync = entries.every(e => e.inSync);
|
|
429
|
+
if (writeMode) {
|
|
430
|
+
const newLock = {};
|
|
431
|
+
for (const e of entries) {
|
|
432
|
+
newLock[e.source] = e.sourceHash;
|
|
433
|
+
}
|
|
434
|
+
fs.writeFileSync(lockFile, JSON.stringify(newLock, null, 2) + '\n');
|
|
435
|
+
const result = {
|
|
436
|
+
aiDir,
|
|
437
|
+
lockFile,
|
|
438
|
+
entries,
|
|
439
|
+
allInSync: true,
|
|
440
|
+
written: true,
|
|
441
|
+
};
|
|
442
|
+
if (options.format === 'json') {
|
|
443
|
+
console.log(JSON.stringify(result, null, 2));
|
|
444
|
+
}
|
|
445
|
+
else {
|
|
446
|
+
console.log(` [ok] Updated ${lockFile} with ${entries.length} hash${entries.length === 1 ? '' : 'es'}.`);
|
|
447
|
+
}
|
|
448
|
+
return index_1.EXIT_CODE.SUCCESS;
|
|
449
|
+
}
|
|
450
|
+
// --check mode
|
|
451
|
+
const result = {
|
|
452
|
+
aiDir,
|
|
453
|
+
lockFile,
|
|
454
|
+
entries,
|
|
455
|
+
allInSync,
|
|
456
|
+
written: false,
|
|
457
|
+
};
|
|
458
|
+
if (options.format === 'json') {
|
|
459
|
+
const syncOut = { ...result };
|
|
460
|
+
if (!allInSync) {
|
|
461
|
+
syncOut.nextActions = ['Regenerate targets from source .adf files', 'charter adf sync --write'];
|
|
462
|
+
}
|
|
463
|
+
console.log(JSON.stringify(syncOut, null, 2));
|
|
464
|
+
}
|
|
465
|
+
else {
|
|
466
|
+
for (const e of entries) {
|
|
467
|
+
if (e.inSync) {
|
|
468
|
+
console.log(` [ok] ${e.source} -> ${e.target} (in sync)`);
|
|
469
|
+
}
|
|
470
|
+
else if (e.lockedHash === null) {
|
|
471
|
+
console.log(` [warn] ${e.source} -> ${e.target} (no lock entry — run: charter adf sync --write)`);
|
|
472
|
+
}
|
|
473
|
+
else {
|
|
474
|
+
console.log(` [fail] ${e.source} -> ${e.target} (source changed since last sync)`);
|
|
475
|
+
}
|
|
476
|
+
}
|
|
477
|
+
if (!allInSync) {
|
|
478
|
+
console.log('');
|
|
479
|
+
console.log(' Source .adf files have changed. Regenerate targets and run: charter adf sync --write');
|
|
480
|
+
}
|
|
481
|
+
}
|
|
482
|
+
return allInSync ? index_1.EXIT_CODE.SUCCESS : index_1.EXIT_CODE.POLICY_VIOLATION;
|
|
483
|
+
}
|
|
484
|
+
function hashContent(content) {
|
|
485
|
+
return crypto.createHash('sha256').update(content).digest('hex').slice(0, 16);
|
|
486
|
+
}
|
|
487
|
+
function loadLockFile(lockFile) {
|
|
488
|
+
if (!fs.existsSync(lockFile))
|
|
489
|
+
return {};
|
|
490
|
+
try {
|
|
491
|
+
return JSON.parse(fs.readFileSync(lockFile, 'utf-8'));
|
|
492
|
+
}
|
|
493
|
+
catch {
|
|
494
|
+
return {};
|
|
495
|
+
}
|
|
496
|
+
}
|
|
497
|
+
function adfEvidence(options, args) {
|
|
498
|
+
const task = getFlag(args, '--task');
|
|
499
|
+
const aiDir = getFlag(args, '--ai-dir') || '.ai';
|
|
500
|
+
const contextJson = getFlag(args, '--context');
|
|
501
|
+
const contextFile = getFlag(args, '--context-file');
|
|
502
|
+
const autoMeasure = args.includes('--auto-measure');
|
|
503
|
+
const manifestPath = path.join(aiDir, 'manifest.adf');
|
|
504
|
+
if (!fs.existsSync(manifestPath)) {
|
|
505
|
+
throw new index_1.CLIError(`manifest.adf not found at ${manifestPath}. Run: charter adf init`);
|
|
506
|
+
}
|
|
507
|
+
const manifestContent = fs.readFileSync(manifestPath, 'utf-8');
|
|
508
|
+
const manifestDoc = (0, adf_1.parseAdf)(manifestContent);
|
|
509
|
+
const manifest = (0, adf_1.parseManifest)(manifestDoc);
|
|
510
|
+
// Resolve modules
|
|
511
|
+
let modulePaths;
|
|
512
|
+
let keywords = [];
|
|
513
|
+
if (task) {
|
|
514
|
+
keywords = task
|
|
515
|
+
.split(/[\s,;:()[\]{}]+/)
|
|
516
|
+
.filter(w => w.length > 1)
|
|
517
|
+
.map(w => w.replace(/[^a-zA-Z0-9]/g, ''));
|
|
518
|
+
modulePaths = (0, adf_1.resolveModules)(manifest, keywords);
|
|
519
|
+
}
|
|
520
|
+
else {
|
|
521
|
+
modulePaths = [...manifest.defaultLoad];
|
|
522
|
+
}
|
|
523
|
+
const readFile = (p) => fs.readFileSync(p, 'utf-8');
|
|
524
|
+
let context;
|
|
525
|
+
const rawContext = contextFile ? readJsonFlag(contextFile, '--context-file') : contextJson;
|
|
526
|
+
if (rawContext) {
|
|
527
|
+
try {
|
|
528
|
+
const parsed = JSON.parse(rawContext);
|
|
529
|
+
if (typeof parsed !== 'object' || parsed === null || Array.isArray(parsed)) {
|
|
530
|
+
throw new Error('must be a JSON object');
|
|
531
|
+
}
|
|
532
|
+
context = parsed;
|
|
533
|
+
}
|
|
534
|
+
catch (e) {
|
|
535
|
+
const msg = e instanceof Error ? e.message : String(e);
|
|
536
|
+
throw new index_1.CLIError(`Invalid --context JSON: ${msg}`);
|
|
537
|
+
}
|
|
538
|
+
}
|
|
539
|
+
// Auto-measure: count lines in files referenced by manifest METRICS
|
|
540
|
+
// Manifest keys are UPPERCASE (parser map disambiguation), metric keys are lowercase.
|
|
541
|
+
const autoMeasured = [];
|
|
542
|
+
if (autoMeasure && manifest.metrics.length > 0) {
|
|
543
|
+
const measured = {};
|
|
544
|
+
for (const ms of manifest.metrics) {
|
|
545
|
+
const metricKey = ms.key.toLowerCase();
|
|
546
|
+
const filePath = path.resolve(ms.path);
|
|
547
|
+
if (fs.existsSync(filePath)) {
|
|
548
|
+
const content = fs.readFileSync(filePath, 'utf-8');
|
|
549
|
+
const lines = content.split('\n').length;
|
|
550
|
+
measured[metricKey] = lines;
|
|
551
|
+
autoMeasured.push({ metric: metricKey, path: ms.path, lines });
|
|
552
|
+
}
|
|
553
|
+
else {
|
|
554
|
+
autoMeasured.push({ metric: metricKey, path: ms.path, lines: null, error: 'file not found' });
|
|
555
|
+
}
|
|
556
|
+
}
|
|
557
|
+
// Merge: explicit --context wins over auto-measured
|
|
558
|
+
context = { ...measured, ...context };
|
|
559
|
+
}
|
|
560
|
+
try {
|
|
561
|
+
const bundle = (0, adf_1.bundleModules)(aiDir, modulePaths, readFile, keywords);
|
|
562
|
+
const evidence = (0, adf_1.validateConstraints)(bundle.mergedDocument, context);
|
|
563
|
+
// Check sync status
|
|
564
|
+
const lockFile = path.join(aiDir, '.adf.lock');
|
|
565
|
+
const locked = loadLockFile(lockFile);
|
|
566
|
+
const syncEntries = [];
|
|
567
|
+
for (const entry of manifest.sync) {
|
|
568
|
+
const sourcePath = path.join(aiDir, entry.source);
|
|
569
|
+
if (fs.existsSync(sourcePath)) {
|
|
570
|
+
const sourceContent = fs.readFileSync(sourcePath, 'utf-8');
|
|
571
|
+
const sourceHash = hashContent(sourceContent);
|
|
572
|
+
const lockedHash = locked[entry.source] ?? null;
|
|
573
|
+
syncEntries.push({ source: entry.source, inSync: lockedHash === sourceHash });
|
|
574
|
+
}
|
|
575
|
+
}
|
|
576
|
+
const allInSync = syncEntries.length === 0 || syncEntries.every(e => e.inSync);
|
|
577
|
+
const staleCount = syncEntries.filter(e => !e.inSync).length;
|
|
578
|
+
if (options.format === 'json') {
|
|
579
|
+
const jsonOut = {
|
|
580
|
+
aiDir,
|
|
581
|
+
resolvedModules: bundle.resolvedModules,
|
|
582
|
+
tokenEstimate: bundle.tokenEstimate,
|
|
583
|
+
tokenBudget: bundle.tokenBudget,
|
|
584
|
+
tokenUtilization: bundle.tokenUtilization,
|
|
585
|
+
constraints: evidence.constraints,
|
|
586
|
+
weightSummary: evidence.weightSummary,
|
|
587
|
+
allPassing: evidence.allPassing,
|
|
588
|
+
failCount: evidence.failCount,
|
|
589
|
+
warnCount: evidence.warnCount,
|
|
590
|
+
syncStatus: { allInSync, staleCount },
|
|
591
|
+
};
|
|
592
|
+
if (task) {
|
|
593
|
+
jsonOut.task = task;
|
|
594
|
+
jsonOut.keywords = keywords;
|
|
595
|
+
}
|
|
596
|
+
if (bundle.advisoryOnlyModules.length > 0) {
|
|
597
|
+
jsonOut.advisoryOnlyModules = bundle.advisoryOnlyModules;
|
|
598
|
+
}
|
|
599
|
+
if (autoMeasured.length > 0) {
|
|
600
|
+
jsonOut.autoMeasured = autoMeasured;
|
|
601
|
+
}
|
|
602
|
+
// Suggest logical next steps based on results
|
|
603
|
+
const nextActions = [];
|
|
604
|
+
if (!evidence.allPassing) {
|
|
605
|
+
nextActions.push('Fix failing constraints before merging');
|
|
606
|
+
}
|
|
607
|
+
if (!allInSync) {
|
|
608
|
+
nextActions.push('charter adf sync --write');
|
|
609
|
+
}
|
|
610
|
+
if (evidence.warnCount > 0) {
|
|
611
|
+
nextActions.push('Review metrics at ceiling boundary');
|
|
612
|
+
}
|
|
613
|
+
if (nextActions.length > 0) {
|
|
614
|
+
jsonOut.nextActions = nextActions;
|
|
615
|
+
}
|
|
616
|
+
console.log(JSON.stringify(jsonOut, null, 2));
|
|
617
|
+
}
|
|
618
|
+
else {
|
|
619
|
+
console.log('');
|
|
620
|
+
console.log(' ADF Evidence Report');
|
|
621
|
+
console.log(' ===================');
|
|
622
|
+
console.log(` Modules loaded: ${bundle.resolvedModules.join(', ')}`);
|
|
623
|
+
console.log(` Token estimate: ~${bundle.tokenEstimate}`);
|
|
624
|
+
if (bundle.tokenBudget !== null) {
|
|
625
|
+
const pct = bundle.tokenUtilization !== null
|
|
626
|
+
? ` (${(bundle.tokenUtilization * 100).toFixed(0)}%)`
|
|
627
|
+
: '';
|
|
628
|
+
console.log(` Token budget: ${bundle.tokenBudget}${pct}`);
|
|
629
|
+
}
|
|
630
|
+
console.log('');
|
|
631
|
+
// Auto-measured metrics
|
|
632
|
+
if (autoMeasured.length > 0) {
|
|
633
|
+
console.log(' Auto-measured:');
|
|
634
|
+
for (const m of autoMeasured) {
|
|
635
|
+
if (m.lines !== null) {
|
|
636
|
+
console.log(` ${m.metric}: ${m.lines} lines (${m.path})`);
|
|
637
|
+
}
|
|
638
|
+
else {
|
|
639
|
+
console.log(` ${m.metric}: [file not found] (${m.path})`);
|
|
640
|
+
}
|
|
641
|
+
}
|
|
642
|
+
console.log('');
|
|
643
|
+
}
|
|
644
|
+
// Weight summary
|
|
645
|
+
console.log(' Section weights:');
|
|
646
|
+
console.log(` Load-bearing: ${evidence.weightSummary.loadBearing}`);
|
|
647
|
+
console.log(` Advisory: ${evidence.weightSummary.advisory}`);
|
|
648
|
+
console.log(` Unweighted: ${evidence.weightSummary.unweighted}`);
|
|
649
|
+
console.log('');
|
|
650
|
+
// Advisory-only module warnings
|
|
651
|
+
if (bundle.advisoryOnlyModules.length > 0) {
|
|
652
|
+
console.log(' Advisory-only modules:');
|
|
653
|
+
for (const m of bundle.advisoryOnlyModules) {
|
|
654
|
+
console.log(` [!] ${m}: no load-bearing sections`);
|
|
655
|
+
}
|
|
656
|
+
console.log('');
|
|
657
|
+
}
|
|
658
|
+
// Constraints
|
|
659
|
+
if (evidence.constraints.length > 0) {
|
|
660
|
+
console.log(' Constraints:');
|
|
661
|
+
for (const c of evidence.constraints) {
|
|
662
|
+
const icon = c.status === 'pass' ? 'ok' : c.status === 'warn' ? 'WARN' : 'FAIL';
|
|
663
|
+
console.log(` [${icon}] ${c.message}`);
|
|
664
|
+
}
|
|
665
|
+
}
|
|
666
|
+
else {
|
|
667
|
+
console.log(' Constraints: (none)');
|
|
668
|
+
}
|
|
669
|
+
console.log('');
|
|
670
|
+
// Sync status
|
|
671
|
+
if (syncEntries.length > 0) {
|
|
672
|
+
if (allInSync) {
|
|
673
|
+
console.log(' Sync: all sources in sync');
|
|
674
|
+
}
|
|
675
|
+
else {
|
|
676
|
+
console.log(` Sync: ${staleCount} source${staleCount === 1 ? '' : 's'} out of sync`);
|
|
677
|
+
}
|
|
678
|
+
}
|
|
679
|
+
else {
|
|
680
|
+
console.log(' Sync: no sync entries configured');
|
|
681
|
+
}
|
|
682
|
+
console.log('');
|
|
683
|
+
// Verdict
|
|
684
|
+
const verdict = evidence.allPassing ? 'PASS' : 'FAIL';
|
|
685
|
+
console.log(` Verdict: ${verdict}`);
|
|
686
|
+
if (evidence.warnCount > 0) {
|
|
687
|
+
console.log(` (${evidence.warnCount} warning${evidence.warnCount === 1 ? '' : 's'} — at ceiling boundary)`);
|
|
688
|
+
}
|
|
689
|
+
console.log('');
|
|
690
|
+
}
|
|
691
|
+
// CI mode: exit 1 on constraint failures
|
|
692
|
+
if (options.ciMode && !evidence.allPassing) {
|
|
693
|
+
return index_1.EXIT_CODE.POLICY_VIOLATION;
|
|
694
|
+
}
|
|
695
|
+
return index_1.EXIT_CODE.SUCCESS;
|
|
696
|
+
}
|
|
697
|
+
catch (e) {
|
|
698
|
+
if (e instanceof Error && e.name === 'AdfBundleError') {
|
|
699
|
+
if (options.format === 'json') {
|
|
700
|
+
console.log(JSON.stringify({ error: e.message }, null, 2));
|
|
701
|
+
}
|
|
702
|
+
else {
|
|
703
|
+
console.error(` [error] ${e.message}`);
|
|
704
|
+
}
|
|
705
|
+
return index_1.EXIT_CODE.RUNTIME_ERROR;
|
|
706
|
+
}
|
|
707
|
+
throw e;
|
|
708
|
+
}
|
|
709
|
+
}
|
|
710
|
+
// ============================================================================
|
|
711
|
+
// Helpers
|
|
712
|
+
// ============================================================================
|
|
713
|
+
function getFlag(args, flag) {
|
|
714
|
+
const idx = args.indexOf(flag);
|
|
715
|
+
if (idx !== -1 && idx + 1 < args.length) {
|
|
716
|
+
return args[idx + 1];
|
|
717
|
+
}
|
|
718
|
+
return undefined;
|
|
719
|
+
}
|
|
720
|
+
function readJsonFlag(filePath, flagName) {
|
|
721
|
+
if (!fs.existsSync(filePath)) {
|
|
722
|
+
throw new index_1.CLIError(`File not found for ${flagName}: ${filePath}`);
|
|
723
|
+
}
|
|
724
|
+
return fs.readFileSync(filePath, 'utf-8');
|
|
725
|
+
}
|
|
726
|
+
function printHelp() {
|
|
727
|
+
console.log('');
|
|
728
|
+
console.log(' charter adf — Attention-Directed Format tools');
|
|
729
|
+
console.log('');
|
|
730
|
+
console.log(' Usage:');
|
|
731
|
+
console.log(' charter adf init [--ai-dir <dir>] [--force]');
|
|
732
|
+
console.log(' Scaffold .ai/ directory with manifest, core, and state modules.');
|
|
733
|
+
console.log('');
|
|
734
|
+
console.log(' charter adf fmt <file> [--check] [--write]');
|
|
735
|
+
console.log(' Parse and reformat an ADF file to canonical form.');
|
|
736
|
+
console.log(' --check: exit 1 if not canonical (no write)');
|
|
737
|
+
console.log(' --write: reformat file in place');
|
|
738
|
+
console.log(' Default: print formatted output to stdout.');
|
|
739
|
+
console.log('');
|
|
740
|
+
console.log(' charter adf patch <file> --ops <json> | --ops-file <path>');
|
|
741
|
+
console.log(' Apply ADF_PATCH operations to a file.');
|
|
742
|
+
console.log('');
|
|
743
|
+
console.log(' charter adf bundle --task "<prompt>" [--ai-dir <dir>]');
|
|
744
|
+
console.log(' Resolve manifest modules for a task and output merged context.');
|
|
745
|
+
console.log('');
|
|
746
|
+
console.log(' charter adf sync --check [--ai-dir <dir>]');
|
|
747
|
+
console.log(' Verify source .adf files match their locked hashes.');
|
|
748
|
+
console.log(' Exit 1 if any source has changed since last sync.');
|
|
749
|
+
console.log('');
|
|
750
|
+
console.log(' charter adf sync --write [--ai-dir <dir>]');
|
|
751
|
+
console.log(' Update .adf.lock with current source hashes.');
|
|
752
|
+
console.log('');
|
|
753
|
+
console.log(' charter adf evidence [--task "<prompt>"] [--ai-dir <dir>] [--auto-measure]');
|
|
754
|
+
console.log(' [--context \'{"key": value}\']');
|
|
755
|
+
console.log(' Validate metric constraints and produce a structured evidence report.');
|
|
756
|
+
console.log(' --task: resolve on-demand modules for task. Omit for defaultLoad only.');
|
|
757
|
+
console.log(' --auto-measure: count lines in files from manifest METRICS section.');
|
|
758
|
+
console.log(' --context: JSON object of external metric overrides (wins over auto).');
|
|
759
|
+
console.log(' --context-file: read --context JSON from a file instead.');
|
|
760
|
+
console.log(' In --ci mode, exit 1 if any constraint fails.');
|
|
761
|
+
console.log('');
|
|
762
|
+
}
|
|
763
|
+
//# sourceMappingURL=adf.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adf.js","sourceRoot":"","sources":["../../src/commands/adf.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAc3C,wBAAsB,aAAa,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAkIxE"}
|
package/dist/commands/doctor.js
CHANGED
|
@@ -44,6 +44,7 @@ const fs = __importStar(require("node:fs"));
|
|
|
44
44
|
const path = __importStar(require("node:path"));
|
|
45
45
|
const index_1 = require("../index");
|
|
46
46
|
const config_1 = require("../config");
|
|
47
|
+
const adf_1 = require("@stackbilt/adf");
|
|
47
48
|
async function doctorCommand(options) {
|
|
48
49
|
const checks = [];
|
|
49
50
|
const configFile = path.join(options.configPath, 'config.json');
|
|
@@ -79,6 +80,69 @@ async function doctorCommand(options) {
|
|
|
79
80
|
status: policyCount > 0 ? 'PASS' : 'WARN',
|
|
80
81
|
details: policyCount > 0 ? `${policyCount} markdown policy file(s).` : 'No policy markdown files found.',
|
|
81
82
|
});
|
|
83
|
+
// ADF readiness checks
|
|
84
|
+
const aiDir = '.ai';
|
|
85
|
+
const manifestPath = path.join(aiDir, 'manifest.adf');
|
|
86
|
+
const hasManifest = fs.existsSync(manifestPath);
|
|
87
|
+
checks.push({
|
|
88
|
+
name: 'adf manifest',
|
|
89
|
+
status: hasManifest ? 'PASS' : 'WARN',
|
|
90
|
+
details: hasManifest ? `${manifestPath} exists.` : `${manifestPath} not found. Run: charter adf init`,
|
|
91
|
+
});
|
|
92
|
+
if (hasManifest) {
|
|
93
|
+
try {
|
|
94
|
+
const manifestContent = fs.readFileSync(manifestPath, 'utf-8');
|
|
95
|
+
const manifestDoc = (0, adf_1.parseAdf)(manifestContent);
|
|
96
|
+
const manifest = (0, adf_1.parseManifest)(manifestDoc);
|
|
97
|
+
checks.push({
|
|
98
|
+
name: 'adf manifest parse',
|
|
99
|
+
status: 'PASS',
|
|
100
|
+
details: `Parsed: ${manifest.defaultLoad.length} default-load, ${manifest.onDemand.length} on-demand module(s).`,
|
|
101
|
+
});
|
|
102
|
+
// Check that all defaultLoad modules exist and parse
|
|
103
|
+
const missingModules = [];
|
|
104
|
+
for (const mod of manifest.defaultLoad) {
|
|
105
|
+
const modPath = path.join(aiDir, mod);
|
|
106
|
+
if (!fs.existsSync(modPath)) {
|
|
107
|
+
missingModules.push(mod);
|
|
108
|
+
}
|
|
109
|
+
else {
|
|
110
|
+
try {
|
|
111
|
+
(0, adf_1.parseAdf)(fs.readFileSync(modPath, 'utf-8'));
|
|
112
|
+
}
|
|
113
|
+
catch {
|
|
114
|
+
missingModules.push(`${mod} (parse error)`);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
checks.push({
|
|
119
|
+
name: 'adf default modules',
|
|
120
|
+
status: missingModules.length === 0 ? 'PASS' : 'WARN',
|
|
121
|
+
details: missingModules.length === 0
|
|
122
|
+
? `All ${manifest.defaultLoad.length} default-load module(s) present and parseable.`
|
|
123
|
+
: `Missing or unparseable: ${missingModules.join(', ')}`,
|
|
124
|
+
});
|
|
125
|
+
// Sync lock status
|
|
126
|
+
if (manifest.sync.length > 0) {
|
|
127
|
+
const lockFile = path.join(aiDir, '.adf.lock');
|
|
128
|
+
const hasLock = fs.existsSync(lockFile);
|
|
129
|
+
checks.push({
|
|
130
|
+
name: 'adf sync lock',
|
|
131
|
+
status: hasLock ? 'PASS' : 'WARN',
|
|
132
|
+
details: hasLock
|
|
133
|
+
? `${lockFile} exists (${manifest.sync.length} sync entry/entries).`
|
|
134
|
+
: `${lockFile} not found. Run: charter adf sync --write`,
|
|
135
|
+
});
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
catch {
|
|
139
|
+
checks.push({
|
|
140
|
+
name: 'adf manifest parse',
|
|
141
|
+
status: 'WARN',
|
|
142
|
+
details: `${manifestPath} failed to parse.`,
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
}
|
|
82
146
|
const hasWarn = checks.some((check) => check.status === 'WARN');
|
|
83
147
|
const result = {
|
|
84
148
|
status: hasWarn ? 'WARN' : 'PASS',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAkDH,eAAO,MAAM,SAAS;;;;CAIZ,CAAC;AAEX,qBAAa,QAAS,SAAQ,KAAK;aAGf,QAAQ,EAAE,MAAM;gBADhC,OAAO,EAAE,MAAM,EACC,QAAQ,GAAE,MAAgC;CAK7D;AAED,MAAM,WAAW,UAAU;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,MAAM,EAAE,OAAO,CAAC;IAChB,GAAG,EAAE,OAAO,CAAC;CACd;AAED,wBAAsB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAsDzD"}
|
package/dist/index.js
CHANGED
|
@@ -20,6 +20,7 @@ const drift_1 = require("./commands/drift");
|
|
|
20
20
|
const classify_1 = require("./commands/classify");
|
|
21
21
|
const why_1 = require("./commands/why");
|
|
22
22
|
const hook_1 = require("./commands/hook");
|
|
23
|
+
const adf_1 = require("./commands/adf");
|
|
23
24
|
const package_json_1 = __importDefault(require("../package.json"));
|
|
24
25
|
const CLI_VERSION = package_json_1.default.version;
|
|
25
26
|
const HELP = `
|
|
@@ -39,6 +40,7 @@ Usage:
|
|
|
39
40
|
charter classify <subject> Classify a change (SURFACE/LOCAL/CROSS_CUTTING)
|
|
40
41
|
charter hook install --commit-msg
|
|
41
42
|
Install git commit-msg hook for trailer normalization
|
|
43
|
+
charter adf <subcommand> ADF context format tools (init, fmt, patch, bundle, sync, evidence)
|
|
42
44
|
charter why Explain why teams adopt Charter and expected ROI
|
|
43
45
|
charter doctor Check CLI + config health
|
|
44
46
|
charter --help Show this help
|
|
@@ -111,6 +113,8 @@ async function run(args) {
|
|
|
111
113
|
return (0, doctor_1.doctorCommand)(options);
|
|
112
114
|
case 'hook':
|
|
113
115
|
return (0, hook_1.hookCommand)(options, restArgs);
|
|
116
|
+
case 'adf':
|
|
117
|
+
return (0, adf_1.adfCommand)(options, restArgs);
|
|
114
118
|
default:
|
|
115
119
|
throw new CLIError(`Unknown command: ${command}\n${HELP}`);
|
|
116
120
|
}
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;;;;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@stackbilt/cli",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.0",
|
|
4
4
|
"description": "Charter CLI — repo-level governance checks",
|
|
5
5
|
"bin": {
|
|
6
6
|
"charter": "./dist/bin.js"
|
|
@@ -34,12 +34,13 @@
|
|
|
34
34
|
"access": "public"
|
|
35
35
|
},
|
|
36
36
|
"dependencies": {
|
|
37
|
-
"@stackbilt/types": "^0.
|
|
38
|
-
"@stackbilt/core": "^0.
|
|
39
|
-
"@stackbilt/git": "^0.
|
|
40
|
-
"@stackbilt/classify": "^0.
|
|
41
|
-
"@stackbilt/validate": "^0.
|
|
42
|
-
"@stackbilt/
|
|
37
|
+
"@stackbilt/types": "^0.3.0",
|
|
38
|
+
"@stackbilt/core": "^0.3.0",
|
|
39
|
+
"@stackbilt/git": "^0.3.0",
|
|
40
|
+
"@stackbilt/classify": "^0.3.0",
|
|
41
|
+
"@stackbilt/validate": "^0.3.0",
|
|
42
|
+
"@stackbilt/adf": "^0.3.0",
|
|
43
|
+
"@stackbilt/drift": "^0.3.0"
|
|
43
44
|
},
|
|
44
45
|
"license": "Apache-2.0",
|
|
45
46
|
"scripts": {
|