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,163 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* README file analyzer.
|
|
3
|
+
* @module learn/analyzers/readme
|
|
4
|
+
*/
|
|
5
|
+
import { readFile } from "node:fs/promises";
|
|
6
|
+
import { join } from "node:path";
|
|
7
|
+
/** Possible README filenames to check */
|
|
8
|
+
const README_NAMES = [
|
|
9
|
+
"README.md",
|
|
10
|
+
"README",
|
|
11
|
+
"readme.md",
|
|
12
|
+
"readme",
|
|
13
|
+
"Readme.md",
|
|
14
|
+
];
|
|
15
|
+
/**
|
|
16
|
+
* Analyze README file in a project.
|
|
17
|
+
*
|
|
18
|
+
* @param projectPath - Project root directory
|
|
19
|
+
* @returns README analysis, or null if no README found
|
|
20
|
+
*/
|
|
21
|
+
export async function analyzeReadme(projectPath) {
|
|
22
|
+
// Find README file
|
|
23
|
+
let content = null;
|
|
24
|
+
for (const name of README_NAMES) {
|
|
25
|
+
try {
|
|
26
|
+
content = await readFile(join(projectPath, name), "utf-8");
|
|
27
|
+
break;
|
|
28
|
+
}
|
|
29
|
+
catch {
|
|
30
|
+
// Try next name
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
if (!content)
|
|
34
|
+
return null;
|
|
35
|
+
return {
|
|
36
|
+
projectDescription: extractDescription(content),
|
|
37
|
+
setupInstructions: extractSetupInstructions(content),
|
|
38
|
+
features: extractFeatures(content),
|
|
39
|
+
documentation: extractDocumentationLinks(content),
|
|
40
|
+
rawContent: content,
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Extract project description from README.
|
|
45
|
+
* Usually the first paragraph after the title.
|
|
46
|
+
* @internal
|
|
47
|
+
*/
|
|
48
|
+
function extractDescription(content) {
|
|
49
|
+
const lines = content.split("\n");
|
|
50
|
+
let foundTitle = false;
|
|
51
|
+
const descriptionLines = [];
|
|
52
|
+
for (const line of lines) {
|
|
53
|
+
// Skip title line
|
|
54
|
+
if (line.startsWith("# ") && !foundTitle) {
|
|
55
|
+
foundTitle = true;
|
|
56
|
+
continue;
|
|
57
|
+
}
|
|
58
|
+
// Skip badges (common after title)
|
|
59
|
+
if (line.includes("![") || line.includes("[![")) {
|
|
60
|
+
continue;
|
|
61
|
+
}
|
|
62
|
+
// Empty line after description ends it
|
|
63
|
+
if (foundTitle && descriptionLines.length > 0 && line.trim() === "") {
|
|
64
|
+
break;
|
|
65
|
+
}
|
|
66
|
+
// Skip empty lines before description
|
|
67
|
+
if (foundTitle && line.trim() === "") {
|
|
68
|
+
continue;
|
|
69
|
+
}
|
|
70
|
+
// Next heading ends description
|
|
71
|
+
if (foundTitle && line.startsWith("#")) {
|
|
72
|
+
break;
|
|
73
|
+
}
|
|
74
|
+
// Collect description lines
|
|
75
|
+
if (foundTitle && line.trim()) {
|
|
76
|
+
descriptionLines.push(line.trim());
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
return descriptionLines.join(" ");
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Extract setup/installation instructions.
|
|
83
|
+
* @internal
|
|
84
|
+
*/
|
|
85
|
+
function extractSetupInstructions(content) {
|
|
86
|
+
const instructions = [];
|
|
87
|
+
// Look for Installation, Setup, Getting Started sections
|
|
88
|
+
const sectionPatterns = [
|
|
89
|
+
/## (?:Installation|Setup|Getting Started|Quick Start)/i,
|
|
90
|
+
];
|
|
91
|
+
const lines = content.split("\n");
|
|
92
|
+
let inSection = false;
|
|
93
|
+
for (const line of lines) {
|
|
94
|
+
// Check if entering a relevant section
|
|
95
|
+
if (sectionPatterns.some((p) => p.test(line))) {
|
|
96
|
+
inSection = true;
|
|
97
|
+
continue;
|
|
98
|
+
}
|
|
99
|
+
// Exit section on next heading
|
|
100
|
+
if (inSection && line.startsWith("##")) {
|
|
101
|
+
break;
|
|
102
|
+
}
|
|
103
|
+
// Collect code blocks and list items in section
|
|
104
|
+
if (inSection) {
|
|
105
|
+
if (line.includes("npm ") || line.includes("yarn ") || line.includes("npx ")) {
|
|
106
|
+
instructions.push(line.trim().replace(/^[\s$]+/, ""));
|
|
107
|
+
}
|
|
108
|
+
else if (line.trim().startsWith("-") || line.trim().startsWith("*")) {
|
|
109
|
+
instructions.push(line.trim().replace(/^[-*]\s*/, ""));
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
return instructions.slice(0, 10); // Limit to 10 instructions
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Extract features list.
|
|
117
|
+
* @internal
|
|
118
|
+
*/
|
|
119
|
+
function extractFeatures(content) {
|
|
120
|
+
const features = [];
|
|
121
|
+
// Look for Features section
|
|
122
|
+
const lines = content.split("\n");
|
|
123
|
+
let inSection = false;
|
|
124
|
+
for (const line of lines) {
|
|
125
|
+
if (/## (?:Features|Capabilities|What it does)/i.test(line)) {
|
|
126
|
+
inSection = true;
|
|
127
|
+
continue;
|
|
128
|
+
}
|
|
129
|
+
if (inSection && line.startsWith("##")) {
|
|
130
|
+
break;
|
|
131
|
+
}
|
|
132
|
+
if (inSection && (line.trim().startsWith("-") || line.trim().startsWith("*"))) {
|
|
133
|
+
features.push(line.trim().replace(/^[-*]\s*/, ""));
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
return features.slice(0, 15); // Limit to 15 features
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Extract documentation links.
|
|
140
|
+
* @internal
|
|
141
|
+
*/
|
|
142
|
+
function extractDocumentationLinks(content) {
|
|
143
|
+
const links = [];
|
|
144
|
+
// Find markdown links
|
|
145
|
+
const linkPattern = /\[([^\]]+)\]\(([^)]+)\)/g;
|
|
146
|
+
let match;
|
|
147
|
+
while ((match = linkPattern.exec(content)) !== null) {
|
|
148
|
+
const text = match[1];
|
|
149
|
+
const url = match[2];
|
|
150
|
+
// Filter for documentation-like links
|
|
151
|
+
if (text && url) {
|
|
152
|
+
if (url.includes("docs") ||
|
|
153
|
+
url.includes("wiki") ||
|
|
154
|
+
url.includes("guide") ||
|
|
155
|
+
text.toLowerCase().includes("doc") ||
|
|
156
|
+
text.toLowerCase().includes("api")) {
|
|
157
|
+
links.push(`${text}: ${url}`);
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
return links.slice(0, 10);
|
|
162
|
+
}
|
|
163
|
+
//# sourceMappingURL=readme.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"readme.js","sourceRoot":"","sources":["../../../src/learn/analyzers/readme.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Source code analyzer for full depth learning.
|
|
3
|
+
* @module learn/analyzers/source
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Code pattern detected in source.
|
|
7
|
+
*/
|
|
8
|
+
export interface CodePattern {
|
|
9
|
+
/** Pattern type identifier */
|
|
10
|
+
type: string;
|
|
11
|
+
/** Human-readable description */
|
|
12
|
+
description: string;
|
|
13
|
+
/** Example file paths where pattern was found */
|
|
14
|
+
examples: string[];
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Module information.
|
|
18
|
+
*/
|
|
19
|
+
export interface ModuleInfo {
|
|
20
|
+
/** Module name (typically filename without extension) */
|
|
21
|
+
name: string;
|
|
22
|
+
/** File path */
|
|
23
|
+
path: string;
|
|
24
|
+
/** Exported identifiers */
|
|
25
|
+
exports: string[];
|
|
26
|
+
/** Imported modules */
|
|
27
|
+
imports: string[];
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Detected coding conventions.
|
|
31
|
+
*/
|
|
32
|
+
export interface CodingConventions {
|
|
33
|
+
/** Naming style for variables/functions */
|
|
34
|
+
namingStyle: "camelCase" | "snake_case" | "PascalCase" | "mixed";
|
|
35
|
+
/** Import style preference */
|
|
36
|
+
importStyle: "named" | "default" | "mixed";
|
|
37
|
+
/** Error handling approach */
|
|
38
|
+
errorHandling: string;
|
|
39
|
+
/** Whether async/await is preferred */
|
|
40
|
+
prefersAsync: boolean;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Analysis result from source code.
|
|
44
|
+
*/
|
|
45
|
+
export interface SourceAnalysis {
|
|
46
|
+
/** Detected code patterns */
|
|
47
|
+
patterns: CodePattern[];
|
|
48
|
+
/** Module information */
|
|
49
|
+
modules: ModuleInfo[];
|
|
50
|
+
/** Coding conventions */
|
|
51
|
+
conventions: CodingConventions;
|
|
52
|
+
/** Files analyzed */
|
|
53
|
+
filesAnalyzed: number;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Analyze source files in a project.
|
|
57
|
+
*
|
|
58
|
+
* @param projectPath - Project root directory
|
|
59
|
+
* @param filePaths - Paths to analyze (relative to project)
|
|
60
|
+
* @returns Source analysis
|
|
61
|
+
*/
|
|
62
|
+
export declare function analyzeSource(projectPath: string, filePaths: string[]): Promise<SourceAnalysis>;
|
|
63
|
+
/**
|
|
64
|
+
* Get a summary of source analysis.
|
|
65
|
+
*
|
|
66
|
+
* @param analysis - Source analysis result
|
|
67
|
+
* @returns Human-readable source summary
|
|
68
|
+
*/
|
|
69
|
+
export declare function getSourceSummary(analysis: SourceAnalysis): string;
|
|
70
|
+
//# sourceMappingURL=source.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"source.d.ts","sourceRoot":"","sources":["../../../src/learn/analyzers/source.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,8BAA8B;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,iCAAiC;IACjC,WAAW,EAAE,MAAM,CAAC;IACpB,iDAAiD;IACjD,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,yDAAyD;IACzD,IAAI,EAAE,MAAM,CAAC;IACb,gBAAgB;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,2BAA2B;IAC3B,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,uBAAuB;IACvB,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,2CAA2C;IAC3C,WAAW,EAAE,WAAW,GAAG,YAAY,GAAG,YAAY,GAAG,OAAO,CAAC;IACjE,8BAA8B;IAC9B,WAAW,EAAE,OAAO,GAAG,SAAS,GAAG,OAAO,CAAC;IAC3C,8BAA8B;IAC9B,aAAa,EAAE,MAAM,CAAC;IACtB,uCAAuC;IACvC,YAAY,EAAE,OAAO,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,6BAA6B;IAC7B,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,yBAAyB;IACzB,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB,yBAAyB;IACzB,WAAW,EAAE,iBAAiB,CAAC;IAC/B,qBAAqB;IACrB,aAAa,EAAE,MAAM,CAAC;CACvB;AAkBD;;;;;;GAMG;AACH,wBAAsB,aAAa,CACjC,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,EAAE,GAClB,OAAO,CAAC,cAAc,CAAC,CAoEzB;AAiLD;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,cAAc,GAAG,MAAM,CAajE"}
|
|
@@ -0,0 +1,231 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Source code analyzer for full depth learning.
|
|
3
|
+
* @module learn/analyzers/source
|
|
4
|
+
*/
|
|
5
|
+
import { readFile } from "node:fs/promises";
|
|
6
|
+
import { extname } from "node:path";
|
|
7
|
+
/**
|
|
8
|
+
* Analyze source files in a project.
|
|
9
|
+
*
|
|
10
|
+
* @param projectPath - Project root directory
|
|
11
|
+
* @param filePaths - Paths to analyze (relative to project)
|
|
12
|
+
* @returns Source analysis
|
|
13
|
+
*/
|
|
14
|
+
export async function analyzeSource(projectPath, filePaths) {
|
|
15
|
+
const patterns = [];
|
|
16
|
+
const modules = [];
|
|
17
|
+
const conventionStats = {
|
|
18
|
+
camelCase: 0,
|
|
19
|
+
snake_case: 0,
|
|
20
|
+
PascalCase: 0,
|
|
21
|
+
namedImports: 0,
|
|
22
|
+
defaultImports: 0,
|
|
23
|
+
tryCatch: 0,
|
|
24
|
+
errorCallbacks: 0,
|
|
25
|
+
asyncAwait: 0,
|
|
26
|
+
promiseCount: 0,
|
|
27
|
+
};
|
|
28
|
+
let filesAnalyzed = 0;
|
|
29
|
+
for (const filePath of filePaths) {
|
|
30
|
+
try {
|
|
31
|
+
const fullPath = `${projectPath}/${filePath}`;
|
|
32
|
+
const content = await readFile(fullPath, "utf-8");
|
|
33
|
+
const ext = extname(filePath).toLowerCase();
|
|
34
|
+
// Only analyze JS/TS files
|
|
35
|
+
if (![".js", ".ts", ".jsx", ".tsx", ".mjs", ".mts"].includes(ext)) {
|
|
36
|
+
continue;
|
|
37
|
+
}
|
|
38
|
+
filesAnalyzed++;
|
|
39
|
+
// Analyze the file
|
|
40
|
+
const analysis = analyzeFile(content, filePath);
|
|
41
|
+
// Collect module info
|
|
42
|
+
modules.push({
|
|
43
|
+
name: filePath.replace(/\.[^/.]+$/, ""),
|
|
44
|
+
path: filePath,
|
|
45
|
+
exports: analysis.exports,
|
|
46
|
+
imports: analysis.imports,
|
|
47
|
+
});
|
|
48
|
+
// Update convention stats
|
|
49
|
+
conventionStats.camelCase += analysis.camelCaseCount;
|
|
50
|
+
conventionStats.snake_case += analysis.snakeCaseCount;
|
|
51
|
+
conventionStats.PascalCase += analysis.pascalCaseCount;
|
|
52
|
+
conventionStats.namedImports += analysis.namedImportCount;
|
|
53
|
+
conventionStats.defaultImports += analysis.defaultImportCount;
|
|
54
|
+
conventionStats.tryCatch += analysis.tryCatchCount;
|
|
55
|
+
conventionStats.errorCallbacks += analysis.errorCallbackCount;
|
|
56
|
+
conventionStats.asyncAwait += analysis.asyncAwaitCount;
|
|
57
|
+
conventionStats.promiseCount += analysis.promiseCount;
|
|
58
|
+
}
|
|
59
|
+
catch {
|
|
60
|
+
// Skip files that can't be read
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
// Detect patterns from aggregated analysis
|
|
64
|
+
patterns.push(...detectPatterns(modules));
|
|
65
|
+
// Determine conventions
|
|
66
|
+
const conventions = determineConventions(conventionStats);
|
|
67
|
+
return {
|
|
68
|
+
patterns,
|
|
69
|
+
modules,
|
|
70
|
+
conventions,
|
|
71
|
+
filesAnalyzed,
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Analyze a single file.
|
|
76
|
+
* @internal
|
|
77
|
+
*/
|
|
78
|
+
function analyzeFile(content, _filePath) {
|
|
79
|
+
const result = {
|
|
80
|
+
exports: [],
|
|
81
|
+
imports: [],
|
|
82
|
+
camelCaseCount: 0,
|
|
83
|
+
snakeCaseCount: 0,
|
|
84
|
+
pascalCaseCount: 0,
|
|
85
|
+
namedImportCount: 0,
|
|
86
|
+
defaultImportCount: 0,
|
|
87
|
+
tryCatchCount: 0,
|
|
88
|
+
errorCallbackCount: 0,
|
|
89
|
+
asyncAwaitCount: 0,
|
|
90
|
+
promiseCount: 0,
|
|
91
|
+
};
|
|
92
|
+
// Extract exports
|
|
93
|
+
const exportMatches = content.matchAll(/export\s+(?:const|let|var|function|class|interface|type|enum)\s+(\w+)/g);
|
|
94
|
+
for (const match of exportMatches) {
|
|
95
|
+
if (match[1]) {
|
|
96
|
+
result.exports.push(match[1]);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
// Extract export { ... }
|
|
100
|
+
const namedExportMatches = content.matchAll(/export\s*\{([^}]+)\}/g);
|
|
101
|
+
for (const match of namedExportMatches) {
|
|
102
|
+
if (match[1]) {
|
|
103
|
+
const names = match[1].split(",").map((n) => {
|
|
104
|
+
const parts = n.trim().split(" as ");
|
|
105
|
+
return parts[0]?.trim() ?? "";
|
|
106
|
+
});
|
|
107
|
+
result.exports.push(...names.filter(Boolean));
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
// Extract imports
|
|
111
|
+
const importMatches = content.matchAll(/import\s+.*?\s+from\s+['"]([^'"]+)['"]/g);
|
|
112
|
+
for (const match of importMatches) {
|
|
113
|
+
if (match[1]) {
|
|
114
|
+
result.imports.push(match[1]);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
// Count naming conventions
|
|
118
|
+
const identifierMatches = content.matchAll(/\b([a-z][a-zA-Z0-9]*)\b/g);
|
|
119
|
+
for (const match of identifierMatches) {
|
|
120
|
+
const name = match[1];
|
|
121
|
+
if (name && name.length > 0) {
|
|
122
|
+
const firstChar = name[0];
|
|
123
|
+
if (name.includes("_")) {
|
|
124
|
+
result.snakeCaseCount++;
|
|
125
|
+
}
|
|
126
|
+
else if (firstChar && firstChar === firstChar.toUpperCase()) {
|
|
127
|
+
result.pascalCaseCount++;
|
|
128
|
+
}
|
|
129
|
+
else {
|
|
130
|
+
result.camelCaseCount++;
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
// Count import styles
|
|
135
|
+
result.namedImportCount = (content.match(/import\s*\{/g) || []).length;
|
|
136
|
+
result.defaultImportCount = (content.match(/import\s+\w+\s+from/g) || []).length;
|
|
137
|
+
// Count error handling
|
|
138
|
+
result.tryCatchCount = (content.match(/try\s*\{/g) || []).length;
|
|
139
|
+
result.errorCallbackCount = (content.match(/\.catch\s*\(/g) || []).length;
|
|
140
|
+
// Count async patterns
|
|
141
|
+
result.asyncAwaitCount = (content.match(/\basync\b/g) || []).length;
|
|
142
|
+
result.promiseCount = (content.match(/new\s+Promise/g) || []).length;
|
|
143
|
+
return result;
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Detect patterns from module analysis.
|
|
147
|
+
* @internal
|
|
148
|
+
*/
|
|
149
|
+
function detectPatterns(modules) {
|
|
150
|
+
const patterns = [];
|
|
151
|
+
// Detect barrel exports (index.ts that re-exports)
|
|
152
|
+
const barrelModules = modules.filter((m) => m.name.endsWith("index") && m.exports.length > 3);
|
|
153
|
+
if (barrelModules.length > 0) {
|
|
154
|
+
patterns.push({
|
|
155
|
+
type: "barrel-exports",
|
|
156
|
+
description: "Uses barrel exports (index files that re-export)",
|
|
157
|
+
examples: barrelModules.slice(0, 3).map((m) => m.path),
|
|
158
|
+
});
|
|
159
|
+
}
|
|
160
|
+
// Detect modular architecture
|
|
161
|
+
const hasMultipleModules = modules.length > 10;
|
|
162
|
+
const avgExports = modules.reduce((sum, m) => sum + m.exports.length, 0) / modules.length;
|
|
163
|
+
if (hasMultipleModules && avgExports < 10) {
|
|
164
|
+
patterns.push({
|
|
165
|
+
type: "modular-architecture",
|
|
166
|
+
description: "Follows modular architecture with small, focused modules",
|
|
167
|
+
examples: modules.slice(0, 3).map((m) => m.path),
|
|
168
|
+
});
|
|
169
|
+
}
|
|
170
|
+
return patterns;
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* Determine coding conventions from stats.
|
|
174
|
+
* @internal
|
|
175
|
+
*/
|
|
176
|
+
function determineConventions(stats) {
|
|
177
|
+
// Determine naming style
|
|
178
|
+
let namingStyle = "mixed";
|
|
179
|
+
const totalNaming = stats.camelCase + stats.snake_case + stats.PascalCase;
|
|
180
|
+
if (stats.camelCase > totalNaming * 0.6) {
|
|
181
|
+
namingStyle = "camelCase";
|
|
182
|
+
}
|
|
183
|
+
else if (stats.snake_case > totalNaming * 0.6) {
|
|
184
|
+
namingStyle = "snake_case";
|
|
185
|
+
}
|
|
186
|
+
else if (stats.PascalCase > totalNaming * 0.6) {
|
|
187
|
+
namingStyle = "PascalCase";
|
|
188
|
+
}
|
|
189
|
+
// Determine import style
|
|
190
|
+
let importStyle = "mixed";
|
|
191
|
+
const totalImports = stats.namedImports + stats.defaultImports;
|
|
192
|
+
if (stats.namedImports > totalImports * 0.7) {
|
|
193
|
+
importStyle = "named";
|
|
194
|
+
}
|
|
195
|
+
else if (stats.defaultImports > totalImports * 0.7) {
|
|
196
|
+
importStyle = "default";
|
|
197
|
+
}
|
|
198
|
+
// Determine error handling
|
|
199
|
+
let errorHandling = "mixed";
|
|
200
|
+
if (stats.tryCatch > stats.errorCallbacks * 2) {
|
|
201
|
+
errorHandling = "try-catch blocks";
|
|
202
|
+
}
|
|
203
|
+
else if (stats.errorCallbacks > stats.tryCatch * 2) {
|
|
204
|
+
errorHandling = "promise .catch()";
|
|
205
|
+
}
|
|
206
|
+
// Determine async preference
|
|
207
|
+
const prefersAsync = stats.asyncAwait > stats.promiseCount;
|
|
208
|
+
return {
|
|
209
|
+
namingStyle,
|
|
210
|
+
importStyle,
|
|
211
|
+
errorHandling,
|
|
212
|
+
prefersAsync,
|
|
213
|
+
};
|
|
214
|
+
}
|
|
215
|
+
/**
|
|
216
|
+
* Get a summary of source analysis.
|
|
217
|
+
*
|
|
218
|
+
* @param analysis - Source analysis result
|
|
219
|
+
* @returns Human-readable source summary
|
|
220
|
+
*/
|
|
221
|
+
export function getSourceSummary(analysis) {
|
|
222
|
+
const parts = [];
|
|
223
|
+
parts.push(`${analysis.filesAnalyzed} files analyzed`);
|
|
224
|
+
parts.push(`${analysis.modules.length} modules`);
|
|
225
|
+
if (analysis.patterns.length > 0) {
|
|
226
|
+
parts.push(`Patterns: ${analysis.patterns.map((p) => p.type).join(", ")}`);
|
|
227
|
+
}
|
|
228
|
+
parts.push(`Style: ${analysis.conventions.namingStyle}`);
|
|
229
|
+
return parts.join("; ");
|
|
230
|
+
}
|
|
231
|
+
//# sourceMappingURL=source.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"source.js","sourceRoot":"","sources":["../../../src/learn/analyzers/source.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Directory structure analyzer.
|
|
3
|
+
* @module learn/analyzers/structure
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Analysis result from directory structure.
|
|
7
|
+
*/
|
|
8
|
+
export interface StructureAnalysis {
|
|
9
|
+
/** Identified source directories */
|
|
10
|
+
sourceDirectories: string[];
|
|
11
|
+
/** Identified test directories */
|
|
12
|
+
testDirectories: string[];
|
|
13
|
+
/** Configuration files found */
|
|
14
|
+
configFiles: string[];
|
|
15
|
+
/** Likely entry points */
|
|
16
|
+
entryPoints: string[];
|
|
17
|
+
/** Total files analyzed */
|
|
18
|
+
totalFiles: number;
|
|
19
|
+
/** File types distribution (extension -> count) */
|
|
20
|
+
fileTypes: Record<string, number>;
|
|
21
|
+
/** Top-level directories */
|
|
22
|
+
topLevelDirs: string[];
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Analyze directory structure of a project.
|
|
26
|
+
*
|
|
27
|
+
* @param projectPath - Project root directory
|
|
28
|
+
* @param maxDepth - Maximum depth to scan (default: 4)
|
|
29
|
+
* @returns Structure analysis
|
|
30
|
+
*/
|
|
31
|
+
export declare function analyzeStructure(projectPath: string, maxDepth?: number): Promise<StructureAnalysis>;
|
|
32
|
+
/**
|
|
33
|
+
* Get a summary of the project structure.
|
|
34
|
+
*
|
|
35
|
+
* @param analysis - Structure analysis result
|
|
36
|
+
* @returns Human-readable structure summary
|
|
37
|
+
*/
|
|
38
|
+
export declare function getStructureSummary(analysis: StructureAnalysis): string;
|
|
39
|
+
//# sourceMappingURL=structure.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"structure.d.ts","sourceRoot":"","sources":["../../../src/learn/analyzers/structure.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,oCAAoC;IACpC,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,kCAAkC;IAClC,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,gCAAgC;IAChC,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,0BAA0B;IAC1B,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,2BAA2B;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,mDAAmD;IACnD,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAClC,4BAA4B;IAC5B,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB;AAgED;;;;;;GAMG;AACH,wBAAsB,gBAAgB,CACpC,WAAW,EAAE,MAAM,EACnB,QAAQ,GAAE,MAAU,GACnB,OAAO,CAAC,iBAAiB,CAAC,CAc5B;AA8ED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,iBAAiB,GAAG,MAAM,CAwBvE"}
|