Skip to content

Commit 8bce02e

Browse files
authored
Merge branch 'dev' into snapshot-node-shim-stuff
2 parents c3dc5a3 + 3381993 commit 8bce02e

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

43 files changed

+1301
-1165
lines changed

packages/opencode/src/bus/index.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -169,6 +169,8 @@ export namespace Bus {
169169
}),
170170
)
171171

172+
export const defaultLayer = layer
173+
172174
const { runPromise, runSync } = makeRuntime(Service, layer)
173175

174176
// runSync is safe here because the subscribe chain (InstanceState.get, PubSub.subscribe,
Lines changed: 100 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,100 @@
1+
import { Layer, ManagedRuntime } from "effect"
2+
import { memoMap } from "./run-service"
3+
import { Observability } from "./oltp"
4+
5+
import { AppFileSystem } from "@/filesystem"
6+
import { Bus } from "@/bus"
7+
import { Auth } from "@/auth"
8+
import { Account } from "@/account"
9+
import { Config } from "@/config/config"
10+
import { Git } from "@/git"
11+
import { Ripgrep } from "@/file/ripgrep"
12+
import { FileTime } from "@/file/time"
13+
import { File } from "@/file"
14+
import { FileWatcher } from "@/file/watcher"
15+
import { Storage } from "@/storage/storage"
16+
import { Snapshot } from "@/snapshot"
17+
import { Plugin } from "@/plugin"
18+
import { Provider } from "@/provider/provider"
19+
import { ProviderAuth } from "@/provider/auth"
20+
import { Agent } from "@/agent/agent"
21+
import { Skill } from "@/skill"
22+
import { Discovery } from "@/skill/discovery"
23+
import { Question } from "@/question"
24+
import { Permission } from "@/permission"
25+
import { Todo } from "@/session/todo"
26+
import { Session } from "@/session"
27+
import { SessionStatus } from "@/session/status"
28+
import { SessionRunState } from "@/session/run-state"
29+
import { SessionProcessor } from "@/session/processor"
30+
import { SessionCompaction } from "@/session/compaction"
31+
import { SessionRevert } from "@/session/revert"
32+
import { SessionSummary } from "@/session/summary"
33+
import { SessionPrompt } from "@/session/prompt"
34+
import { Instruction } from "@/session/instruction"
35+
import { LLM } from "@/session/llm"
36+
import { LSP } from "@/lsp"
37+
import { MCP } from "@/mcp"
38+
import { McpAuth } from "@/mcp/auth"
39+
import { Command } from "@/command"
40+
import { Truncate } from "@/tool/truncate"
41+
import { ToolRegistry } from "@/tool/registry"
42+
import { Format } from "@/format"
43+
import { Project } from "@/project/project"
44+
import { Vcs } from "@/project/vcs"
45+
import { Worktree } from "@/worktree"
46+
import { Pty } from "@/pty"
47+
import { Installation } from "@/installation"
48+
import { ShareNext } from "@/share/share-next"
49+
import { SessionShare } from "@/share/session"
50+
51+
export const AppLayer = Layer.mergeAll(
52+
Observability.layer,
53+
AppFileSystem.defaultLayer,
54+
Bus.defaultLayer,
55+
Auth.defaultLayer,
56+
Account.defaultLayer,
57+
Config.defaultLayer,
58+
Git.defaultLayer,
59+
Ripgrep.defaultLayer,
60+
FileTime.defaultLayer,
61+
File.defaultLayer,
62+
FileWatcher.defaultLayer,
63+
Storage.defaultLayer,
64+
Snapshot.defaultLayer,
65+
Plugin.defaultLayer,
66+
Provider.defaultLayer,
67+
ProviderAuth.defaultLayer,
68+
Agent.defaultLayer,
69+
Skill.defaultLayer,
70+
Discovery.defaultLayer,
71+
Question.defaultLayer,
72+
Permission.defaultLayer,
73+
Todo.defaultLayer,
74+
Session.defaultLayer,
75+
SessionStatus.defaultLayer,
76+
SessionRunState.defaultLayer,
77+
SessionProcessor.defaultLayer,
78+
SessionCompaction.defaultLayer,
79+
SessionRevert.defaultLayer,
80+
SessionSummary.defaultLayer,
81+
SessionPrompt.defaultLayer,
82+
Instruction.defaultLayer,
83+
LLM.defaultLayer,
84+
LSP.defaultLayer,
85+
MCP.defaultLayer,
86+
McpAuth.defaultLayer,
87+
Command.defaultLayer,
88+
Truncate.defaultLayer,
89+
ToolRegistry.defaultLayer,
90+
Format.defaultLayer,
91+
Project.defaultLayer,
92+
Vcs.defaultLayer,
93+
Worktree.defaultLayer,
94+
Pty.defaultLayer,
95+
Installation.defaultLayer,
96+
ShareNext.defaultLayer,
97+
SessionShare.defaultLayer,
98+
)
99+
100+
export const AppRuntime = ManagedRuntime.make(AppLayer, { memoMap })

packages/opencode/src/mcp/auth.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -141,7 +141,7 @@ export namespace McpAuth {
141141
}),
142142
)
143143

144-
const defaultLayer = layer.pipe(Layer.provide(AppFileSystem.defaultLayer))
144+
export const defaultLayer = layer.pipe(Layer.provide(AppFileSystem.defaultLayer))
145145

146146
const { runPromise } = makeRuntime(Service, defaultLayer)
147147

packages/opencode/src/project/vcs.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -226,7 +226,7 @@ export namespace Vcs {
226226
}),
227227
)
228228

229-
const defaultLayer = layer.pipe(
229+
export const defaultLayer = layer.pipe(
230230
Layer.provide(Git.defaultLayer),
231231
Layer.provide(AppFileSystem.defaultLayer),
232232
Layer.provide(Bus.layer),

packages/opencode/src/pty/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -359,7 +359,7 @@ export namespace Pty {
359359
}),
360360
)
361361

362-
const defaultLayer = layer.pipe(Layer.provide(Bus.layer), Layer.provide(Plugin.defaultLayer))
362+
export const defaultLayer = layer.pipe(Layer.provide(Bus.layer), Layer.provide(Plugin.defaultLayer))
363363

364364
const { runPromise } = makeRuntime(Service, defaultLayer)
365365

packages/opencode/src/session/processor.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -245,7 +245,7 @@ export namespace SessionProcessor {
245245

246246
case "reasoning-end":
247247
if (!(value.id in ctx.reasoningMap)) return
248-
ctx.reasoningMap[value.id].text = ctx.reasoningMap[value.id].text.trimEnd()
248+
ctx.reasoningMap[value.id].text = ctx.reasoningMap[value.id].text
249249
ctx.reasoningMap[value.id].time = { ...ctx.reasoningMap[value.id].time, end: Date.now() }
250250
if (value.providerMetadata) ctx.reasoningMap[value.id].metadata = value.providerMetadata
251251
yield* session.updatePart(ctx.reasoningMap[value.id])
@@ -425,7 +425,7 @@ export namespace SessionProcessor {
425425

426426
case "text-end":
427427
if (!ctx.currentText) return
428-
ctx.currentText.text = ctx.currentText.text.trimEnd()
428+
ctx.currentText.text = ctx.currentText.text
429429
ctx.currentText.text = (yield* plugin.trigger(
430430
"experimental.text.complete",
431431
{

packages/opencode/src/session/prompt.ts

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ import { Process } from "@/util/process"
4646
import { Cause, Effect, Exit, Layer, Option, Scope, ServiceMap } from "effect"
4747
import { InstanceState } from "@/effect/instance-state"
4848
import { makeRuntime } from "@/effect/run-service"
49-
import { TaskTool } from "@/tool/task"
49+
import { TaskTool, type TaskPromptOps } from "@/tool/task"
5050
import { SessionRunState } from "./run-state"
5151

5252
// @ts-ignore
@@ -356,7 +356,7 @@ NOTE: At any point in time through this workflow you should feel free to ask the
356356
abort: options.abortSignal!,
357357
messageID: input.processor.message.id,
358358
callID: options.toolCallId,
359-
extra: { model: input.model, bypassAgentCheck: input.bypassAgentCheck },
359+
extra: { model: input.model, bypassAgentCheck: input.bypassAgentCheck, promptOps },
360360
agent: input.agent.name,
361361
messages: input.messages,
362362
metadata: (val) =>
@@ -586,7 +586,7 @@ NOTE: At any point in time through this workflow you should feel free to ask the
586586
sessionID,
587587
abort: signal,
588588
callID: part.callID,
589-
extra: { bypassAgentCheck: true },
589+
extra: { bypassAgentCheck: true, promptOps },
590590
messages: msgs,
591591
metadata(val: { title?: string; metadata?: Record<string, any> }) {
592592
return Effect.runPromise(
@@ -1655,6 +1655,12 @@ NOTE: At any point in time through this workflow you should feel free to ask the
16551655
return result
16561656
})
16571657

1658+
const promptOps: TaskPromptOps = {
1659+
cancel: (sessionID) => Effect.runFork(cancel(sessionID)),
1660+
resolvePromptParts: (template) => Effect.runPromise(resolvePromptParts(template)),
1661+
prompt: (input) => Effect.runPromise(prompt(input)),
1662+
}
1663+
16581664
return Service.of({
16591665
cancel,
16601666
prompt,
@@ -1666,7 +1672,7 @@ NOTE: At any point in time through this workflow you should feel free to ask the
16661672
}),
16671673
)
16681674

1669-
const defaultLayer = Layer.suspend(() =>
1675+
export const defaultLayer = Layer.suspend(() =>
16701676
layer.pipe(
16711677
Layer.provide(SessionRunState.defaultLayer),
16721678
Layer.provide(SessionStatus.defaultLayer),

0 commit comments

Comments
 (0)