refactor(opencode): remove instruction apparatus; add wire dialects from scratch

- delete instruction.ts, reminders.ts, system.ts, message.ts (dead or injector)
- read tool no longer appends <system-reminder> context from ancestor files
- prompt.ts assembles system context via SessionContext with provenance tags
- llm/request.ts uses base prompt constant directly
- provider/dialects/: raw-HTTP wire dialects (anthropic, openai,
  openai-compatible) + registry - no vendor SDK participation
- provider.ts: BUNDLED_PROVIDERS cut to three SDKs pending dialect cutover
This commit is contained in:
2026-08-22 17:42:51 -05:00
parent cfca4cec19
commit b5b202be3b
19 changed files with 295 additions and 791 deletions
@@ -1031,7 +1031,6 @@ it.effect("global config remains global when project config is disabled", () =>
Effect.gen(function* () {
const config = yield* Config.use.get()
expect(config.model).toBe("global/model")
expect(config.plugin_origins?.find((item) => item.spec === "global-plugin")?.scope).toBe("global")
}),
),
),
@@ -1108,30 +1107,6 @@ it.effect("deduplicates duplicate plugins from global and local configs", () =>
),
)
it.effect("keeps plugin origins aligned with merged plugin list", () =>
withConfigTree(
{
global: { plugin: [["shared-plugin@1.0.0", { source: "global" }], "global-only@1.0.0"] },
local: { plugin: [["shared-plugin@2.0.0", { source: "local" }], "local-only@1.0.0"] },
},
Effect.gen(function* () {
const config = yield* Config.use.get()
const plugins = config.plugin ?? []
const origins = config.plugin_origins ?? []
const names = plugins.map((item) => ConfigPlugin.pluginSpecifier(item))
expect(names).toContain("shared-plugin@2.0.0")
expect(names).not.toContain("shared-plugin@1.0.0")
expect(names).toContain("global-only@1.0.0")
expect(names).toContain("local-only@1.0.0")
expect(origins.map((item) => item.spec)).toEqual(plugins)
expect(origins.find((item) => ConfigPlugin.pluginSpecifier(item.spec) === "shared-plugin@2.0.0")?.scope).toBe(
"local",
)
}),
),
)
// Legacy tools migration tests
it.instance("migrates legacy tools config to permissions - allow", () =>
+1 -135
View File
@@ -7,7 +7,6 @@ import { Effect, Layer } from "effect"
import { FSUtil } from "@opencode-ai/core/fs-util"
import { Global } from "@opencode-ai/core/global"
import { Config } from "@/config/config"
import { ConfigPlugin } from "@/config/plugin"
import { CurrentWorkingDirectory } from "@/config/tui-cwd"
import { TuiConfig } from "../../src/config/tui"
import { TestInstance } from "../fixture/fixture"
@@ -76,53 +75,7 @@ const getTuiConfig = (directory: string) =>
),
)
const getTuiPluginOrigins = (directory: string) =>
TuiConfig.Service.use((svc) => svc.pluginOrigins()).pipe(
Effect.provide(
AppNodeBuilder.build(TuiConfig.node).pipe(Layer.provide(Layer.succeed(CurrentWorkingDirectory, directory))),
),
)
it.instance("keeps server and tui plugin merge semantics aligned", () =>
withCleanState(
Effect.gen(function* () {
const fs = yield* FSUtil.Service
const test = yield* TestInstance
const local = path.join(test.directory, ".opencode")
yield* fs.makeDirectory(local, { recursive: true })
yield* fs.writeJson(path.join(Global.Path.config, "opencode.json"), {
plugin: [["shared-plugin@1.0.0", { source: "global" }], "global-only@1.0.0"],
})
yield* fs.writeJson(path.join(Global.Path.config, "tui.json"), {
plugin: [["shared-plugin@1.0.0", { source: "global" }], "global-only@1.0.0"],
})
yield* fs.writeJson(path.join(local, "opencode.json"), {
plugin: [["shared-plugin@2.0.0", { source: "local" }], "local-only@1.0.0"],
})
yield* fs.writeJson(path.join(local, "tui.json"), {
plugin: [["shared-plugin@2.0.0", { source: "local" }], "local-only@1.0.0"],
})
const server = yield* Config.use.get()
const tui = yield* getTuiConfig(test.directory)
const tuiOrigins = yield* getTuiPluginOrigins(test.directory)
const serverPlugins = (server.plugin ?? []).map((item) => ConfigPlugin.pluginSpecifier(item))
const tuiPlugins = (tui.plugin ?? []).map((item) => ConfigPlugin.pluginSpecifier(item))
expect(serverPlugins).toEqual(tuiPlugins)
expect(serverPlugins).toContain("shared-plugin@2.0.0")
expect(serverPlugins).not.toContain("shared-plugin@1.0.0")
const serverOrigins = server.plugin_origins ?? []
expect(serverOrigins.map((item) => ConfigPlugin.pluginSpecifier(item.spec))).toEqual(serverPlugins)
expect(tuiOrigins.map((item) => ConfigPlugin.pluginSpecifier(item.spec))).toEqual(tuiPlugins)
expect(serverOrigins.map((item) => item.scope)).toEqual(tuiOrigins.map((item) => item.scope))
}),
),
)
it.instance("loads tui config with the same precedence order as server config paths", () =>
it.instance("merges plugin_enabled flags across config layers", () =>
withCleanState(
Effect.gen(function* () {
const fs = yield* FSUtil.Service
@@ -739,93 +692,6 @@ it.instance("loads .opencode/tui.json", () =>
),
)
it.instance("supports tuple plugin specs with options in tui.json", () =>
withCleanState(
Effect.gen(function* () {
const fs = yield* FSUtil.Service
const test = yield* TestInstance
yield* fs.writeJson(path.join(test.directory, "tui.json"), {
plugin: [["acme-plugin@1.2.3", { enabled: true, label: "demo" }]],
})
const config = yield* getTuiConfig(test.directory)
const origins = yield* getTuiPluginOrigins(test.directory)
expect(config.plugin).toEqual([["acme-plugin@1.2.3", { enabled: true, label: "demo" }]])
expect(origins).toEqual([
{
spec: ["acme-plugin@1.2.3", { enabled: true, label: "demo" }],
scope: "local",
source: path.join(test.directory, "tui.json"),
},
])
}),
),
)
it.instance("deduplicates tuple plugin specs by name with higher precedence winning", () =>
withCleanState(
Effect.gen(function* () {
const fs = yield* FSUtil.Service
const test = yield* TestInstance
yield* fs.writeJson(path.join(Global.Path.config, "tui.json"), {
plugin: [["acme-plugin@1.0.0", { source: "global" }]],
})
yield* fs.writeJson(path.join(test.directory, "tui.json"), {
plugin: [
["acme-plugin@2.0.0", { source: "project" }],
["second-plugin@3.0.0", { source: "project" }],
],
})
const config = yield* getTuiConfig(test.directory)
const origins = yield* getTuiPluginOrigins(test.directory)
expect(config.plugin).toEqual([
["acme-plugin@2.0.0", { source: "project" }],
["second-plugin@3.0.0", { source: "project" }],
])
expect(origins).toEqual([
{
spec: ["acme-plugin@2.0.0", { source: "project" }],
scope: "local",
source: path.join(test.directory, "tui.json"),
},
{
spec: ["second-plugin@3.0.0", { source: "project" }],
scope: "local",
source: path.join(test.directory, "tui.json"),
},
])
}),
),
)
it.instance("tracks global and local plugin metadata in merged tui config", () =>
withCleanState(
Effect.gen(function* () {
const fs = yield* FSUtil.Service
const test = yield* TestInstance
yield* fs.writeJson(path.join(Global.Path.config, "tui.json"), { plugin: ["global-plugin@1.0.0"] })
yield* fs.writeJson(path.join(test.directory, "tui.json"), { plugin: ["local-plugin@2.0.0"] })
const config = yield* getTuiConfig(test.directory)
const origins = yield* getTuiPluginOrigins(test.directory)
expect(config.plugin).toEqual(["global-plugin@1.0.0", "local-plugin@2.0.0"])
expect(origins).toEqual([
{
spec: "global-plugin@1.0.0",
scope: "global",
source: path.join(Global.Path.config, "tui.json"),
},
{
spec: "local-plugin@2.0.0",
scope: "local",
source: path.join(test.directory, "tui.json"),
},
])
}),
),
)
it.instance("merges plugin_enabled flags across config layers", () =>
withCleanState(
Effect.gen(function* () {
@@ -1,19 +0,0 @@
const raw = process.argv[2]
if (!raw) throw new Error("Missing worker payload")
const value = JSON.parse(raw)
if (!value || typeof value !== "object") {
throw new Error("Invalid worker payload")
}
const msg = Object.fromEntries(Object.entries(value))
if (typeof msg.file !== "string" || typeof msg.spec !== "string" || typeof msg.target !== "string") {
throw new Error("Invalid worker payload")
}
if (typeof msg.id !== "string") throw new Error("Invalid worker payload")
process.env.OPENCODE_PLUGIN_META_FILE = msg.file
const { PluginMeta } = await import("../../src/plugin/meta")
await PluginMeta.touch(msg.spec, msg.target, msg.id)