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.
- package/LICENSE +21 -0
- package/README.md +256 -0
- package/bin/claude-cognitive.js +9 -0
- package/dist/agents/context.d.ts +40 -0
- package/dist/agents/context.d.ts.map +1 -0
- package/dist/agents/context.js +144 -0
- package/dist/agents/context.js.map +1 -0
- package/dist/agents/index.d.ts +9 -0
- package/dist/agents/index.d.ts.map +1 -0
- package/dist/agents/index.js +11 -0
- package/dist/agents/index.js.map +1 -0
- package/dist/agents/loader.d.ts +48 -0
- package/dist/agents/loader.d.ts.map +1 -0
- package/dist/agents/loader.js +157 -0
- package/dist/agents/loader.js.map +1 -0
- package/dist/agents/templates.d.ts +51 -0
- package/dist/agents/templates.d.ts.map +1 -0
- package/dist/agents/templates.js +186 -0
- package/dist/agents/templates.js.map +1 -0
- package/dist/agents/types.d.ts +52 -0
- package/dist/agents/types.d.ts.map +1 -0
- package/dist/agents/types.js +6 -0
- package/dist/agents/types.js.map +1 -0
- package/dist/cli/commands/config.d.ts +10 -0
- package/dist/cli/commands/config.d.ts.map +1 -0
- package/dist/cli/commands/config.js +22 -0
- package/dist/cli/commands/config.js.map +1 -0
- package/dist/cli/commands/index.d.ts +17 -0
- package/dist/cli/commands/index.d.ts.map +1 -0
- package/dist/cli/commands/index.js +17 -0
- package/dist/cli/commands/index.js.map +1 -0
- package/dist/cli/commands/init.d.ts +10 -0
- package/dist/cli/commands/init.d.ts.map +1 -0
- package/dist/cli/commands/init.js +109 -0
- package/dist/cli/commands/init.js.map +1 -0
- package/dist/cli/commands/install.d.ts +10 -0
- package/dist/cli/commands/install.d.ts.map +1 -0
- package/dist/cli/commands/install.js +440 -0
- package/dist/cli/commands/install.js.map +1 -0
- package/dist/cli/commands/learn.d.ts +10 -0
- package/dist/cli/commands/learn.d.ts.map +1 -0
- package/dist/cli/commands/learn.js +33 -0
- package/dist/cli/commands/learn.js.map +1 -0
- package/dist/cli/commands/recall.d.ts +10 -0
- package/dist/cli/commands/recall.d.ts.map +1 -0
- package/dist/cli/commands/recall.js +52 -0
- package/dist/cli/commands/recall.js.map +1 -0
- package/dist/cli/commands/reflect.d.ts +10 -0
- package/dist/cli/commands/reflect.d.ts.map +1 -0
- package/dist/cli/commands/reflect.js +48 -0
- package/dist/cli/commands/reflect.js.map +1 -0
- package/dist/cli/commands/semantic.d.ts +10 -0
- package/dist/cli/commands/semantic.d.ts.map +1 -0
- package/dist/cli/commands/semantic.js +67 -0
- package/dist/cli/commands/semantic.js.map +1 -0
- package/dist/cli/commands/serve.d.ts +10 -0
- package/dist/cli/commands/serve.d.ts.map +1 -0
- package/dist/cli/commands/serve.js +61 -0
- package/dist/cli/commands/serve.js.map +1 -0
- package/dist/cli/commands/status.d.ts +10 -0
- package/dist/cli/commands/status.d.ts.map +1 -0
- package/dist/cli/commands/status.js +44 -0
- package/dist/cli/commands/status.js.map +1 -0
- package/dist/cli/commands/sync.d.ts +10 -0
- package/dist/cli/commands/sync.d.ts.map +1 -0
- package/dist/cli/commands/sync.js +260 -0
- package/dist/cli/commands/sync.js.map +1 -0
- package/dist/cli/commands/uninstall.d.ts +10 -0
- package/dist/cli/commands/uninstall.d.ts.map +1 -0
- package/dist/cli/commands/uninstall.js +205 -0
- package/dist/cli/commands/uninstall.js.map +1 -0
- package/dist/cli/commands/update-bank.d.ts +10 -0
- package/dist/cli/commands/update-bank.d.ts.map +1 -0
- package/dist/cli/commands/update-bank.js +129 -0
- package/dist/cli/commands/update-bank.js.map +1 -0
- package/dist/cli/index.d.ts +6 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +56 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/utils/errors.d.ts +42 -0
- package/dist/cli/utils/errors.d.ts.map +1 -0
- package/dist/cli/utils/errors.js +78 -0
- package/dist/cli/utils/errors.js.map +1 -0
- package/dist/cli/utils/index.d.ts +9 -0
- package/dist/cli/utils/index.d.ts.map +1 -0
- package/dist/cli/utils/index.js +7 -0
- package/dist/cli/utils/index.js.map +1 -0
- package/dist/cli/utils/output.d.ts +90 -0
- package/dist/cli/utils/output.d.ts.map +1 -0
- package/dist/cli/utils/output.js +164 -0
- package/dist/cli/utils/output.js.map +1 -0
- package/dist/client.d.ts +200 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +447 -0
- package/dist/client.js.map +1 -0
- package/dist/config.d.ts +44 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +264 -0
- package/dist/config.js.map +1 -0
- package/dist/errors.d.ts +72 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +188 -0
- package/dist/errors.js.map +1 -0
- package/dist/events.d.ts +148 -0
- package/dist/events.d.ts.map +1 -0
- package/dist/events.js +115 -0
- package/dist/events.js.map +1 -0
- package/dist/hooks/index.d.ts +7 -0
- package/dist/hooks/index.d.ts.map +1 -0
- package/dist/hooks/index.js +7 -0
- package/dist/hooks/index.js.map +1 -0
- package/dist/hooks/inject-context.d.ts +18 -0
- package/dist/hooks/inject-context.d.ts.map +1 -0
- package/dist/hooks/inject-context.js +57 -0
- package/dist/hooks/inject-context.js.map +1 -0
- package/dist/hooks/process-session.d.ts +18 -0
- package/dist/hooks/process-session.d.ts.map +1 -0
- package/dist/hooks/process-session.js +119 -0
- package/dist/hooks/process-session.js.map +1 -0
- package/dist/index.d.ts +63 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +59 -0
- package/dist/index.js.map +1 -0
- package/dist/learn/analyzers/git.d.ts +62 -0
- package/dist/learn/analyzers/git.d.ts.map +1 -0
- package/dist/learn/analyzers/git.js +183 -0
- package/dist/learn/analyzers/git.js.map +1 -0
- package/dist/learn/analyzers/index.d.ts +15 -0
- package/dist/learn/analyzers/index.d.ts.map +1 -0
- package/dist/learn/analyzers/index.js +10 -0
- package/dist/learn/analyzers/index.js.map +1 -0
- package/dist/learn/analyzers/package.d.ts +57 -0
- package/dist/learn/analyzers/package.d.ts.map +1 -0
- package/dist/learn/analyzers/package.js +245 -0
- package/dist/learn/analyzers/package.js.map +1 -0
- package/dist/learn/analyzers/readme.d.ts +27 -0
- package/dist/learn/analyzers/readme.d.ts.map +1 -0
- package/dist/learn/analyzers/readme.js +163 -0
- package/dist/learn/analyzers/readme.js.map +1 -0
- package/dist/learn/analyzers/source.d.ts +70 -0
- package/dist/learn/analyzers/source.d.ts.map +1 -0
- package/dist/learn/analyzers/source.js +231 -0
- package/dist/learn/analyzers/source.js.map +1 -0
- package/dist/learn/analyzers/structure.d.ts +39 -0
- package/dist/learn/analyzers/structure.d.ts.map +1 -0
- package/dist/learn/analyzers/structure.js +172 -0
- package/dist/learn/analyzers/structure.js.map +1 -0
- package/dist/learn/extractor.d.ts +76 -0
- package/dist/learn/extractor.d.ts.map +1 -0
- package/dist/learn/extractor.js +302 -0
- package/dist/learn/extractor.js.map +1 -0
- package/dist/learn/index.d.ts +31 -0
- package/dist/learn/index.d.ts.map +1 -0
- package/dist/learn/index.js +165 -0
- package/dist/learn/index.js.map +1 -0
- package/dist/mcp/handlers.d.ts +23 -0
- package/dist/mcp/handlers.d.ts.map +1 -0
- package/dist/mcp/handlers.js +124 -0
- package/dist/mcp/handlers.js.map +1 -0
- package/dist/mcp/index.d.ts +32 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/index.js +40 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/mcp/server.d.ts +79 -0
- package/dist/mcp/server.d.ts.map +1 -0
- package/dist/mcp/server.js +277 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/mcp/tools.d.ts +59 -0
- package/dist/mcp/tools.d.ts.map +1 -0
- package/dist/mcp/tools.js +43 -0
- package/dist/mcp/tools.js.map +1 -0
- package/dist/mcp/types.d.ts +65 -0
- package/dist/mcp/types.d.ts.map +1 -0
- package/dist/mcp/types.js +6 -0
- package/dist/mcp/types.js.map +1 -0
- package/dist/mind.d.ts +250 -0
- package/dist/mind.d.ts.map +1 -0
- package/dist/mind.js +637 -0
- package/dist/mind.js.map +1 -0
- package/dist/promotion.d.ts +112 -0
- package/dist/promotion.d.ts.map +1 -0
- package/dist/promotion.js +196 -0
- package/dist/promotion.js.map +1 -0
- package/dist/retry.d.ts +70 -0
- package/dist/retry.d.ts.map +1 -0
- package/dist/retry.js +122 -0
- package/dist/retry.js.map +1 -0
- package/dist/semantic.d.ts +202 -0
- package/dist/semantic.d.ts.map +1 -0
- package/dist/semantic.js +424 -0
- package/dist/semantic.js.map +1 -0
- package/dist/types.d.ts +363 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +30 -0
- package/dist/types.js.map +1 -0
- 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"}
|