@roarpeng/graphflow 1.3.0 → 1.3.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +19 -0
- package/README.md +1 -1
- package/dist/config/discover-workspace.d.ts +2 -0
- package/dist/config/discover-workspace.d.ts.map +1 -1
- package/dist/config/discover-workspace.js +46 -1
- package/dist/config/discover-workspace.js.map +1 -1
- package/dist/config/scaffold.d.ts +2 -1
- package/dist/config/scaffold.d.ts.map +1 -1
- package/dist/config/scaffold.js +36 -12
- package/dist/config/scaffold.js.map +1 -1
- package/dist/graph/file-indexer.d.ts.map +1 -1
- package/dist/graph/file-indexer.js +12 -5
- package/dist/graph/file-indexer.js.map +1 -1
- package/dist/graph/file-watcher.d.ts +29 -0
- package/dist/graph/file-watcher.d.ts.map +1 -0
- package/dist/graph/file-watcher.js +204 -0
- package/dist/graph/file-watcher.js.map +1 -0
- package/dist/graph/framework-routes.d.ts +15 -0
- package/dist/graph/framework-routes.d.ts.map +1 -0
- package/dist/graph/framework-routes.js +187 -0
- package/dist/graph/framework-routes.js.map +1 -0
- package/dist/graph/graph-analysis.d.ts +99 -0
- package/dist/graph/graph-analysis.d.ts.map +1 -0
- package/dist/graph/graph-analysis.js +286 -0
- package/dist/graph/graph-analysis.js.map +1 -0
- package/dist/graph/graph-search.d.ts +52 -0
- package/dist/graph/graph-search.d.ts.map +1 -0
- package/dist/graph/graph-search.js +132 -0
- package/dist/graph/graph-search.js.map +1 -0
- package/dist/graph/graphify-file-client.js +1 -1
- package/dist/graph/graphify-file-client.js.map +1 -1
- package/dist/graph/language-indexers/tree-sitter-loader.js +4 -4
- package/dist/graph/language-indexers/tree-sitter-loader.js.map +1 -1
- package/dist/integrations/agent-mcp-installer.d.ts +18 -0
- package/dist/integrations/agent-mcp-installer.d.ts.map +1 -1
- package/dist/integrations/agent-mcp-installer.js +238 -9
- package/dist/integrations/agent-mcp-installer.js.map +1 -1
- package/dist/integrations/skill-installer.d.ts +43 -3
- package/dist/integrations/skill-installer.d.ts.map +1 -1
- package/dist/integrations/skill-installer.js +294 -23
- 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 +58 -32
- package/dist/surfaces/cli/init.js.map +1 -1
- package/dist/surfaces/mcp/tool-definitions.d.ts.map +1 -1
- package/dist/surfaces/mcp/tool-definitions.js +18 -7
- package/dist/surfaces/mcp/tool-definitions.js.map +1 -1
- package/dist/surfaces/mcp/tool-handlers.d.ts.map +1 -1
- package/dist/surfaces/mcp/tool-handlers.js +102 -0
- package/dist/surfaces/mcp/tool-handlers.js.map +1 -1
- package/package.json +1 -1
- package/scripts/safe-postinstall.cjs +62 -49
|
@@ -117,20 +117,24 @@ function installSkill(skillsDir, skillSourceDir) {
|
|
|
117
117
|
return { status: "skipped", reason: "skill source not found" };
|
|
118
118
|
}
|
|
119
119
|
|
|
120
|
-
|
|
120
|
+
try {
|
|
121
|
+
const existed = existsSync(skillDestFile);
|
|
121
122
|
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
123
|
+
if (existed) {
|
|
124
|
+
const existingContent = readFileSync(skillDestFile, "utf8");
|
|
125
|
+
const newContent = readFileSync(skillSourceFile, "utf8");
|
|
126
|
+
if (existingContent === newContent) {
|
|
127
|
+
return { status: "skipped", reason: "already up to date" };
|
|
128
|
+
}
|
|
127
129
|
}
|
|
128
|
-
}
|
|
129
130
|
|
|
130
|
-
|
|
131
|
-
|
|
131
|
+
mkdirSync(skillDestDir, { recursive: true });
|
|
132
|
+
copyFileSync(skillSourceFile, skillDestFile);
|
|
132
133
|
|
|
133
|
-
|
|
134
|
+
return { status: existed ? "updated" : "created" };
|
|
135
|
+
} catch (err) {
|
|
136
|
+
return { status: "error", reason: err.message || String(err) };
|
|
137
|
+
}
|
|
134
138
|
}
|
|
135
139
|
|
|
136
140
|
function getSkillSourceDir() {
|
|
@@ -456,54 +460,63 @@ function main() {
|
|
|
456
460
|
const forceUpdate = needsForceUpdate(currentVersion);
|
|
457
461
|
const previousVersion = readPreviousVersion();
|
|
458
462
|
|
|
459
|
-
|
|
460
|
-
|
|
463
|
+
try {
|
|
464
|
+
console.log(`[GraphFlow] Running post-install setup (${globalInstall ? "global install" : "explicitly enabled"})...`);
|
|
465
|
+
console.log(`[GraphFlow] 版本: ${currentVersion}`);
|
|
461
466
|
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
+
if (forceUpdate && previousVersion) {
|
|
468
|
+
console.log(`[GraphFlow] 检测到版本变化 (${previousVersion} → ${currentVersion}),将强制更新所有 Skill/Rules/MCP 文件`);
|
|
469
|
+
} else if (forceUpdate && !previousVersion) {
|
|
470
|
+
console.log("[GraphFlow] 首次安装,将安装所有 Skill/Rules/MCP 文件");
|
|
471
|
+
}
|
|
467
472
|
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
473
|
+
const skillSourceDir = getSkillSourceDir();
|
|
474
|
+
const traeDirs = getTraeUserDirs();
|
|
475
|
+
|
|
476
|
+
const skillResults = [];
|
|
477
|
+
if (skillSourceDir && traeDirs.length > 0) {
|
|
478
|
+
for (const trae of traeDirs) {
|
|
479
|
+
const result = installSkill(trae.skillsDir, skillSourceDir);
|
|
480
|
+
skillResults.push({ agent: trae.name, ...result });
|
|
481
|
+
console.log(`[GraphFlow] Skill for ${trae.name}: ${result.status}${result.reason ? ` (${result.reason})` : ""}`);
|
|
482
|
+
}
|
|
477
483
|
}
|
|
478
|
-
}
|
|
479
484
|
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
485
|
+
const mcpResult = runMcpInstaller();
|
|
486
|
+
if (mcpResult.status === "installed" && Array.isArray(mcpResult.details)) {
|
|
487
|
+
for (const item of mcpResult.details) {
|
|
488
|
+
console.log(`[GraphFlow] MCP for ${item.agentName} (${item.scope}): ${item.status}`);
|
|
489
|
+
}
|
|
490
|
+
} else if (mcpResult.status === "skipped") {
|
|
491
|
+
console.log(`[GraphFlow] MCP install skipped: ${mcpResult.reason}`);
|
|
492
|
+
} else if (mcpResult.status === "error") {
|
|
493
|
+
console.log(`[GraphFlow] MCP install encountered errors: ${mcpResult.error || "unknown"}`);
|
|
494
|
+
console.log("[GraphFlow] You can manually run: npx @roarpeng/graphflow install");
|
|
484
495
|
}
|
|
485
|
-
} else if (mcpResult.status === "skipped") {
|
|
486
|
-
console.log(`[GraphFlow] MCP install skipped: ${mcpResult.reason}`);
|
|
487
|
-
}
|
|
488
496
|
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
497
|
+
// ─── Cursor Rules 安装 ───
|
|
498
|
+
const cursorRulesResult = installCursorRules();
|
|
499
|
+
if (cursorRulesResult) {
|
|
500
|
+
console.log(`[GraphFlow] Cursor Rules: ${cursorRulesResult.status}${cursorRulesResult.reason ? ` (${cursorRulesResult.reason})` : ""}`);
|
|
501
|
+
}
|
|
494
502
|
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
503
|
+
// ─── Claude Code 约定安装 ───
|
|
504
|
+
const claudeMdResult = installClaudeMd();
|
|
505
|
+
if (claudeMdResult) {
|
|
506
|
+
console.log(`[GraphFlow] Claude Code 约定: ${claudeMdResult.status}${claudeMdResult.reason ? ` (${claudeMdResult.reason})` : ""}`);
|
|
507
|
+
}
|
|
500
508
|
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
509
|
+
// 写入当前版本号标记文件
|
|
510
|
+
if (currentVersion !== "unknown") {
|
|
511
|
+
writeCurrentVersion(currentVersion);
|
|
512
|
+
}
|
|
505
513
|
|
|
506
|
-
|
|
514
|
+
console.log("[GraphFlow] Post-install complete.");
|
|
515
|
+
} catch (err) {
|
|
516
|
+
console.warn("[GraphFlow] Post-install setup encountered an error (non-fatal):", err.message || String(err));
|
|
517
|
+
console.warn("[GraphFlow] GraphFlow core is still installed. To complete setup manually, run:");
|
|
518
|
+
console.warn("[GraphFlow] npx @roarpeng/graphflow install");
|
|
519
|
+
}
|
|
507
520
|
}
|
|
508
521
|
|
|
509
522
|
if (require.main === module) {
|