mirror of
https://github.com/anomalyco/opencode.git
synced 2026-07-24 12:15:51 -04:00
8c94e9005f
Co-authored-by: Brendan Allan <14191578+Brendonovich@users.noreply.github.com> Co-authored-by: Kit Langton <kit.langton@gmail.com> Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com> Co-authored-by: Affan Ali <93028901+affanali2k3@users.noreply.github.com> Co-authored-by: affanali2k3 <affanalikhanxx@gmail.com> Co-authored-by: Frank <frank@anoma.ly> Co-authored-by: opencode-agent[bot] <219766164+opencode-agent[bot]@users.noreply.github.com> Co-authored-by: 𝓛𝓲𝓽𝓽𝓵𝓮 𝓕𝓻𝓪𝓷𝓴 <little-frank@opencord.local> Co-authored-by: Aiden Cline <63023139+rekram1-node@users.noreply.github.com> Co-authored-by: Jay V <air@live.ca> Co-authored-by: Dax Raad <d@ironbay.co> Co-authored-by: Aarav Sareen <96787824+arvsrn@users.noreply.github.com> Co-authored-by: OpeOginni <107570612+OpeOginni@users.noreply.github.com> Co-authored-by: Luke Parker <10430890+Hona@users.noreply.github.com> Co-authored-by: Ben Guthrie <benjee.012@gmail.com> Co-authored-by: Dax <mail@thdxr.com> Co-authored-by: Filip <34747899+neriousy@users.noreply.github.com> Co-authored-by: Max Anderson <max.a.anderson95@gmail.com> Co-authored-by: Brendan Allan <git@brendonovich.dev> Co-authored-by: Jack <jack@anoma.ly> Co-authored-by: Shoubhit Dash <shoubhit2005@gmail.com> Co-authored-by: Dustin Deus <deusdustin@gmail.com> Co-authored-by: starptech <starptech@starptechs-MBP.fritz.box> Co-authored-by: Aiden Cline <aidenpcline@gmail.com> Co-authored-by: usrnk1 <7547651+usrnk1@users.noreply.github.com> Co-authored-by: Jay <53023+jayair@users.noreply.github.com> Co-authored-by: runvip <164729189+runvip@users.noreply.github.com> Co-authored-by: opencode <opencode@sst.dev> Co-authored-by: Julian Coy <julian@ex-machina.co> Co-authored-by: Vladimir Glafirov <vglafirov@gitlab.com>
64 lines
3.3 KiB
TypeScript
64 lines
3.3 KiB
TypeScript
import { expect, test } from "bun:test"
|
|
import { Schema } from "effect"
|
|
import { AgentV2 } from "@opencode-ai/core/agent"
|
|
import { Location as CoreLocation } from "@opencode-ai/core/location"
|
|
import { ModelV2 } from "@opencode-ai/core/model"
|
|
import { ProjectV2 } from "@opencode-ai/core/project"
|
|
import { SessionV2 } from "@opencode-ai/core/session"
|
|
import { SessionInput as CoreSessionInput } from "@opencode-ai/core/session/input"
|
|
import { SessionMessage as CoreSessionMessage } from "@opencode-ai/core/session/message"
|
|
import { Prompt as CorePrompt } from "@opencode-ai/core/session/prompt"
|
|
import { Agent } from "@opencode-ai/schema/agent"
|
|
import { Location } from "@opencode-ai/schema/location"
|
|
import { Model } from "@opencode-ai/schema/model"
|
|
import { Project } from "@opencode-ai/schema/project"
|
|
import { Provider } from "@opencode-ai/schema/provider"
|
|
import { Prompt } from "@opencode-ai/schema/prompt"
|
|
import { Session } from "@opencode-ai/schema/session"
|
|
import { SessionInput } from "@opencode-ai/schema/session-input"
|
|
import { SessionMessage } from "@opencode-ai/schema/session-message"
|
|
import { Workspace } from "@opencode-ai/schema/workspace"
|
|
import { Api } from "@opencode-ai/server/api"
|
|
import { compile, emitPromise } from "@opencode-ai/httpapi-codegen"
|
|
import { ClientApi, endpointNames, groupNames, promiseOmitEndpoints } from "../src/contract"
|
|
|
|
test("Core and Server reuse the authoritative Schema and Protocol values", () => {
|
|
expect(AgentV2.ID).toBe(Agent.ID)
|
|
expect(CoreLocation.Ref).toBe(Location.Ref)
|
|
expect(ModelV2.Ref).toBe(Model.Ref)
|
|
expect(SessionV2.Info).toBe(Session.Info)
|
|
expect(ProjectV2.Current).toBe(Project.Current)
|
|
expect(ProjectV2.Directory).toBe(Project.Directory)
|
|
expect(ProjectV2.Directories).toBe(Project.Directories)
|
|
expect(CoreSessionInput.Admitted).toBe(SessionInput.Admitted)
|
|
expect(CoreSessionMessage.Message).toBe(SessionMessage.Message)
|
|
expect(CorePrompt).toBe(Prompt)
|
|
expect(Api.groups["server.session"].identifier).toBe("server.session")
|
|
expect(Api.groups["server.project"].identifier).toBe("server.project")
|
|
expect(Object.keys(ClientApi.groups)).toEqual(Object.keys(Api.groups))
|
|
expect(Session.ID.create()).toStartWith("ses_")
|
|
expect(Project.ID.global).toBe("global")
|
|
expect(Provider.ID.anthropic).toBe("anthropic")
|
|
expect(Workspace.ID.create()).toStartWith("wrk_")
|
|
})
|
|
|
|
test("client and Server contracts generate identically", () => {
|
|
const server = compile(Api, { groupNames, endpointNames, omitEndpoints: promiseOmitEndpoints })
|
|
const client = compile(ClientApi, { groupNames, endpointNames, omitEndpoints: promiseOmitEndpoints })
|
|
|
|
expect(emitPromise(client)).toEqual(emitPromise(server))
|
|
})
|
|
|
|
test("shared DTO schemas construct and decode plain objects", () => {
|
|
const made = Prompt.make({ text: "hello" })
|
|
const decoded = Schema.decodeUnknownSync(Prompt)({ text: "hello" })
|
|
const content = Schema.decodeUnknownSync(SessionMessage.AssistantText)({ type: "text", id: "part_1", text: "hi" })
|
|
|
|
expect(Object.getPrototypeOf(made)).toBe(Object.prototype)
|
|
expect(Object.getPrototypeOf(decoded)).toBe(Object.prototype)
|
|
expect(Object.getPrototypeOf(content)).toBe(Object.prototype)
|
|
expect(Prompt.ast.annotations?.identifier).toBe("Prompt")
|
|
expect(SessionMessage.AssistantText.ast.annotations?.identifier).toBe("Session.Message.Assistant.Text")
|
|
expect(CoreSessionMessage.AssistantText).toBe(SessionMessage.AssistantText)
|
|
})
|