@roarpeng/graphflow 1.1.0 → 1.3.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/CHANGELOG.md +23 -0
- package/README.md +49 -3
- package/dist/agents/insight.js +5 -3
- package/dist/agents/insight.js.map +1 -1
- package/dist/agents/planner.d.ts.map +1 -1
- package/dist/agents/planner.js +7 -2
- package/dist/agents/planner.js.map +1 -1
- package/dist/config/defaults.d.ts.map +1 -1
- package/dist/config/defaults.js +1 -0
- package/dist/config/defaults.js.map +1 -1
- package/dist/config/embedding-factory.d.ts.map +1 -1
- package/dist/config/embedding-factory.js +23 -12
- package/dist/config/embedding-factory.js.map +1 -1
- package/dist/config/loader.d.ts +11 -0
- package/dist/config/loader.d.ts.map +1 -1
- package/dist/config/loader.js +103 -0
- package/dist/config/loader.js.map +1 -1
- package/dist/core/agent-assignment.d.ts +39 -0
- package/dist/core/agent-assignment.d.ts.map +1 -0
- package/dist/core/agent-assignment.js +73 -0
- package/dist/core/agent-assignment.js.map +1 -0
- package/dist/core/agent-delegation.d.ts +1 -0
- package/dist/core/agent-delegation.d.ts.map +1 -1
- package/dist/core/agent-delegation.js +30 -1
- package/dist/core/agent-delegation.js.map +1 -1
- package/dist/core/dag-checkpoint.d.ts +83 -0
- package/dist/core/dag-checkpoint.d.ts.map +1 -0
- package/dist/core/dag-checkpoint.js +164 -0
- package/dist/core/dag-checkpoint.js.map +1 -0
- package/dist/core/dag-engine.d.ts +9 -0
- package/dist/core/dag-engine.d.ts.map +1 -1
- package/dist/core/dag-engine.js +42 -0
- package/dist/core/dag-engine.js.map +1 -1
- package/dist/core/merge-agent-insight.d.ts.map +1 -1
- package/dist/core/merge-agent-insight.js +39 -8
- package/dist/core/merge-agent-insight.js.map +1 -1
- package/dist/core/orchestrator-context.d.ts +10 -0
- package/dist/core/orchestrator-context.d.ts.map +1 -0
- package/dist/core/orchestrator-context.js +112 -0
- package/dist/core/orchestrator-context.js.map +1 -0
- package/dist/core/orchestrator-episode.d.ts +13 -0
- package/dist/core/orchestrator-episode.d.ts.map +1 -0
- package/dist/core/orchestrator-episode.js +128 -0
- package/dist/core/orchestrator-episode.js.map +1 -0
- package/dist/core/orchestrator-route.d.ts +20 -0
- package/dist/core/orchestrator-route.d.ts.map +1 -0
- package/dist/core/orchestrator-route.js +51 -0
- package/dist/core/orchestrator-route.js.map +1 -0
- package/dist/core/orchestrator.d.ts +2 -38
- package/dist/core/orchestrator.d.ts.map +1 -1
- package/dist/core/orchestrator.js +97 -286
- package/dist/core/orchestrator.js.map +1 -1
- package/dist/core/triage.d.ts +21 -0
- package/dist/core/triage.d.ts.map +1 -1
- package/dist/core/triage.js +25 -6
- package/dist/core/triage.js.map +1 -1
- package/dist/core/types.d.ts +53 -0
- package/dist/core/types.d.ts.map +1 -1
- package/dist/graph/context-slicer-types.d.ts +62 -0
- package/dist/graph/context-slicer-types.d.ts.map +1 -0
- package/dist/graph/context-slicer-types.js +13 -0
- package/dist/graph/context-slicer-types.js.map +1 -0
- package/dist/graph/context-slicer-utils.d.ts +24 -0
- package/dist/graph/context-slicer-utils.d.ts.map +1 -0
- package/dist/graph/context-slicer-utils.js +118 -0
- package/dist/graph/context-slicer-utils.js.map +1 -0
- package/dist/graph/context-slicer.d.ts +6 -61
- package/dist/graph/context-slicer.d.ts.map +1 -1
- package/dist/graph/context-slicer.js +73 -170
- package/dist/graph/context-slicer.js.map +1 -1
- package/dist/graph/file-indexer-cache.d.ts +34 -0
- package/dist/graph/file-indexer-cache.d.ts.map +1 -0
- package/dist/graph/file-indexer-cache.js +105 -0
- package/dist/graph/file-indexer-cache.js.map +1 -0
- package/dist/graph/file-indexer-edges.d.ts +55 -0
- package/dist/graph/file-indexer-edges.d.ts.map +1 -0
- package/dist/graph/file-indexer-edges.js +258 -0
- package/dist/graph/file-indexer-edges.js.map +1 -0
- package/dist/graph/file-indexer-nodes.d.ts +43 -0
- package/dist/graph/file-indexer-nodes.d.ts.map +1 -0
- package/dist/graph/file-indexer-nodes.js +137 -0
- package/dist/graph/file-indexer-nodes.js.map +1 -0
- package/dist/graph/file-indexer-walker.d.ts +35 -0
- package/dist/graph/file-indexer-walker.d.ts.map +1 -0
- package/dist/graph/file-indexer-walker.js +80 -0
- package/dist/graph/file-indexer-walker.js.map +1 -0
- package/dist/graph/file-indexer.d.ts +13 -39
- package/dist/graph/file-indexer.d.ts.map +1 -1
- package/dist/graph/file-indexer.js +167 -600
- package/dist/graph/file-indexer.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/integrations/agent-mcp-installer.d.ts +25 -1
- package/dist/integrations/agent-mcp-installer.d.ts.map +1 -1
- package/dist/integrations/agent-mcp-installer.js +174 -13
- package/dist/integrations/agent-mcp-installer.js.map +1 -1
- package/dist/integrations/skill-installer.d.ts +80 -0
- package/dist/integrations/skill-installer.d.ts.map +1 -0
- package/dist/integrations/skill-installer.js +612 -0
- package/dist/integrations/skill-installer.js.map +1 -0
- package/dist/learning/embeddings.d.ts +11 -0
- package/dist/learning/embeddings.d.ts.map +1 -1
- package/dist/learning/embeddings.js +24 -0
- package/dist/learning/embeddings.js.map +1 -1
- package/dist/learning/episodic-memory.d.ts +3 -2
- package/dist/learning/episodic-memory.d.ts.map +1 -1
- package/dist/learning/episodic-memory.js +105 -10
- package/dist/learning/episodic-memory.js.map +1 -1
- package/dist/learning/local-embedding.d.ts.map +1 -1
- package/dist/learning/local-embedding.js +16 -0
- package/dist/learning/local-embedding.js.map +1 -1
- package/dist/learning/seed-skills.d.ts +21 -0
- package/dist/learning/seed-skills.d.ts.map +1 -0
- package/dist/learning/seed-skills.js +113 -0
- package/dist/learning/seed-skills.js.map +1 -0
- package/dist/learning/skill-evolution.d.ts +1 -1
- package/dist/learning/skill-evolution.d.ts.map +1 -1
- package/dist/learning/skill-evolution.js +1 -1
- package/dist/learning/skill-evolution.js.map +1 -1
- package/dist/learning/skill-package.d.ts +55 -0
- package/dist/learning/skill-package.d.ts.map +1 -0
- package/dist/learning/skill-package.js +115 -0
- package/dist/learning/skill-package.js.map +1 -0
- package/dist/learning/triage-telemetry.d.ts +43 -0
- package/dist/learning/triage-telemetry.d.ts.map +1 -0
- package/dist/learning/triage-telemetry.js +114 -0
- package/dist/learning/triage-telemetry.js.map +1 -0
- package/dist/surfaces/cli/index.js +74 -0
- package/dist/surfaces/cli/index.js.map +1 -1
- package/dist/surfaces/cli/init.d.ts +28 -2
- package/dist/surfaces/cli/init.d.ts.map +1 -1
- package/dist/surfaces/cli/init.js +163 -30
- package/dist/surfaces/cli/init.js.map +1 -1
- package/dist/surfaces/cli/output.d.ts.map +1 -1
- package/dist/surfaces/cli/output.js +6 -0
- package/dist/surfaces/cli/output.js.map +1 -1
- package/dist/surfaces/cli/runtime/graph.d.ts +23 -0
- package/dist/surfaces/cli/runtime/graph.d.ts.map +1 -1
- package/dist/surfaces/cli/runtime/graph.js +40 -0
- package/dist/surfaces/cli/runtime/graph.js.map +1 -1
- package/dist/surfaces/cli/runtime/routing.d.ts.map +1 -1
- package/dist/surfaces/cli/runtime/routing.js +8 -1
- package/dist/surfaces/cli/runtime/routing.js.map +1 -1
- package/dist/surfaces/cli/runtime.d.ts +1 -1
- package/dist/surfaces/cli/runtime.d.ts.map +1 -1
- package/dist/surfaces/cli/runtime.js +4 -1
- package/dist/surfaces/cli/runtime.js.map +1 -1
- package/dist/surfaces/mcp/tool-definitions.js +20 -20
- package/dist/surfaces/mcp/tool-definitions.js.map +1 -1
- package/package.json +4 -3
- package/scripts/safe-postinstall.cjs +323 -5
|
@@ -0,0 +1,612 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.resolveSkillSourcePath = resolveSkillSourcePath;
|
|
4
|
+
exports.resolveCursorRulesSourcePath = resolveCursorRulesSourcePath;
|
|
5
|
+
exports.resolveClaudeMdSourcePath = resolveClaudeMdSourcePath;
|
|
6
|
+
exports.installAgentInstructions = installAgentInstructions;
|
|
7
|
+
exports.getAgentInstructionStatus = getAgentInstructionStatus;
|
|
8
|
+
exports.installAgentSkills = installAgentSkills;
|
|
9
|
+
exports.getAgentSkillStatus = getAgentSkillStatus;
|
|
10
|
+
exports.installTraeSkills = installTraeSkills;
|
|
11
|
+
exports.installCursorRules = installCursorRules;
|
|
12
|
+
exports.installClaudeCodeMd = installClaudeCodeMd;
|
|
13
|
+
exports.installAllSkills = installAllSkills;
|
|
14
|
+
/**
|
|
15
|
+
* skill-installer.ts — 共享的 Skill / Rules 安装模块
|
|
16
|
+
*
|
|
17
|
+
* 封装 Trae Skill、Cursor Rules、Claude Code CLAUDE.md 的安装逻辑,
|
|
18
|
+
* 可被 CLI init 和 VS Code 扩展共用。所有安装失败静默处理(log warn)。
|
|
19
|
+
*/
|
|
20
|
+
const node_fs_1 = require("node:fs");
|
|
21
|
+
const node_os_1 = require("node:os");
|
|
22
|
+
const node_path_1 = require("node:path");
|
|
23
|
+
// ── 平台检测 ──────────────────────────────────────────────────────────
|
|
24
|
+
const isWindows = process.platform === "win32";
|
|
25
|
+
function resolveHomePaths() {
|
|
26
|
+
const home = (0, node_os_1.homedir)();
|
|
27
|
+
const appData = process.env.APPDATA ?? (isWindows ? (0, node_path_1.join)(home, "AppData", "Roaming") : "");
|
|
28
|
+
const localAppData = process.env.LOCALAPPDATA ?? (isWindows ? (0, node_path_1.join)(home, "AppData", "Local") : "");
|
|
29
|
+
return { home, appData, localAppData };
|
|
30
|
+
}
|
|
31
|
+
// ── Trae Skill 安装 ──────────────────────────────────────────────────
|
|
32
|
+
function getTraeUserDirs() {
|
|
33
|
+
const { home, appData } = resolveHomePaths();
|
|
34
|
+
const dirs = [];
|
|
35
|
+
if (isWindows) {
|
|
36
|
+
if ((0, node_fs_1.existsSync)((0, node_path_1.join)(appData, "Trae"))) {
|
|
37
|
+
dirs.push({
|
|
38
|
+
name: "Trae",
|
|
39
|
+
skillsDir: (0, node_path_1.join)(appData, "Trae", "User", "skills"),
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
if ((0, node_fs_1.existsSync)((0, node_path_1.join)(appData, "Trae CN"))) {
|
|
43
|
+
dirs.push({
|
|
44
|
+
name: "Trae CN",
|
|
45
|
+
skillsDir: (0, node_path_1.join)(appData, "Trae CN", "User", "skills"),
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
if ((0, node_fs_1.existsSync)((0, node_path_1.join)(appData, "TRAE SOLO CN"))) {
|
|
49
|
+
dirs.push({
|
|
50
|
+
name: "TRAE SOLO CN",
|
|
51
|
+
skillsDir: (0, node_path_1.join)(appData, "TRAE SOLO CN", "User", "skills"),
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
else {
|
|
56
|
+
if ((0, node_fs_1.existsSync)((0, node_path_1.join)(home, ".config", "Trae"))) {
|
|
57
|
+
dirs.push({
|
|
58
|
+
name: "Trae",
|
|
59
|
+
skillsDir: (0, node_path_1.join)(home, ".config", "Trae", "User", "skills"),
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
if ((0, node_fs_1.existsSync)((0, node_path_1.join)(home, ".config", "Trae CN"))) {
|
|
63
|
+
dirs.push({
|
|
64
|
+
name: "Trae CN",
|
|
65
|
+
skillsDir: (0, node_path_1.join)(home, ".config", "Trae CN", "User", "skills"),
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
if ((0, node_fs_1.existsSync)((0, node_path_1.join)(home, ".config", "TRAE SOLO CN"))) {
|
|
69
|
+
dirs.push({
|
|
70
|
+
name: "TRAE SOLO CN",
|
|
71
|
+
skillsDir: (0, node_path_1.join)(home, ".config", "TRAE SOLO CN", "User", "skills"),
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
return dirs;
|
|
76
|
+
}
|
|
77
|
+
// ── Cursor Rules 安装 ─────────────────────────────────────────────────
|
|
78
|
+
function getCursorRulesDirs() {
|
|
79
|
+
const { home, appData } = resolveHomePaths();
|
|
80
|
+
const dirs = [];
|
|
81
|
+
// 用户级 Cursor rules 目录
|
|
82
|
+
if ((0, node_fs_1.existsSync)((0, node_path_1.join)(home, ".cursor"))) {
|
|
83
|
+
dirs.push({
|
|
84
|
+
name: "Cursor (user)",
|
|
85
|
+
rulesDir: (0, node_path_1.join)(home, ".cursor", "rules"),
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
// AppData 位置(某些 Cursor 版本)
|
|
89
|
+
if (isWindows && (0, node_fs_1.existsSync)((0, node_path_1.join)(appData, "Cursor"))) {
|
|
90
|
+
dirs.push({
|
|
91
|
+
name: "Cursor (AppData)",
|
|
92
|
+
rulesDir: (0, node_path_1.join)(appData, "Cursor", "User", "rules"),
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
return dirs;
|
|
96
|
+
}
|
|
97
|
+
// ── Claude Code CLAUDE.md 安装 ────────────────────────────────────────
|
|
98
|
+
function getClaudeCodeDirs() {
|
|
99
|
+
const { home, appData } = resolveHomePaths();
|
|
100
|
+
const dirs = [];
|
|
101
|
+
if ((0, node_fs_1.existsSync)((0, node_path_1.join)(home, ".claude"))) {
|
|
102
|
+
dirs.push({
|
|
103
|
+
name: "Claude Code",
|
|
104
|
+
claudeDir: (0, node_path_1.join)(home, ".claude"),
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
if (isWindows && (0, node_fs_1.existsSync)((0, node_path_1.join)(appData, "Claude Code"))) {
|
|
108
|
+
dirs.push({
|
|
109
|
+
name: "Claude Code (AppData)",
|
|
110
|
+
claudeDir: (0, node_path_1.join)(appData, "Claude Code"),
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
return dirs;
|
|
114
|
+
}
|
|
115
|
+
// ── 路径解析(支持多种候选路径) ────────────────────────────────────────
|
|
116
|
+
/**
|
|
117
|
+
* 解析 Trae Skill 源文件路径。
|
|
118
|
+
* 支持以下候选路径(按优先级排序):
|
|
119
|
+
* 1. vendorRuntimeRoot(VS Code 扩展打包后 vendor/graphflow 路径)
|
|
120
|
+
* 2. 标准的 dist/surfaces/ 路径
|
|
121
|
+
* 3. src/surfaces/ 源码路径
|
|
122
|
+
*/
|
|
123
|
+
function resolveSkillSourcePath(vendorRuntimeRoot) {
|
|
124
|
+
const candidates = [
|
|
125
|
+
// VS Code 扩展 vendor 路径(打包后)
|
|
126
|
+
...(vendorRuntimeRoot
|
|
127
|
+
? [
|
|
128
|
+
(0, node_path_1.join)(vendorRuntimeRoot, "src", "surfaces", "trae-skill", "graphflow"),
|
|
129
|
+
(0, node_path_1.join)(vendorRuntimeRoot, "dist", "surfaces", "trae-skill", "graphflow"),
|
|
130
|
+
]
|
|
131
|
+
: []),
|
|
132
|
+
// 标准构建产物路径
|
|
133
|
+
(0, node_path_1.join)(__dirname, "..", "..", "surfaces", "trae-skill", "graphflow"),
|
|
134
|
+
(0, node_path_1.join)(__dirname, "..", "..", "..", "src", "surfaces", "trae-skill", "graphflow"),
|
|
135
|
+
(0, node_path_1.join)(process.cwd(), "src", "surfaces", "trae-skill", "graphflow"),
|
|
136
|
+
(0, node_path_1.join)(process.cwd(), "dist", "surfaces", "trae-skill", "graphflow"),
|
|
137
|
+
];
|
|
138
|
+
for (const dir of candidates) {
|
|
139
|
+
if ((0, node_fs_1.existsSync)((0, node_path_1.join)(dir, "SKILL.md"))) {
|
|
140
|
+
return dir;
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
return undefined;
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* 解析 Cursor Rules 源文件路径。
|
|
147
|
+
*/
|
|
148
|
+
function resolveCursorRulesSourcePath(vendorRuntimeRoot) {
|
|
149
|
+
const candidates = [
|
|
150
|
+
// VS Code 扩展 vendor 路径(打包后)
|
|
151
|
+
...(vendorRuntimeRoot
|
|
152
|
+
? [
|
|
153
|
+
(0, node_path_1.join)(vendorRuntimeRoot, "src", "surfaces", "cursor-rules"),
|
|
154
|
+
(0, node_path_1.join)(vendorRuntimeRoot, "dist", "surfaces", "cursor-rules"),
|
|
155
|
+
]
|
|
156
|
+
: []),
|
|
157
|
+
// 标准构建产物路径
|
|
158
|
+
(0, node_path_1.join)(__dirname, "..", "..", "surfaces", "cursor-rules"),
|
|
159
|
+
(0, node_path_1.join)(__dirname, "..", "..", "..", "src", "surfaces", "cursor-rules"),
|
|
160
|
+
(0, node_path_1.join)(process.cwd(), "src", "surfaces", "cursor-rules"),
|
|
161
|
+
(0, node_path_1.join)(process.cwd(), "dist", "surfaces", "cursor-rules"),
|
|
162
|
+
];
|
|
163
|
+
for (const dir of candidates) {
|
|
164
|
+
if ((0, node_fs_1.existsSync)((0, node_path_1.join)(dir, "graphflow.mdc"))) {
|
|
165
|
+
return dir;
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
return undefined;
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* 解析 Claude Code CLAUDE.md 源文件路径。
|
|
172
|
+
*/
|
|
173
|
+
function resolveClaudeMdSourcePath(vendorRuntimeRoot) {
|
|
174
|
+
const candidates = [
|
|
175
|
+
// VS Code 扩展 vendor 路径(打包后)
|
|
176
|
+
...(vendorRuntimeRoot
|
|
177
|
+
? [
|
|
178
|
+
(0, node_path_1.join)(vendorRuntimeRoot, "CLAUDE.md"),
|
|
179
|
+
]
|
|
180
|
+
: []),
|
|
181
|
+
// 标准路径
|
|
182
|
+
(0, node_path_1.join)(__dirname, "..", "..", "CLAUDE.md"),
|
|
183
|
+
(0, node_path_1.join)(__dirname, "..", "..", "..", "CLAUDE.md"),
|
|
184
|
+
(0, node_path_1.join)(process.cwd(), "CLAUDE.md"),
|
|
185
|
+
];
|
|
186
|
+
for (const filePath of candidates) {
|
|
187
|
+
if ((0, node_fs_1.existsSync)(filePath)) {
|
|
188
|
+
return filePath;
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
return undefined;
|
|
192
|
+
}
|
|
193
|
+
// ── 文件安装辅助 ────────────────────────────────────────────────────
|
|
194
|
+
/**
|
|
195
|
+
* 通用文件安装:将源文件复制到目标位置,若已存在且内容相同则跳过。
|
|
196
|
+
*/
|
|
197
|
+
function installFile(sourcePath, destDir, destFileName) {
|
|
198
|
+
const destFile = (0, node_path_1.join)(destDir, destFileName);
|
|
199
|
+
const existed = (0, node_fs_1.existsSync)(destFile);
|
|
200
|
+
if (existed) {
|
|
201
|
+
const existingContent = (0, node_fs_1.readFileSync)(destFile, "utf8");
|
|
202
|
+
const newContent = (0, node_fs_1.readFileSync)(sourcePath, "utf8");
|
|
203
|
+
if (existingContent === newContent) {
|
|
204
|
+
return { status: "skipped", message: "already up to date" };
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
(0, node_fs_1.mkdirSync)(destDir, { recursive: true });
|
|
208
|
+
(0, node_fs_1.copyFileSync)(sourcePath, destFile);
|
|
209
|
+
return { status: existed ? "updated" : "created" };
|
|
210
|
+
}
|
|
211
|
+
// ── Agent 指令文件(append-with-markers 安全写入) ──────────────────────
|
|
212
|
+
const INSTRUCTION_BEGIN = "<!-- GRAPHFLOW:BEGIN managed block — edit outside these markers only -->";
|
|
213
|
+
const INSTRUCTION_END = "<!-- GRAPHFLOW:END -->";
|
|
214
|
+
/**
|
|
215
|
+
* GraphFlow 的精简 token-first 指令块(受 Windsurf 6000 字符全局规则上限约束,保持简短)。
|
|
216
|
+
* 写入各 agent 的全局规则/记忆文件,告诉模型优先调用 GraphFlow 压缩上下文。
|
|
217
|
+
*/
|
|
218
|
+
function buildInstructionBlock() {
|
|
219
|
+
return [
|
|
220
|
+
INSTRUCTION_BEGIN,
|
|
221
|
+
"## GraphFlow Context-First Rule",
|
|
222
|
+
"",
|
|
223
|
+
"GraphFlow is a local code knowledge-graph + context compression MCP server.",
|
|
224
|
+
"Before broad code exploration, implementation, debugging, review, or architecture",
|
|
225
|
+
"questions in this project:",
|
|
226
|
+
"",
|
|
227
|
+
"1. Call `graphflow_preview_context` with the task/query first.",
|
|
228
|
+
"2. Use the returned `summary`, `anchors`, and `tokenBudget` as the primary context.",
|
|
229
|
+
"3. Read full files only when anchors point there or compressed context is insufficient.",
|
|
230
|
+
"4. For multi-step or ambiguous work, call `graphflow_plan` before implementing.",
|
|
231
|
+
"5. After project changes, call `graphflow_index` to keep the graph fresh.",
|
|
232
|
+
"",
|
|
233
|
+
"Do not scan the whole repository or read many large files before trying GraphFlow",
|
|
234
|
+
"context. Treat GraphFlow output as structured, token-saving context.",
|
|
235
|
+
INSTRUCTION_END,
|
|
236
|
+
"",
|
|
237
|
+
].join("\n");
|
|
238
|
+
}
|
|
239
|
+
/**
|
|
240
|
+
* 将受管指令块以 append-with-markers 方式写入文件:
|
|
241
|
+
* - 文件不存在 → 创建并写入块
|
|
242
|
+
* - 已存在且含旧块 → 仅替换标记之间的内容(保留用户其它内容)
|
|
243
|
+
* - 已存在且无块 → 追加到文件末尾(保留用户其它内容)
|
|
244
|
+
* - 块内容已是最新 → skipped
|
|
245
|
+
*/
|
|
246
|
+
function upsertManagedBlock(filePath, destDirToCreate) {
|
|
247
|
+
try {
|
|
248
|
+
const block = buildInstructionBlock();
|
|
249
|
+
const existed = (0, node_fs_1.existsSync)(filePath);
|
|
250
|
+
if (!existed) {
|
|
251
|
+
(0, node_fs_1.mkdirSync)(destDirToCreate, { recursive: true });
|
|
252
|
+
(0, node_fs_1.writeFileSync)(filePath, `${block}\n`, "utf8");
|
|
253
|
+
return { status: "created" };
|
|
254
|
+
}
|
|
255
|
+
const current = (0, node_fs_1.readFileSync)(filePath, "utf8");
|
|
256
|
+
const beginIdx = current.indexOf(INSTRUCTION_BEGIN);
|
|
257
|
+
const endIdx = current.indexOf(INSTRUCTION_END);
|
|
258
|
+
if (beginIdx !== -1 && endIdx !== -1 && endIdx > beginIdx) {
|
|
259
|
+
const before = current.slice(0, beginIdx);
|
|
260
|
+
const after = current.slice(endIdx + INSTRUCTION_END.length);
|
|
261
|
+
const next = `${before}${block.trimEnd()}${after}`;
|
|
262
|
+
if (next === current) {
|
|
263
|
+
return { status: "skipped", message: "already up to date" };
|
|
264
|
+
}
|
|
265
|
+
(0, node_fs_1.writeFileSync)(filePath, next, "utf8");
|
|
266
|
+
return { status: "updated" };
|
|
267
|
+
}
|
|
268
|
+
// 无现有块:追加(保留用户已有内容)
|
|
269
|
+
const separator = current.endsWith("\n") ? "\n" : "\n\n";
|
|
270
|
+
(0, node_fs_1.writeFileSync)(filePath, `${current}${separator}${block}\n`, "utf8");
|
|
271
|
+
return { status: "updated" };
|
|
272
|
+
}
|
|
273
|
+
catch (error) {
|
|
274
|
+
return { status: "error", message: error instanceof Error ? error.message : String(error) };
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
/** 各 agent 的全局指令/记忆文件目标(仅在检测到对应 marker 时写入)。 */
|
|
278
|
+
function getAgentInstructionTargets() {
|
|
279
|
+
const { home } = resolveHomePaths();
|
|
280
|
+
const targets = [];
|
|
281
|
+
// 注:Claude Code 的 ~/.claude/CLAUDE.md 由 installClaudeCodeMd 单独处理,
|
|
282
|
+
// 此处不重复写入,避免对同一文件的双重写入冲突。
|
|
283
|
+
// Windsurf 全局规则:~/.codeium/windsurf/memories/global_rules.md(6000 字符上限)
|
|
284
|
+
targets.push({
|
|
285
|
+
agent: "Windsurf",
|
|
286
|
+
markerDir: (0, node_path_1.join)(home, ".codeium", "windsurf"),
|
|
287
|
+
destDir: (0, node_path_1.join)(home, ".codeium", "windsurf", "memories"),
|
|
288
|
+
filePath: (0, node_path_1.join)(home, ".codeium", "windsurf", "memories", "global_rules.md"),
|
|
289
|
+
});
|
|
290
|
+
// Codex 全局指令:~/.codex/AGENTS.md
|
|
291
|
+
targets.push({
|
|
292
|
+
agent: "Codex",
|
|
293
|
+
markerDir: (0, node_path_1.join)(home, ".codex"),
|
|
294
|
+
destDir: (0, node_path_1.join)(home, ".codex"),
|
|
295
|
+
filePath: (0, node_path_1.join)(home, ".codex", "AGENTS.md"),
|
|
296
|
+
});
|
|
297
|
+
// Gemini CLI 全局指令:~/.gemini/GEMINI.md
|
|
298
|
+
targets.push({
|
|
299
|
+
agent: "Gemini",
|
|
300
|
+
markerDir: (0, node_path_1.join)(home, ".gemini"),
|
|
301
|
+
destDir: (0, node_path_1.join)(home, ".gemini"),
|
|
302
|
+
filePath: (0, node_path_1.join)(home, ".gemini", "GEMINI.md"),
|
|
303
|
+
});
|
|
304
|
+
return targets;
|
|
305
|
+
}
|
|
306
|
+
/**
|
|
307
|
+
* 将 GraphFlow 指令块安全写入所有检测到的 agent 的全局规则/记忆文件。
|
|
308
|
+
* 使用 append-with-markers,绝不覆盖用户已有内容。
|
|
309
|
+
*/
|
|
310
|
+
function installAgentInstructions() {
|
|
311
|
+
const results = [];
|
|
312
|
+
for (const target of getAgentInstructionTargets()) {
|
|
313
|
+
if (!(0, node_fs_1.existsSync)(target.markerDir)) {
|
|
314
|
+
continue; // 未检测到该 agent,跳过
|
|
315
|
+
}
|
|
316
|
+
const result = upsertManagedBlock(target.filePath, target.destDir);
|
|
317
|
+
results.push({ target: target.agent, status: result.status, message: result.message });
|
|
318
|
+
}
|
|
319
|
+
if (results.length === 0) {
|
|
320
|
+
results.push({ target: "Agent instructions", status: "skipped", message: "No supported agent detected" });
|
|
321
|
+
}
|
|
322
|
+
return results;
|
|
323
|
+
}
|
|
324
|
+
/** 检查每个 agent 的全局指令文件是否含 GraphFlow 受管块(用于 doctor 自检)。 */
|
|
325
|
+
function getAgentInstructionStatus() {
|
|
326
|
+
return getAgentInstructionTargets().map((target) => {
|
|
327
|
+
const detected = (0, node_fs_1.existsSync)(target.markerDir);
|
|
328
|
+
let installed = false;
|
|
329
|
+
if ((0, node_fs_1.existsSync)(target.filePath)) {
|
|
330
|
+
const content = (0, node_fs_1.readFileSync)(target.filePath, "utf8");
|
|
331
|
+
installed = content.includes(INSTRUCTION_BEGIN) && content.includes(INSTRUCTION_END);
|
|
332
|
+
}
|
|
333
|
+
return { agent: target.agent, configPath: target.filePath, detected, installed };
|
|
334
|
+
});
|
|
335
|
+
}
|
|
336
|
+
// ── Agent Skill 文件夹安装(真正的 Cursor / Claude / Codex Skill) ────────
|
|
337
|
+
/**
|
|
338
|
+
* 各 agent 的"真正的 Skill"目录目标(仅在检测到对应 marker 时写入)。
|
|
339
|
+
*
|
|
340
|
+
* 重要:Cursor 自定义 Skill 的正确目录是 `~/.cursor/skills/<name>/SKILL.md`,
|
|
341
|
+
* 绝不能写入 `~/.cursor/skills-cursor/`(那是 Cursor 内置 Skill 的保留目录)。
|
|
342
|
+
* Claude Code / Codex 同样支持 `~/.claude/skills/`、`~/.codex/skills/` 约定。
|
|
343
|
+
*/
|
|
344
|
+
function getAgentSkillTargets() {
|
|
345
|
+
const { home } = resolveHomePaths();
|
|
346
|
+
return [
|
|
347
|
+
// Cursor 用户级 Skill(~/.cursor/skills/graphflow/SKILL.md)
|
|
348
|
+
{
|
|
349
|
+
agent: "Cursor",
|
|
350
|
+
markerDir: (0, node_path_1.join)(home, ".cursor"),
|
|
351
|
+
skillsRoot: (0, node_path_1.join)(home, ".cursor", "skills"),
|
|
352
|
+
},
|
|
353
|
+
// Claude Code 用户级 Skill(~/.claude/skills/graphflow/SKILL.md)
|
|
354
|
+
{
|
|
355
|
+
agent: "Claude Code",
|
|
356
|
+
markerDir: (0, node_path_1.join)(home, ".claude"),
|
|
357
|
+
skillsRoot: (0, node_path_1.join)(home, ".claude", "skills"),
|
|
358
|
+
},
|
|
359
|
+
// Codex 用户级 Skill(~/.codex/skills/graphflow/SKILL.md)
|
|
360
|
+
{
|
|
361
|
+
agent: "Codex",
|
|
362
|
+
markerDir: (0, node_path_1.join)(home, ".codex"),
|
|
363
|
+
skillsRoot: (0, node_path_1.join)(home, ".codex", "skills"),
|
|
364
|
+
},
|
|
365
|
+
];
|
|
366
|
+
}
|
|
367
|
+
/**
|
|
368
|
+
* 将 GraphFlow 的 SKILL.md 安装为各检测到的 agent 的"真正的 Skill"
|
|
369
|
+
* (Cursor / Claude Code / Codex 的 `skills/graphflow/SKILL.md`)。
|
|
370
|
+
* SKILL.md 已带合法的 `name: graphflow` frontmatter,可被 Cursor 直接识别。
|
|
371
|
+
*/
|
|
372
|
+
function installAgentSkills(vendorRuntimeRoot) {
|
|
373
|
+
const results = [];
|
|
374
|
+
const skillSourceDir = resolveSkillSourcePath(vendorRuntimeRoot);
|
|
375
|
+
if (!skillSourceDir) {
|
|
376
|
+
results.push({
|
|
377
|
+
target: "Agent skills",
|
|
378
|
+
status: "skipped",
|
|
379
|
+
message: "Skill source (SKILL.md) not found",
|
|
380
|
+
});
|
|
381
|
+
return results;
|
|
382
|
+
}
|
|
383
|
+
const sourceSkillFile = (0, node_path_1.join)(skillSourceDir, "SKILL.md");
|
|
384
|
+
for (const target of getAgentSkillTargets()) {
|
|
385
|
+
if (!(0, node_fs_1.existsSync)(target.markerDir)) {
|
|
386
|
+
continue; // 未检测到该 agent,跳过
|
|
387
|
+
}
|
|
388
|
+
try {
|
|
389
|
+
const destDir = (0, node_path_1.join)(target.skillsRoot, "graphflow");
|
|
390
|
+
const result = installFile(sourceSkillFile, destDir, "SKILL.md");
|
|
391
|
+
results.push({ target: target.agent, status: result.status, message: result.message });
|
|
392
|
+
}
|
|
393
|
+
catch (error) {
|
|
394
|
+
results.push({
|
|
395
|
+
target: target.agent,
|
|
396
|
+
status: "error",
|
|
397
|
+
message: error instanceof Error ? error.message : String(error),
|
|
398
|
+
});
|
|
399
|
+
}
|
|
400
|
+
}
|
|
401
|
+
if (results.length === 0) {
|
|
402
|
+
results.push({
|
|
403
|
+
target: "Agent skills",
|
|
404
|
+
status: "skipped",
|
|
405
|
+
message: "No supported agent detected",
|
|
406
|
+
});
|
|
407
|
+
}
|
|
408
|
+
return results;
|
|
409
|
+
}
|
|
410
|
+
/** 检查每个 agent 的 Skill 文件是否已安装(用于 doctor 自检)。 */
|
|
411
|
+
function getAgentSkillStatus() {
|
|
412
|
+
return getAgentSkillTargets().map((target) => {
|
|
413
|
+
const detected = (0, node_fs_1.existsSync)(target.markerDir);
|
|
414
|
+
const filePath = (0, node_path_1.join)(target.skillsRoot, "graphflow", "SKILL.md");
|
|
415
|
+
return { agent: `${target.agent} skill`, configPath: filePath, detected, installed: (0, node_fs_1.existsSync)(filePath) };
|
|
416
|
+
});
|
|
417
|
+
}
|
|
418
|
+
// ── 单项安装函数 ──────────────────────────────────────────────────────
|
|
419
|
+
/**
|
|
420
|
+
* 安装 Trae Skill(SKILL.md)到所有检测到的 Trae 用户目录。
|
|
421
|
+
*/
|
|
422
|
+
function installTraeSkills(vendorRuntimeRoot) {
|
|
423
|
+
const results = [];
|
|
424
|
+
const skillSourceDir = resolveSkillSourcePath(vendorRuntimeRoot);
|
|
425
|
+
if (!skillSourceDir) {
|
|
426
|
+
results.push({
|
|
427
|
+
target: "Trae",
|
|
428
|
+
status: "skipped",
|
|
429
|
+
message: "Skill source (SKILL.md) not found",
|
|
430
|
+
});
|
|
431
|
+
return results;
|
|
432
|
+
}
|
|
433
|
+
const traeDirs = getTraeUserDirs();
|
|
434
|
+
if (traeDirs.length === 0) {
|
|
435
|
+
results.push({
|
|
436
|
+
target: "Trae",
|
|
437
|
+
status: "skipped",
|
|
438
|
+
message: "No Trae installation detected",
|
|
439
|
+
});
|
|
440
|
+
return results;
|
|
441
|
+
}
|
|
442
|
+
const sourceSkillFile = (0, node_path_1.join)(skillSourceDir, "SKILL.md");
|
|
443
|
+
for (const trae of traeDirs) {
|
|
444
|
+
try {
|
|
445
|
+
const destDir = (0, node_path_1.join)(trae.skillsDir, "graphflow");
|
|
446
|
+
const result = installFile(sourceSkillFile, destDir, "SKILL.md");
|
|
447
|
+
results.push({ target: trae.name, status: result.status, message: result.message });
|
|
448
|
+
}
|
|
449
|
+
catch (error) {
|
|
450
|
+
results.push({
|
|
451
|
+
target: trae.name,
|
|
452
|
+
status: "error",
|
|
453
|
+
message: error instanceof Error ? error.message : String(error),
|
|
454
|
+
});
|
|
455
|
+
}
|
|
456
|
+
}
|
|
457
|
+
return results;
|
|
458
|
+
}
|
|
459
|
+
/**
|
|
460
|
+
* 安装 Cursor Rules(graphflow.mdc)到所有检测到的 Cursor 用户目录。
|
|
461
|
+
*/
|
|
462
|
+
function installCursorRules(vendorRuntimeRoot) {
|
|
463
|
+
const results = [];
|
|
464
|
+
const rulesSourceDir = resolveCursorRulesSourcePath(vendorRuntimeRoot);
|
|
465
|
+
if (!rulesSourceDir) {
|
|
466
|
+
results.push({
|
|
467
|
+
target: "Cursor",
|
|
468
|
+
status: "skipped",
|
|
469
|
+
message: "Cursor rules source (graphflow.mdc) not found",
|
|
470
|
+
});
|
|
471
|
+
return results;
|
|
472
|
+
}
|
|
473
|
+
const cursorDirs = getCursorRulesDirs();
|
|
474
|
+
if (cursorDirs.length === 0) {
|
|
475
|
+
results.push({
|
|
476
|
+
target: "Cursor",
|
|
477
|
+
status: "skipped",
|
|
478
|
+
message: "No Cursor installation detected",
|
|
479
|
+
});
|
|
480
|
+
return results;
|
|
481
|
+
}
|
|
482
|
+
const sourceRulesFile = (0, node_path_1.join)(rulesSourceDir, "graphflow.mdc");
|
|
483
|
+
for (const cursor of cursorDirs) {
|
|
484
|
+
try {
|
|
485
|
+
const result = installFile(sourceRulesFile, cursor.rulesDir, "graphflow.mdc");
|
|
486
|
+
results.push({ target: cursor.name, status: result.status, message: result.message });
|
|
487
|
+
}
|
|
488
|
+
catch (error) {
|
|
489
|
+
results.push({
|
|
490
|
+
target: cursor.name,
|
|
491
|
+
status: "error",
|
|
492
|
+
message: error instanceof Error ? error.message : String(error),
|
|
493
|
+
});
|
|
494
|
+
}
|
|
495
|
+
}
|
|
496
|
+
return results;
|
|
497
|
+
}
|
|
498
|
+
/**
|
|
499
|
+
* 安装 Claude Code CLAUDE.md 到检测到的 Claude Code 用户目录。
|
|
500
|
+
*/
|
|
501
|
+
function installClaudeCodeMd(vendorRuntimeRoot) {
|
|
502
|
+
const results = [];
|
|
503
|
+
const sourcePath = resolveClaudeMdSourcePath(vendorRuntimeRoot);
|
|
504
|
+
if (!sourcePath) {
|
|
505
|
+
results.push({
|
|
506
|
+
target: "Claude Code",
|
|
507
|
+
status: "skipped",
|
|
508
|
+
message: "CLAUDE.md source not found",
|
|
509
|
+
});
|
|
510
|
+
return results;
|
|
511
|
+
}
|
|
512
|
+
const claudeDirs = getClaudeCodeDirs();
|
|
513
|
+
if (claudeDirs.length === 0) {
|
|
514
|
+
results.push({
|
|
515
|
+
target: "Claude Code",
|
|
516
|
+
status: "skipped",
|
|
517
|
+
message: "No Claude Code installation detected",
|
|
518
|
+
});
|
|
519
|
+
return results;
|
|
520
|
+
}
|
|
521
|
+
for (const claude of claudeDirs) {
|
|
522
|
+
try {
|
|
523
|
+
const result = installFile(sourcePath, claude.claudeDir, "CLAUDE.md");
|
|
524
|
+
results.push({ target: claude.name, status: result.status, message: result.message });
|
|
525
|
+
}
|
|
526
|
+
catch (error) {
|
|
527
|
+
results.push({
|
|
528
|
+
target: claude.name,
|
|
529
|
+
status: "error",
|
|
530
|
+
message: error instanceof Error ? error.message : String(error),
|
|
531
|
+
});
|
|
532
|
+
}
|
|
533
|
+
}
|
|
534
|
+
return results;
|
|
535
|
+
}
|
|
536
|
+
// ── 一站式安装函数 ────────────────────────────────────────────────────
|
|
537
|
+
/**
|
|
538
|
+
* 一键安装所有 Skill / Rules / CLAUDE.md。
|
|
539
|
+
* 所有失败静默处理(catch + 返回 error 状态),不会抛出异常。
|
|
540
|
+
*
|
|
541
|
+
* @param vendorRuntimeRoot 可选的 vendor 运行时根目录(VS Code 扩展中使用)
|
|
542
|
+
* @param log 可选的日志回调,用于输出安装信息
|
|
543
|
+
*/
|
|
544
|
+
function installAllSkills(vendorRuntimeRoot, log) {
|
|
545
|
+
const logFn = log ?? ((msg) => console.log(msg));
|
|
546
|
+
const traeSkills = installTraeSkills(vendorRuntimeRoot);
|
|
547
|
+
for (const result of traeSkills) {
|
|
548
|
+
if (result.status === "error") {
|
|
549
|
+
logFn(`[WARN] Trae Skill ${result.target}: ${result.message}`);
|
|
550
|
+
continue;
|
|
551
|
+
}
|
|
552
|
+
if (result.status === "skipped") {
|
|
553
|
+
logFn(`[SKIP] Trae Skill ${result.target}: ${result.message ?? "skipped"}`);
|
|
554
|
+
continue;
|
|
555
|
+
}
|
|
556
|
+
logFn(`[OK] ${result.status === "created" ? "Created" : "Updated"} Trae Skill for ${result.target}`);
|
|
557
|
+
}
|
|
558
|
+
const cursorRules = installCursorRules(vendorRuntimeRoot);
|
|
559
|
+
for (const result of cursorRules) {
|
|
560
|
+
if (result.status === "error") {
|
|
561
|
+
logFn(`[WARN] Cursor Rules ${result.target}: ${result.message}`);
|
|
562
|
+
continue;
|
|
563
|
+
}
|
|
564
|
+
if (result.status === "skipped") {
|
|
565
|
+
logFn(`[SKIP] Cursor Rules ${result.target}: ${result.message ?? "skipped"}`);
|
|
566
|
+
continue;
|
|
567
|
+
}
|
|
568
|
+
logFn(`[OK] ${result.status === "created" ? "Created" : "Updated"} Cursor Rules for ${result.target}`);
|
|
569
|
+
}
|
|
570
|
+
const claudeMd = installClaudeCodeMd(vendorRuntimeRoot);
|
|
571
|
+
for (const result of claudeMd) {
|
|
572
|
+
if (result.status === "error") {
|
|
573
|
+
logFn(`[WARN] Claude Code CLAUDE.md ${result.target}: ${result.message}`);
|
|
574
|
+
continue;
|
|
575
|
+
}
|
|
576
|
+
if (result.status === "skipped") {
|
|
577
|
+
logFn(`[SKIP] Claude Code CLAUDE.md ${result.target}: ${result.message ?? "skipped"}`);
|
|
578
|
+
continue;
|
|
579
|
+
}
|
|
580
|
+
logFn(`[OK] ${result.status === "created" ? "Created" : "Updated"} Claude Code CLAUDE.md for ${result.target}`);
|
|
581
|
+
}
|
|
582
|
+
// 向所有检测到的 agent 的全局规则/记忆文件安全写入 GraphFlow 指令块
|
|
583
|
+
// (Windsurf / Codex / Gemini 等,append-with-markers,不覆盖用户内容)。
|
|
584
|
+
const agentInstructions = installAgentInstructions();
|
|
585
|
+
for (const result of agentInstructions) {
|
|
586
|
+
if (result.status === "error") {
|
|
587
|
+
logFn(`[WARN] Agent instructions ${result.target}: ${result.message}`);
|
|
588
|
+
continue;
|
|
589
|
+
}
|
|
590
|
+
if (result.status === "skipped") {
|
|
591
|
+
logFn(`[SKIP] Agent instructions ${result.target}: ${result.message ?? "skipped"}`);
|
|
592
|
+
continue;
|
|
593
|
+
}
|
|
594
|
+
logFn(`[OK] ${result.status === "created" ? "Created" : "Updated"} GraphFlow instructions for ${result.target}`);
|
|
595
|
+
}
|
|
596
|
+
// 安装"真正的 Agent Skill"(Cursor / Claude Code / Codex 的 skills/graphflow/SKILL.md),
|
|
597
|
+
// 这样在 Cursor 的 Skills 列表中也能看到 graphflow,而不仅仅是 Rule。
|
|
598
|
+
const agentSkills = installAgentSkills(vendorRuntimeRoot);
|
|
599
|
+
for (const result of agentSkills) {
|
|
600
|
+
if (result.status === "error") {
|
|
601
|
+
logFn(`[WARN] Agent Skill ${result.target}: ${result.message}`);
|
|
602
|
+
continue;
|
|
603
|
+
}
|
|
604
|
+
if (result.status === "skipped") {
|
|
605
|
+
logFn(`[SKIP] Agent Skill ${result.target}: ${result.message ?? "skipped"}`);
|
|
606
|
+
continue;
|
|
607
|
+
}
|
|
608
|
+
logFn(`[OK] ${result.status === "created" ? "Created" : "Updated"} GraphFlow Skill for ${result.target}`);
|
|
609
|
+
}
|
|
610
|
+
return { traeSkills, cursorRules, claudeMd, agentInstructions, agentSkills };
|
|
611
|
+
}
|
|
612
|
+
//# sourceMappingURL=skill-installer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skill-installer.js","sourceRoot":"","sources":["../../src/integrations/skill-installer.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,7 +2,18 @@ import type { GraphNode } from "../core/types";
|
|
|
2
2
|
export declare const EMBEDDING_DIM = 256;
|
|
3
3
|
export interface EmbeddingProvider {
|
|
4
4
|
embed(text: string): Promise<number[]>;
|
|
5
|
+
/**
|
|
6
|
+
* 预热:用一段简短的 dummy 文本(如 "warmup")做一次推理,
|
|
7
|
+
* 避免首个真实请求的冷启动延迟(尤其是本地模型懒加载场景)。
|
|
8
|
+
* 异步执行,不应阻塞主流程。可选实现。
|
|
9
|
+
*/
|
|
10
|
+
warmup?(): Promise<void>;
|
|
5
11
|
}
|
|
12
|
+
/**
|
|
13
|
+
* 安全地预热 embedding provider。不会抛出异常,适合用 `void warmupEmbeddingProvider(p)` 非阻塞调用。
|
|
14
|
+
* 预热失败不影响主流程,首个真实请求会再次尝试加载/推理。
|
|
15
|
+
*/
|
|
16
|
+
export declare function warmupEmbeddingProvider(provider: EmbeddingProvider): Promise<void>;
|
|
6
17
|
export declare function cosineSimilarity(a: number[], b: number[]): number;
|
|
7
18
|
export declare function hashEmbedding(text: string, dim?: number): number[];
|
|
8
19
|
export declare function createHashEmbeddingProvider(dim?: number): EmbeddingProvider;
|