@m2015agg/git-skill 0.1.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.
Files changed (112) hide show
  1. package/dist/commands/approve.d.ts +2 -0
  2. package/dist/commands/approve.js +56 -0
  3. package/dist/commands/approve.js.map +1 -0
  4. package/dist/commands/blame.d.ts +2 -0
  5. package/dist/commands/blame.js +139 -0
  6. package/dist/commands/blame.js.map +1 -0
  7. package/dist/commands/capture.d.ts +2 -0
  8. package/dist/commands/capture.js +68 -0
  9. package/dist/commands/capture.js.map +1 -0
  10. package/dist/commands/coupling.d.ts +2 -0
  11. package/dist/commands/coupling.js +48 -0
  12. package/dist/commands/coupling.js.map +1 -0
  13. package/dist/commands/cron.d.ts +2 -0
  14. package/dist/commands/cron.js +70 -0
  15. package/dist/commands/cron.js.map +1 -0
  16. package/dist/commands/decisions.d.ts +2 -0
  17. package/dist/commands/decisions.js +62 -0
  18. package/dist/commands/decisions.js.map +1 -0
  19. package/dist/commands/diff-summary.d.ts +2 -0
  20. package/dist/commands/diff-summary.js +151 -0
  21. package/dist/commands/diff-summary.js.map +1 -0
  22. package/dist/commands/docs.d.ts +3 -0
  23. package/dist/commands/docs.js +38 -0
  24. package/dist/commands/docs.js.map +1 -0
  25. package/dist/commands/doctor.d.ts +2 -0
  26. package/dist/commands/doctor.js +60 -0
  27. package/dist/commands/doctor.js.map +1 -0
  28. package/dist/commands/embed.d.ts +2 -0
  29. package/dist/commands/embed.js +81 -0
  30. package/dist/commands/embed.js.map +1 -0
  31. package/dist/commands/enrich.d.ts +2 -0
  32. package/dist/commands/enrich.js +148 -0
  33. package/dist/commands/enrich.js.map +1 -0
  34. package/dist/commands/experts.d.ts +2 -0
  35. package/dist/commands/experts.js +55 -0
  36. package/dist/commands/experts.js.map +1 -0
  37. package/dist/commands/hotspots.d.ts +2 -0
  38. package/dist/commands/hotspots.js +46 -0
  39. package/dist/commands/hotspots.js.map +1 -0
  40. package/dist/commands/init.d.ts +2 -0
  41. package/dist/commands/init.js +91 -0
  42. package/dist/commands/init.js.map +1 -0
  43. package/dist/commands/install.d.ts +2 -0
  44. package/dist/commands/install.js +59 -0
  45. package/dist/commands/install.js.map +1 -0
  46. package/dist/commands/metric.d.ts +2 -0
  47. package/dist/commands/metric.js +26 -0
  48. package/dist/commands/metric.js.map +1 -0
  49. package/dist/commands/regression.d.ts +2 -0
  50. package/dist/commands/regression.js +166 -0
  51. package/dist/commands/regression.js.map +1 -0
  52. package/dist/commands/release-notes.d.ts +2 -0
  53. package/dist/commands/release-notes.js +244 -0
  54. package/dist/commands/release-notes.js.map +1 -0
  55. package/dist/commands/search.d.ts +2 -0
  56. package/dist/commands/search.js +93 -0
  57. package/dist/commands/search.js.map +1 -0
  58. package/dist/commands/snapshot.d.ts +6 -0
  59. package/dist/commands/snapshot.js +154 -0
  60. package/dist/commands/snapshot.js.map +1 -0
  61. package/dist/commands/timeline.d.ts +2 -0
  62. package/dist/commands/timeline.js +78 -0
  63. package/dist/commands/timeline.js.map +1 -0
  64. package/dist/commands/trends.d.ts +2 -0
  65. package/dist/commands/trends.js +92 -0
  66. package/dist/commands/trends.js.map +1 -0
  67. package/dist/commands/uninstall.d.ts +2 -0
  68. package/dist/commands/uninstall.js +79 -0
  69. package/dist/commands/uninstall.js.map +1 -0
  70. package/dist/commands/update.d.ts +2 -0
  71. package/dist/commands/update.js +59 -0
  72. package/dist/commands/update.js.map +1 -0
  73. package/dist/commands/why.d.ts +2 -0
  74. package/dist/commands/why.js +111 -0
  75. package/dist/commands/why.js.map +1 -0
  76. package/dist/index.d.ts +2 -0
  77. package/dist/index.js +65 -0
  78. package/dist/index.js.map +1 -0
  79. package/dist/templates/walkthrough.d.ts +1 -0
  80. package/dist/templates/walkthrough.js +13 -0
  81. package/dist/templates/walkthrough.js.map +1 -0
  82. package/dist/util/analytics.d.ts +32 -0
  83. package/dist/util/analytics.js +308 -0
  84. package/dist/util/analytics.js.map +1 -0
  85. package/dist/util/claude-md.d.ts +2 -0
  86. package/dist/util/claude-md.js +41 -0
  87. package/dist/util/claude-md.js.map +1 -0
  88. package/dist/util/config.d.ts +21 -0
  89. package/dist/util/config.js +26 -0
  90. package/dist/util/config.js.map +1 -0
  91. package/dist/util/db.d.ts +3 -0
  92. package/dist/util/db.js +183 -0
  93. package/dist/util/db.js.map +1 -0
  94. package/dist/util/detect.d.ts +2 -0
  95. package/dist/util/detect.js +14 -0
  96. package/dist/util/detect.js.map +1 -0
  97. package/dist/util/embedding.d.ts +6 -0
  98. package/dist/util/embedding.js +48 -0
  99. package/dist/util/embedding.js.map +1 -0
  100. package/dist/util/git.d.ts +45 -0
  101. package/dist/util/git.js +191 -0
  102. package/dist/util/git.js.map +1 -0
  103. package/dist/util/hooks.d.ts +3 -0
  104. package/dist/util/hooks.js +43 -0
  105. package/dist/util/hooks.js.map +1 -0
  106. package/dist/util/metrics.d.ts +2 -0
  107. package/dist/util/metrics.js +42 -0
  108. package/dist/util/metrics.js.map +1 -0
  109. package/dist/util/search-hybrid.d.ts +10 -0
  110. package/dist/util/search-hybrid.js +33 -0
  111. package/dist/util/search-hybrid.js.map +1 -0
  112. package/package.json +35 -0
@@ -0,0 +1,46 @@
1
+ import { Command } from "commander";
2
+ import { openDb } from "../util/db.js";
3
+ import { join } from "path";
4
+ export function hotspotsCommand() {
5
+ return new Command("hotspots")
6
+ .description("Show files with the most churn")
7
+ .option("--limit <n>", "Max results", "20")
8
+ .option("--json", "Output as JSON")
9
+ .action((opts) => {
10
+ const historyDir = join(process.cwd(), ".git-history");
11
+ const db = openDb(historyDir);
12
+ try {
13
+ const limit = parseInt(opts.limit, 10);
14
+ const sql = `
15
+ SELECT
16
+ file_path,
17
+ SUM(commits) AS commits,
18
+ SUM(insertions) AS insertions,
19
+ SUM(deletions) AS deletions
20
+ FROM churn_hotspots
21
+ GROUP BY file_path
22
+ ORDER BY commits DESC
23
+ LIMIT ?
24
+ `;
25
+ const rows = db.prepare(sql).all(limit);
26
+ if (opts.json) {
27
+ process.stdout.write(JSON.stringify(rows, null, 2) + "\n");
28
+ return;
29
+ }
30
+ if (rows.length === 0) {
31
+ process.stdout.write("No churn data found. Run `git-skill snapshot` first.\n");
32
+ return;
33
+ }
34
+ const colWidth = Math.max(...rows.map((r) => r.file_path.length), 10);
35
+ process.stdout.write(`${"File".padEnd(colWidth)} ${"Commits".padStart(7)} ${"Insertions".padStart(10)} ${"Deletions".padStart(9)}\n`);
36
+ process.stdout.write(`${"─".repeat(colWidth + 32)}\n`);
37
+ for (const row of rows) {
38
+ process.stdout.write(`${row.file_path.padEnd(colWidth)} ${String(row.commits).padStart(7)} +${String(row.insertions).padStart(9)} -${String(row.deletions).padStart(8)}\n`);
39
+ }
40
+ }
41
+ finally {
42
+ db.close();
43
+ }
44
+ });
45
+ }
46
+ //# sourceMappingURL=hotspots.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hotspots.js","sourceRoot":"","sources":["../../src/commands/hotspots.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AACvC,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAE5B,MAAM,UAAU,eAAe;IAC7B,OAAO,IAAI,OAAO,CAAC,UAAU,CAAC;SAC3B,WAAW,CAAC,gCAAgC,CAAC;SAC7C,MAAM,CAAC,aAAa,EAAE,aAAa,EAAE,IAAI,CAAC;SAC1C,MAAM,CAAC,QAAQ,EAAE,gBAAgB,CAAC;SAClC,MAAM,CAAC,CAAC,IAAuC,EAAE,EAAE;QAClD,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,cAAc,CAAC,CAAC;QACvD,MAAM,EAAE,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;QAC9B,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YAEvC,MAAM,GAAG,GAAG;;;;;;;;;;SAUX,CAAC;YAEF,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAKpC,CAAC;YAEH,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;gBACd,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;gBAC3D,OAAO;YACT,CAAC;YAED,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACtB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,wDAAwD,CAAC,CAAC;gBAC/E,OAAO;YACT,CAAC;YAED,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC;YACtE,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,YAAY,CAAC,QAAQ,CAAC,EAAE,CAAC,KAAK,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CACnH,CAAC;YACF,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,QAAQ,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;YACvD,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;gBACvB,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,GAAG,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CACzJ,CAAC;YACJ,CAAC;QACH,CAAC;gBAAS,CAAC;YACT,EAAE,CAAC,KAAK,EAAE,CAAC;QACb,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -0,0 +1,2 @@
1
+ import { Command } from "commander";
2
+ export declare function initCommand(): Command;
@@ -0,0 +1,91 @@
1
+ import { Command } from "commander";
2
+ import { join } from "path";
3
+ import { existsSync, readFileSync, writeFileSync, appendFileSync, mkdirSync } from "fs";
4
+ import { installHook } from "../util/hooks.js";
5
+ import { isGitRepo } from "../util/git.js";
6
+ import { execSync } from "child_process";
7
+ import { upsertSection } from "../util/claude-md.js";
8
+ import { getSkillDoc } from "./docs.js";
9
+ import { WALKTHROUGH } from "../templates/walkthrough.js";
10
+ function write(msg) { process.stdout.write(msg); }
11
+ export function initCommand() {
12
+ return new Command("init")
13
+ .description("Initialize git-skill in the current repository")
14
+ .option("--skip-snapshot", "Skip initial snapshot")
15
+ .option("--skip-cron", "Skip cron setup")
16
+ .action((opts) => {
17
+ const cwd = process.cwd();
18
+ if (!isGitRepo(cwd)) {
19
+ write("Error: Not a git repository.\n");
20
+ process.exit(1);
21
+ }
22
+ write("Initializing git-skill...\n\n");
23
+ // 1. Install hook
24
+ write("1. Installing post-commit hook...\n");
25
+ const hookResult = installHook(join(cwd, ".git"));
26
+ write(` Hook: ${hookResult}\n`);
27
+ // 2. Update .gitignore
28
+ write("2. Updating .gitignore...\n");
29
+ const gitignorePath = join(cwd, ".gitignore");
30
+ const entry = ".git-history/";
31
+ if (existsSync(gitignorePath)) {
32
+ const content = readFileSync(gitignorePath, "utf-8");
33
+ if (!content.includes(entry)) {
34
+ const suffix = content.endsWith("\n") ? "" : "\n";
35
+ appendFileSync(gitignorePath, suffix + entry + "\n");
36
+ write(" Added .git-history/ to .gitignore.\n");
37
+ }
38
+ else {
39
+ write(" Already in .gitignore.\n");
40
+ }
41
+ }
42
+ else {
43
+ writeFileSync(gitignorePath, entry + "\n");
44
+ write(" Created .gitignore.\n");
45
+ }
46
+ // 3. Create .git-history dir
47
+ mkdirSync(join(cwd, ".git-history"), { recursive: true });
48
+ // 4. Write CLAUDE.md
49
+ write("3. Writing CLAUDE.md...\n");
50
+ const claudeMdResult = upsertSection(join(cwd, "CLAUDE.md"), getSkillDoc());
51
+ write(` CLAUDE.md: ${claudeMdResult}\n`);
52
+ // 5. Write walkthrough
53
+ write("4. Writing walkthrough...\n");
54
+ const walkthroughDir = join(cwd, ".claude", "commands");
55
+ mkdirSync(walkthroughDir, { recursive: true });
56
+ writeFileSync(join(walkthroughDir, "git-history.md"), WALKTHROUGH);
57
+ write(" Walkthrough written to .claude/commands/git-history.md\n");
58
+ // 6. Run snapshot
59
+ if (!opts.skipSnapshot) {
60
+ write("5. Running initial snapshot...\n");
61
+ try {
62
+ const entryPoint = process.argv[1];
63
+ execSync(`node ${entryPoint} snapshot`, { cwd, stdio: "inherit" });
64
+ }
65
+ catch {
66
+ write(" Warning: Snapshot failed. Run `git-skill snapshot` manually.\n");
67
+ }
68
+ }
69
+ else {
70
+ write("5. Skipping snapshot.\n");
71
+ }
72
+ // 7. Run approve
73
+ write("6. Pre-approving read-only commands...\n");
74
+ try {
75
+ const entryPoint = process.argv[1];
76
+ execSync(`node ${entryPoint} approve`, { cwd, stdio: "inherit" });
77
+ }
78
+ catch {
79
+ write(" Warning: Approve failed. Run `git-skill approve` manually.\n");
80
+ }
81
+ // 8. Cron (deferred)
82
+ if (!opts.skipCron) {
83
+ write("7. Cron setup deferred.\n");
84
+ }
85
+ else {
86
+ write("7. Skipping cron.\n");
87
+ }
88
+ write("\ngit-skill initialized!\n");
89
+ });
90
+ }
91
+ //# sourceMappingURL=init.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import { Command } from "commander";
2
+ export declare function installCommand(): Command;
@@ -0,0 +1,59 @@
1
+ import { Command } from "commander";
2
+ import { join } from "path";
3
+ import { homedir } from "os";
4
+ import { execSync } from "child_process";
5
+ import { writeConfig, getDefaultConfig, readConfig } from "../util/config.js";
6
+ import { upsertSection } from "../util/claude-md.js";
7
+ import { getSkillDoc } from "./docs.js";
8
+ function write(msg) { process.stdout.write(msg); }
9
+ function checkGit() {
10
+ try {
11
+ execSync("git --version", { stdio: "ignore" });
12
+ return true;
13
+ }
14
+ catch {
15
+ return false;
16
+ }
17
+ }
18
+ export function installCommand() {
19
+ return new Command("install")
20
+ .description("Global setup wizard — install git-skill system-wide")
21
+ .option("--ci", "Non-interactive mode, use defaults")
22
+ .action((opts) => {
23
+ write("Installing git-skill globally...\n\n");
24
+ // 1. Check git
25
+ write("1. Checking git...\n");
26
+ if (!checkGit()) {
27
+ write(" Error: git not found in PATH. Install git first.\n");
28
+ process.exit(1);
29
+ }
30
+ write(" git found.\n");
31
+ // 2. Write default config
32
+ write("2. Writing default config...\n");
33
+ const configDir = join(homedir(), ".config", "git-skill");
34
+ const existing = readConfig();
35
+ if (existing) {
36
+ write(` Config already exists at ${configDir}/config.json — skipping.\n`);
37
+ }
38
+ else {
39
+ writeConfig(getDefaultConfig());
40
+ write(` Config written to ${configDir}/config.json\n`);
41
+ }
42
+ // 3. Update ~/.claude/CLAUDE.md
43
+ write("3. Updating ~/.claude/CLAUDE.md...\n");
44
+ const claudeMdPath = join(homedir(), ".claude", "CLAUDE.md");
45
+ const result = upsertSection(claudeMdPath, getSkillDoc());
46
+ write(` CLAUDE.md: ${result}\n`);
47
+ // 4. Success + next steps
48
+ write("\ngit-skill installed successfully!\n\n");
49
+ write("Next steps:\n");
50
+ write(" cd <your-repo>\n");
51
+ write(" git-skill init # initialize in a repo\n");
52
+ write(" git-skill approve # pre-approve read-only commands in Claude Code\n");
53
+ write(" git-skill doctor # verify setup health\n");
54
+ if (!opts.ci) {
55
+ write("\nTip: Run `git-skill approve --global` to pre-approve commands globally.\n");
56
+ }
57
+ });
58
+ }
59
+ //# sourceMappingURL=install.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/commands/install.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAE5B,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;AAC7B,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC9E,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAExC,SAAS,KAAK,CAAC,GAAW,IAAU,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAEhE,SAAS,QAAQ;IACf,IAAI,CAAC;QACH,QAAQ,CAAC,eAAe,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;QAC/C,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,MAAM,UAAU,cAAc;IAC5B,OAAO,IAAI,OAAO,CAAC,SAAS,CAAC;SAC1B,WAAW,CAAC,qDAAqD,CAAC;SAClE,MAAM,CAAC,MAAM,EAAE,oCAAoC,CAAC;SACpD,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE;QACf,KAAK,CAAC,sCAAsC,CAAC,CAAC;QAE9C,eAAe;QACf,KAAK,CAAC,sBAAsB,CAAC,CAAC;QAC9B,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC;YAChB,KAAK,CAAC,uDAAuD,CAAC,CAAC;YAC/D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,KAAK,CAAC,iBAAiB,CAAC,CAAC;QAEzB,0BAA0B;QAC1B,KAAK,CAAC,gCAAgC,CAAC,CAAC;QACxC,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC;QAC1D,MAAM,QAAQ,GAAG,UAAU,EAAE,CAAC;QAC9B,IAAI,QAAQ,EAAE,CAAC;YACb,KAAK,CAAC,+BAA+B,SAAS,4BAA4B,CAAC,CAAC;QAC9E,CAAC;aAAM,CAAC;YACN,WAAW,CAAC,gBAAgB,EAAE,CAAC,CAAC;YAChC,KAAK,CAAC,wBAAwB,SAAS,gBAAgB,CAAC,CAAC;QAC3D,CAAC;QAED,gCAAgC;QAChC,KAAK,CAAC,sCAAsC,CAAC,CAAC;QAC9C,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC;QAC7D,MAAM,MAAM,GAAG,aAAa,CAAC,YAAY,EAAE,WAAW,EAAE,CAAC,CAAC;QAC1D,KAAK,CAAC,iBAAiB,MAAM,IAAI,CAAC,CAAC;QAEnC,0BAA0B;QAC1B,KAAK,CAAC,yCAAyC,CAAC,CAAC;QACjD,KAAK,CAAC,eAAe,CAAC,CAAC;QACvB,KAAK,CAAC,oBAAoB,CAAC,CAAC;QAC5B,KAAK,CAAC,oDAAoD,CAAC,CAAC;QAC5D,KAAK,CAAC,6EAA6E,CAAC,CAAC;QACrF,KAAK,CAAC,mDAAmD,CAAC,CAAC;QAE3D,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;YACb,KAAK,CAAC,6EAA6E,CAAC,CAAC;QACvF,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -0,0 +1,2 @@
1
+ import { Command } from "commander";
2
+ export declare function metricCommand(): Command;
@@ -0,0 +1,26 @@
1
+ import { Command } from "commander";
2
+ import { openDb } from "../util/db.js";
3
+ import { getLastCommitHash } from "../util/git.js";
4
+ import { join } from "path";
5
+ function write(msg) { process.stdout.write(msg); }
6
+ export function metricCommand() {
7
+ const cmd = new Command("metric").description("Manual metric recording");
8
+ cmd.command("record")
9
+ .description("Record a metric value")
10
+ .argument("<name>", "Metric name")
11
+ .argument("<value>", "Metric value (number)")
12
+ .action((name, value) => {
13
+ const db = openDb(join(process.cwd(), ".git-history"));
14
+ const hash = getLastCommitHash(process.cwd());
15
+ const numValue = parseFloat(value);
16
+ if (isNaN(numValue)) {
17
+ write("Error: Value must be a number.\n");
18
+ process.exit(1);
19
+ }
20
+ db.prepare("INSERT INTO metric_values (commit_hash, metric_name, value, captured_at) VALUES (?, ?, ?, ?)").run(hash, name, numValue, new Date().toISOString());
21
+ write(`Recorded ${name} = ${numValue} for commit ${hash.slice(0, 7)}\n`);
22
+ db.close();
23
+ });
24
+ return cmd;
25
+ }
26
+ //# sourceMappingURL=metric.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metric.js","sourceRoot":"","sources":["../../src/commands/metric.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AACvC,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAE5B,SAAS,KAAK,CAAC,GAAW,IAAU,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAEhE,MAAM,UAAU,aAAa;IAC3B,MAAM,GAAG,GAAG,IAAI,OAAO,CAAC,QAAQ,CAAC,CAAC,WAAW,CAAC,yBAAyB,CAAC,CAAC;IAEzE,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC;SAClB,WAAW,CAAC,uBAAuB,CAAC;SACpC,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC;SACjC,QAAQ,CAAC,SAAS,EAAE,uBAAuB,CAAC;SAC5C,MAAM,CAAC,CAAC,IAAY,EAAE,KAAa,EAAE,EAAE;QACtC,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,cAAc,CAAC,CAAC,CAAC;QACvD,MAAM,IAAI,GAAG,iBAAiB,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;QAC9C,MAAM,QAAQ,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;QACnC,IAAI,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;YAAC,KAAK,CAAC,kCAAkC,CAAC,CAAC;YAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAAC,CAAC;QACpF,EAAE,CAAC,OAAO,CAAC,8FAA8F,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC;QAC/J,KAAK,CAAC,YAAY,IAAI,MAAM,QAAQ,eAAe,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;QACzE,EAAE,CAAC,KAAK,EAAE,CAAC;IACb,CAAC,CAAC,CAAC;IAEL,OAAO,GAAG,CAAC;AACb,CAAC"}
@@ -0,0 +1,2 @@
1
+ import { Command } from "commander";
2
+ export declare function regressionCommand(): Command;
@@ -0,0 +1,166 @@
1
+ import { Command } from "commander";
2
+ import { openDb } from "../util/db.js";
3
+ import { join } from "path";
4
+ import { mean, standardDeviation } from "simple-statistics";
5
+ function detectInflection(points, windowSize) {
6
+ const metric = points[0]?.metric_name ?? "unknown";
7
+ const values = points.map((p) => p.value);
8
+ const n = values.length;
9
+ if (n < 2) {
10
+ return {
11
+ metric,
12
+ inflection_period: null,
13
+ inflection_index: null,
14
+ before_mean: null,
15
+ after_mean: null,
16
+ method: "none",
17
+ significant: false,
18
+ message: "Insufficient data (need at least 2 points)",
19
+ };
20
+ }
21
+ // Fallback for < 20 data points: simple percent-change
22
+ if (n < 20) {
23
+ const first = values[0];
24
+ const last = values[n - 1];
25
+ const pct = first !== 0 ? Math.abs((last - first) / first) * 100 : 0;
26
+ const significant = pct > 20;
27
+ // Find the point with biggest jump
28
+ let maxDiff = 0;
29
+ let maxIdx = 0;
30
+ for (let i = 1; i < n; i++) {
31
+ const diff = Math.abs(values[i] - values[i - 1]);
32
+ if (diff > maxDiff) {
33
+ maxDiff = diff;
34
+ maxIdx = i;
35
+ }
36
+ }
37
+ const beforeVals = values.slice(0, maxIdx);
38
+ const afterVals = values.slice(maxIdx);
39
+ return {
40
+ metric,
41
+ inflection_period: significant ? points[maxIdx].period : null,
42
+ inflection_index: significant ? maxIdx : null,
43
+ before_mean: beforeVals.length > 0 ? mean(beforeVals) : null,
44
+ after_mean: afterVals.length > 0 ? mean(afterVals) : null,
45
+ method: "percent_change",
46
+ significant,
47
+ message: significant
48
+ ? `Change of ${pct.toFixed(1)}% detected; inflection at ${points[maxIdx].period}`
49
+ : `No significant change (${pct.toFixed(1)}% overall change)`,
50
+ };
51
+ }
52
+ // Rolling z-score for >= 20 data points
53
+ const flagged = [];
54
+ for (let i = windowSize; i < n; i++) {
55
+ const window = values.slice(i - windowSize, i);
56
+ const winMean = mean(window);
57
+ let winStd;
58
+ try {
59
+ winStd = standardDeviation(window);
60
+ }
61
+ catch {
62
+ winStd = 0;
63
+ }
64
+ if (winStd === 0)
65
+ continue;
66
+ const zScore = Math.abs(values[i] - winMean) / winStd;
67
+ if (zScore > 2) {
68
+ flagged.push(i);
69
+ }
70
+ }
71
+ if (flagged.length === 0) {
72
+ return {
73
+ metric,
74
+ inflection_period: null,
75
+ inflection_index: null,
76
+ before_mean: mean(values),
77
+ after_mean: null,
78
+ method: "rolling_zscore",
79
+ significant: false,
80
+ message: "No significant change detected",
81
+ };
82
+ }
83
+ // Earliest flagged point = inflection
84
+ const inflectionIdx = flagged[0];
85
+ const beforeVals = values.slice(0, inflectionIdx);
86
+ const afterVals = values.slice(inflectionIdx);
87
+ return {
88
+ metric,
89
+ inflection_period: points[inflectionIdx].period,
90
+ inflection_index: inflectionIdx,
91
+ before_mean: beforeVals.length > 0 ? mean(beforeVals) : null,
92
+ after_mean: afterVals.length > 0 ? mean(afterVals) : null,
93
+ method: "rolling_zscore",
94
+ significant: true,
95
+ message: `Inflection detected at ${points[inflectionIdx].period} (z-score > 2)`,
96
+ };
97
+ }
98
+ export function regressionCommand() {
99
+ return new Command("regression")
100
+ .description("Change-point detection using rolling z-score on metric trends")
101
+ .option("--metric <name>", "Metric to analyze", "avg_files_per_commit")
102
+ .option("--window <n>", "Rolling window size", "10")
103
+ .option("--json", "Output as JSON")
104
+ .action((opts) => {
105
+ const historyDir = join(process.cwd(), ".git-history");
106
+ const db = openDb(historyDir);
107
+ try {
108
+ const windowSize = parseInt(opts.window, 10);
109
+ const rows = db
110
+ .prepare(`SELECT metric_name, period, value
111
+ FROM trends
112
+ WHERE metric_name = ?
113
+ ORDER BY period ASC`)
114
+ .all(opts.metric);
115
+ if (rows.length === 0) {
116
+ // Try to find any metrics available
117
+ const available = db
118
+ .prepare(`SELECT DISTINCT metric_name FROM trends ORDER BY metric_name`)
119
+ .all();
120
+ const result = {
121
+ metric: opts.metric,
122
+ inflection_period: null,
123
+ inflection_index: null,
124
+ before_mean: null,
125
+ after_mean: null,
126
+ method: "none",
127
+ significant: false,
128
+ message: available.length > 0
129
+ ? `No data for metric "${opts.metric}". Available: ${available.map((r) => r.metric_name).join(", ")}`
130
+ : `No trend data found. Run \`git-skill snapshot\` first.`,
131
+ };
132
+ if (opts.json) {
133
+ process.stdout.write(JSON.stringify(result, null, 2) + "\n");
134
+ }
135
+ else {
136
+ process.stdout.write(result.message + "\n");
137
+ }
138
+ return;
139
+ }
140
+ const result = detectInflection(rows, windowSize);
141
+ if (opts.json) {
142
+ process.stdout.write(JSON.stringify(result, null, 2) + "\n");
143
+ return;
144
+ }
145
+ process.stdout.write(`Regression Analysis: ${result.metric}\n`);
146
+ process.stdout.write(`${"─".repeat(60)}\n`);
147
+ process.stdout.write(`Method: ${result.method}\n`);
148
+ process.stdout.write(`Data pts: ${rows.length}\n`);
149
+ process.stdout.write(`Significant: ${result.significant ? "yes" : "no"}\n`);
150
+ process.stdout.write(`\n${result.message}\n`);
151
+ if (result.inflection_period) {
152
+ process.stdout.write(`\nInflection: ${result.inflection_period} (index ${result.inflection_index})\n`);
153
+ }
154
+ if (result.before_mean !== null) {
155
+ process.stdout.write(`Before mean: ${result.before_mean.toFixed(4)}\n`);
156
+ }
157
+ if (result.after_mean !== null) {
158
+ process.stdout.write(`After mean: ${result.after_mean.toFixed(4)}\n`);
159
+ }
160
+ }
161
+ finally {
162
+ db.close();
163
+ }
164
+ });
165
+ }
166
+ //# sourceMappingURL=regression.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"regression.js","sourceRoot":"","sources":["../../src/commands/regression.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import { Command } from "commander";
2
+ export declare function releaseNotesCommand(): Command;