git-impact 0.3.0 → 0.6.2
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 +124 -78
- package/dist/cli/index.js +32 -211
- package/dist/cli/index.js.map +1 -1
- package/dist/init/installer.d.ts +6 -0
- package/dist/init/installer.d.ts.map +1 -1
- package/dist/init/installer.js +58 -5
- package/dist/init/installer.js.map +1 -1
- package/dist/init/installer.test.d.ts +2 -0
- package/dist/init/installer.test.d.ts.map +1 -0
- package/dist/init/installer.test.js +127 -0
- package/dist/init/installer.test.js.map +1 -0
- package/dist/init/templates.d.ts +8 -7
- package/dist/init/templates.d.ts.map +1 -1
- package/dist/init/templates.js +73 -371
- package/dist/init/templates.js.map +1 -1
- package/dist/mcp/resources.js +0 -1
- package/dist/mcp/resources.js.map +1 -1
- package/dist/mcp/tools.d.ts.map +1 -1
- package/dist/mcp/tools.js +64 -12
- package/dist/mcp/tools.js.map +1 -1
- package/dist/readers/git.d.ts +2 -1
- package/dist/readers/git.d.ts.map +1 -1
- package/dist/readers/git.js +12 -6
- package/dist/readers/git.js.map +1 -1
- package/dist/readers/redact.d.ts +29 -0
- package/dist/readers/redact.d.ts.map +1 -0
- package/dist/readers/redact.js +82 -0
- package/dist/readers/redact.js.map +1 -0
- package/dist/readers/redact.test.d.ts +2 -0
- package/dist/readers/redact.test.d.ts.map +1 -0
- package/dist/readers/redact.test.js +72 -0
- package/dist/readers/redact.test.js.map +1 -0
- package/dist/report/html.d.ts +2 -0
- package/dist/report/html.d.ts.map +1 -1
- package/dist/report/html.js +35 -1
- package/dist/report/html.js.map +1 -1
- package/dist/report/render.d.ts.map +1 -1
- package/dist/report/render.js +2 -0
- package/dist/report/render.js.map +1 -1
- package/dist/storage/db.d.ts +23 -2
- package/dist/storage/db.d.ts.map +1 -1
- package/dist/storage/db.js +12 -0
- package/dist/storage/db.js.map +1 -1
- package/dist/storage/db.test.d.ts +2 -0
- package/dist/storage/db.test.d.ts.map +1 -0
- package/dist/storage/db.test.js +152 -0
- package/dist/storage/db.test.js.map +1 -0
- package/package.json +7 -6
- package/skill/SKILL.md +131 -206
- package/skill/references/html-template.md +131 -0
- package/skill/references/translation-rules.md +87 -0
- package/dist/translator/prompt.d.ts +0 -21
- package/dist/translator/prompt.d.ts.map +0 -1
- package/dist/translator/prompt.js +0 -117
- package/dist/translator/prompt.js.map +0 -1
- package/dist/translator/translate.d.ts +0 -36
- package/dist/translator/translate.d.ts.map +0 -1
- package/dist/translator/translate.js +0 -73
- package/dist/translator/translate.js.map +0 -1
package/dist/cli/index.js
CHANGED
|
@@ -35,12 +35,8 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
35
35
|
})();
|
|
36
36
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
37
37
|
const commander_1 = require("commander");
|
|
38
|
-
const readline = __importStar(require("readline"));
|
|
39
38
|
const path = __importStar(require("path"));
|
|
40
39
|
const process = __importStar(require("process"));
|
|
41
|
-
const git_1 = require("../readers/git");
|
|
42
|
-
const github_1 = require("../readers/github");
|
|
43
|
-
const translate_1 = require("../translator/translate");
|
|
44
40
|
const db_1 = require("../storage/db");
|
|
45
41
|
const repo_1 = require("../mcp/repo");
|
|
46
42
|
const installer_1 = require("../init/installer");
|
|
@@ -48,116 +44,40 @@ const render_1 = require("../report/render");
|
|
|
48
44
|
const program = new commander_1.Command();
|
|
49
45
|
program
|
|
50
46
|
.name("git-impact")
|
|
51
|
-
.description("
|
|
52
|
-
.version("0.
|
|
53
|
-
// ───
|
|
54
|
-
program
|
|
55
|
-
.command("today")
|
|
56
|
-
.description("Translate today's commits into business impact")
|
|
57
|
-
.option("-p, --path <path>", "Path to git repository (auto-detected if omitted)")
|
|
58
|
-
.option("--no-github", "Skip GitHub PR data")
|
|
59
|
-
.option("--no-save", "Don't save result to local history")
|
|
60
|
-
.action(async (opts) => {
|
|
61
|
-
const repoRoot = getRepoOrDie(opts.path);
|
|
62
|
-
const context = (0, db_1.loadContext)(repoRoot);
|
|
63
|
-
const since = (0, git_1.startOfDay)();
|
|
64
|
-
const until = new Date();
|
|
65
|
-
const dateLabel = formatDate(until);
|
|
66
|
-
process.stdout.write(`\nRepo: ${repoRoot}\nReading git activity...\n`);
|
|
67
|
-
const git = await (0, git_1.readGitActivity)(repoRoot, since, until).catch((err) => die(`Could not read git history: ${err.message}`));
|
|
68
|
-
if (git.commits.length === 0) {
|
|
69
|
-
console.log(`\n${dateLabel}\n\nNo commits today.\n`);
|
|
70
|
-
return;
|
|
71
|
-
}
|
|
72
|
-
let github = null;
|
|
73
|
-
if (opts.github && context?.githubToken) {
|
|
74
|
-
process.stdout.write("Fetching GitHub PR data...\n");
|
|
75
|
-
const remoteUrl = await getRemoteUrl(repoRoot);
|
|
76
|
-
if (remoteUrl) {
|
|
77
|
-
github = await (0, github_1.readGitHubActivity)(context.githubToken, remoteUrl, since, until).catch(() => null);
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
process.stdout.write("Translating with Claude...\n\n");
|
|
81
|
-
const result = await (0, translate_1.translateActivity)(git, github, context, dateLabel);
|
|
82
|
-
printResult(dateLabel, result, git);
|
|
83
|
-
if (opts.save !== false) {
|
|
84
|
-
const today = until.toISOString().slice(0, 10);
|
|
85
|
-
(0, db_1.saveEntry)({
|
|
86
|
-
date: today,
|
|
87
|
-
repoPath: repoRoot,
|
|
88
|
-
repoName: git.repoName,
|
|
89
|
-
totalCommits: result.totalCommits,
|
|
90
|
-
totalFiles: result.totalFiles,
|
|
91
|
-
filesSummary: result.filesSummary,
|
|
92
|
-
items: result.items,
|
|
93
|
-
rawJson: result.rawJson,
|
|
94
|
-
createdAt: new Date().toISOString(),
|
|
95
|
-
}, repoRoot);
|
|
96
|
-
// Regenerate HTML report so the user always has a fresh file:// link to share.
|
|
97
|
-
const report = (0, render_1.renderReport)({ repoRoot, open: false, date: today });
|
|
98
|
-
console.log(`🔗 ${report.url}\n`);
|
|
99
|
-
}
|
|
100
|
-
});
|
|
101
|
-
// ─── since ────────────────────────────────────────────────────────────────────
|
|
102
|
-
program
|
|
103
|
-
.command("since <when>")
|
|
104
|
-
.description('Translate commits since a period — "yesterday", "3d", "2026-05-01"')
|
|
105
|
-
.option("-p, --path <path>", "Path to git repository (auto-detected if omitted)")
|
|
106
|
-
.action(async (when, opts) => {
|
|
107
|
-
const repoRoot = getRepoOrDie(opts.path);
|
|
108
|
-
const context = (0, db_1.loadContext)(repoRoot);
|
|
109
|
-
const since = parseWhen(when);
|
|
110
|
-
const until = new Date();
|
|
111
|
-
const dateLabel = `${formatDate(since)} → ${formatDate(until)}`;
|
|
112
|
-
process.stdout.write(`\nRepo: ${repoRoot}\nReading commits since ${formatDate(since)}...\n`);
|
|
113
|
-
const git = await (0, git_1.readGitActivity)(repoRoot, since, until).catch((err) => die(`Could not read git history: ${err.message}`));
|
|
114
|
-
if (git.commits.length === 0) {
|
|
115
|
-
console.log(`\nNo commits found since ${formatDate(since)}.\n`);
|
|
116
|
-
return;
|
|
117
|
-
}
|
|
118
|
-
process.stdout.write("Translating with Claude...\n\n");
|
|
119
|
-
const result = await (0, translate_1.translateActivity)(git, null, context, dateLabel);
|
|
120
|
-
printResult(dateLabel, result, git);
|
|
121
|
-
});
|
|
122
|
-
// ─── review ───────────────────────────────────────────────────────────────────
|
|
47
|
+
.description("Install git-impact into a repo. Translation runs inside your AI editor (Claude Code skill / MCP) — no API key.")
|
|
48
|
+
.version("0.6.2");
|
|
49
|
+
// ─── init ─────────────────────────────────────────────────────────────────────
|
|
123
50
|
program
|
|
124
|
-
.command("
|
|
125
|
-
.description("
|
|
51
|
+
.command("init")
|
|
52
|
+
.description("Install git-impact into this repo and set up personalization context")
|
|
126
53
|
.option("-p, --path <path>", "Path to git repository (auto-detected if omitted)")
|
|
127
|
-
.option("--last <days>", "Days to look back", "90")
|
|
128
|
-
.option("--quarter <q>", "Quarter e.g. Q2-2026")
|
|
129
54
|
.action(async (opts) => {
|
|
130
55
|
const repoRoot = getRepoOrDie(opts.path);
|
|
131
|
-
const
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
}
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
console.log(`\nNo saved history for ${periodLabel} in ${repoRoot}.\nRun \`git-impact today\` daily to build history.\n`);
|
|
146
|
-
return;
|
|
147
|
-
}
|
|
148
|
-
process.stdout.write(`\nGenerating review for ${periodLabel} (${entries.length} days)...\n\n`);
|
|
149
|
-
const review = await (0, translate_1.generateReview)(entries, context, periodLabel);
|
|
150
|
-
console.log(`\nPerformance Review — ${review.period}`);
|
|
151
|
-
console.log("=".repeat(50));
|
|
152
|
-
console.log(`\n${review.headline}\n`);
|
|
153
|
-
for (const theme of review.themes) {
|
|
154
|
-
const icon = theme.impact_level === "high" ? "🚀" : theme.impact_level === "medium" ? "✅" : "🔧";
|
|
155
|
-
console.log(`\n${icon} ${theme.name}`);
|
|
156
|
-
for (const bullet of theme.bullets)
|
|
157
|
-
console.log(` • ${bullet}`);
|
|
56
|
+
const existing = (0, db_1.loadContext)(repoRoot);
|
|
57
|
+
const { context, integrations } = await (0, installer_1.runInitWizard)(repoRoot);
|
|
58
|
+
const fullContext = {
|
|
59
|
+
...context,
|
|
60
|
+
githubToken: existing?.githubToken,
|
|
61
|
+
};
|
|
62
|
+
(0, db_1.saveContext)(fullContext, repoRoot);
|
|
63
|
+
const installed = (0, installer_1.install)({ repoRoot, integrations, context, silent: false });
|
|
64
|
+
console.log(`\n ${"─".repeat(36)}`);
|
|
65
|
+
console.log(` git-impact installed\n`);
|
|
66
|
+
for (const f of installed) {
|
|
67
|
+
const rel = path.relative(repoRoot, f.path);
|
|
68
|
+
const icon = f.action === "created" ? "✅" : f.action === "updated" ? "🔄" : "⏭️ ";
|
|
69
|
+
console.log(` ${icon} ${rel}`);
|
|
158
70
|
}
|
|
159
|
-
|
|
160
|
-
|
|
71
|
+
// Editor-aware next-step hint based on what we actually installed.
|
|
72
|
+
const trigger = integrations.includes("claude") ? `In Claude Code: type "/git-impact" or say "do my standup"` :
|
|
73
|
+
integrations.includes("gemini") ? `In Gemini CLI: run "/git-impact" (or say "do my standup")` :
|
|
74
|
+
integrations.includes("cursor") ? `In Cursor chat: paste "@git-impact do my standup"` :
|
|
75
|
+
integrations.includes("copilot") ? `In Copilot Chat: open this repo and say "do my standup"` :
|
|
76
|
+
`Open this repo in your AI editor and say "do my standup"`;
|
|
77
|
+
console.log(`\n Next steps:`);
|
|
78
|
+
console.log(` 1. git add .git-impact/context.json && git commit -m "chore: add git-impact"`);
|
|
79
|
+
console.log(` 2. ${trigger}`);
|
|
80
|
+
console.log(` 3. After a few standups: \`git-impact view\` to see the rolling dashboard\n`);
|
|
161
81
|
});
|
|
162
82
|
// ─── view ─────────────────────────────────────────────────────────────────────
|
|
163
83
|
program
|
|
@@ -175,121 +95,22 @@ program
|
|
|
175
95
|
});
|
|
176
96
|
if (result.entryCount === 0) {
|
|
177
97
|
console.log(`\nNo standups saved yet for ${repoRoot}.\n` +
|
|
178
|
-
`
|
|
98
|
+
`In Claude Code, say "do my standup" to build history.\n` +
|
|
179
99
|
`Empty report still written to: ${result.htmlPath}\n`);
|
|
180
100
|
return;
|
|
181
101
|
}
|
|
182
102
|
console.log(`\nReport regenerated — ${result.entryCount} standup(s)`);
|
|
183
103
|
console.log(` ${result.url}\n`);
|
|
184
104
|
});
|
|
185
|
-
// ─── init ─────────────────────────────────────────────────────────────────────
|
|
186
|
-
program
|
|
187
|
-
.command("init")
|
|
188
|
-
.description("Install git-impact into this repo and set up personalization context")
|
|
189
|
-
.option("-p, --path <path>", "Path to git repository (auto-detected if omitted)")
|
|
190
|
-
.action(async (opts) => {
|
|
191
|
-
const repoRoot = getRepoOrDie(opts.path);
|
|
192
|
-
const existing = (0, db_1.loadContext)(repoRoot);
|
|
193
|
-
// Run the interactive wizard (company desc, manager priorities, glossary, integrations)
|
|
194
|
-
const { context, integrations } = await (0, installer_1.runInitWizard)(repoRoot);
|
|
195
|
-
// Ask for CLI-specific secrets (not committed, stored in context.json locally)
|
|
196
|
-
const rl = readline.createInterface({ input: process.stdin, output: process.stdout });
|
|
197
|
-
const ask = (q) => new Promise((res) => rl.question(q, res));
|
|
198
|
-
const anthropicApiKey = await ask(`\n Anthropic API key (for CLI translate mode — not needed for Claude Code)\n` +
|
|
199
|
-
(existing?.anthropicApiKey ? ` [already set, press Enter to keep]\n` : ` [leave blank to skip for now]\n`) +
|
|
200
|
-
` > `);
|
|
201
|
-
const githubToken = await ask(`\n GitHub token (optional — enriches output with PR titles)\n` +
|
|
202
|
-
(existing?.githubToken ? ` [already set, press Enter to keep]\n` : ` [leave blank to skip]\n`) +
|
|
203
|
-
` > `);
|
|
204
|
-
rl.close();
|
|
205
|
-
// Merge CLI-only secrets into context and persist
|
|
206
|
-
const fullContext = {
|
|
207
|
-
...context,
|
|
208
|
-
anthropicApiKey: anthropicApiKey.trim() || existing?.anthropicApiKey,
|
|
209
|
-
githubToken: githubToken.trim() || existing?.githubToken,
|
|
210
|
-
};
|
|
211
|
-
(0, db_1.saveContext)(fullContext, repoRoot);
|
|
212
|
-
// Install all integration files (SKILL.md, Copilot instructions, Cursor rules, etc.)
|
|
213
|
-
const installed = (0, installer_1.install)({ repoRoot, integrations, context, silent: false });
|
|
214
|
-
// Print summary
|
|
215
|
-
console.log(`\n ${"─".repeat(36)}`);
|
|
216
|
-
console.log(` git-impact installed\n`);
|
|
217
|
-
for (const f of installed) {
|
|
218
|
-
const rel = path.relative(repoRoot, f.path);
|
|
219
|
-
const icon = f.action === "created" ? "✅" : f.action === "updated" ? "🔄" : "⏭️ ";
|
|
220
|
-
console.log(` ${icon} ${rel}`);
|
|
221
|
-
}
|
|
222
|
-
console.log(`\n Next steps:`);
|
|
223
|
-
console.log(` 1. git add .git-impact/context.json .claude/ && git commit -m "chore: add git-impact"`);
|
|
224
|
-
console.log(` 2. In Claude Code, say: "do my standup"\n`);
|
|
225
|
-
});
|
|
226
105
|
// ─── Helpers ──────────────────────────────────────────────────────────────────
|
|
227
106
|
function getRepoOrDie(explicitPath) {
|
|
228
107
|
try {
|
|
229
108
|
return (0, repo_1.resolveRepoPath)(explicitPath).path;
|
|
230
109
|
}
|
|
231
110
|
catch (err) {
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
}
|
|
235
|
-
function printResult(dateLabel, result, git) {
|
|
236
|
-
console.log(`📅 ${dateLabel}\n`);
|
|
237
|
-
if (result.items.length === 0) {
|
|
238
|
-
console.log("No significant changes to report.");
|
|
111
|
+
console.error(`\nError: ${err.message}\n`);
|
|
112
|
+
process.exit(1);
|
|
239
113
|
}
|
|
240
|
-
else {
|
|
241
|
-
for (const item of result.items) {
|
|
242
|
-
const icon = item.status === "done" ? "✅" : "⏳";
|
|
243
|
-
console.log(`${icon} ${item.summary}`);
|
|
244
|
-
if (item.impact)
|
|
245
|
-
console.log(` → ${item.impact}`);
|
|
246
|
-
if (item.technical_note)
|
|
247
|
-
console.log(` (${item.technical_note})`);
|
|
248
|
-
console.log("");
|
|
249
|
-
}
|
|
250
|
-
}
|
|
251
|
-
if (result.filesSummary) {
|
|
252
|
-
console.log(`📁 ${git.totalFilesChanged} files — ${result.filesSummary}`);
|
|
253
|
-
}
|
|
254
|
-
console.log(` ${git.commits.length} commit(s) on ${git.branch}\n`);
|
|
255
|
-
}
|
|
256
|
-
function formatDate(d) {
|
|
257
|
-
return d.toLocaleDateString("en-US", {
|
|
258
|
-
weekday: "long", year: "numeric", month: "long", day: "numeric",
|
|
259
|
-
});
|
|
260
|
-
}
|
|
261
|
-
function parseWhen(when) {
|
|
262
|
-
if (when === "yesterday")
|
|
263
|
-
return (0, git_1.startOfDaysAgo)(1);
|
|
264
|
-
const daysMatch = when.match(/^(\d+)d$/);
|
|
265
|
-
if (daysMatch)
|
|
266
|
-
return (0, git_1.startOfDaysAgo)(parseInt(daysMatch[1], 10));
|
|
267
|
-
const parsed = new Date(when);
|
|
268
|
-
if (!isNaN(parsed.getTime()))
|
|
269
|
-
return parsed;
|
|
270
|
-
die(`Could not parse date: "${when}". Try "yesterday", "3d", or "2026-05-01".`);
|
|
271
|
-
}
|
|
272
|
-
function parseQuarter(q) {
|
|
273
|
-
const match = q.match(/^Q([1-4])-(\d{4})$/i);
|
|
274
|
-
if (!match)
|
|
275
|
-
die(`Invalid quarter format. Use Q1-2026, Q2-2026, etc.`);
|
|
276
|
-
const quarter = parseInt(match[1], 10);
|
|
277
|
-
const year = parseInt(match[2], 10);
|
|
278
|
-
const startMonth = (quarter - 1) * 3 + 1;
|
|
279
|
-
const endMonth = startMonth + 2;
|
|
280
|
-
const from = `${year}-${String(startMonth).padStart(2, "0")}-01`;
|
|
281
|
-
const lastDay = new Date(year, endMonth, 0).getDate();
|
|
282
|
-
const to = `${year}-${String(endMonth).padStart(2, "0")}-${lastDay}`;
|
|
283
|
-
return { from, to };
|
|
284
|
-
}
|
|
285
|
-
async function getRemoteUrl(repoPath) {
|
|
286
|
-
const simpleGit = await Promise.resolve().then(() => __importStar(require("simple-git"))).then((m) => m.default);
|
|
287
|
-
const remotes = await simpleGit(repoPath).getRemotes(true).catch(() => []);
|
|
288
|
-
return remotes.find((r) => r.name === "origin")?.refs?.fetch ?? null;
|
|
289
|
-
}
|
|
290
|
-
function die(msg) {
|
|
291
|
-
console.error(`\nError: ${msg}\n`);
|
|
292
|
-
process.exit(1);
|
|
293
114
|
}
|
|
294
115
|
program.parse(process.argv);
|
|
295
116
|
//# sourceMappingURL=index.js.map
|
package/dist/cli/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,yCAAoC;AACpC,2CAA6B;AAC7B,iDAAmC;AACnC,sCAAsE;AACtE,sCAA8C;AAC9C,iDAA2D;AAC3D,6CAAgD;AAEhD,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,YAAY,CAAC;KAClB,WAAW,CAAC,gHAAgH,CAAC;KAC7H,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,iFAAiF;AAEjF,OAAO;KACJ,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,sEAAsE,CAAC;KACnF,MAAM,CAAC,mBAAmB,EAAE,mDAAmD,CAAC;KAChF,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;IACrB,MAAM,QAAQ,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACzC,MAAM,QAAQ,GAAG,IAAA,gBAAW,EAAC,QAAQ,CAAC,CAAC;IAEvC,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,GAAG,MAAM,IAAA,yBAAa,EAAC,QAAQ,CAAC,CAAC;IAEhE,MAAM,WAAW,GAAgB;QAC/B,GAAG,OAAO;QACV,WAAW,EAAE,QAAQ,EAAE,WAAW;KACnC,CAAC;IACF,IAAA,gBAAW,EAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;IAEnC,MAAM,SAAS,GAAG,IAAA,mBAAO,EAAC,EAAE,QAAQ,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;IAE9E,OAAO,CAAC,GAAG,CAAC,OAAO,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IACrC,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;IACxC,KAAK,MAAM,CAAC,IAAI,SAAS,EAAE,CAAC;QAC1B,MAAM,GAAG,GAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;QAC7C,MAAM,IAAI,GAAG,CAAC,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC;QAClF,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,KAAK,GAAG,EAAE,CAAC,CAAC;IACnC,CAAC;IAED,mEAAmE;IACnE,MAAM,OAAO,GACX,YAAY,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAE,CAAC,CAAC,2DAA2D,CAAC,CAAC;QAChG,YAAY,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAE,CAAC,CAAC,2DAA2D,CAAE,CAAC;YACjG,YAAY,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAE,CAAC,CAAC,mDAAmD,CAAW,CAAC;gBAClG,YAAY,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,yDAAyD,CAAI,CAAC;oBAC9D,0DAA0D,CAAC;IAEhG,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;IAC/B,OAAO,CAAC,GAAG,CAAC,gFAAgF,CAAC,CAAC;IAC9F,OAAO,CAAC,GAAG,CAAC,QAAQ,OAAO,EAAE,CAAC,CAAC;IAC/B,OAAO,CAAC,GAAG,CAAC,+EAA+E,CAAC,CAAC;AAC/F,CAAC,CAAC,CAAC;AAEL,iFAAiF;AAEjF,OAAO;KACJ,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,mDAAmD,CAAC;KAChE,MAAM,CAAC,mBAAmB,EAAE,mDAAmD,CAAC;KAChF,MAAM,CAAC,eAAe,EAAE,8DAA8D,CAAC;KACvF,MAAM,CAAC,WAAW,EAAE,kDAAkD,CAAC;KACvE,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE;IACf,MAAM,QAAQ,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACzC,MAAM,MAAM,GAAG,IAAA,qBAAY,EAAC;QAC1B,QAAQ;QACR,IAAI,EAAE,IAAI,CAAC,IAAI,KAAK,KAAK;QACzB,IAAI,EAAE,IAAI,CAAC,IAAI;KAChB,CAAC,CAAC;IACH,IAAI,MAAM,CAAC,UAAU,KAAK,CAAC,EAAE,CAAC;QAC5B,OAAO,CAAC,GAAG,CACT,+BAA+B,QAAQ,KAAK;YAC5C,yDAAyD;YACzD,kCAAkC,MAAM,CAAC,QAAQ,IAAI,CACtD,CAAC;QACF,OAAO;IACT,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,0BAA0B,MAAM,CAAC,UAAU,aAAa,CAAC,CAAC;IACtE,OAAO,CAAC,GAAG,CAAC,KAAK,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC;AACnC,CAAC,CAAC,CAAC;AAEL,iFAAiF;AAEjF,SAAS,YAAY,CAAC,YAAqB;IACzC,IAAI,CAAC;QACH,OAAO,IAAA,sBAAe,EAAC,YAAY,CAAC,CAAC,IAAI,CAAC;IAC5C,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,YAAa,GAAa,CAAC,OAAO,IAAI,CAAC,CAAC;QACtD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC"}
|
package/dist/init/installer.d.ts
CHANGED
|
@@ -20,6 +20,12 @@ export interface InstalledFile {
|
|
|
20
20
|
* Returns a manifest of every file it touched.
|
|
21
21
|
*/
|
|
22
22
|
export declare function install(opts: InstallOptions): InstalledFile[];
|
|
23
|
+
/**
|
|
24
|
+
* Look for editor-specific directories in the repo. Returns whichever editors
|
|
25
|
+
* already have config there, in stable order. Lets `init` skip the "which AI
|
|
26
|
+
* tools do you use?" question when the answer is obvious from the filesystem.
|
|
27
|
+
*/
|
|
28
|
+
export declare function detectEditors(repoRoot: string): Integration[];
|
|
23
29
|
/**
|
|
24
30
|
* Run the interactive init wizard. Resolves with the answers.
|
|
25
31
|
* Designed to be called from the CLI `init` command.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"installer.d.ts","sourceRoot":"","sources":["../../src/init/installer.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"installer.d.ts","sourceRoot":"","sources":["../../src/init/installer.ts"],"names":[],"mappings":"AAwBA,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,WAAW,EAAE,CAAC;IAC5B,OAAO,EAAE,WAAW,CAAC;IACrB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,MAAM,WAAW,GAAG,QAAQ,GAAG,SAAS,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAErE,MAAM,WAAW,WAAW;IAC1B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClC;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,SAAS,CAAC;CAC3C;AAED;;;;GAIG;AACH,wBAAgB,OAAO,CAAC,IAAI,EAAE,cAAc,GAAG,aAAa,EAAE,CAyC7D;AAkHD;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,WAAW,EAAE,CAU7D;AAID;;;GAGG;AACH,wBAAsB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC;IAC7D,OAAO,EAAE,WAAW,CAAC;IACrB,YAAY,EAAE,WAAW,EAAE,CAAC;CAC7B,CAAC,CAmFD"}
|
package/dist/init/installer.js
CHANGED
|
@@ -34,11 +34,22 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
34
34
|
})();
|
|
35
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
36
|
exports.install = install;
|
|
37
|
+
exports.detectEditors = detectEditors;
|
|
37
38
|
exports.runInitWizard = runInitWizard;
|
|
38
39
|
const fs = __importStar(require("fs"));
|
|
39
40
|
const path = __importStar(require("path"));
|
|
40
41
|
const readline = __importStar(require("readline"));
|
|
41
42
|
const templates_1 = require("./templates");
|
|
43
|
+
/**
|
|
44
|
+
* The shipped `skill/` directory inside the published npm package.
|
|
45
|
+
* Resolved relative to this file's location at runtime — works whether
|
|
46
|
+
* we're running from `dist/init/installer.js` (published) or `src/init/`.
|
|
47
|
+
*/
|
|
48
|
+
function shippedSkillDir() {
|
|
49
|
+
// dist/init/installer.js → ../../skill
|
|
50
|
+
// src/init/installer.ts → ../../skill
|
|
51
|
+
return path.resolve(__dirname, "..", "..", "skill");
|
|
52
|
+
}
|
|
42
53
|
/**
|
|
43
54
|
* Core install function — idempotent, safe to run multiple times.
|
|
44
55
|
* Creates all integration files, context.json, updates CLAUDE.md and .gitignore.
|
|
@@ -89,7 +100,18 @@ function installIntegration(repoRoot, integration) {
|
|
|
89
100
|
function installClaude(repoRoot) {
|
|
90
101
|
const skillDir = path.join(repoRoot, ".claude", "skills", "git-impact");
|
|
91
102
|
fs.mkdirSync(skillDir, { recursive: true });
|
|
92
|
-
|
|
103
|
+
fs.mkdirSync(path.join(skillDir, "references"), { recursive: true });
|
|
104
|
+
const src = shippedSkillDir();
|
|
105
|
+
const installed = [];
|
|
106
|
+
// Copy SKILL.md and any reference files from the shipped skill directory.
|
|
107
|
+
installed.push(copyFile(path.join(src, "SKILL.md"), path.join(skillDir, "SKILL.md")));
|
|
108
|
+
const refsSrc = path.join(src, "references");
|
|
109
|
+
if (fs.existsSync(refsSrc)) {
|
|
110
|
+
for (const file of fs.readdirSync(refsSrc)) {
|
|
111
|
+
installed.push(copyFile(path.join(refsSrc, file), path.join(skillDir, "references", file)));
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
return installed;
|
|
93
115
|
}
|
|
94
116
|
function installCopilot(repoRoot) {
|
|
95
117
|
const dir = path.join(repoRoot, ".github", "instructions");
|
|
@@ -142,6 +164,23 @@ function ensureGitignore(repoRoot) {
|
|
|
142
164
|
fs.appendFileSync(gitignorePath, `\n# git-impact local history (private, per-machine)\n${GITIGNORE_ENTRY}\n`);
|
|
143
165
|
return { path: gitignorePath, action: "updated" };
|
|
144
166
|
}
|
|
167
|
+
// ─── Editor auto-detection ───────────────────────────────────────────────────
|
|
168
|
+
/**
|
|
169
|
+
* Look for editor-specific directories in the repo. Returns whichever editors
|
|
170
|
+
* already have config there, in stable order. Lets `init` skip the "which AI
|
|
171
|
+
* tools do you use?" question when the answer is obvious from the filesystem.
|
|
172
|
+
*/
|
|
173
|
+
function detectEditors(repoRoot) {
|
|
174
|
+
const checks = [
|
|
175
|
+
{ editor: "claude", relPath: ".claude" },
|
|
176
|
+
{ editor: "copilot", relPath: ".github" },
|
|
177
|
+
{ editor: "cursor", relPath: ".cursor" },
|
|
178
|
+
{ editor: "gemini", relPath: ".gemini" },
|
|
179
|
+
];
|
|
180
|
+
return checks
|
|
181
|
+
.filter(({ relPath }) => fs.existsSync(path.join(repoRoot, relPath)))
|
|
182
|
+
.map(({ editor }) => editor);
|
|
183
|
+
}
|
|
145
184
|
// ─── Interactive prompt ───────────────────────────────────────────────────────
|
|
146
185
|
/**
|
|
147
186
|
* Run the interactive init wizard. Resolves with the answers.
|
|
@@ -167,9 +206,14 @@ async function runInitWizard(repoRoot) {
|
|
|
167
206
|
? ` [current: ${Object.entries(existingContext.glossary).map(([k, v]) => `${k}=${v}`).join(", ")}]\n`
|
|
168
207
|
: "") +
|
|
169
208
|
` > `);
|
|
170
|
-
const
|
|
209
|
+
const detected = detectEditors(repoRoot);
|
|
210
|
+
const detectedLabel = detected.length > 0
|
|
211
|
+
? detected.join(", ")
|
|
212
|
+
: "none detected — defaulting to claude";
|
|
213
|
+
const integrationsInput = await ask(`\n Which AI editors should I install for? (comma-separated, or "all")\n` +
|
|
171
214
|
` Options: claude, copilot, cursor, gemini\n` +
|
|
172
|
-
`
|
|
215
|
+
` Detected in this repo: ${detectedLabel}\n` +
|
|
216
|
+
` [press Enter to use detected]\n` +
|
|
173
217
|
` > `);
|
|
174
218
|
rl.close();
|
|
175
219
|
// Parse glossary
|
|
@@ -185,7 +229,11 @@ async function runInitWizard(repoRoot) {
|
|
|
185
229
|
const ALL_INTEGRATIONS = ["claude", "copilot", "cursor", "gemini"];
|
|
186
230
|
let integrations;
|
|
187
231
|
const raw = integrationsInput.toLowerCase().trim();
|
|
188
|
-
if (!raw
|
|
232
|
+
if (!raw) {
|
|
233
|
+
// Empty input → use what we detected, or claude as the safe default.
|
|
234
|
+
integrations = detected.length > 0 ? detected : ["claude"];
|
|
235
|
+
}
|
|
236
|
+
else if (raw === "all") {
|
|
189
237
|
integrations = ALL_INTEGRATIONS;
|
|
190
238
|
}
|
|
191
239
|
else {
|
|
@@ -194,7 +242,7 @@ async function runInitWizard(repoRoot) {
|
|
|
194
242
|
.map((s) => s.trim())
|
|
195
243
|
.filter((s) => ALL_INTEGRATIONS.includes(s));
|
|
196
244
|
if (integrations.length === 0)
|
|
197
|
-
integrations = ["claude"];
|
|
245
|
+
integrations = detected.length > 0 ? detected : ["claude"];
|
|
198
246
|
}
|
|
199
247
|
return {
|
|
200
248
|
context: {
|
|
@@ -211,6 +259,11 @@ function writeFile(filePath, content) {
|
|
|
211
259
|
fs.writeFileSync(filePath, content, "utf-8");
|
|
212
260
|
return { path: filePath, action: existed ? "updated" : "created" };
|
|
213
261
|
}
|
|
262
|
+
function copyFile(srcPath, destPath) {
|
|
263
|
+
const existed = fs.existsSync(destPath);
|
|
264
|
+
fs.copyFileSync(srcPath, destPath);
|
|
265
|
+
return { path: destPath, action: existed ? "updated" : "created" };
|
|
266
|
+
}
|
|
214
267
|
function loadExistingContext(repoRoot) {
|
|
215
268
|
const contextPath = path.join(repoRoot, ".git-impact", "context.json");
|
|
216
269
|
if (!fs.existsSync(contextPath))
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"installer.js","sourceRoot":"","sources":["../../src/init/installer.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"installer.js","sourceRoot":"","sources":["../../src/init/installer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"installer.test.d.ts","sourceRoot":"","sources":["../../src/init/installer.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,127 @@
|
|
|
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 fs = __importStar(require("fs"));
|
|
38
|
+
const os = __importStar(require("os"));
|
|
39
|
+
const path = __importStar(require("path"));
|
|
40
|
+
const installer_1 = require("./installer");
|
|
41
|
+
let tmp;
|
|
42
|
+
(0, vitest_1.beforeEach)(() => {
|
|
43
|
+
tmp = fs.mkdtempSync(path.join(os.tmpdir(), "git-impact-installer-"));
|
|
44
|
+
});
|
|
45
|
+
(0, vitest_1.afterEach)(() => {
|
|
46
|
+
fs.rmSync(tmp, { recursive: true, force: true });
|
|
47
|
+
});
|
|
48
|
+
(0, vitest_1.describe)("detectEditors", () => {
|
|
49
|
+
(0, vitest_1.it)("returns empty when no editor dirs exist", () => {
|
|
50
|
+
(0, vitest_1.expect)((0, installer_1.detectEditors)(tmp)).toEqual([]);
|
|
51
|
+
});
|
|
52
|
+
(0, vitest_1.it)("finds .claude as claude", () => {
|
|
53
|
+
fs.mkdirSync(path.join(tmp, ".claude"));
|
|
54
|
+
(0, vitest_1.expect)((0, installer_1.detectEditors)(tmp)).toContain("claude");
|
|
55
|
+
});
|
|
56
|
+
(0, vitest_1.it)("finds multiple editors in stable order", () => {
|
|
57
|
+
fs.mkdirSync(path.join(tmp, ".cursor"));
|
|
58
|
+
fs.mkdirSync(path.join(tmp, ".gemini"));
|
|
59
|
+
fs.mkdirSync(path.join(tmp, ".claude"));
|
|
60
|
+
(0, vitest_1.expect)((0, installer_1.detectEditors)(tmp)).toEqual(["claude", "cursor", "gemini"]);
|
|
61
|
+
});
|
|
62
|
+
(0, vitest_1.it)("treats .github as copilot", () => {
|
|
63
|
+
fs.mkdirSync(path.join(tmp, ".github"));
|
|
64
|
+
(0, vitest_1.expect)((0, installer_1.detectEditors)(tmp)).toEqual(["copilot"]);
|
|
65
|
+
});
|
|
66
|
+
});
|
|
67
|
+
(0, vitest_1.describe)("install", () => {
|
|
68
|
+
(0, vitest_1.it)("writes context.json, gitignore, and CLAUDE.md for claude integration", () => {
|
|
69
|
+
(0, installer_1.install)({
|
|
70
|
+
repoRoot: tmp,
|
|
71
|
+
integrations: ["claude"],
|
|
72
|
+
context: {
|
|
73
|
+
companyDescription: "X",
|
|
74
|
+
managerPriorities: "Y",
|
|
75
|
+
glossary: {},
|
|
76
|
+
},
|
|
77
|
+
silent: true,
|
|
78
|
+
});
|
|
79
|
+
(0, vitest_1.expect)(fs.existsSync(path.join(tmp, ".git-impact", "context.json"))).toBe(true);
|
|
80
|
+
(0, vitest_1.expect)(fs.existsSync(path.join(tmp, ".gitignore"))).toBe(true);
|
|
81
|
+
(0, vitest_1.expect)(fs.existsSync(path.join(tmp, "CLAUDE.md"))).toBe(true);
|
|
82
|
+
(0, vitest_1.expect)(fs.existsSync(path.join(tmp, ".claude", "skills", "git-impact", "SKILL.md"))).toBe(true);
|
|
83
|
+
});
|
|
84
|
+
(0, vitest_1.it)("copies SKILL.md and references/ from the shipped skill directory", () => {
|
|
85
|
+
(0, installer_1.install)({
|
|
86
|
+
repoRoot: tmp,
|
|
87
|
+
integrations: ["claude"],
|
|
88
|
+
context: { companyDescription: "X", managerPriorities: "Y", glossary: {} },
|
|
89
|
+
silent: true,
|
|
90
|
+
});
|
|
91
|
+
const skillDir = path.join(tmp, ".claude", "skills", "git-impact");
|
|
92
|
+
(0, vitest_1.expect)(fs.existsSync(path.join(skillDir, "references", "translation-rules.md"))).toBe(true);
|
|
93
|
+
(0, vitest_1.expect)(fs.existsSync(path.join(skillDir, "references", "html-template.md"))).toBe(true);
|
|
94
|
+
const skillContent = fs.readFileSync(path.join(skillDir, "SKILL.md"), "utf-8");
|
|
95
|
+
(0, vitest_1.expect)(skillContent).toContain("name: git-impact");
|
|
96
|
+
(0, vitest_1.expect)(skillContent).toContain("provenance");
|
|
97
|
+
});
|
|
98
|
+
(0, vitest_1.it)("is idempotent — running twice does not duplicate gitignore entries", () => {
|
|
99
|
+
(0, installer_1.install)({
|
|
100
|
+
repoRoot: tmp,
|
|
101
|
+
integrations: ["claude"],
|
|
102
|
+
context: { companyDescription: "X", managerPriorities: "Y", glossary: {} },
|
|
103
|
+
silent: true,
|
|
104
|
+
});
|
|
105
|
+
(0, installer_1.install)({
|
|
106
|
+
repoRoot: tmp,
|
|
107
|
+
integrations: ["claude"],
|
|
108
|
+
context: { companyDescription: "X", managerPriorities: "Y", glossary: {} },
|
|
109
|
+
silent: true,
|
|
110
|
+
});
|
|
111
|
+
const gitignore = fs.readFileSync(path.join(tmp, ".gitignore"), "utf-8");
|
|
112
|
+
const matches = gitignore.match(/\.git-impact\/history\.db/g) ?? [];
|
|
113
|
+
(0, vitest_1.expect)(matches.length).toBe(1);
|
|
114
|
+
});
|
|
115
|
+
(0, vitest_1.it)("writes editor-specific files when their integration is requested", () => {
|
|
116
|
+
(0, installer_1.install)({
|
|
117
|
+
repoRoot: tmp,
|
|
118
|
+
integrations: ["claude", "copilot", "cursor", "gemini"],
|
|
119
|
+
context: { companyDescription: "X", managerPriorities: "Y", glossary: {} },
|
|
120
|
+
silent: true,
|
|
121
|
+
});
|
|
122
|
+
(0, vitest_1.expect)(fs.existsSync(path.join(tmp, ".github", "instructions", "git-impact.instructions.md"))).toBe(true);
|
|
123
|
+
(0, vitest_1.expect)(fs.existsSync(path.join(tmp, ".cursor", "rules", "git-impact.mdc"))).toBe(true);
|
|
124
|
+
(0, vitest_1.expect)(fs.existsSync(path.join(tmp, ".gemini", "commands", "git-impact.md"))).toBe(true);
|
|
125
|
+
});
|
|
126
|
+
});
|
|
127
|
+
//# sourceMappingURL=installer.test.js.map
|