@stackbilt/cli 0.4.2 → 0.6.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 +17 -1
- 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__/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 +5 -15
- 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 -50
- 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.d.ts +17 -0
- package/dist/commands/adf-migrate.d.ts.map +1 -1
- package/dist/commands/adf-migrate.js +36 -14
- 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 +2 -8
- package/dist/commands/adf-sync.js.map +1 -1
- package/dist/commands/adf.d.ts +5 -0
- package/dist/commands/adf.d.ts.map +1 -1
- package/dist/commands/adf.js +118 -82
- 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 +160 -52
- package/dist/commands/bootstrap.js.map +1 -1
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +4 -15
- 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 +4 -14
- package/dist/commands/hook.js.map +1 -1
- package/dist/commands/init.d.ts +1 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +29 -9
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/setup.d.ts.map +1 -1
- package/dist/commands/setup.js +34 -11
- 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 +94 -54
- 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
|
|
@@ -280,6 +282,7 @@ charter adf sync --check [--ai-dir <dir>]
|
|
|
280
282
|
charter adf sync --write [--ai-dir <dir>]
|
|
281
283
|
charter adf evidence [--task "<prompt>"] [--ai-dir <dir>] [--auto-measure]
|
|
282
284
|
[--context '{"key": value}'] [--context-file <path>]
|
|
285
|
+
charter adf metrics recalibrate [--headroom <percent>] [--reason "<text>"|--auto-rationale] [--dry-run]
|
|
283
286
|
charter adf migrate [--dry-run] [--source <file>] [--no-backup]
|
|
284
287
|
[--merge-strategy append|dedupe|replace] [--ai-dir <dir>]
|
|
285
288
|
```
|
|
@@ -292,9 +295,22 @@ charter adf migrate [--dry-run] [--source <file>] [--no-backup]
|
|
|
292
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.
|
|
293
296
|
- `sync --check`: Verify source `.adf` files match their locked hashes. Exits 1 if any source has drifted since last sync.
|
|
294
297
|
- `sync --write`: Update `.adf.lock` with current source hashes.
|
|
295
|
-
- `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.
|
|
296
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.
|
|
297
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
|
+
|
|
298
314
|
#### Evidence Example (from Charter's own repo)
|
|
299
315
|
|
|
300
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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,4CAA8B;AAC9B,4CAA8B;AAC9B,gDAAkC;AAClC,mCAA6D;AAE7D,yDAA4D;AAC5D,2DAAuD;AAEvD,MAAM,WAAW,GAAe;IAC9B,UAAU,EAAE,UAAU;IACtB,MAAM,EAAE,MAAM;IACd,MAAM,EAAE,KAAK;IACb,GAAG,EAAE,KAAK;CACX,CAAC;AAEF,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,SAAS,gBAAgB,CAAC,GAAW,EAAE,QAAQ,GAAG,GAAG;IACnD,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACzD,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAEzD,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,cAAc,CAAC,EAAE;;;;;;;CAOzD,CAAC,CAAC;IACD,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,UAAU,CAAC,EAAE;;0BAE5B,QAAQ;CACjC,CAAC,CAAC;IACD,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,WAAW,CAAC,EAAE,wCAAwC,CAAC,CAAC;IAC/F,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,eAAe,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;AACjI,CAAC;AAED,IAAA,iBAAQ,EAAC,yBAAyB,EAAE,GAAG,EAAE;IACvC,IAAA,WAAE,EAAC,+BAA+B,EAAE,GAAG,EAAE;QACvC,MAAM,GAAG,GAAG,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,uBAAuB,CAAC,CAAC,CAAC;QAC5E,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACnB,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACnB,gBAAgB,CAAC,GAAG,CAAC,CAAC;QAEtB,IAAA,eAAM,EAAC,GAAG,EAAE,CAAC,IAAA,+BAAiB,EAAC,WAAW,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC;IAC7F,CAAC,CAAC,CAAC;IAEH,IAAA,WAAE,EAAC,2DAA2D,EAAE,GAAG,EAAE;QACnE,MAAM,GAAG,GAAG,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,uBAAuB,CAAC,CAAC,CAAC;QAC5E,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACnB,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACnB,gBAAgB,CAAC,GAAG,CAAC,CAAC;QAEtB,MAAM,QAAQ,GAAG,IAAA,+BAAiB,EAAC,WAAW,EAAE,CAAC,aAAa,EAAE,YAAY,EAAE,IAAI,EAAE,UAAU,EAAE,qCAAqC,CAAC,CAAC,CAAC;QACxI,IAAA,eAAM,EAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAEzB,MAAM,QAAQ,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,eAAe,CAAC,EAAE,OAAO,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC;QACrG,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,GAAG,GAAG,CAAC,CAAC;QAC1C,MAAM,IAAI,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,UAAU,CAAC,EAAE,OAAO,CAAC,CAAC;QACzE,IAAA,eAAM,EAAC,IAAI,CAAC,CAAC,SAAS,CAAC,yBAAyB,QAAQ,MAAM,OAAO,UAAU,CAAC,CAAC;QACjF,IAAA,eAAM,EAAC,IAAI,CAAC,CAAC,SAAS,CAAC,mBAAmB,CAAC,CAAC;QAC5C,IAAA,eAAM,EAAC,IAAI,CAAC,CAAC,SAAS,CAAC,qCAAqC,CAAC,CAAC;IAChE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,IAAA,iBAAQ,EAAC,sCAAsC,EAAE,GAAG,EAAE;IACpD,IAAA,WAAE,EAAC,yEAAyE,EAAE,GAAG,EAAE;QACjF,MAAM,GAAG,GAAG,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,wBAAwB,CAAC,CAAC,CAAC;QAC7E,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACnB,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACnB,gBAAgB,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QAE1B,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;QAC7E,MAAM,QAAQ,GAAG,IAAA,0BAAW,EAAC,WAAW,EAAE,CAAC,UAAU,EAAE,KAAK,EAAE,gBAAgB,CAAC,CAAC,CAAC;QACjF,IAAA,eAAM,EAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAEzB,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAA+E,CAAC;QAC9G,IAAA,eAAM,EAAC,GAAG,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;QACtD,IAAA,eAAM,EAAC,GAAG,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;QACpE,IAAA,eAAM,EAAC,GAAG,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC/D,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -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":"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;
|
|
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"}
|
|
@@ -43,12 +43,13 @@ const fs = __importStar(require("node:fs"));
|
|
|
43
43
|
const path = __importStar(require("node:path"));
|
|
44
44
|
const adf_1 = require("@stackbilt/adf");
|
|
45
45
|
const index_1 = require("../index");
|
|
46
|
+
const flags_1 = require("../flags");
|
|
46
47
|
function adfBundle(options, args) {
|
|
47
|
-
const task = getFlag(args, '--task');
|
|
48
|
+
const task = (0, flags_1.getFlag)(args, '--task');
|
|
48
49
|
if (!task) {
|
|
49
50
|
throw new index_1.CLIError('adf bundle requires --task "<prompt>". Usage: charter adf bundle --task "Fix React component"');
|
|
50
51
|
}
|
|
51
|
-
const aiDir = getFlag(args, '--ai-dir') || '.ai';
|
|
52
|
+
const aiDir = (0, flags_1.getFlag)(args, '--ai-dir') || '.ai';
|
|
52
53
|
const manifestPath = path.join(aiDir, 'manifest.adf');
|
|
53
54
|
if (!fs.existsSync(manifestPath)) {
|
|
54
55
|
throw new index_1.CLIError(`manifest.adf not found at ${manifestPath}. Run: charter adf init`);
|
|
@@ -56,11 +57,7 @@ function adfBundle(options, args) {
|
|
|
56
57
|
const manifestContent = fs.readFileSync(manifestPath, 'utf-8');
|
|
57
58
|
const manifestDoc = (0, adf_1.parseAdf)(manifestContent);
|
|
58
59
|
const manifest = (0, adf_1.parseManifest)(manifestDoc);
|
|
59
|
-
|
|
60
|
-
const keywords = task
|
|
61
|
-
.split(/[\s,;:()[\]{}]+/)
|
|
62
|
-
.filter(w => w.length > 1)
|
|
63
|
-
.map(w => w.replace(/[^a-zA-Z0-9]/g, ''));
|
|
60
|
+
const keywords = (0, flags_1.tokenizeTask)(task);
|
|
64
61
|
const modulePaths = (0, adf_1.resolveModules)(manifest, keywords);
|
|
65
62
|
const defaultLoad = new Set(manifest.defaultLoad);
|
|
66
63
|
const missingModules = [];
|
|
@@ -83,7 +80,7 @@ function adfBundle(options, args) {
|
|
|
83
80
|
}
|
|
84
81
|
const readFile = (p) => fs.readFileSync(p, 'utf-8');
|
|
85
82
|
try {
|
|
86
|
-
const result = (0, adf_1.bundleModules)(aiDir, loadableModulePaths, readFile, keywords);
|
|
83
|
+
const result = (0, adf_1.bundleModules)(aiDir, loadableModulePaths, readFile, keywords, manifest);
|
|
87
84
|
if (options.format === 'json') {
|
|
88
85
|
const jsonOut = {
|
|
89
86
|
task,
|
|
@@ -189,11 +186,4 @@ function adfBundle(options, args) {
|
|
|
189
186
|
throw e;
|
|
190
187
|
}
|
|
191
188
|
}
|
|
192
|
-
function getFlag(args, flag) {
|
|
193
|
-
const idx = args.indexOf(flag);
|
|
194
|
-
if (idx !== -1 && idx + 1 < args.length) {
|
|
195
|
-
return args[idx + 1];
|
|
196
|
-
}
|
|
197
|
-
return undefined;
|
|
198
|
-
}
|
|
199
189
|
//# sourceMappingURL=adf-bundle.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adf-bundle.js","sourceRoot":"","sources":["../../src/commands/adf-bundle.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"adf-bundle.js","sourceRoot":"","sources":["../../src/commands/adf-bundle.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adf-evidence.d.ts","sourceRoot":"","sources":["../../src/commands/adf-evidence.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAYH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"adf-evidence.d.ts","sourceRoot":"","sources":["../../src/commands/adf-evidence.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAYH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAY3C,wBAAgB,WAAW,CAAC,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,CAwOvE"}
|