@lorrylurui/code-intelligence-mcp 1.0.1 → 1.0.2

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/README.md CHANGED
@@ -79,6 +79,24 @@ docker compose ps
79
79
  mysql -u root -p code_intelligence < sql/schema.sql
80
80
  ```
81
81
 
82
+ ### 自定义表名(第三方项目集成)
83
+
84
+ 若需使用不同的表名,可通过环境变量配置:
85
+
86
+ ```bash
87
+ # 设置自定义表名
88
+ export MYSQL_SYMBOLS_TABLE=my_project_symbols
89
+
90
+ # 然后server代码内部执行建表(表名会在代码中动态替换)
91
+ mysql -u root -p code_intelligence -e "$(node -e \"import('./dist/db/schema.js').then(m => console.log(m.getSymbolsTableSQL()))\")"
92
+ ```
93
+
94
+ 或在 `.env` 中配置:
95
+
96
+ ```env
97
+ MYSQL_SYMBOLS_TABLE=my_project_symbols
98
+ ```
99
+
82
100
  ## 4) 本地运行
83
101
 
84
102
  ### 普通开发(热更新)
@@ -239,7 +257,8 @@ npm run embedding:dev
239
257
  Run with:
240
258
 
241
259
  ````bash
242
- npx code-intelligence-mcp
260
+ - 脚本 cli 启动:npx code-intelligence-mcp(走mcp不执行)
261
+ - 给项目做索引,运行:npx code-intelligence-index, 项目根目录取配置或者cwd(重要,首次以及后续需要时执行:新项目必须执行一次建表)
243
262
  ---
244
263
 
245
264
  ### MCP 配置(核心)
@@ -172,7 +172,7 @@ async function main() {
172
172
  return [];
173
173
  const [dbRows] = await mysqlPool.query(`
174
174
  SELECT id, name, type, path, CAST(meta AS CHAR) AS meta, embedding
175
- FROM symbols
175
+ FROM ${env.mysqlSymbolsTable}
176
176
  WHERE type = ? AND embedding IS NOT NULL
177
177
  ORDER BY usage_count DESC
178
178
  LIMIT ?
@@ -8,6 +8,8 @@ export const env = {
8
8
  mysqlUser: process.env.MYSQL_USER ?? "root",
9
9
  mysqlPassword: process.env.MYSQL_PASSWORD ?? "",
10
10
  mysqlDatabase: process.env.MYSQL_DATABASE ?? "code_intelligence",
11
+ /** symbols 表名,可通过 MYSQL_SYMBOLS_TABLE 环境变量配置 */
12
+ mysqlSymbolsTable: process.env.MYSQL_SYMBOLS_TABLE ?? "symbols",
11
13
  /** Phase 5:指向 Python FastAPI 嵌入服务根 URL,如 http://127.0.0.1:8765 */
12
14
  embeddingServiceUrl: (process.env.EMBEDDING_SERVICE_URL ?? "").trim()
13
15
  };
@@ -0,0 +1,29 @@
1
+ /**
2
+ * 动态生成数据库表结构 SQL,表名可通过环境变量配置
3
+ */
4
+ import { env } from '../config/env.js';
5
+ /** 获取 symbols 表的建表 SQL */
6
+ export function getSymbolsTableSQL() {
7
+ const tableName = env.mysqlSymbolsTable;
8
+ return `CREATE TABLE IF NOT EXISTS ${tableName} (
9
+ id INT PRIMARY KEY AUTO_INCREMENT,
10
+ name VARCHAR(255) NOT NULL,
11
+ type ENUM('component', 'util', 'selector', 'type') NOT NULL,
12
+ category VARCHAR(255) NULL,
13
+ path TEXT NOT NULL,
14
+ description TEXT NULL,
15
+ content MEDIUMTEXT NULL,
16
+ meta JSON NULL,
17
+ usage_count INT NOT NULL DEFAULT 0,
18
+ embedding JSON NULL COMMENT 'Phase 5: L2-normalized vector from Python embedding service (e.g. 384-dim MiniLM)',
19
+ insert_user VARCHAR(255) NOT NULL DEFAULT 'LorryIsLuRui',
20
+ updated_user VARCHAR(255) NOT NULL DEFAULT 'LorryIsLuRui',
21
+ created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
22
+ updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
23
+ UNIQUE KEY uk_symbols_path_name (path(512), name(255))
24
+ )`;
25
+ }
26
+ /** 获取所有建表 SQL(可一次性执行) */
27
+ export function getAllTableSQLs() {
28
+ return [getSymbolsTableSQL()];
29
+ }
@@ -1,3 +1,5 @@
1
+ import { env } from '../config/env.js';
2
+ import { getSymbolsTableSQL } from '../db/schema.js';
1
3
  /**
2
4
  * 依赖表上 `(path, name)` 唯一键:新行插入,已存在则更新类型/描述/内容与 meta;**不**修改 `usage_count`。
3
5
  * @param rows 来自 `indexProject`;空数组时立即返回,不开启事务。
@@ -8,11 +10,12 @@ export async function upsertSymbols(pool, rows, embeddings) {
8
10
  if (rows.length === 0)
9
11
  return;
10
12
  if (embeddings && embeddings.length !== rows.length) {
11
- throw new Error("upsertSymbols: embeddings length must match rows");
13
+ throw new Error('upsertSymbols: embeddings length must match rows');
12
14
  }
13
- const actor = process.env.GITHUB_USERNAME?.trim() || "LorryIsLuRui";
15
+ const actor = process.env.GITHUB_USERNAME?.trim() || 'LorryIsLuRui';
16
+ await pool.query(getSymbolsTableSQL()); // 确保表存在
14
17
  const sql = `
15
- INSERT INTO symbols (name, type, category, path, description, content, meta, insert_user, updated_user, embedding)
18
+ INSERT INTO ${env.mysqlSymbolsTable} (name, type, category, path, description, content, meta, insert_user, updated_user, embedding)
16
19
  VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
17
20
  ON DUPLICATE KEY UPDATE
18
21
  type = VALUES(type),
@@ -40,7 +43,7 @@ export async function upsertSymbols(pool, rows, embeddings) {
40
43
  JSON.stringify(r.meta),
41
44
  actor,
42
45
  actor,
43
- embJson
46
+ embJson,
44
47
  ]);
45
48
  }
46
49
  await conn.commit();
@@ -97,7 +97,7 @@ export class SymbolRepository {
97
97
  const params = [`%${query}%`];
98
98
  let sql = `
99
99
  SELECT id, name, type, category, path, description, content, CAST(meta AS CHAR) AS meta, usage_count, created_at
100
- FROM symbols
100
+ FROM ${env.mysqlSymbolsTable}
101
101
  WHERE (name LIKE ? OR description LIKE ?)
102
102
  `;
103
103
  params.push(`%${query}%`);
@@ -129,7 +129,7 @@ export class SymbolRepository {
129
129
  }
130
130
  let sql = `
131
131
  SELECT id, name, type, category, path, description, content, CAST(meta AS CHAR) AS meta, usage_count, created_at, embedding
132
- FROM symbols
132
+ FROM ${env.mysqlSymbolsTable}
133
133
  WHERE embedding IS NOT NULL
134
134
  `;
135
135
  const params = [];
@@ -158,7 +158,7 @@ export class SymbolRepository {
158
158
  }
159
159
  const [rows] = await this.pool.query(`
160
160
  SELECT id, name, type, category, path, description, content, CAST(meta AS CHAR) AS meta, usage_count, created_at
161
- FROM symbols
161
+ FROM ${env.mysqlSymbolsTable}
162
162
  WHERE name = ?
163
163
  LIMIT 1
164
164
  `, [name]);
@@ -197,7 +197,7 @@ export class SymbolRepository {
197
197
  const params = [];
198
198
  let sql = `
199
199
  SELECT id, name, type, category, path, description, content, CAST(meta AS CHAR) AS meta, usage_count, created_at
200
- FROM symbols
200
+ FROM ${env.mysqlSymbolsTable}
201
201
  WHERE 1 = 1
202
202
  `;
203
203
  if (type) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lorrylurui/code-intelligence-mcp",
3
- "version": "1.0.1",
3
+ "version": "1.0.2",
4
4
  "private": false,
5
5
  "description": "MCP server for code intelligence with symbol search and reusable code recommendation",
6
6
  "type": "module",
@@ -9,7 +9,8 @@
9
9
  "dist"
10
10
  ],
11
11
  "bin": {
12
- "code-intelligence-mcp": "./dist/index.js"
12
+ "code-intelligence-mcp": "./dist/index.js",
13
+ "code-intelligence-index": "./dist/cli/index-codebase.js"
13
14
  },
14
15
  "scripts": {
15
16
  "dev": "tsx watch --clear-screen=false --exclude node_modules --exclude dist src/index.ts",