@stackbilt/cli 0.1.20 → 0.2.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 +87 -67
- package/dist/commands/adf.d.ts +8 -0
- package/dist/commands/adf.d.ts.map +1 -0
- package/dist/commands/adf.js +342 -0
- package/dist/commands/adf.js.map +1 -0
- 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,9 @@ 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"
|
|
65
68
|
```
|
|
66
69
|
|
|
67
70
|
## Human Onboarding (Copy/Paste)
|
|
@@ -132,9 +135,9 @@ npx charter audit --format json
|
|
|
132
135
|
npx charter doctor --format json
|
|
133
136
|
npx charter audit --format json
|
|
134
137
|
```
|
|
135
|
-
|
|
136
|
-
## Commands
|
|
137
|
-
|
|
138
|
+
|
|
139
|
+
## Commands
|
|
140
|
+
|
|
138
141
|
### `charter` (no args)
|
|
139
142
|
|
|
140
143
|
Default first-run experience. Shows:
|
|
@@ -169,20 +172,20 @@ Detection output includes `detected.sources` in JSON mode so agents can verify w
|
|
|
169
172
|
Setup also adds optional root scripts when missing: `charter:detect` and `charter:setup`.
|
|
170
173
|
Setup JSON now includes `mutationPlan` and `appliedMutations` so side effects are explicit before/after apply.
|
|
171
174
|
Setup baseline mutation metadata now includes `configHashBefore`, `configHashAfter`, and `writesPerformed`.
|
|
172
|
-
|
|
175
|
+
|
|
173
176
|
### `charter init`
|
|
174
177
|
|
|
175
178
|
Scaffold `.charter/` config templates only. Supports `--preset worker|frontend|backend|fullstack`.
|
|
176
|
-
|
|
177
|
-
### `charter doctor`
|
|
178
|
-
|
|
179
|
-
Validate CLI installation and `.charter/` config.
|
|
180
|
-
|
|
179
|
+
|
|
180
|
+
### `charter doctor`
|
|
181
|
+
|
|
182
|
+
Validate CLI installation and `.charter/` config.
|
|
183
|
+
|
|
181
184
|
### `charter validate`
|
|
182
185
|
|
|
183
186
|
Validate git commits for `Governed-By` and `Resolves-Request` trailers.
|
|
184
|
-
|
|
185
|
-
```bash
|
|
187
|
+
|
|
188
|
+
```bash
|
|
186
189
|
charter validate --ci --format json
|
|
187
190
|
charter validate --range HEAD~10..HEAD --format json
|
|
188
191
|
```
|
|
@@ -213,17 +216,17 @@ Resolves-Request: REQ-078
|
|
|
213
216
|
|
|
214
217
|
Co-Authored-By: Dev <dev@example.com>
|
|
215
218
|
```
|
|
216
|
-
|
|
219
|
+
|
|
217
220
|
### `charter drift`
|
|
218
|
-
|
|
219
|
-
Scan files against blessed-stack patterns in `.charter/patterns/*.json`.
|
|
220
|
-
|
|
221
|
-
```bash
|
|
221
|
+
|
|
222
|
+
Scan files against blessed-stack patterns in `.charter/patterns/*.json`.
|
|
223
|
+
|
|
224
|
+
```bash
|
|
222
225
|
charter drift --path ./src --ci
|
|
223
226
|
```
|
|
224
227
|
|
|
225
228
|
JSON output includes `patternsCustomized` when pattern files declare customization metadata.
|
|
226
|
-
|
|
229
|
+
|
|
227
230
|
### `charter audit`
|
|
228
231
|
|
|
229
232
|
Generate a governance audit report covering trailers, risk, drift, and policy-section coverage quality.
|
|
@@ -231,12 +234,12 @@ Use `--range <revset>` to audit the same commit window used by validation in rev
|
|
|
231
234
|
|
|
232
235
|
If score is held down by trailer coverage, enforce `validate --ci` in PR checks and add commit-template guidance for required trailers.
|
|
233
236
|
Audit output includes whether preset pattern files are still uncustomized when metadata is present.
|
|
234
|
-
|
|
237
|
+
|
|
235
238
|
### `charter classify`
|
|
236
|
-
|
|
237
|
-
Classify a change as `SURFACE`, `LOCAL`, or `CROSS_CUTTING`.
|
|
238
|
-
|
|
239
|
-
```bash
|
|
239
|
+
|
|
240
|
+
Classify a change as `SURFACE`, `LOCAL`, or `CROSS_CUTTING`.
|
|
241
|
+
|
|
242
|
+
```bash
|
|
240
243
|
charter classify "update button color"
|
|
241
244
|
```
|
|
242
245
|
|
|
@@ -249,43 +252,60 @@ charter hook install --commit-msg
|
|
|
249
252
|
```
|
|
250
253
|
|
|
251
254
|
`--force` (or global `--yes`) allows overwrite when a non-Charter `commit-msg` hook already exists.
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
255
|
+
|
|
256
|
+
### `charter adf`
|
|
257
|
+
|
|
258
|
+
ADF (Attention-Directed Format) context management. Replaces monolithic `.cursorrules`/`claude.md` files with a modular, AST-backed `.ai/` directory.
|
|
259
|
+
|
|
260
|
+
```bash
|
|
261
|
+
charter adf init [--ai-dir <dir>] [--force]
|
|
262
|
+
charter adf fmt <file> [--check] [--write]
|
|
263
|
+
charter adf patch <file> --ops '<json>'
|
|
264
|
+
charter adf bundle --task "Fix React component" [--ai-dir <dir>]
|
|
265
|
+
```
|
|
266
|
+
|
|
267
|
+
- `init`: Scaffold `.ai/` with `manifest.adf`, `core.adf`, and `state.adf`.
|
|
268
|
+
- `fmt`: Parse and reformat to canonical ADF. `--check` exits 1 if not canonical. `--write` reformats in place. Default prints to stdout.
|
|
269
|
+
- `patch`: Apply typed delta operations (ADD_BULLET, REPLACE_BULLET, REMOVE_BULLET, ADD_SECTION, REPLACE_SECTION, REMOVE_SECTION).
|
|
270
|
+
- `bundle`: Read `manifest.adf`, resolve ON_DEMAND modules via keyword matching against the task, and output merged context with token estimate.
|
|
271
|
+
|
|
272
|
+
## Global Options
|
|
273
|
+
|
|
274
|
+
| Option | Description | Default |
|
|
275
|
+
|---|---|---|
|
|
276
|
+
| `--config <path>` | Path to `.charter/` directory | `.charter/` |
|
|
277
|
+
| `--format <mode>` | Output: `text` or `json` | `text` |
|
|
278
|
+
| `--ci` | CI mode: exit non-zero on WARN or FAIL | off |
|
|
260
279
|
| `--yes` | Auto-accept safe setup overwrites | off |
|
|
261
280
|
|
|
262
281
|
Setup-only options:
|
|
263
282
|
- `--preset <worker|frontend|backend|fullstack>`: override auto-detected preset
|
|
264
283
|
- `--detect-only`: print stack detection result and selected preset without writing files
|
|
265
284
|
- `--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
|
-
|
|
285
|
+
|
|
286
|
+
## Exit Codes
|
|
287
|
+
|
|
288
|
+
| Code | Meaning |
|
|
289
|
+
|------|---------|
|
|
290
|
+
| 0 | Success |
|
|
291
|
+
| 1 | Policy violation (CI mode) |
|
|
292
|
+
| 2 | Runtime or usage error |
|
|
293
|
+
|
|
294
|
+
## Related Packages
|
|
295
|
+
|
|
296
|
+
- `@stackbilt/types` -- shared enums and interfaces
|
|
297
|
+
- `@stackbilt/core` -- Zod schemas and sanitization helpers
|
|
298
|
+
- `@stackbilt/git` -- trailer parsing and commit risk assessment
|
|
299
|
+
- `@stackbilt/classify` -- heuristic change classification
|
|
300
|
+
- `@stackbilt/drift` -- blessed-stack pattern drift detection
|
|
301
|
+
- `@stackbilt/validate` -- citation validation and intent classification
|
|
302
|
+
- `@stackbilt/adf` -- ADF parser, formatter, patcher, and bundler
|
|
303
|
+
- `@stackbilt/ci` -- GitHub Actions integration helpers
|
|
304
|
+
|
|
305
|
+
## License
|
|
306
|
+
|
|
307
|
+
Apache-2.0
|
|
308
|
+
|
|
309
|
+
## Repository
|
|
310
|
+
|
|
311
|
+
[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.
|
|
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;AAaH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AA8C3C,wBAAsB,UAAU,CAAC,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAqBrF"}
|
|
@@ -0,0 +1,342 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* charter adf
|
|
4
|
+
*
|
|
5
|
+
* ADF (Attention-Directed Format) subcommands: init, fmt, patch, bundle.
|
|
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 adf_1 = require("@stackbilt/adf");
|
|
45
|
+
const index_1 = require("../index");
|
|
46
|
+
// ============================================================================
|
|
47
|
+
// Scaffold Content
|
|
48
|
+
// ============================================================================
|
|
49
|
+
const MANIFEST_SCAFFOLD = `ADF: 0.1
|
|
50
|
+
\u{1F3AF} ROLE: Repo context router
|
|
51
|
+
|
|
52
|
+
\u{1F4E6} DEFAULT_LOAD:
|
|
53
|
+
- core.adf
|
|
54
|
+
- state.adf
|
|
55
|
+
|
|
56
|
+
\u{1F4C2} ON_DEMAND:
|
|
57
|
+
- frontend.adf (Triggers on: React, CSS, UI)
|
|
58
|
+
- backend.adf (Triggers on: API, Node, DB)
|
|
59
|
+
|
|
60
|
+
\u{1F4D0} RULES:
|
|
61
|
+
- Prefer smallest relevant module set.
|
|
62
|
+
- Never assume unseen modules were loaded.
|
|
63
|
+
`;
|
|
64
|
+
const CORE_SCAFFOLD = `ADF: 0.1
|
|
65
|
+
\u{1F3AF} TASK: Define universal repository rules
|
|
66
|
+
|
|
67
|
+
\u{2699}\u{FE0F} CONTEXT:
|
|
68
|
+
- This file is loaded by default for every task.
|
|
69
|
+
- Keep it lean — add domain-specific rules to on-demand modules.
|
|
70
|
+
|
|
71
|
+
\u{26A0}\u{FE0F} CONSTRAINTS:
|
|
72
|
+
- Follow conventional commits.
|
|
73
|
+
- No secrets in source code.
|
|
74
|
+
- Prefer pure functions in library code.
|
|
75
|
+
`;
|
|
76
|
+
const STATE_SCAFFOLD = `ADF: 0.1
|
|
77
|
+
\u{1F9E0} STATE:
|
|
78
|
+
CURRENT: Repository initialized with ADF context system
|
|
79
|
+
NEXT: Configure on-demand modules for your stack
|
|
80
|
+
`;
|
|
81
|
+
// ============================================================================
|
|
82
|
+
// Dispatcher
|
|
83
|
+
// ============================================================================
|
|
84
|
+
async function adfCommand(options, args) {
|
|
85
|
+
if (args.length === 0 || args.includes('--help') || args.includes('-h')) {
|
|
86
|
+
printHelp();
|
|
87
|
+
return index_1.EXIT_CODE.SUCCESS;
|
|
88
|
+
}
|
|
89
|
+
const subcommand = args[0];
|
|
90
|
+
const restArgs = args.slice(1);
|
|
91
|
+
switch (subcommand) {
|
|
92
|
+
case 'init':
|
|
93
|
+
return adfInit(options, restArgs);
|
|
94
|
+
case 'fmt':
|
|
95
|
+
return adfFmt(options, restArgs);
|
|
96
|
+
case 'patch':
|
|
97
|
+
return adfPatch(options, restArgs);
|
|
98
|
+
case 'bundle':
|
|
99
|
+
return adfBundle(options, restArgs);
|
|
100
|
+
default:
|
|
101
|
+
throw new index_1.CLIError(`Unknown adf subcommand: ${subcommand}. Supported: init, fmt, patch, bundle`);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
function adfInit(options, args) {
|
|
105
|
+
const force = options.yes || args.includes('--force');
|
|
106
|
+
const aiDir = getFlag(args, '--ai-dir') || '.ai';
|
|
107
|
+
const manifestPath = path.join(aiDir, 'manifest.adf');
|
|
108
|
+
if (fs.existsSync(manifestPath) && !force) {
|
|
109
|
+
const result = { created: false, aiDir, files: [] };
|
|
110
|
+
if (options.format === 'json') {
|
|
111
|
+
console.log(JSON.stringify(result, null, 2));
|
|
112
|
+
}
|
|
113
|
+
else {
|
|
114
|
+
console.log(` .ai/ already exists at ${aiDir}/`);
|
|
115
|
+
console.log(' Use --force (or --yes) to overwrite.');
|
|
116
|
+
}
|
|
117
|
+
return index_1.EXIT_CODE.SUCCESS;
|
|
118
|
+
}
|
|
119
|
+
fs.mkdirSync(aiDir, { recursive: true });
|
|
120
|
+
fs.writeFileSync(path.join(aiDir, 'manifest.adf'), MANIFEST_SCAFFOLD);
|
|
121
|
+
fs.writeFileSync(path.join(aiDir, 'core.adf'), CORE_SCAFFOLD);
|
|
122
|
+
fs.writeFileSync(path.join(aiDir, 'state.adf'), STATE_SCAFFOLD);
|
|
123
|
+
const result = {
|
|
124
|
+
created: true,
|
|
125
|
+
aiDir,
|
|
126
|
+
files: ['manifest.adf', 'core.adf', 'state.adf'],
|
|
127
|
+
};
|
|
128
|
+
if (options.format === 'json') {
|
|
129
|
+
console.log(JSON.stringify(result, null, 2));
|
|
130
|
+
}
|
|
131
|
+
else {
|
|
132
|
+
console.log(` Initialized ADF context at ${aiDir}/`);
|
|
133
|
+
console.log('');
|
|
134
|
+
console.log(' Created:');
|
|
135
|
+
for (const file of result.files) {
|
|
136
|
+
console.log(` ${file}`);
|
|
137
|
+
}
|
|
138
|
+
console.log('');
|
|
139
|
+
console.log(' Next steps:');
|
|
140
|
+
console.log(' 1. Edit core.adf with your universal repo rules');
|
|
141
|
+
console.log(' 2. Add on-demand modules (e.g. frontend.adf, backend.adf)');
|
|
142
|
+
console.log(' 3. Run: charter adf fmt .ai/core.adf --check');
|
|
143
|
+
}
|
|
144
|
+
return index_1.EXIT_CODE.SUCCESS;
|
|
145
|
+
}
|
|
146
|
+
// ============================================================================
|
|
147
|
+
// adf fmt
|
|
148
|
+
// ============================================================================
|
|
149
|
+
function adfFmt(options, args) {
|
|
150
|
+
const filePath = args.find(a => !a.startsWith('-'));
|
|
151
|
+
if (!filePath) {
|
|
152
|
+
throw new index_1.CLIError('adf fmt requires a file path. Usage: charter adf fmt <file> [--check] [--write]');
|
|
153
|
+
}
|
|
154
|
+
if (!fs.existsSync(filePath)) {
|
|
155
|
+
throw new index_1.CLIError(`File not found: ${filePath}`);
|
|
156
|
+
}
|
|
157
|
+
const input = fs.readFileSync(filePath, 'utf-8');
|
|
158
|
+
const doc = (0, adf_1.parseAdf)(input);
|
|
159
|
+
const formatted = (0, adf_1.formatAdf)(doc);
|
|
160
|
+
const checkMode = args.includes('--check');
|
|
161
|
+
const writeMode = args.includes('--write');
|
|
162
|
+
if (checkMode) {
|
|
163
|
+
const isCanonical = input === formatted;
|
|
164
|
+
if (options.format === 'json') {
|
|
165
|
+
console.log(JSON.stringify({ file: filePath, canonical: isCanonical }, null, 2));
|
|
166
|
+
}
|
|
167
|
+
else if (isCanonical) {
|
|
168
|
+
console.log(` [ok] ${filePath} is canonical.`);
|
|
169
|
+
}
|
|
170
|
+
else {
|
|
171
|
+
console.log(` [warn] ${filePath} is not in canonical format.`);
|
|
172
|
+
console.log(' Run: charter adf fmt <file> --write');
|
|
173
|
+
}
|
|
174
|
+
return isCanonical ? index_1.EXIT_CODE.SUCCESS : index_1.EXIT_CODE.POLICY_VIOLATION;
|
|
175
|
+
}
|
|
176
|
+
if (writeMode) {
|
|
177
|
+
fs.writeFileSync(filePath, formatted);
|
|
178
|
+
if (options.format === 'json') {
|
|
179
|
+
console.log(JSON.stringify({ file: filePath, written: true }, null, 2));
|
|
180
|
+
}
|
|
181
|
+
else {
|
|
182
|
+
console.log(` [ok] Reformatted ${filePath}`);
|
|
183
|
+
}
|
|
184
|
+
return index_1.EXIT_CODE.SUCCESS;
|
|
185
|
+
}
|
|
186
|
+
// Default: print to stdout
|
|
187
|
+
process.stdout.write(formatted);
|
|
188
|
+
return index_1.EXIT_CODE.SUCCESS;
|
|
189
|
+
}
|
|
190
|
+
// ============================================================================
|
|
191
|
+
// adf patch
|
|
192
|
+
// ============================================================================
|
|
193
|
+
function adfPatch(options, args) {
|
|
194
|
+
const filePath = args.find(a => !a.startsWith('-'));
|
|
195
|
+
if (!filePath) {
|
|
196
|
+
throw new index_1.CLIError('adf patch requires a file path. Usage: charter adf patch <file> --ops <json>');
|
|
197
|
+
}
|
|
198
|
+
const opsJson = getFlag(args, '--ops');
|
|
199
|
+
if (!opsJson) {
|
|
200
|
+
throw new index_1.CLIError('adf patch requires --ops <json>.');
|
|
201
|
+
}
|
|
202
|
+
if (!fs.existsSync(filePath)) {
|
|
203
|
+
throw new index_1.CLIError(`File not found: ${filePath}`);
|
|
204
|
+
}
|
|
205
|
+
let ops;
|
|
206
|
+
try {
|
|
207
|
+
ops = JSON.parse(opsJson);
|
|
208
|
+
if (!Array.isArray(ops)) {
|
|
209
|
+
throw new Error('ops must be an array');
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
catch (e) {
|
|
213
|
+
const msg = e instanceof Error ? e.message : String(e);
|
|
214
|
+
throw new index_1.CLIError(`Invalid --ops JSON: ${msg}`);
|
|
215
|
+
}
|
|
216
|
+
const input = fs.readFileSync(filePath, 'utf-8');
|
|
217
|
+
const doc = (0, adf_1.parseAdf)(input);
|
|
218
|
+
try {
|
|
219
|
+
const patched = (0, adf_1.applyPatches)(doc, ops);
|
|
220
|
+
const output = (0, adf_1.formatAdf)(patched);
|
|
221
|
+
fs.writeFileSync(filePath, output);
|
|
222
|
+
if (options.format === 'json') {
|
|
223
|
+
console.log(JSON.stringify({ file: filePath, patched: true, opsApplied: ops.length }, null, 2));
|
|
224
|
+
}
|
|
225
|
+
else {
|
|
226
|
+
console.log(` [ok] Applied ${ops.length} patch${ops.length === 1 ? '' : 'es'} to ${filePath}`);
|
|
227
|
+
}
|
|
228
|
+
return index_1.EXIT_CODE.SUCCESS;
|
|
229
|
+
}
|
|
230
|
+
catch (e) {
|
|
231
|
+
if (e instanceof Error && e.name === 'AdfPatchError') {
|
|
232
|
+
if (options.format === 'json') {
|
|
233
|
+
console.log(JSON.stringify({ file: filePath, patched: false, error: e.message }, null, 2));
|
|
234
|
+
}
|
|
235
|
+
else {
|
|
236
|
+
console.error(` [error] ${e.message}`);
|
|
237
|
+
}
|
|
238
|
+
return index_1.EXIT_CODE.RUNTIME_ERROR;
|
|
239
|
+
}
|
|
240
|
+
throw e;
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
// ============================================================================
|
|
244
|
+
// adf bundle
|
|
245
|
+
// ============================================================================
|
|
246
|
+
function adfBundle(options, args) {
|
|
247
|
+
const task = getFlag(args, '--task');
|
|
248
|
+
if (!task) {
|
|
249
|
+
throw new index_1.CLIError('adf bundle requires --task "<prompt>". Usage: charter adf bundle --task "Fix React component"');
|
|
250
|
+
}
|
|
251
|
+
const aiDir = getFlag(args, '--ai-dir') || '.ai';
|
|
252
|
+
const manifestPath = path.join(aiDir, 'manifest.adf');
|
|
253
|
+
if (!fs.existsSync(manifestPath)) {
|
|
254
|
+
throw new index_1.CLIError(`manifest.adf not found at ${manifestPath}. Run: charter adf init`);
|
|
255
|
+
}
|
|
256
|
+
const manifestContent = fs.readFileSync(manifestPath, 'utf-8');
|
|
257
|
+
const manifestDoc = (0, adf_1.parseAdf)(manifestContent);
|
|
258
|
+
const manifest = (0, adf_1.parseManifest)(manifestDoc);
|
|
259
|
+
// Tokenize task into keywords (simple word split)
|
|
260
|
+
const keywords = task
|
|
261
|
+
.split(/[\s,;:()[\]{}]+/)
|
|
262
|
+
.filter(w => w.length > 1)
|
|
263
|
+
.map(w => w.replace(/[^a-zA-Z0-9]/g, ''));
|
|
264
|
+
const modulePaths = (0, adf_1.resolveModules)(manifest, keywords);
|
|
265
|
+
const readFile = (p) => fs.readFileSync(p, 'utf-8');
|
|
266
|
+
try {
|
|
267
|
+
const result = (0, adf_1.bundleModules)(aiDir, modulePaths, readFile);
|
|
268
|
+
if (options.format === 'json') {
|
|
269
|
+
console.log(JSON.stringify({
|
|
270
|
+
task,
|
|
271
|
+
keywords,
|
|
272
|
+
resolvedModules: result.resolvedModules,
|
|
273
|
+
tokenEstimate: result.tokenEstimate,
|
|
274
|
+
triggerMatches: result.triggerMatches,
|
|
275
|
+
}, null, 2));
|
|
276
|
+
}
|
|
277
|
+
else {
|
|
278
|
+
console.log(` Task: "${task}"`);
|
|
279
|
+
console.log(` Keywords: ${keywords.join(', ')}`);
|
|
280
|
+
console.log(` Resolved modules: ${result.resolvedModules.join(', ')}`);
|
|
281
|
+
console.log(` Token estimate: ~${result.tokenEstimate}`);
|
|
282
|
+
console.log('');
|
|
283
|
+
if (result.triggerMatches.length > 0) {
|
|
284
|
+
console.log(' Trigger report:');
|
|
285
|
+
for (const tm of result.triggerMatches) {
|
|
286
|
+
const icon = tm.matched ? '+' : '-';
|
|
287
|
+
console.log(` [${icon}] ${tm.module} (${tm.trigger})`);
|
|
288
|
+
}
|
|
289
|
+
console.log('');
|
|
290
|
+
}
|
|
291
|
+
// Output merged document
|
|
292
|
+
const output = (0, adf_1.formatAdf)(result.mergedDocument);
|
|
293
|
+
console.log(' --- Merged Context ---');
|
|
294
|
+
console.log(output);
|
|
295
|
+
}
|
|
296
|
+
return index_1.EXIT_CODE.SUCCESS;
|
|
297
|
+
}
|
|
298
|
+
catch (e) {
|
|
299
|
+
if (e instanceof Error && e.name === 'AdfBundleError') {
|
|
300
|
+
if (options.format === 'json') {
|
|
301
|
+
console.log(JSON.stringify({ error: e.message }, null, 2));
|
|
302
|
+
}
|
|
303
|
+
else {
|
|
304
|
+
console.error(` [error] ${e.message}`);
|
|
305
|
+
}
|
|
306
|
+
return index_1.EXIT_CODE.RUNTIME_ERROR;
|
|
307
|
+
}
|
|
308
|
+
throw e;
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
// ============================================================================
|
|
312
|
+
// Helpers
|
|
313
|
+
// ============================================================================
|
|
314
|
+
function getFlag(args, flag) {
|
|
315
|
+
const idx = args.indexOf(flag);
|
|
316
|
+
if (idx !== -1 && idx + 1 < args.length) {
|
|
317
|
+
return args[idx + 1];
|
|
318
|
+
}
|
|
319
|
+
return undefined;
|
|
320
|
+
}
|
|
321
|
+
function printHelp() {
|
|
322
|
+
console.log('');
|
|
323
|
+
console.log(' charter adf — Attention-Directed Format tools');
|
|
324
|
+
console.log('');
|
|
325
|
+
console.log(' Usage:');
|
|
326
|
+
console.log(' charter adf init [--ai-dir <dir>] [--force]');
|
|
327
|
+
console.log(' Scaffold .ai/ directory with manifest, core, and state modules.');
|
|
328
|
+
console.log('');
|
|
329
|
+
console.log(' charter adf fmt <file> [--check] [--write]');
|
|
330
|
+
console.log(' Parse and reformat an ADF file to canonical form.');
|
|
331
|
+
console.log(' --check: exit 1 if not canonical (no write)');
|
|
332
|
+
console.log(' --write: reformat file in place');
|
|
333
|
+
console.log(' Default: print formatted output to stdout.');
|
|
334
|
+
console.log('');
|
|
335
|
+
console.log(' charter adf patch <file> --ops <json>');
|
|
336
|
+
console.log(' Apply ADF_PATCH operations to a file.');
|
|
337
|
+
console.log('');
|
|
338
|
+
console.log(' charter adf bundle --task "<prompt>" [--ai-dir <dir>]');
|
|
339
|
+
console.log(' Resolve manifest modules for a task and output merged context.');
|
|
340
|
+
console.log('');
|
|
341
|
+
}
|
|
342
|
+
//# 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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"}
|
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)
|
|
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":";AAAA;;;;;GAKG;;;;;;AAyEH,kBAsDC;AA7HD,0CAA8C;AAC9C,4CAAgD;AAChD,8CAAkD;AAClD,kDAAsD;AACtD,4CAAgD;AAChD,4CAAgD;AAChD,kDAAsD;AACtD,wCAA+D;AAC/D,0CAA8C;AAC9C,wCAA4C;AAC5C,mEAA0C;AAE1C,MAAM,WAAW,GAAG,sBAAW,CAAC,OAAO,CAAC;AAExC,MAAM,IAAI,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgCZ,CAAC;AAEW,QAAA,SAAS,GAAG;IACvB,OAAO,EAAE,CAAC;IACV,gBAAgB,EAAE,CAAC;IACnB,aAAa,EAAE,CAAC;CACR,CAAC;AAEX,MAAa,QAAS,SAAQ,KAAK;IAGf;IAFlB,YACE,OAAe,EACC,WAAmB,iBAAS,CAAC,aAAa;QAE1D,KAAK,CAAC,OAAO,CAAC,CAAC;QAFC,aAAQ,GAAR,QAAQ,CAAkC;QAG1D,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC;IACzB,CAAC;CACF;AARD,4BAQC;AASM,KAAK,UAAU,GAAG,CAAC,IAAc;IACtC,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QACnD,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAClB,OAAO,iBAAS,CAAC,OAAO,CAAC;IAC3B,CAAC;IAED,IAAI,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QACtD,OAAO,CAAC,GAAG,CAAC,YAAY,WAAW,EAAE,CAAC,CAAC;QACvC,OAAO,iBAAS,CAAC,OAAO,CAAC;IAC3B,CAAC;IAED,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,EAAE,UAAU,CAAC,IAAI,MAAM,CAAC;IACnD,IAAI,MAAM,KAAK,MAAM,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;QAC3C,MAAM,IAAI,QAAQ,CAAC,2BAA2B,MAAM,qBAAqB,CAAC,CAAC;IAC7E,CAAC;IAED,MAAM,OAAO,GAAe;QAC1B,UAAU,EAAE,OAAO,CAAC,IAAI,EAAE,UAAU,CAAC,IAAI,UAAU;QACnD,MAAM;QACN,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;QAC7B,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;KAC5B,CAAC;IAEF,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACjD,OAAO,IAAA,uBAAiB,EAAC,OAAO,CAAC,CAAC;IACpC,CAAC;IAED,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IACxB,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAE/B,QAAQ,OAAO,EAAE,CAAC;QAChB,KAAK,OAAO;YACV,OAAO,IAAA,oBAAY,EAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QACzC,KAAK,MAAM;YACT,OAAO,IAAA,kBAAW,EAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QACxC,KAAK,UAAU;YACb,OAAO,IAAA,0BAAe,EAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QAC5C,KAAK,OAAO;YACV,OAAO,IAAA,oBAAY,EAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QACzC,KAAK,OAAO;YACV,OAAO,IAAA,oBAAY,EAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QACzC,KAAK,UAAU;YACb,OAAO,IAAA,0BAAe,EAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QAC5C,KAAK,KAAK;YACR,OAAO,IAAA,gBAAU,EAAC,OAAO,CAAC,CAAC;QAC7B,KAAK,QAAQ;YACX,OAAO,IAAA,sBAAa,EAAC,OAAO,CAAC,CAAC;QAChC,KAAK,MAAM;YACT,OAAO,IAAA,kBAAW,EAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QACxC,KAAK,KAAK;YACR,OAAO,IAAA,gBAAU,EAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QACvC;YACE,MAAM,IAAI,QAAQ,CAAC,oBAAoB,OAAO,KAAK,IAAI,EAAE,CAAC,CAAC;IAC/D,CAAC;AACH,CAAC;AAED,SAAS,OAAO,CAAC,IAAc,EAAE,IAAY;IAC3C,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/B,IAAI,GAAG,KAAK,CAAC,CAAC,IAAI,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;QACxC,OAAO,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;IACvB,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@stackbilt/cli",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.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.2.0",
|
|
38
|
+
"@stackbilt/core": "^0.2.0",
|
|
39
|
+
"@stackbilt/git": "^0.2.0",
|
|
40
|
+
"@stackbilt/classify": "^0.2.0",
|
|
41
|
+
"@stackbilt/validate": "^0.2.0",
|
|
42
|
+
"@stackbilt/adf": "^0.2.0",
|
|
43
|
+
"@stackbilt/drift": "^0.2.0"
|
|
43
44
|
},
|
|
44
45
|
"license": "Apache-2.0",
|
|
45
46
|
"scripts": {
|