Skip to content

Commit 70ebe33

Browse files
fix(mcp): share MCP layer across prompt and command wiring
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <[email protected]>
1 parent f71ef23 commit 70ebe33

7 files changed

Lines changed: 19 additions & 9 deletions

File tree

packages/opencode/src/command/index.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -181,7 +181,6 @@ export const layer = Layer.effect(
181181

182182
export const defaultLayer = layer.pipe(
183183
Layer.provide(Config.defaultLayer),
184-
Layer.provide(MCP.defaultLayer),
185184
Layer.provide(Skill.defaultLayer),
186185
)
187186

packages/opencode/src/effect/app-runtime.ts

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,10 @@ import { SessionShare } from "@/share"
4949
import { Npm } from "@/npm"
5050
import { memoMap } from "./memo-map"
5151

52+
const mcpLayer = MCP.defaultLayer
53+
const commandLayer = Command.defaultLayer.pipe(Layer.provide(mcpLayer))
54+
const sessionPromptLayer = SessionPrompt.defaultLayer.pipe(Layer.provide(mcpLayer))
55+
5256
export const AppLayer = Layer.mergeAll(
5357
Npm.defaultLayer,
5458
AppFileSystem.defaultLayer,
@@ -78,13 +82,13 @@ export const AppLayer = Layer.mergeAll(
7882
SessionCompaction.defaultLayer,
7983
SessionRevert.defaultLayer,
8084
SessionSummary.defaultLayer,
81-
SessionPrompt.defaultLayer,
85+
sessionPromptLayer,
8286
Instruction.defaultLayer,
8387
LLM.defaultLayer,
8488
LSP.defaultLayer,
85-
MCP.defaultLayer,
89+
mcpLayer,
8690
McpAuth.defaultLayer,
87-
Command.defaultLayer,
91+
commandLayer,
8892
Truncate.defaultLayer,
8993
ToolRegistry.defaultLayer,
9094
Format.defaultLayer,

packages/opencode/src/session/prompt.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1679,7 +1679,6 @@ export const defaultLayer = Layer.suspend(() =>
16791679
Layer.provide(SessionProcessor.defaultLayer),
16801680
Layer.provide(Command.defaultLayer),
16811681
Layer.provide(Permission.defaultLayer),
1682-
Layer.provide(MCP.defaultLayer),
16831682
Layer.provide(LSP.defaultLayer),
16841683
Layer.provide(ToolRegistry.defaultLayer),
16851684
Layer.provide(Truncate.defaultLayer),

packages/opencode/test/session/prompt-effect.test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -157,7 +157,7 @@ function makeHttp() {
157157
LLM.defaultLayer,
158158
Env.defaultLayer,
159159
AgentSvc.defaultLayer,
160-
Command.defaultLayer,
160+
Command.defaultLayer.pipe(Layer.provide(mcp)),
161161
Permission.defaultLayer,
162162
Plugin.defaultLayer,
163163
Config.defaultLayer,

packages/opencode/test/session/prompt.test.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import { fileURLToPath } from "url"
55
import { Effect, Layer } from "effect"
66
import { Instance } from "../../src/project/instance"
77
import { ModelID, ProviderID } from "../../src/provider/schema"
8+
import { MCP } from "../../src/mcp"
89
import { Session } from "../../src/session"
910
import { MessageV2 } from "../../src/session/message-v2"
1011
import { SessionPrompt } from "../../src/session/prompt"
@@ -15,7 +16,10 @@ void Log.init({ print: false })
1516

1617
function run<A, E>(fx: Effect.Effect<A, E, SessionPrompt.Service | Session.Service>) {
1718
return Effect.runPromise(
18-
fx.pipe(Effect.scoped, Effect.provide(Layer.mergeAll(SessionPrompt.defaultLayer, Session.defaultLayer))),
19+
fx.pipe(
20+
Effect.scoped,
21+
Effect.provide(Layer.mergeAll(SessionPrompt.defaultLayer.pipe(Layer.provide(MCP.defaultLayer)), Session.defaultLayer)),
22+
),
1923
)
2024
}
2125

packages/opencode/test/session/snapshot-tool-race.test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@ function makeHttp() {
112112
LLM.defaultLayer,
113113
Env.defaultLayer,
114114
AgentSvc.defaultLayer,
115-
Command.defaultLayer,
115+
Command.defaultLayer.pipe(Layer.provide(mcp)),
116116
Permission.defaultLayer,
117117
Plugin.defaultLayer,
118118
Config.defaultLayer,

packages/opencode/test/session/structured-output-integration.test.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import { describe, expect, test } from "bun:test"
22
import path from "path"
33
import { Effect, Layer } from "effect"
44
import { Session } from "../../src/session"
5+
import { MCP } from "../../src/mcp"
56
import { SessionPrompt } from "../../src/session/prompt"
67
import { Log } from "../../src/util"
78
import { Instance } from "../../src/project/instance"
@@ -23,7 +24,10 @@ async function withInstance<T>(fn: () => Promise<T>): Promise<T> {
2324

2425
function run<A, E>(fx: Effect.Effect<A, E, SessionPrompt.Service | Session.Service>) {
2526
return Effect.runPromise(
26-
fx.pipe(Effect.scoped, Effect.provide(Layer.mergeAll(SessionPrompt.defaultLayer, Session.defaultLayer))),
27+
fx.pipe(
28+
Effect.scoped,
29+
Effect.provide(Layer.mergeAll(SessionPrompt.defaultLayer.pipe(Layer.provide(MCP.defaultLayer)), Session.defaultLayer)),
30+
),
2731
)
2832
}
2933

0 commit comments

Comments
 (0)