diff options
| author | Dax Raad <[email protected]> | 2025-08-04 23:06:49 -0400 |
|---|---|---|
| committer | Dax Raad <[email protected]> | 2025-08-04 23:20:04 -0400 |
| commit | b8248096056d674f964d75e34b8200cf0ff1ac8b (patch) | |
| tree | 8d8ad5dd1a0c90ca9dba0adcf26c350f28305c3a /packages/plugin | |
| parent | 5536b14347f26b6ef841188b333f26eb8bbddd9a (diff) | |
| download | opencode-b8248096056d674f964d75e34b8200cf0ff1ac8b.tar.gz opencode-b8248096056d674f964d75e34b8200cf0ff1ac8b.zip | |
re-export shell $ for plugin
Diffstat (limited to 'packages/plugin')
| -rw-r--r-- | packages/plugin/src/index.ts | 4 | ||||
| -rw-r--r-- | packages/plugin/src/shell.ts | 136 |
2 files changed, 138 insertions, 2 deletions
diff --git a/packages/plugin/src/index.ts b/packages/plugin/src/index.ts index be9822ee2..d0d484a00 100644 --- a/packages/plugin/src/index.ts +++ b/packages/plugin/src/index.ts @@ -1,10 +1,10 @@ import type { Event, createOpencodeClient, App, Model, Provider, Permission, UserMessage, Part } from "@opencode-ai/sdk" -import { $ } from "bun" +import type { BunShell } from "./shell" export type PluginInput = { client: ReturnType<typeof createOpencodeClient> app: App - $: $ + $: BunShell } export type Plugin = (input: PluginInput) => Promise<Hooks> diff --git a/packages/plugin/src/shell.ts b/packages/plugin/src/shell.ts new file mode 100644 index 000000000..56733fdb3 --- /dev/null +++ b/packages/plugin/src/shell.ts @@ -0,0 +1,136 @@ +export type ShellFunction = (input: Uint8Array) => Uint8Array + +export type ShellExpression = + | { toString(): string } + | Array<ShellExpression> + | string + | { raw: string } + | ReadableStream + +export interface BunShell { + (strings: TemplateStringsArray, ...expressions: ShellExpression[]): BunShellPromise + + /** + * Perform bash-like brace expansion on the given pattern. + * @param pattern - Brace pattern to expand + */ + braces(pattern: string): string[] + + /** + * Escape strings for input into shell commands. + */ + escape(input: string): string + + /** + * Change the default environment variables for shells created by this instance. + */ + env(newEnv?: Record<string, string | undefined>): BunShell + + /** + * Default working directory to use for shells created by this instance. + */ + cwd(newCwd?: string): BunShell + + /** + * Configure the shell to not throw an exception on non-zero exit codes. + */ + nothrow(): BunShell + + /** + * Configure whether or not the shell should throw an exception on non-zero exit codes. + */ + throws(shouldThrow: boolean): BunShell +} + +export interface BunShellPromise extends Promise<BunShellOutput> { + readonly stdin: WritableStream + + /** + * Change the current working directory of the shell. + */ + cwd(newCwd: string): this + + /** + * Set environment variables for the shell. + */ + env(newEnv: Record<string, string> | undefined): this + + /** + * By default, the shell will write to the current process's stdout and stderr, as well as buffering that output. + * This configures the shell to only buffer the output. + */ + quiet(): this + + /** + * Read from stdout as a string, line by line + * Automatically calls quiet() to disable echoing to stdout. + */ + lines(): AsyncIterable<string> + + /** + * Read from stdout as a string. + * Automatically calls quiet() to disable echoing to stdout. + */ + text(encoding?: BufferEncoding): Promise<string> + + /** + * Read from stdout as a JSON object + * Automatically calls quiet() + */ + json(): Promise<any> + + /** + * Read from stdout as an ArrayBuffer + * Automatically calls quiet() + */ + arrayBuffer(): Promise<ArrayBuffer> + + /** + * Read from stdout as a Blob + * Automatically calls quiet() + */ + blob(): Promise<Blob> + + /** + * Configure the shell to not throw an exception on non-zero exit codes. + */ + nothrow(): this + + /** + * Configure whether or not the shell should throw an exception on non-zero exit codes. + */ + throws(shouldThrow: boolean): this +} + +export interface BunShellOutput { + readonly stdout: Buffer + readonly stderr: Buffer + readonly exitCode: number + + /** + * Read from stdout as a string + */ + text(encoding?: BufferEncoding): string + + /** + * Read from stdout as a JSON object + */ + json(): any + + /** + * Read from stdout as an ArrayBuffer + */ + arrayBuffer(): ArrayBuffer + + /** + * Read from stdout as an Uint8Array + */ + bytes(): Uint8Array + + /** + * Read from stdout as a Blob + */ + blob(): Blob +} + +export type BunShellError = Error & BunShellOutput |
