@mycodemap/mycodemap 0.5.1 → 0.5.2-beta.1
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/CHANGELOG.md +12 -0
- package/dist/cli/index.js +0 -0
- package/docs/PUBLISHING.md +41 -12
- package/docs/rules/pre-release-checklist.md +9 -4
- package/docs/rules/validation.md +2 -1
- package/package.json +1 -1
- package/scripts/pre-release-check.js +2 -2
- package/dist/ai/claude.d.ts +0 -38
- package/dist/ai/claude.d.ts.map +0 -1
- package/dist/ai/claude.js +0 -169
- package/dist/ai/claude.js.map +0 -1
- package/dist/ai/codex.d.ts +0 -38
- package/dist/ai/codex.d.ts.map +0 -1
- package/dist/ai/codex.js +0 -169
- package/dist/ai/codex.js.map +0 -1
- package/dist/ai/factory.d.ts +0 -48
- package/dist/ai/factory.d.ts.map +0 -1
- package/dist/ai/factory.js +0 -95
- package/dist/ai/factory.js.map +0 -1
- package/dist/ai/index.d.ts +0 -12
- package/dist/ai/index.d.ts.map +0 -1
- package/dist/ai/index.js +0 -29
- package/dist/ai/index.js.map +0 -1
- package/dist/ai/provider.d.ts +0 -70
- package/dist/ai/provider.d.ts.map +0 -1
- package/dist/ai/provider.js +0 -31
- package/dist/ai/provider.js.map +0 -1
- package/dist/ai/subagent-caller.d.ts +0 -90
- package/dist/ai/subagent-caller.d.ts.map +0 -1
- package/dist/ai/subagent-caller.js +0 -280
- package/dist/ai/subagent-caller.js.map +0 -1
- package/dist/ai/types.d.ts +0 -70
- package/dist/ai/types.d.ts.map +0 -1
- package/dist/ai/types.js +0 -5
- package/dist/ai/types.js.map +0 -1
- package/dist/cli/commands/server.d.ts +0 -9
- package/dist/cli/commands/server.d.ts.map +0 -1
- package/dist/cli/commands/server.js +0 -65
- package/dist/cli/commands/server.js.map +0 -1
- package/dist/cli-new/commands/server.d.ts +0 -13
- package/dist/cli-new/commands/server.d.ts.map +0 -1
- package/dist/cli-new/commands/server.js +0 -90
- package/dist/cli-new/commands/server.js.map +0 -1
- package/dist/generator/ai-overview.d.ts +0 -51
- package/dist/generator/ai-overview.d.ts.map +0 -1
- package/dist/generator/ai-overview.js +0 -160
- package/dist/generator/ai-overview.js.map +0 -1
- package/dist/infrastructure/storage/adapters/Neo4jStorage.d.ts +0 -41
- package/dist/infrastructure/storage/adapters/Neo4jStorage.d.ts.map +0 -1
- package/dist/infrastructure/storage/adapters/Neo4jStorage.js +0 -162
- package/dist/infrastructure/storage/adapters/Neo4jStorage.js.map +0 -1
- package/dist/orchestrator/ai-feed-generator.d.ts +0 -210
- package/dist/orchestrator/ai-feed-generator.d.ts.map +0 -1
- package/dist/orchestrator/ai-feed-generator.js +0 -377
- package/dist/orchestrator/ai-feed-generator.js.map +0 -1
- package/docs/archive/test-report-symbol-search.md +0 -384
- package/docs/archive/test-scenario-4-complexity-analysis.md +0 -460
- package/docs/archive/test_report_scenario5.md +0 -615
- package/docs/archive/test_scenario_3_impact_analysis_report.md +0 -520
|
@@ -1,160 +0,0 @@
|
|
|
1
|
-
// ============================================
|
|
2
|
-
// AI Overview Generator - AI 概述生成与保存
|
|
3
|
-
// ============================================
|
|
4
|
-
import * as fs from 'fs/promises';
|
|
5
|
-
import * as path from 'path';
|
|
6
|
-
/**
|
|
7
|
-
* AI Overview Generator - 生成并保存 AI 概述
|
|
8
|
-
*/
|
|
9
|
-
export class AIOverviewGenerator {
|
|
10
|
-
outputDir;
|
|
11
|
-
enabled;
|
|
12
|
-
filename;
|
|
13
|
-
constructor(config) {
|
|
14
|
-
this.outputDir = config.outputDir;
|
|
15
|
-
this.enabled = config.enabled ?? true;
|
|
16
|
-
this.filename = config.filename || 'AI_OVERVIEW.md';
|
|
17
|
-
}
|
|
18
|
-
/**
|
|
19
|
-
* 生成并保存 AI 概述
|
|
20
|
-
*/
|
|
21
|
-
async generate(codeMap, aiOutput) {
|
|
22
|
-
const outputPath = path.join(this.outputDir, this.filename);
|
|
23
|
-
// 构建 Markdown 内容
|
|
24
|
-
const content = this.buildMarkdown(codeMap, aiOutput);
|
|
25
|
-
// 确保输出目录存在
|
|
26
|
-
await fs.mkdir(this.outputDir, { recursive: true });
|
|
27
|
-
// 写入文件
|
|
28
|
-
await fs.writeFile(outputPath, content, 'utf-8');
|
|
29
|
-
return outputPath;
|
|
30
|
-
}
|
|
31
|
-
/**
|
|
32
|
-
* 构建 Markdown 内容
|
|
33
|
-
*/
|
|
34
|
-
buildMarkdown(codeMap, aiOutput) {
|
|
35
|
-
const lines = [];
|
|
36
|
-
// 标题
|
|
37
|
-
lines.push('# ' + aiOutput.title);
|
|
38
|
-
lines.push('');
|
|
39
|
-
// 元数据
|
|
40
|
-
lines.push('<!-- AI Generated Overview -->');
|
|
41
|
-
lines.push(`- **生成时间**: ${new Date(aiOutput.metadata.generatedAt).toLocaleString('zh-CN')}`);
|
|
42
|
-
lines.push(`- **模型**: ${aiOutput.metadata.model}`);
|
|
43
|
-
lines.push('');
|
|
44
|
-
// 项目统计
|
|
45
|
-
lines.push('## 项目统计');
|
|
46
|
-
lines.push('');
|
|
47
|
-
lines.push(`| 指标 | 数值 |`);
|
|
48
|
-
lines.push(`|------|------|`);
|
|
49
|
-
lines.push(`| 文件总数 | ${codeMap.summary.totalFiles} |`);
|
|
50
|
-
lines.push(`| 代码行数 | ${codeMap.summary.totalLines} |`);
|
|
51
|
-
lines.push(`| 模块数量 | ${codeMap.summary.totalModules} |`);
|
|
52
|
-
lines.push(`| 导出符号 | ${codeMap.summary.totalExports} |`);
|
|
53
|
-
lines.push(`| 类型定义 | ${codeMap.summary.totalTypes} |`);
|
|
54
|
-
lines.push('');
|
|
55
|
-
// 架构信息
|
|
56
|
-
if (aiOutput.architecture) {
|
|
57
|
-
lines.push('## 架构分析');
|
|
58
|
-
lines.push('');
|
|
59
|
-
lines.push(`- **架构模式**: ${aiOutput.architecture.pattern || '未识别'}`);
|
|
60
|
-
lines.push('');
|
|
61
|
-
if (aiOutput.architecture.layers && aiOutput.architecture.layers.length > 0) {
|
|
62
|
-
lines.push('### 分层结构');
|
|
63
|
-
lines.push('');
|
|
64
|
-
for (const layer of aiOutput.architecture.layers) {
|
|
65
|
-
lines.push(`#### ${layer.name}`);
|
|
66
|
-
lines.push(`- **职责**: ${layer.responsibility}`);
|
|
67
|
-
if (layer.modules.length > 0) {
|
|
68
|
-
lines.push(`- **模块**: ${layer.modules.join(', ')}`);
|
|
69
|
-
}
|
|
70
|
-
lines.push('');
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
if (aiOutput.architecture.metrics) {
|
|
74
|
-
lines.push('### 架构指标');
|
|
75
|
-
lines.push('');
|
|
76
|
-
lines.push(`- **耦合度**: ${aiOutput.architecture.metrics.coupling}`);
|
|
77
|
-
lines.push(`- **内聚度**: ${aiOutput.architecture.metrics.cohesion}`);
|
|
78
|
-
lines.push(`- **复杂度**: ${aiOutput.architecture.metrics.complexity}`);
|
|
79
|
-
lines.push('');
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
// AI 生成的内容
|
|
83
|
-
lines.push('## 项目概述');
|
|
84
|
-
lines.push('');
|
|
85
|
-
lines.push(aiOutput.content);
|
|
86
|
-
lines.push('');
|
|
87
|
-
// 亮点模块
|
|
88
|
-
if (aiOutput.highlights.length > 0) {
|
|
89
|
-
lines.push('## 亮点模块');
|
|
90
|
-
lines.push('');
|
|
91
|
-
for (const highlight of aiOutput.highlights) {
|
|
92
|
-
lines.push(`- ${highlight}`);
|
|
93
|
-
}
|
|
94
|
-
lines.push('');
|
|
95
|
-
}
|
|
96
|
-
// 模块列表(简要)
|
|
97
|
-
lines.push('## 模块列表');
|
|
98
|
-
lines.push('');
|
|
99
|
-
lines.push('| 模块路径 | 导出数 | 依赖数 |');
|
|
100
|
-
lines.push('|----------|--------|--------|');
|
|
101
|
-
for (const mod of codeMap.modules.slice(0, 20)) {
|
|
102
|
-
const exportsCount = mod.exports.length;
|
|
103
|
-
const depsCount = mod.dependencies.length;
|
|
104
|
-
const relPath = path.relative(codeMap.project.rootDir, mod.path);
|
|
105
|
-
lines.push(`| ${relPath} | ${exportsCount} | ${depsCount} |`);
|
|
106
|
-
}
|
|
107
|
-
if (codeMap.modules.length > 20) {
|
|
108
|
-
lines.push(`| ... | ... | ... |`);
|
|
109
|
-
}
|
|
110
|
-
lines.push('');
|
|
111
|
-
lines.push('---');
|
|
112
|
-
lines.push('');
|
|
113
|
-
lines.push('*由 CodeMap AI Generator 生成*');
|
|
114
|
-
return lines.join('\n');
|
|
115
|
-
}
|
|
116
|
-
/**
|
|
117
|
-
* 读取已保存的概述
|
|
118
|
-
*/
|
|
119
|
-
async read() {
|
|
120
|
-
const outputPath = path.join(this.outputDir, this.filename);
|
|
121
|
-
try {
|
|
122
|
-
return await fs.readFile(outputPath, 'utf-8');
|
|
123
|
-
}
|
|
124
|
-
catch {
|
|
125
|
-
return null;
|
|
126
|
-
}
|
|
127
|
-
}
|
|
128
|
-
/**
|
|
129
|
-
* 检查概述是否存在
|
|
130
|
-
*/
|
|
131
|
-
async exists() {
|
|
132
|
-
const outputPath = path.join(this.outputDir, this.filename);
|
|
133
|
-
try {
|
|
134
|
-
await fs.access(outputPath);
|
|
135
|
-
return true;
|
|
136
|
-
}
|
|
137
|
-
catch {
|
|
138
|
-
return false;
|
|
139
|
-
}
|
|
140
|
-
}
|
|
141
|
-
/**
|
|
142
|
-
* 获取输出文件路径
|
|
143
|
-
*/
|
|
144
|
-
getOutputPath() {
|
|
145
|
-
return path.join(this.outputDir, this.filename);
|
|
146
|
-
}
|
|
147
|
-
/**
|
|
148
|
-
* 是否启用
|
|
149
|
-
*/
|
|
150
|
-
isEnabled() {
|
|
151
|
-
return this.enabled;
|
|
152
|
-
}
|
|
153
|
-
}
|
|
154
|
-
/**
|
|
155
|
-
* 创建 AI Overview Generator 实例
|
|
156
|
-
*/
|
|
157
|
-
export function createAIOverviewGenerator(config) {
|
|
158
|
-
return new AIOverviewGenerator(config);
|
|
159
|
-
}
|
|
160
|
-
//# sourceMappingURL=ai-overview.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ai-overview.js","sourceRoot":"","sources":["../../src/generator/ai-overview.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
import type { StorageConfig, Cycle, ImpactResult, ProjectStatistics } from '../../../interface/types/storage.js';
|
|
2
|
-
import type { CodeGraph, Module, Symbol, Dependency } from '../../../interface/types/index.js';
|
|
3
|
-
import { StorageBase } from '../interfaces/StorageBase.js';
|
|
4
|
-
/**
|
|
5
|
-
* Neo4j 存储适配器(可选依赖)
|
|
6
|
-
*
|
|
7
|
-
* 安装:npm install neo4j-driver
|
|
8
|
-
*
|
|
9
|
-
* 特点:
|
|
10
|
-
* - 连接远程/本地 Neo4j 实例
|
|
11
|
-
* - 用 snapshot 节点持久化完整 CodeGraph
|
|
12
|
-
* - 查询/分析接口与共享 storage contract 保持一致
|
|
13
|
-
* - 错误语义显式暴露,不再静默 fallback
|
|
14
|
-
*/
|
|
15
|
-
export declare class Neo4jStorage extends StorageBase {
|
|
16
|
-
readonly type: "neo4j";
|
|
17
|
-
private driver;
|
|
18
|
-
private readonly dbConfig;
|
|
19
|
-
constructor(config: StorageConfig);
|
|
20
|
-
protected doInitialize(): Promise<void>;
|
|
21
|
-
protected doClose(): Promise<void>;
|
|
22
|
-
saveCodeGraph(graph: CodeGraph): Promise<void>;
|
|
23
|
-
loadCodeGraph(): Promise<CodeGraph>;
|
|
24
|
-
deleteProject(): Promise<void>;
|
|
25
|
-
updateModule(module: Module): Promise<void>;
|
|
26
|
-
deleteModule(moduleId: string): Promise<void>;
|
|
27
|
-
findModuleById(id: string): Promise<Module | null>;
|
|
28
|
-
findModulesByPath(path: string): Promise<Module[]>;
|
|
29
|
-
findSymbolByName(name: string): Promise<Symbol[]>;
|
|
30
|
-
findSymbolById(id: string): Promise<Symbol | null>;
|
|
31
|
-
findDependencies(moduleId: string): Promise<Dependency[]>;
|
|
32
|
-
findDependents(moduleId: string): Promise<Dependency[]>;
|
|
33
|
-
findCallers(functionId: string): Promise<Symbol[]>;
|
|
34
|
-
findCallees(functionId: string): Promise<Symbol[]>;
|
|
35
|
-
detectCycles(): Promise<Cycle[]>;
|
|
36
|
-
calculateImpact(moduleId: string, depth: number): Promise<ImpactResult>;
|
|
37
|
-
getStatistics(): Promise<ProjectStatistics>;
|
|
38
|
-
private getDriver;
|
|
39
|
-
private runStatement;
|
|
40
|
-
}
|
|
41
|
-
//# sourceMappingURL=Neo4jStorage.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Neo4jStorage.d.ts","sourceRoot":"","sources":["../../../../src/infrastructure/storage/adapters/Neo4jStorage.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EACV,aAAa,EACb,KAAK,EACL,YAAY,EACZ,iBAAiB,EAClB,MAAM,qCAAqC,CAAC;AAC7C,OAAO,KAAK,EACV,SAAS,EACT,MAAM,EACN,MAAM,EACN,UAAU,EACX,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EAAE,WAAW,EAAgB,MAAM,8BAA8B,CAAC;AA4DzE;;;;;;;;;;GAUG;AACH,qBAAa,YAAa,SAAQ,WAAW;IAC3C,QAAQ,CAAC,IAAI,EAAG,OAAO,CAAU;IAEjC,OAAO,CAAC,MAAM,CAAgC;IAC9C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAgB;gBAE7B,MAAM,EAAE,aAAa;cAKjB,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;cAkB7B,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAQlC,aAAa,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IAe9C,aAAa,IAAI,OAAO,CAAC,SAAS,CAAC;IAkBnC,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;IAK9B,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAM3C,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAM7C,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAMlD,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAMlD,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAMjD,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAMlD,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IAKzD,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IAKvD,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAKlD,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAKlD,YAAY,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;IAKhC,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAKvE,aAAa,IAAI,OAAO,CAAC,iBAAiB,CAAC;IAKjD,OAAO,CAAC,SAAS;YAWH,YAAY;CAkB3B"}
|
|
@@ -1,162 +0,0 @@
|
|
|
1
|
-
// [META] since:2026-03 | owner:architecture-team | stable:false
|
|
2
|
-
// [WHY] Neo4j storage adapter - enterprise graph database backend
|
|
3
|
-
// ============================================
|
|
4
|
-
// Neo4j 存储适配器 - 企业级图数据库后端
|
|
5
|
-
// ============================================
|
|
6
|
-
import { StorageBase, StorageError } from '../interfaces/StorageBase.js';
|
|
7
|
-
import { calculateImpactInGraph, createEmptyCodeGraph, deleteModuleFromGraph, deserializeCodeGraphSnapshot, detectCyclesInGraph, findCalleesInGraph, findCallersInGraph, findDependenciesInGraph, findDependentsInGraph, getProjectStatisticsFromGraph, serializeCodeGraphSnapshot, upsertModuleInGraph, } from '../graph-helpers.js';
|
|
8
|
-
async function loadNeo4jModule() {
|
|
9
|
-
const moduleName = 'neo4j-driver';
|
|
10
|
-
return await import(moduleName);
|
|
11
|
-
}
|
|
12
|
-
function normalizeNeo4jValue(value) {
|
|
13
|
-
if (typeof value === 'object' &&
|
|
14
|
-
value !== null &&
|
|
15
|
-
'toNumber' in value &&
|
|
16
|
-
typeof value.toNumber === 'function') {
|
|
17
|
-
return value.toNumber();
|
|
18
|
-
}
|
|
19
|
-
return value;
|
|
20
|
-
}
|
|
21
|
-
/**
|
|
22
|
-
* Neo4j 存储适配器(可选依赖)
|
|
23
|
-
*
|
|
24
|
-
* 安装:npm install neo4j-driver
|
|
25
|
-
*
|
|
26
|
-
* 特点:
|
|
27
|
-
* - 连接远程/本地 Neo4j 实例
|
|
28
|
-
* - 用 snapshot 节点持久化完整 CodeGraph
|
|
29
|
-
* - 查询/分析接口与共享 storage contract 保持一致
|
|
30
|
-
* - 错误语义显式暴露,不再静默 fallback
|
|
31
|
-
*/
|
|
32
|
-
export class Neo4jStorage extends StorageBase {
|
|
33
|
-
type = 'neo4j';
|
|
34
|
-
driver = null;
|
|
35
|
-
dbConfig;
|
|
36
|
-
constructor(config) {
|
|
37
|
-
super();
|
|
38
|
-
this.dbConfig = config;
|
|
39
|
-
}
|
|
40
|
-
async doInitialize() {
|
|
41
|
-
try {
|
|
42
|
-
const neo4j = await loadNeo4jModule();
|
|
43
|
-
const uri = this.dbConfig.uri ?? 'bolt://localhost:7687';
|
|
44
|
-
const username = this.dbConfig.username ?? 'neo4j';
|
|
45
|
-
const password = this.dbConfig.password ?? 'password';
|
|
46
|
-
this.driver = neo4j.driver(uri, neo4j.auth.basic(username, password));
|
|
47
|
-
await this.driver.verifyConnectivity();
|
|
48
|
-
}
|
|
49
|
-
catch (error) {
|
|
50
|
-
throw new StorageError('Failed to initialize Neo4j storage', 'NEO4J_INIT_FAILED', error);
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
async doClose() {
|
|
54
|
-
if (this.driver) {
|
|
55
|
-
await this.driver.close();
|
|
56
|
-
}
|
|
57
|
-
this.driver = null;
|
|
58
|
-
}
|
|
59
|
-
async saveCodeGraph(graph) {
|
|
60
|
-
this.ensureInitialized();
|
|
61
|
-
await this.runStatement('MATCH (s:CodeMapSnapshot) DETACH DELETE s');
|
|
62
|
-
await this.runStatement('CREATE (s:CodeMapSnapshot {id: $id, projectId: $projectId, graph: $graph, updatedAt: $updatedAt})', {
|
|
63
|
-
id: 'codemap-snapshot',
|
|
64
|
-
projectId: graph.project.id,
|
|
65
|
-
graph: serializeCodeGraphSnapshot(graph),
|
|
66
|
-
updatedAt: new Date().toISOString(),
|
|
67
|
-
});
|
|
68
|
-
}
|
|
69
|
-
async loadCodeGraph() {
|
|
70
|
-
this.ensureInitialized();
|
|
71
|
-
const result = await this.runStatement('MATCH (s:CodeMapSnapshot) RETURN s.graph AS graph LIMIT 1');
|
|
72
|
-
const record = result.records[0];
|
|
73
|
-
const snapshot = typeof record?.get === 'function'
|
|
74
|
-
? normalizeNeo4jValue(record.get('graph'))
|
|
75
|
-
: null;
|
|
76
|
-
if (typeof snapshot !== 'string') {
|
|
77
|
-
return createEmptyCodeGraph(this.projectPath ?? '');
|
|
78
|
-
}
|
|
79
|
-
return deserializeCodeGraphSnapshot(snapshot, this.projectPath ?? '');
|
|
80
|
-
}
|
|
81
|
-
async deleteProject() {
|
|
82
|
-
this.ensureInitialized();
|
|
83
|
-
await this.runStatement('MATCH (s:CodeMapSnapshot) DETACH DELETE s');
|
|
84
|
-
}
|
|
85
|
-
async updateModule(module) {
|
|
86
|
-
this.ensureInitialized();
|
|
87
|
-
const graph = await this.loadCodeGraph();
|
|
88
|
-
await this.saveCodeGraph(upsertModuleInGraph(graph, module));
|
|
89
|
-
}
|
|
90
|
-
async deleteModule(moduleId) {
|
|
91
|
-
this.ensureInitialized();
|
|
92
|
-
const graph = await this.loadCodeGraph();
|
|
93
|
-
await this.saveCodeGraph(deleteModuleFromGraph(graph, moduleId));
|
|
94
|
-
}
|
|
95
|
-
async findModuleById(id) {
|
|
96
|
-
this.ensureInitialized();
|
|
97
|
-
const graph = await this.loadCodeGraph();
|
|
98
|
-
return graph.modules.find(module => module.id === id) ?? null;
|
|
99
|
-
}
|
|
100
|
-
async findModulesByPath(path) {
|
|
101
|
-
this.ensureInitialized();
|
|
102
|
-
const graph = await this.loadCodeGraph();
|
|
103
|
-
return graph.modules.filter(module => module.path.includes(path));
|
|
104
|
-
}
|
|
105
|
-
async findSymbolByName(name) {
|
|
106
|
-
this.ensureInitialized();
|
|
107
|
-
const graph = await this.loadCodeGraph();
|
|
108
|
-
return graph.symbols.filter(symbol => symbol.name.includes(name));
|
|
109
|
-
}
|
|
110
|
-
async findSymbolById(id) {
|
|
111
|
-
this.ensureInitialized();
|
|
112
|
-
const graph = await this.loadCodeGraph();
|
|
113
|
-
return graph.symbols.find(symbol => symbol.id === id) ?? null;
|
|
114
|
-
}
|
|
115
|
-
async findDependencies(moduleId) {
|
|
116
|
-
this.ensureInitialized();
|
|
117
|
-
return findDependenciesInGraph(await this.loadCodeGraph(), moduleId);
|
|
118
|
-
}
|
|
119
|
-
async findDependents(moduleId) {
|
|
120
|
-
this.ensureInitialized();
|
|
121
|
-
return findDependentsInGraph(await this.loadCodeGraph(), moduleId);
|
|
122
|
-
}
|
|
123
|
-
async findCallers(functionId) {
|
|
124
|
-
this.ensureInitialized();
|
|
125
|
-
return findCallersInGraph(await this.loadCodeGraph(), functionId);
|
|
126
|
-
}
|
|
127
|
-
async findCallees(functionId) {
|
|
128
|
-
this.ensureInitialized();
|
|
129
|
-
return findCalleesInGraph(await this.loadCodeGraph(), functionId);
|
|
130
|
-
}
|
|
131
|
-
async detectCycles() {
|
|
132
|
-
this.ensureInitialized();
|
|
133
|
-
return detectCyclesInGraph(await this.loadCodeGraph());
|
|
134
|
-
}
|
|
135
|
-
async calculateImpact(moduleId, depth) {
|
|
136
|
-
this.ensureInitialized();
|
|
137
|
-
return calculateImpactInGraph(await this.loadCodeGraph(), moduleId, depth);
|
|
138
|
-
}
|
|
139
|
-
async getStatistics() {
|
|
140
|
-
this.ensureInitialized();
|
|
141
|
-
return getProjectStatisticsFromGraph(await this.loadCodeGraph());
|
|
142
|
-
}
|
|
143
|
-
getDriver() {
|
|
144
|
-
if (!this.driver) {
|
|
145
|
-
throw new StorageError('Neo4j driver not initialized', 'NEO4J_DRIVER_NOT_READY');
|
|
146
|
-
}
|
|
147
|
-
return this.driver;
|
|
148
|
-
}
|
|
149
|
-
async runStatement(query, params) {
|
|
150
|
-
const session = this.getDriver().session();
|
|
151
|
-
try {
|
|
152
|
-
return await session.run(query, params);
|
|
153
|
-
}
|
|
154
|
-
catch (error) {
|
|
155
|
-
throw new StorageError('Failed to execute Neo4j query', 'NEO4J_QUERY_FAILED', error);
|
|
156
|
-
}
|
|
157
|
-
finally {
|
|
158
|
-
await session.close();
|
|
159
|
-
}
|
|
160
|
-
}
|
|
161
|
-
}
|
|
162
|
-
//# sourceMappingURL=Neo4jStorage.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Neo4jStorage.js","sourceRoot":"","sources":["../../../../src/infrastructure/storage/adapters/Neo4jStorage.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,210 +0,0 @@
|
|
|
1
|
-
import { GitAnalyzer, HeatScore } from './git-analyzer';
|
|
2
|
-
/**
|
|
3
|
-
* File metadata interface (flat structure for compatibility)
|
|
4
|
-
*/
|
|
5
|
-
export interface FileMeta {
|
|
6
|
-
/** Creation date, format: 2024-01 */
|
|
7
|
-
since?: string;
|
|
8
|
-
/** Owner/team */
|
|
9
|
-
owner?: string;
|
|
10
|
-
/** Whether stable */
|
|
11
|
-
stable?: boolean;
|
|
12
|
-
/** Reason for existence */
|
|
13
|
-
why?: string;
|
|
14
|
-
/** Key dependencies */
|
|
15
|
-
deps?: string[];
|
|
16
|
-
}
|
|
17
|
-
/**
|
|
18
|
-
* File header metadata interface (nested structure)
|
|
19
|
-
* @deprecated Use FileMeta instead
|
|
20
|
-
*/
|
|
21
|
-
export interface FileHeaderMeta {
|
|
22
|
-
/** Creation date, format: 2024-01 */
|
|
23
|
-
since?: string;
|
|
24
|
-
/** Owner/team */
|
|
25
|
-
owner?: string;
|
|
26
|
-
/** Whether stable */
|
|
27
|
-
stable?: boolean;
|
|
28
|
-
}
|
|
29
|
-
/**
|
|
30
|
-
* File header parsing result interface
|
|
31
|
-
*/
|
|
32
|
-
export interface FileHeader {
|
|
33
|
-
/** META metadata */
|
|
34
|
-
meta?: FileHeaderMeta;
|
|
35
|
-
/** Reason for existence */
|
|
36
|
-
why?: string;
|
|
37
|
-
/** Key dependencies */
|
|
38
|
-
deps?: string[];
|
|
39
|
-
}
|
|
40
|
-
/**
|
|
41
|
-
* AI Feed entry interface
|
|
42
|
-
*/
|
|
43
|
-
export interface AIFeed {
|
|
44
|
-
/** File path */
|
|
45
|
-
file: string;
|
|
46
|
-
/** Dependency complexity (out-degree + in-degree) */
|
|
47
|
-
gravity: number;
|
|
48
|
-
/** Heat score */
|
|
49
|
-
heat: HeatScore;
|
|
50
|
-
/** Metadata */
|
|
51
|
-
meta: FileHeaderMeta & {
|
|
52
|
-
why?: string;
|
|
53
|
-
};
|
|
54
|
-
/** Dependencies */
|
|
55
|
-
deps: string[];
|
|
56
|
-
/** Files that depend on this */
|
|
57
|
-
dependents: string[];
|
|
58
|
-
}
|
|
59
|
-
/**
|
|
60
|
-
* File header comment scanner
|
|
61
|
-
* Scans [META]/[WHY]/[DEPS] comments at the top of files
|
|
62
|
-
*/
|
|
63
|
-
export declare class FileHeaderScanner {
|
|
64
|
-
/**
|
|
65
|
-
* Scan file header comments
|
|
66
|
-
* Only reads first 10 lines of the file
|
|
67
|
-
*
|
|
68
|
-
* @param filePath - Full file path
|
|
69
|
-
* @returns FileMeta parsing result
|
|
70
|
-
*/
|
|
71
|
-
scan(filePath: string): FileMeta;
|
|
72
|
-
/**
|
|
73
|
-
* Parse file header content string (public for testing)
|
|
74
|
-
* Alias for parseHeaderContent for backward compatibility
|
|
75
|
-
*
|
|
76
|
-
* @param header - File header content (first 10 lines as string)
|
|
77
|
-
* @returns FileMeta parsing result with flat structure
|
|
78
|
-
*/
|
|
79
|
-
parseHeader(header: string): FileMeta;
|
|
80
|
-
/**
|
|
81
|
-
* Parse file header content (public for testing)
|
|
82
|
-
* Returns nested structure for backward compatibility with tests
|
|
83
|
-
*
|
|
84
|
-
* @param header - File header content (first 10 lines)
|
|
85
|
-
* @returns FileHeader parsing result with nested meta
|
|
86
|
-
*/
|
|
87
|
-
parseHeaderContent(header: string): FileHeader & FileMeta;
|
|
88
|
-
/**
|
|
89
|
-
* Validate file header completeness
|
|
90
|
-
* Used by CI gateway
|
|
91
|
-
*
|
|
92
|
-
* @param filePath - File path
|
|
93
|
-
* @returns Validation result
|
|
94
|
-
*/
|
|
95
|
-
validate(filePath: string): {
|
|
96
|
-
valid: boolean;
|
|
97
|
-
missing: string[];
|
|
98
|
-
};
|
|
99
|
-
}
|
|
100
|
-
/**
|
|
101
|
-
* AI Feed Generator class
|
|
102
|
-
* Generates structured data for AI consumption
|
|
103
|
-
*/
|
|
104
|
-
export declare class AIFeedGenerator {
|
|
105
|
-
private gitAnalyzer;
|
|
106
|
-
private headerScanner;
|
|
107
|
-
/**
|
|
108
|
-
* Constructor
|
|
109
|
-
*
|
|
110
|
-
* @param gitAnalyzer - GitAnalyzer instance
|
|
111
|
-
*/
|
|
112
|
-
constructor(gitAnalyzer: GitAnalyzer);
|
|
113
|
-
/**
|
|
114
|
-
* Generate AI feed
|
|
115
|
-
* Integrated into codemap generate command
|
|
116
|
-
*
|
|
117
|
-
* @param projectRoot - Project root directory
|
|
118
|
-
* @param options - Generation options
|
|
119
|
-
* @param options.includeGitHistory - Whether to include Git history analysis (default: false)
|
|
120
|
-
* @returns AIFeed[] feed list (sorted by gravity descending)
|
|
121
|
-
*/
|
|
122
|
-
generate(projectRoot: string, options?: {
|
|
123
|
-
includeGitHistory?: boolean;
|
|
124
|
-
}): Promise<AIFeed[]>;
|
|
125
|
-
/**
|
|
126
|
-
* Output AI feed file
|
|
127
|
-
*
|
|
128
|
-
* @param feed - AI feed list
|
|
129
|
-
* @param outputPath - Output file path
|
|
130
|
-
*/
|
|
131
|
-
writeFeedFile(feed: AIFeed[], outputPath: string): void;
|
|
132
|
-
/**
|
|
133
|
-
* Scan Git history for heat score
|
|
134
|
-
*
|
|
135
|
-
* @param filePath - File path (relative to projectRoot)
|
|
136
|
-
* @param projectRoot - Project root directory
|
|
137
|
-
* @returns HeatScore heat score
|
|
138
|
-
*/
|
|
139
|
-
private scanGitHistory;
|
|
140
|
-
/**
|
|
141
|
-
* Calculate dependencies
|
|
142
|
-
* Scan import statements, build dependency graph
|
|
143
|
-
*
|
|
144
|
-
* @param feed - AI feed list
|
|
145
|
-
* @param projectRoot - Project root directory
|
|
146
|
-
*/
|
|
147
|
-
private calculateDependencies;
|
|
148
|
-
/**
|
|
149
|
-
* Resolve import path to path relative to project root
|
|
150
|
-
*
|
|
151
|
-
* @param currentFile - Current file path
|
|
152
|
-
* @param importPath - Import path from import statement
|
|
153
|
-
* @returns Resolved path, or null if cannot resolve
|
|
154
|
-
*/
|
|
155
|
-
private resolveImportPath;
|
|
156
|
-
/**
|
|
157
|
-
* Scan file header (convenience method)
|
|
158
|
-
* Delegates to FileHeaderScanner
|
|
159
|
-
*
|
|
160
|
-
* @param filePath - File path
|
|
161
|
-
* @returns FileMeta file metadata
|
|
162
|
-
*/
|
|
163
|
-
scanFileHeader(filePath: string): FileMeta;
|
|
164
|
-
/**
|
|
165
|
-
* Calculate scores for a single feed item
|
|
166
|
-
* Returns normalized scores
|
|
167
|
-
*
|
|
168
|
-
* @param feed - AI feed item
|
|
169
|
-
* @param maxGravity - Maximum gravity value for normalization
|
|
170
|
-
* @param maxImpact - Maximum impact value for normalization
|
|
171
|
-
* @returns Object with gravity, impact, heat scores
|
|
172
|
-
*/
|
|
173
|
-
calculateScores(feed: AIFeed, maxGravity?: number, maxImpact?: number): {
|
|
174
|
-
gravity: number;
|
|
175
|
-
impact: number;
|
|
176
|
-
heat: number;
|
|
177
|
-
};
|
|
178
|
-
/**
|
|
179
|
-
* Calculate file risk level
|
|
180
|
-
* Based on REQUIREMENTS section 8.6 risk scoring formula
|
|
181
|
-
*
|
|
182
|
-
* @param feed - Single file AI feed
|
|
183
|
-
* @returns Risk level: 'high' | 'medium' | 'low'
|
|
184
|
-
*/
|
|
185
|
-
calculateRisk(feed: AIFeed): 'high' | 'medium' | 'low';
|
|
186
|
-
/**
|
|
187
|
-
* Batch calculate risk levels
|
|
188
|
-
*
|
|
189
|
-
* @param feedList - AI feed list
|
|
190
|
-
* @returns Map<file path, risk level>
|
|
191
|
-
*/
|
|
192
|
-
calculateRisks(feedList: AIFeed[]): Map<string, 'high' | 'medium' | 'low'>;
|
|
193
|
-
/**
|
|
194
|
-
* Get high risk file list
|
|
195
|
-
*
|
|
196
|
-
* @param feedList - AI feed list
|
|
197
|
-
* @returns High risk file list
|
|
198
|
-
*/
|
|
199
|
-
getHighRiskFiles(feedList: AIFeed[]): AIFeed[];
|
|
200
|
-
/**
|
|
201
|
-
* Generate JSON format AI feed
|
|
202
|
-
* For programmatic processing
|
|
203
|
-
*
|
|
204
|
-
* @param feed - AI feed list
|
|
205
|
-
* @param outputPath - Output file path
|
|
206
|
-
*/
|
|
207
|
-
writeFeedFileJson(feed: AIFeed[], outputPath: string): void;
|
|
208
|
-
}
|
|
209
|
-
export type { HeatScore };
|
|
210
|
-
//# sourceMappingURL=ai-feed-generator.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ai-feed-generator.d.ts","sourceRoot":"","sources":["../../src/orchestrator/ai-feed-generator.ts"],"names":[],"mappings":"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"}
|