From 76f6726485031582e689bed544396154cdb54917 Mon Sep 17 00:00:00 2001 From: CreatorGhost Date: Sun, 12 Jul 2026 02:04:20 +0530 Subject: [PATCH] fix(cli): accept /s/ share URLs in import Ported from upstream anomalyco/opencode#36396. --- packages/opencode/src/cli/cmd/import.ts | 6 +++--- packages/opencode/test/cli/import.test.ts | 5 ++++- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/packages/opencode/src/cli/cmd/import.ts b/packages/opencode/src/cli/cmd/import.ts index 9eb151b633e8..5ecfef078525 100644 --- a/packages/opencode/src/cli/cmd/import.ts +++ b/packages/opencode/src/cli/cmd/import.ts @@ -24,9 +24,9 @@ export type ShareData = | { type: "session_diff"; data: unknown } | { type: "model"; data: unknown } -/** Extract share ID from a share URL like https://opncd.ai/share/abc123 */ +/** Extract share ID from a share URL like https://opncd.ai/share/abc123 or https://opncd.ai/s/abc123 */ export function parseShareUrl(url: string): string | null { - const match = url.match(/^https?:\/\/[^/]+\/share\/([a-zA-Z0-9_-]+)$/) + const match = url.match(/^https?:\/\/[^/]+\/(?:share|s)\/([a-zA-Z0-9_-]+)$/) return match ? match[1] : null } @@ -109,7 +109,7 @@ const runImport = Effect.fn("Cli.import.body")(function* (file: string, ctx: Ins const slug = parseShareUrl(file) if (!slug) { const baseUrl = yield* Effect.orDie(share.url()) - process.stdout.write(`Invalid URL format. Expected: ${baseUrl}/share/`) + process.stdout.write(`Invalid URL format. Expected: ${baseUrl}/share/ or ${baseUrl}/s/`) process.stdout.write(EOL) return } diff --git a/packages/opencode/test/cli/import.test.ts b/packages/opencode/test/cli/import.test.ts index d7c0241e6b0b..cd174ae4113d 100644 --- a/packages/opencode/test/cli/import.test.ts +++ b/packages/opencode/test/cli/import.test.ts @@ -9,14 +9,17 @@ import { // parseShareUrl tests test("parses valid share URLs", () => { expect(parseShareUrl("https://opncd.ai/share/Jsj3hNIW")).toBe("Jsj3hNIW") + expect(parseShareUrl("https://opncd.ai/s/Jsj3hNIW")).toBe("Jsj3hNIW") expect(parseShareUrl("https://custom.example.com/share/abc123")).toBe("abc123") + expect(parseShareUrl("https://custom.example.com/s/abc123")).toBe("abc123") expect(parseShareUrl("http://localhost:3000/share/test_id-123")).toBe("test_id-123") }) test("rejects invalid URLs", () => { - expect(parseShareUrl("https://opncd.ai/s/Jsj3hNIW")).toBeNull() // legacy format expect(parseShareUrl("https://opncd.ai/share/")).toBeNull() + expect(parseShareUrl("https://opncd.ai/s/")).toBeNull() expect(parseShareUrl("https://opncd.ai/share/id/extra")).toBeNull() + expect(parseShareUrl("https://opncd.ai/s/id/extra")).toBeNull() expect(parseShareUrl("not-a-url")).toBeNull() })