@roarpeng/graphflow 1.15.4 → 1.16.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 +32 -0
- package/README.md +60 -60
- package/README.zh.md +51 -51
- package/dist/config/discover-workspace.d.ts +18 -1
- package/dist/config/discover-workspace.d.ts.map +1 -1
- package/dist/config/discover-workspace.js +30 -3
- package/dist/config/discover-workspace.js.map +1 -1
- package/dist/core/orchestrator-phases.d.ts +70 -0
- package/dist/core/orchestrator-phases.d.ts.map +1 -0
- package/dist/core/orchestrator-phases.js +344 -0
- package/dist/core/orchestrator-phases.js.map +1 -0
- package/dist/core/orchestrator.d.ts.map +1 -1
- package/dist/core/orchestrator.js +47 -266
- package/dist/core/orchestrator.js.map +1 -1
- package/dist/graph/client-factory.d.ts.map +1 -1
- package/dist/graph/client-factory.js +7 -0
- package/dist/graph/client-factory.js.map +1 -1
- package/dist/integrations/agent-mcp-installer.d.ts.map +1 -1
- package/dist/integrations/agent-mcp-installer.js +42 -3
- package/dist/integrations/agent-mcp-installer.js.map +1 -1
- package/dist/integrations/agent-profiles/index.d.ts +2 -0
- package/dist/integrations/agent-profiles/index.d.ts.map +1 -1
- package/dist/integrations/agent-profiles/index.js +2 -0
- package/dist/integrations/agent-profiles/index.js.map +1 -1
- package/dist/integrations/agent-profiles/profiles/kimi-code.d.ts +2 -0
- package/dist/integrations/agent-profiles/profiles/kimi-code.d.ts.map +1 -0
- package/dist/integrations/agent-profiles/profiles/kimi-code.js +23 -0
- package/dist/integrations/agent-profiles/profiles/kimi-code.js.map +1 -0
- package/dist/integrations/agent-profiles/skills/kimi-code.d.ts +2 -0
- package/dist/integrations/agent-profiles/skills/kimi-code.d.ts.map +1 -0
- package/dist/integrations/agent-profiles/skills/kimi-code.js +14 -0
- package/dist/integrations/agent-profiles/skills/kimi-code.js.map +1 -0
- package/dist/integrations/host-adapter-install.d.ts +19 -6
- package/dist/integrations/host-adapter-install.d.ts.map +1 -1
- package/dist/integrations/host-adapter-install.js +88 -6
- package/dist/integrations/host-adapter-install.js.map +1 -1
- package/dist/integrations/host-adapter.d.ts +6 -2
- package/dist/integrations/host-adapter.d.ts.map +1 -1
- package/dist/integrations/host-adapter.js +68 -0
- package/dist/integrations/host-adapter.js.map +1 -1
- package/dist/integrations/kimi-code-host-installer.d.ts +36 -0
- package/dist/integrations/kimi-code-host-installer.d.ts.map +1 -0
- package/dist/integrations/kimi-code-host-installer.js +312 -0
- package/dist/integrations/kimi-code-host-installer.js.map +1 -0
- package/dist/integrations/kimi-code-paths.d.ts +8 -0
- package/dist/integrations/kimi-code-paths.d.ts.map +1 -0
- package/dist/integrations/kimi-code-paths.js +20 -0
- package/dist/integrations/kimi-code-paths.js.map +1 -0
- package/dist/integrations/profile-host-installer.d.ts +63 -0
- package/dist/integrations/profile-host-installer.d.ts.map +1 -0
- package/dist/integrations/profile-host-installer.js +223 -0
- package/dist/integrations/profile-host-installer.js.map +1 -0
- package/dist/integrations/skill-installer.d.ts +19 -0
- package/dist/integrations/skill-installer.d.ts.map +1 -1
- package/dist/integrations/skill-installer.js +104 -3
- package/dist/integrations/skill-installer.js.map +1 -1
- package/dist/surfaces/cli/init.d.ts.map +1 -1
- package/dist/surfaces/cli/init.js +97 -52
- package/dist/surfaces/cli/init.js.map +1 -1
- package/dist/surfaces/trae-skill/graphflow/SKILL.md +11 -1
- package/package.json +1 -1
- package/plugin.json +1 -1
- package/skills/graphflow/SKILL.md +11 -1
- package/src/surfaces/trae-skill/graphflow/SKILL.md +11 -1
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PROFILE_HOST_IDS = exports.PROFILE_HOST_SPECS = void 0;
|
|
4
|
+
exports.getProfileHostSpec = getProfileHostSpec;
|
|
5
|
+
exports.isProfileHost = isProfileHost;
|
|
6
|
+
exports.installProfileHost = installProfileHost;
|
|
7
|
+
exports.uninstallProfileHost = uninstallProfileHost;
|
|
8
|
+
exports.getProfileHostStatus = getProfileHostStatus;
|
|
9
|
+
/**
|
|
10
|
+
* Generic profile-backed HostAdapter install slice.
|
|
11
|
+
*
|
|
12
|
+
* v1.13 added the HostAdapter capability registry. v1.14/v1.15 migrated
|
|
13
|
+
* DeepSeek Harness, Cursor, Claude Code, and Kimi Code with hand-written
|
|
14
|
+
* slices. This module migrates the **remaining** profile-registry hosts
|
|
15
|
+
* (Trae, VS Code, Windsurf, Cline, Roo Code, Kilo Code, PearAI, Gemini,
|
|
16
|
+
* Codex, Antigravity, Amazon Q, Zed, Continue, Qoder, Opencode) with ONE
|
|
17
|
+
* generic slice driven by `PROFILE_HOST_SPECS`, so `installViaHostAdapter`
|
|
18
|
+
* becomes the single install / uninstall / status entry point for every host.
|
|
19
|
+
*
|
|
20
|
+
* Scoping guarantees (no cross-host writes):
|
|
21
|
+
* - MCP writes are scoped by `agentIdsOverride` (exact profile ids only).
|
|
22
|
+
* - Skill writes are scoped by exact `getAgentSkillTargets()` agent names.
|
|
23
|
+
* - Instruction writes are scoped by exact `getAgentInstructionTargets()` names.
|
|
24
|
+
*
|
|
25
|
+
* Every operation is safe to re-run: MCP entries are keyed by server name (no
|
|
26
|
+
* duplicates), Skill / instruction writes are content-compared, and uninstall
|
|
27
|
+
* returns `skipped` when there was nothing of ours to remove. A repeated MCP
|
|
28
|
+
* write may still report `updated` when the launcher node is rewritten.
|
|
29
|
+
*/
|
|
30
|
+
const agent_mcp_installer_1 = require("./agent-mcp-installer");
|
|
31
|
+
const host_adapter_1 = require("./host-adapter");
|
|
32
|
+
const skill_installer_1 = require("./skill-installer");
|
|
33
|
+
/**
|
|
34
|
+
* Registry of hosts whose install slice is fully derived from existing
|
|
35
|
+
* profile / skill / instruction targets. Migrated (hand-written) hosts —
|
|
36
|
+
* `deepseek-harness`, `cursor`, `claude-code`, `kimi-code` — are intentionally
|
|
37
|
+
* absent: they have host-specific behaviour (hooks, overlays, placeholder rules).
|
|
38
|
+
*/
|
|
39
|
+
exports.PROFILE_HOST_SPECS = {
|
|
40
|
+
trae: { profileIds: ["trae", "trae-windows"] },
|
|
41
|
+
vscode: { profileIds: ["vscode", "vscode-windows"] },
|
|
42
|
+
windsurf: { profileIds: ["windsurf", "windsurf-windows"], instructionTargets: ["Windsurf"] },
|
|
43
|
+
cline: { profileIds: ["cline", "cline-windows"], instructionTargets: ["Cline"] },
|
|
44
|
+
"roo-code": {
|
|
45
|
+
profileIds: ["roo-code"],
|
|
46
|
+
skillTargets: ["Roo Code"],
|
|
47
|
+
instructionTargets: ["Roo Code"],
|
|
48
|
+
},
|
|
49
|
+
kilocode: {
|
|
50
|
+
profileIds: ["kilocode"],
|
|
51
|
+
skillTargets: ["Kilo Code"],
|
|
52
|
+
instructionTargets: ["Kilo Code"],
|
|
53
|
+
},
|
|
54
|
+
pearai: { profileIds: ["pearai"] },
|
|
55
|
+
gemini: { profileIds: ["gemini", "gemini-windows"], instructionTargets: ["Gemini"] },
|
|
56
|
+
codex: {
|
|
57
|
+
profileIds: ["codex", "codex-windows"],
|
|
58
|
+
skillTargets: ["Codex", "Codex (agents)"],
|
|
59
|
+
instructionTargets: ["Codex"],
|
|
60
|
+
},
|
|
61
|
+
antigravity: { profileIds: ["antigravity"], skillTargets: ["Antigravity"] },
|
|
62
|
+
"amazon-q": { profileIds: ["amazon-q"] },
|
|
63
|
+
zed: { profileIds: ["zed"] },
|
|
64
|
+
continue: { profileIds: ["continue"] },
|
|
65
|
+
qoder: { profileIds: ["qoder"], skillTargets: ["Qoder", "Qoder CN"] },
|
|
66
|
+
opencode: { profileIds: ["opencode"], instructionTargets: ["Opencode"] },
|
|
67
|
+
};
|
|
68
|
+
exports.PROFILE_HOST_IDS = Object.keys(exports.PROFILE_HOST_SPECS);
|
|
69
|
+
function getProfileHostSpec(hostId) {
|
|
70
|
+
return exports.PROFILE_HOST_SPECS[hostId];
|
|
71
|
+
}
|
|
72
|
+
function isProfileHost(hostId) {
|
|
73
|
+
return Object.prototype.hasOwnProperty.call(exports.PROFILE_HOST_SPECS, hostId);
|
|
74
|
+
}
|
|
75
|
+
function rollupStatus(parts) {
|
|
76
|
+
if (parts.some((part) => part.status === "error"))
|
|
77
|
+
return "error";
|
|
78
|
+
if (parts.some((part) => part.status === "created" || part.status === "injected"))
|
|
79
|
+
return "created";
|
|
80
|
+
if (parts.some((part) => part.status === "updated"))
|
|
81
|
+
return "updated";
|
|
82
|
+
return "skipped";
|
|
83
|
+
}
|
|
84
|
+
function resultFromParts(parts, fallbackPath) {
|
|
85
|
+
const result = { status: rollupStatus(parts) };
|
|
86
|
+
const filePath = parts.find((part) => part.filePath)?.filePath ?? fallbackPath;
|
|
87
|
+
if (filePath !== undefined)
|
|
88
|
+
result.filePath = filePath;
|
|
89
|
+
const message = parts
|
|
90
|
+
.map((part) => part.message)
|
|
91
|
+
.filter((item) => Boolean(item))
|
|
92
|
+
.join("; ");
|
|
93
|
+
if (message)
|
|
94
|
+
result.message = message;
|
|
95
|
+
return result;
|
|
96
|
+
}
|
|
97
|
+
function mcpParts(results) {
|
|
98
|
+
return results.map((item) => {
|
|
99
|
+
const part = {
|
|
100
|
+
status: item.status,
|
|
101
|
+
filePath: item.configPath,
|
|
102
|
+
};
|
|
103
|
+
if (item.message !== undefined)
|
|
104
|
+
part.message = item.message;
|
|
105
|
+
return part;
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
/** Only removals count as work; already-absent entries must not mask a `skipped` rollup. */
|
|
109
|
+
function mcpRemoveParts(results) {
|
|
110
|
+
return results
|
|
111
|
+
.filter((item) => item.removed)
|
|
112
|
+
.map((item) => {
|
|
113
|
+
const part = {
|
|
114
|
+
status: "updated",
|
|
115
|
+
filePath: item.configPath,
|
|
116
|
+
};
|
|
117
|
+
if (item.message !== undefined)
|
|
118
|
+
part.message = item.message;
|
|
119
|
+
return part;
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
function skillParts(results) {
|
|
123
|
+
return results.map((item) => {
|
|
124
|
+
const part = { status: item.status };
|
|
125
|
+
if (item.message !== undefined)
|
|
126
|
+
part.message = item.message;
|
|
127
|
+
return part;
|
|
128
|
+
});
|
|
129
|
+
}
|
|
130
|
+
function mcpInstallOptions(spec, options) {
|
|
131
|
+
return {
|
|
132
|
+
strategy: "npx",
|
|
133
|
+
installScope: "user",
|
|
134
|
+
agentIdsOverride: options.agentIdsOverride !== undefined ? [...options.agentIdsOverride] : [...spec.profileIds],
|
|
135
|
+
};
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Install MCP + Skill + instruction block for one profile-backed host.
|
|
139
|
+
* Returns `undefined` when the host has no profile spec (caller falls back).
|
|
140
|
+
*/
|
|
141
|
+
function installProfileHost(hostId, options = {}) {
|
|
142
|
+
const spec = getProfileHostSpec(hostId);
|
|
143
|
+
if (!spec)
|
|
144
|
+
return undefined;
|
|
145
|
+
const mcp = (0, agent_mcp_installer_1.installMcpToDetectedAgents)(mcpInstallOptions(spec, options));
|
|
146
|
+
const skills = spec.skillTargets ? skillParts((0, skill_installer_1.installSkillToTargets)(spec.skillTargets)) : [];
|
|
147
|
+
const instructions = spec.instructionTargets
|
|
148
|
+
? skillParts((0, skill_installer_1.installInstructionsToTargets)(spec.instructionTargets))
|
|
149
|
+
: [];
|
|
150
|
+
const parts = [...mcpParts(mcp), ...skills, ...instructions];
|
|
151
|
+
if (parts.length === 0) {
|
|
152
|
+
return { status: "skipped", message: `${hostId} has no MCP target on this machine` };
|
|
153
|
+
}
|
|
154
|
+
return resultFromParts(parts, mcp[0]?.configPath);
|
|
155
|
+
}
|
|
156
|
+
/** Remove MCP + Skill + instruction block for one profile-backed host. */
|
|
157
|
+
function uninstallProfileHost(hostId, _options = {}) {
|
|
158
|
+
const spec = getProfileHostSpec(hostId);
|
|
159
|
+
if (!spec)
|
|
160
|
+
return undefined;
|
|
161
|
+
const mcp = spec.profileIds.flatMap((agentId) => (0, agent_mcp_installer_1.uninstallMcpFromDetectedAgents)({ agentId }));
|
|
162
|
+
const removedMcp = mcp.filter((item) => item.removed);
|
|
163
|
+
const skills = spec.skillTargets ? skillParts((0, skill_installer_1.removeSkillFromTargets)(spec.skillTargets)) : [];
|
|
164
|
+
const instructions = spec.instructionTargets
|
|
165
|
+
? skillParts((0, skill_installer_1.removeInstructionsFromTargets)(spec.instructionTargets))
|
|
166
|
+
: [];
|
|
167
|
+
const parts = [...mcpRemoveParts(mcp), ...skills, ...instructions];
|
|
168
|
+
const status = rollupStatus(parts);
|
|
169
|
+
if (status === "skipped") {
|
|
170
|
+
return { status: "skipped", message: "no GraphFlow files for this host" };
|
|
171
|
+
}
|
|
172
|
+
return resultFromParts(parts, removedMcp[0]?.configPath);
|
|
173
|
+
}
|
|
174
|
+
/** Detect / status snapshot for one profile-backed host. */
|
|
175
|
+
function getProfileHostStatus(hostId, _options = {}) {
|
|
176
|
+
const spec = getProfileHostSpec(hostId);
|
|
177
|
+
if (!spec)
|
|
178
|
+
return undefined;
|
|
179
|
+
const adapter = (0, host_adapter_1.getHostAdapter)(hostId);
|
|
180
|
+
const agent = adapter?.displayName ?? hostId;
|
|
181
|
+
const mcp = (0, agent_mcp_installer_1.getMcpInstallStatus)().filter((item) => spec.profileIds.includes(item.agentId));
|
|
182
|
+
const detectedIds = new Set((0, agent_mcp_installer_1.detectInstalledAgents)().map((item) => item.id));
|
|
183
|
+
const detected = mcp.some((item) => item.detected) || spec.profileIds.some((id) => detectedIds.has(id));
|
|
184
|
+
const mcpInstalled = mcp.some((item) => item.installed);
|
|
185
|
+
const skillStatuses = (spec.skillTargets ?? [])
|
|
186
|
+
.map((name) => (0, skill_installer_1.getAgentSkillStatus)().find((item) => item.agent === `${name} skill`))
|
|
187
|
+
.filter((item) => Boolean(item));
|
|
188
|
+
const skillInstalled = skillStatuses.length > 0
|
|
189
|
+
? skillStatuses.every((item) => item.installed)
|
|
190
|
+
: undefined;
|
|
191
|
+
const instructionStatuses = (spec.instructionTargets ?? [])
|
|
192
|
+
.map((name) => (0, skill_installer_1.getAgentInstructionStatus)().find((item) => item.agent === name))
|
|
193
|
+
.filter((item) => Boolean(item));
|
|
194
|
+
const rulesInstalled = instructionStatuses.length > 0
|
|
195
|
+
? instructionStatuses.every((item) => item.installed)
|
|
196
|
+
: undefined;
|
|
197
|
+
const status = {
|
|
198
|
+
hostId,
|
|
199
|
+
agent,
|
|
200
|
+
detected,
|
|
201
|
+
installed: mcpInstalled,
|
|
202
|
+
mcpInstalled,
|
|
203
|
+
mcpTargets: mcp.map((item) => ({
|
|
204
|
+
path: item.configPath,
|
|
205
|
+
installed: item.installed,
|
|
206
|
+
scope: item.scope,
|
|
207
|
+
agentName: item.agentName,
|
|
208
|
+
})),
|
|
209
|
+
};
|
|
210
|
+
if (mcp[0]?.configPath !== undefined)
|
|
211
|
+
status.mcpPath = mcp[0].configPath;
|
|
212
|
+
if (skillStatuses[0]?.configPath !== undefined)
|
|
213
|
+
status.skillPath = skillStatuses[0].configPath;
|
|
214
|
+
if (instructionStatuses[0]?.configPath !== undefined) {
|
|
215
|
+
status.rulesPath = instructionStatuses[0].configPath;
|
|
216
|
+
}
|
|
217
|
+
if (skillInstalled !== undefined)
|
|
218
|
+
status.skillInstalled = skillInstalled;
|
|
219
|
+
if (rulesInstalled !== undefined)
|
|
220
|
+
status.rulesInstalled = rulesInstalled;
|
|
221
|
+
return status;
|
|
222
|
+
}
|
|
223
|
+
//# sourceMappingURL=profile-host-installer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"profile-host-installer.js","sourceRoot":"","sources":["../../src/integrations/profile-host-installer.ts"],"names":[],"mappings":"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"}
|
|
@@ -74,6 +74,16 @@ export declare function getAgentInstructionTargets(): Array<{
|
|
|
74
74
|
* 使用 append-with-markers,绝不覆盖用户已有内容。
|
|
75
75
|
*/
|
|
76
76
|
export declare function installAgentInstructions(): SkillInstallResult[];
|
|
77
|
+
/**
|
|
78
|
+
* 将 GraphFlow 受管指令块写入**指定** agent 的全局规则/记忆文件(按 agent 名精确匹配)。
|
|
79
|
+
*
|
|
80
|
+
* HostAdapter 迁移用:让单个宿主的 install slice 只写自己的文件,
|
|
81
|
+
* 不因为"机器上还装了别的 agent"而顺带写入其它宿主。
|
|
82
|
+
* 未检测到(marker 目录不存在)的 agent 返回 skipped,绝不创建目录。
|
|
83
|
+
*/
|
|
84
|
+
export declare function installInstructionsToTargets(agentNames: readonly string[]): SkillInstallResult[];
|
|
85
|
+
/** 从**指定** agent 的全局指令文件移除 GraphFlow 受管块(HostAdapter 卸载用)。 */
|
|
86
|
+
export declare function removeInstructionsFromTargets(agentNames: readonly string[]): SkillInstallResult[];
|
|
77
87
|
/** 检查每个 agent 的全局指令文件是否含 GraphFlow 受管块(用于 doctor 自检)。 */
|
|
78
88
|
export declare function getAgentInstructionStatus(): AgentInstructionStatus[];
|
|
79
89
|
/**
|
|
@@ -104,6 +114,15 @@ export declare function getAgentSkillTargets(): Array<{
|
|
|
104
114
|
* SKILL.md 已带合法的 `name: graphflow` frontmatter,可被 Cursor 直接识别。
|
|
105
115
|
*/
|
|
106
116
|
export declare function installAgentSkills(vendorRuntimeRoot?: string, workspaceRoot?: string): SkillInstallResult[];
|
|
117
|
+
/**
|
|
118
|
+
* 将 GraphFlow SKILL.md 安装到**指定** agent 的 Skill 目录(按 agent 名精确匹配)。
|
|
119
|
+
*
|
|
120
|
+
* HostAdapter 迁移用:单宿主 install slice 只写自己的 `skills/graphflow/SKILL.md`。
|
|
121
|
+
* 未检测到(marker 目录不存在)的 agent 返回 skipped,绝不创建目录。
|
|
122
|
+
*/
|
|
123
|
+
export declare function installSkillToTargets(agentNames: readonly string[], vendorRuntimeRoot?: string): SkillInstallResult[];
|
|
124
|
+
/** 从**指定** agent 的 Skill 目录移除 graphflow Skill(HostAdapter 卸载用)。 */
|
|
125
|
+
export declare function removeSkillFromTargets(agentNames: readonly string[]): SkillInstallResult[];
|
|
107
126
|
/** 检查 Trae 用户 Skill 与项目级 Rules/Skill 安装状态(doctor 用)。 */
|
|
108
127
|
export declare function getTraeInstallStatus(workspaceRoot?: string): AgentInstructionStatus[];
|
|
109
128
|
/** 检查 Antigravity 用户 Skill 与项目级 Rules/Skill 安装状态(doctor 用)。 */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skill-installer.d.ts","sourceRoot":"","sources":["../../src/integrations/skill-installer.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"skill-installer.d.ts","sourceRoot":"","sources":["../../src/integrations/skill-installer.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,10 +9,14 @@ exports.resolveClaudeMdSourcePath = resolveClaudeMdSourcePath;
|
|
|
9
9
|
exports.buildInstructionBlock = buildInstructionBlock;
|
|
10
10
|
exports.getAgentInstructionTargets = getAgentInstructionTargets;
|
|
11
11
|
exports.installAgentInstructions = installAgentInstructions;
|
|
12
|
+
exports.installInstructionsToTargets = installInstructionsToTargets;
|
|
13
|
+
exports.removeInstructionsFromTargets = removeInstructionsFromTargets;
|
|
12
14
|
exports.getAgentInstructionStatus = getAgentInstructionStatus;
|
|
13
15
|
exports.getProjectLevelRuleTargets = getProjectLevelRuleTargets;
|
|
14
16
|
exports.getAgentSkillTargets = getAgentSkillTargets;
|
|
15
17
|
exports.installAgentSkills = installAgentSkills;
|
|
18
|
+
exports.installSkillToTargets = installSkillToTargets;
|
|
19
|
+
exports.removeSkillFromTargets = removeSkillFromTargets;
|
|
16
20
|
exports.getTraeInstallStatus = getTraeInstallStatus;
|
|
17
21
|
exports.getAntigravityInstallStatus = getAntigravityInstallStatus;
|
|
18
22
|
exports.getCopilotInstallStatus = getCopilotInstallStatus;
|
|
@@ -38,6 +42,7 @@ const node_fs_1 = require("node:fs");
|
|
|
38
42
|
const node_os_1 = require("node:os");
|
|
39
43
|
const node_path_1 = require("node:path");
|
|
40
44
|
const dsh_harness_installer_1 = require("./dsh-harness-installer");
|
|
45
|
+
const kimi_code_paths_1 = require("./kimi-code-paths");
|
|
41
46
|
// ── 平台检测 ──────────────────────────────────────────────────────────
|
|
42
47
|
const isWindows = process.platform === "win32";
|
|
43
48
|
function resolveHomePaths() {
|
|
@@ -416,6 +421,14 @@ function getAgentInstructionTargets() {
|
|
|
416
421
|
destDir: (0, node_path_1.join)(home, ".config", "opencode"),
|
|
417
422
|
filePath: (0, node_path_1.join)(home, ".config", "opencode", "AGENTS.md"),
|
|
418
423
|
});
|
|
424
|
+
// Kimi Code 全局指令:~/.kimi-code/AGENTS.md(或 $KIMI_CODE_HOME / GRAPHFLOW_KIMI_CODE_HOME)
|
|
425
|
+
const kimiHome = (0, kimi_code_paths_1.resolveKimiCodeHome)();
|
|
426
|
+
targets.push({
|
|
427
|
+
agent: "Kimi Code",
|
|
428
|
+
markerDir: kimiHome,
|
|
429
|
+
destDir: kimiHome,
|
|
430
|
+
filePath: (0, node_path_1.join)(kimiHome, "AGENTS.md"),
|
|
431
|
+
});
|
|
419
432
|
// Cline 全局指令:Documents/Cline/Rules/graphflow.md
|
|
420
433
|
const documentsDir = isWindows ? (0, node_path_1.join)(home, "Documents") : (0, node_path_1.join)(home, "Documents");
|
|
421
434
|
const clineMarkerCandidates = [
|
|
@@ -436,16 +449,47 @@ function getAgentInstructionTargets() {
|
|
|
436
449
|
* 使用 append-with-markers,绝不覆盖用户已有内容。
|
|
437
450
|
*/
|
|
438
451
|
function installAgentInstructions() {
|
|
452
|
+
const results = installInstructionsToTargets(getAgentInstructionTargets().map((target) => target.agent));
|
|
453
|
+
if (results.length === 0) {
|
|
454
|
+
results.push({ target: "Agent instructions", status: "skipped", message: "No supported agent detected" });
|
|
455
|
+
}
|
|
456
|
+
return results;
|
|
457
|
+
}
|
|
458
|
+
/**
|
|
459
|
+
* 将 GraphFlow 受管指令块写入**指定** agent 的全局规则/记忆文件(按 agent 名精确匹配)。
|
|
460
|
+
*
|
|
461
|
+
* HostAdapter 迁移用:让单个宿主的 install slice 只写自己的文件,
|
|
462
|
+
* 不因为"机器上还装了别的 agent"而顺带写入其它宿主。
|
|
463
|
+
* 未检测到(marker 目录不存在)的 agent 返回 skipped,绝不创建目录。
|
|
464
|
+
*/
|
|
465
|
+
function installInstructionsToTargets(agentNames) {
|
|
466
|
+
const wanted = new Set(agentNames);
|
|
439
467
|
const results = [];
|
|
440
468
|
for (const target of getAgentInstructionTargets()) {
|
|
469
|
+
if (!wanted.has(target.agent))
|
|
470
|
+
continue;
|
|
441
471
|
if (!(0, node_fs_1.existsSync)(target.markerDir)) {
|
|
442
|
-
|
|
472
|
+
results.push({ target: target.agent, status: "skipped", message: "agent not detected" });
|
|
473
|
+
continue;
|
|
443
474
|
}
|
|
444
475
|
const result = upsertManagedBlock(target.filePath, target.destDir);
|
|
445
476
|
results.push({ target: target.agent, status: result.status, message: result.message });
|
|
446
477
|
}
|
|
447
|
-
|
|
448
|
-
|
|
478
|
+
return results;
|
|
479
|
+
}
|
|
480
|
+
/** 从**指定** agent 的全局指令文件移除 GraphFlow 受管块(HostAdapter 卸载用)。 */
|
|
481
|
+
function removeInstructionsFromTargets(agentNames) {
|
|
482
|
+
const wanted = new Set(agentNames);
|
|
483
|
+
const results = [];
|
|
484
|
+
for (const target of getAgentInstructionTargets()) {
|
|
485
|
+
if (!wanted.has(target.agent))
|
|
486
|
+
continue;
|
|
487
|
+
const removed = removeManagedBlock(target.filePath);
|
|
488
|
+
results.push({
|
|
489
|
+
target: target.agent,
|
|
490
|
+
status: removed ? "updated" : "skipped",
|
|
491
|
+
message: removed ? "removed managed block" : "no managed block",
|
|
492
|
+
});
|
|
449
493
|
}
|
|
450
494
|
return results;
|
|
451
495
|
}
|
|
@@ -604,6 +648,11 @@ function getAgentSkillTargets() {
|
|
|
604
648
|
markerDir: (0, dsh_harness_installer_1.resolveDshHome)(),
|
|
605
649
|
skillsRoot: (0, node_path_1.join)((0, dsh_harness_installer_1.resolveDshHome)(), "skills"),
|
|
606
650
|
},
|
|
651
|
+
{
|
|
652
|
+
agent: "Kimi Code",
|
|
653
|
+
markerDir: (0, kimi_code_paths_1.resolveKimiCodeHome)(),
|
|
654
|
+
skillsRoot: (0, node_path_1.join)((0, kimi_code_paths_1.resolveKimiCodeHome)(), "skills"),
|
|
655
|
+
},
|
|
607
656
|
];
|
|
608
657
|
}
|
|
609
658
|
/**
|
|
@@ -671,6 +720,58 @@ function installAgentSkills(vendorRuntimeRoot, workspaceRoot) {
|
|
|
671
720
|
}
|
|
672
721
|
return results;
|
|
673
722
|
}
|
|
723
|
+
/**
|
|
724
|
+
* 将 GraphFlow SKILL.md 安装到**指定** agent 的 Skill 目录(按 agent 名精确匹配)。
|
|
725
|
+
*
|
|
726
|
+
* HostAdapter 迁移用:单宿主 install slice 只写自己的 `skills/graphflow/SKILL.md`。
|
|
727
|
+
* 未检测到(marker 目录不存在)的 agent 返回 skipped,绝不创建目录。
|
|
728
|
+
*/
|
|
729
|
+
function installSkillToTargets(agentNames, vendorRuntimeRoot) {
|
|
730
|
+
const wanted = new Set(agentNames);
|
|
731
|
+
const results = [];
|
|
732
|
+
const skillSourceDir = resolveSkillSourcePath(vendorRuntimeRoot);
|
|
733
|
+
if (!skillSourceDir) {
|
|
734
|
+
return [{ target: "Agent skills", status: "skipped", message: "Skill source (SKILL.md) not found" }];
|
|
735
|
+
}
|
|
736
|
+
const sourceSkillFile = (0, node_path_1.join)(skillSourceDir, "SKILL.md");
|
|
737
|
+
for (const target of getAgentSkillTargets()) {
|
|
738
|
+
if (!wanted.has(target.agent))
|
|
739
|
+
continue;
|
|
740
|
+
if (!(0, node_fs_1.existsSync)(target.markerDir)) {
|
|
741
|
+
results.push({ target: target.agent, status: "skipped", message: "agent not detected" });
|
|
742
|
+
continue;
|
|
743
|
+
}
|
|
744
|
+
try {
|
|
745
|
+
const destDir = (0, node_path_1.join)(target.skillsRoot, "graphflow");
|
|
746
|
+
const result = installFile(sourceSkillFile, destDir, "SKILL.md");
|
|
747
|
+
results.push({ target: target.agent, status: result.status, message: result.message });
|
|
748
|
+
}
|
|
749
|
+
catch (error) {
|
|
750
|
+
results.push({
|
|
751
|
+
target: target.agent,
|
|
752
|
+
status: "error",
|
|
753
|
+
message: error instanceof Error ? error.message : String(error),
|
|
754
|
+
});
|
|
755
|
+
}
|
|
756
|
+
}
|
|
757
|
+
return results;
|
|
758
|
+
}
|
|
759
|
+
/** 从**指定** agent 的 Skill 目录移除 graphflow Skill(HostAdapter 卸载用)。 */
|
|
760
|
+
function removeSkillFromTargets(agentNames) {
|
|
761
|
+
const wanted = new Set(agentNames);
|
|
762
|
+
const results = [];
|
|
763
|
+
for (const target of getAgentSkillTargets()) {
|
|
764
|
+
if (!wanted.has(target.agent))
|
|
765
|
+
continue;
|
|
766
|
+
const removed = removeAgentSkill(target.skillsRoot);
|
|
767
|
+
results.push({
|
|
768
|
+
target: target.agent,
|
|
769
|
+
status: removed ? "updated" : "skipped",
|
|
770
|
+
message: removed ? "removed graphflow skill" : "no graphflow skill",
|
|
771
|
+
});
|
|
772
|
+
}
|
|
773
|
+
return results;
|
|
774
|
+
}
|
|
674
775
|
/** 检查 Trae 用户 Skill 与项目级 Rules/Skill 安装状态(doctor 用)。 */
|
|
675
776
|
function getTraeInstallStatus(workspaceRoot) {
|
|
676
777
|
const out = [];
|