@runfusion/fusion 0.43.1 → 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.
- package/dist/automation-store-EKXXEE2S.js +10 -0
- package/dist/automation-store-PLNG3X72.js +10 -0
- package/dist/automation-store-RDDYZFUJ.js +10 -0
- package/dist/bin.js +8097 -1796
- package/dist/chunk-2JI3F6MG.js +948 -0
- package/dist/chunk-4L6CLWJC.js +8345 -0
- package/dist/chunk-4VNS5WPM.js +42 -0
- package/dist/chunk-5RGECGQL.js +1139 -0
- package/dist/chunk-6JDLN7IL.js +409 -0
- package/dist/chunk-AICJATVW.js +948 -0
- package/dist/chunk-AWKNRUOR.js +1148 -0
- package/dist/chunk-BHM3UYWS.js +4651 -0
- package/dist/chunk-BMUXDSBF.js +4647 -0
- package/dist/chunk-GETECT6V.js +353 -0
- package/dist/chunk-GUV4QQT3.js +1143 -0
- package/dist/chunk-JKQO7YYZ.js +8369 -0
- package/dist/chunk-LYZVU6UV.js +409 -0
- package/dist/chunk-MAN4WYHO.js +353 -0
- package/dist/chunk-MCUG2Z7M.js +4651 -0
- package/dist/chunk-PSDYB45U.js +948 -0
- package/dist/chunk-RR2HM46R.js +8345 -0
- package/dist/chunk-RXMQ5OMY.js +9226 -0
- package/dist/chunk-S2EVJUY3.js +353 -0
- package/dist/chunk-UXR5XZFZ.js +409 -0
- package/dist/client/.vite/manifest.json +272 -261
- package/dist/client/assets/{AgentDetailView-BGN03dyz.css → AgentDetailView-CanIeYHg.css} +1 -1
- package/dist/client/assets/{AgentDetailView-DKMz3r04.js → AgentDetailView-DxV8pFHX.js} +3 -3
- package/dist/client/assets/{AgentPermissionPolicyEditor-BiY1a4KR.js → AgentPermissionPolicyEditor--YS4iMUY.js} +2 -2
- package/dist/client/assets/AgentsView-BVILQjdS.css +1 -0
- package/dist/client/assets/{AgentsView-Co-k4vjh.js → AgentsView-CTzbcvhK.js} +3 -3
- package/dist/client/assets/ChatView-COygcnyk.js +6 -0
- package/dist/client/assets/CommandCenter-CTaopaC0.css +1 -0
- package/dist/client/assets/CommandCenter-DoKX2HWm.js +56 -0
- package/dist/client/assets/DevServerView-Cyevyvqx.js +1 -0
- package/dist/client/assets/{DirectoryPicker-DTKtd8L2.css → DirectoryPicker-0rspvcMz.css} +1 -1
- package/dist/client/assets/{DirectoryPicker-CkcGjyv0.js → DirectoryPicker-DBdyXEhR.js} +1 -1
- package/dist/client/assets/DocumentsView-BzSMyrns.js +1 -0
- package/dist/client/assets/{EvalsView-CUfyj5GW.js → EvalsView-ikz00o9g.js} +1 -1
- package/dist/client/assets/ExperimentalAgentOnboardingModal-CZ_jbgep.css +1 -0
- package/dist/client/assets/{ExperimentalAgentOnboardingModal-Dau9RTU_.js → ExperimentalAgentOnboardingModal-D-rzCCET.js} +10 -10
- package/dist/client/assets/GoalsView-Bfu1Oy2-.js +2 -0
- package/dist/client/assets/GoalsView-rg9VSIza.css +1 -0
- package/dist/client/assets/{InsightsView-BQPxHxKI.js → InsightsView-Cgmf5nES.js} +1 -1
- package/dist/client/assets/InsightsView-LMv1M1dU.css +1 -0
- package/dist/client/assets/MemoryView-DkEuDKQs.js +2 -0
- package/dist/client/assets/{NodesView-CSMvGwDU.js → NodesView-B_KYfS4o.js} +3 -3
- package/dist/client/assets/{PiExtensionsManager-BtqXF3fl.js → PiExtensionsManager-Dz69kkKs.js} +2 -2
- package/dist/client/assets/PluginManager-DSiHizRD.css +1 -0
- package/dist/client/assets/{PluginManager-CSSDb3VO.js → PluginManager-LHCVcduP.js} +1 -1
- package/dist/client/assets/PullRequestView-3AdbS2a1.css +1 -0
- package/dist/client/assets/{PullRequestView-Bjyfffdu.js → PullRequestView-DBJutLLl.js} +2 -2
- package/dist/client/assets/{ResearchView-CRU_NPho.js → ResearchView-gpn1XcVy.js} +1 -1
- package/dist/client/assets/{SecretsView-Bs8ySyC5.js → SecretsView-B7YqIowt.js} +1 -1
- package/dist/client/assets/SessionTerminal-9l4bdKcn.js +2 -0
- package/dist/client/assets/SessionTerminal-BNgtmXb3.css +1 -0
- package/dist/client/assets/SettingsModal-BGEK9_9A.js +31 -0
- package/dist/client/assets/{SettingsModal-DpAxDq6M.css → SettingsModal-CKv0TJfM.css} +1 -1
- package/dist/client/assets/SettingsModal-CXogw-Er.css +1 -0
- package/dist/client/assets/{SettingsModal-Nw5cTKAK.js → SettingsModal-DIIoHGUH.js} +1 -1
- package/dist/client/assets/{SetupWizardModal-CE79myEy.js → SetupWizardModal-BcVeMxeX.js} +1 -1
- package/dist/client/assets/{SkillsView-Dc8YskAX.js → SkillsView-BxSJ4PHL.js} +1 -1
- package/dist/client/assets/{StashRecoveryView-CqKOFiXT.js → StashRecoveryView-BhFQ2FsP.js} +1 -1
- package/dist/client/assets/{TodoView-BqIRwcZw.js → TodoView-BZpewjy0.js} +2 -2
- package/dist/client/assets/WorkflowNodeEditor-Yn1FRF2v.css +1 -0
- package/dist/client/assets/WorkflowNodeEditor-tWsgCdVt.js +8 -0
- package/dist/client/assets/{addon-fit-B4jkcKk4.js → addon-fit-SnYDEvGm.js} +1 -1
- package/dist/client/assets/{addon-unicode11-Cdne2Sj4.js → addon-unicode11-s5GoZCpi.js} +1 -1
- package/dist/client/assets/{addon-web-links-CRNLzj7m.js → addon-web-links-jjt2f_oV.js} +1 -1
- package/dist/client/assets/{addon-webgl-CeCSULF1.js → addon-webgl-Icn-RnEx.js} +1 -1
- package/dist/client/assets/{app-sEkTyT-w.js → app-BmGA0Hiz.js} +3 -3
- package/dist/client/assets/{app-BffGU_HQ.js → app-CEVYlVuJ.js} +3 -3
- package/dist/client/assets/{app-C8AHhs5N.js → app-CbBFax2C.js} +3 -3
- package/dist/client/assets/{app-B2ZxMfJT.js → app-DORKrGAz.js} +3 -3
- package/dist/client/assets/{app-Ri9Te2Dv.js → app-DQibuQ9z.js} +3 -3
- package/dist/client/assets/app-k76GrQP0.js +13 -0
- package/dist/client/assets/{createLucideIcon-BYvOGRiO.js → createLucideIcon-DmVITl5d.js} +1 -1
- package/dist/client/assets/{dashboard-view-C3SsjXo1.js → dashboard-view-B4LXCv5H.js} +4 -4
- package/dist/client/assets/{dashboard-view-DlKsVySD.js → dashboard-view-BFoyhTYF.js} +1 -1
- package/dist/client/assets/{dashboard-view-BhbN8LPh.js → dashboard-view-Cxzm_eqc.js} +1 -1
- package/dist/client/assets/dashboard-view-_8yfNwju.css +1 -0
- package/dist/client/assets/{folder-open-Bw1mxVfa.js → folder-open-33WGVnbp.js} +1 -1
- package/dist/client/assets/index-Bglw05rM.js +791 -0
- package/dist/client/assets/index-FYgnflWD.css +1 -0
- package/dist/client/assets/shield-alert-CqeGWBUK.js +6 -0
- package/dist/client/assets/{upload-BCmd-1I0.js → upload-C11J2diI.js} +1 -1
- package/dist/client/assets/{users-DO_t3V1p.js → users-a-ELbyyZ.js} +1 -1
- package/dist/client/assets/{vendor-i18n-CV0mwX_-.js → vendor-i18n-DYlSUfot.js} +1 -1
- package/dist/client/assets/vendor-react-BTgM5bbZ.js +49 -0
- package/dist/client/assets/{vendor-reactflow-CRZcPCXF.js → vendor-reactflow-ZasuEfF9.js} +3 -3
- package/dist/client/assets/{vendor-xterm-tcedd2Jt.js → vendor-xterm-ea7-K05z.js} +1 -1
- package/dist/client/assets/{x-CqNX_9E2.js → x-PItWc-wQ.js} +1 -1
- package/dist/client/assets/{zoom-out-CSTHbJgD.js → zoom-out-CzlHv0Kj.js} +1 -1
- package/dist/client/icons/icon-192.png +0 -0
- package/dist/client/icons/icon-512.png +0 -0
- package/dist/client/index.html +6 -6
- package/dist/client/sw.js +1 -1
- package/dist/client/theme-data.css +288 -285
- package/dist/client/version.json +1 -1
- package/dist/droid-cli/package.json +1 -1
- package/dist/droid-cli/src/__tests__/execsync-guard.test.ts +17 -0
- package/dist/droid-cli/src/__tests__/process-manager.test.ts +1 -45
- package/dist/extension.js +4780 -793
- package/dist/extract-zip-WL55Z3AU.js +2497 -0
- package/dist/index.min-CHQ3ABYJ.js +2926 -0
- package/dist/memory-dreams-7USISKVE.js +32 -0
- package/dist/memory-dreams-PBPISUDD.js +32 -0
- package/dist/memory-dreams-XNO2B2QF.js +32 -0
- package/dist/migration-EH2YOCYQ.js +15 -0
- package/dist/migration-PLGTTKL5.js +15 -0
- package/dist/migration-WZEZK22R.js +15 -0
- package/dist/pi-claude-cli/index.ts +47 -8
- package/dist/pi-claude-cli/package.json +4 -1
- package/dist/pi-claude-cli/src/__tests__/acp-dispatch.test.ts +80 -0
- package/dist/pi-claude-cli/src/__tests__/acp-driver.test.ts +423 -0
- package/dist/pi-claude-cli/src/__tests__/execsync-guard.test.ts +14 -0
- package/dist/pi-claude-cli/src/__tests__/process-manager.test.ts +1 -45
- package/dist/pi-claude-cli/src/__tests__/provider.test.ts +0 -1
- package/dist/pi-claude-cli/src/acp-driver.ts +585 -0
- package/dist/pi-claude-cli/src/event-bridge.ts +7 -0
- package/dist/pi-claude-cli/src/mcp-config.ts +29 -0
- package/dist/pi-claude-cli/src/process-manager.ts +6 -38
- package/dist/plugin-sdk/index.d.ts +5179 -5144
- package/dist/plugins/fusion-plugin-acp-runtime/bundled.js +263 -19
- package/dist/plugins/fusion-plugin-acp-runtime/package.json +1 -1
- package/dist/plugins/fusion-plugin-cli-printing-press/package.json +1 -1
- package/dist/plugins/fusion-plugin-compound-engineering/bundled.js +37 -7
- package/dist/plugins/fusion-plugin-compound-engineering/manifest.json +4 -4
- package/dist/plugins/fusion-plugin-compound-engineering/package.json +1 -1
- package/dist/plugins/fusion-plugin-cursor-runtime/package.json +1 -1
- package/dist/plugins/fusion-plugin-dependency-graph/package.json +1 -1
- package/dist/plugins/fusion-plugin-droid-runtime/bundled.js +1 -1
- package/dist/plugins/fusion-plugin-droid-runtime/package.json +1 -1
- package/dist/plugins/fusion-plugin-hermes-runtime/package.json +1 -1
- package/dist/plugins/fusion-plugin-openclaw-runtime/package.json +1 -1
- package/dist/plugins/fusion-plugin-paperclip-runtime/package.json +1 -1
- package/dist/plugins/fusion-plugin-reports/package.json +1 -1
- package/dist/plugins/fusion-plugin-roadmap/package.json +1 -1
- package/dist/plugins/fusion-plugin-whatsapp-chat/package.json +1 -1
- package/dist/plugins/fusion-plugin-whatsapp-chat/src/__tests__/index.test.ts +5 -1
- package/dist/routine-store-GIJ6MXWY.js +10 -0
- package/dist/routine-store-HTVC2PUQ.js +10 -0
- package/dist/routine-store-KGHZBPDF.js +10 -0
- package/package.json +1 -1
- package/skill/fusion/references/engine-tools.md +6 -4
- package/dist/client/assets/AgentsView-DfznJDek.css +0 -1
- package/dist/client/assets/ChatView-BkAG99bj.js +0 -6
- package/dist/client/assets/DevServerView-C6DC0URX.js +0 -1
- package/dist/client/assets/DocumentsView-OCK1Vsw_.js +0 -1
- package/dist/client/assets/ExperimentalAgentOnboardingModal-BNpveCEk.css +0 -1
- package/dist/client/assets/GoalsView-CNLTn0rX.js +0 -2
- package/dist/client/assets/GoalsView-DI66UsjT.css +0 -1
- package/dist/client/assets/InsightsView-C9-mqVvf.css +0 -1
- package/dist/client/assets/MemoryView-D3xQIFjj.js +0 -2
- package/dist/client/assets/PluginManager-UHVLvWWl.css +0 -1
- package/dist/client/assets/PullRequestView-WQIS0zUC.css +0 -1
- package/dist/client/assets/ReliabilityView-QKMUDebT.js +0 -1
- package/dist/client/assets/ReliabilityView-eoKBhBc4.css +0 -1
- package/dist/client/assets/SessionTerminal-BiigPP2l.css +0 -1
- package/dist/client/assets/SessionTerminal-Dk1NgmN2.js +0 -2
- package/dist/client/assets/SettingsModal-JCaNvdAb.js +0 -31
- package/dist/client/assets/SettingsModal-nF_GaeeK.css +0 -1
- package/dist/client/assets/WorkflowNodeEditor-2jDuk2FR.js +0 -8
- package/dist/client/assets/WorkflowNodeEditor-BokhW3de.css +0 -1
- package/dist/client/assets/app-CUu1sm3x.js +0 -13
- package/dist/client/assets/dashboard-view-Du53JbmQ.css +0 -1
- package/dist/client/assets/index-CpTBp1RG.js +0 -793
- package/dist/client/assets/index-DqhCiU35.css +0 -1
- package/dist/client/assets/vendor-react-D37HfzIf.js +0 -49
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import {
|
|
2
|
+
DEFAULT_MEMORY_DREAMS_SCHEDULE,
|
|
3
|
+
MEMORY_DREAMS_SCHEDULE_NAME,
|
|
4
|
+
agentDailyMemoryPath,
|
|
5
|
+
agentMemoryDreamsPath,
|
|
6
|
+
agentMemoryLongTermPath,
|
|
7
|
+
agentMemoryWorkspacePath,
|
|
8
|
+
buildDreamProcessingPrompt,
|
|
9
|
+
createMemoryDreamsAutomation,
|
|
10
|
+
ensureAgentMemoryFiles,
|
|
11
|
+
extractDreamProcessorResult,
|
|
12
|
+
processAgentMemoryDreams,
|
|
13
|
+
processMemoryDreams,
|
|
14
|
+
syncMemoryDreamsAutomation
|
|
15
|
+
} from "./chunk-PSDYB45U.js";
|
|
16
|
+
import "./chunk-5RGECGQL.js";
|
|
17
|
+
import "./chunk-4VNS5WPM.js";
|
|
18
|
+
export {
|
|
19
|
+
DEFAULT_MEMORY_DREAMS_SCHEDULE,
|
|
20
|
+
MEMORY_DREAMS_SCHEDULE_NAME,
|
|
21
|
+
agentDailyMemoryPath,
|
|
22
|
+
agentMemoryDreamsPath,
|
|
23
|
+
agentMemoryLongTermPath,
|
|
24
|
+
agentMemoryWorkspacePath,
|
|
25
|
+
buildDreamProcessingPrompt,
|
|
26
|
+
createMemoryDreamsAutomation,
|
|
27
|
+
ensureAgentMemoryFiles,
|
|
28
|
+
extractDreamProcessorResult,
|
|
29
|
+
processAgentMemoryDreams,
|
|
30
|
+
processMemoryDreams,
|
|
31
|
+
syncMemoryDreamsAutomation
|
|
32
|
+
};
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import {
|
|
2
|
+
DEFAULT_MEMORY_DREAMS_SCHEDULE,
|
|
3
|
+
MEMORY_DREAMS_SCHEDULE_NAME,
|
|
4
|
+
agentDailyMemoryPath,
|
|
5
|
+
agentMemoryDreamsPath,
|
|
6
|
+
agentMemoryLongTermPath,
|
|
7
|
+
agentMemoryWorkspacePath,
|
|
8
|
+
buildDreamProcessingPrompt,
|
|
9
|
+
createMemoryDreamsAutomation,
|
|
10
|
+
ensureAgentMemoryFiles,
|
|
11
|
+
extractDreamProcessorResult,
|
|
12
|
+
processAgentMemoryDreams,
|
|
13
|
+
processMemoryDreams,
|
|
14
|
+
syncMemoryDreamsAutomation
|
|
15
|
+
} from "./chunk-2JI3F6MG.js";
|
|
16
|
+
import "./chunk-AWKNRUOR.js";
|
|
17
|
+
import "./chunk-4VNS5WPM.js";
|
|
18
|
+
export {
|
|
19
|
+
DEFAULT_MEMORY_DREAMS_SCHEDULE,
|
|
20
|
+
MEMORY_DREAMS_SCHEDULE_NAME,
|
|
21
|
+
agentDailyMemoryPath,
|
|
22
|
+
agentMemoryDreamsPath,
|
|
23
|
+
agentMemoryLongTermPath,
|
|
24
|
+
agentMemoryWorkspacePath,
|
|
25
|
+
buildDreamProcessingPrompt,
|
|
26
|
+
createMemoryDreamsAutomation,
|
|
27
|
+
ensureAgentMemoryFiles,
|
|
28
|
+
extractDreamProcessorResult,
|
|
29
|
+
processAgentMemoryDreams,
|
|
30
|
+
processMemoryDreams,
|
|
31
|
+
syncMemoryDreamsAutomation
|
|
32
|
+
};
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import {
|
|
2
|
+
DEFAULT_MEMORY_DREAMS_SCHEDULE,
|
|
3
|
+
MEMORY_DREAMS_SCHEDULE_NAME,
|
|
4
|
+
agentDailyMemoryPath,
|
|
5
|
+
agentMemoryDreamsPath,
|
|
6
|
+
agentMemoryLongTermPath,
|
|
7
|
+
agentMemoryWorkspacePath,
|
|
8
|
+
buildDreamProcessingPrompt,
|
|
9
|
+
createMemoryDreamsAutomation,
|
|
10
|
+
ensureAgentMemoryFiles,
|
|
11
|
+
extractDreamProcessorResult,
|
|
12
|
+
processAgentMemoryDreams,
|
|
13
|
+
processMemoryDreams,
|
|
14
|
+
syncMemoryDreamsAutomation
|
|
15
|
+
} from "./chunk-AICJATVW.js";
|
|
16
|
+
import "./chunk-GUV4QQT3.js";
|
|
17
|
+
import "./chunk-4VNS5WPM.js";
|
|
18
|
+
export {
|
|
19
|
+
DEFAULT_MEMORY_DREAMS_SCHEDULE,
|
|
20
|
+
MEMORY_DREAMS_SCHEDULE_NAME,
|
|
21
|
+
agentDailyMemoryPath,
|
|
22
|
+
agentMemoryDreamsPath,
|
|
23
|
+
agentMemoryLongTermPath,
|
|
24
|
+
agentMemoryWorkspacePath,
|
|
25
|
+
buildDreamProcessingPrompt,
|
|
26
|
+
createMemoryDreamsAutomation,
|
|
27
|
+
ensureAgentMemoryFiles,
|
|
28
|
+
extractDreamProcessorResult,
|
|
29
|
+
processAgentMemoryDreams,
|
|
30
|
+
processMemoryDreams,
|
|
31
|
+
syncMemoryDreamsAutomation
|
|
32
|
+
};
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import {
|
|
2
|
+
BackwardCompat,
|
|
3
|
+
FirstRunDetector,
|
|
4
|
+
MigrationCoordinator,
|
|
5
|
+
ProjectRequiredError
|
|
6
|
+
} from "./chunk-4L6CLWJC.js";
|
|
7
|
+
import "./chunk-BHM3UYWS.js";
|
|
8
|
+
import "./chunk-AWKNRUOR.js";
|
|
9
|
+
import "./chunk-4VNS5WPM.js";
|
|
10
|
+
export {
|
|
11
|
+
BackwardCompat,
|
|
12
|
+
FirstRunDetector,
|
|
13
|
+
MigrationCoordinator,
|
|
14
|
+
ProjectRequiredError
|
|
15
|
+
};
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import {
|
|
2
|
+
BackwardCompat,
|
|
3
|
+
FirstRunDetector,
|
|
4
|
+
MigrationCoordinator,
|
|
5
|
+
ProjectRequiredError
|
|
6
|
+
} from "./chunk-JKQO7YYZ.js";
|
|
7
|
+
import "./chunk-BMUXDSBF.js";
|
|
8
|
+
import "./chunk-5RGECGQL.js";
|
|
9
|
+
import "./chunk-4VNS5WPM.js";
|
|
10
|
+
export {
|
|
11
|
+
BackwardCompat,
|
|
12
|
+
FirstRunDetector,
|
|
13
|
+
MigrationCoordinator,
|
|
14
|
+
ProjectRequiredError
|
|
15
|
+
};
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import {
|
|
2
|
+
BackwardCompat,
|
|
3
|
+
FirstRunDetector,
|
|
4
|
+
MigrationCoordinator,
|
|
5
|
+
ProjectRequiredError
|
|
6
|
+
} from "./chunk-RR2HM46R.js";
|
|
7
|
+
import "./chunk-MCUG2Z7M.js";
|
|
8
|
+
import "./chunk-GUV4QQT3.js";
|
|
9
|
+
import "./chunk-4VNS5WPM.js";
|
|
10
|
+
export {
|
|
11
|
+
BackwardCompat,
|
|
12
|
+
FirstRunDetector,
|
|
13
|
+
MigrationCoordinator,
|
|
14
|
+
ProjectRequiredError
|
|
15
|
+
};
|
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
import { getModels } from "@earendil-works/pi-ai";
|
|
9
9
|
import type { ExtensionAPI } from "@earendil-works/pi-coding-agent";
|
|
10
10
|
import { streamViaCli } from "./src/provider.js";
|
|
11
|
+
import { streamViaAcp } from "./src/acp-driver.js";
|
|
11
12
|
import {
|
|
12
13
|
validateCliPresenceAsync,
|
|
13
14
|
validateCliAuthAsync,
|
|
@@ -18,9 +19,32 @@ import {
|
|
|
18
19
|
getCustomToolDefs,
|
|
19
20
|
toolsFromContext,
|
|
20
21
|
writeMcpConfig,
|
|
22
|
+
buildAcpMcpServers,
|
|
21
23
|
type McpToolDef,
|
|
22
24
|
} from "./src/mcp-config.js";
|
|
23
25
|
|
|
26
|
+
/**
|
|
27
|
+
* Route A kill-switch (U11). When `FUSION_CLAUDE_ACP=1` AND a bridge binary path
|
|
28
|
+
* is available (`FUSION_CLAUDE_ACP_BRIDGE`, injected by the engine seam per
|
|
29
|
+
* KTD10), the provider drives Claude through the ACP bridge instead of
|
|
30
|
+
* `claude -p`. OFF by default: the live `-p` path is untouched until soak.
|
|
31
|
+
*/
|
|
32
|
+
function resolveAcpBridgePath(): string | undefined {
|
|
33
|
+
if (process.env.FUSION_CLAUDE_ACP !== "1") return undefined;
|
|
34
|
+
const p = process.env.FUSION_CLAUDE_ACP_BRIDGE;
|
|
35
|
+
return typeof p === "string" && p.length > 0 ? p : undefined;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
/** Resolve custom tool defs the same way ensureMcpConfig does (context → registry). */
|
|
39
|
+
function resolveToolDefs(
|
|
40
|
+
pi: ExtensionAPI,
|
|
41
|
+
contextTools?: ReadonlyArray<{ name: string; description: string; parameters: Record<string, unknown> }>,
|
|
42
|
+
): McpToolDef[] {
|
|
43
|
+
let toolDefs = toolsFromContext(contextTools);
|
|
44
|
+
if (toolDefs.length === 0 && Array.isArray(pi.getAllTools())) toolDefs = getCustomToolDefs(pi);
|
|
45
|
+
return toolDefs;
|
|
46
|
+
}
|
|
47
|
+
|
|
24
48
|
// Kill all active Claude subprocesses on process exit to prevent orphans
|
|
25
49
|
process.on("exit", killAllProcesses);
|
|
26
50
|
|
|
@@ -220,14 +244,29 @@ export default function (pi: ExtensionAPI) {
|
|
|
220
244
|
api: "pi-claude-cli",
|
|
221
245
|
models,
|
|
222
246
|
streamSimple: (model, context, options) => {
|
|
223
|
-
const
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
247
|
+
const contextTools = (context as { tools?: ReadonlyArray<{
|
|
248
|
+
name: string;
|
|
249
|
+
description: string;
|
|
250
|
+
parameters: Record<string, unknown>;
|
|
251
|
+
}> }).tools;
|
|
252
|
+
|
|
253
|
+
// Route A (U11): drive Claude through the ACP bridge when the kill-switch
|
|
254
|
+
// is on AND a bridge path is injected. OFF by default → `-p` path below.
|
|
255
|
+
const bridgePath = resolveAcpBridgePath();
|
|
256
|
+
if (bridgePath) {
|
|
257
|
+
const toolDefs = resolveToolDefs(pi, contextTools);
|
|
258
|
+
const hash = createHash("sha1").update(JSON.stringify(toolDefs)).digest("hex").slice(0, 12);
|
|
259
|
+
return streamViaAcp(model, context, {
|
|
260
|
+
...options,
|
|
261
|
+
bridgePath,
|
|
262
|
+
mcpServers: buildAcpMcpServers(toolDefs, hash),
|
|
263
|
+
// Forward only HOME/PATH so the bridged `claude` authenticates from the
|
|
264
|
+
// login/keychain session (R17); never inherited process.env or API keys.
|
|
265
|
+
bridgeEnv: { HOME: process.env.HOME, PATH: process.env.PATH },
|
|
266
|
+
});
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
const configPath = ensureMcpConfig(pi, contextTools);
|
|
231
270
|
return streamViaCli(model, context, {
|
|
232
271
|
...options,
|
|
233
272
|
mcpConfigPath: configPath,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@fusion/pi-claude-cli",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.44.0",
|
|
4
4
|
"description": "Fusion vendored fork: pi coding-agent extension that routes LLM calls through the Claude Code CLI. Forked from rchern/pi-claude-cli (MIT). See UPSTREAM.md.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"private": true,
|
|
@@ -19,6 +19,9 @@
|
|
|
19
19
|
"url": "https://github.com/Runfusion/Fusion",
|
|
20
20
|
"directory": "packages/pi-claude-cli"
|
|
21
21
|
},
|
|
22
|
+
"dependencies": {
|
|
23
|
+
"@agentclientprotocol/sdk": "0.24.0"
|
|
24
|
+
},
|
|
22
25
|
"peerDependencies": {
|
|
23
26
|
"@earendil-works/pi-ai": "*",
|
|
24
27
|
"@earendil-works/pi-coding-agent": "*"
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { describe, it, expect, vi, beforeEach, afterEach } from "vitest";
|
|
2
|
+
|
|
3
|
+
// Spy on both transports so we can assert which one streamSimple dispatches to.
|
|
4
|
+
const { streamViaCli, streamViaAcp } = vi.hoisted(() => ({
|
|
5
|
+
streamViaCli: vi.fn(() => ({ kind: "cli" })),
|
|
6
|
+
streamViaAcp: vi.fn(() => ({ kind: "acp" })),
|
|
7
|
+
}));
|
|
8
|
+
vi.mock("../provider.js", () => ({ streamViaCli }));
|
|
9
|
+
vi.mock("../acp-driver.js", () => ({ streamViaAcp }));
|
|
10
|
+
// Registering the provider kicks off async CLI presence/auth probes; stub them
|
|
11
|
+
// so the test doesn't trip the "real CLI launch blocked" guard.
|
|
12
|
+
vi.mock("../process-manager.js", () => ({
|
|
13
|
+
validateCliPresenceAsync: vi.fn(async () => ({ ok: true })),
|
|
14
|
+
validateCliAuthAsync: vi.fn(async () => ({ ok: true })),
|
|
15
|
+
killAllProcesses: vi.fn(),
|
|
16
|
+
}));
|
|
17
|
+
// Belt-and-suspenders: no real CLI spawn even if a probe slips through.
|
|
18
|
+
vi.mock("node:child_process", () => ({ spawn: vi.fn(() => ({ on: vi.fn(), stdout: { on: vi.fn() }, stderr: { on: vi.fn() }, stdin: { write: vi.fn(), end: vi.fn() }, kill: vi.fn() })), execSync: vi.fn(() => Buffer.from("")) }));
|
|
19
|
+
|
|
20
|
+
vi.mock("@earendil-works/pi-ai", () => ({
|
|
21
|
+
getModels: vi.fn(() => []),
|
|
22
|
+
AssistantMessageEventStream: vi.fn(),
|
|
23
|
+
calculateCost: vi.fn(),
|
|
24
|
+
}));
|
|
25
|
+
|
|
26
|
+
import register from "../../index.js";
|
|
27
|
+
|
|
28
|
+
function registerAndGetStreamSimple() {
|
|
29
|
+
const calls: Array<[string, { streamSimple: (...a: unknown[]) => unknown }]> = [];
|
|
30
|
+
const pi = {
|
|
31
|
+
registerProvider: (name: string, cfg: { streamSimple: (...a: unknown[]) => unknown }) => calls.push([name, cfg]),
|
|
32
|
+
on: vi.fn(),
|
|
33
|
+
getAllTools: () => [],
|
|
34
|
+
setActiveTools: vi.fn(),
|
|
35
|
+
} as never;
|
|
36
|
+
register(pi);
|
|
37
|
+
return calls[0][1].streamSimple;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
const MODEL = { id: "claude-sonnet-4-5" } as never;
|
|
41
|
+
const CTX = { messages: [{ role: "user", content: "hi" }], tools: [] } as never;
|
|
42
|
+
|
|
43
|
+
describe("streamSimple kill-switch dispatch (U11/R9/R14)", () => {
|
|
44
|
+
const saved = { flag: process.env.FUSION_CLAUDE_ACP, bridge: process.env.FUSION_CLAUDE_ACP_BRIDGE };
|
|
45
|
+
beforeEach(() => { streamViaCli.mockClear(); streamViaAcp.mockClear(); });
|
|
46
|
+
afterEach(() => {
|
|
47
|
+
process.env.FUSION_CLAUDE_ACP = saved.flag;
|
|
48
|
+
process.env.FUSION_CLAUDE_ACP_BRIDGE = saved.bridge;
|
|
49
|
+
});
|
|
50
|
+
|
|
51
|
+
it("defaults to the -p path (streamViaCli) when the kill-switch is OFF", () => {
|
|
52
|
+
delete process.env.FUSION_CLAUDE_ACP;
|
|
53
|
+
const streamSimple = registerAndGetStreamSimple();
|
|
54
|
+
streamSimple(MODEL, CTX, {});
|
|
55
|
+
expect(streamViaCli).toHaveBeenCalledTimes(1);
|
|
56
|
+
expect(streamViaAcp).not.toHaveBeenCalled();
|
|
57
|
+
});
|
|
58
|
+
|
|
59
|
+
it("stays on -p when the flag is set but NO bridge path is provided", () => {
|
|
60
|
+
process.env.FUSION_CLAUDE_ACP = "1";
|
|
61
|
+
delete process.env.FUSION_CLAUDE_ACP_BRIDGE;
|
|
62
|
+
const streamSimple = registerAndGetStreamSimple();
|
|
63
|
+
streamSimple(MODEL, CTX, {});
|
|
64
|
+
expect(streamViaCli).toHaveBeenCalledTimes(1);
|
|
65
|
+
expect(streamViaAcp).not.toHaveBeenCalled();
|
|
66
|
+
});
|
|
67
|
+
|
|
68
|
+
it("dispatches to the ACP bridge when the flag AND a bridge path are set", () => {
|
|
69
|
+
process.env.FUSION_CLAUDE_ACP = "1";
|
|
70
|
+
process.env.FUSION_CLAUDE_ACP_BRIDGE = "/abs/claude-code-cli-acp";
|
|
71
|
+
const streamSimple = registerAndGetStreamSimple();
|
|
72
|
+
streamSimple(MODEL, CTX, {});
|
|
73
|
+
expect(streamViaAcp).toHaveBeenCalledTimes(1);
|
|
74
|
+
expect(streamViaCli).not.toHaveBeenCalled();
|
|
75
|
+
// bridgePath forwarded; env restricted to the allow-list at spawn (driver).
|
|
76
|
+
const opts = (streamViaAcp.mock.calls[0] as unknown[])[2] as { bridgePath?: string; bridgeEnv?: Record<string, unknown> };
|
|
77
|
+
expect(opts.bridgePath).toBe("/abs/claude-code-cli-acp");
|
|
78
|
+
expect(opts.bridgeEnv).toBeDefined();
|
|
79
|
+
});
|
|
80
|
+
});
|