From 61160dc22039a2b37b2afb4b876ec684f7be1913 Mon Sep 17 00:00:00 2001 From: Dax Raad Date: Fri, 20 Jun 2025 15:22:41 -0400 Subject: [PATCH] docs: readme --- README.md | 24 -------------------- packages/opencode/src/server/server.ts | 28 ++++++++++++++++++++++++ packages/opencode/src/session/index.ts | 8 +++++++ packages/opencode/src/share/share.ts | 7 ++++++ packages/opencode/src/storage/storage.ts | 5 +++++ 5 files changed, 48 insertions(+), 24 deletions(-) diff --git a/README.md b/README.md index 9c726c8c..4e29b92b 100644 --- a/README.md +++ b/README.md @@ -52,30 +52,6 @@ $ bun run packages/opencode/src/index.ts ### FAQ -#### How do I use this with OpenRouter? - -OpenRouter is not in the Models.dev database yet, but you can configure it manually. - -```json title="opencode.json" -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "openrouter": { - "npm": "@openrouter/ai-sdk-provider", - "name": "OpenRouter", - "options": {}, - "models": { - "anthropic/claude-3.5-sonnet": { - "name": "Claude 3.5 Sonnet" - } - } - } - } -} -``` - -And then to configure an api key you can do `opencode auth login` and select "Other -> 'openrouter'" - #### How is this different than Claude Code? It's very similar to Claude Code in terms of capability. Here are the key differences: diff --git a/packages/opencode/src/server/server.ts b/packages/opencode/src/server/server.ts index c7fd13a3..fcc88cb8 100644 --- a/packages/opencode/src/server/server.ts +++ b/packages/opencode/src/server/server.ts @@ -290,6 +290,34 @@ export namespace Server { return c.json(session) }, ) + .post( + "/session_unshare", + describeRoute({ + description: "Unshare the session", + responses: { + 200: { + description: "Successfully unshared session", + content: { + "application/json": { + schema: resolver(Session.Info), + }, + }, + }, + }, + }), + zValidator( + "json", + z.object({ + sessionID: z.string(), + }), + ), + async (c) => { + const body = c.req.valid("json") + await Session.unshare(body.sessionID) + const session = await Session.get(body.sessionID) + return c.json(session) + }, + ) .post( "/session_messages", describeRoute({ diff --git a/packages/opencode/src/session/index.ts b/packages/opencode/src/session/index.ts index b796c313..db427cb7 100644 --- a/packages/opencode/src/session/index.ts +++ b/packages/opencode/src/session/index.ts @@ -159,6 +159,14 @@ export namespace Session { return share } + export async function unshare(id: string) { + await Storage.remove("session/share/" + id) + await update(id, (draft) => { + draft.share = undefined + }) + await Share.remove(id) + } + export async function update(id: string, editor: (session: Info) => void) { const { sessions } = state() const session = await get(id) diff --git a/packages/opencode/src/share/share.ts b/packages/opencode/src/share/share.ts index d47abd88..f5faee6e 100644 --- a/packages/opencode/src/share/share.ts +++ b/packages/opencode/src/share/share.ts @@ -70,4 +70,11 @@ export namespace Share { .then((x) => x.json()) .then((x) => x as { url: string; secret: string }) } + + export async function remove(id: string) { + return fetch(`${URL}/share_delete`, { + method: "POST", + body: JSON.stringify({ id }), + }).then((x) => x.json()) + } } diff --git a/packages/opencode/src/storage/storage.ts b/packages/opencode/src/storage/storage.ts index 5dc3de85..aea032cd 100644 --- a/packages/opencode/src/storage/storage.ts +++ b/packages/opencode/src/storage/storage.ts @@ -24,6 +24,11 @@ export namespace Storage { } }) + export async function remove(key: string) { + const target = path.join(state().dir, key + ".json") + await fs.unlink(target).catch(() => {}) + } + export async function readJSON(key: string) { return Bun.file(path.join(state().dir, key + ".json")).json() as Promise }