@runfusion/fusion 0.77.0-beta.12 → 0.77.0-beta.13

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 (147) hide show
  1. package/dist/bin.js +1636 -903
  2. package/dist/child-process-worker.js +1064 -466
  3. package/dist/client/.vite/manifest.json +260 -260
  4. package/dist/client/assets/AgentDetailView-DPoh46Ym.css +1 -0
  5. package/dist/client/assets/{AgentDetailView-BZfDgV8f.js → AgentDetailView-DwCr9HOY.js} +1 -1
  6. package/dist/client/assets/{AgentPermissionPolicyEditor-8yBqnwbx.js → AgentPermissionPolicyEditor-CXRP1R7V.js} +1 -1
  7. package/dist/client/assets/{AgentsView-BjMOtIMq.js → AgentsView-DEVhP_Ad.js} +3 -3
  8. package/dist/client/assets/CommandCenter-BshTzOtB.css +1 -0
  9. package/dist/client/assets/{CommandCenter-CDuO3HPd.js → CommandCenter-sNTR0N1L.js} +22 -22
  10. package/dist/client/assets/{DevServerView-C96RV0QJ.js → DevServerView-X1Ncu9x-.js} +1 -1
  11. package/dist/client/assets/{DirectoryPicker-iRielXf7.js → DirectoryPicker-UrDTGJYj.js} +1 -1
  12. package/dist/client/assets/{DocumentsView-DhAUnUD_.js → DocumentsView-DyyfLF1R.js} +1 -1
  13. package/dist/client/assets/{EvalsView--n1p2Bt0.js → EvalsView-DgMdhmj1.js} +1 -1
  14. package/dist/client/assets/{ExperimentalAgentOnboardingModal-DraglCCV.js → ExperimentalAgentOnboardingModal-DqETOMkr.js} +1 -1
  15. package/dist/client/assets/{GoalsView-BOWOua5t.js → GoalsView-Cai1_q1j.js} +1 -1
  16. package/dist/client/assets/{InsightsView-C5YcJZSc.js → InsightsView-DN9i_pr2.js} +1 -1
  17. package/dist/client/assets/{MemoryView-DsCuGVGx.js → MemoryView-DpVhI_BB.js} +1 -1
  18. package/dist/client/assets/{PatchnodeView-CzgChkJV.js → PatchnodeView-C9glaWoU.js} +1 -1
  19. package/dist/client/assets/{PiExtensionsManager-qYbmaigE.js → PiExtensionsManager-DkJ3I9ur.js} +1 -1
  20. package/dist/client/assets/{PluginManager-Cklj4Smo.js → PluginManager-C3BKqDE-.js} +1 -1
  21. package/dist/client/assets/{PullRequestView-C6vozTTI.js → PullRequestView-BCPolzJY.js} +1 -1
  22. package/dist/client/assets/{ReportModal-B0LU4E4L.js → ReportModal-CBc5lSf3.js} +1 -1
  23. package/dist/client/assets/{ResearchView-CpESx46e.js → ResearchView-BInIb1tK.js} +1 -1
  24. package/dist/client/assets/{SecretsView-8ZdH9Yzs.js → SecretsView-Db2mKOcp.js} +1 -1
  25. package/dist/client/assets/SettingsModal-BEULP2a7.css +1 -0
  26. package/dist/client/assets/SettingsModal-Dn9vcqW7.js +21 -0
  27. package/dist/client/assets/{SettingsModal-BJXu-dhz.js → SettingsModal-tnr4Y2cG.js} +1 -1
  28. package/dist/client/assets/{SettingsTextareaRow-th-q0_2k.js → SettingsTextareaRow-DDIEo7kX.js} +1 -1
  29. package/dist/client/assets/{SetupWizardModal-CBElxrRA.js → SetupWizardModal-BgpCpOJi.js} +2 -2
  30. package/dist/client/assets/{SkillsView-BuoicLbJ.js → SkillsView-C4_dPxaH.js} +1 -1
  31. package/dist/client/assets/{WorkflowNodeEditor-BDw0LpWM.js → WorkflowNodeEditor-BRIoMtdz.js} +1 -1
  32. package/dist/client/assets/{agent-import-generation-CNridJHO.js → agent-import-generation-DZjrAuLD.js} +1 -1
  33. package/dist/client/assets/{agentsOrgChartLayout-BopFGp0r.js → agentsOrgChartLayout-T3vfKGm-.js} +1 -1
  34. package/dist/client/assets/{app-DKzqBaeH.js → app-BUPxz3_I.js} +1 -1
  35. package/dist/client/assets/{app-y8x9KYqa.js → app-Bsb-vSJ2.js} +3 -3
  36. package/dist/client/assets/{app-DkJZhePX.js → app-CDMzhkVk.js} +1 -1
  37. package/dist/client/assets/{app-BtBMuy2Z.js → app-Ca3_7roP.js} +3 -3
  38. package/dist/client/assets/{app-JnrgtY9I.js → app-CaiQxtA9.js} +3 -3
  39. package/dist/client/assets/{app-LrO9EOLE.js → app-D7N3gRgK.js} +3 -3
  40. package/dist/client/assets/{app-Cv-4fcPl.js → app-Du0s0Xs8.js} +1 -1
  41. package/dist/client/assets/{architectureDiagram-3BPJPVTR-2_yoUOD5.js → architectureDiagram-3BPJPVTR-CG7lqp3T.js} +1 -1
  42. package/dist/client/assets/{blockDiagram-GPEHLZMM-ueBSwDJh.js → blockDiagram-GPEHLZMM-CCQyln9-.js} +1 -1
  43. package/dist/client/assets/{c4Diagram-AAUBKEIU-D0cUU3pE.js → c4Diagram-AAUBKEIU-DgTWfMuv.js} +1 -1
  44. package/dist/client/assets/channel-DQn8tAbt.js +1 -0
  45. package/dist/client/assets/{chunk-2J33WTMH-DKJnGdD6.js → chunk-2J33WTMH-DbvgPKWu.js} +1 -1
  46. package/dist/client/assets/{chunk-4BX2VUAB-BUrgUtvt.js → chunk-4BX2VUAB-Jeug78io.js} +1 -1
  47. package/dist/client/assets/{chunk-55IACEB6-DHy2hCYz.js → chunk-55IACEB6-wSkfWEqo.js} +1 -1
  48. package/dist/client/assets/{chunk-727SXJPM-Dgbhllem.js → chunk-727SXJPM-o-cSBR4a.js} +1 -1
  49. package/dist/client/assets/{chunk-AQP2D5EJ-tPbicvl-.js → chunk-AQP2D5EJ-9iL_Co48.js} +1 -1
  50. package/dist/client/assets/{chunk-FMBD7UC4-BpHFGFmo.js → chunk-FMBD7UC4-HKJKjpLt.js} +1 -1
  51. package/dist/client/assets/{chunk-ND2GUHAM-DUTQ63ld.js → chunk-ND2GUHAM-DZUdY7Yv.js} +1 -1
  52. package/dist/client/assets/{chunk-QZHKN3VN-ChCf_usL.js → chunk-QZHKN3VN-AFzlVJep.js} +1 -1
  53. package/dist/client/assets/classDiagram-4FO5ZUOK-BVZs0DmH.js +1 -0
  54. package/dist/client/assets/classDiagram-v2-Q7XG4LA2-BVZs0DmH.js +1 -0
  55. package/dist/client/assets/{cose-bilkent-S5V4N54A-DgWzHtF9.js → cose-bilkent-S5V4N54A-vhimfYza.js} +1 -1
  56. package/dist/client/assets/{dagre-BM42HDAG-gQ1C1xHJ.js → dagre-BM42HDAG-wPz2jgXD.js} +1 -1
  57. package/dist/client/assets/{dashboard-view-BtFepPos.js → dashboard-view-BJVPfjWI.js} +1 -1
  58. package/dist/client/assets/{dashboard-view-BXtoQ9a4.js → dashboard-view-BN6as5aN.js} +1 -1
  59. package/dist/client/assets/{dashboard-view-AQmzkBNb.js → dashboard-view-ByLTU9KO.js} +1 -1
  60. package/dist/client/assets/{dashboard-view-BLenRoXu.js → dashboard-view-HiX6AOAw.js} +1 -1
  61. package/dist/client/assets/{diagram-2AECGRRQ-Dv96I1MI.js → diagram-2AECGRRQ-DvPGnzo9.js} +1 -1
  62. package/dist/client/assets/{diagram-5GNKFQAL-BRyhjYes.js → diagram-5GNKFQAL-CUD0xVXq.js} +1 -1
  63. package/dist/client/assets/{diagram-KO2AKTUF-Bmj3ihjc.js → diagram-KO2AKTUF-p88av64o.js} +1 -1
  64. package/dist/client/assets/{diagram-LMA3HP47-BYHVCFK2.js → diagram-LMA3HP47-B2V_VFOf.js} +1 -1
  65. package/dist/client/assets/{diagram-OG6HWLK6-0WZBLayt.js → diagram-OG6HWLK6-CO02xKJJ.js} +1 -1
  66. package/dist/client/assets/{erDiagram-TEJ5UH35-Cu-yj8hA.js → erDiagram-TEJ5UH35-LiIZMOks.js} +1 -1
  67. package/dist/client/assets/{flowDiagram-I6XJVG4X-BSetu6oh.js → flowDiagram-I6XJVG4X-BMgU0xdB.js} +1 -1
  68. package/dist/client/assets/{folder-open-CkswT0lE.js → folder-open-Bfz0pfA0.js} +1 -1
  69. package/dist/client/assets/{ganttDiagram-6RSMTGT7-B5qn0KFQ.js → ganttDiagram-6RSMTGT7-C-DNnJ7F.js} +1 -1
  70. package/dist/client/assets/{gitGraphDiagram-PVQCEYII-BVB3wm46.js → gitGraphDiagram-PVQCEYII-BKnH_s4c.js} +1 -1
  71. package/dist/client/assets/index-D6zw4rNc.js +2937 -0
  72. package/dist/client/assets/index-lxhrCjd_.css +1 -0
  73. package/dist/client/assets/{infoDiagram-5YYISTIA-ZBNKOBSK.js → infoDiagram-5YYISTIA-DrFgtiS_.js} +1 -1
  74. package/dist/client/assets/{ishikawaDiagram-YF4QCWOH-CbNKgenI.js → ishikawaDiagram-YF4QCWOH-cXcVkWVR.js} +1 -1
  75. package/dist/client/assets/{journeyDiagram-JHISSGLW-BLc2FHIF.js → journeyDiagram-JHISSGLW-2rAR6JrI.js} +1 -1
  76. package/dist/client/assets/{kanban-definition-UN3LZRKU-B08tij8f.js → kanban-definition-UN3LZRKU-uaIVKg6k.js} +1 -1
  77. package/dist/client/assets/{mermaid.core-QX5z7w8Z.js → mermaid.core-Bl1eKb-3.js} +4 -4
  78. package/dist/client/assets/{mindmap-definition-RKZ34NQL-C1md8M3c.js → mindmap-definition-RKZ34NQL-C_ZfL855.js} +1 -1
  79. package/dist/client/assets/{pieDiagram-4H26LBE5-BoQbn3Xp.js → pieDiagram-4H26LBE5-B-GWMxe6.js} +1 -1
  80. package/dist/client/assets/{puzzle-DCqPnWPE.js → puzzle--EYtEUHj.js} +1 -1
  81. package/dist/client/assets/{quadrantDiagram-W4KKPZXB-DPvNcVK-.js → quadrantDiagram-W4KKPZXB-C4yu-vxx.js} +1 -1
  82. package/dist/client/assets/{requirementDiagram-4Y6WPE33-KfdYf15t.js → requirementDiagram-4Y6WPE33-CmsMO-mZ.js} +1 -1
  83. package/dist/client/assets/{sankeyDiagram-5OEKKPKP-D1Eyoanf.js → sankeyDiagram-5OEKKPKP-DKXXMJDr.js} +1 -1
  84. package/dist/client/assets/{sequenceDiagram-3UESZ5HK-CmODsbCf.js → sequenceDiagram-3UESZ5HK-DbpptsX5.js} +1 -1
  85. package/dist/client/assets/{standing-instructions-template-D_mPaGcG.js → standing-instructions-template-bCcrFYtU.js} +1 -1
  86. package/dist/client/assets/{stateDiagram-AJRCARHV-Blbw_21G.js → stateDiagram-AJRCARHV-DDwdEj_k.js} +1 -1
  87. package/dist/client/assets/{stateDiagram-v2-BHNVJYJU-DwMgvYO8.js → stateDiagram-v2-BHNVJYJU-CjOnclTc.js} +1 -1
  88. package/dist/client/assets/{timeline-definition-PNZ67QCA-DDtndgLc.js → timeline-definition-PNZ67QCA-Q8Appf3Z.js} +1 -1
  89. package/dist/client/assets/{upload-DGCjJkMH.js → upload-Ka3GrAEL.js} +1 -1
  90. package/dist/client/assets/{users-CbWZvFZP.js → users-B7a_oi7v.js} +1 -1
  91. package/dist/client/assets/{vennDiagram-CIIHVFJN-B6Sx0OqW.js → vennDiagram-CIIHVFJN-ZsuVN3Hk.js} +1 -1
  92. package/dist/client/assets/{wardley-L42UT6IY-_SQFYU4g.js → wardley-L42UT6IY-Eh9WyxS2.js} +1 -1
  93. package/dist/client/assets/{wardleyDiagram-YWT4CUSO-Ce5igv6s.js → wardleyDiagram-YWT4CUSO-CG1fl8Sj.js} +1 -1
  94. package/dist/client/assets/{xychartDiagram-2RQKCTM6-zI0zyvDP.js → xychartDiagram-2RQKCTM6-BnZAlrGh.js} +1 -1
  95. package/dist/client/index.html +2 -2
  96. package/dist/client/version.json +1 -1
  97. package/dist/droid-cli/package.json +1 -1
  98. package/dist/extension.js +1479 -798
  99. package/dist/pi-claude-cli/package.json +1 -1
  100. package/dist/plugin-sdk/index.d.ts +1 -1
  101. package/dist/plugin-sdk/index.js +25 -14
  102. package/dist/plugins/fusion-plugin-acp-runtime/bundled.js +25 -14
  103. package/dist/plugins/fusion-plugin-acp-runtime/package.json +1 -1
  104. package/dist/plugins/fusion-plugin-claude-runtime/bundled.js +25 -14
  105. package/dist/plugins/fusion-plugin-claude-runtime/package.json +1 -1
  106. package/dist/plugins/fusion-plugin-cli-printing-press/bundled.js +25 -14
  107. package/dist/plugins/fusion-plugin-cli-printing-press/package.json +1 -1
  108. package/dist/plugins/fusion-plugin-compound-engineering/bundled.js +25 -14
  109. package/dist/plugins/fusion-plugin-compound-engineering/package.json +1 -1
  110. package/dist/plugins/fusion-plugin-cursor-runtime/bundled.js +25 -14
  111. package/dist/plugins/fusion-plugin-cursor-runtime/package.json +1 -1
  112. package/dist/plugins/fusion-plugin-dependency-graph/bundled.js +25 -14
  113. package/dist/plugins/fusion-plugin-dependency-graph/package.json +1 -1
  114. package/dist/plugins/fusion-plugin-droid-runtime/bundled.js +25 -14
  115. package/dist/plugins/fusion-plugin-droid-runtime/package.json +1 -1
  116. package/dist/plugins/fusion-plugin-grok-runtime/bundled.js +25 -14
  117. package/dist/plugins/fusion-plugin-grok-runtime/package.json +1 -1
  118. package/dist/plugins/fusion-plugin-hermes-runtime/bundled.js +25 -14
  119. package/dist/plugins/fusion-plugin-hermes-runtime/package.json +1 -1
  120. package/dist/plugins/fusion-plugin-linear-import/bundled.js +25 -14
  121. package/dist/plugins/fusion-plugin-linear-import/package.json +1 -1
  122. package/dist/plugins/fusion-plugin-omp-runtime/bundled.js +25 -14
  123. package/dist/plugins/fusion-plugin-omp-runtime/package.json +1 -1
  124. package/dist/plugins/fusion-plugin-openclaw-runtime/bundled.js +25 -14
  125. package/dist/plugins/fusion-plugin-openclaw-runtime/package.json +1 -1
  126. package/dist/plugins/fusion-plugin-paperclip-runtime/bundled.js +25 -14
  127. package/dist/plugins/fusion-plugin-paperclip-runtime/package.json +1 -1
  128. package/dist/plugins/fusion-plugin-quality/bundled.js +25 -14
  129. package/dist/plugins/fusion-plugin-quality/package.json +1 -1
  130. package/dist/plugins/fusion-plugin-reports/bundled.js +25 -14
  131. package/dist/plugins/fusion-plugin-reports/package.json +1 -1
  132. package/dist/plugins/fusion-plugin-roadmap/bundled.js +25 -14
  133. package/dist/plugins/fusion-plugin-roadmap/package.json +1 -1
  134. package/dist/plugins/fusion-plugin-todos/bundled.js +25 -14
  135. package/dist/plugins/fusion-plugin-todos/package.json +1 -1
  136. package/dist/plugins/fusion-plugin-whatsapp-chat/bundled.js +25 -14
  137. package/dist/plugins/fusion-plugin-whatsapp-chat/package.json +1 -1
  138. package/package.json +1 -1
  139. package/dist/client/assets/AgentDetailView-jzgy1BAS.css +0 -1
  140. package/dist/client/assets/CommandCenter-ilm-DbtI.css +0 -1
  141. package/dist/client/assets/SettingsModal-B1UCDc_h.js +0 -21
  142. package/dist/client/assets/SettingsModal-C5ic1ls7.css +0 -1
  143. package/dist/client/assets/channel-DfvbdnTK.js +0 -1
  144. package/dist/client/assets/classDiagram-4FO5ZUOK-CkMyClXV.js +0 -1
  145. package/dist/client/assets/classDiagram-v2-Q7XG4LA2-CkMyClXV.js +0 -1
  146. package/dist/client/assets/index-BgE915SE.js +0 -2937
  147. package/dist/client/assets/index-e2yEk7y4.css +0 -1
@@ -9026,6 +9026,20 @@ function planReviewOptionalGroupNode(column, options = {}) {
9026
9026
  };
9027
9027
  }
9028
9028
 
9029
+ // ../core/src/workflows/workflow-merge-region.ts
9030
+ var MERGE_REGION_ENTRY_NODE_KINDS = /* @__PURE__ */ new Set([
9031
+ "merge-gate",
9032
+ "merge-attempt",
9033
+ "manual-merge-hold",
9034
+ "retry-backoff",
9035
+ "recovery-router",
9036
+ "branch-group-member-integration",
9037
+ "branch-group-promotion",
9038
+ "pr-create",
9039
+ "pr-respond",
9040
+ "pr-merge"
9041
+ ]);
9042
+
9029
9043
  // ../core/src/workflows/workflow-step-results.ts
9030
9044
  var PLAN_REVIEW_LEASE_STALENESS_MS = 15 * 60 * 1e3;
9031
9045
  var REMEDIATION_ATTEMPT_CLAIM_STALENESS_MS = 15 * 60 * 1e3;
@@ -10583,20 +10597,6 @@ function classifyWorkflowAgentNode(node) {
10583
10597
  }
10584
10598
  }
10585
10599
 
10586
- // ../core/src/workflows/workflow-merge-region.ts
10587
- var MERGE_REGION_ENTRY_NODE_KINDS = /* @__PURE__ */ new Set([
10588
- "merge-gate",
10589
- "merge-attempt",
10590
- "manual-merge-hold",
10591
- "retry-backoff",
10592
- "recovery-router",
10593
- "branch-group-member-integration",
10594
- "branch-group-promotion",
10595
- "pr-create",
10596
- "pr-respond",
10597
- "pr-merge"
10598
- ]);
10599
-
10600
10600
  // ../core/src/workflows/workflow-extension-types.ts
10601
10601
  function workflowExtensionRegistryId(pluginId, extensionId) {
10602
10602
  return `plugin:${pluginId}:${extensionId}`;
@@ -11588,6 +11588,16 @@ function validateReviewerAgentOverrides(nodes2) {
11588
11588
  if (Array.isArray(templateNodes)) validateReviewerAgentOverrides(templateNodes);
11589
11589
  }
11590
11590
  }
11591
+ function validateReadonlyMcpServersConfig(nodes2) {
11592
+ for (const node of nodes2) {
11593
+ const value = node.config?.readonlyMcpServers;
11594
+ if (value !== void 0 && (!Array.isArray(value) || value.some((name) => typeof name !== "string" || !name.trim()))) {
11595
+ throw new WorkflowIrError(`Workflow node '${node.id}' readonlyMcpServers must be an array of non-empty strings when present`);
11596
+ }
11597
+ const templateNodes = node.config?.template?.nodes;
11598
+ if (Array.isArray(templateNodes)) validateReadonlyMcpServersConfig(templateNodes);
11599
+ }
11600
+ }
11591
11601
  function validateThinkingLevelConfig(nodes2) {
11592
11602
  for (const node of nodes2) {
11593
11603
  const value = node.config?.thinkingLevel;
@@ -12202,6 +12212,7 @@ function validateV2(ir) {
12202
12212
  const topLevelIds = new Set(ir.nodes.map((n) => n.id));
12203
12213
  validateStepExecutePlacement(ir.nodes);
12204
12214
  validateThinkingLevelConfig(ir.nodes);
12215
+ validateReadonlyMcpServersConfig(ir.nodes);
12205
12216
  validateCredentialInstanceIdConfig(ir.nodes);
12206
12217
  validateReviewerAgentOverrides(ir.nodes);
12207
12218
  for (const node of ir.nodes) {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fusion-plugin-examples/grok-runtime",
3
- "version": "0.2.14-beta.12",
3
+ "version": "0.2.14-beta.13",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": {
@@ -9029,6 +9029,20 @@ function planReviewOptionalGroupNode(column, options = {}) {
9029
9029
  };
9030
9030
  }
9031
9031
 
9032
+ // ../core/src/workflows/workflow-merge-region.ts
9033
+ var MERGE_REGION_ENTRY_NODE_KINDS = /* @__PURE__ */ new Set([
9034
+ "merge-gate",
9035
+ "merge-attempt",
9036
+ "manual-merge-hold",
9037
+ "retry-backoff",
9038
+ "recovery-router",
9039
+ "branch-group-member-integration",
9040
+ "branch-group-promotion",
9041
+ "pr-create",
9042
+ "pr-respond",
9043
+ "pr-merge"
9044
+ ]);
9045
+
9032
9046
  // ../core/src/workflows/workflow-step-results.ts
9033
9047
  var PLAN_REVIEW_LEASE_STALENESS_MS = 15 * 60 * 1e3;
9034
9048
  var REMEDIATION_ATTEMPT_CLAIM_STALENESS_MS = 15 * 60 * 1e3;
@@ -10578,20 +10592,6 @@ function classifyWorkflowAgentNode(node) {
10578
10592
  }
10579
10593
  }
10580
10594
 
10581
- // ../core/src/workflows/workflow-merge-region.ts
10582
- var MERGE_REGION_ENTRY_NODE_KINDS = /* @__PURE__ */ new Set([
10583
- "merge-gate",
10584
- "merge-attempt",
10585
- "manual-merge-hold",
10586
- "retry-backoff",
10587
- "recovery-router",
10588
- "branch-group-member-integration",
10589
- "branch-group-promotion",
10590
- "pr-create",
10591
- "pr-respond",
10592
- "pr-merge"
10593
- ]);
10594
-
10595
10595
  // ../core/src/workflows/workflow-extension-types.ts
10596
10596
  function workflowExtensionRegistryId(pluginId, extensionId) {
10597
10597
  return `plugin:${pluginId}:${extensionId}`;
@@ -11583,6 +11583,16 @@ function validateReviewerAgentOverrides(nodes2) {
11583
11583
  if (Array.isArray(templateNodes)) validateReviewerAgentOverrides(templateNodes);
11584
11584
  }
11585
11585
  }
11586
+ function validateReadonlyMcpServersConfig(nodes2) {
11587
+ for (const node of nodes2) {
11588
+ const value = node.config?.readonlyMcpServers;
11589
+ if (value !== void 0 && (!Array.isArray(value) || value.some((name) => typeof name !== "string" || !name.trim()))) {
11590
+ throw new WorkflowIrError(`Workflow node '${node.id}' readonlyMcpServers must be an array of non-empty strings when present`);
11591
+ }
11592
+ const templateNodes = node.config?.template?.nodes;
11593
+ if (Array.isArray(templateNodes)) validateReadonlyMcpServersConfig(templateNodes);
11594
+ }
11595
+ }
11586
11596
  function validateThinkingLevelConfig(nodes2) {
11587
11597
  for (const node of nodes2) {
11588
11598
  const value = node.config?.thinkingLevel;
@@ -12197,6 +12207,7 @@ function validateV2(ir) {
12197
12207
  const topLevelIds = new Set(ir.nodes.map((n) => n.id));
12198
12208
  validateStepExecutePlacement(ir.nodes);
12199
12209
  validateThinkingLevelConfig(ir.nodes);
12210
+ validateReadonlyMcpServersConfig(ir.nodes);
12200
12211
  validateCredentialInstanceIdConfig(ir.nodes);
12201
12212
  validateReviewerAgentOverrides(ir.nodes);
12202
12213
  for (const node of ir.nodes) {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fusion-plugin-examples/hermes-runtime",
3
- "version": "0.2.86-beta.12",
3
+ "version": "0.2.86-beta.13",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": {
@@ -9026,6 +9026,20 @@ function planReviewOptionalGroupNode(column, options = {}) {
9026
9026
  };
9027
9027
  }
9028
9028
 
9029
+ // ../core/src/workflows/workflow-merge-region.ts
9030
+ var MERGE_REGION_ENTRY_NODE_KINDS = /* @__PURE__ */ new Set([
9031
+ "merge-gate",
9032
+ "merge-attempt",
9033
+ "manual-merge-hold",
9034
+ "retry-backoff",
9035
+ "recovery-router",
9036
+ "branch-group-member-integration",
9037
+ "branch-group-promotion",
9038
+ "pr-create",
9039
+ "pr-respond",
9040
+ "pr-merge"
9041
+ ]);
9042
+
9029
9043
  // ../core/src/workflows/workflow-step-results.ts
9030
9044
  var PLAN_REVIEW_LEASE_STALENESS_MS = 15 * 60 * 1e3;
9031
9045
  var REMEDIATION_ATTEMPT_CLAIM_STALENESS_MS = 15 * 60 * 1e3;
@@ -10575,20 +10589,6 @@ function classifyWorkflowAgentNode(node) {
10575
10589
  }
10576
10590
  }
10577
10591
 
10578
- // ../core/src/workflows/workflow-merge-region.ts
10579
- var MERGE_REGION_ENTRY_NODE_KINDS = /* @__PURE__ */ new Set([
10580
- "merge-gate",
10581
- "merge-attempt",
10582
- "manual-merge-hold",
10583
- "retry-backoff",
10584
- "recovery-router",
10585
- "branch-group-member-integration",
10586
- "branch-group-promotion",
10587
- "pr-create",
10588
- "pr-respond",
10589
- "pr-merge"
10590
- ]);
10591
-
10592
10592
  // ../core/src/workflows/workflow-extension-types.ts
10593
10593
  function workflowExtensionRegistryId(pluginId, extensionId) {
10594
10594
  return `plugin:${pluginId}:${extensionId}`;
@@ -11580,6 +11580,16 @@ function validateReviewerAgentOverrides(nodes2) {
11580
11580
  if (Array.isArray(templateNodes)) validateReviewerAgentOverrides(templateNodes);
11581
11581
  }
11582
11582
  }
11583
+ function validateReadonlyMcpServersConfig(nodes2) {
11584
+ for (const node of nodes2) {
11585
+ const value = node.config?.readonlyMcpServers;
11586
+ if (value !== void 0 && (!Array.isArray(value) || value.some((name) => typeof name !== "string" || !name.trim()))) {
11587
+ throw new WorkflowIrError(`Workflow node '${node.id}' readonlyMcpServers must be an array of non-empty strings when present`);
11588
+ }
11589
+ const templateNodes = node.config?.template?.nodes;
11590
+ if (Array.isArray(templateNodes)) validateReadonlyMcpServersConfig(templateNodes);
11591
+ }
11592
+ }
11583
11593
  function validateThinkingLevelConfig(nodes2) {
11584
11594
  for (const node of nodes2) {
11585
11595
  const value = node.config?.thinkingLevel;
@@ -12194,6 +12204,7 @@ function validateV2(ir) {
12194
12204
  const topLevelIds = new Set(ir.nodes.map((n) => n.id));
12195
12205
  validateStepExecutePlacement(ir.nodes);
12196
12206
  validateThinkingLevelConfig(ir.nodes);
12207
+ validateReadonlyMcpServersConfig(ir.nodes);
12197
12208
  validateCredentialInstanceIdConfig(ir.nodes);
12198
12209
  validateReviewerAgentOverrides(ir.nodes);
12199
12210
  for (const node of ir.nodes) {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fusion-plugin-examples/linear-import",
3
- "version": "0.1.18-beta.12",
3
+ "version": "0.1.18-beta.13",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": {
@@ -9026,6 +9026,20 @@ function planReviewOptionalGroupNode(column, options = {}) {
9026
9026
  };
9027
9027
  }
9028
9028
 
9029
+ // ../core/src/workflows/workflow-merge-region.ts
9030
+ var MERGE_REGION_ENTRY_NODE_KINDS = /* @__PURE__ */ new Set([
9031
+ "merge-gate",
9032
+ "merge-attempt",
9033
+ "manual-merge-hold",
9034
+ "retry-backoff",
9035
+ "recovery-router",
9036
+ "branch-group-member-integration",
9037
+ "branch-group-promotion",
9038
+ "pr-create",
9039
+ "pr-respond",
9040
+ "pr-merge"
9041
+ ]);
9042
+
9029
9043
  // ../core/src/workflows/workflow-step-results.ts
9030
9044
  var PLAN_REVIEW_LEASE_STALENESS_MS = 15 * 60 * 1e3;
9031
9045
  var REMEDIATION_ATTEMPT_CLAIM_STALENESS_MS = 15 * 60 * 1e3;
@@ -10583,20 +10597,6 @@ function classifyWorkflowAgentNode(node) {
10583
10597
  }
10584
10598
  }
10585
10599
 
10586
- // ../core/src/workflows/workflow-merge-region.ts
10587
- var MERGE_REGION_ENTRY_NODE_KINDS = /* @__PURE__ */ new Set([
10588
- "merge-gate",
10589
- "merge-attempt",
10590
- "manual-merge-hold",
10591
- "retry-backoff",
10592
- "recovery-router",
10593
- "branch-group-member-integration",
10594
- "branch-group-promotion",
10595
- "pr-create",
10596
- "pr-respond",
10597
- "pr-merge"
10598
- ]);
10599
-
10600
10600
  // ../core/src/workflows/workflow-extension-types.ts
10601
10601
  function workflowExtensionRegistryId(pluginId, extensionId) {
10602
10602
  return `plugin:${pluginId}:${extensionId}`;
@@ -11588,6 +11588,16 @@ function validateReviewerAgentOverrides(nodes2) {
11588
11588
  if (Array.isArray(templateNodes)) validateReviewerAgentOverrides(templateNodes);
11589
11589
  }
11590
11590
  }
11591
+ function validateReadonlyMcpServersConfig(nodes2) {
11592
+ for (const node of nodes2) {
11593
+ const value = node.config?.readonlyMcpServers;
11594
+ if (value !== void 0 && (!Array.isArray(value) || value.some((name) => typeof name !== "string" || !name.trim()))) {
11595
+ throw new WorkflowIrError(`Workflow node '${node.id}' readonlyMcpServers must be an array of non-empty strings when present`);
11596
+ }
11597
+ const templateNodes = node.config?.template?.nodes;
11598
+ if (Array.isArray(templateNodes)) validateReadonlyMcpServersConfig(templateNodes);
11599
+ }
11600
+ }
11591
11601
  function validateThinkingLevelConfig(nodes2) {
11592
11602
  for (const node of nodes2) {
11593
11603
  const value = node.config?.thinkingLevel;
@@ -12202,6 +12212,7 @@ function validateV2(ir) {
12202
12212
  const topLevelIds = new Set(ir.nodes.map((n) => n.id));
12203
12213
  validateStepExecutePlacement(ir.nodes);
12204
12214
  validateThinkingLevelConfig(ir.nodes);
12215
+ validateReadonlyMcpServersConfig(ir.nodes);
12205
12216
  validateCredentialInstanceIdConfig(ir.nodes);
12206
12217
  validateReviewerAgentOverrides(ir.nodes);
12207
12218
  for (const node of ir.nodes) {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fusion-plugin-examples/omp-runtime",
3
- "version": "0.1.11-beta.12",
3
+ "version": "0.1.11-beta.13",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": {
@@ -9026,6 +9026,20 @@ function planReviewOptionalGroupNode(column, options = {}) {
9026
9026
  };
9027
9027
  }
9028
9028
 
9029
+ // ../core/src/workflows/workflow-merge-region.ts
9030
+ var MERGE_REGION_ENTRY_NODE_KINDS = /* @__PURE__ */ new Set([
9031
+ "merge-gate",
9032
+ "merge-attempt",
9033
+ "manual-merge-hold",
9034
+ "retry-backoff",
9035
+ "recovery-router",
9036
+ "branch-group-member-integration",
9037
+ "branch-group-promotion",
9038
+ "pr-create",
9039
+ "pr-respond",
9040
+ "pr-merge"
9041
+ ]);
9042
+
9029
9043
  // ../core/src/workflows/workflow-step-results.ts
9030
9044
  var PLAN_REVIEW_LEASE_STALENESS_MS = 15 * 60 * 1e3;
9031
9045
  var REMEDIATION_ATTEMPT_CLAIM_STALENESS_MS = 15 * 60 * 1e3;
@@ -10575,20 +10589,6 @@ function classifyWorkflowAgentNode(node) {
10575
10589
  }
10576
10590
  }
10577
10591
 
10578
- // ../core/src/workflows/workflow-merge-region.ts
10579
- var MERGE_REGION_ENTRY_NODE_KINDS = /* @__PURE__ */ new Set([
10580
- "merge-gate",
10581
- "merge-attempt",
10582
- "manual-merge-hold",
10583
- "retry-backoff",
10584
- "recovery-router",
10585
- "branch-group-member-integration",
10586
- "branch-group-promotion",
10587
- "pr-create",
10588
- "pr-respond",
10589
- "pr-merge"
10590
- ]);
10591
-
10592
10592
  // ../core/src/workflows/workflow-extension-types.ts
10593
10593
  function workflowExtensionRegistryId(pluginId, extensionId) {
10594
10594
  return `plugin:${pluginId}:${extensionId}`;
@@ -11580,6 +11580,16 @@ function validateReviewerAgentOverrides(nodes2) {
11580
11580
  if (Array.isArray(templateNodes)) validateReviewerAgentOverrides(templateNodes);
11581
11581
  }
11582
11582
  }
11583
+ function validateReadonlyMcpServersConfig(nodes2) {
11584
+ for (const node of nodes2) {
11585
+ const value = node.config?.readonlyMcpServers;
11586
+ if (value !== void 0 && (!Array.isArray(value) || value.some((name) => typeof name !== "string" || !name.trim()))) {
11587
+ throw new WorkflowIrError(`Workflow node '${node.id}' readonlyMcpServers must be an array of non-empty strings when present`);
11588
+ }
11589
+ const templateNodes = node.config?.template?.nodes;
11590
+ if (Array.isArray(templateNodes)) validateReadonlyMcpServersConfig(templateNodes);
11591
+ }
11592
+ }
11583
11593
  function validateThinkingLevelConfig(nodes2) {
11584
11594
  for (const node of nodes2) {
11585
11595
  const value = node.config?.thinkingLevel;
@@ -12194,6 +12204,7 @@ function validateV2(ir) {
12194
12204
  const topLevelIds = new Set(ir.nodes.map((n) => n.id));
12195
12205
  validateStepExecutePlacement(ir.nodes);
12196
12206
  validateThinkingLevelConfig(ir.nodes);
12207
+ validateReadonlyMcpServersConfig(ir.nodes);
12197
12208
  validateCredentialInstanceIdConfig(ir.nodes);
12198
12209
  validateReviewerAgentOverrides(ir.nodes);
12199
12210
  for (const node of ir.nodes) {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fusion-plugin-examples/openclaw-runtime",
3
- "version": "0.2.86-beta.12",
3
+ "version": "0.2.86-beta.13",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": {
@@ -9026,6 +9026,20 @@ function planReviewOptionalGroupNode(column, options = {}) {
9026
9026
  };
9027
9027
  }
9028
9028
 
9029
+ // ../core/src/workflows/workflow-merge-region.ts
9030
+ var MERGE_REGION_ENTRY_NODE_KINDS = /* @__PURE__ */ new Set([
9031
+ "merge-gate",
9032
+ "merge-attempt",
9033
+ "manual-merge-hold",
9034
+ "retry-backoff",
9035
+ "recovery-router",
9036
+ "branch-group-member-integration",
9037
+ "branch-group-promotion",
9038
+ "pr-create",
9039
+ "pr-respond",
9040
+ "pr-merge"
9041
+ ]);
9042
+
9029
9043
  // ../core/src/workflows/workflow-step-results.ts
9030
9044
  var PLAN_REVIEW_LEASE_STALENESS_MS = 15 * 60 * 1e3;
9031
9045
  var REMEDIATION_ATTEMPT_CLAIM_STALENESS_MS = 15 * 60 * 1e3;
@@ -10575,20 +10589,6 @@ function classifyWorkflowAgentNode(node) {
10575
10589
  }
10576
10590
  }
10577
10591
 
10578
- // ../core/src/workflows/workflow-merge-region.ts
10579
- var MERGE_REGION_ENTRY_NODE_KINDS = /* @__PURE__ */ new Set([
10580
- "merge-gate",
10581
- "merge-attempt",
10582
- "manual-merge-hold",
10583
- "retry-backoff",
10584
- "recovery-router",
10585
- "branch-group-member-integration",
10586
- "branch-group-promotion",
10587
- "pr-create",
10588
- "pr-respond",
10589
- "pr-merge"
10590
- ]);
10591
-
10592
10592
  // ../core/src/workflows/workflow-extension-types.ts
10593
10593
  function workflowExtensionRegistryId(pluginId, extensionId) {
10594
10594
  return `plugin:${pluginId}:${extensionId}`;
@@ -11580,6 +11580,16 @@ function validateReviewerAgentOverrides(nodes2) {
11580
11580
  if (Array.isArray(templateNodes)) validateReviewerAgentOverrides(templateNodes);
11581
11581
  }
11582
11582
  }
11583
+ function validateReadonlyMcpServersConfig(nodes2) {
11584
+ for (const node of nodes2) {
11585
+ const value = node.config?.readonlyMcpServers;
11586
+ if (value !== void 0 && (!Array.isArray(value) || value.some((name) => typeof name !== "string" || !name.trim()))) {
11587
+ throw new WorkflowIrError(`Workflow node '${node.id}' readonlyMcpServers must be an array of non-empty strings when present`);
11588
+ }
11589
+ const templateNodes = node.config?.template?.nodes;
11590
+ if (Array.isArray(templateNodes)) validateReadonlyMcpServersConfig(templateNodes);
11591
+ }
11592
+ }
11583
11593
  function validateThinkingLevelConfig(nodes2) {
11584
11594
  for (const node of nodes2) {
11585
11595
  const value = node.config?.thinkingLevel;
@@ -12194,6 +12204,7 @@ function validateV2(ir) {
12194
12204
  const topLevelIds = new Set(ir.nodes.map((n) => n.id));
12195
12205
  validateStepExecutePlacement(ir.nodes);
12196
12206
  validateThinkingLevelConfig(ir.nodes);
12207
+ validateReadonlyMcpServersConfig(ir.nodes);
12197
12208
  validateCredentialInstanceIdConfig(ir.nodes);
12198
12209
  validateReviewerAgentOverrides(ir.nodes);
12199
12210
  for (const node of ir.nodes) {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fusion-plugin-examples/paperclip-runtime",
3
- "version": "0.2.86-beta.12",
3
+ "version": "0.2.86-beta.13",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": {
@@ -9029,6 +9029,20 @@ function planReviewOptionalGroupNode(column, options = {}) {
9029
9029
  };
9030
9030
  }
9031
9031
 
9032
+ // ../core/src/workflows/workflow-merge-region.ts
9033
+ var MERGE_REGION_ENTRY_NODE_KINDS = /* @__PURE__ */ new Set([
9034
+ "merge-gate",
9035
+ "merge-attempt",
9036
+ "manual-merge-hold",
9037
+ "retry-backoff",
9038
+ "recovery-router",
9039
+ "branch-group-member-integration",
9040
+ "branch-group-promotion",
9041
+ "pr-create",
9042
+ "pr-respond",
9043
+ "pr-merge"
9044
+ ]);
9045
+
9032
9046
  // ../core/src/workflows/workflow-step-results.ts
9033
9047
  var PLAN_REVIEW_LEASE_STALENESS_MS = 15 * 60 * 1e3;
9034
9048
  var REMEDIATION_ATTEMPT_CLAIM_STALENESS_MS = 15 * 60 * 1e3;
@@ -10578,20 +10592,6 @@ function classifyWorkflowAgentNode(node) {
10578
10592
  }
10579
10593
  }
10580
10594
 
10581
- // ../core/src/workflows/workflow-merge-region.ts
10582
- var MERGE_REGION_ENTRY_NODE_KINDS = /* @__PURE__ */ new Set([
10583
- "merge-gate",
10584
- "merge-attempt",
10585
- "manual-merge-hold",
10586
- "retry-backoff",
10587
- "recovery-router",
10588
- "branch-group-member-integration",
10589
- "branch-group-promotion",
10590
- "pr-create",
10591
- "pr-respond",
10592
- "pr-merge"
10593
- ]);
10594
-
10595
10595
  // ../core/src/workflows/workflow-extension-types.ts
10596
10596
  function workflowExtensionRegistryId(pluginId, extensionId) {
10597
10597
  return `plugin:${pluginId}:${extensionId}`;
@@ -11583,6 +11583,16 @@ function validateReviewerAgentOverrides(nodes2) {
11583
11583
  if (Array.isArray(templateNodes)) validateReviewerAgentOverrides(templateNodes);
11584
11584
  }
11585
11585
  }
11586
+ function validateReadonlyMcpServersConfig(nodes2) {
11587
+ for (const node of nodes2) {
11588
+ const value = node.config?.readonlyMcpServers;
11589
+ if (value !== void 0 && (!Array.isArray(value) || value.some((name) => typeof name !== "string" || !name.trim()))) {
11590
+ throw new WorkflowIrError(`Workflow node '${node.id}' readonlyMcpServers must be an array of non-empty strings when present`);
11591
+ }
11592
+ const templateNodes = node.config?.template?.nodes;
11593
+ if (Array.isArray(templateNodes)) validateReadonlyMcpServersConfig(templateNodes);
11594
+ }
11595
+ }
11586
11596
  function validateThinkingLevelConfig(nodes2) {
11587
11597
  for (const node of nodes2) {
11588
11598
  const value = node.config?.thinkingLevel;
@@ -12197,6 +12207,7 @@ function validateV2(ir) {
12197
12207
  const topLevelIds = new Set(ir.nodes.map((n) => n.id));
12198
12208
  validateStepExecutePlacement(ir.nodes);
12199
12209
  validateThinkingLevelConfig(ir.nodes);
12210
+ validateReadonlyMcpServersConfig(ir.nodes);
12200
12211
  validateCredentialInstanceIdConfig(ir.nodes);
12201
12212
  validateReviewerAgentOverrides(ir.nodes);
12202
12213
  for (const node of ir.nodes) {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fusion-plugin-examples/quality",
3
- "version": "0.1.11-beta.12",
3
+ "version": "0.1.11-beta.13",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": {
@@ -9146,6 +9146,20 @@ function planReviewOptionalGroupNode(column, options = {}) {
9146
9146
  };
9147
9147
  }
9148
9148
 
9149
+ // ../core/src/workflows/workflow-merge-region.ts
9150
+ var MERGE_REGION_ENTRY_NODE_KINDS = /* @__PURE__ */ new Set([
9151
+ "merge-gate",
9152
+ "merge-attempt",
9153
+ "manual-merge-hold",
9154
+ "retry-backoff",
9155
+ "recovery-router",
9156
+ "branch-group-member-integration",
9157
+ "branch-group-promotion",
9158
+ "pr-create",
9159
+ "pr-respond",
9160
+ "pr-merge"
9161
+ ]);
9162
+
9149
9163
  // ../core/src/workflows/workflow-step-results.ts
9150
9164
  var PLAN_REVIEW_LEASE_STALENESS_MS = 15 * 60 * 1e3;
9151
9165
  var REMEDIATION_ATTEMPT_CLAIM_STALENESS_MS = 15 * 60 * 1e3;
@@ -10695,20 +10709,6 @@ function classifyWorkflowAgentNode(node) {
10695
10709
  }
10696
10710
  }
10697
10711
 
10698
- // ../core/src/workflows/workflow-merge-region.ts
10699
- var MERGE_REGION_ENTRY_NODE_KINDS = /* @__PURE__ */ new Set([
10700
- "merge-gate",
10701
- "merge-attempt",
10702
- "manual-merge-hold",
10703
- "retry-backoff",
10704
- "recovery-router",
10705
- "branch-group-member-integration",
10706
- "branch-group-promotion",
10707
- "pr-create",
10708
- "pr-respond",
10709
- "pr-merge"
10710
- ]);
10711
-
10712
10712
  // ../core/src/workflows/workflow-extension-types.ts
10713
10713
  function workflowExtensionRegistryId(pluginId, extensionId) {
10714
10714
  return `plugin:${pluginId}:${extensionId}`;
@@ -11700,6 +11700,16 @@ function validateReviewerAgentOverrides(nodes2) {
11700
11700
  if (Array.isArray(templateNodes)) validateReviewerAgentOverrides(templateNodes);
11701
11701
  }
11702
11702
  }
11703
+ function validateReadonlyMcpServersConfig(nodes2) {
11704
+ for (const node of nodes2) {
11705
+ const value = node.config?.readonlyMcpServers;
11706
+ if (value !== void 0 && (!Array.isArray(value) || value.some((name) => typeof name !== "string" || !name.trim()))) {
11707
+ throw new WorkflowIrError(`Workflow node '${node.id}' readonlyMcpServers must be an array of non-empty strings when present`);
11708
+ }
11709
+ const templateNodes = node.config?.template?.nodes;
11710
+ if (Array.isArray(templateNodes)) validateReadonlyMcpServersConfig(templateNodes);
11711
+ }
11712
+ }
11703
11713
  function validateThinkingLevelConfig(nodes2) {
11704
11714
  for (const node of nodes2) {
11705
11715
  const value = node.config?.thinkingLevel;
@@ -12314,6 +12324,7 @@ function validateV2(ir) {
12314
12324
  const topLevelIds = new Set(ir.nodes.map((n) => n.id));
12315
12325
  validateStepExecutePlacement(ir.nodes);
12316
12326
  validateThinkingLevelConfig(ir.nodes);
12327
+ validateReadonlyMcpServersConfig(ir.nodes);
12317
12328
  validateCredentialInstanceIdConfig(ir.nodes);
12318
12329
  validateReviewerAgentOverrides(ir.nodes);
12319
12330
  for (const node of ir.nodes) {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fusion-plugin-examples/reports",
3
- "version": "0.1.55-beta.12",
3
+ "version": "0.1.55-beta.13",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": {
@@ -9026,6 +9026,20 @@ function planReviewOptionalGroupNode(column, options = {}) {
9026
9026
  };
9027
9027
  }
9028
9028
 
9029
+ // ../core/src/workflows/workflow-merge-region.ts
9030
+ var MERGE_REGION_ENTRY_NODE_KINDS = /* @__PURE__ */ new Set([
9031
+ "merge-gate",
9032
+ "merge-attempt",
9033
+ "manual-merge-hold",
9034
+ "retry-backoff",
9035
+ "recovery-router",
9036
+ "branch-group-member-integration",
9037
+ "branch-group-promotion",
9038
+ "pr-create",
9039
+ "pr-respond",
9040
+ "pr-merge"
9041
+ ]);
9042
+
9029
9043
  // ../core/src/workflows/workflow-step-results.ts
9030
9044
  var PLAN_REVIEW_LEASE_STALENESS_MS = 15 * 60 * 1e3;
9031
9045
  var REMEDIATION_ATTEMPT_CLAIM_STALENESS_MS = 15 * 60 * 1e3;
@@ -10575,20 +10589,6 @@ function classifyWorkflowAgentNode(node) {
10575
10589
  }
10576
10590
  }
10577
10591
 
10578
- // ../core/src/workflows/workflow-merge-region.ts
10579
- var MERGE_REGION_ENTRY_NODE_KINDS = /* @__PURE__ */ new Set([
10580
- "merge-gate",
10581
- "merge-attempt",
10582
- "manual-merge-hold",
10583
- "retry-backoff",
10584
- "recovery-router",
10585
- "branch-group-member-integration",
10586
- "branch-group-promotion",
10587
- "pr-create",
10588
- "pr-respond",
10589
- "pr-merge"
10590
- ]);
10591
-
10592
10592
  // ../core/src/workflows/workflow-extension-types.ts
10593
10593
  function workflowExtensionRegistryId(pluginId, extensionId) {
10594
10594
  return `plugin:${pluginId}:${extensionId}`;
@@ -11580,6 +11580,16 @@ function validateReviewerAgentOverrides(nodes2) {
11580
11580
  if (Array.isArray(templateNodes)) validateReviewerAgentOverrides(templateNodes);
11581
11581
  }
11582
11582
  }
11583
+ function validateReadonlyMcpServersConfig(nodes2) {
11584
+ for (const node of nodes2) {
11585
+ const value = node.config?.readonlyMcpServers;
11586
+ if (value !== void 0 && (!Array.isArray(value) || value.some((name) => typeof name !== "string" || !name.trim()))) {
11587
+ throw new WorkflowIrError(`Workflow node '${node.id}' readonlyMcpServers must be an array of non-empty strings when present`);
11588
+ }
11589
+ const templateNodes = node.config?.template?.nodes;
11590
+ if (Array.isArray(templateNodes)) validateReadonlyMcpServersConfig(templateNodes);
11591
+ }
11592
+ }
11583
11593
  function validateThinkingLevelConfig(nodes2) {
11584
11594
  for (const node of nodes2) {
11585
11595
  const value = node.config?.thinkingLevel;
@@ -12194,6 +12204,7 @@ function validateV2(ir) {
12194
12204
  const topLevelIds = new Set(ir.nodes.map((n) => n.id));
12195
12205
  validateStepExecutePlacement(ir.nodes);
12196
12206
  validateThinkingLevelConfig(ir.nodes);
12207
+ validateReadonlyMcpServersConfig(ir.nodes);
12197
12208
  validateCredentialInstanceIdConfig(ir.nodes);
12198
12209
  validateReviewerAgentOverrides(ir.nodes);
12199
12210
  for (const node of ir.nodes) {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fusion-plugin-examples/roadmap",
3
- "version": "0.1.55-beta.12",
3
+ "version": "0.1.55-beta.13",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": {