@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.
- package/README.md +25 -5
- package/dist/__tests__/adf-metrics.test.d.ts +2 -0
- package/dist/__tests__/adf-metrics.test.d.ts.map +1 -0
- package/dist/__tests__/adf-metrics.test.js +117 -0
- package/dist/__tests__/adf-metrics.test.js.map +1 -0
- package/dist/__tests__/git-helpers.test.d.ts +2 -0
- package/dist/__tests__/git-helpers.test.d.ts.map +1 -0
- package/dist/__tests__/git-helpers.test.js +136 -0
- package/dist/__tests__/git-helpers.test.js.map +1 -0
- package/dist/__tests__/setup.test.d.ts +2 -0
- package/dist/__tests__/setup.test.d.ts.map +1 -0
- package/dist/__tests__/setup.test.js +74 -0
- package/dist/__tests__/setup.test.js.map +1 -0
- package/dist/__tests__/telemetry.test.d.ts +2 -0
- package/dist/__tests__/telemetry.test.d.ts.map +1 -0
- package/dist/__tests__/telemetry.test.js +119 -0
- package/dist/__tests__/telemetry.test.js.map +1 -0
- package/dist/commands/adf-bundle.d.ts.map +1 -1
- package/dist/commands/adf-bundle.js +37 -17
- package/dist/commands/adf-bundle.js.map +1 -1
- package/dist/commands/adf-evidence.d.ts.map +1 -1
- package/dist/commands/adf-evidence.js +57 -19
- package/dist/commands/adf-evidence.js.map +1 -1
- package/dist/commands/adf-metrics.d.ts +8 -0
- package/dist/commands/adf-metrics.d.ts.map +1 -0
- package/dist/commands/adf-metrics.js +242 -0
- package/dist/commands/adf-metrics.js.map +1 -0
- package/dist/commands/adf-migrate.js +16 -13
- package/dist/commands/adf-migrate.js.map +1 -1
- package/dist/commands/adf-sync.d.ts.map +1 -1
- package/dist/commands/adf-sync.js +22 -12
- package/dist/commands/adf-sync.js.map +1 -1
- package/dist/commands/adf.d.ts +4 -0
- package/dist/commands/adf.d.ts.map +1 -1
- package/dist/commands/adf.js +232 -83
- package/dist/commands/adf.js.map +1 -1
- package/dist/commands/audit.d.ts.map +1 -1
- package/dist/commands/audit.js +19 -87
- package/dist/commands/audit.js.map +1 -1
- package/dist/commands/bootstrap.d.ts.map +1 -1
- package/dist/commands/bootstrap.js +32 -33
- package/dist/commands/bootstrap.js.map +1 -1
- package/dist/commands/doctor.d.ts +1 -1
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +66 -41
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/drift.d.ts.map +1 -1
- package/dist/commands/drift.js +2 -8
- package/dist/commands/drift.js.map +1 -1
- package/dist/commands/hook.d.ts.map +1 -1
- package/dist/commands/hook.js +23 -21
- package/dist/commands/hook.js.map +1 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +2 -8
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/setup.d.ts.map +1 -1
- package/dist/commands/setup.js +38 -9
- package/dist/commands/setup.js.map +1 -1
- package/dist/commands/telemetry.d.ts +8 -0
- package/dist/commands/telemetry.d.ts.map +1 -0
- package/dist/commands/telemetry.js +184 -0
- package/dist/commands/telemetry.js.map +1 -0
- package/dist/commands/validate.d.ts.map +1 -1
- package/dist/commands/validate.js +11 -97
- package/dist/commands/validate.js.map +1 -1
- package/dist/commands/why.d.ts.map +1 -1
- package/dist/commands/why.js +7 -76
- package/dist/commands/why.js.map +1 -1
- package/dist/flags.d.ts +20 -0
- package/dist/flags.d.ts.map +1 -0
- package/dist/flags.js +76 -0
- package/dist/flags.js.map +1 -0
- package/dist/git-helpers.d.ts +36 -0
- package/dist/git-helpers.d.ts.map +1 -0
- package/dist/git-helpers.js +146 -0
- package/dist/git-helpers.js.map +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +95 -55
- package/dist/index.js.map +1 -1
- package/dist/telemetry.d.ts +29 -0
- package/dist/telemetry.d.ts.map +1 -0
- package/dist/telemetry.js +88 -0
- package/dist/telemetry.js.map +1 -0
- 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:
|
|
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
|
|
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 `
|
|
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
|
-
- `
|
|
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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,4CAA8B;AAC9B,4CAA8B;AAC9B,gDAAkC;AAClC,mCAA6D;AAC7D,oCAA+B;AAC/B,qDAAyD;AAGzD,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;IACD,WAAE,CAAC,eAAe,EAAE,CAAC;AACvB,CAAC,CAAC,CAAC;AAEH,IAAA,iBAAQ,EAAC,WAAW,EAAE,GAAG,EAAE;IACzB,IAAA,WAAE,EAAC,yDAAyD,EAAE,KAAK,IAAI,EAAE;QACvE,MAAM,GAAG,GAAG,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,yBAAyB,CAAC,CAAC,CAAC;QAC9E,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACnB,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAEnB,WAAE,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,kBAAkB,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QACtD,MAAM,QAAQ,GAAG,MAAM,IAAA,WAAG,EAAC,CAAC,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC,CAAC;QACzG,IAAA,eAAM,EAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAEzB,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,UAAU,EAAE,WAAW,EAAE,eAAe,CAAC,CAAC;QAC/E,IAAA,eAAM,EAAC,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEhD,MAAM,KAAK,GAAG,EAAE,CAAC,YAAY,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACzE,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAA+D,CAAC;QAChH,IAAA,eAAM,EAAC,KAAK,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC3C,IAAA,eAAM,EAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC/B,IAAA,eAAM,EAAC,KAAK,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;QAC1C,IAAA,eAAM,EAAC,KAAK,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;IAEH,IAAA,WAAE,EAAC,iDAAiD,EAAE,KAAK,IAAI,EAAE;QAC/D,MAAM,GAAG,GAAG,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,2BAA2B,CAAC,CAAC,CAAC;QAChF,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACnB,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAEnB,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC;QAC7D,EAAE,CAAC,SAAS,CAAC,YAAY,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAChD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,MAAM,MAAM,GAAG;YACb;gBACE,OAAO,EAAE,CAAC;gBACV,SAAS,EAAE,IAAI,IAAI,CAAC,GAAG,GAAG,MAAM,CAAC,CAAC,WAAW,EAAE;gBAC/C,WAAW,EAAE,YAAY;gBACzB,KAAK,EAAE,CAAC,QAAQ,CAAC;gBACjB,MAAM,EAAE,MAAM;gBACd,MAAM,EAAE,KAAK;gBACb,UAAU,EAAE,GAAG;gBACf,QAAQ,EAAE,CAAC;gBACX,OAAO,EAAE,IAAI;aACd;YACD;gBACE,OAAO,EAAE,CAAC;gBACV,SAAS,EAAE,IAAI,IAAI,CAAC,GAAG,GAAG,MAAM,CAAC,CAAC,WAAW,EAAE;gBAC/C,WAAW,EAAE,QAAQ;gBACrB,KAAK,EAAE,CAAC,MAAM,CAAC;gBACf,MAAM,EAAE,MAAM;gBACd,MAAM,EAAE,IAAI;gBACZ,UAAU,EAAE,EAAE;gBACd,QAAQ,EAAE,CAAC;gBACX,OAAO,EAAE,KAAK;aACf;SACF,CAAC;QACF,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,eAAe,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;QAEnH,MAAM,IAAI,GAAa,EAAE,CAAC;QAC1B,WAAE,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,kBAAkB,CAAC,CAAC,GAAW,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QAE7E,MAAM,OAAO,GAAe;YAC1B,UAAU,EAAE,UAAU;YACtB,MAAM,EAAE,MAAM;YACd,MAAM,EAAE,KAAK;YACb,GAAG,EAAE,KAAK;SACX,CAAC;QAEF,MAAM,QAAQ,GAAG,MAAM,IAAA,4BAAgB,EAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,UAAU,EAAE,KAAK,CAAC,CAAC,CAAC;QAChF,IAAA,eAAM,EAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACzB,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAyF,CAAC;QAC3H,IAAA,eAAM,EAAC,MAAM,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACnC,IAAA,eAAM,EAAC,MAAM,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpC,IAAA,eAAM,EAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAClF,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -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;
|
|
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"}
|