@roarpeng/graphflow 1.2.0 → 1.3.1

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 (47) hide show
  1. package/CHANGELOG.md +42 -0
  2. package/README.md +49 -3
  3. package/dist/agents/insight.js +4 -2
  4. package/dist/agents/insight.js.map +1 -1
  5. package/dist/agents/planner.d.ts.map +1 -1
  6. package/dist/agents/planner.js +7 -2
  7. package/dist/agents/planner.js.map +1 -1
  8. package/dist/config/discover-workspace.d.ts +2 -0
  9. package/dist/config/discover-workspace.d.ts.map +1 -1
  10. package/dist/config/discover-workspace.js +46 -1
  11. package/dist/config/discover-workspace.js.map +1 -1
  12. package/dist/config/scaffold.d.ts +2 -1
  13. package/dist/config/scaffold.d.ts.map +1 -1
  14. package/dist/config/scaffold.js +36 -12
  15. package/dist/config/scaffold.js.map +1 -1
  16. package/dist/core/agent-delegation.d.ts +1 -0
  17. package/dist/core/agent-delegation.d.ts.map +1 -1
  18. package/dist/core/agent-delegation.js +30 -1
  19. package/dist/core/agent-delegation.js.map +1 -1
  20. package/dist/core/merge-agent-insight.d.ts.map +1 -1
  21. package/dist/core/merge-agent-insight.js +39 -8
  22. package/dist/core/merge-agent-insight.js.map +1 -1
  23. package/dist/integrations/agent-mcp-installer.d.ts +2 -0
  24. package/dist/integrations/agent-mcp-installer.d.ts.map +1 -1
  25. package/dist/integrations/agent-mcp-installer.js +133 -11
  26. package/dist/integrations/agent-mcp-installer.js.map +1 -1
  27. package/dist/integrations/skill-installer.d.ts +32 -2
  28. package/dist/integrations/skill-installer.d.ts.map +1 -1
  29. package/dist/integrations/skill-installer.js +300 -15
  30. package/dist/integrations/skill-installer.js.map +1 -1
  31. package/dist/surfaces/cli/index.js +9 -0
  32. package/dist/surfaces/cli/index.js.map +1 -1
  33. package/dist/surfaces/cli/init.d.ts +17 -1
  34. package/dist/surfaces/cli/init.d.ts.map +1 -1
  35. package/dist/surfaces/cli/init.js +95 -32
  36. package/dist/surfaces/cli/init.js.map +1 -1
  37. package/dist/surfaces/cli/output.d.ts.map +1 -1
  38. package/dist/surfaces/cli/output.js +1 -0
  39. package/dist/surfaces/cli/output.js.map +1 -1
  40. package/dist/surfaces/mcp/tool-definitions.d.ts.map +1 -1
  41. package/dist/surfaces/mcp/tool-definitions.js +18 -7
  42. package/dist/surfaces/mcp/tool-definitions.js.map +1 -1
  43. package/dist/surfaces/mcp/tool-handlers.d.ts.map +1 -1
  44. package/dist/surfaces/mcp/tool-handlers.js +102 -0
  45. package/dist/surfaces/mcp/tool-handlers.js.map +1 -1
  46. package/package.json +2 -1
  47. 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
- const existed = existsSync(skillDestFile);
120
+ try {
121
+ const existed = existsSync(skillDestFile);
121
122
 
122
- if (existed) {
123
- const existingContent = readFileSync(skillDestFile, "utf8");
124
- const newContent = readFileSync(skillSourceFile, "utf8");
125
- if (existingContent === newContent) {
126
- return { status: "skipped", reason: "already up to date" };
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
- mkdirSync(skillDestDir, { recursive: true });
131
- copyFileSync(skillSourceFile, skillDestFile);
131
+ mkdirSync(skillDestDir, { recursive: true });
132
+ copyFileSync(skillSourceFile, skillDestFile);
132
133
 
133
- return { status: existed ? "updated" : "created" };
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
- console.log(`[GraphFlow] Running post-install setup (${globalInstall ? "global install" : "explicitly enabled"})...`);
460
- console.log(`[GraphFlow] 版本: ${currentVersion}`);
463
+ try {
464
+ console.log(`[GraphFlow] Running post-install setup (${globalInstall ? "global install" : "explicitly enabled"})...`);
465
+ console.log(`[GraphFlow] 版本: ${currentVersion}`);
461
466
 
462
- if (forceUpdate && previousVersion) {
463
- console.log(`[GraphFlow] 检测到版本变化 (${previousVersion} → ${currentVersion}),将强制更新所有 Skill/Rules/MCP 文件`);
464
- } else if (forceUpdate && !previousVersion) {
465
- console.log("[GraphFlow] 首次安装,将安装所有 Skill/Rules/MCP 文件");
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
- const skillSourceDir = getSkillSourceDir();
469
- const traeDirs = getTraeUserDirs();
470
-
471
- const skillResults = [];
472
- if (skillSourceDir && traeDirs.length > 0) {
473
- for (const trae of traeDirs) {
474
- const result = installSkill(trae.skillsDir, skillSourceDir);
475
- skillResults.push({ agent: trae.name, ...result });
476
- console.log(`[GraphFlow] Skill for ${trae.name}: ${result.status}${result.reason ? ` (${result.reason})` : ""}`);
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
- const mcpResult = runMcpInstaller();
481
- if (mcpResult.status === "installed" && Array.isArray(mcpResult.details)) {
482
- for (const item of mcpResult.details) {
483
- console.log(`[GraphFlow] MCP for ${item.agentName} (${item.scope}): ${item.status}`);
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
- // ─── Cursor Rules 安装 ───
490
- const cursorRulesResult = installCursorRules();
491
- if (cursorRulesResult) {
492
- console.log(`[GraphFlow] Cursor Rules: ${cursorRulesResult.status}${cursorRulesResult.reason ? ` (${cursorRulesResult.reason})` : ""}`);
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
- // ─── Claude Code 约定安装 ───
496
- const claudeMdResult = installClaudeMd();
497
- if (claudeMdResult) {
498
- console.log(`[GraphFlow] Claude Code 约定: ${claudeMdResult.status}${claudeMdResult.reason ? ` (${claudeMdResult.reason})` : ""}`);
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
- if (currentVersion !== "unknown") {
503
- writeCurrentVersion(currentVersion);
504
- }
509
+ // 写入当前版本号标记文件
510
+ if (currentVersion !== "unknown") {
511
+ writeCurrentVersion(currentVersion);
512
+ }
505
513
 
506
- console.log("[GraphFlow] Post-install complete.");
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) {