@stackbilt/cli 0.4.2 → 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 +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 -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 +2 -8
- package/dist/commands/adf-sync.js.map +1 -1
- package/dist/commands/adf.d.ts +2 -0
- package/dist/commands/adf.d.ts.map +1 -1
- package/dist/commands/adf.js +83 -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 +32 -33
- 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.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 +3 -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 +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/dist/commands/why.js
CHANGED
|
@@ -35,11 +35,11 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
35
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
36
|
exports.quickstartCommand = quickstartCommand;
|
|
37
37
|
exports.whyCommand = whyCommand;
|
|
38
|
-
const node_child_process_1 = require("node:child_process");
|
|
39
38
|
const fs = __importStar(require("node:fs"));
|
|
40
39
|
const path = __importStar(require("node:path"));
|
|
41
40
|
const index_1 = require("../index");
|
|
42
41
|
const git_1 = require("@stackbilt/git");
|
|
42
|
+
const git_helpers_1 = require("../git-helpers");
|
|
43
43
|
async function quickstartCommand(options) {
|
|
44
44
|
const snapshot = getSnapshot(options.configPath);
|
|
45
45
|
if (options.format === 'json') {
|
|
@@ -105,7 +105,7 @@ async function whyCommand(options) {
|
|
|
105
105
|
return index_1.EXIT_CODE.SUCCESS;
|
|
106
106
|
}
|
|
107
107
|
function getSnapshot(configPath) {
|
|
108
|
-
const inGitRepo = isGitRepo();
|
|
108
|
+
const inGitRepo = (0, git_helpers_1.isGitRepo)();
|
|
109
109
|
const hasBaseline = fs.existsSync(path.join(configPath, 'config.json'));
|
|
110
110
|
if (!inGitRepo) {
|
|
111
111
|
return {
|
|
@@ -117,7 +117,7 @@ function getSnapshot(configPath) {
|
|
|
117
117
|
nextAction: 'Run this inside a git repository, then run: charter setup --ci github',
|
|
118
118
|
};
|
|
119
119
|
}
|
|
120
|
-
const commits = hasCommits() ? getRecentCommits(20) : [];
|
|
120
|
+
const commits = (0, git_helpers_1.hasCommits)() ? getRecentCommits(20) : [];
|
|
121
121
|
const parsed = (0, git_1.parseAllTrailers)(commits);
|
|
122
122
|
const linked = new Set();
|
|
123
123
|
for (const t of parsed.governedBy)
|
|
@@ -145,29 +145,12 @@ function getSnapshot(configPath) {
|
|
|
145
145
|
nextAction,
|
|
146
146
|
};
|
|
147
147
|
}
|
|
148
|
-
function isGitRepo() {
|
|
149
|
-
try {
|
|
150
|
-
(0, node_child_process_1.execFileSync)('git', ['rev-parse', '--is-inside-work-tree'], { stdio: 'ignore' });
|
|
151
|
-
return true;
|
|
152
|
-
}
|
|
153
|
-
catch {
|
|
154
|
-
return false;
|
|
155
|
-
}
|
|
156
|
-
}
|
|
157
148
|
function getRecentCommits(count) {
|
|
158
149
|
try {
|
|
159
|
-
const metadataLog = (0,
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
});
|
|
164
|
-
const filesLog = (0, node_child_process_1.execFileSync)('git', ['log', `-${count}`, '--name-only', '--format=%H'], {
|
|
165
|
-
encoding: 'utf-8',
|
|
166
|
-
maxBuffer: 10 * 1024 * 1024,
|
|
167
|
-
stdio: ['ignore', 'pipe', 'ignore'],
|
|
168
|
-
});
|
|
169
|
-
const filesBySha = parseChangedFilesByCommit(filesLog);
|
|
170
|
-
return parseCommitMetadata(metadataLog).map((commit) => ({
|
|
150
|
+
const metadataLog = (0, git_helpers_1.runGit)(['log', `-${count}`, '--format=%H%x1f%an%x1f%aI%x1f%B%x1e']);
|
|
151
|
+
const filesLog = (0, git_helpers_1.runGit)(['log', `-${count}`, '--name-only', '--format=%H']);
|
|
152
|
+
const filesBySha = (0, git_helpers_1.parseChangedFilesByCommit)(filesLog);
|
|
153
|
+
return (0, git_helpers_1.parseCommitMetadata)(metadataLog).map((commit) => ({
|
|
171
154
|
...commit,
|
|
172
155
|
files_changed: filesBySha.get(commit.sha) || [],
|
|
173
156
|
}));
|
|
@@ -176,56 +159,4 @@ function getRecentCommits(count) {
|
|
|
176
159
|
return [];
|
|
177
160
|
}
|
|
178
161
|
}
|
|
179
|
-
function parseCommitMetadata(logOutput) {
|
|
180
|
-
const commits = [];
|
|
181
|
-
for (const rawRecord of logOutput.split('\x1e')) {
|
|
182
|
-
const record = rawRecord.trim();
|
|
183
|
-
if (!record)
|
|
184
|
-
continue;
|
|
185
|
-
const [sha = '', author = '', timestamp = '', ...messageParts] = record.split('\x1f');
|
|
186
|
-
if (!sha)
|
|
187
|
-
continue;
|
|
188
|
-
commits.push({
|
|
189
|
-
sha: sha.trim(),
|
|
190
|
-
author: author.trim(),
|
|
191
|
-
timestamp: timestamp.trim(),
|
|
192
|
-
message: messageParts.join('\x1f').replace(/\r\n/g, '\n').replace(/\n+$/, ''),
|
|
193
|
-
});
|
|
194
|
-
}
|
|
195
|
-
return commits;
|
|
196
|
-
}
|
|
197
|
-
function parseChangedFilesByCommit(logOutput) {
|
|
198
|
-
const filesBySha = new Map();
|
|
199
|
-
let currentSha = '';
|
|
200
|
-
for (const rawLine of logOutput.split(/\r?\n/)) {
|
|
201
|
-
const line = rawLine.trim();
|
|
202
|
-
if (!line)
|
|
203
|
-
continue;
|
|
204
|
-
if (/^[a-f0-9]{40}$/i.test(line)) {
|
|
205
|
-
currentSha = line;
|
|
206
|
-
if (!filesBySha.has(currentSha)) {
|
|
207
|
-
filesBySha.set(currentSha, []);
|
|
208
|
-
}
|
|
209
|
-
continue;
|
|
210
|
-
}
|
|
211
|
-
if (!currentSha)
|
|
212
|
-
continue;
|
|
213
|
-
const files = filesBySha.get(currentSha);
|
|
214
|
-
if (!files || files.includes(line))
|
|
215
|
-
continue;
|
|
216
|
-
files.push(line);
|
|
217
|
-
}
|
|
218
|
-
return filesBySha;
|
|
219
|
-
}
|
|
220
|
-
function hasCommits() {
|
|
221
|
-
try {
|
|
222
|
-
(0, node_child_process_1.execFileSync)('git', ['rev-parse', '--verify', 'HEAD'], {
|
|
223
|
-
stdio: 'ignore',
|
|
224
|
-
});
|
|
225
|
-
return true;
|
|
226
|
-
}
|
|
227
|
-
catch {
|
|
228
|
-
return false;
|
|
229
|
-
}
|
|
230
|
-
}
|
|
231
162
|
//# sourceMappingURL=why.js.map
|
package/dist/commands/why.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"why.js","sourceRoot":"","sources":["../../src/commands/why.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiBA,8CA4BC;AAED,gCAuCC;AAtFD,
|
|
1
|
+
{"version":3,"file":"why.js","sourceRoot":"","sources":["../../src/commands/why.ts"],"names":[],"mappings":"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"}
|
package/dist/flags.d.ts
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared CLI flag helpers.
|
|
3
|
+
*
|
|
4
|
+
* Centralized utilities for parsing positional flags and reading
|
|
5
|
+
* flag-referenced files from CLI argument arrays.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Extract a named flag's value from an argument array.
|
|
9
|
+
* Returns the string following `flag`, or undefined if not present.
|
|
10
|
+
*/
|
|
11
|
+
export declare function getFlag(args: string[], flag: string): string | undefined;
|
|
12
|
+
/**
|
|
13
|
+
* Read a file referenced by a flag value, throwing CLIError if missing.
|
|
14
|
+
*/
|
|
15
|
+
export declare function readFlagFile(filePath: string, flagName: string): string;
|
|
16
|
+
/**
|
|
17
|
+
* Tokenize a task prompt into keywords for ADF module resolution.
|
|
18
|
+
*/
|
|
19
|
+
export declare function tokenizeTask(task: string): string[];
|
|
20
|
+
//# sourceMappingURL=flags.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"flags.d.ts","sourceRoot":"","sources":["../src/flags.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH;;;GAGG;AACH,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAMxE;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAKvE;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAKnD"}
|
package/dist/flags.js
ADDED
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Shared CLI flag helpers.
|
|
4
|
+
*
|
|
5
|
+
* Centralized utilities for parsing positional flags and reading
|
|
6
|
+
* flag-referenced files from CLI argument arrays.
|
|
7
|
+
*/
|
|
8
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
9
|
+
if (k2 === undefined) k2 = k;
|
|
10
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
11
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
12
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
13
|
+
}
|
|
14
|
+
Object.defineProperty(o, k2, desc);
|
|
15
|
+
}) : (function(o, m, k, k2) {
|
|
16
|
+
if (k2 === undefined) k2 = k;
|
|
17
|
+
o[k2] = m[k];
|
|
18
|
+
}));
|
|
19
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
20
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
21
|
+
}) : function(o, v) {
|
|
22
|
+
o["default"] = v;
|
|
23
|
+
});
|
|
24
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
25
|
+
var ownKeys = function(o) {
|
|
26
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
27
|
+
var ar = [];
|
|
28
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
29
|
+
return ar;
|
|
30
|
+
};
|
|
31
|
+
return ownKeys(o);
|
|
32
|
+
};
|
|
33
|
+
return function (mod) {
|
|
34
|
+
if (mod && mod.__esModule) return mod;
|
|
35
|
+
var result = {};
|
|
36
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
37
|
+
__setModuleDefault(result, mod);
|
|
38
|
+
return result;
|
|
39
|
+
};
|
|
40
|
+
})();
|
|
41
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
42
|
+
exports.getFlag = getFlag;
|
|
43
|
+
exports.readFlagFile = readFlagFile;
|
|
44
|
+
exports.tokenizeTask = tokenizeTask;
|
|
45
|
+
const fs = __importStar(require("node:fs"));
|
|
46
|
+
const index_1 = require("./index");
|
|
47
|
+
/**
|
|
48
|
+
* Extract a named flag's value from an argument array.
|
|
49
|
+
* Returns the string following `flag`, or undefined if not present.
|
|
50
|
+
*/
|
|
51
|
+
function getFlag(args, flag) {
|
|
52
|
+
const idx = args.indexOf(flag);
|
|
53
|
+
if (idx !== -1 && idx + 1 < args.length) {
|
|
54
|
+
return args[idx + 1];
|
|
55
|
+
}
|
|
56
|
+
return undefined;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Read a file referenced by a flag value, throwing CLIError if missing.
|
|
60
|
+
*/
|
|
61
|
+
function readFlagFile(filePath, flagName) {
|
|
62
|
+
if (!fs.existsSync(filePath)) {
|
|
63
|
+
throw new index_1.CLIError(`File not found for ${flagName}: ${filePath}`);
|
|
64
|
+
}
|
|
65
|
+
return fs.readFileSync(filePath, 'utf-8');
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Tokenize a task prompt into keywords for ADF module resolution.
|
|
69
|
+
*/
|
|
70
|
+
function tokenizeTask(task) {
|
|
71
|
+
return task
|
|
72
|
+
.split(/[\s,;:()[\]{}]+/)
|
|
73
|
+
.filter(w => w.length > 1)
|
|
74
|
+
.map(w => w.replace(/[^a-zA-Z0-9]/g, ''));
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=flags.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"flags.js","sourceRoot":"","sources":["../src/flags.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AASH,0BAMC;AAKD,oCAKC;AAKD,oCAKC;AAjCD,4CAA8B;AAC9B,mCAAmC;AAEnC;;;GAGG;AACH,SAAgB,OAAO,CAAC,IAAc,EAAE,IAAY;IAClD,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/B,IAAI,GAAG,KAAK,CAAC,CAAC,IAAI,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;QACxC,OAAO,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;IACvB,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;GAEG;AACH,SAAgB,YAAY,CAAC,QAAgB,EAAE,QAAgB;IAC7D,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC7B,MAAM,IAAI,gBAAQ,CAAC,sBAAsB,QAAQ,KAAK,QAAQ,EAAE,CAAC,CAAC;IACpE,CAAC;IACD,OAAO,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;AAC5C,CAAC;AAED;;GAEG;AACH,SAAgB,YAAY,CAAC,IAAY;IACvC,OAAO,IAAI;SACR,KAAK,CAAC,iBAAiB,CAAC;SACxB,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;SACzB,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC,CAAC;AAC9C,CAAC"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared git invocation helpers.
|
|
3
|
+
*
|
|
4
|
+
* Centralizes all child-process git calls behind a single `runGit()` that
|
|
5
|
+
* uses `shell: true` for cross-platform PATH resolution (fixes WSL, CMD,
|
|
6
|
+
* PowerShell parity — see ADX-005 F2).
|
|
7
|
+
*/
|
|
8
|
+
import type { GitCommit } from '@stackbilt/types';
|
|
9
|
+
/**
|
|
10
|
+
* Run a git command and return its stdout.
|
|
11
|
+
*
|
|
12
|
+
* Uses `shell: true` so that the OS shell resolves the `git` binary via
|
|
13
|
+
* PATH. This is the key cross-platform fix: `execFileSync` *without* a
|
|
14
|
+
* shell can fail on WSL/Windows when git lives in a PATH entry the Node
|
|
15
|
+
* process doesn't see directly.
|
|
16
|
+
*/
|
|
17
|
+
export declare function runGit(args: string[]): string;
|
|
18
|
+
/** Returns `true` when the current working directory is inside a git work tree. */
|
|
19
|
+
export declare function isGitRepo(): boolean;
|
|
20
|
+
/** Returns `true` when the repository has at least one commit (HEAD exists). */
|
|
21
|
+
export declare function hasCommits(): boolean;
|
|
22
|
+
/** Extract a human-readable message from a git child-process error. */
|
|
23
|
+
export declare function getGitErrorMessage(error: unknown): string;
|
|
24
|
+
/**
|
|
25
|
+
* Parse `git log --format=%H%x1f%an%x1f%aI%x1f%B%x1e` output into commit
|
|
26
|
+
* metadata (without file lists).
|
|
27
|
+
*/
|
|
28
|
+
export declare function parseCommitMetadata(logOutput: string): Array<Omit<GitCommit, 'files_changed'>>;
|
|
29
|
+
/**
|
|
30
|
+
* Parse `git log --name-only --format=%H` output into a Map of SHA → changed
|
|
31
|
+
* file paths.
|
|
32
|
+
*/
|
|
33
|
+
export declare function parseChangedFilesByCommit(logOutput: string): Map<string, string[]>;
|
|
34
|
+
/** Return a short recent-commits range like `HEAD~5..HEAD`. */
|
|
35
|
+
export declare function getRecentCommitRange(): string;
|
|
36
|
+
//# sourceMappingURL=git-helpers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"git-helpers.d.ts","sourceRoot":"","sources":["../src/git-helpers.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAMlD;;;;;;;GAOG;AACH,wBAAgB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,CAO7C;AAED,mFAAmF;AACnF,wBAAgB,SAAS,IAAI,OAAO,CAOnC;AAED,gFAAgF;AAChF,wBAAgB,UAAU,IAAI,OAAO,CAOpC;AAMD,uEAAuE;AACvE,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAiBzD;AAMD;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,SAAS,EAAE,eAAe,CAAC,CAAC,CAmB9F;AAED;;;GAGG;AACH,wBAAgB,yBAAyB,CAAC,SAAS,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAuBlF;AAMD,+DAA+D;AAC/D,wBAAgB,oBAAoB,IAAI,MAAM,CAW7C"}
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Shared git invocation helpers.
|
|
4
|
+
*
|
|
5
|
+
* Centralizes all child-process git calls behind a single `runGit()` that
|
|
6
|
+
* uses `shell: true` for cross-platform PATH resolution (fixes WSL, CMD,
|
|
7
|
+
* PowerShell parity — see ADX-005 F2).
|
|
8
|
+
*/
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.runGit = runGit;
|
|
11
|
+
exports.isGitRepo = isGitRepo;
|
|
12
|
+
exports.hasCommits = hasCommits;
|
|
13
|
+
exports.getGitErrorMessage = getGitErrorMessage;
|
|
14
|
+
exports.parseCommitMetadata = parseCommitMetadata;
|
|
15
|
+
exports.parseChangedFilesByCommit = parseChangedFilesByCommit;
|
|
16
|
+
exports.getRecentCommitRange = getRecentCommitRange;
|
|
17
|
+
const node_child_process_1 = require("node:child_process");
|
|
18
|
+
// ---------------------------------------------------------------------------
|
|
19
|
+
// Core git invocation
|
|
20
|
+
// ---------------------------------------------------------------------------
|
|
21
|
+
/**
|
|
22
|
+
* Run a git command and return its stdout.
|
|
23
|
+
*
|
|
24
|
+
* Uses `shell: true` so that the OS shell resolves the `git` binary via
|
|
25
|
+
* PATH. This is the key cross-platform fix: `execFileSync` *without* a
|
|
26
|
+
* shell can fail on WSL/Windows when git lives in a PATH entry the Node
|
|
27
|
+
* process doesn't see directly.
|
|
28
|
+
*/
|
|
29
|
+
function runGit(args) {
|
|
30
|
+
return (0, node_child_process_1.execFileSync)('git', args, {
|
|
31
|
+
encoding: 'utf-8',
|
|
32
|
+
stdio: ['ignore', 'pipe', 'pipe'],
|
|
33
|
+
maxBuffer: 10 * 1024 * 1024,
|
|
34
|
+
shell: true,
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
/** Returns `true` when the current working directory is inside a git work tree. */
|
|
38
|
+
function isGitRepo() {
|
|
39
|
+
try {
|
|
40
|
+
runGit(['rev-parse', '--is-inside-work-tree']);
|
|
41
|
+
return true;
|
|
42
|
+
}
|
|
43
|
+
catch {
|
|
44
|
+
return false;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
/** Returns `true` when the repository has at least one commit (HEAD exists). */
|
|
48
|
+
function hasCommits() {
|
|
49
|
+
try {
|
|
50
|
+
runGit(['rev-parse', '--verify', 'HEAD']);
|
|
51
|
+
return true;
|
|
52
|
+
}
|
|
53
|
+
catch {
|
|
54
|
+
return false;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
// ---------------------------------------------------------------------------
|
|
58
|
+
// Error formatting
|
|
59
|
+
// ---------------------------------------------------------------------------
|
|
60
|
+
/** Extract a human-readable message from a git child-process error. */
|
|
61
|
+
function getGitErrorMessage(error) {
|
|
62
|
+
const fallback = 'Unknown git error.';
|
|
63
|
+
if (!(error instanceof Error))
|
|
64
|
+
return fallback;
|
|
65
|
+
const execError = error;
|
|
66
|
+
if (execError.stderr) {
|
|
67
|
+
const stderr = execError.stderr.toString().trim();
|
|
68
|
+
if (stderr.length > 0) {
|
|
69
|
+
return stderr;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
if (execError.message) {
|
|
73
|
+
return execError.message.trim();
|
|
74
|
+
}
|
|
75
|
+
return fallback;
|
|
76
|
+
}
|
|
77
|
+
// ---------------------------------------------------------------------------
|
|
78
|
+
// Commit log parsing (shared by audit, validate, why)
|
|
79
|
+
// ---------------------------------------------------------------------------
|
|
80
|
+
/**
|
|
81
|
+
* Parse `git log --format=%H%x1f%an%x1f%aI%x1f%B%x1e` output into commit
|
|
82
|
+
* metadata (without file lists).
|
|
83
|
+
*/
|
|
84
|
+
function parseCommitMetadata(logOutput) {
|
|
85
|
+
const commits = [];
|
|
86
|
+
for (const rawRecord of logOutput.split('\x1e')) {
|
|
87
|
+
const record = rawRecord.trim();
|
|
88
|
+
if (!record)
|
|
89
|
+
continue;
|
|
90
|
+
const [sha = '', author = '', timestamp = '', ...messageParts] = record.split('\x1f');
|
|
91
|
+
if (!sha)
|
|
92
|
+
continue;
|
|
93
|
+
commits.push({
|
|
94
|
+
sha: sha.trim(),
|
|
95
|
+
author: author.trim(),
|
|
96
|
+
timestamp: timestamp.trim(),
|
|
97
|
+
message: messageParts.join('\x1f').replace(/\r\n/g, '\n').replace(/\n+$/, ''),
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
return commits;
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Parse `git log --name-only --format=%H` output into a Map of SHA → changed
|
|
104
|
+
* file paths.
|
|
105
|
+
*/
|
|
106
|
+
function parseChangedFilesByCommit(logOutput) {
|
|
107
|
+
const filesBySha = new Map();
|
|
108
|
+
let currentSha = '';
|
|
109
|
+
for (const rawLine of logOutput.split(/\r?\n/)) {
|
|
110
|
+
const line = rawLine.trim();
|
|
111
|
+
if (!line)
|
|
112
|
+
continue;
|
|
113
|
+
if (/^[a-f0-9]{40}$/i.test(line)) {
|
|
114
|
+
currentSha = line;
|
|
115
|
+
if (!filesBySha.has(currentSha)) {
|
|
116
|
+
filesBySha.set(currentSha, []);
|
|
117
|
+
}
|
|
118
|
+
continue;
|
|
119
|
+
}
|
|
120
|
+
if (!currentSha)
|
|
121
|
+
continue;
|
|
122
|
+
const files = filesBySha.get(currentSha);
|
|
123
|
+
if (!files || files.includes(line))
|
|
124
|
+
continue;
|
|
125
|
+
files.push(line);
|
|
126
|
+
}
|
|
127
|
+
return filesBySha;
|
|
128
|
+
}
|
|
129
|
+
// ---------------------------------------------------------------------------
|
|
130
|
+
// Commit range helpers (shared by audit, validate)
|
|
131
|
+
// ---------------------------------------------------------------------------
|
|
132
|
+
/** Return a short recent-commits range like `HEAD~5..HEAD`. */
|
|
133
|
+
function getRecentCommitRange() {
|
|
134
|
+
try {
|
|
135
|
+
const count = Number.parseInt(runGit(['rev-list', '--count', 'HEAD']).trim(), 10);
|
|
136
|
+
if (!Number.isFinite(count) || count <= 1) {
|
|
137
|
+
return 'HEAD';
|
|
138
|
+
}
|
|
139
|
+
const span = Math.min(5, count - 1);
|
|
140
|
+
return `HEAD~${span}..HEAD`;
|
|
141
|
+
}
|
|
142
|
+
catch {
|
|
143
|
+
return 'HEAD';
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
//# sourceMappingURL=git-helpers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"git-helpers.js","sourceRoot":"","sources":["../src/git-helpers.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AA2DH,eAAO,MAAM,SAAS;;;;CAIZ,CAAC;AAEX,qBAAa,QAAS,SAAQ,KAAK;aAGf,QAAQ,EAAE,MAAM;gBADhC,OAAO,EAAE,MAAM,EACC,QAAQ,GAAE,MAAgC;CAK7D;AAED,MAAM,WAAW,UAAU;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,MAAM,EAAE,OAAO,CAAC;IAChB,GAAG,EAAE,OAAO,CAAC;CACd;AAED,wBAAsB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAqGzD"}
|
package/dist/index.js
CHANGED
|
@@ -22,6 +22,9 @@ const why_1 = require("./commands/why");
|
|
|
22
22
|
const hook_1 = require("./commands/hook");
|
|
23
23
|
const adf_1 = require("./commands/adf");
|
|
24
24
|
const bootstrap_1 = require("./commands/bootstrap");
|
|
25
|
+
const telemetry_1 = require("./commands/telemetry");
|
|
26
|
+
const telemetry_2 = require("./telemetry");
|
|
27
|
+
const flags_1 = require("./flags");
|
|
25
28
|
const package_json_1 = __importDefault(require("../package.json"));
|
|
26
29
|
const CLI_VERSION = package_json_1.default.version;
|
|
27
30
|
const HELP = `
|
|
@@ -45,7 +48,8 @@ Usage:
|
|
|
45
48
|
Install git commit-msg hook for trailer normalization
|
|
46
49
|
charter hook install --pre-commit [--force]
|
|
47
50
|
Install git pre-commit hook for ADF evidence gate
|
|
48
|
-
charter adf <subcommand> ADF context format tools (init, fmt, patch, create, bundle, sync, evidence, migrate)
|
|
51
|
+
charter adf <subcommand> ADF context format tools (init, fmt, patch, create, bundle, sync, evidence, migrate, metrics)
|
|
52
|
+
charter telemetry report Local telemetry summary (passive CLI observability)
|
|
49
53
|
charter why Explain why teams adopt Charter and expected ROI
|
|
50
54
|
charter doctor [--adf-only] Check CLI + config health (or ADF-only wiring checks)
|
|
51
55
|
charter --help Show this help
|
|
@@ -76,61 +80,97 @@ class CLIError extends Error {
|
|
|
76
80
|
}
|
|
77
81
|
exports.CLIError = CLIError;
|
|
78
82
|
async function run(args) {
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
format,
|
|
94
|
-
ciMode: args.includes('--ci'),
|
|
95
|
-
yes: args.includes('--yes'),
|
|
83
|
+
const start = Date.now();
|
|
84
|
+
const configPath = (0, flags_1.getFlag)(args, '--config') || '.charter';
|
|
85
|
+
const rawFormat = (0, flags_1.getFlag)(args, '--format') || 'text';
|
|
86
|
+
const ciMode = args.includes('--ci');
|
|
87
|
+
const yes = args.includes('--yes');
|
|
88
|
+
const writeTelemetry = (exitCode, errorName) => {
|
|
89
|
+
(0, telemetry_2.recordTelemetryEvent)(configPath, {
|
|
90
|
+
args,
|
|
91
|
+
format: rawFormat,
|
|
92
|
+
ciMode,
|
|
93
|
+
durationMs: Date.now() - start,
|
|
94
|
+
exitCode,
|
|
95
|
+
errorName,
|
|
96
|
+
});
|
|
96
97
|
};
|
|
97
|
-
|
|
98
|
-
|
|
98
|
+
try {
|
|
99
|
+
if (args.includes('--help') || args.includes('-h')) {
|
|
100
|
+
console.log(HELP);
|
|
101
|
+
writeTelemetry(exports.EXIT_CODE.SUCCESS);
|
|
102
|
+
return exports.EXIT_CODE.SUCCESS;
|
|
103
|
+
}
|
|
104
|
+
if (args.includes('--version') || args.includes('-v')) {
|
|
105
|
+
console.log(`charter v${CLI_VERSION}`);
|
|
106
|
+
writeTelemetry(exports.EXIT_CODE.SUCCESS);
|
|
107
|
+
return exports.EXIT_CODE.SUCCESS;
|
|
108
|
+
}
|
|
109
|
+
if (rawFormat !== 'text' && rawFormat !== 'json') {
|
|
110
|
+
throw new CLIError(`Invalid --format value: ${rawFormat}. Use text or json.`);
|
|
111
|
+
}
|
|
112
|
+
const options = {
|
|
113
|
+
configPath,
|
|
114
|
+
format: rawFormat,
|
|
115
|
+
ciMode,
|
|
116
|
+
yes,
|
|
117
|
+
};
|
|
118
|
+
let exitCode;
|
|
119
|
+
if (args.length === 0 || args[0].startsWith('-')) {
|
|
120
|
+
exitCode = await (0, why_1.quickstartCommand)(options);
|
|
121
|
+
writeTelemetry(exitCode);
|
|
122
|
+
return exitCode;
|
|
123
|
+
}
|
|
124
|
+
const command = args[0];
|
|
125
|
+
const restArgs = args.slice(1);
|
|
126
|
+
switch (command) {
|
|
127
|
+
case 'bootstrap':
|
|
128
|
+
exitCode = await (0, bootstrap_1.bootstrapCommand)(options, restArgs);
|
|
129
|
+
break;
|
|
130
|
+
case 'setup':
|
|
131
|
+
exitCode = await (0, setup_1.setupCommand)(options, restArgs);
|
|
132
|
+
break;
|
|
133
|
+
case 'init':
|
|
134
|
+
exitCode = await (0, init_1.initCommand)(options, restArgs);
|
|
135
|
+
break;
|
|
136
|
+
case 'validate':
|
|
137
|
+
exitCode = await (0, validate_1.validateCommand)(options, restArgs);
|
|
138
|
+
break;
|
|
139
|
+
case 'audit':
|
|
140
|
+
exitCode = await (0, audit_1.auditCommand)(options, restArgs);
|
|
141
|
+
break;
|
|
142
|
+
case 'drift':
|
|
143
|
+
exitCode = await (0, drift_1.driftCommand)(options, restArgs);
|
|
144
|
+
break;
|
|
145
|
+
case 'classify':
|
|
146
|
+
exitCode = await (0, classify_1.classifyCommand)(options, restArgs);
|
|
147
|
+
break;
|
|
148
|
+
case 'why':
|
|
149
|
+
exitCode = await (0, why_1.whyCommand)(options);
|
|
150
|
+
break;
|
|
151
|
+
case 'doctor':
|
|
152
|
+
exitCode = await (0, doctor_1.doctorCommand)(options, restArgs);
|
|
153
|
+
break;
|
|
154
|
+
case 'hook':
|
|
155
|
+
exitCode = await (0, hook_1.hookCommand)(options, restArgs);
|
|
156
|
+
break;
|
|
157
|
+
case 'adf':
|
|
158
|
+
exitCode = await (0, adf_1.adfCommand)(options, restArgs);
|
|
159
|
+
break;
|
|
160
|
+
case 'telemetry':
|
|
161
|
+
exitCode = await (0, telemetry_1.telemetryCommand)(options, restArgs);
|
|
162
|
+
break;
|
|
163
|
+
default:
|
|
164
|
+
throw new CLIError(`Unknown command: ${command}\n${HELP}`);
|
|
165
|
+
}
|
|
166
|
+
writeTelemetry(exitCode);
|
|
167
|
+
return exitCode;
|
|
99
168
|
}
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
case 'setup':
|
|
106
|
-
return (0, setup_1.setupCommand)(options, restArgs);
|
|
107
|
-
case 'init':
|
|
108
|
-
return (0, init_1.initCommand)(options, restArgs);
|
|
109
|
-
case 'validate':
|
|
110
|
-
return (0, validate_1.validateCommand)(options, restArgs);
|
|
111
|
-
case 'audit':
|
|
112
|
-
return (0, audit_1.auditCommand)(options, restArgs);
|
|
113
|
-
case 'drift':
|
|
114
|
-
return (0, drift_1.driftCommand)(options, restArgs);
|
|
115
|
-
case 'classify':
|
|
116
|
-
return (0, classify_1.classifyCommand)(options, restArgs);
|
|
117
|
-
case 'why':
|
|
118
|
-
return (0, why_1.whyCommand)(options);
|
|
119
|
-
case 'doctor':
|
|
120
|
-
return (0, doctor_1.doctorCommand)(options, restArgs);
|
|
121
|
-
case 'hook':
|
|
122
|
-
return (0, hook_1.hookCommand)(options, restArgs);
|
|
123
|
-
case 'adf':
|
|
124
|
-
return (0, adf_1.adfCommand)(options, restArgs);
|
|
125
|
-
default:
|
|
126
|
-
throw new CLIError(`Unknown command: ${command}\n${HELP}`);
|
|
127
|
-
}
|
|
128
|
-
}
|
|
129
|
-
function getFlag(args, flag) {
|
|
130
|
-
const idx = args.indexOf(flag);
|
|
131
|
-
if (idx !== -1 && idx + 1 < args.length) {
|
|
132
|
-
return args[idx + 1];
|
|
169
|
+
catch (err) {
|
|
170
|
+
const exitCode = err instanceof CLIError ? err.exitCode : exports.EXIT_CODE.RUNTIME_ERROR;
|
|
171
|
+
const errorName = err instanceof Error ? err.name : 'UnknownError';
|
|
172
|
+
writeTelemetry(exitCode, errorName);
|
|
173
|
+
throw err;
|
|
133
174
|
}
|
|
134
|
-
return undefined;
|
|
135
175
|
}
|
|
136
176
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;;;;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|