@stackbilt/cli 0.4.1 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (84) hide show
  1. package/README.md +25 -5
  2. package/dist/__tests__/adf-metrics.test.d.ts +2 -0
  3. package/dist/__tests__/adf-metrics.test.d.ts.map +1 -0
  4. package/dist/__tests__/adf-metrics.test.js +117 -0
  5. package/dist/__tests__/adf-metrics.test.js.map +1 -0
  6. package/dist/__tests__/git-helpers.test.d.ts +2 -0
  7. package/dist/__tests__/git-helpers.test.d.ts.map +1 -0
  8. package/dist/__tests__/git-helpers.test.js +136 -0
  9. package/dist/__tests__/git-helpers.test.js.map +1 -0
  10. package/dist/__tests__/setup.test.d.ts +2 -0
  11. package/dist/__tests__/setup.test.d.ts.map +1 -0
  12. package/dist/__tests__/setup.test.js +74 -0
  13. package/dist/__tests__/setup.test.js.map +1 -0
  14. package/dist/__tests__/telemetry.test.d.ts +2 -0
  15. package/dist/__tests__/telemetry.test.d.ts.map +1 -0
  16. package/dist/__tests__/telemetry.test.js +119 -0
  17. package/dist/__tests__/telemetry.test.js.map +1 -0
  18. package/dist/commands/adf-bundle.d.ts.map +1 -1
  19. package/dist/commands/adf-bundle.js +37 -17
  20. package/dist/commands/adf-bundle.js.map +1 -1
  21. package/dist/commands/adf-evidence.d.ts.map +1 -1
  22. package/dist/commands/adf-evidence.js +57 -19
  23. package/dist/commands/adf-evidence.js.map +1 -1
  24. package/dist/commands/adf-metrics.d.ts +8 -0
  25. package/dist/commands/adf-metrics.d.ts.map +1 -0
  26. package/dist/commands/adf-metrics.js +242 -0
  27. package/dist/commands/adf-metrics.js.map +1 -0
  28. package/dist/commands/adf-migrate.js +16 -13
  29. package/dist/commands/adf-migrate.js.map +1 -1
  30. package/dist/commands/adf-sync.d.ts.map +1 -1
  31. package/dist/commands/adf-sync.js +22 -12
  32. package/dist/commands/adf-sync.js.map +1 -1
  33. package/dist/commands/adf.d.ts +4 -0
  34. package/dist/commands/adf.d.ts.map +1 -1
  35. package/dist/commands/adf.js +232 -83
  36. package/dist/commands/adf.js.map +1 -1
  37. package/dist/commands/audit.d.ts.map +1 -1
  38. package/dist/commands/audit.js +19 -87
  39. package/dist/commands/audit.js.map +1 -1
  40. package/dist/commands/bootstrap.d.ts.map +1 -1
  41. package/dist/commands/bootstrap.js +32 -33
  42. package/dist/commands/bootstrap.js.map +1 -1
  43. package/dist/commands/doctor.d.ts +1 -1
  44. package/dist/commands/doctor.d.ts.map +1 -1
  45. package/dist/commands/doctor.js +66 -41
  46. package/dist/commands/doctor.js.map +1 -1
  47. package/dist/commands/drift.d.ts.map +1 -1
  48. package/dist/commands/drift.js +2 -8
  49. package/dist/commands/drift.js.map +1 -1
  50. package/dist/commands/hook.d.ts.map +1 -1
  51. package/dist/commands/hook.js +23 -21
  52. package/dist/commands/hook.js.map +1 -1
  53. package/dist/commands/init.d.ts.map +1 -1
  54. package/dist/commands/init.js +2 -8
  55. package/dist/commands/init.js.map +1 -1
  56. package/dist/commands/setup.d.ts.map +1 -1
  57. package/dist/commands/setup.js +38 -9
  58. package/dist/commands/setup.js.map +1 -1
  59. package/dist/commands/telemetry.d.ts +8 -0
  60. package/dist/commands/telemetry.d.ts.map +1 -0
  61. package/dist/commands/telemetry.js +184 -0
  62. package/dist/commands/telemetry.js.map +1 -0
  63. package/dist/commands/validate.d.ts.map +1 -1
  64. package/dist/commands/validate.js +11 -97
  65. package/dist/commands/validate.js.map +1 -1
  66. package/dist/commands/why.d.ts.map +1 -1
  67. package/dist/commands/why.js +7 -76
  68. package/dist/commands/why.js.map +1 -1
  69. package/dist/flags.d.ts +20 -0
  70. package/dist/flags.d.ts.map +1 -0
  71. package/dist/flags.js +76 -0
  72. package/dist/flags.js.map +1 -0
  73. package/dist/git-helpers.d.ts +36 -0
  74. package/dist/git-helpers.d.ts.map +1 -0
  75. package/dist/git-helpers.js +146 -0
  76. package/dist/git-helpers.js.map +1 -0
  77. package/dist/index.d.ts.map +1 -1
  78. package/dist/index.js +95 -55
  79. package/dist/index.js.map +1 -1
  80. package/dist/telemetry.d.ts +29 -0
  81. package/dist/telemetry.d.ts.map +1 -0
  82. package/dist/telemetry.js +88 -0
  83. package/dist/telemetry.js.map +1 -0
  84. package/package.json +8 -8
package/README.md CHANGED
@@ -68,6 +68,7 @@ charter adf bundle --task "fix React component"
68
68
  charter adf migrate --dry-run # preview agent config → ADF migration
69
69
  charter adf sync --check # verify .adf files match locked hashes
70
70
  charter adf evidence --auto-measure --format json # validate metric ceilings
71
+ charter telemetry report --period 24h --format json # passive local usage summary
71
72
  ```
72
73
 
73
74
  ## Human Onboarding (Copy/Paste)
@@ -138,6 +139,7 @@ npx charter audit --format json
138
139
  npx charter adf migrate --dry-run --format json
139
140
  npx charter adf evidence --auto-measure --format json --ci
140
141
  npx charter adf sync --check --format json
142
+ npx charter telemetry report --period 24h --format json
141
143
 
142
144
  # recurring maintenance
143
145
  npx charter doctor --format json
@@ -177,7 +179,7 @@ charter setup --preset fullstack --ci github --yes
177
179
  ```
178
180
 
179
181
  Detection output includes `detected.sources` in JSON mode so agents can verify which manifests were scanned before applying a baseline.
180
- Setup also adds optional root scripts when missing: `charter:detect` and `charter:setup`.
182
+ Setup also adds optional root scripts when missing: `charter:detect`, `charter:setup`, `verify:adf`, `charter:doctor`, and `charter:adf:bundle`.
181
183
  Setup JSON now includes `mutationPlan` and `appliedMutations` so side effects are explicit before/after apply.
182
184
  Setup baseline mutation metadata now includes `configHashBefore`, `configHashAfter`, and `writesPerformed`.
183
185
 
@@ -188,6 +190,7 @@ Scaffold `.charter/` config templates only. Supports `--preset worker|frontend|b
188
190
  ### `charter doctor`
189
191
 
190
192
  Validate CLI installation, `.charter/` config, and ADF readiness (manifest existence, module parseability, sync lock status).
193
+ Use `charter doctor --adf-only --ci` for strict ADF wiring gates in automation.
191
194
 
192
195
  ### `charter validate`
193
196
 
@@ -261,7 +264,7 @@ charter hook install --pre-commit
261
264
  ```
262
265
 
263
266
  - `--commit-msg`: Install a commit-msg hook that normalizes `Governed-By` and `Resolves-Request` trailers using `git interpret-trailers`.
264
- - `--pre-commit`: Install a pre-commit hook that runs `charter adf evidence --auto-measure --ci` before each commit. Only gates when `.ai/manifest.adf` exists — no-op otherwise. Uses `npx charter` so consuming repos need Charter as a devDependency.
267
+ - `--pre-commit`: Install a pre-commit hook that enforces ADF routing with `charter doctor --adf-only --ci` and validates ceilings with `charter adf evidence --auto-measure --ci` (or `pnpm run verify:adf` when that script exists). Only gates when `.ai/manifest.adf` exists — no-op otherwise.
265
268
  - `--force` (or global `--yes`) allows overwrite when a non-Charter hook already exists.
266
269
  - Both flags can be passed together to install both hooks in one command.
267
270
 
@@ -273,24 +276,41 @@ ADF (Attention-Directed Format) context management. Replaces monolithic `.cursor
273
276
  charter adf init [--ai-dir <dir>] [--force]
274
277
  charter adf fmt <file> [--check] [--write]
275
278
  charter adf patch <file> --ops '<json>' | --ops-file <path>
279
+ charter adf create <module> [--triggers "a,b,c"] [--load default|on-demand] [--ai-dir <dir>] [--force]
276
280
  charter adf bundle --task "Fix React component" [--ai-dir <dir>]
277
281
  charter adf sync --check [--ai-dir <dir>]
278
282
  charter adf sync --write [--ai-dir <dir>]
279
283
  charter adf evidence [--task "<prompt>"] [--ai-dir <dir>] [--auto-measure]
280
284
  [--context '{"key": value}'] [--context-file <path>]
285
+ charter adf metrics recalibrate [--headroom <percent>] [--reason "<text>"|--auto-rationale] [--dry-run]
281
286
  charter adf migrate [--dry-run] [--source <file>] [--no-backup]
282
287
  [--merge-strategy append|dedupe|replace] [--ai-dir <dir>]
283
288
  ```
284
289
 
285
- - `init`: Scaffold `.ai/` with `manifest.adf`, `core.adf`, and `state.adf`. Core module includes a 500-line LOC guardrail metric by default.
290
+ - `init`: Scaffold `.ai/` with `manifest.adf`, `core.adf`, `state.adf`, and starter `frontend.adf`/`backend.adf` on-demand module stubs. Core module includes a 500-line LOC guardrail metric by default.
286
291
  - `fmt`: Parse and reformat to canonical ADF. `--check` exits 1 if not canonical. `--write` reformats in place. Default prints to stdout.
292
+ - `fmt --explain`: Print canonical section ordering used by the formatter.
287
293
  - `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.
288
- - `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.
294
+ - `create`: Create an ADF module file and register it in `manifest.adf` under `DEFAULT_LOAD` or `ON_DEMAND` in one command.
295
+ - `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. Missing ON_DEMAND files are warnings in output (`missingModules` in JSON), while missing DEFAULT_LOAD files still fail.
289
296
  - `sync --check`: Verify source `.adf` files match their locked hashes. Exits 1 if any source has drifted since last sync.
290
297
  - `sync --write`: Update `.adf.lock` with current source hashes.
291
- - `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). The governance workflow template runs this automatically on PRs when `.ai/manifest.adf` is present.
298
+ - `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). Also reports stale-baseline warnings (baseline vs current delta + recommended ceiling) when baseline values drift significantly. The governance workflow template runs this automatically on PRs when `.ai/manifest.adf` is present.
299
+ - `metrics recalibrate`: Re-measure current LOC from manifest metric sources, propose and apply new ceilings using configurable headroom, and append rationale records to `BUDGET_RATIONALES`. Requires explicit rationale (`--reason`) unless `--auto-rationale` is used.
292
300
  - `migrate`: Scan existing agent config files (CLAUDE.md, .cursorrules, agents.md, GEMINI.md, copilot-instructions.md), classify content using the ADX-002 decision tree, and migrate into ADF modules. `--dry-run` previews the migration plan without writing files. `--source <file>` targets a single file. `--no-backup` skips `.pre-adf-migrate.bak` creation. `--merge-strategy` controls deduplication: `dedupe` (default, skip items already in ADF), `append` (always add), or `replace`. Environment-specific rules (WSL, PATH, credential helpers) are retained in the thin pointer.
293
301
 
302
+ ### `charter telemetry`
303
+
304
+ Passive local observability for Charter/ADF usage. Every CLI run appends command metadata (timestamp, command path, flags, duration, exit code) to `.charter/telemetry/events.ndjson`.
305
+
306
+ ```bash
307
+ charter telemetry report --period 24h
308
+ charter telemetry report --period 7d --format json
309
+ ```
310
+
311
+ - `report`: aggregates events over a time window (`--period` supports `s|m|h|d`, for example `30m`, `24h`, `7d`).
312
+ - Privacy: command metadata only. No prompt body, source code, or file contents are captured.
313
+
294
314
  #### Evidence Example (from Charter's own repo)
295
315
 
296
316
  Charter uses its own ADF system for self-governance. Running evidence with auto-measurement:
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=adf-metrics.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adf-metrics.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/adf-metrics.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,117 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ const fs = __importStar(require("node:fs"));
37
+ const os = __importStar(require("node:os"));
38
+ const path = __importStar(require("node:path"));
39
+ const vitest_1 = require("vitest");
40
+ const adf_metrics_1 = require("../commands/adf-metrics");
41
+ const adf_evidence_1 = require("../commands/adf-evidence");
42
+ const baseOptions = {
43
+ configPath: '.charter',
44
+ format: 'json',
45
+ ciMode: false,
46
+ yes: false,
47
+ };
48
+ const originalCwd = process.cwd();
49
+ const tempDirs = [];
50
+ (0, vitest_1.afterEach)(() => {
51
+ process.chdir(originalCwd);
52
+ while (tempDirs.length > 0) {
53
+ const dir = tempDirs.pop();
54
+ if (dir) {
55
+ fs.rmSync(dir, { recursive: true, force: true });
56
+ }
57
+ }
58
+ vitest_1.vi.restoreAllMocks();
59
+ });
60
+ function writeFixtureRepo(tmp, baseline = 100) {
61
+ fs.mkdirSync(path.join(tmp, '.ai'), { recursive: true });
62
+ fs.mkdirSync(path.join(tmp, 'src'), { recursive: true });
63
+ fs.writeFileSync(path.join(tmp, '.ai', 'manifest.adf'), `ADF: 0.1
64
+ DEFAULT_LOAD:
65
+ - core.adf
66
+ - state.adf
67
+
68
+ METRICS:
69
+ COMPONENTS_TOTAL_LOC: src/components.ts
70
+ `);
71
+ fs.writeFileSync(path.join(tmp, '.ai', 'core.adf'), `ADF: 0.1
72
+ METRICS:
73
+ components_total_loc: ${baseline} / 120 [lines]
74
+ `);
75
+ fs.writeFileSync(path.join(tmp, '.ai', 'state.adf'), 'ADF: 0.1\nSTATE:\n CURRENT: testing\n');
76
+ fs.writeFileSync(path.join(tmp, 'src', 'components.ts'), Array.from({ length: 200 }, (_, i) => `line_${i}`).join('\n') + '\n');
77
+ }
78
+ (0, vitest_1.describe)('adf metrics recalibrate', () => {
79
+ (0, vitest_1.it)('requires rationale by default', () => {
80
+ const tmp = fs.mkdtempSync(path.join(os.tmpdir(), 'charter-metrics-test-'));
81
+ tempDirs.push(tmp);
82
+ process.chdir(tmp);
83
+ writeFixtureRepo(tmp);
84
+ (0, vitest_1.expect)(() => (0, adf_metrics_1.adfMetricsCommand)(baseOptions, ['recalibrate'])).toThrow('requires --reason');
85
+ });
86
+ (0, vitest_1.it)('recalibrates metric ceilings and writes rationale entries', () => {
87
+ const tmp = fs.mkdtempSync(path.join(os.tmpdir(), 'charter-metrics-test-'));
88
+ tempDirs.push(tmp);
89
+ process.chdir(tmp);
90
+ writeFixtureRepo(tmp);
91
+ const exitCode = (0, adf_metrics_1.adfMetricsCommand)(baseOptions, ['recalibrate', '--headroom', '20', '--reason', 'Scope expanded with new built views']);
92
+ (0, vitest_1.expect)(exitCode).toBe(0);
93
+ const measured = fs.readFileSync(path.join(tmp, 'src', 'components.ts'), 'utf-8').split('\n').length;
94
+ const ceiling = Math.ceil(measured * 1.2);
95
+ const core = fs.readFileSync(path.join(tmp, '.ai', 'core.adf'), 'utf-8');
96
+ (0, vitest_1.expect)(core).toContain(`components_total_loc: ${measured} / ${ceiling} [lines]`);
97
+ (0, vitest_1.expect)(core).toContain('BUDGET_RATIONALES');
98
+ (0, vitest_1.expect)(core).toContain('Scope expanded with new built views');
99
+ });
100
+ });
101
+ (0, vitest_1.describe)('adf evidence stale baseline warnings', () => {
102
+ (0, vitest_1.it)('emits staleBaselines when measured value greatly exceeds baseline value', () => {
103
+ const tmp = fs.mkdtempSync(path.join(os.tmpdir(), 'charter-evidence-test-'));
104
+ tempDirs.push(tmp);
105
+ process.chdir(tmp);
106
+ writeFixtureRepo(tmp, 80);
107
+ const logs = [];
108
+ vitest_1.vi.spyOn(console, 'log').mockImplementation((msg) => logs.push(msg));
109
+ const exitCode = (0, adf_evidence_1.adfEvidence)(baseOptions, ['--ai-dir', '.ai', '--auto-measure']);
110
+ (0, vitest_1.expect)(exitCode).toBe(0);
111
+ const out = JSON.parse(logs[0]);
112
+ (0, vitest_1.expect)(out.staleBaselines?.length).toBeGreaterThan(0);
113
+ (0, vitest_1.expect)(out.staleBaselines?.[0].metric).toBe('components_total_loc');
114
+ (0, vitest_1.expect)(out.staleBaselines?.[0].rationaleRequired).toBe(true);
115
+ });
116
+ });
117
+ //# sourceMappingURL=adf-metrics.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adf-metrics.test.js","sourceRoot":"","sources":["../../src/__tests__/adf-metrics.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=git-helpers.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git-helpers.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/git-helpers.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,136 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ const vitest_1 = require("vitest");
37
+ const node_child_process_1 = require("node:child_process");
38
+ const fs = __importStar(require("node:fs"));
39
+ const os = __importStar(require("node:os"));
40
+ const path = __importStar(require("node:path"));
41
+ const git_helpers_1 = require("../git-helpers");
42
+ (0, vitest_1.describe)('git-helpers', () => {
43
+ let originalCwd;
44
+ let tempDir;
45
+ (0, vitest_1.beforeEach)(() => {
46
+ originalCwd = process.cwd();
47
+ tempDir = fs.mkdtempSync(path.join(os.tmpdir(), 'charter-git-helpers-'));
48
+ process.chdir(tempDir);
49
+ });
50
+ (0, vitest_1.afterEach)(() => {
51
+ process.chdir(originalCwd);
52
+ fs.rmSync(tempDir, { recursive: true, force: true });
53
+ });
54
+ (0, vitest_1.describe)('runGit', () => {
55
+ (0, vitest_1.it)('succeeds inside a git repo', () => {
56
+ (0, node_child_process_1.execFileSync)('git', ['init'], { stdio: 'ignore' });
57
+ const result = (0, git_helpers_1.runGit)(['rev-parse', '--is-inside-work-tree']).trim();
58
+ (0, vitest_1.expect)(result).toBe('true');
59
+ });
60
+ (0, vitest_1.it)('throws outside a git repo', () => {
61
+ (0, vitest_1.expect)(() => (0, git_helpers_1.runGit)(['rev-parse', '--is-inside-work-tree'])).toThrow();
62
+ });
63
+ });
64
+ (0, vitest_1.describe)('isGitRepo', () => {
65
+ (0, vitest_1.it)('returns true inside a git repo', () => {
66
+ (0, node_child_process_1.execFileSync)('git', ['init'], { stdio: 'ignore' });
67
+ (0, vitest_1.expect)((0, git_helpers_1.isGitRepo)()).toBe(true);
68
+ });
69
+ (0, vitest_1.it)('returns false outside a git repo', () => {
70
+ (0, vitest_1.expect)((0, git_helpers_1.isGitRepo)()).toBe(false);
71
+ });
72
+ });
73
+ (0, vitest_1.describe)('hasCommits', () => {
74
+ (0, vitest_1.it)('returns false on empty repo', () => {
75
+ (0, node_child_process_1.execFileSync)('git', ['init'], { stdio: 'ignore' });
76
+ (0, vitest_1.expect)((0, git_helpers_1.hasCommits)()).toBe(false);
77
+ });
78
+ (0, vitest_1.it)('returns true after a commit', () => {
79
+ (0, node_child_process_1.execFileSync)('git', ['init'], { stdio: 'ignore' });
80
+ (0, node_child_process_1.execFileSync)('git', ['config', 'user.email', 'test@test.com'], { stdio: 'ignore' });
81
+ (0, node_child_process_1.execFileSync)('git', ['config', 'user.name', 'Test'], { stdio: 'ignore' });
82
+ fs.writeFileSync(path.join(tempDir, 'file.txt'), 'hello');
83
+ (0, node_child_process_1.execFileSync)('git', ['add', '.'], { stdio: 'ignore' });
84
+ (0, node_child_process_1.execFileSync)('git', ['commit', '-m', 'init'], { stdio: 'ignore' });
85
+ (0, vitest_1.expect)((0, git_helpers_1.hasCommits)()).toBe(true);
86
+ });
87
+ });
88
+ (0, vitest_1.describe)('getGitErrorMessage', () => {
89
+ (0, vitest_1.it)('extracts stderr from exec error', () => {
90
+ const err = Object.assign(new Error('fail'), { stderr: 'fatal: not a repo' });
91
+ (0, vitest_1.expect)((0, git_helpers_1.getGitErrorMessage)(err)).toBe('fatal: not a repo');
92
+ });
93
+ (0, vitest_1.it)('falls back to message', () => {
94
+ (0, vitest_1.expect)((0, git_helpers_1.getGitErrorMessage)(new Error('some error'))).toBe('some error');
95
+ });
96
+ (0, vitest_1.it)('returns fallback for non-Error', () => {
97
+ (0, vitest_1.expect)((0, git_helpers_1.getGitErrorMessage)('string')).toBe('Unknown git error.');
98
+ });
99
+ });
100
+ (0, vitest_1.describe)('parseCommitMetadata', () => {
101
+ (0, vitest_1.it)('parses git log format', () => {
102
+ const log = 'abc123\x1fAlice\x1f2026-01-01T00:00:00Z\x1fInitial commit\x1e';
103
+ const result = (0, git_helpers_1.parseCommitMetadata)(log);
104
+ (0, vitest_1.expect)(result).toHaveLength(1);
105
+ (0, vitest_1.expect)(result[0].sha).toBe('abc123');
106
+ (0, vitest_1.expect)(result[0].author).toBe('Alice');
107
+ (0, vitest_1.expect)(result[0].message).toBe('Initial commit');
108
+ });
109
+ (0, vitest_1.it)('handles multiple commits', () => {
110
+ const log = 'aaa\x1fA\x1f2026-01-01\x1fFirst\x1ebbb\x1fB\x1f2026-01-02\x1fSecond\x1e';
111
+ (0, vitest_1.expect)((0, git_helpers_1.parseCommitMetadata)(log)).toHaveLength(2);
112
+ });
113
+ });
114
+ (0, vitest_1.describe)('parseChangedFilesByCommit', () => {
115
+ (0, vitest_1.it)('parses name-only log', () => {
116
+ const log = [
117
+ 'a'.repeat(40),
118
+ 'src/index.ts',
119
+ 'src/util.ts',
120
+ '',
121
+ 'b'.repeat(40),
122
+ 'README.md',
123
+ ].join('\n');
124
+ const result = (0, git_helpers_1.parseChangedFilesByCommit)(log);
125
+ (0, vitest_1.expect)(result.get('a'.repeat(40))).toEqual(['src/index.ts', 'src/util.ts']);
126
+ (0, vitest_1.expect)(result.get('b'.repeat(40))).toEqual(['README.md']);
127
+ });
128
+ });
129
+ (0, vitest_1.describe)('getRecentCommitRange', () => {
130
+ (0, vitest_1.it)('returns HEAD on empty repo', () => {
131
+ (0, node_child_process_1.execFileSync)('git', ['init'], { stdio: 'ignore' });
132
+ (0, vitest_1.expect)((0, git_helpers_1.getRecentCommitRange)()).toBe('HEAD');
133
+ });
134
+ });
135
+ });
136
+ //# sourceMappingURL=git-helpers.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git-helpers.test.js","sourceRoot":"","sources":["../../src/__tests__/git-helpers.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=setup.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/setup.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,74 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ const fs = __importStar(require("node:fs"));
37
+ const os = __importStar(require("node:os"));
38
+ const path = __importStar(require("node:path"));
39
+ const vitest_1 = require("vitest");
40
+ const setup_1 = require("../commands/setup");
41
+ const originalCwd = process.cwd();
42
+ const tempDirs = [];
43
+ (0, vitest_1.afterEach)(() => {
44
+ process.chdir(originalCwd);
45
+ while (tempDirs.length > 0) {
46
+ const dir = tempDirs.pop();
47
+ if (dir) {
48
+ fs.rmSync(dir, { recursive: true, force: true });
49
+ }
50
+ }
51
+ });
52
+ (0, vitest_1.describe)('syncPackageManifest', () => {
53
+ (0, vitest_1.it)('adds ongoing governance scripts during setup sync', () => {
54
+ const tmp = fs.mkdtempSync(path.join(os.tmpdir(), 'charter-setup-test-'));
55
+ tempDirs.push(tmp);
56
+ process.chdir(tmp);
57
+ fs.writeFileSync('package.json', JSON.stringify({ name: 'tmp', version: '1.0.0' }, null, 2));
58
+ (0, setup_1.syncPackageManifest)('worker', true, true);
59
+ const pkg = JSON.parse(fs.readFileSync('package.json', 'utf-8'));
60
+ (0, vitest_1.expect)(pkg.scripts?.['charter:detect']).toBe('charter setup --detect-only --format json');
61
+ (0, vitest_1.expect)(pkg.scripts?.['charter:setup']).toBe('charter setup --preset worker --ci github --yes');
62
+ (0, vitest_1.expect)(pkg.scripts?.['verify:adf']).toBe('charter doctor --adf-only --ci --format json && charter adf evidence --auto-measure --ci --format json');
63
+ (0, vitest_1.expect)(pkg.scripts?.['charter:doctor']).toBe('charter doctor --format json');
64
+ (0, vitest_1.expect)(pkg.scripts?.['charter:adf:bundle']).toBe('charter adf bundle --task "describe task" --format json');
65
+ });
66
+ (0, vitest_1.it)('github workflow template enforces ADF routing checks', () => {
67
+ const workflow = (0, setup_1.getGithubWorkflow)('pnpm');
68
+ (0, vitest_1.expect)(workflow).toContain('ADF Wiring & Pointer Integrity');
69
+ (0, vitest_1.expect)(workflow).toContain('npx charter doctor --adf-only --ci --format text');
70
+ (0, vitest_1.expect)(workflow).toContain('ADF Evidence');
71
+ (0, vitest_1.expect)(workflow).toContain('npx charter adf evidence --auto-measure --ci --format text');
72
+ });
73
+ });
74
+ //# sourceMappingURL=setup.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup.test.js","sourceRoot":"","sources":["../../src/__tests__/setup.test.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,4CAA8B;AAC9B,4CAA8B;AAC9B,gDAAkC;AAClC,mCAAyD;AACzD,6CAA2E;AAE3E,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;AAClC,MAAM,QAAQ,GAAa,EAAE,CAAC;AAE9B,IAAA,kBAAS,EAAC,GAAG,EAAE;IACb,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;IAC3B,OAAO,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC3B,MAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,EAAE,CAAC;QAC3B,IAAI,GAAG,EAAE,CAAC;YACR,EAAE,CAAC,MAAM,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACnD,CAAC;IACH,CAAC;AACH,CAAC,CAAC,CAAC;AAEH,IAAA,iBAAQ,EAAC,qBAAqB,EAAE,GAAG,EAAE;IACnC,IAAA,WAAE,EAAC,mDAAmD,EAAE,GAAG,EAAE;QAC3D,MAAM,GAAG,GAAG,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,qBAAqB,CAAC,CAAC,CAAC;QAC1E,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACnB,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAEnB,EAAE,CAAC,aAAa,CAAC,cAAc,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAE7F,IAAA,2BAAmB,EAAC,QAAQ,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QAE1C,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,cAAc,EAAE,OAAO,CAAC,CAAyC,CAAC;QACzG,IAAA,eAAM,EAAC,GAAG,CAAC,OAAO,EAAE,CAAC,gBAAgB,CAAC,CAAC,CAAC,IAAI,CAAC,2CAA2C,CAAC,CAAC;QAC1F,IAAA,eAAM,EAAC,GAAG,CAAC,OAAO,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC,iDAAiD,CAAC,CAAC;QAC/F,IAAA,eAAM,EAAC,GAAG,CAAC,OAAO,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,wGAAwG,CAAC,CAAC;QACnJ,IAAA,eAAM,EAAC,GAAG,CAAC,OAAO,EAAE,CAAC,gBAAgB,CAAC,CAAC,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;QAC7E,IAAA,eAAM,EAAC,GAAG,CAAC,OAAO,EAAE,CAAC,oBAAoB,CAAC,CAAC,CAAC,IAAI,CAAC,yDAAyD,CAAC,CAAC;IAC9G,CAAC,CAAC,CAAC;IAEH,IAAA,WAAE,EAAC,sDAAsD,EAAE,GAAG,EAAE;QAC9D,MAAM,QAAQ,GAAG,IAAA,yBAAiB,EAAC,MAAM,CAAC,CAAC;QAC3C,IAAA,eAAM,EAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,gCAAgC,CAAC,CAAC;QAC7D,IAAA,eAAM,EAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,kDAAkD,CAAC,CAAC;QAC/E,IAAA,eAAM,EAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;QAC3C,IAAA,eAAM,EAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,4DAA4D,CAAC,CAAC;IAC3F,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=telemetry.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"telemetry.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/telemetry.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,119 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ const fs = __importStar(require("node:fs"));
37
+ const os = __importStar(require("node:os"));
38
+ const path = __importStar(require("node:path"));
39
+ const vitest_1 = require("vitest");
40
+ const index_1 = require("../index");
41
+ const telemetry_1 = require("../commands/telemetry");
42
+ const originalCwd = process.cwd();
43
+ const tempDirs = [];
44
+ (0, vitest_1.afterEach)(() => {
45
+ process.chdir(originalCwd);
46
+ while (tempDirs.length > 0) {
47
+ const dir = tempDirs.pop();
48
+ if (dir) {
49
+ fs.rmSync(dir, { recursive: true, force: true });
50
+ }
51
+ }
52
+ vitest_1.vi.restoreAllMocks();
53
+ });
54
+ (0, vitest_1.describe)('telemetry', () => {
55
+ (0, vitest_1.it)('records local telemetry events during command execution', async () => {
56
+ const tmp = fs.mkdtempSync(path.join(os.tmpdir(), 'charter-telemetry-test-'));
57
+ tempDirs.push(tmp);
58
+ process.chdir(tmp);
59
+ vitest_1.vi.spyOn(console, 'log').mockImplementation(() => { });
60
+ const exitCode = await (0, index_1.run)(['classify', 'update', 'readme', '--format', 'json', '--config', '.charter']);
61
+ (0, vitest_1.expect)(exitCode).toBe(0);
62
+ const telemetryFile = path.join(tmp, '.charter', 'telemetry', 'events.ndjson');
63
+ (0, vitest_1.expect)(fs.existsSync(telemetryFile)).toBe(true);
64
+ const lines = fs.readFileSync(telemetryFile, 'utf-8').trim().split('\n');
65
+ const event = JSON.parse(lines[lines.length - 1]);
66
+ (0, vitest_1.expect)(event.commandPath).toBe('classify');
67
+ (0, vitest_1.expect)(event.exitCode).toBe(0);
68
+ (0, vitest_1.expect)(event.flags).toContain('--format');
69
+ (0, vitest_1.expect)(event.flags).toContain('--config');
70
+ });
71
+ (0, vitest_1.it)('generates telemetry report from local event log', async () => {
72
+ const tmp = fs.mkdtempSync(path.join(os.tmpdir(), 'charter-telemetry-report-'));
73
+ tempDirs.push(tmp);
74
+ process.chdir(tmp);
75
+ const telemetryDir = path.join(tmp, '.charter', 'telemetry');
76
+ fs.mkdirSync(telemetryDir, { recursive: true });
77
+ const now = Date.now();
78
+ const events = [
79
+ {
80
+ version: 1,
81
+ timestamp: new Date(now - 60_000).toISOString(),
82
+ commandPath: 'adf.bundle',
83
+ flags: ['--task'],
84
+ format: 'json',
85
+ ciMode: false,
86
+ durationMs: 120,
87
+ exitCode: 0,
88
+ success: true,
89
+ },
90
+ {
91
+ version: 1,
92
+ timestamp: new Date(now - 30_000).toISOString(),
93
+ commandPath: 'doctor',
94
+ flags: ['--ci'],
95
+ format: 'json',
96
+ ciMode: true,
97
+ durationMs: 90,
98
+ exitCode: 1,
99
+ success: false,
100
+ },
101
+ ];
102
+ fs.writeFileSync(path.join(telemetryDir, 'events.ndjson'), events.map((e) => JSON.stringify(e)).join('\n') + '\n');
103
+ const logs = [];
104
+ vitest_1.vi.spyOn(console, 'log').mockImplementation((msg) => logs.push(msg));
105
+ const options = {
106
+ configPath: '.charter',
107
+ format: 'json',
108
+ ciMode: false,
109
+ yes: false,
110
+ };
111
+ const exitCode = await (0, telemetry_1.telemetryCommand)(options, ['report', '--period', '24h']);
112
+ (0, vitest_1.expect)(exitCode).toBe(0);
113
+ const report = JSON.parse(logs[0]);
114
+ (0, vitest_1.expect)(report.totalEvents).toBe(2);
115
+ (0, vitest_1.expect)(report.failureCount).toBe(1);
116
+ (0, vitest_1.expect)(report.byCommand.some((entry) => entry.command === 'doctor')).toBe(true);
117
+ });
118
+ });
119
+ //# sourceMappingURL=telemetry.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"telemetry.test.js","sourceRoot":"","sources":["../../src/__tests__/telemetry.test.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"adf-bundle.d.ts","sourceRoot":"","sources":["../../src/commands/adf-bundle.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAWH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAG3C,wBAAgB,SAAS,CAAC,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,CA8HrE"}
1
+ {"version":3,"file":"adf-bundle.d.ts","sourceRoot":"","sources":["../../src/commands/adf-bundle.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAWH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAI3C,wBAAgB,SAAS,CAAC,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,CAyJrE"}