Something went wrong. Try again.
opencode v2 mirror
Something went wrong. Try again.
TypeScript
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182export * as Shell from "./shell.js"
import { Schema } from "effect"import { optional } from "./schema.js"import { ephemeral, inventory } from "./event.js"import { ascending } from "./identifier.js"import { NonNegativeInt, statics } from "./schema.js"
const IDSchema = Schema.String.check(Schema.isStartsWith("sh_")).pipe(Schema.brand("Shell.ID"))
export const ID = IDSchema.pipe( statics((schema: typeof IDSchema) => { const create = () => schema.make("sh_" + ascending()) return { create, ascending: (id?: string) => (id === undefined ? create() : schema.make(id)), } }),)export type ID = typeof ID.Type
export const Status = Schema.Literals(["running", "exited", "timeout", "killed"])export type Status = typeof Status.Type
export const Time = Schema.Struct({ started: Schema.Finite.annotate({ description: "Start time in milliseconds since the Unix epoch" }), completed: optional(Schema.Finite).annotate({ description: "Completion time in milliseconds since the Unix epoch", }),})export interface Time extends Schema.Schema.Type<typeof Time> {}
// Opaque caller-supplied tags echoed back on Info and events. The Shell service never interprets// these; callers (e.g. ShellTool stores the originating session ID) use them to filter or correlate.export const Metadata = Schema.Record(Schema.String, Schema.Unknown)export type Metadata = typeof Metadata.Type
export const Info = Schema.Struct({ id: ID, status: Status, command: Schema.String, cwd: Schema.String, shell: Schema.String, // Absolute path of the file capturing combined stdout/stderr. Page through it via `output`. file: Schema.String, pid: optional(NonNegativeInt), exit: optional(Schema.Finite), // Always present; defaults to an empty object when the creator supplies no metadata. metadata: Metadata, time: Time,}).annotate({ identifier: "Shell.Info" })export interface Info extends Schema.Schema.Type<typeof Info> {}
const Created = ephemeral({ type: "shell.created", schema: { info: Info } })const Exited = ephemeral({ type: "shell.exited", schema: { id: ID, exit: optional(Schema.Finite), status: Status } })const Deleted = ephemeral({ type: "shell.deleted", schema: { id: ID } })export const Event = { Created, Exited, Deleted, Definitions: inventory(Created, Exited, Deleted) }
export const CreateInput = Schema.Struct({ command: Schema.String, cwd: optional(Schema.String), timeout: optional(NonNegativeInt), metadata: optional(Metadata),})export interface CreateInput extends Schema.Schema.Type<typeof CreateInput> {}
export const OutputInput = Schema.Struct({ cursor: optional(NonNegativeInt), limit: optional(NonNegativeInt),})export interface OutputInput extends Schema.Schema.Type<typeof OutputInput> {}
export const Output = Schema.Struct({ output: Schema.String, // Absolute cursor after this page. Equals `size` once fully caught up. cursor: NonNegativeInt, // Total bytes captured so far. A consumer has more to page while `cursor < size`. size: NonNegativeInt, truncated: Schema.Boolean,})export interface Output extends Schema.Schema.Type<typeof Output> {}