claude-cognitive 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 (196) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +256 -0
  3. package/bin/claude-cognitive.js +9 -0
  4. package/dist/agents/context.d.ts +40 -0
  5. package/dist/agents/context.d.ts.map +1 -0
  6. package/dist/agents/context.js +144 -0
  7. package/dist/agents/context.js.map +1 -0
  8. package/dist/agents/index.d.ts +9 -0
  9. package/dist/agents/index.d.ts.map +1 -0
  10. package/dist/agents/index.js +11 -0
  11. package/dist/agents/index.js.map +1 -0
  12. package/dist/agents/loader.d.ts +48 -0
  13. package/dist/agents/loader.d.ts.map +1 -0
  14. package/dist/agents/loader.js +157 -0
  15. package/dist/agents/loader.js.map +1 -0
  16. package/dist/agents/templates.d.ts +51 -0
  17. package/dist/agents/templates.d.ts.map +1 -0
  18. package/dist/agents/templates.js +186 -0
  19. package/dist/agents/templates.js.map +1 -0
  20. package/dist/agents/types.d.ts +52 -0
  21. package/dist/agents/types.d.ts.map +1 -0
  22. package/dist/agents/types.js +6 -0
  23. package/dist/agents/types.js.map +1 -0
  24. package/dist/cli/commands/config.d.ts +10 -0
  25. package/dist/cli/commands/config.d.ts.map +1 -0
  26. package/dist/cli/commands/config.js +22 -0
  27. package/dist/cli/commands/config.js.map +1 -0
  28. package/dist/cli/commands/index.d.ts +17 -0
  29. package/dist/cli/commands/index.d.ts.map +1 -0
  30. package/dist/cli/commands/index.js +17 -0
  31. package/dist/cli/commands/index.js.map +1 -0
  32. package/dist/cli/commands/init.d.ts +10 -0
  33. package/dist/cli/commands/init.d.ts.map +1 -0
  34. package/dist/cli/commands/init.js +109 -0
  35. package/dist/cli/commands/init.js.map +1 -0
  36. package/dist/cli/commands/install.d.ts +10 -0
  37. package/dist/cli/commands/install.d.ts.map +1 -0
  38. package/dist/cli/commands/install.js +440 -0
  39. package/dist/cli/commands/install.js.map +1 -0
  40. package/dist/cli/commands/learn.d.ts +10 -0
  41. package/dist/cli/commands/learn.d.ts.map +1 -0
  42. package/dist/cli/commands/learn.js +33 -0
  43. package/dist/cli/commands/learn.js.map +1 -0
  44. package/dist/cli/commands/recall.d.ts +10 -0
  45. package/dist/cli/commands/recall.d.ts.map +1 -0
  46. package/dist/cli/commands/recall.js +52 -0
  47. package/dist/cli/commands/recall.js.map +1 -0
  48. package/dist/cli/commands/reflect.d.ts +10 -0
  49. package/dist/cli/commands/reflect.d.ts.map +1 -0
  50. package/dist/cli/commands/reflect.js +48 -0
  51. package/dist/cli/commands/reflect.js.map +1 -0
  52. package/dist/cli/commands/semantic.d.ts +10 -0
  53. package/dist/cli/commands/semantic.d.ts.map +1 -0
  54. package/dist/cli/commands/semantic.js +67 -0
  55. package/dist/cli/commands/semantic.js.map +1 -0
  56. package/dist/cli/commands/serve.d.ts +10 -0
  57. package/dist/cli/commands/serve.d.ts.map +1 -0
  58. package/dist/cli/commands/serve.js +61 -0
  59. package/dist/cli/commands/serve.js.map +1 -0
  60. package/dist/cli/commands/status.d.ts +10 -0
  61. package/dist/cli/commands/status.d.ts.map +1 -0
  62. package/dist/cli/commands/status.js +44 -0
  63. package/dist/cli/commands/status.js.map +1 -0
  64. package/dist/cli/commands/sync.d.ts +10 -0
  65. package/dist/cli/commands/sync.d.ts.map +1 -0
  66. package/dist/cli/commands/sync.js +260 -0
  67. package/dist/cli/commands/sync.js.map +1 -0
  68. package/dist/cli/commands/uninstall.d.ts +10 -0
  69. package/dist/cli/commands/uninstall.d.ts.map +1 -0
  70. package/dist/cli/commands/uninstall.js +205 -0
  71. package/dist/cli/commands/uninstall.js.map +1 -0
  72. package/dist/cli/commands/update-bank.d.ts +10 -0
  73. package/dist/cli/commands/update-bank.d.ts.map +1 -0
  74. package/dist/cli/commands/update-bank.js +129 -0
  75. package/dist/cli/commands/update-bank.js.map +1 -0
  76. package/dist/cli/index.d.ts +6 -0
  77. package/dist/cli/index.d.ts.map +1 -0
  78. package/dist/cli/index.js +56 -0
  79. package/dist/cli/index.js.map +1 -0
  80. package/dist/cli/utils/errors.d.ts +42 -0
  81. package/dist/cli/utils/errors.d.ts.map +1 -0
  82. package/dist/cli/utils/errors.js +78 -0
  83. package/dist/cli/utils/errors.js.map +1 -0
  84. package/dist/cli/utils/index.d.ts +9 -0
  85. package/dist/cli/utils/index.d.ts.map +1 -0
  86. package/dist/cli/utils/index.js +7 -0
  87. package/dist/cli/utils/index.js.map +1 -0
  88. package/dist/cli/utils/output.d.ts +90 -0
  89. package/dist/cli/utils/output.d.ts.map +1 -0
  90. package/dist/cli/utils/output.js +164 -0
  91. package/dist/cli/utils/output.js.map +1 -0
  92. package/dist/client.d.ts +200 -0
  93. package/dist/client.d.ts.map +1 -0
  94. package/dist/client.js +447 -0
  95. package/dist/client.js.map +1 -0
  96. package/dist/config.d.ts +44 -0
  97. package/dist/config.d.ts.map +1 -0
  98. package/dist/config.js +264 -0
  99. package/dist/config.js.map +1 -0
  100. package/dist/errors.d.ts +72 -0
  101. package/dist/errors.d.ts.map +1 -0
  102. package/dist/errors.js +188 -0
  103. package/dist/errors.js.map +1 -0
  104. package/dist/events.d.ts +148 -0
  105. package/dist/events.d.ts.map +1 -0
  106. package/dist/events.js +115 -0
  107. package/dist/events.js.map +1 -0
  108. package/dist/hooks/index.d.ts +7 -0
  109. package/dist/hooks/index.d.ts.map +1 -0
  110. package/dist/hooks/index.js +7 -0
  111. package/dist/hooks/index.js.map +1 -0
  112. package/dist/hooks/inject-context.d.ts +18 -0
  113. package/dist/hooks/inject-context.d.ts.map +1 -0
  114. package/dist/hooks/inject-context.js +57 -0
  115. package/dist/hooks/inject-context.js.map +1 -0
  116. package/dist/hooks/process-session.d.ts +18 -0
  117. package/dist/hooks/process-session.d.ts.map +1 -0
  118. package/dist/hooks/process-session.js +119 -0
  119. package/dist/hooks/process-session.js.map +1 -0
  120. package/dist/index.d.ts +63 -0
  121. package/dist/index.d.ts.map +1 -0
  122. package/dist/index.js +59 -0
  123. package/dist/index.js.map +1 -0
  124. package/dist/learn/analyzers/git.d.ts +62 -0
  125. package/dist/learn/analyzers/git.d.ts.map +1 -0
  126. package/dist/learn/analyzers/git.js +183 -0
  127. package/dist/learn/analyzers/git.js.map +1 -0
  128. package/dist/learn/analyzers/index.d.ts +15 -0
  129. package/dist/learn/analyzers/index.d.ts.map +1 -0
  130. package/dist/learn/analyzers/index.js +10 -0
  131. package/dist/learn/analyzers/index.js.map +1 -0
  132. package/dist/learn/analyzers/package.d.ts +57 -0
  133. package/dist/learn/analyzers/package.d.ts.map +1 -0
  134. package/dist/learn/analyzers/package.js +245 -0
  135. package/dist/learn/analyzers/package.js.map +1 -0
  136. package/dist/learn/analyzers/readme.d.ts +27 -0
  137. package/dist/learn/analyzers/readme.d.ts.map +1 -0
  138. package/dist/learn/analyzers/readme.js +163 -0
  139. package/dist/learn/analyzers/readme.js.map +1 -0
  140. package/dist/learn/analyzers/source.d.ts +70 -0
  141. package/dist/learn/analyzers/source.d.ts.map +1 -0
  142. package/dist/learn/analyzers/source.js +231 -0
  143. package/dist/learn/analyzers/source.js.map +1 -0
  144. package/dist/learn/analyzers/structure.d.ts +39 -0
  145. package/dist/learn/analyzers/structure.d.ts.map +1 -0
  146. package/dist/learn/analyzers/structure.js +172 -0
  147. package/dist/learn/analyzers/structure.js.map +1 -0
  148. package/dist/learn/extractor.d.ts +76 -0
  149. package/dist/learn/extractor.d.ts.map +1 -0
  150. package/dist/learn/extractor.js +302 -0
  151. package/dist/learn/extractor.js.map +1 -0
  152. package/dist/learn/index.d.ts +31 -0
  153. package/dist/learn/index.d.ts.map +1 -0
  154. package/dist/learn/index.js +165 -0
  155. package/dist/learn/index.js.map +1 -0
  156. package/dist/mcp/handlers.d.ts +23 -0
  157. package/dist/mcp/handlers.d.ts.map +1 -0
  158. package/dist/mcp/handlers.js +124 -0
  159. package/dist/mcp/handlers.js.map +1 -0
  160. package/dist/mcp/index.d.ts +32 -0
  161. package/dist/mcp/index.d.ts.map +1 -0
  162. package/dist/mcp/index.js +40 -0
  163. package/dist/mcp/index.js.map +1 -0
  164. package/dist/mcp/server.d.ts +79 -0
  165. package/dist/mcp/server.d.ts.map +1 -0
  166. package/dist/mcp/server.js +277 -0
  167. package/dist/mcp/server.js.map +1 -0
  168. package/dist/mcp/tools.d.ts +59 -0
  169. package/dist/mcp/tools.d.ts.map +1 -0
  170. package/dist/mcp/tools.js +43 -0
  171. package/dist/mcp/tools.js.map +1 -0
  172. package/dist/mcp/types.d.ts +65 -0
  173. package/dist/mcp/types.d.ts.map +1 -0
  174. package/dist/mcp/types.js +6 -0
  175. package/dist/mcp/types.js.map +1 -0
  176. package/dist/mind.d.ts +250 -0
  177. package/dist/mind.d.ts.map +1 -0
  178. package/dist/mind.js +637 -0
  179. package/dist/mind.js.map +1 -0
  180. package/dist/promotion.d.ts +112 -0
  181. package/dist/promotion.d.ts.map +1 -0
  182. package/dist/promotion.js +196 -0
  183. package/dist/promotion.js.map +1 -0
  184. package/dist/retry.d.ts +70 -0
  185. package/dist/retry.d.ts.map +1 -0
  186. package/dist/retry.js +122 -0
  187. package/dist/retry.js.map +1 -0
  188. package/dist/semantic.d.ts +202 -0
  189. package/dist/semantic.d.ts.map +1 -0
  190. package/dist/semantic.js +424 -0
  191. package/dist/semantic.js.map +1 -0
  192. package/dist/types.d.ts +363 -0
  193. package/dist/types.d.ts.map +1 -0
  194. package/dist/types.js +30 -0
  195. package/dist/types.js.map +1 -0
  196. package/package.json +70 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAEH,cAAc;AACd,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAE9C,oBAAoB;AACpB,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,eAAe;AACf,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAGhD,kBAAkB;AAClB,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAGjE,YAAY;AACZ,OAAO,EACL,gBAAgB,EAChB,2BAA2B,EAC3B,oBAAoB,EACpB,aAAa,GACd,MAAM,gBAAgB,CAAC;AAGxB,kBAAkB;AAClB,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAEzC,kBAAkB;AAClB,OAAO,EACL,kBAAkB,EAClB,kBAAkB,EAClB,sBAAsB,EACtB,cAAc,GACf,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACzE,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAEvE,gBAAgB;AAChB,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAE3D,iBAAiB;AACjB,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAE7C,kBAAkB;AAClB,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAkCxD,sBAAsB;AACtB,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAiBhD,aAAa;AACb,OAAO,EAAE,mBAAmB,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACtE,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1,62 @@
1
+ /**
2
+ * Git history analyzer.
3
+ * @module learn/analyzers/git
4
+ */
5
+ /**
6
+ * Information about a significant commit.
7
+ */
8
+ export interface SignificantCommit {
9
+ /** Commit hash (short) */
10
+ hash: string;
11
+ /** Commit message (first line) */
12
+ message: string;
13
+ /** Commit date (ISO format) */
14
+ date: string;
15
+ /** Number of files changed */
16
+ filesChanged: number;
17
+ }
18
+ /**
19
+ * File hotspot information.
20
+ */
21
+ export interface FileHotspot {
22
+ /** File path */
23
+ file: string;
24
+ /** Number of times changed */
25
+ changeCount: number;
26
+ }
27
+ /**
28
+ * Analysis result from git history.
29
+ */
30
+ export interface GitAnalysis {
31
+ /** Total commits analyzed */
32
+ totalCommits: number;
33
+ /** Unique contributors */
34
+ contributors: string[];
35
+ /** Significant commits (refactors, major features) */
36
+ significantCommits: SignificantCommit[];
37
+ /** Most frequently changed files */
38
+ hotspots: FileHotspot[];
39
+ /** Commit message patterns */
40
+ commitPatterns: {
41
+ /** Average commits per day (over analyzed period) */
42
+ avgCommitsPerDay: number;
43
+ /** Detected commit message convention */
44
+ messageConvention?: string;
45
+ };
46
+ }
47
+ /**
48
+ * Analyze git history of a project.
49
+ *
50
+ * @param projectPath - Project root directory
51
+ * @param maxCommits - Maximum commits to analyze
52
+ * @returns Git analysis, or null if not a git repository
53
+ */
54
+ export declare function analyzeGitHistory(projectPath: string, maxCommits?: number): Promise<GitAnalysis | null>;
55
+ /**
56
+ * Get a summary of git history.
57
+ *
58
+ * @param analysis - Git analysis result
59
+ * @returns Human-readable git summary
60
+ */
61
+ export declare function getGitSummary(analysis: GitAnalysis): string;
62
+ //# sourceMappingURL=git.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git.d.ts","sourceRoot":"","sources":["../../../src/learn/analyzers/git.ts"],"names":[],"mappings":"AAAA;;;GAGG;AASH;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,0BAA0B;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,kCAAkC;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,+BAA+B;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,8BAA8B;IAC9B,YAAY,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,gBAAgB;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,8BAA8B;IAC9B,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,6BAA6B;IAC7B,YAAY,EAAE,MAAM,CAAC;IACrB,0BAA0B;IAC1B,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,sDAAsD;IACtD,kBAAkB,EAAE,iBAAiB,EAAE,CAAC;IACxC,oCAAoC;IACpC,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,8BAA8B;IAC9B,cAAc,EAAE;QACd,qDAAqD;QACrD,gBAAgB,EAAE,MAAM,CAAC;QACzB,yCAAyC;QACzC,iBAAiB,CAAC,EAAE,MAAM,CAAC;KAC5B,CAAC;CACH;AAqBD;;;;;;GAMG;AACH,wBAAsB,iBAAiB,CACrC,WAAW,EAAE,MAAM,EACnB,UAAU,GAAE,MAAY,GACvB,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,CA4C7B;AA+HD;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,WAAW,GAAG,MAAM,CAkB3D"}
@@ -0,0 +1,183 @@
1
+ /**
2
+ * Git history analyzer.
3
+ * @module learn/analyzers/git
4
+ */
5
+ import { exec } from "node:child_process";
6
+ import { promisify } from "node:util";
7
+ import { stat } from "node:fs/promises";
8
+ import { join } from "node:path";
9
+ const execAsync = promisify(exec);
10
+ /** Keywords indicating significant commits */
11
+ const SIGNIFICANT_KEYWORDS = [
12
+ "refactor",
13
+ "migrate",
14
+ "switch",
15
+ "replace",
16
+ "introduce",
17
+ "add support",
18
+ "remove",
19
+ "deprecate",
20
+ "breaking",
21
+ "major",
22
+ "rewrite",
23
+ "redesign",
24
+ "upgrade",
25
+ "initial",
26
+ "setup",
27
+ ];
28
+ /**
29
+ * Analyze git history of a project.
30
+ *
31
+ * @param projectPath - Project root directory
32
+ * @param maxCommits - Maximum commits to analyze
33
+ * @returns Git analysis, or null if not a git repository
34
+ */
35
+ export async function analyzeGitHistory(projectPath, maxCommits = 100) {
36
+ // Check if .git exists
37
+ try {
38
+ await stat(join(projectPath, ".git"));
39
+ }
40
+ catch {
41
+ return null; // Not a git repository
42
+ }
43
+ try {
44
+ // Get commit log
45
+ const { stdout: logOutput } = await execAsync(`git log --oneline --format="%h|%s|%ad|%an" --date=short -n ${maxCommits}`, { cwd: projectPath, maxBuffer: 10 * 1024 * 1024 });
46
+ const commits = parseCommitLog(logOutput);
47
+ // Get file change counts
48
+ const { stdout: statOutput } = await execAsync(`git log --oneline --name-only -n ${maxCommits}`, { cwd: projectPath, maxBuffer: 10 * 1024 * 1024 });
49
+ const hotspots = parseFileHotspots(statOutput);
50
+ // Calculate patterns
51
+ const commitPatterns = analyzeCommitPatterns(commits);
52
+ // Find significant commits
53
+ const significantCommits = findSignificantCommits(commits);
54
+ // Get unique contributors
55
+ const contributors = [...new Set(commits.map((c) => c.author))];
56
+ return {
57
+ totalCommits: commits.length,
58
+ contributors,
59
+ significantCommits,
60
+ hotspots: hotspots.slice(0, 20), // Top 20 hotspots
61
+ commitPatterns,
62
+ };
63
+ }
64
+ catch {
65
+ return null; // Git command failed
66
+ }
67
+ }
68
+ function parseCommitLog(output) {
69
+ return output
70
+ .trim()
71
+ .split("\n")
72
+ .filter(Boolean)
73
+ .map((line) => {
74
+ const parts = line.split("|");
75
+ return {
76
+ hash: parts[0] ?? "",
77
+ message: parts[1] ?? "",
78
+ date: parts[2] ?? "",
79
+ author: parts[3] ?? "",
80
+ };
81
+ })
82
+ .filter((c) => c.hash && c.message);
83
+ }
84
+ /**
85
+ * Parse file hotspots from git log output.
86
+ * @internal
87
+ */
88
+ function parseFileHotspots(output) {
89
+ const fileCounts = {};
90
+ const lines = output.split("\n");
91
+ for (const line of lines) {
92
+ // Skip commit lines (they start with commit hash)
93
+ if (!line.trim() || /^[a-f0-9]{7,}/.test(line))
94
+ continue;
95
+ // This is a file path
96
+ const file = line.trim();
97
+ if (file) {
98
+ fileCounts[file] = (fileCounts[file] || 0) + 1;
99
+ }
100
+ }
101
+ return Object.entries(fileCounts)
102
+ .map(([file, changeCount]) => ({ file, changeCount }))
103
+ .sort((a, b) => b.changeCount - a.changeCount);
104
+ }
105
+ /**
106
+ * Analyze commit message patterns.
107
+ * @internal
108
+ */
109
+ function analyzeCommitPatterns(commits) {
110
+ if (commits.length === 0) {
111
+ return { avgCommitsPerDay: 0 };
112
+ }
113
+ // Calculate average commits per day
114
+ const dates = commits.map((c) => c.date);
115
+ const uniqueDays = new Set(dates).size;
116
+ const avgCommitsPerDay = commits.length / Math.max(uniqueDays, 1);
117
+ // Detect commit message convention
118
+ const messageConvention = detectConvention(commits.map((c) => c.message));
119
+ const result = { avgCommitsPerDay };
120
+ if (messageConvention) {
121
+ result.messageConvention = messageConvention;
122
+ }
123
+ return result;
124
+ }
125
+ /**
126
+ * Detect commit message convention.
127
+ * @internal
128
+ */
129
+ function detectConvention(messages) {
130
+ // Conventional commits pattern: type(scope): message
131
+ const conventionalPattern = /^(feat|fix|docs|style|refactor|test|chore)(\([^)]+\))?:/;
132
+ const conventionalCount = messages.filter((m) => conventionalPattern.test(m)).length;
133
+ if (conventionalCount > messages.length * 0.5) {
134
+ return "Conventional Commits";
135
+ }
136
+ // Gitmoji pattern: starts with emoji
137
+ const emojiPattern = /^[\u{1F300}-\u{1F9FF}]|^:[a-z_]+:/u;
138
+ const emojiCount = messages.filter((m) => emojiPattern.test(m)).length;
139
+ if (emojiCount > messages.length * 0.3) {
140
+ return "Gitmoji";
141
+ }
142
+ return undefined;
143
+ }
144
+ /**
145
+ * Find significant commits (refactors, major changes).
146
+ * @internal
147
+ */
148
+ function findSignificantCommits(commits) {
149
+ return commits
150
+ .filter((c) => {
151
+ const msgLower = c.message.toLowerCase();
152
+ return SIGNIFICANT_KEYWORDS.some((kw) => msgLower.includes(kw));
153
+ })
154
+ .slice(0, 10) // Top 10 significant commits
155
+ .map((c) => ({
156
+ hash: c.hash,
157
+ message: c.message,
158
+ date: c.date,
159
+ filesChanged: 0, // Would need additional git call to get this
160
+ }));
161
+ }
162
+ /**
163
+ * Get a summary of git history.
164
+ *
165
+ * @param analysis - Git analysis result
166
+ * @returns Human-readable git summary
167
+ */
168
+ export function getGitSummary(analysis) {
169
+ const parts = [];
170
+ parts.push(`${analysis.totalCommits} commits by ${analysis.contributors.length} contributors`);
171
+ if (analysis.commitPatterns.messageConvention) {
172
+ parts.push(`Convention: ${analysis.commitPatterns.messageConvention}`);
173
+ }
174
+ if (analysis.hotspots.length > 0) {
175
+ const topHotspots = analysis.hotspots
176
+ .slice(0, 3)
177
+ .map((h) => h.file)
178
+ .join(", ");
179
+ parts.push(`Hotspots: ${topHotspots}`);
180
+ }
181
+ return parts.join("; ");
182
+ }
183
+ //# sourceMappingURL=git.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git.js","sourceRoot":"","sources":["../../../src/learn/analyzers/git.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Analyzer exports.
3
+ * @module learn/analyzers
4
+ */
5
+ export { analyzeReadme } from "./readme.js";
6
+ export type { ReadmeAnalysis } from "./readme.js";
7
+ export { analyzePackage, getTechStackSummary } from "./package.js";
8
+ export type { PackageAnalysis, DependencyInfo, DependencyCategory } from "./package.js";
9
+ export { analyzeStructure, getStructureSummary } from "./structure.js";
10
+ export type { StructureAnalysis } from "./structure.js";
11
+ export { analyzeGitHistory, getGitSummary } from "./git.js";
12
+ export type { GitAnalysis, SignificantCommit, FileHotspot } from "./git.js";
13
+ export { analyzeSource, getSourceSummary } from "./source.js";
14
+ export type { SourceAnalysis, CodePattern, ModuleInfo, CodingConventions } from "./source.js";
15
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/learn/analyzers/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,YAAY,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAElD,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACnE,YAAY,EAAE,eAAe,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAExF,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AACvE,YAAY,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAExD,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAC5D,YAAY,EAAE,WAAW,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAE5E,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC9D,YAAY,EAAE,cAAc,EAAE,WAAW,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Analyzer exports.
3
+ * @module learn/analyzers
4
+ */
5
+ export { analyzeReadme } from "./readme.js";
6
+ export { analyzePackage, getTechStackSummary } from "./package.js";
7
+ export { analyzeStructure, getStructureSummary } from "./structure.js";
8
+ export { analyzeGitHistory, getGitSummary } from "./git.js";
9
+ export { analyzeSource, getSourceSummary } from "./source.js";
10
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/learn/analyzers/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAG5C,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAGnE,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAGvE,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAG5D,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC"}
@@ -0,0 +1,57 @@
1
+ /**
2
+ * Package.json analyzer.
3
+ * @module learn/analyzers/package
4
+ */
5
+ /**
6
+ * Categorized dependency information.
7
+ */
8
+ export interface DependencyInfo {
9
+ /** Package name */
10
+ name: string;
11
+ /** Version string */
12
+ version: string;
13
+ /** Inferred category */
14
+ category: DependencyCategory;
15
+ }
16
+ /**
17
+ * Categories for dependencies.
18
+ */
19
+ export type DependencyCategory = "framework" | "ui" | "state" | "testing" | "build" | "utility" | "database" | "api" | "other";
20
+ /**
21
+ * Analysis result from package.json.
22
+ */
23
+ export interface PackageAnalysis {
24
+ /** Package name */
25
+ name: string;
26
+ /** Package description */
27
+ description?: string;
28
+ /** Package version */
29
+ version?: string;
30
+ /** Available scripts */
31
+ scripts: Record<string, string>;
32
+ /** Production dependencies */
33
+ dependencies: DependencyInfo[];
34
+ /** Development dependencies */
35
+ devDependencies: DependencyInfo[];
36
+ /** Node engine requirements */
37
+ engines?: Record<string, string>;
38
+ /** Main entry point */
39
+ main?: string;
40
+ /** Module type */
41
+ type?: string;
42
+ }
43
+ /**
44
+ * Analyze package.json in a project.
45
+ *
46
+ * @param projectPath - Project root directory
47
+ * @returns Package analysis, or null if no package.json found
48
+ */
49
+ export declare function analyzePackage(projectPath: string): Promise<PackageAnalysis | null>;
50
+ /**
51
+ * Get a summary of the tech stack from package analysis.
52
+ *
53
+ * @param analysis - Package analysis result
54
+ * @returns Human-readable tech stack summary
55
+ */
56
+ export declare function getTechStackSummary(analysis: PackageAnalysis): string;
57
+ //# sourceMappingURL=package.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"package.d.ts","sourceRoot":"","sources":["../../../src/learn/analyzers/package.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,mBAAmB;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,qBAAqB;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,wBAAwB;IACxB,QAAQ,EAAE,kBAAkB,CAAC;CAC9B;AAED;;GAEG;AACH,MAAM,MAAM,kBAAkB,GAC1B,WAAW,GACX,IAAI,GACJ,OAAO,GACP,SAAS,GACT,OAAO,GACP,SAAS,GACT,UAAU,GACV,KAAK,GACL,OAAO,CAAC;AAEZ;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,mBAAmB;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,0BAA0B;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,sBAAsB;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,wBAAwB;IACxB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,8BAA8B;IAC9B,YAAY,EAAE,cAAc,EAAE,CAAC;IAC/B,+BAA+B;IAC/B,eAAe,EAAE,cAAc,EAAE,CAAC;IAClC,+BAA+B;IAC/B,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,uBAAuB;IACvB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,kBAAkB;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AA0FD;;;;;GAKG;AACH,wBAAsB,cAAc,CAClC,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CAiCjC;AAiFD;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,eAAe,GAAG,MAAM,CA4CrE"}
@@ -0,0 +1,245 @@
1
+ /**
2
+ * Package.json analyzer.
3
+ * @module learn/analyzers/package
4
+ */
5
+ import { readFile } from "node:fs/promises";
6
+ import { join } from "node:path";
7
+ /** Known framework packages */
8
+ const FRAMEWORKS = new Set([
9
+ "react",
10
+ "vue",
11
+ "angular",
12
+ "svelte",
13
+ "next",
14
+ "nuxt",
15
+ "express",
16
+ "fastify",
17
+ "koa",
18
+ "nest",
19
+ "expo",
20
+ "react-native",
21
+ ]);
22
+ /** Known UI packages */
23
+ const UI_PACKAGES = new Set([
24
+ "tailwindcss",
25
+ "styled-components",
26
+ "emotion",
27
+ "@mui/material",
28
+ "antd",
29
+ "chakra-ui",
30
+ "nativewind",
31
+ "bootstrap",
32
+ ]);
33
+ /** Known state management */
34
+ const STATE_PACKAGES = new Set([
35
+ "redux",
36
+ "zustand",
37
+ "mobx",
38
+ "recoil",
39
+ "jotai",
40
+ "valtio",
41
+ "@tanstack/react-query",
42
+ "swr",
43
+ ]);
44
+ /** Known testing packages */
45
+ const TESTING_PACKAGES = new Set([
46
+ "jest",
47
+ "vitest",
48
+ "mocha",
49
+ "chai",
50
+ "cypress",
51
+ "playwright",
52
+ "@testing-library",
53
+ ]);
54
+ /** Known build tools */
55
+ const BUILD_PACKAGES = new Set([
56
+ "typescript",
57
+ "webpack",
58
+ "vite",
59
+ "esbuild",
60
+ "rollup",
61
+ "parcel",
62
+ "babel",
63
+ "prettier",
64
+ "eslint",
65
+ ]);
66
+ /** Known database/ORM packages */
67
+ const DATABASE_PACKAGES = new Set([
68
+ "prisma",
69
+ "drizzle-orm",
70
+ "typeorm",
71
+ "sequelize",
72
+ "mongoose",
73
+ "pg",
74
+ "mysql",
75
+ "sqlite",
76
+ "@supabase/supabase-js",
77
+ ]);
78
+ /** Known API packages */
79
+ const API_PACKAGES = new Set([
80
+ "axios",
81
+ "node-fetch",
82
+ "graphql",
83
+ "apollo",
84
+ "trpc",
85
+ "openapi",
86
+ "swagger",
87
+ ]);
88
+ /**
89
+ * Analyze package.json in a project.
90
+ *
91
+ * @param projectPath - Project root directory
92
+ * @returns Package analysis, or null if no package.json found
93
+ */
94
+ export async function analyzePackage(projectPath) {
95
+ try {
96
+ const content = await readFile(join(projectPath, "package.json"), "utf-8");
97
+ const pkg = JSON.parse(content);
98
+ // Build result with required fields
99
+ const result = {
100
+ name: getString(pkg, "name") ?? "unknown",
101
+ scripts: getScripts(pkg),
102
+ dependencies: parseDependencies(getRecord(pkg, "dependencies")),
103
+ devDependencies: parseDependencies(getRecord(pkg, "devDependencies")),
104
+ };
105
+ // Add optional fields only if they have values
106
+ const description = getString(pkg, "description");
107
+ if (description)
108
+ result.description = description;
109
+ const version = getString(pkg, "version");
110
+ if (version)
111
+ result.version = version;
112
+ const engines = getRecord(pkg, "engines");
113
+ if (engines)
114
+ result.engines = engines;
115
+ const main = getString(pkg, "main");
116
+ if (main)
117
+ result.main = main;
118
+ const type = getString(pkg, "type");
119
+ if (type)
120
+ result.type = type;
121
+ return result;
122
+ }
123
+ catch {
124
+ return null;
125
+ }
126
+ }
127
+ /**
128
+ * Get string value from object.
129
+ * @internal
130
+ */
131
+ function getString(obj, key) {
132
+ const value = obj[key];
133
+ return typeof value === "string" ? value : undefined;
134
+ }
135
+ /**
136
+ * Get record value from object.
137
+ * @internal
138
+ */
139
+ function getRecord(obj, key) {
140
+ const value = obj[key];
141
+ return typeof value === "object" && value !== null
142
+ ? value
143
+ : undefined;
144
+ }
145
+ /**
146
+ * Get scripts object.
147
+ * @internal
148
+ */
149
+ function getScripts(pkg) {
150
+ const scripts = pkg["scripts"];
151
+ if (typeof scripts !== "object" || scripts === null) {
152
+ return {};
153
+ }
154
+ return scripts;
155
+ }
156
+ /**
157
+ * Parse dependencies into categorized format.
158
+ * @internal
159
+ */
160
+ function parseDependencies(deps) {
161
+ if (!deps)
162
+ return [];
163
+ return Object.entries(deps).map(([name, version]) => ({
164
+ name,
165
+ version,
166
+ category: categorizeDependency(name),
167
+ }));
168
+ }
169
+ /**
170
+ * Categorize a dependency by its name.
171
+ * @internal
172
+ */
173
+ function categorizeDependency(name) {
174
+ // Check exact matches first
175
+ if (FRAMEWORKS.has(name))
176
+ return "framework";
177
+ if (UI_PACKAGES.has(name))
178
+ return "ui";
179
+ if (STATE_PACKAGES.has(name))
180
+ return "state";
181
+ if (TESTING_PACKAGES.has(name))
182
+ return "testing";
183
+ if (BUILD_PACKAGES.has(name))
184
+ return "build";
185
+ if (DATABASE_PACKAGES.has(name))
186
+ return "database";
187
+ if (API_PACKAGES.has(name))
188
+ return "api";
189
+ // Check partial matches for scoped packages
190
+ if (name.includes("react") || name.includes("vue") || name.includes("angular")) {
191
+ return "framework";
192
+ }
193
+ if (name.includes("test") || name.includes("spec")) {
194
+ return "testing";
195
+ }
196
+ if (name.includes("lint") || name.includes("format")) {
197
+ return "build";
198
+ }
199
+ return "other";
200
+ }
201
+ /**
202
+ * Get a summary of the tech stack from package analysis.
203
+ *
204
+ * @param analysis - Package analysis result
205
+ * @returns Human-readable tech stack summary
206
+ */
207
+ export function getTechStackSummary(analysis) {
208
+ const parts = [];
209
+ // Find frameworks
210
+ const frameworks = analysis.dependencies
211
+ .filter((d) => d.category === "framework")
212
+ .map((d) => d.name);
213
+ if (frameworks.length > 0) {
214
+ parts.push(`Framework: ${frameworks.join(", ")}`);
215
+ }
216
+ // Find UI libraries
217
+ const ui = analysis.dependencies
218
+ .filter((d) => d.category === "ui")
219
+ .map((d) => d.name);
220
+ if (ui.length > 0) {
221
+ parts.push(`UI: ${ui.join(", ")}`);
222
+ }
223
+ // Find state management
224
+ const state = analysis.dependencies
225
+ .filter((d) => d.category === "state")
226
+ .map((d) => d.name);
227
+ if (state.length > 0) {
228
+ parts.push(`State: ${state.join(", ")}`);
229
+ }
230
+ // Find database/ORM
231
+ const db = analysis.dependencies
232
+ .filter((d) => d.category === "database")
233
+ .map((d) => d.name);
234
+ if (db.length > 0) {
235
+ parts.push(`Database: ${db.join(", ")}`);
236
+ }
237
+ // Check for TypeScript
238
+ const hasTypeScript = analysis.devDependencies.some((d) => d.name === "typescript") ||
239
+ analysis.dependencies.some((d) => d.name === "typescript");
240
+ if (hasTypeScript) {
241
+ parts.push("Language: TypeScript");
242
+ }
243
+ return parts.join("; ");
244
+ }
245
+ //# sourceMappingURL=package.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"package.js","sourceRoot":"","sources":["../../../src/learn/analyzers/package.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * README file analyzer.
3
+ * @module learn/analyzers/readme
4
+ */
5
+ /**
6
+ * Analysis result from README file.
7
+ */
8
+ export interface ReadmeAnalysis {
9
+ /** Project description from README */
10
+ projectDescription: string;
11
+ /** Setup/installation instructions found */
12
+ setupInstructions: string[];
13
+ /** Features or capabilities listed */
14
+ features: string[];
15
+ /** Links to additional documentation */
16
+ documentation: string[];
17
+ /** The raw README content */
18
+ rawContent: string;
19
+ }
20
+ /**
21
+ * Analyze README file in a project.
22
+ *
23
+ * @param projectPath - Project root directory
24
+ * @returns README analysis, or null if no README found
25
+ */
26
+ export declare function analyzeReadme(projectPath: string): Promise<ReadmeAnalysis | null>;
27
+ //# sourceMappingURL=readme.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"readme.d.ts","sourceRoot":"","sources":["../../../src/learn/analyzers/readme.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,sCAAsC;IACtC,kBAAkB,EAAE,MAAM,CAAC;IAC3B,4CAA4C;IAC5C,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,sCAAsC;IACtC,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,wCAAwC;IACxC,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,6BAA6B;IAC7B,UAAU,EAAE,MAAM,CAAC;CACpB;AAWD;;;;;GAKG;AACH,wBAAsB,aAAa,CACjC,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CAsBhC"}