Buckets:
| import path from "path" | |
| import { pathToFileURL } from "bun" | |
| import { createOpencode } from "@opencode-ai/sdk" | |
| import { parseArgs } from "util" | |
| async function main() { | |
| const { values, positionals } = parseArgs({ | |
| args: Bun.argv.slice(2), | |
| options: { | |
| file: { type: "string", short: "f" }, | |
| help: { type: "boolean", short: "h", default: false }, | |
| }, | |
| allowPositionals: true, | |
| }) | |
| if (values.help) { | |
| console.log(` | |
| Usage: bun script/duplicate-pr.ts [options] <message> | |
| Options: | |
| -f, --file <path> File to attach to the prompt | |
| -h, --help Show this help message | |
| Examples: | |
| bun script/duplicate-pr.ts -f pr_info.txt "Check the attached file for PR details" | |
| `) | |
| process.exit(0) | |
| } | |
| const message = positionals.join(" ") | |
| if (!message) { | |
| console.error("Error: message is required") | |
| process.exit(1) | |
| } | |
| const opencode = await createOpencode({ port: 0 }) | |
| try { | |
| const parts: Array<{ type: "text"; text: string } | { type: "file"; url: string; filename: string; mime: string }> = | |
| [] | |
| if (values.file) { | |
| const resolved = path.resolve(process.cwd(), values.file) | |
| const file = Bun.file(resolved) | |
| if (!(await file.exists())) { | |
| console.error(`Error: file not found: ${values.file}`) | |
| process.exit(1) | |
| } | |
| parts.push({ | |
| type: "file", | |
| url: pathToFileURL(resolved).href, | |
| filename: path.basename(resolved), | |
| mime: "text/plain", | |
| }) | |
| } | |
| parts.push({ type: "text", text: message }) | |
| const session = await opencode.client.session.create() | |
| const result = await opencode.client.session | |
| .prompt({ | |
| path: { id: session.data!.id }, | |
| body: { | |
| agent: "duplicate-pr", | |
| parts, | |
| }, | |
| signal: AbortSignal.timeout(120_000), | |
| }) | |
| .then((x) => x.data?.parts?.find((y) => y.type === "text")?.text ?? "") | |
| console.log(result.trim()) | |
| } finally { | |
| opencode.server.close() | |
| } | |
| } | |
| void main() | |
Xet Storage Details
- Size:
- 2.01 kB
- Xet hash:
- 3736d5551066fff0ab6ca7c861eb2f9fc61697063d0588a714d5071522b88016
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.