@vyuhlabs/dxkit 1.5.0 → 1.6.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 (258) hide show
  1. package/CHANGELOG.md +272 -0
  2. package/README.md +272 -358
  3. package/THIRD_PARTY_NOTICES.md +40 -0
  4. package/dist/analyzers/developer/detailed.d.ts +26 -0
  5. package/dist/analyzers/developer/detailed.d.ts.map +1 -0
  6. package/dist/analyzers/developer/detailed.js +193 -0
  7. package/dist/analyzers/developer/detailed.js.map +1 -0
  8. package/dist/analyzers/developer/gather.d.ts +11 -0
  9. package/dist/analyzers/developer/gather.d.ts.map +1 -0
  10. package/dist/analyzers/developer/gather.js +167 -0
  11. package/dist/analyzers/developer/gather.js.map +1 -0
  12. package/dist/analyzers/developer/index.d.ts +8 -0
  13. package/dist/analyzers/developer/index.d.ts.map +1 -0
  14. package/dist/analyzers/developer/index.js +168 -0
  15. package/dist/analyzers/developer/index.js.map +1 -0
  16. package/dist/analyzers/developer/types.d.ts +49 -0
  17. package/dist/analyzers/developer/types.d.ts.map +1 -0
  18. package/dist/analyzers/developer/types.js +6 -0
  19. package/dist/analyzers/developer/types.js.map +1 -0
  20. package/dist/analyzers/docs/shallow.d.ts +9 -0
  21. package/dist/analyzers/docs/shallow.d.ts.map +1 -0
  22. package/dist/analyzers/docs/shallow.js +8 -0
  23. package/dist/analyzers/docs/shallow.js.map +1 -0
  24. package/dist/analyzers/dx/shallow.d.ts +9 -0
  25. package/dist/analyzers/dx/shallow.d.ts.map +1 -0
  26. package/dist/analyzers/dx/shallow.js +8 -0
  27. package/dist/analyzers/dx/shallow.js.map +1 -0
  28. package/dist/analyzers/evidence.d.ts +36 -0
  29. package/dist/analyzers/evidence.d.ts.map +1 -0
  30. package/dist/analyzers/evidence.js +3 -0
  31. package/dist/analyzers/evidence.js.map +1 -0
  32. package/dist/analyzers/health/actions.d.ts +10 -0
  33. package/dist/analyzers/health/actions.d.ts.map +1 -0
  34. package/dist/analyzers/health/actions.js +284 -0
  35. package/dist/analyzers/health/actions.js.map +1 -0
  36. package/dist/analyzers/health/detailed.d.ts +26 -0
  37. package/dist/analyzers/health/detailed.d.ts.map +1 -0
  38. package/dist/analyzers/health/detailed.js +147 -0
  39. package/dist/analyzers/health/detailed.js.map +1 -0
  40. package/dist/analyzers/health.d.ts +22 -0
  41. package/dist/analyzers/health.d.ts.map +1 -0
  42. package/dist/analyzers/health.js +270 -0
  43. package/dist/analyzers/health.js.map +1 -0
  44. package/dist/analyzers/index.d.ts +3 -0
  45. package/dist/analyzers/index.d.ts.map +1 -0
  46. package/dist/analyzers/index.js +6 -0
  47. package/dist/analyzers/index.js.map +1 -0
  48. package/dist/analyzers/maintainability/shallow.d.ts +9 -0
  49. package/dist/analyzers/maintainability/shallow.d.ts.map +1 -0
  50. package/dist/analyzers/maintainability/shallow.js +8 -0
  51. package/dist/analyzers/maintainability/shallow.js.map +1 -0
  52. package/dist/analyzers/quality/actions.d.ts +5 -0
  53. package/dist/analyzers/quality/actions.d.ts.map +1 -0
  54. package/dist/analyzers/quality/actions.js +158 -0
  55. package/dist/analyzers/quality/actions.js.map +1 -0
  56. package/dist/analyzers/quality/detailed.d.ts +17 -0
  57. package/dist/analyzers/quality/detailed.d.ts.map +1 -0
  58. package/dist/analyzers/quality/detailed.js +122 -0
  59. package/dist/analyzers/quality/detailed.js.map +1 -0
  60. package/dist/analyzers/quality/gather.d.ts +38 -0
  61. package/dist/analyzers/quality/gather.d.ts.map +1 -0
  62. package/dist/analyzers/quality/gather.js +279 -0
  63. package/dist/analyzers/quality/gather.js.map +1 -0
  64. package/dist/analyzers/quality/index.d.ts +12 -0
  65. package/dist/analyzers/quality/index.d.ts.map +1 -0
  66. package/dist/analyzers/quality/index.js +281 -0
  67. package/dist/analyzers/quality/index.js.map +1 -0
  68. package/dist/analyzers/quality/shallow.d.ts +9 -0
  69. package/dist/analyzers/quality/shallow.d.ts.map +1 -0
  70. package/dist/analyzers/quality/shallow.js +8 -0
  71. package/dist/analyzers/quality/shallow.js.map +1 -0
  72. package/dist/analyzers/quality/types.d.ts +66 -0
  73. package/dist/analyzers/quality/types.d.ts.map +1 -0
  74. package/dist/analyzers/quality/types.js +3 -0
  75. package/dist/analyzers/quality/types.js.map +1 -0
  76. package/dist/analyzers/remediation.d.ts +42 -0
  77. package/dist/analyzers/remediation.d.ts.map +1 -0
  78. package/dist/analyzers/remediation.js +28 -0
  79. package/dist/analyzers/remediation.js.map +1 -0
  80. package/dist/analyzers/scoring.d.ts +32 -0
  81. package/dist/analyzers/scoring.d.ts.map +1 -0
  82. package/dist/analyzers/scoring.js +410 -0
  83. package/dist/analyzers/scoring.js.map +1 -0
  84. package/dist/analyzers/security/actions.d.ts +7 -0
  85. package/dist/analyzers/security/actions.d.ts.map +1 -0
  86. package/dist/analyzers/security/actions.js +104 -0
  87. package/dist/analyzers/security/actions.js.map +1 -0
  88. package/dist/analyzers/security/detailed.d.ts +14 -0
  89. package/dist/analyzers/security/detailed.d.ts.map +1 -0
  90. package/dist/analyzers/security/detailed.js +124 -0
  91. package/dist/analyzers/security/detailed.js.map +1 -0
  92. package/dist/analyzers/security/gather.d.ts +12 -0
  93. package/dist/analyzers/security/gather.d.ts.map +1 -0
  94. package/dist/analyzers/security/gather.js +195 -0
  95. package/dist/analyzers/security/gather.js.map +1 -0
  96. package/dist/analyzers/security/index.d.ts +8 -0
  97. package/dist/analyzers/security/index.d.ts.map +1 -0
  98. package/dist/analyzers/security/index.js +173 -0
  99. package/dist/analyzers/security/index.js.map +1 -0
  100. package/dist/analyzers/security/scoring.d.ts +29 -0
  101. package/dist/analyzers/security/scoring.d.ts.map +1 -0
  102. package/dist/analyzers/security/scoring.js +40 -0
  103. package/dist/analyzers/security/scoring.js.map +1 -0
  104. package/dist/analyzers/security/shallow.d.ts +10 -0
  105. package/dist/analyzers/security/shallow.d.ts.map +1 -0
  106. package/dist/analyzers/security/shallow.js +8 -0
  107. package/dist/analyzers/security/shallow.js.map +1 -0
  108. package/dist/analyzers/security/types.d.ts +43 -0
  109. package/dist/analyzers/security/types.d.ts.map +1 -0
  110. package/dist/analyzers/security/types.js +6 -0
  111. package/dist/analyzers/security/types.js.map +1 -0
  112. package/dist/analyzers/tests/actions.d.ts +6 -0
  113. package/dist/analyzers/tests/actions.d.ts.map +1 -0
  114. package/dist/analyzers/tests/actions.js +80 -0
  115. package/dist/analyzers/tests/actions.js.map +1 -0
  116. package/dist/analyzers/tests/detailed.d.ts +14 -0
  117. package/dist/analyzers/tests/detailed.d.ts.map +1 -0
  118. package/dist/analyzers/tests/detailed.js +121 -0
  119. package/dist/analyzers/tests/detailed.js.map +1 -0
  120. package/dist/analyzers/tests/gather.d.ts +5 -0
  121. package/dist/analyzers/tests/gather.d.ts.map +1 -0
  122. package/dist/analyzers/tests/gather.js +270 -0
  123. package/dist/analyzers/tests/gather.js.map +1 -0
  124. package/dist/analyzers/tests/import-graph.d.ts +48 -0
  125. package/dist/analyzers/tests/import-graph.d.ts.map +1 -0
  126. package/dist/analyzers/tests/import-graph.js +231 -0
  127. package/dist/analyzers/tests/import-graph.js.map +1 -0
  128. package/dist/analyzers/tests/index.d.ts +8 -0
  129. package/dist/analyzers/tests/index.d.ts.map +1 -0
  130. package/dist/analyzers/tests/index.js +247 -0
  131. package/dist/analyzers/tests/index.js.map +1 -0
  132. package/dist/analyzers/tests/scoring.d.ts +27 -0
  133. package/dist/analyzers/tests/scoring.d.ts.map +1 -0
  134. package/dist/analyzers/tests/scoring.js +38 -0
  135. package/dist/analyzers/tests/scoring.js.map +1 -0
  136. package/dist/analyzers/tests/shallow.d.ts +9 -0
  137. package/dist/analyzers/tests/shallow.d.ts.map +1 -0
  138. package/dist/analyzers/tests/shallow.js +8 -0
  139. package/dist/analyzers/tests/shallow.js.map +1 -0
  140. package/dist/analyzers/tests/types.d.ts +49 -0
  141. package/dist/analyzers/tests/types.d.ts.map +1 -0
  142. package/dist/analyzers/tests/types.js +6 -0
  143. package/dist/analyzers/tests/types.js.map +1 -0
  144. package/dist/analyzers/tools/cloc.d.ts +8 -0
  145. package/dist/analyzers/tools/cloc.d.ts.map +1 -0
  146. package/dist/analyzers/tools/cloc.js +49 -0
  147. package/dist/analyzers/tools/cloc.js.map +1 -0
  148. package/dist/analyzers/tools/coverage.d.ts +59 -0
  149. package/dist/analyzers/tools/coverage.d.ts.map +1 -0
  150. package/dist/analyzers/tools/coverage.js +280 -0
  151. package/dist/analyzers/tools/coverage.js.map +1 -0
  152. package/dist/analyzers/tools/cvss-v4-lookup.d.ts +10 -0
  153. package/dist/analyzers/tools/cvss-v4-lookup.d.ts.map +1 -0
  154. package/dist/analyzers/tools/cvss-v4-lookup.js +284 -0
  155. package/dist/analyzers/tools/cvss-v4-lookup.js.map +1 -0
  156. package/dist/analyzers/tools/cvss-v4.d.ts +24 -0
  157. package/dist/analyzers/tools/cvss-v4.d.ts.map +1 -0
  158. package/dist/analyzers/tools/cvss-v4.js +362 -0
  159. package/dist/analyzers/tools/cvss-v4.js.map +1 -0
  160. package/dist/analyzers/tools/default-exclusions.gitignore +56 -0
  161. package/dist/analyzers/tools/exclusions.d.ts +70 -0
  162. package/dist/analyzers/tools/exclusions.d.ts.map +1 -0
  163. package/dist/analyzers/tools/exclusions.js +250 -0
  164. package/dist/analyzers/tools/exclusions.js.map +1 -0
  165. package/dist/analyzers/tools/generic.d.ts +4 -0
  166. package/dist/analyzers/tools/generic.d.ts.map +1 -0
  167. package/dist/analyzers/tools/generic.js +198 -0
  168. package/dist/analyzers/tools/generic.js.map +1 -0
  169. package/dist/analyzers/tools/gitleaks.d.ts +8 -0
  170. package/dist/analyzers/tools/gitleaks.d.ts.map +1 -0
  171. package/dist/analyzers/tools/gitleaks.js +58 -0
  172. package/dist/analyzers/tools/gitleaks.js.map +1 -0
  173. package/dist/analyzers/tools/graphify.d.ts +4 -0
  174. package/dist/analyzers/tools/graphify.d.ts.map +1 -0
  175. package/dist/analyzers/tools/graphify.js +222 -0
  176. package/dist/analyzers/tools/graphify.js.map +1 -0
  177. package/dist/analyzers/tools/osv.d.ts +51 -0
  178. package/dist/analyzers/tools/osv.d.ts.map +1 -0
  179. package/dist/analyzers/tools/osv.js +188 -0
  180. package/dist/analyzers/tools/osv.js.map +1 -0
  181. package/dist/analyzers/tools/parallel.d.ts +8 -0
  182. package/dist/analyzers/tools/parallel.d.ts.map +1 -0
  183. package/dist/analyzers/tools/parallel.js +195 -0
  184. package/dist/analyzers/tools/parallel.js.map +1 -0
  185. package/dist/analyzers/tools/runner.d.ts +13 -0
  186. package/dist/analyzers/tools/runner.d.ts.map +1 -0
  187. package/dist/analyzers/tools/runner.js +109 -0
  188. package/dist/analyzers/tools/runner.js.map +1 -0
  189. package/dist/analyzers/tools/suppressions.d.ts +55 -0
  190. package/dist/analyzers/tools/suppressions.d.ts.map +1 -0
  191. package/dist/analyzers/tools/suppressions.js +203 -0
  192. package/dist/analyzers/tools/suppressions.js.map +1 -0
  193. package/dist/analyzers/tools/timing.d.ts +9 -0
  194. package/dist/analyzers/tools/timing.d.ts.map +1 -0
  195. package/dist/analyzers/tools/timing.js +29 -0
  196. package/dist/analyzers/tools/timing.js.map +1 -0
  197. package/dist/analyzers/tools/tool-registry.d.ts +86 -0
  198. package/dist/analyzers/tools/tool-registry.d.ts.map +1 -0
  199. package/dist/analyzers/tools/tool-registry.js +705 -0
  200. package/dist/analyzers/tools/tool-registry.js.map +1 -0
  201. package/dist/analyzers/types.d.ts +125 -0
  202. package/dist/analyzers/types.d.ts.map +1 -0
  203. package/dist/analyzers/types.js +11 -0
  204. package/dist/analyzers/types.js.map +1 -0
  205. package/dist/cli.d.ts.map +1 -1
  206. package/dist/cli.js +462 -0
  207. package/dist/cli.js.map +1 -1
  208. package/dist/detect.d.ts.map +1 -1
  209. package/dist/detect.js +24 -15
  210. package/dist/detect.js.map +1 -1
  211. package/dist/languages/csharp.d.ts +5 -0
  212. package/dist/languages/csharp.d.ts.map +1 -0
  213. package/dist/languages/csharp.js +265 -0
  214. package/dist/languages/csharp.js.map +1 -0
  215. package/dist/languages/go.d.ts +11 -0
  216. package/dist/languages/go.d.ts.map +1 -0
  217. package/dist/languages/go.js +321 -0
  218. package/dist/languages/go.js.map +1 -0
  219. package/dist/languages/index.d.ts +6 -0
  220. package/dist/languages/index.d.ts.map +1 -0
  221. package/dist/languages/index.js +18 -0
  222. package/dist/languages/index.js.map +1 -0
  223. package/dist/languages/python.d.ts +3 -0
  224. package/dist/languages/python.d.ts.map +1 -0
  225. package/dist/languages/python.js +284 -0
  226. package/dist/languages/python.js.map +1 -0
  227. package/dist/languages/rust.d.ts +17 -0
  228. package/dist/languages/rust.d.ts.map +1 -0
  229. package/dist/languages/rust.js +333 -0
  230. package/dist/languages/rust.js.map +1 -0
  231. package/dist/languages/types.d.ts +38 -0
  232. package/dist/languages/types.d.ts.map +1 -0
  233. package/dist/languages/types.js +3 -0
  234. package/dist/languages/types.js.map +1 -0
  235. package/dist/languages/typescript.d.ts +15 -0
  236. package/dist/languages/typescript.d.ts.map +1 -0
  237. package/dist/languages/typescript.js +353 -0
  238. package/dist/languages/typescript.js.map +1 -0
  239. package/dist/logger.d.ts +1 -0
  240. package/dist/logger.d.ts.map +1 -1
  241. package/dist/logger.js +25 -12
  242. package/dist/logger.js.map +1 -1
  243. package/dist/project-yaml.d.ts.map +1 -1
  244. package/dist/project-yaml.js +1 -0
  245. package/dist/project-yaml.js.map +1 -1
  246. package/dist/tools-cli.d.ts +2 -0
  247. package/dist/tools-cli.d.ts.map +1 -0
  248. package/dist/tools-cli.js +231 -0
  249. package/dist/tools-cli.js.map +1 -0
  250. package/dist/types.d.ts +10 -0
  251. package/dist/types.d.ts.map +1 -1
  252. package/package.json +6 -2
  253. package/templates/.claude/commands/dev-report.md +34 -4
  254. package/templates/.claude/commands/health.md +45 -2
  255. package/templates/.claude/commands/quality.md.template +38 -15
  256. package/templates/.claude/commands/test-gaps.md +36 -2
  257. package/templates/.claude/commands/vulnerabilities.md +36 -2
  258. package/templates/.project/scripts/setup/interactive-setup.sh +6 -2
@@ -0,0 +1,40 @@
1
+ # Third-Party Notices
2
+
3
+ This project embeds code and data from third-party open-source projects, listed below with their licenses.
4
+
5
+ ---
6
+
7
+ ## FIRST CVSS v4 Calculator
8
+
9
+ `src/analyzers/tools/cvss-v4-lookup.ts` (macrovector → base-score lookup table) and the scoring algorithm shape in `src/analyzers/tools/cvss-v4.ts` are derived from the official FIRST CVSS v4.0 reference implementation:
10
+
11
+ - **Source:** https://github.com/FIRSTdotorg/cvss-v4-calculator
12
+ - **License:** BSD-2-Clause
13
+ - **Copyright:** © 2023 FIRST.ORG, Inc., Red Hat, and contributors
14
+
15
+ ### License text
16
+
17
+ ```
18
+ Copyright (c) 2023 FIRST.ORG, Inc., Red Hat, and contributors
19
+
20
+ Redistribution and use in source and binary forms, with or without
21
+ modification, are permitted provided that the following conditions are met:
22
+
23
+ 1. Redistributions of source code must retain the above copyright notice, this
24
+ list of conditions and the following disclaimer.
25
+
26
+ 2. Redistributions in binary form must reproduce the above copyright notice,
27
+ this list of conditions and the following disclaimer in the documentation
28
+ and/or other materials provided with the distribution.
29
+
30
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
31
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
32
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
33
+ DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
34
+ FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
35
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
36
+ SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
37
+ CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
38
+ OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
39
+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
40
+ ```
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Detailed developer activity report.
3
+ *
4
+ * Observational — there is no score to simulate here (dev-report is about
5
+ * what happened, not what to fix). The detailed report is a richer inventory
6
+ * + flagged observations that agents can turn into recommendations.
7
+ */
8
+ import { DevReport } from './types';
9
+ export interface DevObservation {
10
+ id: string;
11
+ severity: 'info' | 'warn' | 'action';
12
+ title: string;
13
+ rationale: string;
14
+ /** Optional context values rendered inline (keep primitives only). */
15
+ context?: Record<string, string | number | boolean>;
16
+ }
17
+ export interface DevDetailedReport extends DevReport {
18
+ schemaVersion: string;
19
+ vagueCommitExamples: string[];
20
+ observations: DevObservation[];
21
+ }
22
+ /** Derive observations from the report + sample data. */
23
+ export declare function buildObservations(report: DevReport): DevObservation[];
24
+ export declare function buildDevDetailed(report: DevReport, vagueCommitExamples?: string[]): DevDetailedReport;
25
+ export declare function formatDevDetailedMarkdown(detailed: DevDetailedReport, elapsed: string): string;
26
+ //# sourceMappingURL=detailed.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"detailed.d.ts","sourceRoot":"","sources":["../../../src/analyzers/developer/detailed.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAEpC,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,QAAQ,CAAC;IACrC,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,sEAAsE;IACtE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,CAAC;CACrD;AAED,MAAM,WAAW,iBAAkB,SAAQ,SAAS;IAClD,aAAa,EAAE,MAAM,CAAC;IACtB,mBAAmB,EAAE,MAAM,EAAE,CAAC;IAC9B,YAAY,EAAE,cAAc,EAAE,CAAC;CAChC;AAED,yDAAyD;AACzD,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,SAAS,GAAG,cAAc,EAAE,CA6ErE;AAED,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,SAAS,EACjB,mBAAmB,GAAE,MAAM,EAAO,GACjC,iBAAiB,CAOnB;AAED,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,iBAAiB,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAyH9F"}
@@ -0,0 +1,193 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.buildObservations = buildObservations;
4
+ exports.buildDevDetailed = buildDevDetailed;
5
+ exports.formatDevDetailedMarkdown = formatDevDetailedMarkdown;
6
+ /** Derive observations from the report + sample data. */
7
+ function buildObservations(report) {
8
+ const obs = [];
9
+ const q = report.commitQuality;
10
+ const s = report.summary;
11
+ if (q.total > 0 && q.conventionalPercent < 20) {
12
+ obs.push({
13
+ id: 'dev.low-conventional-commits',
14
+ severity: 'action',
15
+ title: `Low conventional-commit adoption (${q.conventionalPercent}%)`,
16
+ rationale: 'Conventional commits (feat:, fix:, etc.) enable automated changelogs and clearer history. Adoption below 20% suggests no enforcement.',
17
+ context: { conventionalPercent: q.conventionalPercent, total: q.total },
18
+ });
19
+ }
20
+ if (q.total > 0 && q.vague / q.total > 0.3) {
21
+ obs.push({
22
+ id: 'dev.vague-commit-messages',
23
+ severity: 'warn',
24
+ title: `${q.vague} vague commit messages (${Math.round((q.vague / q.total) * 100)}%)`,
25
+ rationale: 'Single-word or placeholder messages ("update", "fix", "wip") make git history unreadable. Enforce minimum message length in a commit-msg hook.',
26
+ context: { vague: q.vague, total: q.total },
27
+ });
28
+ }
29
+ if (s.mergeRatio > 0.3) {
30
+ obs.push({
31
+ id: 'dev.high-merge-ratio',
32
+ severity: 'warn',
33
+ title: `Merge commits are ${Math.round(s.mergeRatio * 100)}% of all commits`,
34
+ rationale: 'A high merge ratio indicates branch-heavy workflow. Rebase-on-merge or squash-merge keeps history linear and easier to bisect.',
35
+ context: { mergeRatio: s.mergeRatio },
36
+ });
37
+ }
38
+ if (report.contributors.length > 0 && report.contributors.length <= 2) {
39
+ obs.push({
40
+ id: 'dev.bus-factor-risk',
41
+ severity: 'warn',
42
+ title: `Only ${report.contributors.length} active contributor${report.contributors.length === 1 ? '' : 's'} in period`,
43
+ rationale: 'Low bus factor — knowledge is concentrated. Consider pair programming, code review rotation, or onboarding.',
44
+ context: { contributors: report.contributors.length },
45
+ });
46
+ }
47
+ if (report.hotFiles.length > 0) {
48
+ const hottest = report.hotFiles[0];
49
+ if (hottest.changes >= 20) {
50
+ obs.push({
51
+ id: 'dev.churn-hotspot',
52
+ severity: 'info',
53
+ title: `Churn hotspot: \`${hottest.path}\` (${hottest.changes} changes)`,
54
+ rationale: 'Frequently-changed files often need refactoring — or are simply high-activity. Cross-reference with quality report for god files or duplication.',
55
+ context: { path: hottest.path, changes: hottest.changes },
56
+ });
57
+ }
58
+ }
59
+ if (report.velocity.length >= 2) {
60
+ const recent = report.velocity.slice(-4);
61
+ const avgRecent = recent.reduce((s, v) => s + v.commits, 0) / recent.length;
62
+ const overall = report.velocity.reduce((s, v) => s + v.commits, 0) / report.velocity.length;
63
+ if (avgRecent < overall * 0.5) {
64
+ obs.push({
65
+ id: 'dev.velocity-drop',
66
+ severity: 'info',
67
+ title: `Velocity dropped in last ${recent.length} weeks (${avgRecent.toFixed(1)}/wk vs ${overall.toFixed(1)} avg)`,
68
+ rationale: 'A sustained drop could mean shipping elsewhere, team transition, or blocked work. Worth confirming with the team.',
69
+ context: {
70
+ avgRecent: Number(avgRecent.toFixed(1)),
71
+ avgOverall: Number(overall.toFixed(1)),
72
+ },
73
+ });
74
+ }
75
+ }
76
+ return obs;
77
+ }
78
+ function buildDevDetailed(report, vagueCommitExamples = []) {
79
+ return {
80
+ ...report,
81
+ schemaVersion: '10c.1',
82
+ vagueCommitExamples,
83
+ observations: buildObservations(report),
84
+ };
85
+ }
86
+ function formatDevDetailedMarkdown(detailed, elapsed) {
87
+ const L = [];
88
+ const s = detailed.summary;
89
+ const q = detailed.commitQuality;
90
+ L.push('# Developer Activity — Detailed');
91
+ L.push('');
92
+ L.push(`**Date:** ${detailed.analyzedAt.slice(0, 10)}`);
93
+ L.push(`**Period:** ${detailed.period.since} to ${detailed.period.until}`);
94
+ L.push(`**Repository:** ${detailed.repo}`);
95
+ L.push(`**Branch:** ${detailed.branch} (${detailed.commitSha})`);
96
+ L.push(`**Schema version:** ${detailed.schemaVersion}`);
97
+ L.push('');
98
+ L.push('---');
99
+ L.push('');
100
+ // Observations — actionable signals
101
+ L.push('## Observations');
102
+ L.push('');
103
+ if (detailed.observations.length === 0) {
104
+ L.push('No notable signals detected.');
105
+ }
106
+ else {
107
+ L.push('| Severity | Observation |');
108
+ L.push('|----------|-------------|');
109
+ for (const o of detailed.observations) {
110
+ L.push(`| ${o.severity.toUpperCase()} | ${o.title} |`);
111
+ }
112
+ L.push('');
113
+ for (const o of detailed.observations) {
114
+ L.push(`### ${o.title}`);
115
+ L.push(`- **ID:** \`${o.id}\``);
116
+ L.push(`- **Severity:** ${o.severity}`);
117
+ L.push(`- **Why:** ${o.rationale}`);
118
+ L.push('');
119
+ }
120
+ }
121
+ L.push('---');
122
+ L.push('');
123
+ // Summary
124
+ L.push('## Summary');
125
+ L.push('');
126
+ L.push(`**${s.totalCommits} commits** (${s.nonMergeCommits} non-merge, ${s.mergeCommits} merge) from **${s.contributors} contributors**.`);
127
+ L.push(`**Merge ratio:** ${(s.mergeRatio * 100).toFixed(1)}%`);
128
+ L.push(`**Conventional commits:** ${q.conventionalPercent}% of non-merge commits.`);
129
+ L.push('');
130
+ L.push('---');
131
+ L.push('');
132
+ // All contributors
133
+ L.push('## All Contributors');
134
+ L.push('');
135
+ L.push('| Rank | Developer | Commits | Merges | +Lines | -Lines | Net |');
136
+ L.push('|------|-----------|--------:|-------:|-------:|-------:|-----|');
137
+ detailed.contributors.forEach((c, i) => {
138
+ L.push(`| ${i + 1} | ${c.name} | ${c.commits} | ${c.mergeCommits} | +${c.linesAdded.toLocaleString()} | -${c.linesRemoved.toLocaleString()} | ${c.netChange >= 0 ? '+' : ''}${c.netChange.toLocaleString()} |`);
139
+ });
140
+ L.push('');
141
+ L.push('---');
142
+ L.push('');
143
+ // Commit quality breakdown
144
+ L.push('## Commit Message Quality');
145
+ L.push('');
146
+ L.push('| Type | Count | % |');
147
+ L.push('|------|------:|---|');
148
+ L.push(`| Conventional | ${q.conventional} | ${q.conventionalPercent}% |`);
149
+ L.push(`| Descriptive | ${q.descriptive} | ${q.total > 0 ? ((q.descriptive / q.total) * 100).toFixed(1) : 0}% |`);
150
+ L.push(`| Vague | ${q.vague} | ${q.total > 0 ? ((q.vague / q.total) * 100).toFixed(1) : 0}% |`);
151
+ L.push('');
152
+ if (detailed.vagueCommitExamples.length > 0) {
153
+ L.push('### Sample vague commits');
154
+ L.push('');
155
+ for (const msg of detailed.vagueCommitExamples) {
156
+ L.push(`- \`${msg}\``);
157
+ }
158
+ L.push('');
159
+ }
160
+ L.push('---');
161
+ L.push('');
162
+ // All hot files
163
+ L.push('## Hot Files (Most Changed)');
164
+ L.push('');
165
+ L.push('| File | Changes |');
166
+ L.push('|------|--------:|');
167
+ for (const f of detailed.hotFiles) {
168
+ L.push(`| \`${f.path}\` | ${f.changes} |`);
169
+ }
170
+ L.push('');
171
+ L.push('---');
172
+ L.push('');
173
+ // Velocity
174
+ L.push('## Weekly Velocity');
175
+ L.push('');
176
+ if (detailed.velocity.length > 0) {
177
+ L.push('| Week | Commits | Bar |');
178
+ L.push('|------|--------:|-----|');
179
+ for (const v of detailed.velocity) {
180
+ const bar = '█'.repeat(Math.min(Math.round(v.commits / 2), 30));
181
+ L.push(`| ${v.week} | ${v.commits} | ${bar} |`);
182
+ }
183
+ L.push('');
184
+ }
185
+ L.push('---');
186
+ L.push('');
187
+ L.push(`**Tools used:** ${detailed.toolsUsed.join(', ')}`);
188
+ L.push(`**Analysis time:** ${elapsed}s`);
189
+ L.push('');
190
+ L.push('*Generated by [VyuhLabs DXKit](https://www.npmjs.com/package/@vyuhlabs/dxkit) — detailed mode*');
191
+ return L.join('\n');
192
+ }
193
+ //# sourceMappingURL=detailed.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"detailed.js","sourceRoot":"","sources":["../../../src/analyzers/developer/detailed.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import { ContributorStats, HotFile, CommitQuality, WeeklyVelocity } from './types';
2
+ export declare function gatherContributors(cwd: string, since: string): ContributorStats[];
3
+ export declare function gatherCommitQuality(cwd: string, since: string): CommitQuality;
4
+ export declare function gatherHotFiles(cwd: string, since: string, top?: number): HotFile[];
5
+ export declare function gatherVelocity(cwd: string, since: string): WeeklyVelocity[];
6
+ export declare function gatherVagueCommitExamples(cwd: string, since: string, limit?: number): string[];
7
+ export declare function gatherSummary(cwd: string, since: string): {
8
+ totalCommits: number;
9
+ mergeCommits: number;
10
+ };
11
+ //# sourceMappingURL=gather.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gather.d.ts","sourceRoot":"","sources":["../../../src/analyzers/developer/gather.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,gBAAgB,EAAE,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAInF,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,gBAAgB,EAAE,CAoFjF;AAQD,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,aAAa,CA8B7E;AAID,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,SAAK,GAAG,OAAO,EAAE,CAgB9E;AAID,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,cAAc,EAAE,CAoB3E;AAMD,wBAAgB,yBAAyB,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,SAAK,GAAG,MAAM,EAAE,CAgB1F;AAID,wBAAgB,aAAa,CAC3B,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,GACZ;IAAE,YAAY,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE,CAQhD"}
@@ -0,0 +1,167 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.gatherContributors = gatherContributors;
4
+ exports.gatherCommitQuality = gatherCommitQuality;
5
+ exports.gatherHotFiles = gatherHotFiles;
6
+ exports.gatherVelocity = gatherVelocity;
7
+ exports.gatherVagueCommitExamples = gatherVagueCommitExamples;
8
+ exports.gatherSummary = gatherSummary;
9
+ /**
10
+ * Developer activity gathering — all git-based, no external tools.
11
+ *
12
+ * Tool: git (log, shortlog, blame)
13
+ */
14
+ const runner_1 = require("../tools/runner");
15
+ // ─── Contributors ───────────────────────────────────────────────────────────
16
+ function gatherContributors(cwd, since) {
17
+ // Get commit count per author
18
+ const shortlog = (0, runner_1.run)(`git shortlog -sn --no-merges --since='${since}' HEAD 2>/dev/null`, cwd, 30000);
19
+ if (!shortlog)
20
+ return [];
21
+ const contributors = new Map();
22
+ for (const line of shortlog.split('\n').filter((l) => l.trim())) {
23
+ const match = line.trim().match(/^(\d+)\s+(.+)$/);
24
+ if (match) {
25
+ contributors.set(match[2], {
26
+ name: match[2],
27
+ commits: parseInt(match[1]),
28
+ linesAdded: 0,
29
+ linesRemoved: 0,
30
+ netChange: 0,
31
+ mergeCommits: 0,
32
+ });
33
+ }
34
+ }
35
+ // Get lines added/removed per author via numstat
36
+ const numstat = (0, runner_1.run)(`git log --numstat --format='AUTHOR:%aN' --since='${since}' --no-merges HEAD 2>/dev/null`, cwd, 60000);
37
+ if (numstat) {
38
+ let currentAuthor = '';
39
+ for (const line of numstat.split('\n')) {
40
+ if (line.startsWith('AUTHOR:')) {
41
+ currentAuthor = line.replace('AUTHOR:', '');
42
+ }
43
+ else {
44
+ const m = line.match(/^(\d+)\s+(\d+)\s+/);
45
+ if (m && currentAuthor) {
46
+ const stats = contributors.get(currentAuthor);
47
+ if (stats) {
48
+ stats.linesAdded += parseInt(m[1]);
49
+ stats.linesRemoved += parseInt(m[2]);
50
+ }
51
+ }
52
+ }
53
+ }
54
+ }
55
+ // Get merge commit count per author
56
+ const mergeLog = (0, runner_1.run)(`git log --format='%aN' --merges --since='${since}' HEAD 2>/dev/null`, cwd, 30000);
57
+ if (mergeLog) {
58
+ for (const name of mergeLog.split('\n').filter((l) => l.trim())) {
59
+ const stats = contributors.get(name);
60
+ if (stats) {
61
+ stats.mergeCommits++;
62
+ }
63
+ else {
64
+ // Merge-only contributor
65
+ contributors.set(name, {
66
+ name,
67
+ commits: 0,
68
+ linesAdded: 0,
69
+ linesRemoved: 0,
70
+ netChange: 0,
71
+ mergeCommits: 1,
72
+ });
73
+ }
74
+ }
75
+ }
76
+ // Compute net change
77
+ for (const stats of contributors.values()) {
78
+ stats.netChange = stats.linesAdded - stats.linesRemoved;
79
+ }
80
+ // Sort by total commits (non-merge + merge) descending
81
+ return Array.from(contributors.values()).sort((a, b) => b.commits + b.mergeCommits - (a.commits + a.mergeCommits));
82
+ }
83
+ // ─── Commit quality ─────────────────────────────────────────────────────────
84
+ const CONVENTIONAL_RE = /^(feat|fix|chore|docs|style|refactor|perf|test|ci|build|revert)(\(.+\))?!?:/i;
85
+ const VAGUE_RE = /^(update|fix|change|wip|tmp|test|minor|misc|stuff|cleanup|tweaks?)$/i;
86
+ function gatherCommitQuality(cwd, since) {
87
+ const messages = (0, runner_1.run)(`git log --format='%s' --no-merges --since='${since}' HEAD 2>/dev/null`, cwd, 30000);
88
+ if (!messages)
89
+ return { conventional: 0, descriptive: 0, vague: 0, total: 0, conventionalPercent: 0 };
90
+ const lines = messages.split('\n').filter((l) => l.trim());
91
+ let conventional = 0;
92
+ let vague = 0;
93
+ for (const msg of lines) {
94
+ if (CONVENTIONAL_RE.test(msg.trim())) {
95
+ conventional++;
96
+ }
97
+ else if (VAGUE_RE.test(msg.trim()) || msg.trim().split(/\s+/).length <= 2) {
98
+ vague++;
99
+ }
100
+ }
101
+ const total = lines.length;
102
+ const descriptive = total - conventional - vague;
103
+ return {
104
+ conventional,
105
+ descriptive,
106
+ vague,
107
+ total,
108
+ conventionalPercent: total > 0 ? Math.round((conventional / total) * 1000) / 10 : 0,
109
+ };
110
+ }
111
+ // ─── Hot files ──────────────────────────────────────────────────────────────
112
+ function gatherHotFiles(cwd, since, top = 15) {
113
+ const raw = (0, runner_1.run)(`git log --name-only --format='' --since='${since}' --no-merges HEAD 2>/dev/null | sort | uniq -c | sort -rn | head -${top}`, cwd, 30000);
114
+ if (!raw)
115
+ return [];
116
+ return raw
117
+ .split('\n')
118
+ .filter((l) => l.trim())
119
+ .map((line) => {
120
+ const m = line.trim().match(/^(\d+)\s+(.+)$/);
121
+ return m ? { path: m[2], changes: parseInt(m[1]) } : null;
122
+ })
123
+ .filter((x) => x !== null && !x.path.includes('package-lock'));
124
+ }
125
+ // ─── Weekly velocity ────────────────────────────────────────────────────────
126
+ function gatherVelocity(cwd, since) {
127
+ const raw = (0, runner_1.run)(`git log --format='%aI' --since='${since}' HEAD 2>/dev/null`, cwd, 30000);
128
+ if (!raw)
129
+ return [];
130
+ const weekCounts = new Map();
131
+ for (const dateStr of raw.split('\n').filter((l) => l.trim())) {
132
+ const date = new Date(dateStr);
133
+ // ISO week: YYYY-Www
134
+ const year = date.getFullYear();
135
+ const jan1 = new Date(year, 0, 1);
136
+ const weekNum = Math.ceil(((date.getTime() - jan1.getTime()) / 86400000 + jan1.getDay() + 1) / 7);
137
+ const week = `${year}-W${String(weekNum).padStart(2, '0')}`;
138
+ weekCounts.set(week, (weekCounts.get(week) || 0) + 1);
139
+ }
140
+ return Array.from(weekCounts.entries())
141
+ .map(([week, commits]) => ({ week, commits }))
142
+ .sort((a, b) => a.week.localeCompare(b.week));
143
+ }
144
+ // ─── Vague commit examples (for detailed report) ──────────────────────────
145
+ const VAGUE_RE_EXPORT = /^(update|fix|change|wip|tmp|test|minor|misc|stuff|cleanup|tweaks?)$/i;
146
+ function gatherVagueCommitExamples(cwd, since, limit = 15) {
147
+ const messages = (0, runner_1.run)(`git log --format='%s' --no-merges --since='${since}' HEAD 2>/dev/null`, cwd, 30000);
148
+ if (!messages)
149
+ return [];
150
+ const vague = [];
151
+ for (const msg of messages.split('\n').filter((l) => l.trim())) {
152
+ const trimmed = msg.trim();
153
+ if (VAGUE_RE_EXPORT.test(trimmed) || trimmed.split(/\s+/).length <= 2) {
154
+ vague.push(trimmed);
155
+ if (vague.length >= limit)
156
+ break;
157
+ }
158
+ }
159
+ return vague;
160
+ }
161
+ // ─── Summary counts ─────────────────────────────────────────────────────────
162
+ function gatherSummary(cwd, since) {
163
+ const total = parseInt((0, runner_1.run)(`git rev-list --count --since='${since}' HEAD 2>/dev/null`, cwd) || '0');
164
+ const merges = parseInt((0, runner_1.run)(`git rev-list --count --merges --since='${since}' HEAD 2>/dev/null`, cwd) || '0');
165
+ return { totalCommits: total, mergeCommits: merges };
166
+ }
167
+ //# sourceMappingURL=gather.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gather.js","sourceRoot":"","sources":["../../../src/analyzers/developer/gather.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import { DevReport } from './types';
2
+ export type { DevReport, ContributorStats, HotFile, CommitQuality, WeeklyVelocity } from './types';
3
+ export interface AnalyzeDevActivityOptions {
4
+ verbose?: boolean;
5
+ }
6
+ export declare function analyzeDevActivity(repoPath: string, since?: string, options?: AnalyzeDevActivityOptions): DevReport;
7
+ export declare function formatDevReport(report: DevReport, elapsed: string): string;
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/analyzers/developer/index.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAEpC,YAAY,EAAE,SAAS,EAAE,gBAAgB,EAAE,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAEnG,MAAM,WAAW,yBAAyB;IACxC,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,MAAM,EAChB,KAAK,CAAC,EAAE,MAAM,EACd,OAAO,GAAE,yBAA8B,GACtC,SAAS,CA0CX;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAyG1E"}