refactor(core): consolidate tool architecture

This commit is contained in:
Dax Raad 2026-07-26 20:08:55 -04:00
commit 8db7487c89
466 changed files with 9405 additions and 11071 deletions

View file

@ -1,18 +1,18 @@
import { describe, expect, test } from "bun:test"
import { Message } from "@opencode-ai/ai"
import { ModelV2 } from "@opencode-ai/core/model"
import { ProviderV2 } from "@opencode-ai/core/provider"
import { Model } from "@opencode-ai/core/model"
import { Provider } from "@opencode-ai/core/provider"
import { SessionMessage } from "@opencode-ai/core/session/message"
import { AgentAttachment, Base64, FileAttachment } from "@opencode-ai/schema/prompt"
import { toLLMMessages } from "@opencode-ai/core/session/runner/to-llm-message"
import { AgentV2 } from "@opencode-ai/core/agent"
import { Agent } from "@opencode-ai/core/agent"
import { Shell } from "@opencode-ai/schema/shell"
import { DateTime } from "effect"
const created = DateTime.makeUnsafe(0)
const id = (value: string) => SessionMessage.ID.make(`msg_${value}`)
const model = ModelV2.Ref.make({ id: ModelV2.ID.make("model"), providerID: ProviderV2.ID.make("provider") })
const build = AgentV2.defaultID
const model = Model.Ref.make({ id: Model.ID.make("model"), providerID: Provider.ID.make("provider") })
const build = Agent.defaultID
describe("toLLMMessages", () => {
test("omits empty assistant turns", () => {
@ -21,7 +21,7 @@ describe("toLLMMessages", () => {
id: id(value),
type: "assistant",
agent: build,
model: { id: ModelV2.ID.make("model"), providerID: ProviderV2.ID.make("provider") },
model: { id: Model.ID.make("model"), providerID: Provider.ID.make("provider") },
content,
time: { created, completed: created },
})
@ -45,7 +45,7 @@ describe("toLLMMessages", () => {
expect(messages.map((message) => message.id)).toEqual([id("text"), id("reasoning")])
})
test("maps every top-level V2 Session message type", () => {
test("maps every top-level Session message type", () => {
const file = FileAttachment.make({
data: Base64.make("aGVsbG8="),
mime: "image/png",
@ -63,7 +63,7 @@ describe("toLLMMessages", () => {
SessionMessage.ModelSelected.make({
id: id("model"),
type: "model-switched",
model: { id: ModelV2.ID.make("model"), providerID: ProviderV2.ID.make("provider") },
model: { id: Model.ID.make("model"), providerID: Provider.ID.make("provider") },
time: { created },
}),
SessionMessage.System.make({
@ -345,7 +345,7 @@ Recent work
id: id("assistant"),
type: "assistant",
agent: build,
model: { id: ModelV2.ID.make("model"), providerID: ProviderV2.ID.make("provider") },
model: { id: Model.ID.make("model"), providerID: Provider.ID.make("provider") },
content: [
SessionMessage.AssistantText.make({ type: "text", text: "Checking" }),
SessionMessage.AssistantReasoning.make({
@ -495,7 +495,7 @@ Recent work
id: id("assistant-openai-reasoning"),
type: "assistant",
agent: build,
model: { id: ModelV2.ID.make("model"), providerID: ProviderV2.ID.make("provider") },
model: { id: Model.ID.make("model"), providerID: Provider.ID.make("provider") },
content: [
SessionMessage.AssistantReasoning.make({
type: "reasoning",
@ -519,7 +519,7 @@ Recent work
})
test("replays flat state under an OpenCode hosted model's route key", () => {
const opencode = ModelV2.Ref.make({ id: ModelV2.ID.make("claude-fable-5"), providerID: ProviderV2.ID.opencode })
const opencode = Model.Ref.make({ id: Model.ID.make("claude-fable-5"), providerID: Provider.ID.opencode })
const messages = toLLMMessages(
[
SessionMessage.Assistant.make({
@ -553,7 +553,7 @@ Recent work
id: id("assistant-failed"),
type: "assistant",
agent: build,
model: { id: ModelV2.ID.make("model"), providerID: ProviderV2.ID.make("provider") },
model: { id: Model.ID.make("model"), providerID: Provider.ID.make("provider") },
content: [
SessionMessage.AssistantReasoning.make({
type: "reasoning",
@ -651,7 +651,7 @@ Recent work
id: id("assistant-old-model"),
type: "assistant",
agent: build,
model: { id: ModelV2.ID.make("old-model"), providerID: ProviderV2.ID.make("provider") },
model: { id: Model.ID.make("old-model"), providerID: Provider.ID.make("provider") },
content: [
SessionMessage.AssistantReasoning.make({
type: "reasoning",
@ -745,7 +745,7 @@ Recent work
id: id("assistant-alias"),
type: "assistant",
agent: build,
model: { id: ModelV2.ID.make("fast"), providerID: ProviderV2.ID.make("provider") },
model: { id: Model.ID.make("fast"), providerID: Provider.ID.make("provider") },
content: [
SessionMessage.AssistantReasoning.make({
type: "reasoning",
@ -756,7 +756,7 @@ Recent work
time: { created, completed: created },
}),
],
ModelV2.Ref.make({ id: ModelV2.ID.make("fast"), providerID: ProviderV2.ID.make("provider") }),
Model.Ref.make({ id: Model.ID.make("fast"), providerID: Provider.ID.make("provider") }),
)
expect(messages[0]?.content).toEqual([
@ -775,7 +775,7 @@ Recent work
id: id("assistant-phase"),
type: "assistant",
agent: build,
model: { id: ModelV2.ID.make("old"), providerID: ProviderV2.ID.make("provider") },
model: { id: Model.ID.make("old"), providerID: Provider.ID.make("provider") },
content: [
SessionMessage.AssistantText.make({
type: "text",
@ -787,7 +787,7 @@ Recent work
time: { created, completed: created },
}),
],
ModelV2.Ref.make({ id: ModelV2.ID.make("new"), providerID: ProviderV2.ID.make("provider") }),
Model.Ref.make({ id: Model.ID.make("new"), providerID: Provider.ID.make("provider") }),
)
expect(messages[0]?.content).toEqual([