@runfusion/fusion 0.59.0 → 0.60.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 (118) hide show
  1. package/dist/bin.js +173 -16
  2. package/dist/client/.vite/manifest.json +239 -239
  3. package/dist/client/assets/{AgentDetailView-UmilJU0C.js → AgentDetailView-BBjuuYbU.js} +1 -1
  4. package/dist/client/assets/{AgentPermissionPolicyEditor-DqYOX1kN.js → AgentPermissionPolicyEditor-DOdy1ln0.js} +1 -1
  5. package/dist/client/assets/{AgentsView-Dt0nKyx7.js → AgentsView-DlyT08sc.js} +3 -3
  6. package/dist/client/assets/{ChatView-C7trV16u.js → ChatView-CJBnc6rJ.js} +1 -1
  7. package/dist/client/assets/{CommandCenter-Dsg16_mK.js → CommandCenter-BhRLZmOH.js} +1 -1
  8. package/dist/client/assets/{DevServerView-DnpnAU_g.js → DevServerView-DRpi8Xqz.js} +1 -1
  9. package/dist/client/assets/{DirectoryPicker-BzpWdpTC.js → DirectoryPicker-Bw_A-64N.js} +1 -1
  10. package/dist/client/assets/{DocumentsView-C2jRDIo6.js → DocumentsView-w0eDbpbG.js} +1 -1
  11. package/dist/client/assets/{EvalsView-M1nIXx-S.js → EvalsView-DxQALLwD.js} +1 -1
  12. package/dist/client/assets/{ExperimentalAgentOnboardingModal-5Kg2iQtB.js → ExperimentalAgentOnboardingModal-BuEWZrjl.js} +1 -1
  13. package/dist/client/assets/{GoalsView-7bFpy-lr.js → GoalsView-C3MGEtSt.js} +1 -1
  14. package/dist/client/assets/{InsightsView-D0HPy3RP.js → InsightsView-C0-BkE8_.js} +1 -1
  15. package/dist/client/assets/{MemoryView-CNzJcoPi.js → MemoryView-Dd8uiLHH.js} +1 -1
  16. package/dist/client/assets/{PiExtensionsManager-D0a8Q47c.js → PiExtensionsManager-DlsEVOjG.js} +1 -1
  17. package/dist/client/assets/{PluginManager-N2Ne57i_.js → PluginManager-Cf9AOCcC.js} +1 -1
  18. package/dist/client/assets/{PullRequestView-Be4GM2H5.js → PullRequestView-hm77QtHV.js} +1 -1
  19. package/dist/client/assets/{ResearchView-DYW9ViMl.js → ResearchView-BMQEnYH6.js} +1 -1
  20. package/dist/client/assets/{SecretsView-B3jEFeGp.js → SecretsView-Dc3sWf40.js} +1 -1
  21. package/dist/client/assets/{SessionTerminal-DGFADOH4.js → SessionTerminal-CEv1G-9-.js} +1 -1
  22. package/dist/client/assets/SettingsModal-DFrTDsBm.js +21 -0
  23. package/dist/client/assets/{SettingsModal-Lw0RmeRd.js → SettingsModal-TuphE_CP.js} +1 -1
  24. package/dist/client/assets/{SetupWizardModal-BifMmJIa.js → SetupWizardModal-CNGogJJp.js} +2 -2
  25. package/dist/client/assets/{ShadcnColorPicker-B1UClHqm.js → ShadcnColorPicker-1Z7JIWTE.js} +1 -1
  26. package/dist/client/assets/{SkillsView--U-5lH1V.js → SkillsView-CjPvmnz6.js} +1 -1
  27. package/dist/client/assets/{TodoView-BwxNdIXm.js → TodoView-DmJPSWOu.js} +1 -1
  28. package/dist/client/assets/{WorkflowNodeEditor-BmTZR0i8.js → WorkflowNodeEditor-BqO2yRXe.js} +1 -1
  29. package/dist/client/assets/{agentSkills-PqEK0Uf_.js → agentSkills-BNahUMFe.js} +1 -1
  30. package/dist/client/assets/{app-BlgX3hw4.js → app-BzgEwAOr.js} +1 -1
  31. package/dist/client/assets/{architectureDiagram-3BPJPVTR-DxAKryer.js → architectureDiagram-3BPJPVTR-Bb_ZGdtz.js} +1 -1
  32. package/dist/client/assets/{blockDiagram-GPEHLZMM-BfPC7WG4.js → blockDiagram-GPEHLZMM-CWfWJnIM.js} +1 -1
  33. package/dist/client/assets/{c4Diagram-AAUBKEIU-DnVJBAB1.js → c4Diagram-AAUBKEIU-Dufe_2hy.js} +1 -1
  34. package/dist/client/assets/channel-BYHFEnHT.js +1 -0
  35. package/dist/client/assets/{chunk-2J33WTMH-2LaGYtnx.js → chunk-2J33WTMH-BdKWX3Y7.js} +1 -1
  36. package/dist/client/assets/{chunk-4BX2VUAB-C7xxOb1T.js → chunk-4BX2VUAB-CQ9_zgu6.js} +1 -1
  37. package/dist/client/assets/{chunk-55IACEB6-CAxHAFXx.js → chunk-55IACEB6-DEFTCISD.js} +1 -1
  38. package/dist/client/assets/{chunk-727SXJPM-CnZuaU-I.js → chunk-727SXJPM-8RnJp1fx.js} +1 -1
  39. package/dist/client/assets/{chunk-AQP2D5EJ-DutKSMk1.js → chunk-AQP2D5EJ-DJg6awe1.js} +1 -1
  40. package/dist/client/assets/{chunk-FMBD7UC4-C7PQ58jc.js → chunk-FMBD7UC4-Bw-OImRT.js} +1 -1
  41. package/dist/client/assets/{chunk-ND2GUHAM-BQ0UHfJw.js → chunk-ND2GUHAM-BSx9p0RO.js} +1 -1
  42. package/dist/client/assets/{chunk-QZHKN3VN-BadmXu1v.js → chunk-QZHKN3VN-Dbdv72P6.js} +1 -1
  43. package/dist/client/assets/classDiagram-4FO5ZUOK-BLstvJ1W.js +1 -0
  44. package/dist/client/assets/classDiagram-v2-Q7XG4LA2-BLstvJ1W.js +1 -0
  45. package/dist/client/assets/{cose-bilkent-S5V4N54A-37z9Hx7d.js → cose-bilkent-S5V4N54A-CXtcC6U2.js} +1 -1
  46. package/dist/client/assets/{dagre-BM42HDAG-B70rt1ZW.js → dagre-BM42HDAG-BO0r4g14.js} +1 -1
  47. package/dist/client/assets/{dashboard-view-GT7dDNd7.js → dashboard-view-BTnVGch5.js} +1 -1
  48. package/dist/client/assets/{dashboard-view-DdAL0vfN.js → dashboard-view-CoDeYJbQ.js} +1 -1
  49. package/dist/client/assets/{diagram-2AECGRRQ-se4pabEk.js → diagram-2AECGRRQ-CLmeU2g6.js} +1 -1
  50. package/dist/client/assets/{diagram-5GNKFQAL-ijyxpVgX.js → diagram-5GNKFQAL-CKyM23Jy.js} +1 -1
  51. package/dist/client/assets/{diagram-KO2AKTUF-DUGQ8jXI.js → diagram-KO2AKTUF-ByeVRDs_.js} +1 -1
  52. package/dist/client/assets/{diagram-LMA3HP47-BYydC37K.js → diagram-LMA3HP47-r8qKTJDn.js} +1 -1
  53. package/dist/client/assets/{diagram-OG6HWLK6-DlUn5jkD.js → diagram-OG6HWLK6-D2ugPdm7.js} +1 -1
  54. package/dist/client/assets/{erDiagram-TEJ5UH35-ChYKGDIc.js → erDiagram-TEJ5UH35-dLzbDn0G.js} +1 -1
  55. package/dist/client/assets/{flowDiagram-I6XJVG4X-CoQKr6ba.js → flowDiagram-I6XJVG4X-et7EENd6.js} +1 -1
  56. package/dist/client/assets/{folder-open-YuIEuDwd.js → folder-open-BVtcjVIK.js} +1 -1
  57. package/dist/client/assets/{ganttDiagram-6RSMTGT7-Cff6URun.js → ganttDiagram-6RSMTGT7-DmiabChP.js} +1 -1
  58. package/dist/client/assets/{gitGraphDiagram-PVQCEYII-CnlZVE6T.js → gitGraphDiagram-PVQCEYII-I1vbhqer.js} +1 -1
  59. package/dist/client/assets/index-inWk2g6R.js +2540 -0
  60. package/dist/client/assets/{infoDiagram-5YYISTIA-DYLBAKrj.js → infoDiagram-5YYISTIA-xd6L9Gq3.js} +1 -1
  61. package/dist/client/assets/{ishikawaDiagram-YF4QCWOH-7xSxQNhn.js → ishikawaDiagram-YF4QCWOH-fUeEYBvD.js} +1 -1
  62. package/dist/client/assets/{journeyDiagram-JHISSGLW-DREqJGeQ.js → journeyDiagram-JHISSGLW-B7xjU8Oh.js} +1 -1
  63. package/dist/client/assets/{kanban-definition-UN3LZRKU-_lzeYhpL.js → kanban-definition-UN3LZRKU-CJ8oRjFI.js} +1 -1
  64. package/dist/client/assets/{mermaid.core-DNTJMy0V.js → mermaid.core-2udKsaH3.js} +4 -4
  65. package/dist/client/assets/{mindmap-definition-RKZ34NQL-DR9UulDp.js → mindmap-definition-RKZ34NQL-CVywzN7Q.js} +1 -1
  66. package/dist/client/assets/{pieDiagram-4H26LBE5-DD1LCdSp.js → pieDiagram-4H26LBE5-8vzzC4Mg.js} +1 -1
  67. package/dist/client/assets/{puzzle-DaVSYDOd.js → puzzle-D60d3Nv1.js} +1 -1
  68. package/dist/client/assets/{quadrantDiagram-W4KKPZXB-iLEGylFT.js → quadrantDiagram-W4KKPZXB-Cxyb4Mom.js} +1 -1
  69. package/dist/client/assets/{requirementDiagram-4Y6WPE33-D7IX9UbY.js → requirementDiagram-4Y6WPE33-Bs5RaG7r.js} +1 -1
  70. package/dist/client/assets/{sankeyDiagram-5OEKKPKP-DC30taEV.js → sankeyDiagram-5OEKKPKP-Jf7Zq43D.js} +1 -1
  71. package/dist/client/assets/{sequenceDiagram-3UESZ5HK-DjMKbjmL.js → sequenceDiagram-3UESZ5HK-CG0I780H.js} +1 -1
  72. package/dist/client/assets/{shield-alert-BcyPZs5t.js → shield-alert-B7JyuWPR.js} +1 -1
  73. package/dist/client/assets/{stateDiagram-AJRCARHV-DJSnSkUL.js → stateDiagram-AJRCARHV-C1c5XtKG.js} +1 -1
  74. package/dist/client/assets/{stateDiagram-v2-BHNVJYJU-KC2rSU3J.js → stateDiagram-v2-BHNVJYJU-Cv7_pOt_.js} +1 -1
  75. package/dist/client/assets/{timeline-definition-PNZ67QCA-5DyrH8WZ.js → timeline-definition-PNZ67QCA-BWg-lsI0.js} +1 -1
  76. package/dist/client/assets/{upload-C_8IHSzk.js → upload-Dxv5FPaS.js} +1 -1
  77. package/dist/client/assets/{users-DfGiwmqG.js → users-DvKg3opr.js} +1 -1
  78. package/dist/client/assets/{vennDiagram-CIIHVFJN-Bh5X-uVf.js → vennDiagram-CIIHVFJN-gFjFmLlv.js} +1 -1
  79. package/dist/client/assets/{wardley-L42UT6IY-ZIwV-wIZ.js → wardley-L42UT6IY-BaCNX8ou.js} +1 -1
  80. package/dist/client/assets/{wardleyDiagram-YWT4CUSO-DI92L1jA.js → wardleyDiagram-YWT4CUSO-BRR6aw0q.js} +1 -1
  81. package/dist/client/assets/{xychartDiagram-2RQKCTM6-B6RjJCM8.js → xychartDiagram-2RQKCTM6-D6Gwn1XW.js} +1 -1
  82. package/dist/client/index.html +1 -1
  83. package/dist/client/version.json +1 -1
  84. package/dist/droid-cli/package.json +1 -1
  85. package/dist/extension.js +173 -16
  86. package/dist/pi-claude-cli/package.json +1 -1
  87. package/dist/plugin-sdk/index.d.ts +7 -0
  88. package/dist/plugins/fusion-plugin-acp-runtime/bundled.js +0 -6
  89. package/dist/plugins/fusion-plugin-acp-runtime/package.json +1 -1
  90. package/dist/plugins/fusion-plugin-cli-printing-press/package.json +1 -1
  91. package/dist/plugins/fusion-plugin-compound-engineering/bundled.js +0 -5
  92. package/dist/plugins/fusion-plugin-compound-engineering/package.json +1 -1
  93. package/dist/plugins/fusion-plugin-cursor-runtime/bundled.js +0 -5
  94. package/dist/plugins/fusion-plugin-cursor-runtime/package.json +1 -1
  95. package/dist/plugins/fusion-plugin-dependency-graph/bundled.js +0 -5
  96. package/dist/plugins/fusion-plugin-dependency-graph/package.json +1 -1
  97. package/dist/plugins/fusion-plugin-droid-runtime/bundled.js +0 -5
  98. package/dist/plugins/fusion-plugin-droid-runtime/package.json +1 -1
  99. package/dist/plugins/fusion-plugin-grok-runtime/bundled.js +0 -6
  100. package/dist/plugins/fusion-plugin-grok-runtime/package.json +1 -1
  101. package/dist/plugins/fusion-plugin-hermes-runtime/bundled.js +0 -5
  102. package/dist/plugins/fusion-plugin-hermes-runtime/package.json +1 -1
  103. package/dist/plugins/fusion-plugin-linear-import/bundled.js +0 -5
  104. package/dist/plugins/fusion-plugin-linear-import/package.json +1 -1
  105. package/dist/plugins/fusion-plugin-openclaw-runtime/bundled.js +0 -5
  106. package/dist/plugins/fusion-plugin-openclaw-runtime/package.json +1 -1
  107. package/dist/plugins/fusion-plugin-paperclip-runtime/bundled.js +0 -5
  108. package/dist/plugins/fusion-plugin-paperclip-runtime/package.json +1 -1
  109. package/dist/plugins/fusion-plugin-reports/package.json +1 -1
  110. package/dist/plugins/fusion-plugin-roadmap/bundled.js +0 -5
  111. package/dist/plugins/fusion-plugin-roadmap/package.json +1 -1
  112. package/dist/plugins/fusion-plugin-whatsapp-chat/package.json +1 -1
  113. package/package.json +1 -1
  114. package/dist/client/assets/SettingsModal-CtOCCZEj.js +0 -21
  115. package/dist/client/assets/channel-D23u9xEh.js +0 -1
  116. package/dist/client/assets/classDiagram-4FO5ZUOK-BMIDIijD.js +0 -1
  117. package/dist/client/assets/classDiagram-v2-Q7XG4LA2-BMIDIijD.js +0 -1
  118. package/dist/client/assets/index-aBQwNV_I.js +0 -2540
package/dist/extension.js CHANGED
@@ -1217,6 +1217,12 @@ var init_settings_schema = __esm({
1217
1217
  titleSummarizerGlobalProvider: void 0,
1218
1218
  titleSummarizerGlobalModelId: void 0,
1219
1219
  /*
1220
+ FNXC:Settings-MergerModel 2026-07-13-07:52:
1221
+ Global merger baseline lane (provider/model/thinking) is independent of executor/planner/reviewer so operators can pin a merge-capable model under Settings → Global Models without changing other lanes. Undefined falls through to defaultProvider/defaultModelId at resolve time.
1222
+ */
1223
+ mergerGlobalProvider: void 0,
1224
+ mergerGlobalModelId: void 0,
1225
+ /*
1220
1226
  FNXC:Settings-ThinkingLevel 2026-07-10-00:00:
1221
1227
  Global model lanes can override the default thinking effort independently. Undefined preserves the existing inheritance to `defaultThinkingLevel`.
1222
1228
  */
@@ -1224,6 +1230,7 @@ var init_settings_schema = __esm({
1224
1230
  planningGlobalThinkingLevel: void 0,
1225
1231
  validatorGlobalThinkingLevel: void 0,
1226
1232
  titleSummarizerGlobalThinkingLevel: void 0,
1233
+ mergerGlobalThinkingLevel: void 0,
1227
1234
  // Daemon mode settings
1228
1235
  daemonToken: void 0,
1229
1236
  daemonPort: 4040,
@@ -1414,6 +1421,11 @@ var init_settings_schema = __esm({
1414
1421
  */
1415
1422
  openMobileTasksInPopup: false,
1416
1423
  /*
1424
+ FNXC:TaskPopupViewGating 2026-07-13-00:00:
1425
+ Default off preserves current always-visible task-detail popup behavior. When true, the dashboard render gate shows each open task-detail FloatingWindow only on the Board/List view where it was opened without clearing popup snapshots or their shared persisted geometry.
1426
+ */
1427
+ taskPopupsBoardListOnly: false,
1428
+ /*
1417
1429
  FNXC:TaskCardCostBadge 2026-07-11-12:15:
1418
1430
  Default off preserves existing board-card density. When true, the dashboard may render a read-time derived cost badge only for tasks with positive token usage; unavailable pricing remains the guess-free “—” sentinel.
1419
1431
  */
@@ -1615,6 +1627,13 @@ var init_settings_schema = __esm({
1615
1627
  titleSummarizerFallbackProvider: void 0,
1616
1628
  titleSummarizerFallbackModelId: void 0,
1617
1629
  titleSummarizerFallbackThinkingLevel: void 0,
1630
+ /*
1631
+ FNXC:Settings-MergerModel 2026-07-13-07:52:
1632
+ Merger model lane stays project-scoped (not workflow-moved) like title summarizer: Settings → Project Models can override the global merger baseline without binding the choice to a workflow graph.
1633
+ */
1634
+ mergerProvider: void 0,
1635
+ mergerModelId: void 0,
1636
+ mergerThinkingLevel: void 0,
1618
1637
  prTitlePromptInstructions: void 0,
1619
1638
  prDescriptionPromptInstructions: void 0,
1620
1639
  scripts: void 0,
@@ -2664,6 +2683,22 @@ function resolveTitleSummarizerSettingsModel(settings) {
2664
2683
  settings
2665
2684
  );
2666
2685
  }
2686
+ function resolveMergerSettingsModel(settings) {
2687
+ return applyTestModeOverrides(
2688
+ pickFirstModelPair(
2689
+ {
2690
+ provider: settings?.mergerProvider,
2691
+ modelId: settings?.mergerModelId
2692
+ },
2693
+ {
2694
+ provider: settings?.mergerGlobalProvider,
2695
+ modelId: settings?.mergerGlobalModelId
2696
+ },
2697
+ resolveProjectDefaultModel(settings)
2698
+ ),
2699
+ settings
2700
+ );
2701
+ }
2667
2702
  function resolveTaskExecutionModel(task, settings) {
2668
2703
  return applyTestModeOverrides(
2669
2704
  pickFirstModelPair(
@@ -93681,6 +93716,7 @@ __export(src_exports, {
93681
93716
  resolveMaxReworkCycles: () => resolveMaxReworkCycles,
93682
93717
  resolveMemoryBackend: () => resolveMemoryBackend,
93683
93718
  resolveMemoryInstructionContext: () => resolveMemoryInstructionContext,
93719
+ resolveMergerSettingsModel: () => resolveMergerSettingsModel,
93684
93720
  resolveOptionalReviewRevisionBudget: () => resolveOptionalReviewRevisionBudget,
93685
93721
  resolveOptionalStepRevisionBudget: () => resolveOptionalStepRevisionBudget,
93686
93722
  resolvePersistAgentThinkingLog: () => resolvePersistAgentThinkingLog,
@@ -139771,7 +139807,12 @@ function resolveTitleSummarizerThinkingLevel(settings) {
139771
139807
  );
139772
139808
  }
139773
139809
  function resolveMergerThinkingLevel(settings) {
139774
- return firstThinkingLevel2(settings?.defaultThinkingLevelOverride, settings?.defaultThinkingLevel);
139810
+ return firstThinkingLevel2(
139811
+ settings?.mergerThinkingLevel,
139812
+ settings?.mergerGlobalThinkingLevel,
139813
+ settings?.defaultThinkingLevelOverride,
139814
+ settings?.defaultThinkingLevel
139815
+ );
139775
139816
  }
139776
139817
  function resolveExecutorFallbackThinkingLevel(taskThinkingLevel, settings) {
139777
139818
  return firstThinkingLevel2(
@@ -139951,8 +139992,8 @@ function resolveMergerSessionModel(settings, assignedAgentRuntimeConfig) {
139951
139992
  modelId: TEST_MODE_RESOLVED.modelId
139952
139993
  };
139953
139994
  }
139954
- const defaultModel = resolveProjectDefaultModel(settings);
139955
- return pickSettingsThenRuntimeModel(defaultModel, assignedAgentRuntimeConfig);
139995
+ const mergerModel = resolveMergerSettingsModel(settings);
139996
+ return pickSettingsThenRuntimeModel(mergerModel, assignedAgentRuntimeConfig);
139956
139997
  }
139957
139998
  async function createResolvedAgentSession(options) {
139958
139999
  const { sessionPurpose, pluginRunner, runtimeHint, runAuditor, settings, ...runtimeOptionsRaw } = options;
@@ -151069,7 +151110,9 @@ function readHeartbeatTimerRepairMetadata(agent) {
151069
151110
  return {
151070
151111
  repairedAt: typeof candidate.repairedAt === "string" ? candidate.repairedAt : void 0,
151071
151112
  staleAtRepair: typeof candidate.staleAtRepair === "boolean" ? candidate.staleAtRepair : void 0,
151072
- staleRepairReason: typeof candidate.staleRepairReason === "string" ? candidate.staleRepairReason : void 0
151113
+ staleRepairReason: typeof candidate.staleRepairReason === "string" ? candidate.staleRepairReason : void 0,
151114
+ consecutiveNonAdvancingRearms: typeof candidate.consecutiveNonAdvancingRearms === "number" ? candidate.consecutiveNonAdvancingRearms : void 0,
151115
+ nonAdvancingEscalated: typeof candidate.nonAdvancingEscalated === "boolean" ? candidate.nonAdvancingEscalated : void 0
151073
151116
  };
151074
151117
  }
151075
151118
  var MAX_HEARTBEAT_WORKTREE_ACQUISITION_RETRIES, MAX_HEARTBEAT_ERROR_RECOVERY_ATTEMPTS, HEARTBEAT_ERROR_RECOVERY_METADATA_KEY, HEARTBEAT_ERROR_RETRY_EXHAUSTED_PAUSE_REASON, HEARTBEAT_ERROR_UNRECOVERABLE_PAUSE_REASON, promptSizeLog, REPORTS_STALE_INTERVAL_MULTIPLIER, MIN_HEARTBEAT_STALENESS_MS, agentSoulWordsCache, HEARTBEAT_SYSTEM_PROMPT, HEARTBEAT_NO_TASK_SYSTEM_PROMPT, HEARTBEAT_PROCEDURE_STRICT, HEARTBEAT_PROCEDURE_LITE, HEARTBEAT_PROCEDURE_OFF, HEARTBEAT_PROCEDURE, HEARTBEAT_NO_TASK_PROCEDURE_STRICT, HEARTBEAT_NO_TASK_PROCEDURE_LITE, HEARTBEAT_NO_TASK_PROCEDURE_OFF, heartbeatDoneParams, HeartbeatMonitor, OVERDUE_FIRE_JITTER_MS, HeartbeatTriggerScheduler;
@@ -154031,7 +154074,13 @@ ${trimPromptMd(taskDetail.prompt, promptTemplate)}` : "No PROMPT.md available.",
154031
154074
  * Absent (legacy/no executor wiring) → treated as never effectively executing. */
154032
154075
  isAgentEffectivelyExecuting;
154033
154076
  timerAuditIntervalHandle = null;
154077
+ timerAuditWatchdogHandle = null;
154078
+ lastAuditRanAtMs = 0;
154079
+ nonAdvancingRearmState = /* @__PURE__ */ new Map();
154034
154080
  static TIMER_AUDIT_INTERVAL_MS = 6e4;
154081
+ static TIMER_AUDIT_WATCHDOG_INTERVAL_MS = 6e4;
154082
+ static TIMER_AUDIT_WATCHDOG_STALE_MS = _HeartbeatTriggerScheduler.TIMER_AUDIT_INTERVAL_MS * 3;
154083
+ static NON_ADVANCING_REARM_ESCALATION_THRESHOLD = 3;
154035
154084
  static DEFAULT_REPAIR_STALE_MULTIPLIER = 2;
154036
154085
  static DEFAULT_HEARTBEAT_TIMEOUT_MS = 6e4;
154037
154086
  constructor(store, callback, taskStore, options) {
@@ -154048,13 +154097,52 @@ ${trimPromptMd(taskDetail.prompt, promptTemplate)}` : "No PROMPT.md available.",
154048
154097
  start() {
154049
154098
  if (this.running) return;
154050
154099
  this.running = true;
154100
+ this.lastAuditRanAtMs = Date.now();
154051
154101
  this.watchAssignments();
154052
154102
  this.watchAgentLifecycle();
154053
154103
  void this.auditTimerRegistrations("start");
154104
+ this.armTimerAuditInterval();
154105
+ this.armTimerAuditWatchdog();
154106
+ heartbeatLog.log("HeartbeatTriggerScheduler started");
154107
+ }
154108
+ armTimerAuditInterval() {
154109
+ if (this.timerAuditIntervalHandle) {
154110
+ clearInterval(this.timerAuditIntervalHandle);
154111
+ this.timerAuditIntervalHandle = null;
154112
+ }
154113
+ if (!this.running) {
154114
+ return;
154115
+ }
154054
154116
  this.timerAuditIntervalHandle = setInterval(() => {
154055
154117
  void this.auditTimerRegistrations("interval");
154056
154118
  }, _HeartbeatTriggerScheduler.TIMER_AUDIT_INTERVAL_MS);
154057
- heartbeatLog.log("HeartbeatTriggerScheduler started");
154119
+ }
154120
+ armTimerAuditWatchdog() {
154121
+ if (this.timerAuditWatchdogHandle) {
154122
+ clearInterval(this.timerAuditWatchdogHandle);
154123
+ this.timerAuditWatchdogHandle = null;
154124
+ }
154125
+ if (!this.running) {
154126
+ return;
154127
+ }
154128
+ this.timerAuditWatchdogHandle = setInterval(() => {
154129
+ void this.checkTimerAuditLiveness();
154130
+ }, _HeartbeatTriggerScheduler.TIMER_AUDIT_WATCHDOG_INTERVAL_MS);
154131
+ }
154132
+ async checkTimerAuditLiveness() {
154133
+ if (!this.running) {
154134
+ return;
154135
+ }
154136
+ const now = Date.now();
154137
+ const elapsedMs = this.lastAuditRanAtMs > 0 ? now - this.lastAuditRanAtMs : Number.POSITIVE_INFINITY;
154138
+ if (elapsedMs <= _HeartbeatTriggerScheduler.TIMER_AUDIT_WATCHDOG_STALE_MS) {
154139
+ return;
154140
+ }
154141
+ heartbeatLog.warn(
154142
+ `Heartbeat timer audit watchdog re-armed stalled auditor reason=heartbeat-audit-watchdog-rearmed elapsedMs=${elapsedMs} thresholdMs=${_HeartbeatTriggerScheduler.TIMER_AUDIT_WATCHDOG_STALE_MS}`
154143
+ );
154144
+ this.armTimerAuditInterval();
154145
+ await this.auditTimerRegistrations("interval");
154058
154146
  }
154059
154147
  /**
154060
154148
  * Stop the scheduler and clear all timers.
@@ -154077,6 +154165,12 @@ ${trimPromptMd(taskDetail.prompt, promptTemplate)}` : "No PROMPT.md available.",
154077
154165
  clearInterval(this.timerAuditIntervalHandle);
154078
154166
  this.timerAuditIntervalHandle = null;
154079
154167
  }
154168
+ if (this.timerAuditWatchdogHandle) {
154169
+ clearInterval(this.timerAuditWatchdogHandle);
154170
+ this.timerAuditWatchdogHandle = null;
154171
+ }
154172
+ this.lastAuditRanAtMs = 0;
154173
+ this.nonAdvancingRearmState.clear();
154080
154174
  heartbeatLog.log("HeartbeatTriggerScheduler stopped");
154081
154175
  }
154082
154176
  /**
@@ -154221,6 +154315,7 @@ ${trimPromptMd(taskDetail.prompt, promptTemplate)}` : "No PROMPT.md available.",
154221
154315
  unregisterAgent(agentId) {
154222
154316
  this.registrationEpochs.set(agentId, (this.registrationEpochs.get(agentId) ?? 0) + 1);
154223
154317
  this.pendingAssignments.delete(agentId);
154318
+ this.nonAdvancingRearmState.delete(agentId);
154224
154319
  if (this.timers.has(agentId)) {
154225
154320
  this.clearAgentTimer(agentId);
154226
154321
  heartbeatLog.log(`Unregistered timer for ${agentId}`);
@@ -154542,7 +154637,7 @@ ${trimPromptMd(taskDetail.prompt, promptTemplate)}` : "No PROMPT.md available.",
154542
154637
  );
154543
154638
  return { reaped: true, elapsedMs, thresholdMs };
154544
154639
  }
154545
- async markRepairMetadata(agent, staleAtRepair, staleRepairReason) {
154640
+ async markRepairMetadata(agent, staleAtRepair, staleRepairReason, options) {
154546
154641
  const updater = this.store.updateAgent;
154547
154642
  if (typeof updater !== "function") {
154548
154643
  return;
@@ -154552,9 +154647,11 @@ ${trimPromptMd(taskDetail.prompt, promptTemplate)}` : "No PROMPT.md available.",
154552
154647
  const nextRepair = {
154553
154648
  repairedAt,
154554
154649
  staleAtRepair,
154555
- ...staleAtRepair && staleRepairReason ? { staleRepairReason } : {}
154650
+ ...staleAtRepair && staleRepairReason ? { staleRepairReason } : {},
154651
+ ...typeof options?.consecutiveNonAdvancingRearms === "number" ? { consecutiveNonAdvancingRearms: options.consecutiveNonAdvancingRearms } : {},
154652
+ ...options?.nonAdvancingEscalated ? { nonAdvancingEscalated: true } : {}
154556
154653
  };
154557
- const didChange = existing.repairedAt !== nextRepair.repairedAt || existing.staleAtRepair !== nextRepair.staleAtRepair || existing.staleRepairReason !== nextRepair.staleRepairReason;
154654
+ const didChange = existing.repairedAt !== nextRepair.repairedAt || existing.staleAtRepair !== nextRepair.staleAtRepair || existing.staleRepairReason !== nextRepair.staleRepairReason || existing.consecutiveNonAdvancingRearms !== nextRepair.consecutiveNonAdvancingRearms || existing.nonAdvancingEscalated !== nextRepair.nonAdvancingEscalated;
154558
154655
  if (!didChange) {
154559
154656
  return;
154560
154657
  }
@@ -154564,6 +154661,7 @@ ${trimPromptMd(taskDetail.prompt, promptTemplate)}` : "No PROMPT.md available.",
154564
154661
  }
154565
154662
  async auditTimerRegistrations(reason = "interval") {
154566
154663
  if (!this.running) return;
154664
+ this.lastAuditRanAtMs = Date.now();
154567
154665
  try {
154568
154666
  const settings = this.taskStore && typeof this.taskStore.getSettings === "function" ? await this.taskStore.getSettings() : null;
154569
154667
  const staleMultiplier = this.resolveRepairStaleMultiplier(settings);
@@ -154573,6 +154671,7 @@ ${trimPromptMd(taskDetail.prompt, promptTemplate)}` : "No PROMPT.md available.",
154573
154671
  let zombieRearmedCount = 0;
154574
154672
  for (const agent of agents) {
154575
154673
  if (!this.isTimerEligibleAgent(agent)) {
154674
+ this.nonAdvancingRearmState.delete(agent.id);
154576
154675
  if (this.timers.has(agent.id)) {
154577
154676
  this.unregisterAgent(agent.id);
154578
154677
  heartbeatLog.log(`Timer audit cleared orphaned timer for non-eligible agent ${agent.id} (audit:${reason})`);
@@ -154583,7 +154682,10 @@ ${trimPromptMd(taskDetail.prompt, promptTemplate)}` : "No PROMPT.md available.",
154583
154682
  const staleThresholdMs = this.getRepairStaleThresholdMs(agent, staleMultiplier);
154584
154683
  const elapsedMs = getHeartbeatAgeMs(agent);
154585
154684
  const staleAtRepair = Number.isFinite(elapsedMs) && elapsedMs > staleThresholdMs;
154586
- if (hasTimerEntry && !staleAtRepair) continue;
154685
+ if (hasTimerEntry && !staleAtRepair) {
154686
+ this.nonAdvancingRearmState.delete(agent.id);
154687
+ continue;
154688
+ }
154587
154689
  const isZombieRearm = hasTimerEntry && staleAtRepair;
154588
154690
  const activeRun = await this.store.getActiveHeartbeatRun(agent.id);
154589
154691
  const activeRunId = activeRun?.id ?? null;
@@ -154592,6 +154694,7 @@ ${trimPromptMd(taskDetail.prompt, promptTemplate)}` : "No PROMPT.md available.",
154592
154694
  let activeRunThresholdMs = Number.NaN;
154593
154695
  if (activeRun) {
154594
154696
  if (settings?.globalPause || settings?.enginePaused) {
154697
+ this.nonAdvancingRearmState.delete(agent.id);
154595
154698
  heartbeatLog.log(`Timer audit skipped re-arm for ${agent.id} (active run)`);
154596
154699
  continue;
154597
154700
  }
@@ -154600,15 +154703,34 @@ ${trimPromptMd(taskDetail.prompt, promptTemplate)}` : "No PROMPT.md available.",
154600
154703
  activeRunElapsedMs = reapResult.elapsedMs;
154601
154704
  activeRunThresholdMs = reapResult.thresholdMs;
154602
154705
  if (!reapedActiveRun) {
154706
+ this.nonAdvancingRearmState.delete(agent.id);
154603
154707
  heartbeatLog.log(`Timer audit skipped re-arm for ${agent.id} (active run)`);
154604
154708
  continue;
154605
154709
  }
154606
154710
  }
154711
+ let consecutiveNonAdvancingRearms;
154712
+ let nonAdvancingEscalated = false;
154713
+ let escalationReason;
154714
+ if (isZombieRearm && !settings?.globalPause && !settings?.enginePaused) {
154715
+ const heartbeatMarker = typeof agent.lastHeartbeatAt === "string" ? agent.lastHeartbeatAt : null;
154716
+ const previous = this.nonAdvancingRearmState.get(agent.id);
154717
+ consecutiveNonAdvancingRearms = previous && previous.lastHeartbeatAt === heartbeatMarker ? previous.count + 1 : 1;
154718
+ this.nonAdvancingRearmState.set(agent.id, { lastHeartbeatAt: heartbeatMarker, count: consecutiveNonAdvancingRearms });
154719
+ nonAdvancingEscalated = consecutiveNonAdvancingRearms >= _HeartbeatTriggerScheduler.NON_ADVANCING_REARM_ESCALATION_THRESHOLD;
154720
+ if (nonAdvancingEscalated) {
154721
+ escalationReason = `heartbeat-rearm-nonadvancing-escalated: ${consecutiveNonAdvancingRearms} consecutive zombie re-arms without lastHeartbeatAt advancing`;
154722
+ }
154723
+ } else {
154724
+ this.nonAdvancingRearmState.delete(agent.id);
154725
+ }
154607
154726
  this.registerAgent(agent.id, this.getAgentTimerConfig(agent), {
154608
154727
  lastHeartbeatAt: agent.lastHeartbeatAt
154609
154728
  });
154610
- const staleRepairReason = staleAtRepair ? isZombieRearm ? `zombie-timer-rearmed: no heartbeat for ${Math.round(elapsedMs / 1e3)}s while a timer entry remained present (threshold ${Math.round(staleThresholdMs / 1e3)}s)` : `No heartbeat for ${Math.round(elapsedMs / 1e3)}s before timer audit repair (threshold ${Math.round(staleThresholdMs / 1e3)}s)` : void 0;
154611
- await this.markRepairMetadata(agent, staleAtRepair, staleRepairReason);
154729
+ const staleRepairReason = staleAtRepair ? escalationReason ? `${escalationReason}; zombie-timer-rearmed: no heartbeat for ${Math.round(elapsedMs / 1e3)}s while a timer entry remained present (threshold ${Math.round(staleThresholdMs / 1e3)}s)` : isZombieRearm ? `zombie-timer-rearmed: no heartbeat for ${Math.round(elapsedMs / 1e3)}s while a timer entry remained present (threshold ${Math.round(staleThresholdMs / 1e3)}s)` : `No heartbeat for ${Math.round(elapsedMs / 1e3)}s before timer audit repair (threshold ${Math.round(staleThresholdMs / 1e3)}s)` : void 0;
154730
+ await this.markRepairMetadata(agent, staleAtRepair, staleRepairReason, {
154731
+ consecutiveNonAdvancingRearms,
154732
+ nonAdvancingEscalated
154733
+ });
154612
154734
  rearmedCount++;
154613
154735
  if (isZombieRearm) zombieRearmedCount++;
154614
154736
  if (reapedActiveRun && activeRunId) {
@@ -154616,7 +154738,11 @@ ${trimPromptMd(taskDetail.prompt, promptTemplate)}` : "No PROMPT.md available.",
154616
154738
  `Timer audit re-armed after stale-run reap reason=timer-audit-rearmed agentId=${agent.id} runId=${activeRunId} elapsedMs=${activeRunElapsedMs} thresholdMs=${activeRunThresholdMs}`
154617
154739
  );
154618
154740
  }
154619
- if (isZombieRearm) {
154741
+ if (nonAdvancingEscalated) {
154742
+ heartbeatLog.warn(
154743
+ `Timer audit escalated non-advancing zombie re-arm reason=heartbeat-rearm-nonadvancing-escalated agentId=${agent.id} count=${consecutiveNonAdvancingRearms} threshold=${_HeartbeatTriggerScheduler.NON_ADVANCING_REARM_ESCALATION_THRESHOLD} (audit:${reason}): ${staleRepairReason}`
154744
+ );
154745
+ } else if (isZombieRearm) {
154620
154746
  heartbeatLog.warn(`Timer audit force re-armed non-advancing agent ${agent.id} reason=zombie-timer-rearmed (audit:${reason}): ${staleRepairReason}`);
154621
154747
  } else if (staleAtRepair) {
154622
154748
  heartbeatLog.warn(`Timer re-armed stale agent ${agent.id} (audit:${reason}): ${staleRepairReason ?? "heartbeat exceeded stale threshold before repair"}`);
@@ -190140,12 +190266,43 @@ function canonicalizePath2(path7) {
190140
190266
  return resolvePath(path7);
190141
190267
  }
190142
190268
  }
190269
+ function countExecuteRequeueTerminalSteps(live) {
190270
+ return live.steps?.filter((step) => step.status === "done" || step.status === "skipped").length ?? 0;
190271
+ }
190272
+ function parseExecuteRequeueLoopProgressSignature(signature) {
190273
+ if (!signature) return null;
190274
+ try {
190275
+ const parsed = JSON.parse(signature);
190276
+ if (typeof parsed.terminalStepCount !== "number" || typeof parsed.totalSteps !== "number") return null;
190277
+ return {
190278
+ terminalStepCount: parsed.terminalStepCount,
190279
+ totalSteps: parsed.totalSteps
190280
+ };
190281
+ } catch {
190282
+ return null;
190283
+ }
190284
+ }
190143
190285
  function buildExecuteRequeueLoopSignature(live) {
190144
190286
  return JSON.stringify({
190145
- currentStep: live.currentStep ?? null,
190146
- steps: live.steps?.map((step) => step.status) ?? []
190287
+ terminalStepCount: countExecuteRequeueTerminalSteps(live),
190288
+ totalSteps: live.steps?.length ?? 0
190147
190289
  });
190148
190290
  }
190291
+ function buildExecuteRequeueLoopHighWaterSignature(live, previousSignature) {
190292
+ const current = parseExecuteRequeueLoopProgressSignature(buildExecuteRequeueLoopSignature(live));
190293
+ const currentTerminalStepCount = current?.terminalStepCount ?? countExecuteRequeueTerminalSteps(live);
190294
+ const totalSteps = current?.totalSteps ?? (live.steps?.length ?? 0);
190295
+ const previous = parseExecuteRequeueLoopProgressSignature(previousSignature);
190296
+ const previousTerminalStepCount = previous?.terminalStepCount ?? currentTerminalStepCount;
190297
+ const madeForwardProgress = previous != null && currentTerminalStepCount > previousTerminalStepCount;
190298
+ return {
190299
+ madeForwardProgress,
190300
+ signature: JSON.stringify({
190301
+ terminalStepCount: Math.max(previousTerminalStepCount, currentTerminalStepCount),
190302
+ totalSteps
190303
+ })
190304
+ };
190305
+ }
190149
190306
  function isTransientMissingTaskJsonError(error48, task) {
190150
190307
  if (error48 instanceof TaskDeletedError) {
190151
190308
  return false;
@@ -196713,8 +196870,8 @@ Graph value: ${failureValue}` : ""}`, budget.key),
196713
196870
  await this.persistTokenUsage(task.id);
196714
196871
  return;
196715
196872
  }
196716
- const signature = buildExecuteRequeueLoopSignature(live);
196717
- const nextCount = live.executeRequeueLoopSignature === signature ? (live.executeRequeueLoopCount ?? 0) + 1 : 1;
196873
+ const { signature, madeForwardProgress } = buildExecuteRequeueLoopHighWaterSignature(live, live.executeRequeueLoopSignature);
196874
+ const nextCount = madeForwardProgress || live.executeRequeueLoopSignature == null ? 1 : (live.executeRequeueLoopCount ?? 0) + 1;
196718
196875
  if (live.executeRequeueLoopCount !== nextCount || live.executeRequeueLoopSignature !== signature) {
196719
196876
  await this.store.updateTask(task.id, {
196720
196877
  executeRequeueLoopCount: nextCount,
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fusion/pi-claude-cli",
3
- "version": "0.59.0",
3
+ "version": "0.60.0",
4
4
  "type": "module",
5
5
  "private": true,
6
6
  "main": "index.ts",
@@ -5670,10 +5670,13 @@ interface GlobalSettings {
5670
5670
  validatorGlobalModelId?: string;
5671
5671
  titleSummarizerGlobalProvider?: string;
5672
5672
  titleSummarizerGlobalModelId?: string;
5673
+ mergerGlobalProvider?: string;
5674
+ mergerGlobalModelId?: string;
5673
5675
  executionGlobalThinkingLevel?: ThinkingLevel;
5674
5676
  planningGlobalThinkingLevel?: ThinkingLevel;
5675
5677
  validatorGlobalThinkingLevel?: ThinkingLevel;
5676
5678
  titleSummarizerGlobalThinkingLevel?: ThinkingLevel;
5679
+ mergerGlobalThinkingLevel?: ThinkingLevel;
5677
5680
  daemonToken?: string;
5678
5681
  daemonPort?: number;
5679
5682
  daemonHost?: string;
@@ -5830,6 +5833,7 @@ interface ProjectSettings {
5830
5833
  showWorktreeGrouping?: boolean;
5831
5834
  openTasksInRightSidebar?: boolean;
5832
5835
  openMobileTasksInPopup?: boolean;
5836
+ taskPopupsBoardListOnly?: boolean;
5833
5837
  showCostBadgeOnCards?: boolean;
5834
5838
  taskDetailChatFirst?: boolean;
5835
5839
  executorAllowSiblingBranchRename?: boolean;
@@ -6011,6 +6015,9 @@ interface ProjectSettings {
6011
6015
  titleSummarizerProvider?: string;
6012
6016
  titleSummarizerModelId?: string;
6013
6017
  titleSummarizerThinkingLevel?: ThinkingLevel;
6018
+ mergerProvider?: string;
6019
+ mergerModelId?: string;
6020
+ mergerThinkingLevel?: ThinkingLevel;
6014
6021
  titleSummarizerFallbackProvider?: string;
6015
6022
  titleSummarizerFallbackModelId?: string;
6016
6023
  titleSummarizerFallbackThinkingLevel?: ThinkingLevel;
@@ -5,11 +5,6 @@ var __export = (target, all) => {
5
5
  };
6
6
 
7
7
  // ../plugin-sdk/src/index.ts
8
- import {
9
- WORKFLOW_EXTENSION_SCHEMA_VERSION,
10
- workflowExtensionRegistryId,
11
- createBoardActionServices
12
- } from "@fusion/core";
13
8
  function definePlugin(plugin2) {
14
9
  return plugin2;
15
10
  }
@@ -16349,7 +16344,6 @@ var RequestError = class _RequestError extends Error {
16349
16344
 
16350
16345
  // ../../plugins/fusion-plugin-acp-runtime/src/process-manager.ts
16351
16346
  import { spawn } from "node:child_process";
16352
- import { redactSecrets } from "@fusion/core";
16353
16347
  function debugLog(message) {
16354
16348
  if (process.env.PI_ACP_DEBUG !== "1") return;
16355
16349
  console.error(`[acp-runtime] ${message}`);
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fusion-plugin-examples/acp-runtime",
3
- "version": "0.1.24",
3
+ "version": "0.1.25",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fusion-plugin-examples/cli-printing-press",
3
- "version": "0.1.41",
3
+ "version": "0.1.42",
4
4
  "type": "module",
5
5
  "private": true,
6
6
  "exports": {
@@ -1,9 +1,4 @@
1
1
  // ../plugin-sdk/src/index.ts
2
- import {
3
- WORKFLOW_EXTENSION_SCHEMA_VERSION,
4
- workflowExtensionRegistryId,
5
- createBoardActionServices
6
- } from "@fusion/core";
7
2
  function definePlugin(plugin2) {
8
3
  return plugin2;
9
4
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fusion-plugin-examples/compound-engineering",
3
- "version": "0.1.24",
3
+ "version": "0.1.25",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": {
@@ -1,9 +1,4 @@
1
1
  // ../plugin-sdk/src/index.ts
2
- import {
3
- WORKFLOW_EXTENSION_SCHEMA_VERSION,
4
- workflowExtensionRegistryId,
5
- createBoardActionServices
6
- } from "@fusion/core";
7
2
  function definePlugin(plugin2) {
8
3
  return plugin2;
9
4
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fusion-plugin-examples/cursor-runtime",
3
- "version": "0.1.43",
3
+ "version": "0.1.44",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": {
@@ -1,9 +1,4 @@
1
1
  // ../plugin-sdk/src/index.ts
2
- import {
3
- WORKFLOW_EXTENSION_SCHEMA_VERSION,
4
- workflowExtensionRegistryId,
5
- createBoardActionServices
6
- } from "@fusion/core";
7
2
  function definePlugin(plugin2) {
8
3
  return plugin2;
9
4
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fusion-plugin-examples/dependency-graph",
3
- "version": "0.1.55",
3
+ "version": "0.1.56",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": {
@@ -129072,11 +129072,6 @@ var init_openai_responses = __esm({
129072
129072
  });
129073
129073
 
129074
129074
  // ../plugin-sdk/src/index.ts
129075
- import {
129076
- WORKFLOW_EXTENSION_SCHEMA_VERSION,
129077
- workflowExtensionRegistryId,
129078
- createBoardActionServices
129079
- } from "@fusion/core";
129080
129075
  function definePlugin(plugin2) {
129081
129076
  return plugin2;
129082
129077
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fusion-plugin-examples/droid-runtime",
3
- "version": "0.1.50",
3
+ "version": "0.1.51",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": {
@@ -5,11 +5,6 @@ var __export = (target, all) => {
5
5
  };
6
6
 
7
7
  // ../plugin-sdk/src/index.ts
8
- import {
9
- WORKFLOW_EXTENSION_SCHEMA_VERSION,
10
- workflowExtensionRegistryId,
11
- createBoardActionServices
12
- } from "@fusion/core";
13
8
  function definePlugin(plugin2) {
14
9
  return plugin2;
15
10
  }
@@ -16337,7 +16332,6 @@ var RequestError = class _RequestError extends Error {
16337
16332
 
16338
16333
  // ../../plugins/fusion-plugin-grok-runtime/src/acp/process-manager.ts
16339
16334
  import { spawn } from "node:child_process";
16340
- import { redactSecrets } from "@fusion/core";
16341
16335
  function debugLog(message) {
16342
16336
  if (process.env.PI_ACP_DEBUG !== "1" && process.env.FUSION_GROK_ACP_DEBUG !== "1") return;
16343
16337
  console.error(`[grok-acp] ${message}`);
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fusion-plugin-examples/grok-runtime",
3
- "version": "0.2.2",
3
+ "version": "0.2.3",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": {
@@ -1,9 +1,4 @@
1
1
  // ../plugin-sdk/src/index.ts
2
- import {
3
- WORKFLOW_EXTENSION_SCHEMA_VERSION,
4
- workflowExtensionRegistryId,
5
- createBoardActionServices
6
- } from "@fusion/core";
7
2
  function definePlugin(plugin2) {
8
3
  return plugin2;
9
4
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fusion-plugin-examples/hermes-runtime",
3
- "version": "0.2.74",
3
+ "version": "0.2.75",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": {
@@ -1,9 +1,4 @@
1
1
  // ../plugin-sdk/src/index.ts
2
- import {
3
- WORKFLOW_EXTENSION_SCHEMA_VERSION,
4
- workflowExtensionRegistryId,
5
- createBoardActionServices
6
- } from "@fusion/core";
7
2
  function definePlugin(plugin2) {
8
3
  return plugin2;
9
4
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fusion-plugin-examples/linear-import",
3
- "version": "0.1.6",
3
+ "version": "0.1.7",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": {
@@ -1,9 +1,4 @@
1
1
  // ../plugin-sdk/src/index.ts
2
- import {
3
- WORKFLOW_EXTENSION_SCHEMA_VERSION,
4
- workflowExtensionRegistryId,
5
- createBoardActionServices
6
- } from "@fusion/core";
7
2
  function definePlugin(plugin2) {
8
3
  return plugin2;
9
4
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fusion-plugin-examples/openclaw-runtime",
3
- "version": "0.2.74",
3
+ "version": "0.2.75",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": {
@@ -1,9 +1,4 @@
1
1
  // ../plugin-sdk/src/index.ts
2
- import {
3
- WORKFLOW_EXTENSION_SCHEMA_VERSION,
4
- workflowExtensionRegistryId,
5
- createBoardActionServices
6
- } from "@fusion/core";
7
2
  function definePlugin(plugin2) {
8
3
  return plugin2;
9
4
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fusion-plugin-examples/paperclip-runtime",
3
- "version": "0.2.74",
3
+ "version": "0.2.75",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fusion-plugin-examples/reports",
3
- "version": "0.1.43",
3
+ "version": "0.1.44",
4
4
  "type": "module",
5
5
  "private": true,
6
6
  "exports": {
@@ -1,9 +1,4 @@
1
1
  // ../plugin-sdk/src/index.ts
2
- import {
3
- WORKFLOW_EXTENSION_SCHEMA_VERSION,
4
- workflowExtensionRegistryId,
5
- createBoardActionServices
6
- } from "@fusion/core";
7
2
  function definePlugin(plugin2) {
8
3
  return plugin2;
9
4
  }