@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.
Files changed (64) hide show
  1. package/CHANGELOG.md +32 -0
  2. package/README.md +60 -60
  3. package/README.zh.md +51 -51
  4. package/dist/config/discover-workspace.d.ts +18 -1
  5. package/dist/config/discover-workspace.d.ts.map +1 -1
  6. package/dist/config/discover-workspace.js +30 -3
  7. package/dist/config/discover-workspace.js.map +1 -1
  8. package/dist/core/orchestrator-phases.d.ts +70 -0
  9. package/dist/core/orchestrator-phases.d.ts.map +1 -0
  10. package/dist/core/orchestrator-phases.js +344 -0
  11. package/dist/core/orchestrator-phases.js.map +1 -0
  12. package/dist/core/orchestrator.d.ts.map +1 -1
  13. package/dist/core/orchestrator.js +47 -266
  14. package/dist/core/orchestrator.js.map +1 -1
  15. package/dist/graph/client-factory.d.ts.map +1 -1
  16. package/dist/graph/client-factory.js +7 -0
  17. package/dist/graph/client-factory.js.map +1 -1
  18. package/dist/integrations/agent-mcp-installer.d.ts.map +1 -1
  19. package/dist/integrations/agent-mcp-installer.js +42 -3
  20. package/dist/integrations/agent-mcp-installer.js.map +1 -1
  21. package/dist/integrations/agent-profiles/index.d.ts +2 -0
  22. package/dist/integrations/agent-profiles/index.d.ts.map +1 -1
  23. package/dist/integrations/agent-profiles/index.js +2 -0
  24. package/dist/integrations/agent-profiles/index.js.map +1 -1
  25. package/dist/integrations/agent-profiles/profiles/kimi-code.d.ts +2 -0
  26. package/dist/integrations/agent-profiles/profiles/kimi-code.d.ts.map +1 -0
  27. package/dist/integrations/agent-profiles/profiles/kimi-code.js +23 -0
  28. package/dist/integrations/agent-profiles/profiles/kimi-code.js.map +1 -0
  29. package/dist/integrations/agent-profiles/skills/kimi-code.d.ts +2 -0
  30. package/dist/integrations/agent-profiles/skills/kimi-code.d.ts.map +1 -0
  31. package/dist/integrations/agent-profiles/skills/kimi-code.js +14 -0
  32. package/dist/integrations/agent-profiles/skills/kimi-code.js.map +1 -0
  33. package/dist/integrations/host-adapter-install.d.ts +19 -6
  34. package/dist/integrations/host-adapter-install.d.ts.map +1 -1
  35. package/dist/integrations/host-adapter-install.js +88 -6
  36. package/dist/integrations/host-adapter-install.js.map +1 -1
  37. package/dist/integrations/host-adapter.d.ts +6 -2
  38. package/dist/integrations/host-adapter.d.ts.map +1 -1
  39. package/dist/integrations/host-adapter.js +68 -0
  40. package/dist/integrations/host-adapter.js.map +1 -1
  41. package/dist/integrations/kimi-code-host-installer.d.ts +36 -0
  42. package/dist/integrations/kimi-code-host-installer.d.ts.map +1 -0
  43. package/dist/integrations/kimi-code-host-installer.js +312 -0
  44. package/dist/integrations/kimi-code-host-installer.js.map +1 -0
  45. package/dist/integrations/kimi-code-paths.d.ts +8 -0
  46. package/dist/integrations/kimi-code-paths.d.ts.map +1 -0
  47. package/dist/integrations/kimi-code-paths.js +20 -0
  48. package/dist/integrations/kimi-code-paths.js.map +1 -0
  49. package/dist/integrations/profile-host-installer.d.ts +63 -0
  50. package/dist/integrations/profile-host-installer.d.ts.map +1 -0
  51. package/dist/integrations/profile-host-installer.js +223 -0
  52. package/dist/integrations/profile-host-installer.js.map +1 -0
  53. package/dist/integrations/skill-installer.d.ts +19 -0
  54. package/dist/integrations/skill-installer.d.ts.map +1 -1
  55. package/dist/integrations/skill-installer.js +104 -3
  56. package/dist/integrations/skill-installer.js.map +1 -1
  57. package/dist/surfaces/cli/init.d.ts.map +1 -1
  58. package/dist/surfaces/cli/init.js +97 -52
  59. package/dist/surfaces/cli/init.js.map +1 -1
  60. package/dist/surfaces/trae-skill/graphflow/SKILL.md +11 -1
  61. package/package.json +1 -1
  62. package/plugin.json +1 -1
  63. package/skills/graphflow/SKILL.md +11 -1
  64. 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":"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"}
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
- continue; // 未检测到该 agent,跳过
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
- if (results.length === 0) {
448
- results.push({ target: "Agent instructions", status: "skipped", message: "No supported agent detected" });
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 = [];