git-impact 0.6.6 → 0.7.1

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 CHANGED
@@ -52,7 +52,8 @@ The wizard auto-detects which AI editors you already use and installs for them.
52
52
  >
53
53
 
54
54
  Which AI editors should I install for? (comma-separated, or "all")
55
- Options: claude, copilot, cursor, gemini
55
+ Options: claude, copilot, cursor, gemini, opencode
56
+ (.agents/skills/ is always written — covers Goose, Amp, Codex, Letta, Roo)
56
57
  Detected in this repo: claude, cursor
57
58
  [press Enter to use detected]
58
59
  >
@@ -66,10 +67,12 @@ Then it creates everything and tells you what it did:
66
67
 
67
68
  ✅ .git-impact/context.json
68
69
  ✅ .gitignore
70
+ ✅ .agents/skills/git-impact/SKILL.md ← cross-vendor baseline
71
+ ✅ .agents/skills/git-impact/references/...
69
72
  ✅ .claude/skills/git-impact/SKILL.md
70
- ✅ .claude/skills/git-impact/references/translation-rules.md
71
- ✅ .claude/skills/git-impact/references/html-template.md
72
- ✅ .cursor/rules/git-impact.mdc
73
+ ✅ .claude/skills/git-impact/references/...
74
+ ✅ .cursor/skills/git-impact/SKILL.md
75
+ ✅ .cursor/skills/git-impact/references/...
73
76
  ✅ CLAUDE.md
74
77
  ✅ .git-impact/manifest.json
75
78
 
@@ -94,13 +97,13 @@ Once installed, just talk to your AI editor naturally:
94
97
  | `make a presentation for today` | Adds a bespoke shareable HTML page (opt-in) |
95
98
  | `set up context for this repo` | Re-runs the init questions inline |
96
99
 
97
- Works in **Claude Code**, **GitHub Copilot**, **Cursor**, and **Gemini CLI**. Claude Code and Gemini CLI get the full agentic experience (the skill auto-runs the MCP tools); Cursor and Copilot get the same instructions as paste-into-chat fallbacks.
100
+ Works in any editor that supports the [Agent Skills](https://agentskills.io) format. Five editors get a vendor-specific mirror (**Claude Code**, **Cursor**, **GitHub Copilot** + VS Code, **Gemini CLI**, **OpenCode**). Every other Agent Skills adopter — **Goose**, **Amp**, **OpenAI Codex**, **Letta**, **Roo Code**, and future ones picks up the same skill from the cross-vendor `.agents/skills/` baseline that's always written. One canonical `SKILL.md` folder, mirrored where each vendor's docs say it needs to live.
98
101
 
99
102
  ---
100
103
 
101
104
  ## How it works
102
105
 
103
- git-impact ships two things: a Claude Code **skill** that handles the prompting, and an **MCP server** that exposes typed data tools (git activity, history, context). The skill calls the MCP tools — no `sqlite3` shelling, no hand-rolled SQL.
106
+ git-impact ships two things: an [Agent Skills](https://agentskills.io)–compatible **skill** that handles the prompting (Claude Code, Cursor, Copilot, Gemini CLI, OpenCode get a vendor-specific mirror; Goose, Amp, Codex, Letta, Roo pick up the `.agents/skills/` baseline), and an **MCP server** that exposes typed data tools (git activity, history, context). The skill calls the MCP tools — no `sqlite3` shelling, no hand-rolled SQL.
104
107
 
105
108
  ```
106
109
  your commits → MCP get_git_activity → privacy redaction → AI translation
@@ -123,21 +126,21 @@ History is saved locally to `.git-impact/history.db` (SQLite, gitignored) so rev
123
126
 
124
127
  ```
125
128
  your-project/
126
- ├── .claude/
127
- │ └── skills/git-impact/
128
- │ ├── SKILL.md # Workflow (orchestrates MCP tools)
129
- │ └── references/
130
- │ ├── translation-rules.md # Loaded on demand
131
- └── html-template.md # Loaded on demand
132
- ├── .github/
133
- └── instructions/
134
- └── git-impact.instructions.md # GitHub Copilot
135
- ├── .cursor/
136
- │ └── rules/
137
- │ └── git-impact.mdc # Cursor
138
- ├── .gemini/
139
- │ └── commands/
140
- └── git-impact.md # Gemini CLI
129
+ ├── .agents/
130
+ │ └── skills/git-impact/ # Cross-vendor Agent Skills baseline
131
+ │ ├── SKILL.md # Workflow router (orchestrates MCP tools)
132
+ │ └── references/ # Loaded on demand (progressive disclosure)
133
+ │ ├── mode-standup.md
134
+ ├── mode-review.md
135
+ ├── mode-init.md
136
+ ├── translation-rules.md
137
+ └── html-template.md
138
+ ├── .claude/skills/git-impact/ # Same skill folder, mirrored for Claude Code
139
+ ├── .cursor/skills/git-impact/ # …mirrored for Cursor
140
+ ├── .github/skills/git-impact/ # …mirrored for GitHub Copilot + VS Code
141
+ ├── .gemini/skills/git-impact/ # …mirrored for Gemini CLI
142
+ ├── .opencode/skills/git-impact/ # …mirrored for OpenCode
143
+ (Goose, Amp, Codex, Letta, Roo — read from .agents/skills/ above, no mirror)
141
144
  ├── .git-impact/
142
145
  │ ├── context.json # Team glossary ← commit this
143
146
  │ ├── manifest.json # Install record ← commit this
@@ -308,7 +311,7 @@ src/
308
311
  ├── init/
309
312
  │ ├── installer.ts # install() + runInitWizard() + detectEditors()
310
313
  │ ├── installer.test.ts
311
- │ └── templates.ts # editor-specific instruction templates
314
+ │ └── templates.ts # CLAUDE.md block + context.json template
312
315
  ├── readers/
313
316
  │ ├── git.ts # reads git log, diffs, file changes
314
317
  │ ├── github.ts # reads PRs via GitHub API (optional)
@@ -329,8 +332,11 @@ src/
329
332
  └── cli/
330
333
  └── index.ts # init + view commands
331
334
  skill/
332
- ├── SKILL.md # workflow (200 lines, orchestrates MCP tools)
333
- └── references/
335
+ ├── SKILL.md # ~60-line router (picks a mode, points at references/)
336
+ └── references/ # loaded on demand (Agent Skills progressive disclosure)
337
+ ├── mode-standup.md # default mode — translate commits → bullets
338
+ ├── mode-review.md # synthesise history → performance review prep
339
+ ├── mode-init.md # interactive context.json setup
334
340
  ├── translation-rules.md
335
341
  └── html-template.md
336
342
  ```
@@ -347,6 +353,8 @@ Shipped:
347
353
  - [x] Editor auto-detection in init
348
354
  - [x] Test baseline (Vitest, 40 tests)
349
355
  - [x] Multi-editor: Claude Code, Copilot, Cursor, Gemini CLI
356
+ - [x] Canonical SKILL.md format ([Agent Skills](https://agentskills.io)) — vendor mirrors for OpenCode; `.agents/` baseline picked up by Goose, Amp, Codex, Letta, Roo
357
+ - [x] Auto-migration from pre-0.7 per-editor instruction files
350
358
 
351
359
  Next:
352
360
  - [ ] **PR description writer** — `git-impact-pr` skill produces ready-to-paste PR bodies
package/dist/cli/index.js CHANGED
@@ -41,11 +41,13 @@ const db_1 = require("../storage/db");
41
41
  const repo_1 = require("../mcp/repo");
42
42
  const installer_1 = require("../init/installer");
43
43
  const render_1 = require("../report/render");
44
+ // __dirname is dist/cli/ at runtime → ../../package.json is the package root.
45
+ const { version: PKG_VERSION } = require(path.resolve(__dirname, "..", "..", "package.json"));
44
46
  const program = new commander_1.Command();
45
47
  program
46
48
  .name("git-impact")
47
49
  .description("Install git-impact into a repo. Translation runs inside your AI editor (Claude Code skill / MCP) — no API key.")
48
- .version("0.6.6");
50
+ .version(PKG_VERSION);
49
51
  // ─── init ─────────────────────────────────────────────────────────────────────
50
52
  program
51
53
  .command("init")
@@ -65,7 +67,10 @@ program
65
67
  console.log(` git-impact installed\n`);
66
68
  for (const f of installed) {
67
69
  const rel = path.relative(repoRoot, f.path);
68
- const icon = f.action === "created" ? "✅" : f.action === "updated" ? "🔄" : "⏭️ ";
70
+ const icon = f.action === "created" ? "✅" :
71
+ f.action === "updated" ? "🔄" :
72
+ f.action === "removed" ? "🗑️ " :
73
+ "⏭️ ";
69
74
  console.log(` ${icon} ${rel}`);
70
75
  }
71
76
  // Editor-aware next-step hint based on what we actually installed.
@@ -73,7 +78,8 @@ program
73
78
  integrations.includes("gemini") ? `In Gemini CLI: run "/git-impact" (or say "do my standup")` :
74
79
  integrations.includes("cursor") ? `In Cursor chat: paste "@git-impact do my standup"` :
75
80
  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"`;
81
+ integrations.includes("opencode") ? `In OpenCode: open this repo and say "do my standup"` :
82
+ `Open this repo in your AI editor and say "do my standup"`;
77
83
  console.log(`\n Next steps:`);
78
84
  console.log(` 1. git add .git-impact/context.json && git commit -m "chore: add git-impact"`);
79
85
  console.log(` 2. ${trigger}`);
@@ -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":"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"}
@@ -1,10 +1,25 @@
1
+ /**
2
+ * Editors with verified Agent Skills install paths (per each vendor's
3
+ * published docs as of 2026-05). Adding a new editor here is a one-line
4
+ * change in EDITOR_PATHS below.
5
+ *
6
+ * Goose, Amp, OpenAI Codex, and Letta are NOT listed here because their
7
+ * docs point at the cross-vendor `.agents/skills/` baseline as the
8
+ * recommended project-local path — they're covered by the always-on
9
+ * baseline install, no vendor-specific mirror needed.
10
+ *
11
+ * Kiro, Roo, and Factory have vendor-specific dirs (`.kiro/`, `.roo/`,
12
+ * `.factory/`) that were not personally verified by the author. They
13
+ * may be added in a follow-up once each has been confirmed with a live
14
+ * install in the target editor.
15
+ */
16
+ export type Integration = "claude" | "copilot" | "cursor" | "gemini" | "opencode" | "antigravity";
1
17
  export interface InstallOptions {
2
18
  repoRoot: string;
3
19
  integrations: Integration[];
4
20
  context: RepoContext;
5
21
  silent?: boolean;
6
22
  }
7
- export type Integration = "claude" | "copilot" | "cursor" | "gemini";
8
23
  export interface RepoContext {
9
24
  companyDescription: string;
10
25
  managerPriorities: string;
@@ -12,18 +27,27 @@ export interface RepoContext {
12
27
  }
13
28
  export interface InstalledFile {
14
29
  path: string;
15
- action: "created" | "updated" | "skipped";
30
+ action: "created" | "updated" | "skipped" | "removed";
16
31
  }
17
32
  /**
18
33
  * Core install function — idempotent, safe to run multiple times.
19
- * Creates all integration files, context.json, updates CLAUDE.md and .gitignore.
20
- * Returns a manifest of every file it touched.
34
+ *
35
+ * Behaviour:
36
+ * 1. Migrate away from pre-0.7 layout (deletes editor-specific instruction
37
+ * files that have been superseded by the canonical SKILL.md folder).
38
+ * 2. Always write `.agents/skills/git-impact/` (cross-vendor standard).
39
+ * 3. Mirror the same SKILL.md folder into each requested editor's path.
40
+ * 4. Touch context.json, .gitignore, CLAUDE.md, manifest.json.
21
41
  */
22
42
  export declare function install(opts: InstallOptions): InstalledFile[];
23
43
  /**
24
44
  * 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
45
+ * already have config there, in catalog order. Lets `init` skip the "which AI
26
46
  * tools do you use?" question when the answer is obvious from the filesystem.
47
+ *
48
+ * Note: `agents` (the cross-vendor `.agents/skills/` baseline) is always
49
+ * written by `install()` regardless of detection, so it's excluded from this
50
+ * return value.
27
51
  */
28
52
  export declare function detectEditors(repoRoot: string): Integration[];
29
53
  /**
@@ -1 +1 @@
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"}
1
+ {"version":3,"file":"installer.d.ts","sourceRoot":"","sources":["../../src/init/installer.ts"],"names":[],"mappings":"AA0BA;;;;;;;;;;;;;;GAcG;AACH,MAAM,MAAM,WAAW,GACnB,QAAQ,GACR,SAAS,GACT,QAAQ,GACR,QAAQ,GACR,UAAU,GACV,aAAa,CAAC;AAgClB,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,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,GAAG,SAAS,CAAC;CACvD;AAED;;;;;;;;;GASG;AACH,wBAAgB,OAAO,CAAC,IAAI,EAAE,cAAc,GAAG,aAAa,EAAE,CA+D7D;AA6HD;;;;;;;;GAQG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,WAAW,EAAE,CAK7D;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"}
@@ -40,6 +40,10 @@ const fs = __importStar(require("fs"));
40
40
  const path = __importStar(require("path"));
41
41
  const readline = __importStar(require("readline"));
42
42
  const templates_1 = require("./templates");
43
+ // Read version from package.json so the manifest never drifts from the
44
+ // published package. __dirname is dist/init/ at runtime → ../../package.json
45
+ // is the package root.
46
+ const { version: PKG_VERSION } = require(path.resolve(__dirname, "..", "..", "package.json"));
43
47
  /**
44
48
  * The shipped `skill/` directory inside the published npm package.
45
49
  * Resolved relative to this file's location at runtime — works whether
@@ -50,83 +54,142 @@ function shippedSkillDir() {
50
54
  // src/init/installer.ts → ../../skill
51
55
  return path.resolve(__dirname, "..", "..", "skill");
52
56
  }
57
+ const EDITOR_PATHS = {
58
+ agents: { skillsRoot: ".agents/skills", detectDir: ".agents" },
59
+ claude: { skillsRoot: ".claude/skills", detectDir: ".claude" },
60
+ copilot: { skillsRoot: ".github/skills", detectDir: ".github" },
61
+ cursor: { skillsRoot: ".cursor/skills", detectDir: ".cursor" },
62
+ gemini: { skillsRoot: ".gemini/skills", detectDir: ".gemini" },
63
+ opencode: { skillsRoot: ".opencode/skills", detectDir: ".opencode" },
64
+ antigravity: { skillsRoot: ".antigravity/skills", detectDir: ".antigravity" },
65
+ };
66
+ const ALL_EDITORS = ["claude", "copilot", "cursor", "gemini", "opencode", "antigravity"];
67
+ const SKILL_NAME = "git-impact";
53
68
  /**
54
69
  * Core install function — idempotent, safe to run multiple times.
55
- * Creates all integration files, context.json, updates CLAUDE.md and .gitignore.
56
- * Returns a manifest of every file it touched.
70
+ *
71
+ * Behaviour:
72
+ * 1. Migrate away from pre-0.7 layout (deletes editor-specific instruction
73
+ * files that have been superseded by the canonical SKILL.md folder).
74
+ * 2. Always write `.agents/skills/git-impact/` (cross-vendor standard).
75
+ * 3. Mirror the same SKILL.md folder into each requested editor's path.
76
+ * 4. Touch context.json, .gitignore, CLAUDE.md, manifest.json.
57
77
  */
58
78
  function install(opts) {
59
79
  const { repoRoot, integrations, context } = opts;
60
80
  const installed = [];
81
+ // 0. Migrate any legacy per-editor instruction files from the old installer.
82
+ installed.push(...migrateLegacyLayout(repoRoot));
61
83
  // 1. Create .git-impact/ directory and context.json
62
84
  const gitImpactDir = path.join(repoRoot, ".git-impact");
63
85
  fs.mkdirSync(gitImpactDir, { recursive: true });
86
+ // Merge the wizard's inputs into whatever's already on disk so that
87
+ // optional fields the wizard never collects (githubToken, privacy, …)
88
+ // survive a re-run of `init`.
64
89
  const contextPath = path.join(gitImpactDir, "context.json");
65
- installed.push(writeFile(contextPath, (0, templates_1.CONTEXT_TEMPLATE)(context.companyDescription, context.managerPriorities, context.glossary)));
90
+ const existingContext = loadExistingContext(repoRoot) ?? {};
91
+ const mergedContext = {
92
+ ...existingContext,
93
+ companyDescription: context.companyDescription,
94
+ managerPriorities: context.managerPriorities,
95
+ glossary: context.glossary,
96
+ };
97
+ installed.push(writeFile(contextPath, (0, templates_1.CONTEXT_TEMPLATE)(mergedContext)));
66
98
  // 2. Update .gitignore
67
99
  installed.push(ensureGitignore(repoRoot));
68
- // 3. Per-integration files
69
- for (const integration of integrations) {
70
- installed.push(...installIntegration(repoRoot, integration));
100
+ // 3. Install the SKILL.md folder once per requested editor. `agents` is
101
+ // always included as a cross-vendor baseline (covers Goose/Amp/Codex/
102
+ // Letta/Roo and most modern Agent Skills adopters).
103
+ const targets = dedupe(["agents", ...integrations]);
104
+ for (const target of targets) {
105
+ installed.push(...installSkillFolder(repoRoot, target));
71
106
  }
72
- // 4. Update CLAUDE.md if Claude integration selected
73
- if (integrations.includes("claude")) {
107
+ // 4. Write CLAUDE.md when Claude Code is actually in scope. Detection
108
+ // matters because a Cursor-only user shouldn't get a top-level
109
+ // CLAUDE.md they didn't ask for; conversely, a user who later
110
+ // installs Claude Code should get the block on their next init
111
+ // even if `claude` wasn't passed explicitly.
112
+ if (integrations.includes("claude") || fs.existsSync(path.join(repoRoot, ".claude"))) {
74
113
  installed.push(updateClaudeMd(repoRoot));
75
114
  }
76
- // 5. Write manifest
115
+ // 5. Write manifest. Push the manifest entry into `installed` before
116
+ // writing so the CLI summary reports it, and so the manifest's own
117
+ // file list includes itself (self-referential is fine — anyone
118
+ // inspecting it expects to see every file the installer touched).
119
+ const manifestPath = path.join(gitImpactDir, "manifest.json");
120
+ const manifestExisted = fs.existsSync(manifestPath);
121
+ installed.push({ path: manifestPath, action: manifestExisted ? "updated" : "created" });
77
122
  const manifest = {
78
- version: "0.1.0",
123
+ version: PKG_VERSION,
79
124
  installedAt: new Date().toISOString(),
80
- integrations,
81
- files: installed.map((f) => path.relative(repoRoot, f.path)),
125
+ integrations: targets,
126
+ files: installed
127
+ .filter((f) => f.action !== "removed")
128
+ .map((f) => path.relative(repoRoot, f.path)),
82
129
  };
83
- const manifestPath = path.join(gitImpactDir, "manifest.json");
84
130
  fs.writeFileSync(manifestPath, JSON.stringify(manifest, null, 2) + "\n");
85
131
  return installed;
86
132
  }
87
- // ─── Per-integration installers ───────────────────────────────────────────────
88
- function installIntegration(repoRoot, integration) {
89
- switch (integration) {
90
- case "claude":
91
- return installClaude(repoRoot);
92
- case "copilot":
93
- return installCopilot(repoRoot);
94
- case "cursor":
95
- return installCursor(repoRoot);
96
- case "gemini":
97
- return installGemini(repoRoot);
98
- }
133
+ // ─── Skill folder install ─────────────────────────────────────────────────────
134
+ function installSkillFolder(repoRoot, target) {
135
+ const spec = EDITOR_PATHS[target];
136
+ const destDir = path.join(repoRoot, spec.skillsRoot, SKILL_NAME);
137
+ // copyTree itself creates `destDir` recursively — no need to pre-create.
138
+ return copyTree(shippedSkillDir(), destDir);
99
139
  }
100
- function installClaude(repoRoot) {
101
- const skillDir = path.join(repoRoot, ".claude", "skills", "git-impact");
102
- fs.mkdirSync(skillDir, { recursive: true });
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)));
140
+ /** Recursively mirror `src` → `dest`. Returns one InstalledFile per file copied. */
141
+ function copyTree(src, dest) {
142
+ const out = [];
143
+ fs.mkdirSync(dest, { recursive: true });
144
+ for (const entry of fs.readdirSync(src, { withFileTypes: true })) {
145
+ const srcPath = path.join(src, entry.name);
146
+ const destPath = path.join(dest, entry.name);
147
+ if (entry.isDirectory()) {
148
+ out.push(...copyTree(srcPath, destPath));
149
+ }
150
+ else if (entry.isFile()) {
151
+ out.push(copyFile(srcPath, destPath));
112
152
  }
113
153
  }
114
- return installed;
154
+ return out;
115
155
  }
116
- function installCopilot(repoRoot) {
117
- const dir = path.join(repoRoot, ".github", "instructions");
118
- fs.mkdirSync(dir, { recursive: true });
119
- return [writeFile(path.join(dir, "git-impact.instructions.md"), templates_1.COPILOT_INSTRUCTIONS)];
120
- }
121
- function installCursor(repoRoot) {
122
- const dir = path.join(repoRoot, ".cursor", "rules");
123
- fs.mkdirSync(dir, { recursive: true });
124
- return [writeFile(path.join(dir, "git-impact.mdc"), templates_1.CURSOR_RULES)];
156
+ // ─── Legacy migration ─────────────────────────────────────────────────────────
157
+ /**
158
+ * Files written by the pre-0.7 installer that are now superseded by the
159
+ * canonical SKILL.md folder. Deleted on next `init`. Parent dirs are NOT
160
+ * removed unless they were a git-impact-only location.
161
+ */
162
+ const LEGACY_FILES = [
163
+ ".github/instructions/git-impact.instructions.md",
164
+ ".cursor/rules/git-impact.mdc",
165
+ ".gemini/commands/git-impact.md",
166
+ ];
167
+ function migrateLegacyLayout(repoRoot) {
168
+ const removed = [];
169
+ for (const rel of LEGACY_FILES) {
170
+ const abs = path.join(repoRoot, rel);
171
+ if (fs.existsSync(abs)) {
172
+ fs.unlinkSync(abs);
173
+ removed.push({ path: abs, action: "removed" });
174
+ // If the parent dir is now empty and was created solely for git-impact,
175
+ // clean it up too. Only touch dirs ending in `instructions`, `rules`,
176
+ // or `commands` — those are the pre-0.7 install locations.
177
+ tryRemoveEmptyDir(path.dirname(abs), ["instructions", "rules", "commands"]);
178
+ }
179
+ }
180
+ return removed;
125
181
  }
126
- function installGemini(repoRoot) {
127
- const dir = path.join(repoRoot, ".gemini", "commands");
128
- fs.mkdirSync(dir, { recursive: true });
129
- return [writeFile(path.join(dir, "git-impact.md"), templates_1.GEMINI_COMMAND)];
182
+ function tryRemoveEmptyDir(dir, allowedBasenames) {
183
+ if (!allowedBasenames.includes(path.basename(dir)))
184
+ return;
185
+ try {
186
+ const entries = fs.readdirSync(dir);
187
+ if (entries.length === 0)
188
+ fs.rmdirSync(dir);
189
+ }
190
+ catch {
191
+ // Dir gone or not readable — nothing to do.
192
+ }
130
193
  }
131
194
  // ─── CLAUDE.md managed block ──────────────────────────────────────────────────
132
195
  const BLOCK_START = "<!-- GIT-IMPACT START -->";
@@ -142,44 +205,52 @@ function updateClaudeMd(repoRoot) {
142
205
  const startIdx = existing.indexOf(BLOCK_START);
143
206
  const endIdx = existing.indexOf(BLOCK_END);
144
207
  if (startIdx !== -1 && endIdx !== -1) {
145
- // Replace existing block
146
208
  const updated = existing.slice(0, startIdx) + block + existing.slice(endIdx + BLOCK_END.length);
147
209
  fs.writeFileSync(claudeMdPath, updated);
148
210
  return { path: claudeMdPath, action: "updated" };
149
211
  }
150
- // Append block
151
212
  fs.writeFileSync(claudeMdPath, existing.trimEnd() + "\n\n" + block + "\n");
152
213
  return { path: claudeMdPath, action: "updated" };
153
214
  }
154
215
  // ─── .gitignore ───────────────────────────────────────────────────────────────
155
- const GITIGNORE_ENTRY = ".git-impact/history.db";
216
+ /**
217
+ * Files git-impact writes locally that should never be committed:
218
+ * - history.db: per-machine SQLite history
219
+ * - result.html: regenerable rolling dashboard
220
+ * - standups/: opt-in per-day shareable HTML pages
221
+ */
222
+ const GITIGNORE_ENTRIES = [
223
+ ".git-impact/history.db",
224
+ ".git-impact/result.html",
225
+ ".git-impact/standups/",
226
+ ];
156
227
  function ensureGitignore(repoRoot) {
157
228
  const gitignorePath = path.join(repoRoot, ".gitignore");
158
- const existing = fs.existsSync(gitignorePath)
159
- ? fs.readFileSync(gitignorePath, "utf-8")
160
- : "";
161
- if (existing.includes(GITIGNORE_ENTRY)) {
229
+ const existed = fs.existsSync(gitignorePath);
230
+ const existing = existed ? fs.readFileSync(gitignorePath, "utf-8") : "";
231
+ const missing = GITIGNORE_ENTRIES.filter((entry) => !existing.includes(entry));
232
+ if (missing.length === 0) {
162
233
  return { path: gitignorePath, action: "skipped" };
163
234
  }
164
- fs.appendFileSync(gitignorePath, `\n# git-impact local history (private, per-machine)\n${GITIGNORE_ENTRY}\n`);
165
- return { path: gitignorePath, action: "updated" };
235
+ const header = `\n# git-impact local files (private, per-machine)\n`;
236
+ fs.appendFileSync(gitignorePath, header + missing.join("\n") + "\n");
237
+ return { path: gitignorePath, action: existed ? "updated" : "created" };
166
238
  }
167
239
  // ─── Editor auto-detection ───────────────────────────────────────────────────
168
240
  /**
169
241
  * 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
242
+ * already have config there, in catalog order. Lets `init` skip the "which AI
171
243
  * tools do you use?" question when the answer is obvious from the filesystem.
244
+ *
245
+ * Note: `agents` (the cross-vendor `.agents/skills/` baseline) is always
246
+ * written by `install()` regardless of detection, so it's excluded from this
247
+ * return value.
172
248
  */
173
249
  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);
250
+ return ALL_EDITORS.filter((id) => {
251
+ const dir = EDITOR_PATHS[id].detectDir;
252
+ return fs.existsSync(path.join(repoRoot, dir));
253
+ });
183
254
  }
184
255
  // ─── Interactive prompt ───────────────────────────────────────────────────────
185
256
  /**
@@ -211,7 +282,8 @@ async function runInitWizard(repoRoot) {
211
282
  ? detected.join(", ")
212
283
  : "none detected — defaulting to claude";
213
284
  const integrationsInput = await ask(`\n Which AI editors should I install for? (comma-separated, or "all")\n` +
214
- ` Options: claude, copilot, cursor, gemini\n` +
285
+ ` Options: ${ALL_EDITORS.join(", ")}\n` +
286
+ ` (.agents/skills/ is always written — covers Goose, Amp, Codex, Letta, Roo)\n` +
215
287
  ` Detected in this repo: ${detectedLabel}\n` +
216
288
  ` [press Enter to use detected]\n` +
217
289
  ` > `);
@@ -226,21 +298,20 @@ async function runInitWizard(repoRoot) {
226
298
  }
227
299
  }
228
300
  // Parse integrations
229
- const ALL_INTEGRATIONS = ["claude", "copilot", "cursor", "gemini"];
230
301
  let integrations;
231
302
  const raw = integrationsInput.toLowerCase().trim();
232
303
  if (!raw) {
233
- // Empty input → use what we detected, or claude as the safe default.
234
304
  integrations = detected.length > 0 ? detected : ["claude"];
235
305
  }
236
306
  else if (raw === "all") {
237
- integrations = ALL_INTEGRATIONS;
307
+ integrations = ALL_EDITORS;
238
308
  }
239
309
  else {
310
+ const validIds = new Set(ALL_EDITORS);
240
311
  integrations = raw
241
312
  .split(",")
242
313
  .map((s) => s.trim())
243
- .filter((s) => ALL_INTEGRATIONS.includes(s));
314
+ .filter((s) => validIds.has(s));
244
315
  if (integrations.length === 0)
245
316
  integrations = detected.length > 0 ? detected : ["claude"];
246
317
  }
@@ -261,9 +332,13 @@ function writeFile(filePath, content) {
261
332
  }
262
333
  function copyFile(srcPath, destPath) {
263
334
  const existed = fs.existsSync(destPath);
335
+ fs.mkdirSync(path.dirname(destPath), { recursive: true });
264
336
  fs.copyFileSync(srcPath, destPath);
265
337
  return { path: destPath, action: existed ? "updated" : "created" };
266
338
  }
339
+ function dedupe(xs) {
340
+ return Array.from(new Set(xs));
341
+ }
267
342
  function loadExistingContext(repoRoot) {
268
343
  const contextPath = path.join(repoRoot, ".git-impact", "context.json");
269
344
  if (!fs.existsSync(contextPath))
@@ -1 +1 @@
1
- {"version":3,"file":"installer.js","sourceRoot":"","sources":["../../src/init/installer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"installer.js","sourceRoot":"","sources":["../../src/init/installer.ts"],"names":[],"mappings":"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"}