@runfusion/fusion 0.43.0 → 0.44.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 (137) hide show
  1. package/dist/bin.js +8264 -1823
  2. package/dist/client/.vite/manifest.json +277 -266
  3. package/dist/client/assets/AgentDetailView-CanIeYHg.css +1 -0
  4. package/dist/client/assets/{AgentDetailView-FUKwQxBP.js → AgentDetailView-DxV8pFHX.js} +3 -3
  5. package/dist/client/assets/{AgentPermissionPolicyEditor-DMDUhF1n.js → AgentPermissionPolicyEditor--YS4iMUY.js} +2 -2
  6. package/dist/client/assets/AgentsView-BVILQjdS.css +1 -0
  7. package/dist/client/assets/{AgentsView-BrQLd-yI.js → AgentsView-CTzbcvhK.js} +3 -3
  8. package/dist/client/assets/ChatView-COygcnyk.js +6 -0
  9. package/dist/client/assets/CommandCenter-CTaopaC0.css +1 -0
  10. package/dist/client/assets/CommandCenter-DoKX2HWm.js +56 -0
  11. package/dist/client/assets/DevServerView-Cyevyvqx.js +1 -0
  12. package/dist/client/assets/{DirectoryPicker-DTKtd8L2.css → DirectoryPicker-0rspvcMz.css} +1 -1
  13. package/dist/client/assets/{DirectoryPicker-BFot4CVM.js → DirectoryPicker-DBdyXEhR.js} +1 -1
  14. package/dist/client/assets/DocumentsView-BzSMyrns.js +1 -0
  15. package/dist/client/assets/{EvalsView-DAXqDqn2.js → EvalsView-ikz00o9g.js} +1 -1
  16. package/dist/client/assets/ExperimentalAgentOnboardingModal-CZ_jbgep.css +1 -0
  17. package/dist/client/assets/{ExperimentalAgentOnboardingModal-B4aZ1y0n.js → ExperimentalAgentOnboardingModal-D-rzCCET.js} +10 -10
  18. package/dist/client/assets/GoalsView-Bfu1Oy2-.js +2 -0
  19. package/dist/client/assets/GoalsView-rg9VSIza.css +1 -0
  20. package/dist/client/assets/{InsightsView-D5fzFy-F.js → InsightsView-Cgmf5nES.js} +1 -1
  21. package/dist/client/assets/InsightsView-LMv1M1dU.css +1 -0
  22. package/dist/client/assets/MemoryView-DkEuDKQs.js +2 -0
  23. package/dist/client/assets/{NodesView-BA3pKMZu.js → NodesView-B_KYfS4o.js} +3 -3
  24. package/dist/client/assets/{PiExtensionsManager-C4I11iKm.js → PiExtensionsManager-Dz69kkKs.js} +2 -2
  25. package/dist/client/assets/PluginManager-DSiHizRD.css +1 -0
  26. package/dist/client/assets/{PluginManager-BzTzTMXZ.js → PluginManager-LHCVcduP.js} +1 -1
  27. package/dist/client/assets/PullRequestView-3AdbS2a1.css +1 -0
  28. package/dist/client/assets/{PullRequestView-11xJ565q.js → PullRequestView-DBJutLLl.js} +2 -2
  29. package/dist/client/assets/{ResearchView-BHiXfjzE.js → ResearchView-gpn1XcVy.js} +1 -1
  30. package/dist/client/assets/{SecretsView-CC5OYoCn.js → SecretsView-B7YqIowt.js} +1 -1
  31. package/dist/client/assets/SecretsView-Djo1rahi.css +1 -0
  32. package/dist/client/assets/SessionTerminal-9l4bdKcn.js +2 -0
  33. package/dist/client/assets/SessionTerminal-BNgtmXb3.css +1 -0
  34. package/dist/client/assets/SettingsModal-BGEK9_9A.js +31 -0
  35. package/dist/client/assets/{SettingsModal-DpAxDq6M.css → SettingsModal-CKv0TJfM.css} +1 -1
  36. package/dist/client/assets/SettingsModal-CXogw-Er.css +1 -0
  37. package/dist/client/assets/{SettingsModal-BKEbtdqR.js → SettingsModal-DIIoHGUH.js} +1 -1
  38. package/dist/client/assets/{SetupWizardModal-CBfItlP6.js → SetupWizardModal-BcVeMxeX.js} +1 -1
  39. package/dist/client/assets/{SkillsView-DbcW87-E.js → SkillsView-BxSJ4PHL.js} +1 -1
  40. package/dist/client/assets/{StashRecoveryView-CH9RPtzX.js → StashRecoveryView-BhFQ2FsP.js} +1 -1
  41. package/dist/client/assets/{TodoView-ToviJ0SV.js → TodoView-BZpewjy0.js} +2 -2
  42. package/dist/client/assets/WorkflowNodeEditor-Yn1FRF2v.css +1 -0
  43. package/dist/client/assets/WorkflowNodeEditor-tWsgCdVt.js +8 -0
  44. package/dist/client/assets/{addon-fit-B4jkcKk4.js → addon-fit-SnYDEvGm.js} +1 -1
  45. package/dist/client/assets/{addon-unicode11-Cdne2Sj4.js → addon-unicode11-s5GoZCpi.js} +1 -1
  46. package/dist/client/assets/{addon-web-links-CRNLzj7m.js → addon-web-links-jjt2f_oV.js} +1 -1
  47. package/dist/client/assets/{addon-webgl-CeCSULF1.js → addon-webgl-Icn-RnEx.js} +1 -1
  48. package/dist/client/assets/{app-sEkTyT-w.js → app-BmGA0Hiz.js} +3 -3
  49. package/dist/client/assets/{app-BffGU_HQ.js → app-CEVYlVuJ.js} +3 -3
  50. package/dist/client/assets/{app-C8AHhs5N.js → app-CbBFax2C.js} +3 -3
  51. package/dist/client/assets/{app-B2ZxMfJT.js → app-DORKrGAz.js} +3 -3
  52. package/dist/client/assets/{app-Ri9Te2Dv.js → app-DQibuQ9z.js} +3 -3
  53. package/dist/client/assets/app-k76GrQP0.js +13 -0
  54. package/dist/client/assets/{createLucideIcon-BYvOGRiO.js → createLucideIcon-DmVITl5d.js} +1 -1
  55. package/dist/client/assets/{dashboard-view-C3SsjXo1.js → dashboard-view-B4LXCv5H.js} +4 -4
  56. package/dist/client/assets/{dashboard-view-DlKsVySD.js → dashboard-view-BFoyhTYF.js} +1 -1
  57. package/dist/client/assets/{dashboard-view-DtgLZ_LM.js → dashboard-view-Cxzm_eqc.js} +1 -1
  58. package/dist/client/assets/dashboard-view-_8yfNwju.css +1 -0
  59. package/dist/client/assets/{folder-open-BlPyIWyf.js → folder-open-33WGVnbp.js} +1 -1
  60. package/dist/client/assets/index-Bglw05rM.js +791 -0
  61. package/dist/client/assets/index-FYgnflWD.css +1 -0
  62. package/dist/client/assets/shield-alert-CqeGWBUK.js +6 -0
  63. package/dist/client/assets/{upload-B-qmm1NH.js → upload-C11J2diI.js} +1 -1
  64. package/dist/client/assets/{users-D6C5TXf2.js → users-a-ELbyyZ.js} +1 -1
  65. package/dist/client/assets/{vendor-i18n-CV0mwX_-.js → vendor-i18n-DYlSUfot.js} +1 -1
  66. package/dist/client/assets/vendor-react-BTgM5bbZ.js +49 -0
  67. package/dist/client/assets/{vendor-reactflow-CRZcPCXF.js → vendor-reactflow-ZasuEfF9.js} +3 -3
  68. package/dist/client/assets/{vendor-xterm-tcedd2Jt.js → vendor-xterm-ea7-K05z.js} +1 -1
  69. package/dist/client/assets/{x-CqNX_9E2.js → x-PItWc-wQ.js} +1 -1
  70. package/dist/client/assets/{zoom-out-CSTHbJgD.js → zoom-out-CzlHv0Kj.js} +1 -1
  71. package/dist/client/icons/icon-192.png +0 -0
  72. package/dist/client/icons/icon-512.png +0 -0
  73. package/dist/client/index.html +6 -6
  74. package/dist/client/sw.js +1 -1
  75. package/dist/client/theme-data.css +288 -285
  76. package/dist/client/version.json +1 -1
  77. package/dist/droid-cli/package.json +1 -1
  78. package/dist/droid-cli/src/__tests__/execsync-guard.test.ts +17 -0
  79. package/dist/droid-cli/src/__tests__/process-manager.test.ts +1 -45
  80. package/dist/extension.js +4946 -820
  81. package/dist/pi-claude-cli/index.ts +47 -8
  82. package/dist/pi-claude-cli/package.json +4 -1
  83. package/dist/pi-claude-cli/src/__tests__/acp-dispatch.test.ts +80 -0
  84. package/dist/pi-claude-cli/src/__tests__/acp-driver.test.ts +423 -0
  85. package/dist/pi-claude-cli/src/__tests__/execsync-guard.test.ts +14 -0
  86. package/dist/pi-claude-cli/src/__tests__/process-manager.test.ts +1 -45
  87. package/dist/pi-claude-cli/src/__tests__/provider.test.ts +0 -1
  88. package/dist/pi-claude-cli/src/acp-driver.ts +585 -0
  89. package/dist/pi-claude-cli/src/event-bridge.ts +7 -0
  90. package/dist/pi-claude-cli/src/mcp-config.ts +29 -0
  91. package/dist/pi-claude-cli/src/process-manager.ts +6 -38
  92. package/dist/plugin-sdk/index.d.ts +5181 -5144
  93. package/dist/plugins/fusion-plugin-acp-runtime/bundled.js +263 -19
  94. package/dist/plugins/fusion-plugin-acp-runtime/package.json +1 -1
  95. package/dist/plugins/fusion-plugin-cli-printing-press/package.json +1 -1
  96. package/dist/plugins/fusion-plugin-compound-engineering/bundled.js +37 -7
  97. package/dist/plugins/fusion-plugin-compound-engineering/manifest.json +4 -4
  98. package/dist/plugins/fusion-plugin-compound-engineering/package.json +1 -1
  99. package/dist/plugins/fusion-plugin-cursor-runtime/package.json +1 -1
  100. package/dist/plugins/fusion-plugin-dependency-graph/package.json +1 -1
  101. package/dist/plugins/fusion-plugin-droid-runtime/bundled.js +1 -1
  102. package/dist/plugins/fusion-plugin-droid-runtime/package.json +1 -1
  103. package/dist/plugins/fusion-plugin-hermes-runtime/package.json +1 -1
  104. package/dist/plugins/fusion-plugin-openclaw-runtime/package.json +1 -1
  105. package/dist/plugins/fusion-plugin-paperclip-runtime/package.json +1 -1
  106. package/dist/plugins/fusion-plugin-reports/package.json +1 -1
  107. package/dist/plugins/fusion-plugin-roadmap/package.json +1 -1
  108. package/dist/plugins/fusion-plugin-whatsapp-chat/package.json +1 -1
  109. package/dist/plugins/fusion-plugin-whatsapp-chat/src/__tests__/index.test.ts +5 -1
  110. package/package.json +1 -1
  111. package/skill/fusion/references/engine-tools.md +6 -4
  112. package/dist/client/assets/AgentDetailView-DiWELtb1.css +0 -1
  113. package/dist/client/assets/AgentsView-DfznJDek.css +0 -1
  114. package/dist/client/assets/ChatView-Wz_0goif.js +0 -6
  115. package/dist/client/assets/DevServerView-DRqQpHsc.js +0 -1
  116. package/dist/client/assets/DocumentsView-hamhUcvL.js +0 -1
  117. package/dist/client/assets/ExperimentalAgentOnboardingModal-BNpveCEk.css +0 -1
  118. package/dist/client/assets/GoalsView-2QOp9DA0.js +0 -2
  119. package/dist/client/assets/GoalsView-DI66UsjT.css +0 -1
  120. package/dist/client/assets/InsightsView-C9-mqVvf.css +0 -1
  121. package/dist/client/assets/MemoryView-B082KoR-.js +0 -2
  122. package/dist/client/assets/PluginManager-UHVLvWWl.css +0 -1
  123. package/dist/client/assets/PullRequestView-WQIS0zUC.css +0 -1
  124. package/dist/client/assets/ReliabilityView-CpELpGqw.js +0 -1
  125. package/dist/client/assets/ReliabilityView-eoKBhBc4.css +0 -1
  126. package/dist/client/assets/SecretsView-D5bHZ-wM.css +0 -1
  127. package/dist/client/assets/SessionTerminal-BiigPP2l.css +0 -1
  128. package/dist/client/assets/SessionTerminal-G70Jwkzs.js +0 -2
  129. package/dist/client/assets/SettingsModal-C0M1CqOu.js +0 -31
  130. package/dist/client/assets/SettingsModal-nF_GaeeK.css +0 -1
  131. package/dist/client/assets/WorkflowNodeEditor-BTu0D9c5.js +0 -8
  132. package/dist/client/assets/WorkflowNodeEditor-BokhW3de.css +0 -1
  133. package/dist/client/assets/app-CUu1sm3x.js +0 -13
  134. package/dist/client/assets/dashboard-view-Du53JbmQ.css +0 -1
  135. package/dist/client/assets/index-DqhCiU35.css +0 -1
  136. package/dist/client/assets/index-bZCpHtGq.js +0 -793
  137. package/dist/client/assets/vendor-react-D37HfzIf.js +0 -49
@@ -420,6 +420,13 @@ export function createEventBridge(
420
420
  if (usage.input_tokens != null) output.usage.input = usage.input_tokens;
421
421
  if (usage.output_tokens != null)
422
422
  output.usage.output = usage.output_tokens;
423
+ // Cache tokens (parity with handleMessageStart) — the ACP usage path
424
+ // (OQ3) carries these too; without this they'd be silently dropped and
425
+ // cost for cached turns would be understated.
426
+ if (usage.cache_read_input_tokens != null)
427
+ output.usage.cacheRead = usage.cache_read_input_tokens;
428
+ if (usage.cache_creation_input_tokens != null)
429
+ output.usage.cacheWrite = usage.cache_creation_input_tokens;
423
430
  output.usage.totalTokens =
424
431
  output.usage.input +
425
432
  output.usage.output +
@@ -142,3 +142,32 @@ export function writeMcpConfig(
142
142
 
143
143
  return configFilePath;
144
144
  }
145
+
146
+ /** A stdio MCP server spec for ACP `session/new.mcpServers` (U11 — Route A). */
147
+ export interface AcpMcpServerSpec {
148
+ name: string;
149
+ command: string;
150
+ args: string[];
151
+ env: { name: string; value: string }[];
152
+ }
153
+
154
+ /**
155
+ * Build the ACP `mcpServers` spec for the same schema-only `custom-tools` server
156
+ * `writeMcpConfig` produces for `--mcp-config` — but as the inline ACP shape
157
+ * (`session/new.mcpServers`) instead of a config-file path (U11). Writes the
158
+ * tool-schema file and points the server at the shared `mcp-schema-server.cjs`.
159
+ * Returns `[]` when there are no custom tools (Route B read-only posture).
160
+ */
161
+ export function buildAcpMcpServers(
162
+ toolDefs: McpToolDef[],
163
+ cacheKey?: string,
164
+ ): AcpMcpServerSpec[] {
165
+ if (toolDefs.length === 0) return [];
166
+ const suffix = cacheKey ? `${process.pid}-${cacheKey}` : `${process.pid}`;
167
+ const schemaFilePath = join(tmpdir(), `pi-claude-mcp-schemas-${suffix}.json`);
168
+ writeFileSync(schemaFilePath, JSON.stringify(toolDefs));
169
+ const serverPath = join(dirname(fileURLToPath(import.meta.url)), "mcp-schema-server.cjs");
170
+ return [
171
+ { name: "custom-tools", command: "node", args: [serverPath, schemaFilePath], env: [] },
172
+ ];
173
+ }
@@ -6,7 +6,7 @@
6
6
  * Also provides startup validation for CLI presence and authentication.
7
7
  */
8
8
 
9
- import { execSync, spawn, type ChildProcess } from "node:child_process";
9
+ import { spawn, type ChildProcess } from "node:child_process";
10
10
  import { writeFileSync, unlinkSync } from "node:fs";
11
11
  import { join } from "node:path";
12
12
  import { tmpdir } from "node:os";
@@ -208,47 +208,15 @@ export function captureStderr(proc: ChildProcess): () => string {
208
208
  return () => buffer;
209
209
  }
210
210
 
211
- /**
212
- * Validate that the Claude CLI is installed and on PATH.
213
- * Throws with install instructions if not found.
214
- */
215
- export function validateCliPresence(): void {
216
- try {
217
- execSync("claude --version", { stdio: "pipe", timeout: 5000 });
218
- } catch {
219
- throw new Error(
220
- "Claude Code CLI not found. Install it: npm install -g @anthropic-ai/claude-code\n" +
221
- "Then authenticate: claude auth login",
222
- );
223
- }
224
- }
225
-
226
- /**
227
- * Validate that the Claude CLI is authenticated.
228
- * Returns false and warns if not authenticated.
229
- *
230
- * @returns true if authenticated, false otherwise
231
- */
232
- export function validateCliAuth(): boolean {
233
- try {
234
- execSync("claude auth status", { stdio: "pipe", timeout: 5000 });
235
- return true;
236
- } catch {
237
- console.warn(
238
- "[pi-claude-cli] Claude CLI is not authenticated. " +
239
- "Run 'claude auth login' to authenticate.",
240
- );
241
- return false;
242
- }
243
- }
244
-
245
211
  /**
246
212
  * Run a one-shot `claude <args>` and resolve to the exit code.
247
213
  *
248
- * Why: the sync execSync variants block the Node event loop for the duration
249
- * of a Claude CLI cold start (1–3s, occasionally longer). When pi-claude-cli's
214
+ * FNXC:CliRuntime 2026-06-15-07:35:
215
+ * Third-party CLI presence/auth probes must be non-blocking in Fusion request and session-startup paths. Use spawn-based probes here because synchronous shell probes freeze the dashboard event loop during CLI cold start.
216
+ *
217
+ * Why: a Claude CLI cold start can take 1–3s, occasionally longer. When pi-claude-cli's
250
218
  * factory is invoked from a per-request createFnAgent path (Fusion dashboard
251
- * does this on every chat send), those sync probes freeze every other request.
219
+ * does this on every chat send), sync probes freeze every other request.
252
220
  * This async variant uses spawn so the loop keeps turning while the subprocess
253
221
  * starts up.
254
222
  */