mirror of
https://github.com/anomalyco/opencode.git
synced 2026-07-24 04:01:10 -04:00
58 lines
1.8 KiB
TypeScript
58 lines
1.8 KiB
TypeScript
import { Schema } from "effect"
|
|
import { optional } from "./schema"
|
|
import { statics } from "./schema"
|
|
|
|
export interface Source extends Schema.Schema.Type<typeof Source> {}
|
|
export const Source = Schema.Struct({
|
|
start: Schema.Finite,
|
|
end: Schema.Finite,
|
|
text: Schema.String,
|
|
}).annotate({ identifier: "Prompt.Source" })
|
|
|
|
export interface FileAttachment extends Schema.Schema.Type<typeof FileAttachment> {}
|
|
export const FileAttachment = Schema.Struct({
|
|
uri: Schema.String,
|
|
mime: Schema.String,
|
|
name: Schema.String.pipe(optional),
|
|
description: Schema.String.pipe(optional),
|
|
source: Source.pipe(optional),
|
|
})
|
|
.annotate({ identifier: "Prompt.FileAttachment" })
|
|
.pipe(
|
|
statics((schema) => ({
|
|
create: (input: FileAttachment) =>
|
|
schema.make({
|
|
uri: input.uri,
|
|
mime: input.mime,
|
|
name: input.name,
|
|
description: input.description,
|
|
source: input.source,
|
|
}),
|
|
})),
|
|
)
|
|
|
|
export interface AgentAttachment extends Schema.Schema.Type<typeof AgentAttachment> {}
|
|
export const AgentAttachment = Schema.Struct({
|
|
name: Schema.String,
|
|
source: Source.pipe(optional),
|
|
}).annotate({ identifier: "Prompt.AgentAttachment" })
|
|
|
|
export interface Prompt extends Schema.Schema.Type<typeof Prompt> {}
|
|
export const Prompt = Schema.Struct({
|
|
text: Schema.String,
|
|
files: Schema.Array(FileAttachment).pipe(optional),
|
|
agents: Schema.Array(AgentAttachment).pipe(optional),
|
|
})
|
|
.annotate({ identifier: "Prompt" })
|
|
.pipe(
|
|
statics((schema) => ({
|
|
equivalence: Schema.toEquivalence(schema),
|
|
fromUserMessage: (input: Pick<Prompt, "text" | "files" | "agents">) =>
|
|
schema.make({
|
|
text: input.text,
|
|
...(input.files === undefined ? {} : { files: input.files }),
|
|
...(input.agents === undefined ? {} : { agents: input.agents }),
|
|
}),
|
|
})),
|
|
)
|