@beignet/cli 0.0.48 → 0.0.50
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/CHANGELOG.md +54 -0
- package/README.md +117 -22
- package/dist/analysis/contract-factories.d.ts +17 -0
- package/dist/analysis/contract-factories.d.ts.map +1 -0
- package/dist/analysis/contract-factories.js +176 -0
- package/dist/analysis/contract-factories.js.map +1 -0
- package/dist/analysis/layers.d.ts +5 -0
- package/dist/analysis/layers.d.ts.map +1 -0
- package/dist/analysis/layers.js +172 -0
- package/dist/analysis/layers.js.map +1 -0
- package/dist/analysis/port-wiring.d.ts +23 -0
- package/dist/analysis/port-wiring.d.ts.map +1 -0
- package/dist/analysis/port-wiring.js +379 -0
- package/dist/analysis/port-wiring.js.map +1 -0
- package/dist/analysis/source-index.d.ts +5 -0
- package/dist/analysis/source-index.d.ts.map +1 -1
- package/dist/analysis/source-index.js +171 -42
- package/dist/analysis/source-index.js.map +1 -1
- package/dist/analysis/workspace.d.ts +11 -4
- package/dist/analysis/workspace.d.ts.map +1 -1
- package/dist/analysis/workspace.js +78 -8
- package/dist/analysis/workspace.js.map +1 -1
- package/dist/app-map-changes.d.ts +103 -0
- package/dist/app-map-changes.d.ts.map +1 -0
- package/dist/app-map-changes.js +949 -0
- package/dist/app-map-changes.js.map +1 -0
- package/dist/app-map.d.ts.map +1 -1
- package/dist/app-map.js +311 -92
- package/dist/app-map.js.map +1 -1
- package/dist/check.js +37 -3
- package/dist/check.js.map +1 -1
- package/dist/explain.js +4 -4
- package/dist/explain.js.map +1 -1
- package/dist/git-changes.d.ts +30 -0
- package/dist/git-changes.d.ts.map +1 -0
- package/dist/git-changes.js +367 -0
- package/dist/git-changes.js.map +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +26 -1
- package/dist/index.js.map +1 -1
- package/dist/inspect.d.ts.map +1 -1
- package/dist/inspect.js +706 -186
- package/dist/inspect.js.map +1 -1
- package/dist/lib.d.ts +3 -0
- package/dist/lib.d.ts.map +1 -1
- package/dist/lib.js +1 -0
- package/dist/lib.js.map +1 -1
- package/dist/lint.d.ts.map +1 -1
- package/dist/lint.js +309 -487
- package/dist/lint.js.map +1 -1
- package/dist/make/inbox.d.ts.map +1 -1
- package/dist/make/inbox.js +11 -4
- package/dist/make/inbox.js.map +1 -1
- package/dist/make/payments.js +2 -2
- package/dist/make/shared.d.ts.map +1 -1
- package/dist/make/shared.js +31 -27
- package/dist/make/shared.js.map +1 -1
- package/dist/make.d.ts.map +1 -1
- package/dist/make.js +144 -8
- package/dist/make.js.map +1 -1
- package/dist/mcp.d.ts +1 -1
- package/dist/mcp.d.ts.map +1 -1
- package/dist/mcp.js +43 -21
- package/dist/mcp.js.map +1 -1
- package/dist/provider-add.d.ts.map +1 -1
- package/dist/provider-add.js +142 -7
- package/dist/provider-add.js.map +1 -1
- package/dist/registry-edits.d.ts +7 -0
- package/dist/registry-edits.d.ts.map +1 -1
- package/dist/registry-edits.js +237 -53
- package/dist/registry-edits.js.map +1 -1
- package/dist/templates/agents.d.ts.map +1 -1
- package/dist/templates/agents.js +37 -1
- package/dist/templates/agents.js.map +1 -1
- package/dist/templates/base.d.ts.map +1 -1
- package/dist/templates/base.js +13 -2
- package/dist/templates/base.js.map +1 -1
- package/dist/templates/server.d.ts.map +1 -1
- package/dist/templates/server.js +2 -0
- package/dist/templates/server.js.map +1 -1
- package/dist/templates/shared.d.ts +1 -0
- package/dist/templates/shared.d.ts.map +1 -1
- package/dist/templates/shared.js +3 -2
- package/dist/templates/shared.js.map +1 -1
- package/package.json +7 -6
- package/skills/app-structure/SKILL.md +71 -7
- package/src/analysis/contract-factories.ts +256 -0
- package/src/analysis/layers.ts +266 -0
- package/src/analysis/port-wiring.ts +506 -0
- package/src/analysis/source-index.ts +225 -57
- package/src/analysis/workspace.ts +134 -9
- package/src/app-map-changes.ts +1462 -0
- package/src/app-map.ts +418 -109
- package/src/check.ts +51 -3
- package/src/explain.ts +4 -4
- package/src/git-changes.ts +511 -0
- package/src/index.ts +39 -1
- package/src/inspect.ts +1005 -238
- package/src/lib.ts +21 -0
- package/src/lint.ts +393 -643
- package/src/make/inbox.ts +11 -4
- package/src/make/payments.ts +2 -2
- package/src/make/shared.ts +31 -27
- package/src/make.ts +225 -8
- package/src/mcp.ts +51 -24
- package/src/provider-add.ts +186 -7
- package/src/registry-edits.ts +313 -63
- package/src/templates/agents.ts +37 -1
- package/src/templates/base.ts +13 -2
- package/src/templates/server.ts +2 -0
- package/src/templates/shared.ts +3 -2
|
@@ -0,0 +1,367 @@
|
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
2
|
+
import { createReadStream } from "node:fs";
|
|
3
|
+
import { lstat, readlink } from "node:fs/promises";
|
|
4
|
+
import path from "node:path";
|
|
5
|
+
import { spawnCommand } from "./db.js";
|
|
6
|
+
const emptyTreeObjectIds = {
|
|
7
|
+
sha1: "4b825dc642cb6eb9a060e54bf8d69288fbee4904",
|
|
8
|
+
sha256: "6ef19b41225c5369f1c104d45d8d85efa9b057b53b14b4b9b939dd74decc5321",
|
|
9
|
+
};
|
|
10
|
+
const maxGitOutputBytes = 64 * 1024 * 1024;
|
|
11
|
+
export async function readGitChangeSet(options) {
|
|
12
|
+
if (options.base !== undefined && options.base.length === 0) {
|
|
13
|
+
throw new Error("Git base must not be empty.");
|
|
14
|
+
}
|
|
15
|
+
const repositoryRoot = path.resolve(await gitText(options.cwd, ["rev-parse", "--show-toplevel"]));
|
|
16
|
+
const head = await resolveHeadCommit(repositoryRoot);
|
|
17
|
+
let comparison;
|
|
18
|
+
let comparisonCommit;
|
|
19
|
+
if (options.base !== undefined) {
|
|
20
|
+
if (!head) {
|
|
21
|
+
throw new Error(`Cannot compare --base ${JSON.stringify(options.base)} because this repository does not have a HEAD commit.`);
|
|
22
|
+
}
|
|
23
|
+
const baseCommit = await gitText(repositoryRoot, [
|
|
24
|
+
"rev-parse",
|
|
25
|
+
"--verify",
|
|
26
|
+
"--end-of-options",
|
|
27
|
+
`${options.base}^{commit}`,
|
|
28
|
+
]).catch(() => {
|
|
29
|
+
throw new Error(`Could not resolve local Git base ${JSON.stringify(options.base)}. Fetch it before running Beignet; changed mapping never accesses the network.`);
|
|
30
|
+
});
|
|
31
|
+
const mergeBase = await gitText(repositoryRoot, [
|
|
32
|
+
"merge-base",
|
|
33
|
+
baseCommit,
|
|
34
|
+
head,
|
|
35
|
+
]).catch(() => {
|
|
36
|
+
throw new Error(`Could not find a merge base between ${JSON.stringify(options.base)} and HEAD.`);
|
|
37
|
+
});
|
|
38
|
+
comparisonCommit = mergeBase;
|
|
39
|
+
comparison = {
|
|
40
|
+
mode: "base",
|
|
41
|
+
base: options.base,
|
|
42
|
+
baseCommit,
|
|
43
|
+
mergeBase,
|
|
44
|
+
head,
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
comparisonCommit = head ?? (await emptyTreeObjectId(repositoryRoot));
|
|
49
|
+
comparison = {
|
|
50
|
+
mode: "worktree",
|
|
51
|
+
comparisonCommit,
|
|
52
|
+
...(head ? { head } : {}),
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
const committed = comparison.mode === "base"
|
|
56
|
+
? await gitDiffOutput(repositoryRoot, [
|
|
57
|
+
comparison.mergeBase,
|
|
58
|
+
comparison.head,
|
|
59
|
+
])
|
|
60
|
+
: "";
|
|
61
|
+
const staged = await gitDiffOutput(repositoryRoot, [
|
|
62
|
+
"--cached",
|
|
63
|
+
head ?? comparisonCommit,
|
|
64
|
+
]);
|
|
65
|
+
const unstaged = await gitDiffOutput(repositoryRoot, []);
|
|
66
|
+
const untracked = await gitOutput(repositoryRoot, [
|
|
67
|
+
"ls-files",
|
|
68
|
+
"--others",
|
|
69
|
+
"--exclude-standard",
|
|
70
|
+
"-z",
|
|
71
|
+
]);
|
|
72
|
+
const files = mergeChangedFiles(parseNameStatus(committed), parseNameStatus(staged), parseNameStatus(unstaged), parseUntracked(untracked));
|
|
73
|
+
return { repositoryRoot, comparison, files };
|
|
74
|
+
}
|
|
75
|
+
async function emptyTreeObjectId(repositoryRoot) {
|
|
76
|
+
const objectFormat = (await tryGitText(repositoryRoot, [
|
|
77
|
+
"rev-parse",
|
|
78
|
+
"--show-object-format=storage",
|
|
79
|
+
])) ?? "sha1";
|
|
80
|
+
const objectId = emptyTreeObjectIds[objectFormat];
|
|
81
|
+
if (!objectId) {
|
|
82
|
+
throw new Error(`Unsupported Git object format ${JSON.stringify(objectFormat)}.`);
|
|
83
|
+
}
|
|
84
|
+
return objectId;
|
|
85
|
+
}
|
|
86
|
+
export async function hashGitChanges(changeSet, files = changeSet.files) {
|
|
87
|
+
const hash = createHash("sha256");
|
|
88
|
+
const indexEntries = await readGitIndexEntries(changeSet.repositoryRoot);
|
|
89
|
+
hash.update(JSON.stringify(changeSet.comparison));
|
|
90
|
+
hash.update("\0");
|
|
91
|
+
for (const file of [...files].sort(compareChangedFiles)) {
|
|
92
|
+
hash.update(JSON.stringify({
|
|
93
|
+
status: file.status,
|
|
94
|
+
path: file.path,
|
|
95
|
+
oldPath: file.oldPath,
|
|
96
|
+
}));
|
|
97
|
+
hash.update("\0");
|
|
98
|
+
for (const relativePath of uniquePaths([file.path, file.oldPath])) {
|
|
99
|
+
hash.update(relativePath);
|
|
100
|
+
hash.update("\0index\0");
|
|
101
|
+
hash.update(indexEntries.get(relativePath) ?? "missing");
|
|
102
|
+
hash.update("\0worktree\0");
|
|
103
|
+
await hashCurrentPath(hash, changeSet.repositoryRoot, relativePath);
|
|
104
|
+
hash.update("\0");
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
return `sha256:${hash.digest("hex")}`;
|
|
108
|
+
}
|
|
109
|
+
async function readGitIndexEntries(repositoryRoot) {
|
|
110
|
+
const output = await gitOutput(repositoryRoot, ["ls-files", "--stage", "-z"]);
|
|
111
|
+
const entries = new Map();
|
|
112
|
+
for (const field of output.split("\0").filter(Boolean)) {
|
|
113
|
+
const separator = field.indexOf("\t");
|
|
114
|
+
if (separator === -1) {
|
|
115
|
+
throw new Error("Git returned an incomplete index entry.");
|
|
116
|
+
}
|
|
117
|
+
const metadata = field.slice(0, separator);
|
|
118
|
+
const file = normalizeGitPath(field.slice(separator + 1));
|
|
119
|
+
const values = entries.get(file) ?? [];
|
|
120
|
+
values.push(metadata);
|
|
121
|
+
entries.set(file, values);
|
|
122
|
+
}
|
|
123
|
+
return new Map([...entries].map(([file, values]) => [file, [...values].sort().join("\0")]));
|
|
124
|
+
}
|
|
125
|
+
async function hashCurrentPath(hash, repositoryRoot, relativePath) {
|
|
126
|
+
const absolutePath = path.join(repositoryRoot, relativePath);
|
|
127
|
+
let stats;
|
|
128
|
+
try {
|
|
129
|
+
stats = await lstat(absolutePath);
|
|
130
|
+
}
|
|
131
|
+
catch (error) {
|
|
132
|
+
if (error.code === "ENOENT") {
|
|
133
|
+
hash.update("missing");
|
|
134
|
+
return;
|
|
135
|
+
}
|
|
136
|
+
throw error;
|
|
137
|
+
}
|
|
138
|
+
if (stats.isSymbolicLink()) {
|
|
139
|
+
hash.update("symlink\0");
|
|
140
|
+
hash.update(String(stats.mode));
|
|
141
|
+
hash.update("\0");
|
|
142
|
+
hash.update(await readlink(absolutePath));
|
|
143
|
+
return;
|
|
144
|
+
}
|
|
145
|
+
if (stats.isDirectory()) {
|
|
146
|
+
hash.update("directory\0");
|
|
147
|
+
const head = await tryGitText(absolutePath, [
|
|
148
|
+
"rev-parse",
|
|
149
|
+
"--verify",
|
|
150
|
+
"HEAD^{commit}",
|
|
151
|
+
]);
|
|
152
|
+
const status = await tryGitOutput(absolutePath, [
|
|
153
|
+
"status",
|
|
154
|
+
"--porcelain=v1",
|
|
155
|
+
"-z",
|
|
156
|
+
"--untracked-files=all",
|
|
157
|
+
]);
|
|
158
|
+
hash.update(head ?? "unknown-head");
|
|
159
|
+
hash.update("\0");
|
|
160
|
+
hash.update(status ?? "unknown-status");
|
|
161
|
+
return;
|
|
162
|
+
}
|
|
163
|
+
if (!stats.isFile()) {
|
|
164
|
+
hash.update("special");
|
|
165
|
+
return;
|
|
166
|
+
}
|
|
167
|
+
hash.update("file\0");
|
|
168
|
+
hash.update(String(stats.mode));
|
|
169
|
+
hash.update("\0");
|
|
170
|
+
for await (const chunk of createReadStream(absolutePath)) {
|
|
171
|
+
hash.update(chunk);
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
function parseNameStatus(output) {
|
|
175
|
+
if (!output)
|
|
176
|
+
return [];
|
|
177
|
+
const fields = output.split("\0");
|
|
178
|
+
const files = [];
|
|
179
|
+
for (let index = 0; index < fields.length;) {
|
|
180
|
+
const rawStatus = fields[index++];
|
|
181
|
+
if (!rawStatus)
|
|
182
|
+
continue;
|
|
183
|
+
const status = changedFileStatus(rawStatus[0]);
|
|
184
|
+
if (status === "renamed" || status === "copied") {
|
|
185
|
+
const oldPath = fields[index++];
|
|
186
|
+
const nextPath = fields[index++];
|
|
187
|
+
if (!oldPath || !nextPath) {
|
|
188
|
+
throw new Error("Git returned an incomplete rename or copy record.");
|
|
189
|
+
}
|
|
190
|
+
files.push({
|
|
191
|
+
status,
|
|
192
|
+
oldPath: normalizeGitPath(oldPath),
|
|
193
|
+
path: normalizeGitPath(nextPath),
|
|
194
|
+
});
|
|
195
|
+
continue;
|
|
196
|
+
}
|
|
197
|
+
const file = fields[index++];
|
|
198
|
+
if (!file)
|
|
199
|
+
throw new Error("Git returned an incomplete changed-file record.");
|
|
200
|
+
files.push({ status, path: normalizeGitPath(file) });
|
|
201
|
+
}
|
|
202
|
+
return files;
|
|
203
|
+
}
|
|
204
|
+
function parseUntracked(output) {
|
|
205
|
+
return output
|
|
206
|
+
.split("\0")
|
|
207
|
+
.filter(Boolean)
|
|
208
|
+
.map((file) => ({ status: "untracked", path: normalizeGitPath(file) }));
|
|
209
|
+
}
|
|
210
|
+
function mergeChangedFiles(...groups) {
|
|
211
|
+
const files = new Map();
|
|
212
|
+
for (const group of groups) {
|
|
213
|
+
for (const file of group) {
|
|
214
|
+
if (file.status === "renamed" && file.oldPath) {
|
|
215
|
+
const source = files.get(file.oldPath);
|
|
216
|
+
if (source) {
|
|
217
|
+
files.delete(file.oldPath);
|
|
218
|
+
const composed = composeRename(source, file);
|
|
219
|
+
files.set(composed.path, mergeSameDestination(files.get(composed.path), composed));
|
|
220
|
+
continue;
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
files.set(file.path, mergeSameDestination(files.get(file.path), file));
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
return [...files.values()].sort(compareChangedFiles);
|
|
227
|
+
}
|
|
228
|
+
function composeRename(source, rename) {
|
|
229
|
+
if (source.status === "renamed" && source.oldPath) {
|
|
230
|
+
return rename.path === source.oldPath
|
|
231
|
+
? source
|
|
232
|
+
: { status: "renamed", oldPath: source.oldPath, path: rename.path };
|
|
233
|
+
}
|
|
234
|
+
if (source.status === "copied" && source.oldPath) {
|
|
235
|
+
return { status: "copied", oldPath: source.oldPath, path: rename.path };
|
|
236
|
+
}
|
|
237
|
+
if (source.status === "added" || source.status === "untracked") {
|
|
238
|
+
return { status: source.status, path: rename.path };
|
|
239
|
+
}
|
|
240
|
+
return rename;
|
|
241
|
+
}
|
|
242
|
+
function mergeSameDestination(previous, next) {
|
|
243
|
+
if (previous &&
|
|
244
|
+
(previous.status === "added" ||
|
|
245
|
+
previous.status === "copied" ||
|
|
246
|
+
previous.status === "renamed" ||
|
|
247
|
+
previous.status === "untracked") &&
|
|
248
|
+
next.status !== "unmerged" &&
|
|
249
|
+
next.status !== "unknown") {
|
|
250
|
+
return previous;
|
|
251
|
+
}
|
|
252
|
+
return next;
|
|
253
|
+
}
|
|
254
|
+
function uniquePaths(paths) {
|
|
255
|
+
return [...new Set(paths.filter((file) => Boolean(file)))];
|
|
256
|
+
}
|
|
257
|
+
function changedFileStatus(status) {
|
|
258
|
+
switch (status) {
|
|
259
|
+
case "A":
|
|
260
|
+
return "added";
|
|
261
|
+
case "C":
|
|
262
|
+
return "copied";
|
|
263
|
+
case "D":
|
|
264
|
+
return "deleted";
|
|
265
|
+
case "M":
|
|
266
|
+
return "modified";
|
|
267
|
+
case "R":
|
|
268
|
+
return "renamed";
|
|
269
|
+
case "T":
|
|
270
|
+
return "type-changed";
|
|
271
|
+
case "U":
|
|
272
|
+
return "unmerged";
|
|
273
|
+
default:
|
|
274
|
+
return "unknown";
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
function compareChangedFiles(left, right) {
|
|
278
|
+
return `${left.path}\0${left.oldPath ?? ""}\0${left.status}`.localeCompare(`${right.path}\0${right.oldPath ?? ""}\0${right.status}`);
|
|
279
|
+
}
|
|
280
|
+
function normalizeGitPath(file) {
|
|
281
|
+
return process.platform === "win32" ? file.replaceAll("\\", "/") : file;
|
|
282
|
+
}
|
|
283
|
+
async function gitText(cwd, args) {
|
|
284
|
+
return (await gitOutput(cwd, args)).trim();
|
|
285
|
+
}
|
|
286
|
+
async function resolveHeadCommit(repositoryRoot) {
|
|
287
|
+
const head = await runGit(repositoryRoot, [
|
|
288
|
+
"rev-parse",
|
|
289
|
+
"--verify",
|
|
290
|
+
"HEAD^{commit}",
|
|
291
|
+
]);
|
|
292
|
+
if (head.exitCode === 0)
|
|
293
|
+
return head.stdout.trim();
|
|
294
|
+
const symbolicHead = await runGit(repositoryRoot, [
|
|
295
|
+
"symbolic-ref",
|
|
296
|
+
"--quiet",
|
|
297
|
+
"HEAD",
|
|
298
|
+
]);
|
|
299
|
+
if (symbolicHead.exitCode !== 0) {
|
|
300
|
+
throw gitCommandError(["rev-parse", "--verify", "HEAD^{commit}"], head);
|
|
301
|
+
}
|
|
302
|
+
const ref = symbolicHead.stdout.trim();
|
|
303
|
+
const refExists = await runGit(repositoryRoot, [
|
|
304
|
+
"show-ref",
|
|
305
|
+
"--verify",
|
|
306
|
+
"--quiet",
|
|
307
|
+
ref,
|
|
308
|
+
]);
|
|
309
|
+
if (refExists.exitCode === 1)
|
|
310
|
+
return undefined;
|
|
311
|
+
throw gitCommandError(["rev-parse", "--verify", "HEAD^{commit}"], head);
|
|
312
|
+
}
|
|
313
|
+
async function tryGitText(cwd, args) {
|
|
314
|
+
try {
|
|
315
|
+
return await gitText(cwd, args);
|
|
316
|
+
}
|
|
317
|
+
catch {
|
|
318
|
+
return undefined;
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
async function tryGitOutput(cwd, args) {
|
|
322
|
+
try {
|
|
323
|
+
return await gitOutput(cwd, args);
|
|
324
|
+
}
|
|
325
|
+
catch {
|
|
326
|
+
return undefined;
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
async function gitOutput(cwd, args) {
|
|
330
|
+
const result = await runGit(cwd, args);
|
|
331
|
+
if (result.exitCode !== 0)
|
|
332
|
+
throw gitCommandError(args, result);
|
|
333
|
+
return result.stdout;
|
|
334
|
+
}
|
|
335
|
+
async function runGit(cwd, args) {
|
|
336
|
+
const result = await spawnCommand("git", args, cwd, {
|
|
337
|
+
captureOutput: true,
|
|
338
|
+
maxOutputBytes: maxGitOutputBytes,
|
|
339
|
+
});
|
|
340
|
+
if (result.outputTruncated) {
|
|
341
|
+
throw new Error(`Git output exceeded ${maxGitOutputBytes} bytes; changed mapping cannot produce a complete report.`);
|
|
342
|
+
}
|
|
343
|
+
return {
|
|
344
|
+
...result,
|
|
345
|
+
stdout: result.stdout ?? "",
|
|
346
|
+
stderr: result.stderr ?? "",
|
|
347
|
+
};
|
|
348
|
+
}
|
|
349
|
+
function gitCommandError(args, result) {
|
|
350
|
+
const detail = result.stderr.trim() || result.stdout.trim();
|
|
351
|
+
return new Error(`Git command failed: git ${args.join(" ")}${detail ? `\n${detail}` : ""}`);
|
|
352
|
+
}
|
|
353
|
+
async function gitDiffOutput(repositoryRoot, comparisonArgs) {
|
|
354
|
+
return gitOutput(repositoryRoot, [
|
|
355
|
+
"diff",
|
|
356
|
+
"--no-ext-diff",
|
|
357
|
+
"--no-textconv",
|
|
358
|
+
"--name-status",
|
|
359
|
+
"-z",
|
|
360
|
+
"--find-renames=50%",
|
|
361
|
+
"--find-copies=50%",
|
|
362
|
+
"--find-copies-harder",
|
|
363
|
+
...comparisonArgs,
|
|
364
|
+
"--",
|
|
365
|
+
]);
|
|
366
|
+
}
|
|
367
|
+
//# sourceMappingURL=git-changes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"git-changes.js","sourceRoot":"","sources":["../src/git-changes.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":";AAGA,OAAO,EAIL,KAAK,cAAc,EAInB,KAAK,4BAA4B,EACjC,KAAK,cAAc,EAEpB,MAAM,eAAe,CAAC;AAsCvB,KAAK,UAAU,GAAG,cAAc,GAAG;IACjC,QAAQ,CAAC,OAAO,EAAE,cAAc,CAAC;CAClC,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAGA,OAAO,EAIL,KAAK,cAAc,EAInB,KAAK,4BAA4B,EACjC,KAAK,cAAc,EAEpB,MAAM,eAAe,CAAC;AAsCvB,KAAK,UAAU,GAAG,cAAc,GAAG;IACjC,QAAQ,CAAC,OAAO,EAAE,cAAc,CAAC;CAClC,CAAC;AA46FF,wBAAsB,IAAI,CACxB,MAAM,WAAwB,EAC9B,OAAO,GAAE,4BAA4B,CAAC,UAAU,CAAe,GAC9D,OAAO,CAAC,IAAI,CAAC,CAiBf"}
|
package/dist/index.js
CHANGED
|
@@ -108,6 +108,13 @@ const routesFlagParameters = {
|
|
|
108
108
|
};
|
|
109
109
|
const mapFlagParameters = {
|
|
110
110
|
json: jsonFlag,
|
|
111
|
+
changed: {
|
|
112
|
+
kind: "boolean",
|
|
113
|
+
optional: true,
|
|
114
|
+
withNegated: false,
|
|
115
|
+
brief: "Map the current Git change set to potentially affected concepts.",
|
|
116
|
+
},
|
|
117
|
+
base: parsedStringFlag("Include committed changes since the merge base of this local Git ref. Requires --changed."),
|
|
111
118
|
feature: parsedStringFlag("Project one feature and its direct relationships."),
|
|
112
119
|
kind: {
|
|
113
120
|
kind: "enum",
|
|
@@ -507,14 +514,32 @@ const routesCommand = buildCommand({
|
|
|
507
514
|
const mapCommand = buildCommand({
|
|
508
515
|
docs: {
|
|
509
516
|
brief: "Map the app's architecture and registered workflows.",
|
|
510
|
-
fullDescription: "Build a deterministic graph of features, HTTP contracts, routes, use cases, policies, workflows, ports, providers, OpenAPI, tests, dependencies, and doctor findings.",
|
|
517
|
+
fullDescription: "Build a deterministic graph of features, HTTP contracts, routes, use cases, policies, workflows, ports, providers, OpenAPI, tests, dependencies, and doctor findings. Use --changed for a bounded, report-only semantic map of the current Git change set.",
|
|
511
518
|
},
|
|
512
519
|
parameters: {
|
|
513
520
|
flags: mapFlagParameters,
|
|
514
521
|
},
|
|
515
522
|
loader: async () => {
|
|
516
523
|
const { formatAppMap, mapApp, projectAppMap } = await import("./app-map.js");
|
|
524
|
+
const { formatAppChangeImpact, mapAppChanges } = await import("./app-map-changes.js");
|
|
517
525
|
return async function runMap(flags) {
|
|
526
|
+
if (flags.base !== undefined && !flags.changed) {
|
|
527
|
+
throw new Error("map --base requires --changed.");
|
|
528
|
+
}
|
|
529
|
+
if (flags.changed &&
|
|
530
|
+
(flags.feature !== undefined || flags.kind !== undefined)) {
|
|
531
|
+
throw new Error("map --changed cannot be combined with --feature or --kind.");
|
|
532
|
+
}
|
|
533
|
+
if (flags.changed) {
|
|
534
|
+
const changed = await mapAppChanges({
|
|
535
|
+
cwd: flags.cwd,
|
|
536
|
+
base: flags.base,
|
|
537
|
+
});
|
|
538
|
+
writeOutput(this, flags.json
|
|
539
|
+
? JSON.stringify(changed, null, 2)
|
|
540
|
+
: formatAppChangeImpact(changed));
|
|
541
|
+
return;
|
|
542
|
+
}
|
|
518
543
|
const result = projectAppMap(await mapApp({ cwd: flags.cwd, strict: true }), {
|
|
519
544
|
feature: flags.feature,
|
|
520
545
|
kinds: flags.kind,
|