## Summary - ACP runtimes can expose Fusion custom tools (`fn_*`) to external agents such as Hermes ACP and Prime. - When the engine passes `customTools`, `AcpRuntimeAdapter` starts a per-session loopback tool bridge and registers it as a stdio MCP server in `session/new.mcpServers`. - The bridge uses a per-session bearer token, binds only to loopback, preserves the MCP request ID as `toolCallId`, propagates tool `isError` results, and exposes only runnable non-built-in tools. - The MCP shim supports `initialize`, `ping`, `tools/list`, and `tools/call`, reporting transport, authentication, malformed-request, and unknown-tool failures correctly. - Bridge startup failures degrade gracefully: the ACP session remains usable without custom tools and exposes a fixed `fusionToolBridgeError` reason code for engine auditing. - Startup, request, and teardown paths clean temporary schemas and listeners; disposal aborts cooperative tools, bounds non-cooperative drains, prevents post-dispose execution, and preserves the existing synchronous session contract through an awaitable `disposePromise`. - The packaged CLI stages `mcp-schema-server.cjs` beside the ACP runtime distribution. ## Verification Validated at source commit `2fa6fd2e26923ac6241d1b9379b3819f1832c079`: - `pnpm --filter @fusion-plugin-examples/acp-runtime test` — 21 files / 251 tests passed - `pnpm --filter @fusion-plugin-examples/acp-runtime typecheck` — passed - Plugin build with `.cjs` asset copy — passed - `pnpm check:changesets` — passed - `git diff --check` — passed - MCP shim smoke test — passed - Greptile Review — passed - CodeRabbit — passed - Devin review — 0 bugs, 6 analyses, `errored_tasks=[]`, quality `4/10` ## Scope ACP runtime plugin only. The Hermes CLI runtime remains untouched; Hermes ACP is enabled by selecting the generic ACP runtime with `acpBinaryPath: hermes` and `acpArgs: ["acp"]`. --------- Co-authored-by: gsxdsm <gsxdsm@users.noreply.github.com>
44 lines
1.1 KiB
JSON
44 lines
1.1 KiB
JSON
{
|
|
"name": "@fusion-plugin-examples/acp-runtime",
|
|
"version": "0.1.36-beta.1",
|
|
"type": "module",
|
|
"description": "ACP (Agent Client Protocol) runtime plugin for Fusion — drives any ACP-compatible agent over JSON-RPC/stdio",
|
|
"keywords": [
|
|
"fusion-plugin",
|
|
"acp",
|
|
"agent-client-protocol",
|
|
"runtime"
|
|
],
|
|
"exports": {
|
|
".": {
|
|
"types": "./src/index.ts",
|
|
"import": "./src/index.ts"
|
|
},
|
|
"./probe": {
|
|
"types": "./src/probe.ts",
|
|
"import": "./src/probe.ts"
|
|
}
|
|
},
|
|
"private": true,
|
|
"scripts": {
|
|
"build": "tsc && node -e \"require('node:fs').copyFileSync('src/mcp-schema-server.cjs','dist/mcp-schema-server.cjs')\"",
|
|
"test": "vitest run --silent=passed-only --reporter=dot",
|
|
"typecheck": "tsc --noEmit"
|
|
},
|
|
"dependencies": {
|
|
"@agentclientprotocol/sdk": "0.24.0",
|
|
"@fusion/core": "workspace:*",
|
|
"@fusion/plugin-sdk": "workspace:*",
|
|
"claude-code-cli-acp": "0.1.1"
|
|
},
|
|
"peerDependencies": {
|
|
"@earendil-works/pi-ai": "*",
|
|
"@earendil-works/pi-coding-agent": "*"
|
|
},
|
|
"devDependencies": {
|
|
"@types/node": "^25.5.2",
|
|
"typescript": "^5.7.0",
|
|
"vitest": "^4.1.10"
|
|
}
|
|
}
|