@gird/ccli 2.20.0 → 2.21.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/README.md +2 -0
- package/dist/agent/ai.js.map +1 -1
- package/dist/agent/providers/anthropic.js +112 -4
- package/dist/agent/providers/anthropic.js.map +1 -1
- package/dist/agent/rag/db.js +142 -0
- package/dist/agent/rag/db.js.map +1 -0
- package/dist/agent/rag/embedding.js +135 -0
- package/dist/agent/rag/embedding.js.map +1 -0
- package/dist/agent/rag/indexer.js +104 -0
- package/dist/agent/rag/indexer.js.map +1 -0
- package/dist/agent/rag/parser.js +75 -0
- package/dist/agent/rag/parser.js.map +1 -0
- package/dist/agent/rag/search.js +47 -0
- package/dist/agent/rag/search.js.map +1 -0
- package/dist/cli/args/index.js +8 -0
- package/dist/cli/args/index.js.map +1 -1
- package/dist/cli/run/index.js +8 -5
- package/dist/cli/run/index.js.map +1 -1
- package/dist/cli/run/task.js +168 -31
- package/dist/cli/run/task.js.map +1 -1
- package/dist/cli/slash/config/account.js +2 -0
- package/dist/cli/slash/config/account.js.map +1 -1
- package/dist/cli/slash/index.js +8 -0
- package/dist/cli/slash/index.js.map +1 -1
- package/dist/cli/slash/system/help.js +2 -0
- package/dist/cli/slash/system/help.js.map +1 -1
- package/dist/cli/slash/system/indexer.js +25 -0
- package/dist/cli/slash/system/indexer.js.map +1 -0
- package/dist/cli/slash/system/upgrade.js +13 -0
- package/dist/cli/slash/system/upgrade.js.map +1 -0
- package/dist/cli/upgrade.js +90 -0
- package/dist/cli/upgrade.js.map +1 -0
- package/dist/config/config.js +137 -4
- package/dist/config/config.js.map +1 -1
- package/dist/config/project-context.js +135 -0
- package/dist/config/project-context.js.map +1 -0
- package/dist/harness/index.js +8 -2
- package/dist/harness/index.js.map +1 -1
- package/dist/index.js +12 -0
- package/dist/index.js.map +1 -1
- package/dist/server/webui-content.js +2 -0
- package/dist/server/webui-content.js.map +1 -0
- package/dist/server/webui.js +15 -4
- package/dist/server/webui.js.map +1 -1
- package/dist/tools/fs/list-dir.js +75 -25
- package/dist/tools/fs/list-dir.js.map +1 -1
- package/dist/tools/index.js +2 -0
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/rag/search.js +65 -0
- package/dist/tools/rag/search.js.map +1 -0
- package/dist/tools/shared.js.map +1 -1
- package/package.json +3 -1
package/README.md
CHANGED
|
@@ -40,6 +40,8 @@ ccli --remote ssh://user@host # 使用指定的 SSH 远程连接进行
|
|
|
40
40
|
|
|
41
41
|
对话里输入以 `#` 开头的一行,可把内容**追加进项目 `CCLI.md` 并立即生效**(不发给 AI),下次启动自动带上,例如 `# 本项目用 pnpm`。输入 `/memories` 可查看当前会话实际注入了哪些记忆(按层级列出)。
|
|
42
42
|
|
|
43
|
+
**项目目录结构**:CCLI 构造 system prompt 时,会自动附带当前工作目录的紧凑 2 级目录树(隐藏目录折叠、跳过 `node_modules/.git/dist/.ccli`)。这让模型在回答「分析这个项目」时,先看到全局结构而不是只钻进某个隐藏配置目录。
|
|
44
|
+
|
|
43
45
|
**技能(自定义提示词模板)**:在 `.ccli/skills/`(项目)或 `~/.ccli/skills/`(用户)放置 `*.md` 文件即可定义一个「技能」——一段可复用的提示词,支持 `$ARGUMENTS` 参数占位。用 `/skills` 列出、`/skill <名称> [参数]` 调用(会展开成一条消息交给 AI)。md 可带 `name` / `description` 的 YAML frontmatter;同名时项目技能覆盖用户技能。技能也可以是**目录技能包** `<名>/SKILL.md` + 附属文件(脚本/模板/资料,调用时告知模型路径供 `read_file`),嵌套 `SKILL.md` 成为**子技能**。除了手动 `/skill`,**模型也会在意图匹配时自动调用技能**(frontmatter 加 `disableModelInvocation: true` 可只保留手动调用)。
|
|
44
46
|
|
|
45
47
|
除了手动 `/skill`,**模型也会在意图匹配时自动调用技能**(frontmatter 加 `disableModelInvocation: true` 可只保留手动调用)。
|
package/dist/agent/ai.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ai.js","sourceRoot":"","sources":["../../src/agent/ai.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"ai.js","sourceRoot":"","sources":["../../src/agent/ai.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AA6ErD,sBAAsB;AACtB,MAAM,UAAU,cAAc,CAAC,MAAc;IACzC,IAAI,MAAM,CAAC,QAAQ,KAAK,WAAW,EAAE,CAAC;QAClC,OAAO,IAAI,eAAe,CAAC,MAAM,CAAC,CAAC;IACvC,CAAC;IACD,IAAI,MAAM,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAC/B,OAAO,IAAI,YAAY,CAAC,MAAM,CAAC,CAAC;IACpC,CAAC;IACD,OAAO,IAAI,YAAY,CAAC,MAAM,CAAC,CAAC;AACpC,CAAC;AAID;;;;;;;GAOG;AACH,OAAO,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAC"}
|
|
@@ -4,6 +4,7 @@ import { projectToolPairedMessages } from '../tool-projection.js';
|
|
|
4
4
|
export class AnthropicClient {
|
|
5
5
|
client;
|
|
6
6
|
model;
|
|
7
|
+
promptCache;
|
|
7
8
|
/** 保存 Anthropic SDK 实例;baseURL 仅在用户配置代理或兼容网关时生效。 */
|
|
8
9
|
constructor(config) {
|
|
9
10
|
this.client = new Anthropic({
|
|
@@ -11,6 +12,9 @@ export class AnthropicClient {
|
|
|
11
12
|
baseURL: config.baseURL,
|
|
12
13
|
});
|
|
13
14
|
this.model = config.model;
|
|
15
|
+
// Anthropic Prompt Cache 默认开启;Claude 2 / instant 等老模型不支持,关闭
|
|
16
|
+
this.promptCache =
|
|
17
|
+
config.promptCache ?? !/claude-2|claude-instant/i.test(config.model);
|
|
14
18
|
}
|
|
15
19
|
/** 返回当前 Claude 模型名,保持与 OpenAIClient 的统一接口。 */
|
|
16
20
|
getModel() {
|
|
@@ -46,7 +50,7 @@ export class AnthropicClient {
|
|
|
46
50
|
* 再把流式事件重新聚合成 CCLI 内部统一的 AssistantTurn。
|
|
47
51
|
*/
|
|
48
52
|
async chat(messages, onDelta, options, onReasoning, onToolArgumentDelta) {
|
|
49
|
-
const { system, messages: anthropicMessages } = toAnthropicMessages(messages);
|
|
53
|
+
const { system, messages: anthropicMessages } = toAnthropicMessages(messages, this.promptCache);
|
|
50
54
|
const tools = toAnthropicTools(options?.allowedTools);
|
|
51
55
|
const stream = await this.client.messages.create({
|
|
52
56
|
model: this.model,
|
|
@@ -69,11 +73,16 @@ export class AnthropicClient {
|
|
|
69
73
|
// Anthropic 流式协议:input_tokens 只出现在 message_start 事件,
|
|
70
74
|
// message_delta 只带 output_tokens——两处都要读才能拼出完整 usage。
|
|
71
75
|
let inputTokens = 0;
|
|
76
|
+
let cacheCreationTokens = 0;
|
|
77
|
+
let cacheReadTokens = 0;
|
|
72
78
|
for await (const event of stream) {
|
|
73
79
|
if (event.type === 'message_start') {
|
|
74
80
|
const u = event.message?.usage;
|
|
75
|
-
if (u)
|
|
81
|
+
if (u) {
|
|
76
82
|
inputTokens = u.input_tokens ?? 0;
|
|
83
|
+
cacheCreationTokens = u.cache_creation_input_tokens ?? 0;
|
|
84
|
+
cacheReadTokens = u.cache_read_input_tokens ?? 0;
|
|
85
|
+
}
|
|
77
86
|
}
|
|
78
87
|
else if (event.type === 'content_block_delta') {
|
|
79
88
|
if (event.delta.type === 'text_delta') {
|
|
@@ -112,6 +121,12 @@ export class AnthropicClient {
|
|
|
112
121
|
completionTokens,
|
|
113
122
|
totalTokens: promptTokens + completionTokens,
|
|
114
123
|
};
|
|
124
|
+
if (cacheCreationTokens > 0) {
|
|
125
|
+
usage.cacheCreationTokens = cacheCreationTokens;
|
|
126
|
+
}
|
|
127
|
+
if (cacheReadTokens > 0) {
|
|
128
|
+
usage.cacheReadTokens = cacheReadTokens;
|
|
129
|
+
}
|
|
115
130
|
}
|
|
116
131
|
}
|
|
117
132
|
}
|
|
@@ -128,7 +143,7 @@ export class AnthropicClient {
|
|
|
128
143
|
* Anthropic 不接受 `role:"system"` 混在 messages 里,也要求 tool_result 作为 user
|
|
129
144
|
* 内容块出现,所以这里集中做一次协议投影,避免业务层到处写 provider 分支。
|
|
130
145
|
*/
|
|
131
|
-
export function toAnthropicMessages(messages) {
|
|
146
|
+
export function toAnthropicMessages(messages, promptCache = false) {
|
|
132
147
|
const projectedMessages = projectToolPairedMessages(messages);
|
|
133
148
|
const systemParts = [];
|
|
134
149
|
const anthropicMessages = [];
|
|
@@ -213,7 +228,100 @@ export function toAnthropicMessages(messages) {
|
|
|
213
228
|
}
|
|
214
229
|
}
|
|
215
230
|
}
|
|
216
|
-
|
|
231
|
+
// system prompt:开启缓存时转成 block 数组并在最后一个 block 上标记 cache_control
|
|
232
|
+
const joinedSystem = systemParts.join('\n\n');
|
|
233
|
+
const system = promptCache && systemParts.length > 0
|
|
234
|
+
? systemParts.map((text, i) => ({
|
|
235
|
+
type: 'text',
|
|
236
|
+
text,
|
|
237
|
+
...(i === systemParts.length - 1
|
|
238
|
+
? { cache_control: { type: 'ephemeral' } }
|
|
239
|
+
: {}),
|
|
240
|
+
}))
|
|
241
|
+
: joinedSystem;
|
|
242
|
+
// 给历史上下文里较长且非最后的 user 消息加 cache_control。
|
|
243
|
+
// Anthropic 限制整段请求最多 4 个 cache_control 标记;system 已用 1 个,
|
|
244
|
+
// 剩余预算留给长 user 消息(通常是最划算的回退点)。
|
|
245
|
+
const userIndices = [];
|
|
246
|
+
for (let i = 0; i < anthropicMessages.length; i++) {
|
|
247
|
+
if (anthropicMessages[i].role === 'user') {
|
|
248
|
+
userIndices.push(i);
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
const systemCacheCount = promptCache && systemParts.length > 0 ? 1 : 0;
|
|
252
|
+
const remainingCacheBudget = 4 - systemCacheCount;
|
|
253
|
+
let applied = 0;
|
|
254
|
+
for (let ui = 0; ui < userIndices.length && applied < remainingCacheBudget; ui++) {
|
|
255
|
+
// 当前用户输入是最后一条 user 消息,不需要缓存
|
|
256
|
+
if (ui === userIndices.length - 1)
|
|
257
|
+
continue;
|
|
258
|
+
const idx = userIndices[ui];
|
|
259
|
+
const msg = anthropicMessages[idx];
|
|
260
|
+
const textLength = estimateUserMessageTextLength(msg.content);
|
|
261
|
+
if (textLength <= 1024)
|
|
262
|
+
continue;
|
|
263
|
+
const content = msg.content;
|
|
264
|
+
if (typeof content === 'string') {
|
|
265
|
+
anthropicMessages[idx] = {
|
|
266
|
+
role: 'user',
|
|
267
|
+
content: [
|
|
268
|
+
{
|
|
269
|
+
type: 'text',
|
|
270
|
+
text: content,
|
|
271
|
+
cache_control: { type: 'ephemeral' },
|
|
272
|
+
},
|
|
273
|
+
],
|
|
274
|
+
};
|
|
275
|
+
}
|
|
276
|
+
else if (Array.isArray(content)) {
|
|
277
|
+
const lastTextIdx = content.findLastIndex((b) => b.type === 'text');
|
|
278
|
+
if (lastTextIdx >= 0) {
|
|
279
|
+
const newContent = content.slice();
|
|
280
|
+
const block = content[lastTextIdx];
|
|
281
|
+
newContent[lastTextIdx] = {
|
|
282
|
+
type: 'text',
|
|
283
|
+
text: block.text,
|
|
284
|
+
cache_control: { type: 'ephemeral' },
|
|
285
|
+
};
|
|
286
|
+
anthropicMessages[idx] = {
|
|
287
|
+
role: 'user',
|
|
288
|
+
content: newContent,
|
|
289
|
+
};
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
applied++;
|
|
293
|
+
}
|
|
294
|
+
return { system, messages: anthropicMessages };
|
|
295
|
+
}
|
|
296
|
+
/** 估算 user 消息里的文本长度,用于决定是否值得加 cache_control。 */
|
|
297
|
+
function estimateUserMessageTextLength(content) {
|
|
298
|
+
if (typeof content === 'string')
|
|
299
|
+
return content.length;
|
|
300
|
+
let length = 0;
|
|
301
|
+
for (const block of content) {
|
|
302
|
+
if (block.type === 'text') {
|
|
303
|
+
length += block.text.length;
|
|
304
|
+
}
|
|
305
|
+
else if (block.type === 'tool_result') {
|
|
306
|
+
const c = block.content;
|
|
307
|
+
if (typeof c === 'string') {
|
|
308
|
+
length += c.length;
|
|
309
|
+
}
|
|
310
|
+
else if (Array.isArray(c)) {
|
|
311
|
+
for (const inner of c) {
|
|
312
|
+
if (typeof inner === 'object' &&
|
|
313
|
+
inner &&
|
|
314
|
+
inner.type === 'text') {
|
|
315
|
+
length += inner.text?.length ?? 0;
|
|
316
|
+
}
|
|
317
|
+
else if (typeof inner === 'string') {
|
|
318
|
+
length += inner.length;
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
}
|
|
324
|
+
return length;
|
|
217
325
|
}
|
|
218
326
|
/** 把内部工具定义转成 Anthropic 的 tool 格式。
|
|
219
327
|
* 传 allowedNames 时只转换这些工具(与 OpenAI 路径一致)。 */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"anthropic.js","sourceRoot":"","sources":["../../../src/agent/providers/anthropic.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"anthropic.js","sourceRoot":"","sources":["../../../src/agent/providers/anthropic.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
import { DatabaseSync } from 'node:sqlite';
|
|
2
|
+
import { join } from 'node:path';
|
|
3
|
+
import { mkdirSync } from 'node:fs';
|
|
4
|
+
/**
|
|
5
|
+
* 初始化代码大纲 SQLite 数据库。
|
|
6
|
+
* 数据库存放在项目工作空间根目录的 .ccli/codebase.sqlite 中。
|
|
7
|
+
*/
|
|
8
|
+
export function initDb(workspacePath) {
|
|
9
|
+
const ccliDir = join(workspacePath, '.ccli');
|
|
10
|
+
mkdirSync(ccliDir, { recursive: true });
|
|
11
|
+
const dbPath = join(ccliDir, 'codebase.sqlite');
|
|
12
|
+
const db = new DatabaseSync(dbPath);
|
|
13
|
+
// 初始化数据表
|
|
14
|
+
db.exec(`
|
|
15
|
+
CREATE TABLE IF NOT EXISTS files (
|
|
16
|
+
path TEXT PRIMARY KEY,
|
|
17
|
+
mtime INTEGER NOT NULL
|
|
18
|
+
);
|
|
19
|
+
`);
|
|
20
|
+
db.exec(`
|
|
21
|
+
CREATE TABLE IF NOT EXISTS symbols (
|
|
22
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
23
|
+
file_path TEXT NOT NULL,
|
|
24
|
+
name TEXT NOT NULL,
|
|
25
|
+
type TEXT NOT NULL,
|
|
26
|
+
start_line INTEGER NOT NULL,
|
|
27
|
+
end_line INTEGER NOT NULL,
|
|
28
|
+
FOREIGN KEY(file_path) REFERENCES files(path) ON DELETE CASCADE
|
|
29
|
+
);
|
|
30
|
+
`);
|
|
31
|
+
// 动态增加向量与哈希缓存字段(用于老表平滑升级)
|
|
32
|
+
try {
|
|
33
|
+
db.exec(`ALTER TABLE symbols ADD COLUMN content_hash TEXT;`);
|
|
34
|
+
}
|
|
35
|
+
catch { }
|
|
36
|
+
try {
|
|
37
|
+
db.exec(`ALTER TABLE symbols ADD COLUMN embedding TEXT;`);
|
|
38
|
+
}
|
|
39
|
+
catch { }
|
|
40
|
+
// 创建索引加快符号名搜索和文件范围反查
|
|
41
|
+
db.exec(`
|
|
42
|
+
CREATE INDEX IF NOT EXISTS idx_symbols_name ON symbols(name);
|
|
43
|
+
CREATE INDEX IF NOT EXISTS idx_symbols_file ON symbols(file_path);
|
|
44
|
+
`);
|
|
45
|
+
return db;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* 记录或更新扫描过的文件与修改时间。
|
|
49
|
+
*/
|
|
50
|
+
export function saveFile(db, path, mtime) {
|
|
51
|
+
const stmt = db.prepare(`
|
|
52
|
+
INSERT INTO files (path, mtime)
|
|
53
|
+
VALUES (?, ?)
|
|
54
|
+
ON CONFLICT(path) DO UPDATE SET mtime = excluded.mtime
|
|
55
|
+
`);
|
|
56
|
+
stmt.run(path, mtime);
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* 获取某个文件的扫描记录。
|
|
60
|
+
*/
|
|
61
|
+
export function getFile(db, path) {
|
|
62
|
+
const stmt = db.prepare(`SELECT path, mtime FROM files WHERE path = ?`);
|
|
63
|
+
const rows = stmt.all(path);
|
|
64
|
+
if (rows.length === 0)
|
|
65
|
+
return undefined;
|
|
66
|
+
return {
|
|
67
|
+
path: rows[0].path,
|
|
68
|
+
mtime: Number(rows[0].mtime)
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* 清除某个文件已有的所有符号索引(重新扫描前清理)。
|
|
73
|
+
*/
|
|
74
|
+
export function clearFileSymbols(db, path) {
|
|
75
|
+
const stmt = db.prepare(`DELETE FROM symbols WHERE file_path = ?`);
|
|
76
|
+
stmt.run(path);
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* 清除某个文件的文件扫描历史。
|
|
80
|
+
*/
|
|
81
|
+
export function deleteFileRecord(db, path) {
|
|
82
|
+
const stmt = db.prepare(`DELETE FROM files WHERE path = ?`);
|
|
83
|
+
stmt.run(path);
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* 保存一个符号记录。
|
|
87
|
+
*/
|
|
88
|
+
export function saveSymbol(db, filePath, symbol) {
|
|
89
|
+
const stmt = db.prepare(`
|
|
90
|
+
INSERT INTO symbols (file_path, name, type, start_line, end_line, content_hash, embedding)
|
|
91
|
+
VALUES (?, ?, ?, ?, ?, ?, ?)
|
|
92
|
+
`);
|
|
93
|
+
const embeddingStr = symbol.embedding ? JSON.stringify(symbol.embedding) : null;
|
|
94
|
+
stmt.run(filePath, symbol.name, symbol.type, symbol.startLine, symbol.endLine, symbol.contentHash || null, embeddingStr);
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* 更新现有符号的向量与哈希数据(用于按需延迟加载 Embedding)。
|
|
98
|
+
*/
|
|
99
|
+
export function updateSymbolEmbedding(db, id, contentHash, embedding) {
|
|
100
|
+
const stmt = db.prepare(`
|
|
101
|
+
UPDATE symbols
|
|
102
|
+
SET content_hash = ?, embedding = ?
|
|
103
|
+
WHERE id = ?
|
|
104
|
+
`);
|
|
105
|
+
stmt.run(contentHash, JSON.stringify(embedding), id);
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* 获取所有已生成 Embedding 向量的符号,供内存计算相似度检索。
|
|
109
|
+
*/
|
|
110
|
+
export function getAllSymbolsForSearch(db) {
|
|
111
|
+
const stmt = db.prepare(`
|
|
112
|
+
SELECT id, file_path, name, type, start_line, end_line, content_hash, embedding
|
|
113
|
+
FROM symbols
|
|
114
|
+
WHERE embedding IS NOT NULL
|
|
115
|
+
`);
|
|
116
|
+
return stmt.all();
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* 获取某个文件下所有没有生成向量、或者 hash 不一致的待更新符号列表。
|
|
120
|
+
*/
|
|
121
|
+
export function getSymbolsPendingEmbedding(db, filePath) {
|
|
122
|
+
const stmt = db.prepare(`
|
|
123
|
+
SELECT id, file_path, name, type, start_line, end_line, content_hash, embedding
|
|
124
|
+
FROM symbols
|
|
125
|
+
WHERE file_path = ?
|
|
126
|
+
`);
|
|
127
|
+
return stmt.all(filePath);
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* 打印当前的符号索引统计数据。
|
|
131
|
+
*/
|
|
132
|
+
export function getSymbolStats(db) {
|
|
133
|
+
const fileStmt = db.prepare(`SELECT COUNT(*) as cnt FROM files`);
|
|
134
|
+
const symStmt = db.prepare(`SELECT COUNT(*) as cnt FROM symbols`);
|
|
135
|
+
const fileRows = fileStmt.all();
|
|
136
|
+
const symRows = symStmt.all();
|
|
137
|
+
return {
|
|
138
|
+
filesCount: fileRows[0]?.cnt ?? 0,
|
|
139
|
+
symbolsCount: symRows[0]?.cnt ?? 0
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
//# sourceMappingURL=db.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"db.js","sourceRoot":"","sources":["../../../src/agent/rag/db.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
import { readFileSync, existsSync } from 'node:fs';
|
|
2
|
+
import { join } from 'node:path';
|
|
3
|
+
import { createHash } from 'node:crypto';
|
|
4
|
+
import { initDb, updateSymbolEmbedding } from './db.js';
|
|
5
|
+
function getMd5(text) {
|
|
6
|
+
return createHash('md5').update(text).digest('hex');
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* 截取并读取指定文件中的代码行片段(自适应支持本地及 SshOS/DockerOS 远程读取)。
|
|
10
|
+
*/
|
|
11
|
+
export async function readCodeSnippet(workspacePath, filePath, startLine, endLine, os) {
|
|
12
|
+
const fullPath = os ? os.resolve(workspacePath, filePath) : join(workspacePath, filePath);
|
|
13
|
+
try {
|
|
14
|
+
let content;
|
|
15
|
+
if (os) {
|
|
16
|
+
content = await os.readFile(fullPath, 'utf8');
|
|
17
|
+
}
|
|
18
|
+
else {
|
|
19
|
+
if (!existsSync(fullPath))
|
|
20
|
+
return '';
|
|
21
|
+
content = readFileSync(fullPath, 'utf8');
|
|
22
|
+
}
|
|
23
|
+
const lines = content.split(/\r?\n/);
|
|
24
|
+
return lines.slice(startLine - 1, endLine).join('\n');
|
|
25
|
+
}
|
|
26
|
+
catch {
|
|
27
|
+
return '';
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* 解析最终生效的 Embedding 配置。
|
|
32
|
+
* 优先使用独立的 embeddingApiKey / embeddingBaseURL / embeddingModel,
|
|
33
|
+
* 未配置时再回退到主对话模型的 apiKey / baseURL。
|
|
34
|
+
*/
|
|
35
|
+
export function resolveEmbeddingConfig(config) {
|
|
36
|
+
return {
|
|
37
|
+
apiKey: config.embeddingApiKey ?? config.apiKey,
|
|
38
|
+
baseURL: config.embeddingBaseURL ?? config.baseURL ?? 'https://api.openai.com/v1',
|
|
39
|
+
model: config.embeddingModel ?? 'text-embedding-3-small',
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* 调用 AI 接口生成输入文本的高维特征向量 (Embedding)。
|
|
44
|
+
* 优先兼容 OpenAI / Gemini / 千问等任何主流 OpenAI 格式的向量接口。
|
|
45
|
+
*/
|
|
46
|
+
export async function getEmbedding(text, config) {
|
|
47
|
+
const { apiKey, baseURL, model } = resolveEmbeddingConfig(config);
|
|
48
|
+
if (!apiKey) {
|
|
49
|
+
// 兜底返回 1536 维全零向量,防止在未配置 key 时系统直接崩溃或死锁
|
|
50
|
+
return new Array(1536).fill(0);
|
|
51
|
+
}
|
|
52
|
+
// 兼容端点自适应拼接
|
|
53
|
+
const url = baseURL.endsWith('/v1') ? `${baseURL}/embeddings` : `${baseURL}/v1/embeddings`;
|
|
54
|
+
const response = await fetch(url, {
|
|
55
|
+
method: 'POST',
|
|
56
|
+
headers: {
|
|
57
|
+
'Content-Type': 'application/json',
|
|
58
|
+
'Authorization': `Bearer ${apiKey}`
|
|
59
|
+
},
|
|
60
|
+
body: JSON.stringify({
|
|
61
|
+
model: model,
|
|
62
|
+
input: text
|
|
63
|
+
}),
|
|
64
|
+
signal: AbortSignal.timeout(10000)
|
|
65
|
+
});
|
|
66
|
+
if (!response.ok) {
|
|
67
|
+
throw new Error(`Embedding API error: ${response.statusText} (${response.status})`);
|
|
68
|
+
}
|
|
69
|
+
const data = await response.json();
|
|
70
|
+
if (!data?.data?.[0]?.embedding) {
|
|
71
|
+
throw new Error(`Invalid response format from Embedding API`);
|
|
72
|
+
}
|
|
73
|
+
return data.data[0].embedding;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* 计算两个浮点数向量之间的余弦相似度 (Cosine Similarity)。
|
|
77
|
+
* 范围在 [-1, 1] 之间,值越大代表两段文本语义越相似。
|
|
78
|
+
*/
|
|
79
|
+
export function cosineSimilarity(vecA, vecB) {
|
|
80
|
+
let dotProduct = 0;
|
|
81
|
+
let normA = 0;
|
|
82
|
+
let normB = 0;
|
|
83
|
+
const length = Math.min(vecA.length, vecB.length);
|
|
84
|
+
for (let i = 0; i < length; i++) {
|
|
85
|
+
dotProduct += vecA[i] * vecB[i];
|
|
86
|
+
normA += vecA[i] * vecA[i];
|
|
87
|
+
normB += vecB[i] * vecB[i];
|
|
88
|
+
}
|
|
89
|
+
if (normA === 0 || normB === 0)
|
|
90
|
+
return 0;
|
|
91
|
+
return dotProduct / (Math.sqrt(normA) * Math.sqrt(normB));
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* 遍历数据库中大纲里的所有符号,增量计算它们的 Embedding 并写入缓存。
|
|
95
|
+
*/
|
|
96
|
+
export async function syncEmbeddings(workspacePath, config, onProgress) {
|
|
97
|
+
const log = onProgress ?? (() => { });
|
|
98
|
+
const db = initDb(workspacePath);
|
|
99
|
+
const stmt = db.prepare(`
|
|
100
|
+
SELECT id, file_path, name, type, start_line, end_line, content_hash, embedding
|
|
101
|
+
FROM symbols
|
|
102
|
+
`);
|
|
103
|
+
const allSymbols = stmt.all();
|
|
104
|
+
let updated = 0;
|
|
105
|
+
let skipped = 0;
|
|
106
|
+
log(`🧬 正在分析 ${allSymbols.length} 个符号的 Embedding 缓存状态...`);
|
|
107
|
+
for (const sym of allSymbols) {
|
|
108
|
+
const snippet = await readCodeSnippet(workspacePath, sym.file_path, sym.start_line, sym.end_line);
|
|
109
|
+
if (!snippet) {
|
|
110
|
+
skipped++;
|
|
111
|
+
continue;
|
|
112
|
+
}
|
|
113
|
+
const currentHash = getMd5(snippet.trim());
|
|
114
|
+
const hasCachedVec = sym.embedding && sym.content_hash === currentHash;
|
|
115
|
+
if (hasCachedVec) {
|
|
116
|
+
skipped++;
|
|
117
|
+
continue;
|
|
118
|
+
}
|
|
119
|
+
// 缓存失效或缺失,重新拉取向量
|
|
120
|
+
try {
|
|
121
|
+
log(` -> 正在生成符号向量 [${sym.file_path}]: ${sym.name}...`);
|
|
122
|
+
const vector = await getEmbedding(snippet, config);
|
|
123
|
+
updateSymbolEmbedding(db, sym.id, currentHash, vector);
|
|
124
|
+
updated++;
|
|
125
|
+
// 简单的防频控延迟(20ms)
|
|
126
|
+
await new Promise(resolve => setTimeout(resolve, 20));
|
|
127
|
+
}
|
|
128
|
+
catch (e) {
|
|
129
|
+
log(`⚠️ 生成符号 [${sym.name}] 向量失败: ${e.message}`);
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
log(`✨ 向量同步完成!本次生成: ${updated},跳过复用: ${skipped}。`);
|
|
133
|
+
return { total: allSymbols.length, updated, skipped };
|
|
134
|
+
}
|
|
135
|
+
//# sourceMappingURL=embedding.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"embedding.js","sourceRoot":"","sources":["../../../src/agent/rag/embedding.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import { readdirSync, statSync, readFileSync, existsSync } from 'node:fs';
|
|
2
|
+
import { join, relative, extname } from 'node:path';
|
|
3
|
+
import { initDb, getFile, clearFileSymbols, saveSymbol, saveFile, deleteFileRecord, getSymbolStats } from './db.js';
|
|
4
|
+
import { parseSourceFile } from './parser.js';
|
|
5
|
+
const ALLOWED_EXTENSIONS = new Set(['.ts', '.tsx', '.js', '.jsx', '.mjs', '.cjs']);
|
|
6
|
+
const EXCLUDED_DIRS = new Set(['node_modules', 'dist', 'build', '.git', '.ccli', '.gemini']);
|
|
7
|
+
/**
|
|
8
|
+
* 遍历并收集所有的待扫描代码文件。
|
|
9
|
+
*/
|
|
10
|
+
function collectFiles(dirPath, rootDir, filesList) {
|
|
11
|
+
if (!existsSync(dirPath))
|
|
12
|
+
return;
|
|
13
|
+
const items = readdirSync(dirPath);
|
|
14
|
+
for (const item of items) {
|
|
15
|
+
if (item.startsWith('.'))
|
|
16
|
+
continue; // 忽略任何隐藏文件/目录
|
|
17
|
+
const fullPath = join(dirPath, item);
|
|
18
|
+
let stat;
|
|
19
|
+
try {
|
|
20
|
+
stat = statSync(fullPath);
|
|
21
|
+
}
|
|
22
|
+
catch {
|
|
23
|
+
continue;
|
|
24
|
+
}
|
|
25
|
+
if (stat.isDirectory()) {
|
|
26
|
+
if (EXCLUDED_DIRS.has(item))
|
|
27
|
+
continue;
|
|
28
|
+
collectFiles(fullPath, rootDir, filesList);
|
|
29
|
+
}
|
|
30
|
+
else if (stat.isFile()) {
|
|
31
|
+
const ext = extname(item);
|
|
32
|
+
if (ALLOWED_EXTENSIONS.has(ext)) {
|
|
33
|
+
filesList.push(fullPath);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* 扫描并增量构建项目代码大纲索引。
|
|
40
|
+
* @param workspacePath 项目根目录物理路径
|
|
41
|
+
* @param onProgress 进度汇报回调函数
|
|
42
|
+
*/
|
|
43
|
+
export function buildIndex(workspacePath, onProgress) {
|
|
44
|
+
const log = onProgress ?? (() => { });
|
|
45
|
+
log('🔎 正在初始化本地代码符号数据库...');
|
|
46
|
+
const db = initDb(workspacePath);
|
|
47
|
+
log('📂 正在扫描项目文件结构...');
|
|
48
|
+
const filesList = [];
|
|
49
|
+
collectFiles(workspacePath, workspacePath, filesList);
|
|
50
|
+
log(`📊 发现 ${filesList.length} 个代码文件,开始进行增量解析...`);
|
|
51
|
+
const currentFilesRelative = new Set();
|
|
52
|
+
let scannedCount = 0;
|
|
53
|
+
let parsedCount = 0;
|
|
54
|
+
for (const absolutePath of filesList) {
|
|
55
|
+
const relativePath = relative(workspacePath, absolutePath);
|
|
56
|
+
currentFilesRelative.add(relativePath);
|
|
57
|
+
const mtime = statSync(absolutePath).mtimeMs;
|
|
58
|
+
const cached = getFile(db, relativePath);
|
|
59
|
+
// 增量检查:如果修改时间一致,跳过解析
|
|
60
|
+
if (cached && cached.mtime === mtime) {
|
|
61
|
+
scannedCount++;
|
|
62
|
+
continue;
|
|
63
|
+
}
|
|
64
|
+
// 解析文件并提取符号
|
|
65
|
+
try {
|
|
66
|
+
const content = readFileSync(absolutePath, 'utf8');
|
|
67
|
+
const symbols = parseSourceFile(relativePath, content);
|
|
68
|
+
// 写入数据库:先保存文件记录,满足外键约束
|
|
69
|
+
saveFile(db, relativePath, mtime);
|
|
70
|
+
clearFileSymbols(db, relativePath);
|
|
71
|
+
for (const sym of symbols) {
|
|
72
|
+
saveSymbol(db, relativePath, sym);
|
|
73
|
+
}
|
|
74
|
+
parsedCount++;
|
|
75
|
+
}
|
|
76
|
+
catch (e) {
|
|
77
|
+
log(`⚠️ 无法解析文件 ${relativePath}: ${e.message}`);
|
|
78
|
+
}
|
|
79
|
+
scannedCount++;
|
|
80
|
+
}
|
|
81
|
+
// 清理已经被删除的文件索引
|
|
82
|
+
log('🧹 正在清理失效的废弃索引...');
|
|
83
|
+
const allDbFilesStmt = db.prepare(`SELECT path FROM files`);
|
|
84
|
+
const dbFiles = allDbFilesStmt.all();
|
|
85
|
+
let deletedCount = 0;
|
|
86
|
+
for (const row of dbFiles) {
|
|
87
|
+
const dbPath = row.path;
|
|
88
|
+
if (!currentFilesRelative.has(dbPath)) {
|
|
89
|
+
// 在磁盘上已找不到该文件,执行物理清理
|
|
90
|
+
clearFileSymbols(db, dbPath);
|
|
91
|
+
deleteFileRecord(db, dbPath);
|
|
92
|
+
deletedCount++;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
const stats = getSymbolStats(db);
|
|
96
|
+
log(`✨ 索引同步完成!`);
|
|
97
|
+
if (parsedCount > 0)
|
|
98
|
+
log(` -> 新增/修改解析: ${parsedCount} 个文件`);
|
|
99
|
+
if (deletedCount > 0)
|
|
100
|
+
log(` -> 清理失效文件: ${deletedCount} 个`);
|
|
101
|
+
log(` -> 库中当前状态: 共分析 ${stats.filesCount} 个文件,发现 ${stats.symbolsCount} 个符号。`);
|
|
102
|
+
return stats;
|
|
103
|
+
}
|
|
104
|
+
//# sourceMappingURL=indexer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"indexer.js","sourceRoot":"","sources":["../../../src/agent/rag/indexer.ts"],"names":[],"mappings":"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"}
|