@runfusion/fusion 0.43.1 → 0.45.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 (295) hide show
  1. package/README.md +2 -1
  2. package/dist/automation-store-EKXXEE2S.js +10 -0
  3. package/dist/automation-store-PLNG3X72.js +10 -0
  4. package/dist/automation-store-RDDYZFUJ.js +10 -0
  5. package/dist/bin.js +14420 -3360
  6. package/dist/chunk-2JI3F6MG.js +948 -0
  7. package/dist/chunk-4L6CLWJC.js +8345 -0
  8. package/dist/chunk-4VNS5WPM.js +42 -0
  9. package/dist/chunk-5RGECGQL.js +1139 -0
  10. package/dist/chunk-6JDLN7IL.js +409 -0
  11. package/dist/chunk-AICJATVW.js +948 -0
  12. package/dist/chunk-AWKNRUOR.js +1148 -0
  13. package/dist/chunk-BHM3UYWS.js +4651 -0
  14. package/dist/chunk-BMUXDSBF.js +4647 -0
  15. package/dist/chunk-GETECT6V.js +353 -0
  16. package/dist/chunk-GUV4QQT3.js +1143 -0
  17. package/dist/chunk-JKQO7YYZ.js +8369 -0
  18. package/dist/chunk-LYZVU6UV.js +409 -0
  19. package/dist/chunk-MAN4WYHO.js +353 -0
  20. package/dist/chunk-MCUG2Z7M.js +4651 -0
  21. package/dist/chunk-PSDYB45U.js +948 -0
  22. package/dist/chunk-RR2HM46R.js +8345 -0
  23. package/dist/chunk-RXMQ5OMY.js +9226 -0
  24. package/dist/chunk-S2EVJUY3.js +353 -0
  25. package/dist/chunk-UXR5XZFZ.js +409 -0
  26. package/dist/client/.vite/manifest.json +1138 -340
  27. package/dist/client/assets/AgentDetailView-CgbB51Iw.css +1 -0
  28. package/dist/client/assets/AgentDetailView-DJTi6hKC.js +18 -0
  29. package/dist/client/assets/{AgentPermissionPolicyEditor-BiY1a4KR.js → AgentPermissionPolicyEditor-C5DR9dUS.js} +2 -2
  30. package/dist/client/assets/AgentsView-BNd90PSx.js +29 -0
  31. package/dist/client/assets/AgentsView-CzMa5Olf.css +1 -0
  32. package/dist/client/assets/ChatView-B7JaZCL_.js +19 -0
  33. package/dist/client/assets/ChatView-BtjkE0V7.css +1 -0
  34. package/dist/client/assets/CommandCenter-CHO21xEW.js +74 -0
  35. package/dist/client/assets/CommandCenter-Xs5Ftv8s.css +1 -0
  36. package/dist/client/assets/DevServerView-B_p91Mj_.css +1 -0
  37. package/dist/client/assets/DevServerView-H9OkT1ld.js +1 -0
  38. package/dist/client/assets/{DirectoryPicker-DTKtd8L2.css → DirectoryPicker-0rspvcMz.css} +1 -1
  39. package/dist/client/assets/DirectoryPicker-DegxT8ia.js +1 -0
  40. package/dist/client/assets/DocumentsView-kVVQYISc.js +1 -0
  41. package/dist/client/assets/EvalsView-C9-iTSat.js +1 -0
  42. package/dist/client/assets/EvalsView-CTbgPUne.css +1 -0
  43. package/dist/client/assets/ExperimentalAgentOnboardingModal-3ZEFv8sr.css +1 -0
  44. package/dist/client/assets/ExperimentalAgentOnboardingModal-DjP_xNkc.js +1 -0
  45. package/dist/client/assets/GoalsView-CUh8JBnJ.css +1 -0
  46. package/dist/client/assets/GoalsView-VoIHJJ5l.js +2 -0
  47. package/dist/client/assets/InsightsView-BIZaUcpd.js +11 -0
  48. package/dist/client/assets/InsightsView-C7yRTMPn.css +1 -0
  49. package/dist/client/assets/MemoryView-7v7rv6ns.js +2 -0
  50. package/dist/client/assets/MemoryView-CBDUr2Jy.css +1 -0
  51. package/dist/client/assets/PiExtensionsManager-CB89rV4U.js +11 -0
  52. package/dist/client/assets/PluginManager-BNSuW_R4.js +1 -0
  53. package/dist/client/assets/PluginManager-DSiHizRD.css +1 -0
  54. package/dist/client/assets/PullRequestView-CI5jdKBL.js +6 -0
  55. package/dist/client/assets/PullRequestView-CpdE3Yo_.css +1 -0
  56. package/dist/client/assets/ResearchView-BT5dR_m8.js +1 -0
  57. package/dist/client/assets/ResearchView-DIVNQF4_.css +1 -0
  58. package/dist/client/assets/SecretsView-CvFioX7R.css +1 -0
  59. package/dist/client/assets/SecretsView-WPYI58Uo.js +1 -0
  60. package/dist/client/assets/SessionTerminal-C6gyOWLt.js +2 -0
  61. package/dist/client/assets/SessionTerminal-D4R3ScvQ.css +1 -0
  62. package/dist/client/assets/SettingsModal-BESN59Ao.css +1 -0
  63. package/dist/client/assets/SettingsModal-BZokaNyx.css +1 -0
  64. package/dist/client/assets/SettingsModal-Bq_3AbaB.js +1 -0
  65. package/dist/client/assets/SettingsModal-JHACoQJe.js +21 -0
  66. package/dist/client/assets/SetupWizardModal-CrgbnR_d.js +2 -0
  67. package/dist/client/assets/ShadcnColorPicker-1icHuwhC.js +11 -0
  68. package/dist/client/assets/ShadcnColorPicker-pqVWCC5-.css +1 -0
  69. package/dist/client/assets/SkillsView-CJ8snrma.css +1 -0
  70. package/dist/client/assets/SkillsView-byuSe3e0.js +1 -0
  71. package/dist/client/assets/TodoView-CIsL_uvQ.css +1 -0
  72. package/dist/client/assets/TodoView-CQ9GjYBg.js +6 -0
  73. package/dist/client/assets/WorkflowNodeEditor-DW7sJZUX.js +8 -0
  74. package/dist/client/assets/WorkflowNodeEditor-f_XPV5Jd.css +1 -0
  75. package/dist/client/assets/{addon-fit-B4jkcKk4.js → addon-fit-C1WQXRvu.js} +1 -1
  76. package/dist/client/assets/{addon-unicode11-Cdne2Sj4.js → addon-unicode11-BVmNDUBM.js} +1 -1
  77. package/dist/client/assets/{addon-web-links-CRNLzj7m.js → addon-web-links-CkVew5xs.js} +1 -1
  78. package/dist/client/assets/{addon-webgl-CeCSULF1.js → addon-webgl-uLc0RKcC.js} +1 -1
  79. package/dist/client/assets/agentSkills-CeytXLHF.js +1 -0
  80. package/dist/client/assets/agentSkills-bQJ4X1gH.css +1 -0
  81. package/dist/client/assets/agentsOrgChartLayout-BMvyuaLA.js +1 -0
  82. package/dist/client/assets/app-3wbZ08YC.js +13 -0
  83. package/dist/client/assets/app-7-5DWLtg.js +13 -0
  84. package/dist/client/assets/app-CSvE5Noc.js +13 -0
  85. package/dist/client/assets/app-CZ2LTFce.js +13 -0
  86. package/dist/client/assets/app-Cv9xEnll.js +13 -0
  87. package/dist/client/assets/app-x_yPcO5Y.js +13 -0
  88. package/dist/client/assets/arc-cxkkNsnK.js +1 -0
  89. package/dist/client/assets/architectureDiagram-3BPJPVTR-BRI0QwDf.js +36 -0
  90. package/dist/client/assets/band-CquvqAHh.js +1 -0
  91. package/dist/client/assets/blockDiagram-GPEHLZMM-BXkN8Hv_.js +132 -0
  92. package/dist/client/assets/c4Diagram-AAUBKEIU-C_Kcokep.js +10 -0
  93. package/dist/client/assets/channel-Clzpzu32.js +1 -0
  94. package/dist/client/assets/chunk-2J33WTMH-BGeuCz9C.js +1 -0
  95. package/dist/client/assets/chunk-4BX2VUAB-DcVdctr0.js +1 -0
  96. package/dist/client/assets/chunk-55IACEB6-Dg6gDigQ.js +1 -0
  97. package/dist/client/assets/chunk-727SXJPM-B9B-vlEb.js +206 -0
  98. package/dist/client/assets/chunk-AQP2D5EJ-LrWQ-2yi.js +231 -0
  99. package/dist/client/assets/chunk-FMBD7UC4-Bnd6hAED.js +15 -0
  100. package/dist/client/assets/chunk-ND2GUHAM-nAw93UB5.js +1 -0
  101. package/dist/client/assets/chunk-QZHKN3VN-CgprKcZo.js +1 -0
  102. package/dist/client/assets/classDiagram-4FO5ZUOK-CzYHP-af.js +1 -0
  103. package/dist/client/assets/classDiagram-v2-Q7XG4LA2-CzYHP-af.js +1 -0
  104. package/dist/client/assets/common-BDp2y6CF.js +1 -0
  105. package/dist/client/assets/common-BnEo5fLN.js +1 -0
  106. package/dist/client/assets/common-Bzr_Y8h4.js +1 -0
  107. package/dist/client/assets/common-CvwyFzfv.js +1 -0
  108. package/dist/client/assets/common-CztCXRkz.js +1 -0
  109. package/dist/client/assets/common-DPe2mbb7.js +1 -0
  110. package/dist/client/assets/cose-bilkent-S5V4N54A-Bhn0g_iK.js +1 -0
  111. package/dist/client/assets/cytoscape.esm-OyMbaexL.js +331 -0
  112. package/dist/client/assets/dagre-BM42HDAG-CP4kfwqd.js +4 -0
  113. package/dist/client/assets/{dashboard-view-C3SsjXo1.js → dashboard-view-CM6Xin_H.js} +1680 -1620
  114. package/dist/client/assets/dashboard-view-DV1nEhh9.js +1 -0
  115. package/dist/client/assets/dashboard-view-D_zsA-kz.css +1 -0
  116. package/dist/client/assets/defaultLocale-DX6XiGOO.js +1 -0
  117. package/dist/client/assets/diagram-2AECGRRQ-DPhzVEUf.js +43 -0
  118. package/dist/client/assets/diagram-5GNKFQAL-8QOC3K_L.js +10 -0
  119. package/dist/client/assets/diagram-KO2AKTUF-C1twgEch.js +3 -0
  120. package/dist/client/assets/diagram-LMA3HP47-3bEegSuf.js +24 -0
  121. package/dist/client/assets/diagram-OG6HWLK6-BJ_x0rm6.js +24 -0
  122. package/dist/client/assets/erDiagram-TEJ5UH35-DNiiS5q6.js +85 -0
  123. package/dist/client/assets/flowDiagram-I6XJVG4X-DoouPklt.js +162 -0
  124. package/dist/client/assets/{folder-open-Bw1mxVfa.js → folder-open-CuUs2W7f.js} +1 -1
  125. package/dist/client/assets/ganttDiagram-6RSMTGT7-BrR6VnP5.js +292 -0
  126. package/dist/client/assets/gitGraphDiagram-PVQCEYII-BV8_J6Ee.js +106 -0
  127. package/dist/client/assets/graph--OzhPTMs.js +1 -0
  128. package/dist/client/assets/index-BZBQ_KsL.css +1 -0
  129. package/dist/client/assets/index-CZcWjLAb.js +1459 -0
  130. package/dist/client/assets/infoDiagram-5YYISTIA-DGwIIFkR.js +2 -0
  131. package/dist/client/assets/init-Dmth1JHB.js +1 -0
  132. package/dist/client/assets/ishikawaDiagram-YF4QCWOH-D5dEH4RE.js +70 -0
  133. package/dist/client/assets/journeyDiagram-JHISSGLW-BuuSWPw5.js +139 -0
  134. package/dist/client/assets/kanban-definition-UN3LZRKU-DA34uUla.js +89 -0
  135. package/dist/client/assets/katex-HP8lGamR.js +257 -0
  136. package/dist/client/assets/layout-SsrduOYp.js +1 -0
  137. package/dist/client/assets/linear-dXivciGL.js +1 -0
  138. package/dist/client/assets/mermaid.core-Ch4HatqA.js +309 -0
  139. package/dist/client/assets/mindmap-definition-RKZ34NQL-DUCG-qD3.js +96 -0
  140. package/dist/client/assets/ordinal-DILIJJjt.js +1 -0
  141. package/dist/client/assets/pieDiagram-4H26LBE5-DWvFGiLa.js +30 -0
  142. package/dist/client/assets/quadrantDiagram-W4KKPZXB-OPTVW3WT.js +7 -0
  143. package/dist/client/assets/requirementDiagram-4Y6WPE33-D7feZvlU.js +84 -0
  144. package/dist/client/assets/sankeyDiagram-5OEKKPKP-AtnSsEX1.js +40 -0
  145. package/dist/client/assets/sequenceDiagram-3UESZ5HK-BZjHUeI5.js +162 -0
  146. package/dist/client/assets/shield-alert-CzaF9ROV.js +6 -0
  147. package/dist/client/assets/stateDiagram-AJRCARHV-C8j23Pvn.js +1 -0
  148. package/dist/client/assets/stateDiagram-v2-BHNVJYJU-CiZR_S5-.js +1 -0
  149. package/dist/client/assets/step-yuy0qJer.js +1 -0
  150. package/dist/client/assets/time-DoDTxsna.js +1 -0
  151. package/dist/client/assets/timeline-definition-PNZ67QCA-DvfNz25n.js +120 -0
  152. package/dist/client/assets/{upload-BCmd-1I0.js → upload-DTsYywhN.js} +1 -1
  153. package/dist/client/assets/{users-DO_t3V1p.js → users-yAd09tKP.js} +1 -1
  154. package/dist/client/assets/{vendor-i18n-CV0mwX_-.js → vendor-i18n-GF3RlKbq.js} +2 -2
  155. package/dist/client/assets/vendor-react-SZ_qB27O.js +49 -0
  156. package/dist/client/assets/vendor-reactflow-Bg-Qjzh8.js +15 -0
  157. package/dist/client/assets/{vendor-xterm-tcedd2Jt.js → vendor-xterm-BNq00GSj.js} +1 -1
  158. package/dist/client/assets/vennDiagram-CIIHVFJN-CG2aMt3v.js +34 -0
  159. package/dist/client/assets/wardley-L42UT6IY-BnhBteen.js +173 -0
  160. package/dist/client/assets/wardleyDiagram-YWT4CUSO-DwqTzM3T.js +78 -0
  161. package/dist/client/assets/xychartDiagram-2RQKCTM6-5Cv2ZKMV.js +7 -0
  162. package/dist/client/assets/zoom-out-NWbVkreR.js +41 -0
  163. package/dist/client/icons/icon-192.png +0 -0
  164. package/dist/client/icons/icon-512.png +0 -0
  165. package/dist/client/index.html +30 -10
  166. package/dist/client/sw.js +1 -1
  167. package/dist/client/theme-data.css +3348 -469
  168. package/dist/client/version.json +1 -1
  169. package/dist/droid-cli/index.ts +56 -40
  170. package/dist/droid-cli/package.json +1 -1
  171. package/dist/droid-cli/src/__tests__/execsync-guard.test.ts +17 -0
  172. package/dist/droid-cli/src/__tests__/index.test.ts +47 -21
  173. package/dist/droid-cli/src/__tests__/process-manager.test.ts +51 -78
  174. package/dist/extension.js +9651 -1556
  175. package/dist/extract-zip-WL55Z3AU.js +2497 -0
  176. package/dist/index.min-CHQ3ABYJ.js +2926 -0
  177. package/dist/memory-dreams-7USISKVE.js +32 -0
  178. package/dist/memory-dreams-PBPISUDD.js +32 -0
  179. package/dist/memory-dreams-XNO2B2QF.js +32 -0
  180. package/dist/migration-EH2YOCYQ.js +15 -0
  181. package/dist/migration-PLGTTKL5.js +15 -0
  182. package/dist/migration-WZEZK22R.js +15 -0
  183. package/dist/pi-claude-cli/index.ts +47 -8
  184. package/dist/pi-claude-cli/package.json +4 -1
  185. package/dist/pi-claude-cli/src/__tests__/acp-dispatch.test.ts +80 -0
  186. package/dist/pi-claude-cli/src/__tests__/acp-driver.test.ts +423 -0
  187. package/dist/pi-claude-cli/src/__tests__/execsync-guard.test.ts +14 -0
  188. package/dist/pi-claude-cli/src/__tests__/process-manager.test.ts +26 -45
  189. package/dist/pi-claude-cli/src/__tests__/provider.test.ts +0 -1
  190. package/dist/pi-claude-cli/src/acp-driver.ts +585 -0
  191. package/dist/pi-claude-cli/src/event-bridge.ts +7 -0
  192. package/dist/pi-claude-cli/src/mcp-config.ts +29 -0
  193. package/dist/pi-claude-cli/src/process-manager.ts +17 -39
  194. package/dist/plugin-sdk/index.d.ts +5305 -5148
  195. package/dist/plugins/fusion-plugin-acp-runtime/bundled.js +263 -19
  196. package/dist/plugins/fusion-plugin-acp-runtime/package.json +1 -1
  197. package/dist/plugins/fusion-plugin-cli-printing-press/package.json +1 -1
  198. package/dist/plugins/fusion-plugin-compound-engineering/bundled.js +37 -7
  199. package/dist/plugins/fusion-plugin-compound-engineering/manifest.json +4 -4
  200. package/dist/plugins/fusion-plugin-compound-engineering/package.json +1 -1
  201. package/dist/plugins/fusion-plugin-cursor-runtime/package.json +1 -1
  202. package/dist/plugins/fusion-plugin-dependency-graph/package.json +1 -1
  203. package/dist/plugins/fusion-plugin-droid-runtime/bundled.js +69 -45
  204. package/dist/plugins/fusion-plugin-droid-runtime/package.json +1 -1
  205. package/dist/plugins/fusion-plugin-hermes-runtime/package.json +1 -1
  206. package/dist/plugins/fusion-plugin-openclaw-runtime/package.json +1 -1
  207. package/dist/plugins/fusion-plugin-paperclip-runtime/package.json +1 -1
  208. package/dist/plugins/fusion-plugin-reports/package.json +1 -1
  209. package/dist/plugins/fusion-plugin-roadmap/bundled.js +5 -11
  210. package/dist/plugins/fusion-plugin-roadmap/manifest.json +1 -11
  211. package/dist/plugins/fusion-plugin-roadmap/package.json +1 -1
  212. package/dist/plugins/fusion-plugin-whatsapp-chat/package.json +1 -1
  213. package/dist/plugins/fusion-plugin-whatsapp-chat/src/__tests__/index.test.ts +5 -1
  214. package/dist/routine-store-GIJ6MXWY.js +10 -0
  215. package/dist/routine-store-HTVC2PUQ.js +10 -0
  216. package/dist/routine-store-KGHZBPDF.js +10 -0
  217. package/package.json +3 -3
  218. package/skill/fusion/SKILL.md +1 -1
  219. package/skill/fusion/references/cli-commands.md +2 -1
  220. package/skill/fusion/references/engine-tools.md +6 -4
  221. package/skill/fusion/references/extension-tools.md +10 -0
  222. package/skill/fusion/references/fusion-capabilities.md +3 -1
  223. package/dist/client/assets/AgentDetailView-BGN03dyz.css +0 -1
  224. package/dist/client/assets/AgentDetailView-DKMz3r04.js +0 -18
  225. package/dist/client/assets/AgentsView-Co-k4vjh.js +0 -29
  226. package/dist/client/assets/AgentsView-DfznJDek.css +0 -1
  227. package/dist/client/assets/ChatView-BkAG99bj.js +0 -6
  228. package/dist/client/assets/ChatView-DwJAd5G1.css +0 -1
  229. package/dist/client/assets/DevServerView-C6DC0URX.js +0 -1
  230. package/dist/client/assets/DevServerView-VTQY28P7.css +0 -1
  231. package/dist/client/assets/DirectoryPicker-CkcGjyv0.js +0 -1
  232. package/dist/client/assets/DocumentsView-OCK1Vsw_.js +0 -1
  233. package/dist/client/assets/DocumentsView-WfVoTZt8.css +0 -1
  234. package/dist/client/assets/EvalsView-CUNJ1TLc.css +0 -1
  235. package/dist/client/assets/EvalsView-CUfyj5GW.js +0 -1
  236. package/dist/client/assets/ExperimentalAgentOnboardingModal-BNpveCEk.css +0 -1
  237. package/dist/client/assets/ExperimentalAgentOnboardingModal-Dau9RTU_.js +0 -499
  238. package/dist/client/assets/GoalsView-CNLTn0rX.js +0 -2
  239. package/dist/client/assets/GoalsView-DI66UsjT.css +0 -1
  240. package/dist/client/assets/InsightsView-BQPxHxKI.js +0 -11
  241. package/dist/client/assets/InsightsView-C9-mqVvf.css +0 -1
  242. package/dist/client/assets/MemoryView-D3xQIFjj.js +0 -2
  243. package/dist/client/assets/MemoryView-zaXewZzi.css +0 -1
  244. package/dist/client/assets/NodesView-7VInxyf_.css +0 -1
  245. package/dist/client/assets/NodesView-CSMvGwDU.js +0 -14
  246. package/dist/client/assets/PiExtensionsManager-BtqXF3fl.js +0 -11
  247. package/dist/client/assets/PluginManager-CSSDb3VO.js +0 -1
  248. package/dist/client/assets/PluginManager-UHVLvWWl.css +0 -1
  249. package/dist/client/assets/PullRequestView-Bjyfffdu.js +0 -6
  250. package/dist/client/assets/PullRequestView-WQIS0zUC.css +0 -1
  251. package/dist/client/assets/ReliabilityView-QKMUDebT.js +0 -1
  252. package/dist/client/assets/ReliabilityView-eoKBhBc4.css +0 -1
  253. package/dist/client/assets/ResearchView-CRU_NPho.js +0 -1
  254. package/dist/client/assets/ResearchView-DTh8FLUm.css +0 -1
  255. package/dist/client/assets/SecretsView-Bs8ySyC5.js +0 -1
  256. package/dist/client/assets/SecretsView-Djo1rahi.css +0 -1
  257. package/dist/client/assets/SessionTerminal-BiigPP2l.css +0 -1
  258. package/dist/client/assets/SessionTerminal-Dk1NgmN2.js +0 -2
  259. package/dist/client/assets/SettingsModal-DpAxDq6M.css +0 -1
  260. package/dist/client/assets/SettingsModal-JCaNvdAb.js +0 -31
  261. package/dist/client/assets/SettingsModal-Nw5cTKAK.js +0 -1
  262. package/dist/client/assets/SettingsModal-nF_GaeeK.css +0 -1
  263. package/dist/client/assets/SetupWizardModal-CE79myEy.js +0 -1
  264. package/dist/client/assets/SetupWizardModal-CIqFbkrD.css +0 -1
  265. package/dist/client/assets/SkillsView-3bhGyWs1.css +0 -1
  266. package/dist/client/assets/SkillsView-Dc8YskAX.js +0 -1
  267. package/dist/client/assets/StashRecoveryView-B_8WIQEo.css +0 -1
  268. package/dist/client/assets/StashRecoveryView-CqKOFiXT.js +0 -1
  269. package/dist/client/assets/TodoView-7xIh-Fmi.css +0 -1
  270. package/dist/client/assets/TodoView-BqIRwcZw.js +0 -6
  271. package/dist/client/assets/WorkflowNodeEditor-2jDuk2FR.js +0 -8
  272. package/dist/client/assets/WorkflowNodeEditor-BokhW3de.css +0 -1
  273. package/dist/client/assets/app-B2ZxMfJT.js +0 -13
  274. package/dist/client/assets/app-BffGU_HQ.js +0 -13
  275. package/dist/client/assets/app-C8AHhs5N.js +0 -13
  276. package/dist/client/assets/app-CUu1sm3x.js +0 -13
  277. package/dist/client/assets/app-Ri9Te2Dv.js +0 -13
  278. package/dist/client/assets/app-sEkTyT-w.js +0 -13
  279. package/dist/client/assets/common-BRyX4VxB.js +0 -1
  280. package/dist/client/assets/common-CN9QPI2d.js +0 -1
  281. package/dist/client/assets/common-CNbjPELi.js +0 -1
  282. package/dist/client/assets/common-DFDqu_n0.js +0 -1
  283. package/dist/client/assets/common-DgWWKG8Z.js +0 -1
  284. package/dist/client/assets/common-X6PzBnVA.js +0 -1
  285. package/dist/client/assets/createLucideIcon-BYvOGRiO.js +0 -21
  286. package/dist/client/assets/dashboard-view-BhbN8LPh.js +0 -1
  287. package/dist/client/assets/dashboard-view-DdGlfuu-.css +0 -1
  288. package/dist/client/assets/dashboard-view-DlKsVySD.js +0 -3
  289. package/dist/client/assets/dashboard-view-Du53JbmQ.css +0 -1
  290. package/dist/client/assets/index-CpTBp1RG.js +0 -793
  291. package/dist/client/assets/index-DqhCiU35.css +0 -1
  292. package/dist/client/assets/vendor-react-D37HfzIf.js +0 -49
  293. package/dist/client/assets/vendor-reactflow-CRZcPCXF.js +0 -15
  294. package/dist/client/assets/x-CqNX_9E2.js +0 -61
  295. package/dist/client/assets/zoom-out-CSTHbJgD.js +0 -21
@@ -1 +1 @@
1
- {"version":"f7635faf3-7ebf82ef"}
1
+ {"version":"192a2f2e9-7a1b1370"}
@@ -24,31 +24,27 @@ type StreamSimpleHandler = NonNullable<Parameters<ExtensionAPI["registerProvider
24
24
  function runCliValidationOnce(): Promise<void> {
25
25
  if (cliValidationPromise) return cliValidationPromise;
26
26
  cliValidationPromise = (async () => {
27
- const presence = await validateCliPresenceAsync();
28
- if (!presence.ok) {
29
- console.warn(`[droid-cli] ${presence.error.message}`);
30
- return;
27
+ try {
28
+ const presence = await validateCliPresenceAsync();
29
+ if (!presence.ok) {
30
+ console.warn(`[droid-cli] ${presence.error.message}`);
31
+ return;
32
+ }
33
+ await validateCliAuthAsync();
34
+ } catch (error) {
35
+ console.warn("[droid-cli] CLI validation failed; continuing without blocking the session", error);
31
36
  }
32
- await validateCliAuthAsync();
33
37
  })();
34
38
  return cliValidationPromise;
35
39
  }
36
40
 
37
- async function getDiscoveredModels() {
41
+ export async function discoverDroidProviderModels() {
38
42
  if (!discoveredModelsPromise) {
39
43
  discoveredModelsPromise = (async () => {
40
44
  try {
41
45
  const ids = Array.from(new Set(await discoverDroidModels()));
42
46
  if (ids.length === 0) return [];
43
- return ids.map((id) => ({
44
- id,
45
- name: id,
46
- reasoning: true,
47
- input: ["text", "image"] as Array<"text" | "image">,
48
- cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },
49
- contextWindow: 200_000,
50
- maxTokens: 8_192,
51
- }));
47
+ return toProviderModels(ids);
52
48
  } catch (error) {
53
49
  console.warn("[droid-cli] model auto-discovery failed; registering provider with empty model list", error);
54
50
  return [];
@@ -60,6 +56,18 @@ async function getDiscoveredModels() {
60
56
 
61
57
  let cachedMcpConfig: { hash: string; configPath: string } | undefined;
62
58
 
59
+ function toProviderModels(ids: string[]): DiscoveredModel[] {
60
+ return ids.map((id) => ({
61
+ id,
62
+ name: id,
63
+ reasoning: true,
64
+ input: ["text", "image"] as Array<"text" | "image">,
65
+ cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },
66
+ contextWindow: 200_000,
67
+ maxTokens: 8_192,
68
+ }));
69
+ }
70
+
63
71
  function ensureMcpConfig(
64
72
  pi: ExtensionAPI,
65
73
  contextTools?: ReadonlyArray<{
@@ -93,8 +101,35 @@ function ensureMcpConfig(
93
101
  }
94
102
  }
95
103
 
104
+ function registerDroidProvider(pi: ExtensionAPI, models: DiscoveredModel[]) {
105
+ pi.registerProvider(PROVIDER_ID, {
106
+ baseUrl: "droid-cli",
107
+ apiKey: "unused",
108
+ api: "droid-cli",
109
+ models,
110
+ streamSimple: ((model, context, options) => {
111
+ void runCliValidationOnce();
112
+ const configPath = ensureMcpConfig(
113
+ pi,
114
+ (context as { tools?: ReadonlyArray<{ name: string; description: string; parameters: Record<string, unknown> }> }).tools,
115
+ );
116
+ return streamViaCli(
117
+ model,
118
+ context as never,
119
+ { ...(options ?? {}), mcpConfigPath: configPath } as never,
120
+ ) as unknown as ReturnType<StreamSimpleHandler>;
121
+ }) as StreamSimpleHandler,
122
+ });
123
+ }
124
+
96
125
  export default function (pi: ExtensionAPI) {
97
- void runCliValidationOnce();
126
+ /*
127
+ FNXC:CliRuntime 2026-06-21-18:43:
128
+ Engine and dashboard startup must not start the local Droid CLI merely because the optional extension loaded. Register the provider synchronously with an empty model list, defer validation until an actual droid stream starts, and leave model discovery to explicit picker/status callers so boot with `useDroidCli` enabled still performs zero `droid` spawns.
129
+
130
+ FNXC:CliRuntime 2026-06-21-12:00:
131
+ Engine and dashboard startup must not wait for local Droid CLI probes. Every surviving validation/discovery helper remains fire-and-forget, bounded, non-interactive, and resolve-only so a missing or wedged `droid` binary cannot stall extension loading or a session start.
132
+ */
98
133
 
99
134
  pi.on("session_start", async () => {
100
135
  const allTools = pi.getAllTools();
@@ -103,28 +138,9 @@ export default function (pi: ExtensionAPI) {
103
138
  }
104
139
  });
105
140
 
106
- void (async () => {
107
- const models = await getDiscoveredModels();
108
- try {
109
- pi.registerProvider(PROVIDER_ID, {
110
- baseUrl: "droid-cli",
111
- apiKey: "unused",
112
- api: "droid-cli",
113
- models,
114
- streamSimple: ((model, context, options) => {
115
- const configPath = ensureMcpConfig(
116
- pi,
117
- (context as { tools?: ReadonlyArray<{ name: string; description: string; parameters: Record<string, unknown> }> }).tools,
118
- );
119
- return streamViaCli(
120
- model,
121
- context as never,
122
- { ...(options ?? {}), mcpConfigPath: configPath } as never,
123
- ) as unknown as ReturnType<StreamSimpleHandler>;
124
- }) as StreamSimpleHandler,
125
- });
126
- } catch (err) {
127
- console.error("[droid-cli] Failed to register provider:", err);
128
- }
129
- })();
141
+ try {
142
+ registerDroidProvider(pi, []);
143
+ } catch (err) {
144
+ console.error("[droid-cli] Failed to register provider:", err);
145
+ }
130
146
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fusion/droid-cli",
3
- "version": "0.11.32",
3
+ "version": "0.11.34",
4
4
  "description": "First-party Fusion pi extension that routes LLM calls through the Droid CLI subprocess.",
5
5
  "license": "MIT",
6
6
  "private": true,
@@ -0,0 +1,17 @@
1
+ import { existsSync, readFileSync } from "node:fs";
2
+ import path from "node:path";
3
+ import { describe, expect, it } from "vitest";
4
+
5
+ describe("process-manager execSync guard", () => {
6
+ it("keeps Droid CLI probing non-blocking", () => {
7
+ const sourcePath = path.resolve(
8
+ import.meta.dirname,
9
+ "../../../../plugins/fusion-plugin-droid-runtime/src/process-manager.ts",
10
+ );
11
+
12
+ expect(existsSync(sourcePath)).toBe(true);
13
+ const src = readFileSync(sourcePath, "utf-8");
14
+
15
+ expect(/\bexecSync\b/.test(src)).toBe(false);
16
+ });
17
+ });
@@ -58,7 +58,7 @@ describe("droid-cli extension entrypoint", () => {
58
58
  vi.restoreAllMocks();
59
59
  });
60
60
 
61
- it("registers provider droid-cli with discovered model mapping and streamSimple", async () => {
61
+ it("registers provider droid-cli synchronously without starting droid probes or discovery", async () => {
62
62
  const registerProvider = vi.fn();
63
63
  const mockPi = {
64
64
  registerProvider,
@@ -68,19 +68,20 @@ describe("droid-cli extension entrypoint", () => {
68
68
  };
69
69
 
70
70
  const mod = await import("../../index");
71
- mod.default(mockPi as never);
71
+ const result = mod.default(mockPi as never);
72
72
  await flushAsyncRegistration();
73
73
 
74
- expect(runtimeMocks.validateCliPresenceAsync).toHaveBeenCalledTimes(1);
75
- expect(runtimeMocks.validateCliAuthAsync).toHaveBeenCalledTimes(1);
76
- expect(runtimeMocks.discoverDroidModels).toHaveBeenCalledTimes(1);
74
+ expect(result).toBeUndefined();
75
+ expect(runtimeMocks.validateCliPresenceAsync).not.toHaveBeenCalled();
76
+ expect(runtimeMocks.validateCliAuthAsync).not.toHaveBeenCalled();
77
+ expect(runtimeMocks.discoverDroidModels).not.toHaveBeenCalled();
77
78
 
78
79
  expect(registerProvider).toHaveBeenCalledTimes(1);
79
80
  const [providerId, config] = registerProvider.mock.calls[0] as [string, {
80
81
  baseUrl: string;
81
82
  api: string;
82
83
  apiKey: string;
83
- models: Array<{ id: string; name: string; contextWindow: number; maxTokens: number }>;
84
+ models: unknown[];
84
85
  streamSimple: Function;
85
86
  }];
86
87
 
@@ -88,11 +89,43 @@ describe("droid-cli extension entrypoint", () => {
88
89
  expect(config.baseUrl).toBe("droid-cli");
89
90
  expect(config.api).toBe("droid-cli");
90
91
  expect(config.apiKey).toBe("unused");
91
- expect(config.models).toEqual([
92
+ expect(config.models).toEqual([]);
93
+ expect(typeof config.streamSimple).toBe("function");
94
+ });
95
+
96
+ it("runs validation once when a droid stream is actually used", async () => {
97
+ const registerProvider = vi.fn();
98
+ const mockPi = {
99
+ registerProvider,
100
+ on: vi.fn(),
101
+ getAllTools: vi.fn(() => []),
102
+ setActiveTools: vi.fn(),
103
+ };
104
+
105
+ const mod = await import("../../index");
106
+ mod.default(mockPi as never);
107
+ const config = registerProvider.mock.calls[0]?.[1] as {
108
+ streamSimple: (model: unknown, context: unknown, options?: Record<string, unknown>) => unknown;
109
+ };
110
+
111
+ config.streamSimple({ id: "droid-pro" }, { messages: [] }, {});
112
+ config.streamSimple({ id: "droid-pro" }, { messages: [] }, {});
113
+ await flushAsyncRegistration();
114
+
115
+ expect(runtimeMocks.validateCliPresenceAsync).toHaveBeenCalledTimes(1);
116
+ expect(runtimeMocks.validateCliAuthAsync).toHaveBeenCalledTimes(1);
117
+ expect(runtimeMocks.discoverDroidModels).not.toHaveBeenCalled();
118
+ });
119
+
120
+ it("discovers provider models only when explicitly requested", async () => {
121
+ const mod = await import("../../index");
122
+
123
+ await expect(mod.discoverDroidProviderModels()).resolves.toEqual([
92
124
  expect.objectContaining({ id: "droid-pro", name: "droid-pro", contextWindow: 200_000, maxTokens: 8_192 }),
93
125
  expect.objectContaining({ id: "droid-max", name: "droid-max", contextWindow: 200_000, maxTokens: 8_192 }),
94
126
  ]);
95
- expect(typeof config.streamSimple).toBe("function");
127
+
128
+ expect(runtimeMocks.discoverDroidModels).toHaveBeenCalledTimes(1);
96
129
  });
97
130
 
98
131
  it("activates all registered tools on session_start", async () => {
@@ -132,31 +165,24 @@ describe("droid-cli extension entrypoint", () => {
132
165
 
133
166
  const mod = await import("../../index");
134
167
  mod.default(mockPi as never);
168
+ const config = mockPi.registerProvider.mock.calls[0]?.[1] as {
169
+ streamSimple: (model: unknown, context: unknown, options?: Record<string, unknown>) => unknown;
170
+ };
171
+ config.streamSimple({ id: "droid-pro" }, { messages: [] }, {});
135
172
  await flushAsyncRegistration();
136
173
 
137
174
  expect(warnSpy).toHaveBeenCalledWith("[droid-cli] droid CLI missing");
138
175
  expect(runtimeMocks.validateCliAuthAsync).not.toHaveBeenCalled();
139
- expect(mockPi.registerProvider).toHaveBeenCalledTimes(1);
176
+ expect(mockPi.registerProvider).toHaveBeenCalledWith("droid-cli", expect.objectContaining({ models: [] }));
140
177
  });
141
178
 
142
179
  it("falls back to empty models when discovery throws", async () => {
143
180
  const warnSpy = vi.spyOn(console, "warn").mockImplementation(() => {});
144
181
  runtimeMocks.discoverDroidModels.mockRejectedValue(new Error("boom"));
145
182
 
146
- const registerProvider = vi.fn();
147
- const mockPi = {
148
- registerProvider,
149
- on: vi.fn(),
150
- getAllTools: vi.fn(() => []),
151
- setActiveTools: vi.fn(),
152
- };
153
-
154
183
  const mod = await import("../../index");
155
- mod.default(mockPi as never);
156
- await flushAsyncRegistration();
184
+ await expect(mod.discoverDroidProviderModels()).resolves.toEqual([]);
157
185
 
158
- const config = registerProvider.mock.calls[0]?.[1] as { models: unknown[] };
159
- expect(config.models).toEqual([]);
160
186
  expect(warnSpy).toHaveBeenCalledWith(
161
187
  "[droid-cli] model auto-discovery failed; registering provider with empty model list",
162
188
  expect.any(Error),
@@ -16,7 +16,6 @@ vi.mock("node:child_process", () => ({
16
16
  proc.pid = 12345;
17
17
  return proc;
18
18
  }),
19
- execSync: vi.fn(),
20
19
  }));
21
20
 
22
21
  const mocks = vi.hoisted(() => ({
@@ -38,15 +37,13 @@ vi.mock("node:os", () => ({
38
37
  tmpdir: mocks.tmpdir,
39
38
  }));
40
39
 
41
- import { spawn, execSync } from "node:child_process";
40
+ import { spawn } from "node:child_process";
42
41
  import {
43
42
  spawnDroid,
44
43
  buildDroidSpawnArgs,
45
44
  writeUserMessage,
46
45
  cleanupProcess,
47
46
  captureStderr,
48
- validateCliPresence,
49
- validateCliAuth,
50
47
  validateCliPresenceAsync,
51
48
  validateCliAuthAsync,
52
49
  forceKillProcess,
@@ -369,47 +366,6 @@ describe("captureStderr", () => {
369
366
  });
370
367
  });
371
368
 
372
- describe("validateCliPresence", () => {
373
- it("does not throw when droid --version succeeds", () => {
374
- (execSync as any).mockReturnValue(Buffer.from("1.0.0"));
375
- expect(() => validateCliPresence()).not.toThrow();
376
- });
377
-
378
- it("throws with install instructions when droid --version fails", () => {
379
- (execSync as any).mockImplementation(() => {
380
- throw new Error("command not found");
381
- });
382
-
383
- expect(() => validateCliPresence()).toThrow();
384
- try {
385
- validateCliPresence();
386
- } catch (e: any) {
387
- expect(e.message).toContain("Droid CLI not found");
388
- expect(e.message).toContain("Install Droid CLI");
389
- }
390
- });
391
- });
392
-
393
- describe("validateCliAuth", () => {
394
- it("returns true when droid auth status succeeds", () => {
395
- (execSync as any).mockReturnValue(Buffer.from("Logged in"));
396
- expect(validateCliAuth()).toBe(true);
397
- });
398
-
399
- it("returns false and warns when droid auth status fails", () => {
400
- (execSync as any).mockImplementation(() => {
401
- throw new Error("not authenticated");
402
- });
403
- const warnSpy = vi.spyOn(console, "warn").mockImplementation(() => {});
404
-
405
- expect(validateCliAuth()).toBe(false);
406
- expect(warnSpy).toHaveBeenCalledWith(
407
- expect.stringContaining("not authenticated"),
408
- );
409
- warnSpy.mockRestore();
410
- });
411
- });
412
-
413
369
  describe("validateCliPresenceAsync", () => {
414
370
  beforeEach(() => {
415
371
  vi.clearAllMocks();
@@ -459,6 +415,16 @@ describe("validateCliPresenceAsync", () => {
459
415
  const result = await validateCliPresenceAsync();
460
416
  expect(result.ok).toBe(false);
461
417
  });
418
+
419
+ it("resolves ok=false instead of rejecting when droid spawn throws synchronously", async () => {
420
+ (spawn as any).mockImplementationOnce(() => {
421
+ throw new Error("Real AI CLI launch blocked during tests: droid --version");
422
+ });
423
+
424
+ await expect(validateCliPresenceAsync()).resolves.toMatchObject({
425
+ ok: false,
426
+ });
427
+ });
462
428
  });
463
429
 
464
430
  describe("validateCliAuthAsync", () => {
@@ -496,6 +462,21 @@ describe("validateCliAuthAsync", () => {
496
462
  );
497
463
  warnSpy.mockRestore();
498
464
  });
465
+
466
+ it("resolves false instead of rejecting when droid auth spawn throws synchronously", async () => {
467
+ (spawn as any).mockImplementationOnce(() => {
468
+ throw new Error(
469
+ "Real AI CLI launch blocked during tests: droid auth status",
470
+ );
471
+ });
472
+ const warnSpy = vi.spyOn(console, "warn").mockImplementation(() => {});
473
+
474
+ await expect(validateCliAuthAsync()).resolves.toBe(false);
475
+ expect(warnSpy).toHaveBeenCalledWith(
476
+ expect.stringContaining("not authenticated"),
477
+ );
478
+ warnSpy.mockRestore();
479
+ });
499
480
  });
500
481
 
501
482
  describe("CLI flags", () => {
@@ -767,52 +748,44 @@ describe("discoverDroidModels", () => {
767
748
  vi.clearAllMocks();
768
749
  });
769
750
 
770
- it("parses model ids from JSON output", async () => {
751
+ it("parses model ids from droid exec --help output", async () => {
771
752
  (spawn as any).mockImplementationOnce(() => {
772
753
  const EventEmitter = require("node:events");
773
754
  const proc = new EventEmitter();
774
755
  proc.stdout = new EventEmitter();
775
756
  proc.stderr = new EventEmitter();
776
757
  setTimeout(() => {
777
- proc.stdout.emit("data", Buffer.from('[{"id":"droid-pro"},{"name":"droid-max"}]'));
758
+ proc.stdout.emit("data", Buffer.from(`Usage: droid exec [options] [prompt]
759
+
760
+ Available Models:
761
+ droid-pro Droid Pro
762
+ droid-max Droid Max
763
+
764
+ Model details:
765
+ - Droid Pro: prose, not a model id
766
+ `));
778
767
  proc.emit("exit", 0);
779
768
  }, 0);
780
769
  return proc;
781
770
  });
782
771
 
783
772
  await expect(discoverDroidModels()).resolves.toEqual(["droid-pro", "droid-max"]);
773
+ expect(spawn).toHaveBeenCalledWith("droid", ["exec", "--help"], expect.anything());
784
774
  });
785
775
 
786
- it("falls back across attempts and parses newline output", async () => {
787
- (spawn as any)
788
- .mockImplementationOnce(() => {
789
- const EventEmitter = require("node:events");
790
- const proc = new EventEmitter();
791
- proc.stdout = new EventEmitter();
792
- proc.stderr = new EventEmitter();
793
- setTimeout(() => proc.emit("exit", 1), 0);
794
- return proc;
795
- })
796
- .mockImplementationOnce(() => {
797
- const EventEmitter = require("node:events");
798
- const proc = new EventEmitter();
799
- proc.stdout = new EventEmitter();
800
- proc.stderr = new EventEmitter();
801
- setTimeout(() => proc.emit("exit", 1), 0);
802
- return proc;
803
- })
804
- .mockImplementationOnce(() => {
805
- const EventEmitter = require("node:events");
806
- const proc = new EventEmitter();
807
- proc.stdout = new EventEmitter();
808
- proc.stderr = new EventEmitter();
809
- setTimeout(() => {
810
- proc.stdout.emit("data", Buffer.from("droid-lite\ndroid-lite\ndroid-pro\n"));
811
- proc.emit("exit", 0);
812
- }, 0);
813
- return proc;
814
- });
815
-
816
- await expect(discoverDroidModels()).resolves.toEqual(["droid-lite", "droid-pro"]);
776
+ it("returns [] when droid exec --help exits without a model section", async () => {
777
+ (spawn as any).mockImplementationOnce(() => {
778
+ const EventEmitter = require("node:events");
779
+ const proc = new EventEmitter();
780
+ proc.stdout = new EventEmitter();
781
+ proc.stderr = new EventEmitter();
782
+ setTimeout(() => {
783
+ proc.stdout.emit("data", Buffer.from("Usage: droid exec\n\nOptions:\n --help\n"));
784
+ proc.emit("exit", 0);
785
+ }, 0);
786
+ return proc;
787
+ });
788
+
789
+ await expect(discoverDroidModels()).resolves.toEqual([]);
817
790
  });
818
791
  });