git.iko.soy/rowtype-yoga/purescript-opencode
on main help sign in
49 lines 1.3 kB history raw
1import { Plugin } from "@opencode/plugin";
3export const define = (definition) =>
4 Plugin.define({
5 id: definition.id,
6 setup: (context) =>
7 definition.setup(context)().then((cleanup) => async () => {
8 await cleanup();
9 }),
10 });
12export const locationDirectory = (context) => () => context.location.directory;
14export const registerTool = (context) => (tool) => () =>
15 context.tool
16 .transform((editor) => {
17 editor.add({
18 name: tool.name,
19 description: tool.description,
20 input: tool.inputSchema,
21 execute: (input, execution) => tool.execute(input)(execution)(),
22 });
23 })
24 .then((registration) => async () => {
25 await registration.dispose();
26 });
28export const sessionId = (context) => context.sessionID;
30export const onAbort = (context) => (callback) => () => {
31 const signal = context.signal;
32 let removed = false;
33 const remove = () => {
34 if (!removed) {
35 removed = true;
36 signal.removeEventListener("abort", listener);
37 }
38 };
39 const listener = () => {
40 remove();
41 callback();
42 };
44 if (signal.aborted) listener();
45 else signal.addEventListener("abort", listener, { once: true });
46 return remove;
47};
49export const success = (message) => ({ content: message });