alchemylab-opencode 1.0.18 → 1.0.20
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{run-service-RE7EK2UK.js → arktype-aI7TBD0R-ETU7X65Q.js} +1 -11
- package/dist/chunk-7KKA6WBY.js +12 -0
- package/dist/chunk-A4S3BYGY.js +12 -0
- package/dist/{chunk-PWFRMDDF.js → chunk-BGADAZN4.js} +0 -1
- package/dist/chunk-BYJU35KA.js +18 -0
- package/dist/chunk-FT4RVZXD.js +18 -0
- package/dist/chunk-LTCXIXYM.js +12 -0
- package/dist/chunk-M4CB72HE.js +13 -0
- package/dist/chunk-M4DCWBCO.js +12 -0
- package/dist/chunk-MBZTOEAD.js +12 -0
- package/dist/chunk-N7PLTD3P.js +13 -0
- package/dist/chunk-QRUX5DYI.js +75 -0
- package/dist/chunk-T6MY2WE4.js +12 -0
- package/dist/{chunk-FMP3YLWX.js → chunk-T7EXROHP.js} +1 -19
- package/dist/chunk-UO2AIECR.js +2214 -0
- package/dist/{mcp-4SNUY4OD.js → chunk-XREX5MYM.js} +1 -11
- package/dist/{schema-EWYI6LGA.js → default-u_dwuiYb-5QQ4GXMV.js} +1 -13
- package/dist/effect-QlVUlMFu-ORZ7TVO5.js +12 -0
- package/dist/log-MVJ7H4K5.js +12 -0
- package/dist/mcp-7UCWZJLJ.js +12 -0
- package/dist/{registry-EQ7TBD6Z.js → pty.node-X2EITEZ4.js} +1 -12
- package/dist/registry-HGPZOISH.js +12 -0
- package/dist/run-DYJ5YKU4.js +20 -0
- package/dist/run-service-IUIOP7ZW.js +12 -0
- package/dist/run.js +1 -11
- package/dist/schema-YWIVP7UR.js +12 -0
- package/dist/serve.js +1 -36
- package/dist/{default-u_dwuiYb-WOFHQQ3K.js → server-VKRBP2QM.js} +1 -11
- package/dist/session-Z4P4Y6MB.js +12 -0
- package/dist/share-next-WZUJANDA.js +12 -0
- package/dist/sury-CWZTCd75-IXNCX752.js +12 -0
- package/dist/typebox-Dei93FPO-K67WT2FO.js +12 -0
- package/dist/valibot--1zFm7rT-SSCP4J5I.js +12 -0
- package/dist/valibot-D_HTw1Gn-KPCJMJMC.js +12 -0
- package/dist/worktree-5JVGPJ42.js +12 -0
- package/dist/{arktype-aI7TBD0R-HX4BR3RX.js → zod-Bwrt9trS-BYLM45IZ.js} +1 -10
- package/dist/{chunk-BI5OUHTQ.js → zod-DSgpEGAE-T3VJY2W3.js} +1 -20
- package/package.json +10 -5
- package/dist/arktype-aI7TBD0R-HX4BR3RX.js.map +0 -7
- package/dist/chunk-3AF5MXLF.js +0 -49
- package/dist/chunk-3AF5MXLF.js.map +0 -7
- package/dist/chunk-6UDEKTJV.js +0 -23942
- package/dist/chunk-6UDEKTJV.js.map +0 -7
- package/dist/chunk-BI5OUHTQ.js.map +0 -7
- package/dist/chunk-COCF34ZS.js +0 -144
- package/dist/chunk-COCF34ZS.js.map +0 -7
- package/dist/chunk-FMP3YLWX.js.map +0 -7
- package/dist/chunk-HORZKFCR.js +0 -88
- package/dist/chunk-HORZKFCR.js.map +0 -7
- package/dist/chunk-J4KUHHYM.js +0 -2289
- package/dist/chunk-J4KUHHYM.js.map +0 -7
- package/dist/chunk-O5VWOPCL.js +0 -106
- package/dist/chunk-O5VWOPCL.js.map +0 -7
- package/dist/chunk-PWFRMDDF.js.map +0 -7
- package/dist/chunk-S3PMXQSO.js +0 -728
- package/dist/chunk-S3PMXQSO.js.map +0 -7
- package/dist/chunk-SNATISLF.js +0 -319
- package/dist/chunk-SNATISLF.js.map +0 -7
- package/dist/chunk-VL3RSEZ2.js +0 -160
- package/dist/chunk-VL3RSEZ2.js.map +0 -7
- package/dist/chunk-YX3AWX2A.js +0 -6620
- package/dist/chunk-YX3AWX2A.js.map +0 -7
- package/dist/chunk-Z6HKGDR4.js +0 -5678
- package/dist/chunk-Z6HKGDR4.js.map +0 -7
- package/dist/default-u_dwuiYb-WOFHQQ3K.js.map +0 -7
- package/dist/effect-QlVUlMFu-UERLUUQW.js +0 -29
- package/dist/effect-QlVUlMFu-UERLUUQW.js.map +0 -7
- package/dist/mcp-4SNUY4OD.js.map +0 -7
- package/dist/pty.node-RHOAUGH6.js +0 -40
- package/dist/pty.node-RHOAUGH6.js.map +0 -7
- package/dist/registry-EQ7TBD6Z.js.map +0 -7
- package/dist/run-XIMVXVMO.js +0 -4794
- package/dist/run-XIMVXVMO.js.map +0 -7
- package/dist/run-service-RE7EK2UK.js.map +0 -7
- package/dist/run.js.map +0 -7
- package/dist/schema-EWYI6LGA.js.map +0 -7
- package/dist/serve.js.map +0 -7
- package/dist/server-P3JM3FFL.js +0 -29
- package/dist/server-P3JM3FFL.js.map +0 -7
- package/dist/session-FV32QIWG.js +0 -23
- package/dist/session-FV32QIWG.js.map +0 -7
- package/dist/share-next-MK3GU4BJ.js +0 -24
- package/dist/share-next-MK3GU4BJ.js.map +0 -7
- package/dist/sury-CWZTCd75-XC3NCMTP.js +0 -29
- package/dist/sury-CWZTCd75-XC3NCMTP.js.map +0 -7
- package/dist/typebox-Dei93FPO-QOBKW4L7.js +0 -21
- package/dist/typebox-Dei93FPO-QOBKW4L7.js.map +0 -7
- package/dist/valibot--1zFm7rT-LHHLSLYY.js +0 -29
- package/dist/valibot--1zFm7rT-LHHLSLYY.js.map +0 -7
- package/dist/valibot-D_HTw1Gn-UR62BIDY.js +0 -60
- package/dist/valibot-D_HTw1Gn-UR62BIDY.js.map +0 -7
- package/dist/worktree-N3PSXGW4.js +0 -63
- package/dist/worktree-N3PSXGW4.js.map +0 -7
- package/dist/zod-Bwrt9trS-J2GOMA2R.js +0 -43
- package/dist/zod-Bwrt9trS-J2GOMA2R.js.map +0 -7
- package/dist/zod-DSgpEGAE-VTXQW6SB.js +0 -56
- package/dist/zod-DSgpEGAE-VTXQW6SB.js.map +0 -7
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../packages/opencode/src/worktree/index.ts", "../packages/opencode/src/project/vcs.ts", "../packages/opencode/src/project/bootstrap.ts", "../packages/opencode/src/control-plane/types.ts"],
|
|
4
|
-
"sourcesContent": ["import z from \"zod\"\nimport { NamedError } from \"@opencode-ai/util/error\"\nimport { Global } from \"../global\"\nimport { Instance } from \"../project/instance\"\nimport { InstanceBootstrap } from \"../project/bootstrap\"\nimport { Project } from \"../project/project\"\nimport { Database, eq } from \"../storage/db\"\nimport { ProjectTable } from \"../project/project.sql\"\nimport type { ProjectID } from \"../project/schema\"\nimport { Log } from \"../util/log\"\nimport { Slug } from \"@opencode-ai/util/slug\"\nimport { errorMessage } from \"../util/error\"\nimport { BusEvent } from \"@/bus/bus-event\"\nimport { GlobalBus } from \"@/bus/global\"\nimport { Git } from \"@/git\"\nimport { Effect, Layer, Path, Scope, ServiceMap, Stream } from \"effect\"\nimport { ChildProcess, ChildProcessSpawner } from \"effect/unstable/process\"\nimport { NodePath } from \"@effect/platform-node\"\nimport { AppFileSystem } from \"@/filesystem\"\nimport { makeRuntime } from \"@/effect/run-service\"\nimport * as CrossSpawnSpawner from \"@/effect/cross-spawn-spawner\"\nimport { InstanceState } from \"@/effect/instance-state\"\n\nexport namespace Worktree {\n const log = Log.create({ service: \"worktree\" })\n\n export const Event = {\n Ready: BusEvent.define(\n \"worktree.ready\",\n z.object({\n name: z.string(),\n branch: z.string(),\n }),\n ),\n Failed: BusEvent.define(\n \"worktree.failed\",\n z.object({\n message: z.string(),\n }),\n ),\n }\n\n export const Info = z\n .object({\n name: z.string(),\n branch: z.string(),\n directory: z.string(),\n })\n .meta({\n ref: \"Worktree\",\n })\n\n export type Info = z.infer<typeof Info>\n\n export const CreateInput = z\n .object({\n name: z.string().optional(),\n startCommand: z\n .string()\n .optional()\n .describe(\"Additional startup script to run after the project's start command\"),\n })\n .meta({\n ref: \"WorktreeCreateInput\",\n })\n\n export type CreateInput = z.infer<typeof CreateInput>\n\n export const RemoveInput = z\n .object({\n directory: z.string(),\n })\n .meta({\n ref: \"WorktreeRemoveInput\",\n })\n\n export type RemoveInput = z.infer<typeof RemoveInput>\n\n export const ResetInput = z\n .object({\n directory: z.string(),\n })\n .meta({\n ref: \"WorktreeResetInput\",\n })\n\n export type ResetInput = z.infer<typeof ResetInput>\n\n export const NotGitError = NamedError.create(\n \"WorktreeNotGitError\",\n z.object({\n message: z.string(),\n }),\n )\n\n export const NameGenerationFailedError = NamedError.create(\n \"WorktreeNameGenerationFailedError\",\n z.object({\n message: z.string(),\n }),\n )\n\n export const CreateFailedError = NamedError.create(\n \"WorktreeCreateFailedError\",\n z.object({\n message: z.string(),\n }),\n )\n\n export const StartCommandFailedError = NamedError.create(\n \"WorktreeStartCommandFailedError\",\n z.object({\n message: z.string(),\n }),\n )\n\n export const RemoveFailedError = NamedError.create(\n \"WorktreeRemoveFailedError\",\n z.object({\n message: z.string(),\n }),\n )\n\n export const ResetFailedError = NamedError.create(\n \"WorktreeResetFailedError\",\n z.object({\n message: z.string(),\n }),\n )\n\n function slugify(input: string) {\n return input\n .trim()\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, \"-\")\n .replace(/^-+/, \"\")\n .replace(/-+$/, \"\")\n }\n\n function failedRemoves(...chunks: string[]) {\n return chunks.filter(Boolean).flatMap((chunk) =>\n chunk\n .split(\"\\n\")\n .map((line) => line.trim())\n .flatMap((line) => {\n const match = line.match(/^warning:\\s+failed to remove\\s+(.+):\\s+/i)\n if (!match) return []\n const value = match[1]?.trim().replace(/^['\"]|['\"]$/g, \"\")\n if (!value) return []\n return [value]\n }),\n )\n }\n\n // ---------------------------------------------------------------------------\n // Effect service\n // ---------------------------------------------------------------------------\n\n export interface Interface {\n readonly makeWorktreeInfo: (name?: string) => Effect.Effect<Info>\n readonly createFromInfo: (info: Info, startCommand?: string) => Effect.Effect<void>\n readonly create: (input?: CreateInput) => Effect.Effect<Info>\n readonly remove: (input: RemoveInput) => Effect.Effect<boolean>\n readonly reset: (input: ResetInput) => Effect.Effect<boolean>\n }\n\n export class Service extends ServiceMap.Service<Service, Interface>()(\"@opencode/Worktree\") {}\n\n type GitResult = { code: number; text: string; stderr: string }\n\n export const layer: Layer.Layer<\n Service,\n never,\n AppFileSystem.Service | Path.Path | ChildProcessSpawner.ChildProcessSpawner | Project.Service\n > = Layer.effect(\n Service,\n Effect.gen(function* () {\n const scope = yield* Scope.Scope\n const fs = yield* AppFileSystem.Service\n const pathSvc = yield* Path.Path\n const spawner = yield* ChildProcessSpawner.ChildProcessSpawner\n const project = yield* Project.Service\n\n const git = Effect.fnUntraced(\n function* (args: string[], opts?: { cwd?: string }) {\n const handle = yield* spawner.spawn(\n ChildProcess.make(\"git\", args, { cwd: opts?.cwd, extendEnv: true, stdin: \"ignore\" }),\n )\n const [text, stderr] = yield* Effect.all(\n [Stream.mkString(Stream.decodeText(handle.stdout)), Stream.mkString(Stream.decodeText(handle.stderr))],\n { concurrency: 2 },\n )\n const code = yield* handle.exitCode\n return { code, text, stderr } satisfies GitResult\n },\n Effect.scoped,\n Effect.catch((e) =>\n Effect.succeed({ code: 1, text: \"\", stderr: e instanceof Error ? e.message : String(e) } satisfies GitResult),\n ),\n )\n\n const MAX_NAME_ATTEMPTS = 26\n const candidate = Effect.fn(\"Worktree.candidate\")(function* (root: string, base?: string) {\n const ctx = yield* InstanceState.context\n for (const attempt of Array.from({ length: MAX_NAME_ATTEMPTS }, (_, i) => i)) {\n const name = base ? (attempt === 0 ? base : `${base}-${Slug.create()}`) : Slug.create()\n const branch = `opencode/${name}`\n const directory = pathSvc.join(root, name)\n\n if (yield* fs.exists(directory).pipe(Effect.orDie)) continue\n\n const ref = `refs/heads/${branch}`\n const branchCheck = yield* git([\"show-ref\", \"--verify\", \"--quiet\", ref], { cwd: ctx.worktree })\n if (branchCheck.code === 0) continue\n\n return Info.parse({ name, branch, directory })\n }\n throw new NameGenerationFailedError({ message: \"Failed to generate a unique worktree name\" })\n })\n\n const makeWorktreeInfo = Effect.fn(\"Worktree.makeWorktreeInfo\")(function* (name?: string) {\n const ctx = yield* InstanceState.context\n if (ctx.project.vcs !== \"git\") {\n throw new NotGitError({ message: \"Worktrees are only supported for git projects\" })\n }\n\n const root = pathSvc.join(Global.Path.data, \"worktree\", ctx.project.id)\n yield* fs.makeDirectory(root, { recursive: true }).pipe(Effect.orDie)\n\n const base = name ? slugify(name) : \"\"\n return yield* candidate(root, base || undefined)\n })\n\n const setup = Effect.fnUntraced(function* (info: Info) {\n const ctx = yield* InstanceState.context\n const created = yield* git([\"worktree\", \"add\", \"--no-checkout\", \"-b\", info.branch, info.directory], {\n cwd: ctx.worktree,\n })\n if (created.code !== 0) {\n throw new CreateFailedError({ message: created.stderr || created.text || \"Failed to create git worktree\" })\n }\n\n yield* project.addSandbox(ctx.project.id, info.directory).pipe(Effect.catch(() => Effect.void))\n })\n\n const boot = Effect.fnUntraced(function* (info: Info, startCommand?: string) {\n const ctx = yield* InstanceState.context\n const projectID = ctx.project.id\n const extra = startCommand?.trim()\n\n const populated = yield* git([\"reset\", \"--hard\"], { cwd: info.directory })\n if (populated.code !== 0) {\n const message = populated.stderr || populated.text || \"Failed to populate worktree\"\n log.error(\"worktree checkout failed\", { directory: info.directory, message })\n GlobalBus.emit(\"event\", {\n directory: info.directory,\n payload: { type: Event.Failed.type, properties: { message } },\n })\n return\n }\n\n const booted = yield* Effect.promise(() =>\n Instance.provide({\n directory: info.directory,\n init: InstanceBootstrap,\n fn: () => undefined,\n })\n .then(() => true)\n .catch((error) => {\n const message = errorMessage(error)\n log.error(\"worktree bootstrap failed\", { directory: info.directory, message })\n GlobalBus.emit(\"event\", {\n directory: info.directory,\n payload: { type: Event.Failed.type, properties: { message } },\n })\n return false\n }),\n )\n if (!booted) return\n\n GlobalBus.emit(\"event\", {\n directory: info.directory,\n payload: {\n type: Event.Ready.type,\n properties: { name: info.name, branch: info.branch },\n },\n })\n\n yield* runStartScripts(info.directory, { projectID, extra })\n })\n\n const createFromInfo = Effect.fn(\"Worktree.createFromInfo\")(function* (info: Info, startCommand?: string) {\n yield* setup(info)\n yield* boot(info, startCommand)\n })\n\n const create = Effect.fn(\"Worktree.create\")(function* (input?: CreateInput) {\n const info = yield* makeWorktreeInfo(input?.name)\n yield* setup(info)\n yield* boot(info, input?.startCommand).pipe(\n Effect.catchCause((cause) => Effect.sync(() => log.error(\"worktree bootstrap failed\", { cause }))),\n Effect.forkIn(scope),\n )\n return info\n })\n\n const canonical = Effect.fnUntraced(function* (input: string) {\n const abs = pathSvc.resolve(input)\n const real = yield* fs.realPath(abs).pipe(Effect.catch(() => Effect.succeed(abs)))\n const normalized = pathSvc.normalize(real)\n return process.platform === \"win32\" ? normalized.toLowerCase() : normalized\n })\n\n function parseWorktreeList(text: string) {\n return text\n .split(\"\\n\")\n .map((line) => line.trim())\n .reduce<{ path?: string; branch?: string }[]>((acc, line) => {\n if (!line) return acc\n if (line.startsWith(\"worktree \")) {\n acc.push({ path: line.slice(\"worktree \".length).trim() })\n return acc\n }\n const current = acc[acc.length - 1]\n if (!current) return acc\n if (line.startsWith(\"branch \")) {\n current.branch = line.slice(\"branch \".length).trim()\n }\n return acc\n }, [])\n }\n\n const locateWorktree = Effect.fnUntraced(function* (\n entries: { path?: string; branch?: string }[],\n directory: string,\n ) {\n for (const item of entries) {\n if (!item.path) continue\n const key = yield* canonical(item.path)\n if (key === directory) return item\n }\n return undefined\n })\n\n function stopFsmonitor(target: string) {\n return fs.exists(target).pipe(\n Effect.orDie,\n Effect.flatMap((exists) => (exists ? git([\"fsmonitor--daemon\", \"stop\"], { cwd: target }) : Effect.void)),\n )\n }\n\n function cleanDirectory(target: string) {\n return Effect.promise(() =>\n import(\"fs/promises\")\n .then((fsp) => fsp.rm(target, { recursive: true, force: true, maxRetries: 5, retryDelay: 100 }))\n .catch((error) => {\n const message = errorMessage(error)\n throw new RemoveFailedError({ message: message || \"Failed to remove git worktree directory\" })\n }),\n )\n }\n\n const remove = Effect.fn(\"Worktree.remove\")(function* (input: RemoveInput) {\n if (Instance.project.vcs !== \"git\") {\n throw new NotGitError({ message: \"Worktrees are only supported for git projects\" })\n }\n\n const directory = yield* canonical(input.directory)\n\n const list = yield* git([\"worktree\", \"list\", \"--porcelain\"], { cwd: Instance.worktree })\n if (list.code !== 0) {\n throw new RemoveFailedError({ message: list.stderr || list.text || \"Failed to read git worktrees\" })\n }\n\n const entries = parseWorktreeList(list.text)\n const entry = yield* locateWorktree(entries, directory)\n\n if (!entry?.path) {\n const directoryExists = yield* fs.exists(directory).pipe(Effect.orDie)\n if (directoryExists) {\n yield* stopFsmonitor(directory)\n yield* cleanDirectory(directory)\n }\n return true\n }\n\n yield* stopFsmonitor(entry.path)\n const removed = yield* git([\"worktree\", \"remove\", \"--force\", entry.path], { cwd: Instance.worktree })\n if (removed.code !== 0) {\n const next = yield* git([\"worktree\", \"list\", \"--porcelain\"], { cwd: Instance.worktree })\n if (next.code !== 0) {\n throw new RemoveFailedError({\n message: removed.stderr || removed.text || next.stderr || next.text || \"Failed to remove git worktree\",\n })\n }\n\n const stale = yield* locateWorktree(parseWorktreeList(next.text), directory)\n if (stale?.path) {\n throw new RemoveFailedError({ message: removed.stderr || removed.text || \"Failed to remove git worktree\" })\n }\n }\n\n yield* cleanDirectory(entry.path)\n\n const branch = entry.branch?.replace(/^refs\\/heads\\//, \"\")\n if (branch) {\n const deleted = yield* git([\"branch\", \"-D\", branch], { cwd: Instance.worktree })\n if (deleted.code !== 0) {\n throw new RemoveFailedError({\n message: deleted.stderr || deleted.text || \"Failed to delete worktree branch\",\n })\n }\n }\n\n return true\n })\n\n const gitExpect = Effect.fnUntraced(function* (\n args: string[],\n opts: { cwd: string },\n error: (r: GitResult) => Error,\n ) {\n const result = yield* git(args, opts)\n if (result.code !== 0) throw error(result)\n return result\n })\n\n const runStartCommand = Effect.fnUntraced(\n function* (directory: string, cmd: string) {\n const [shell, args] = process.platform === \"win32\" ? [\"cmd\", [\"/c\", cmd]] : [\"bash\", [\"-lc\", cmd]]\n const handle = yield* spawner.spawn(\n ChildProcess.make(shell, args, { cwd: directory, extendEnv: true, stdin: \"ignore\" }),\n )\n // Drain stdout, capture stderr for error reporting\n const [, stderr] = yield* Effect.all(\n [Stream.runDrain(handle.stdout), Stream.mkString(Stream.decodeText(handle.stderr))],\n { concurrency: 2 },\n ).pipe(Effect.orDie)\n const code = yield* handle.exitCode\n return { code, stderr }\n },\n Effect.scoped,\n Effect.catch(() => Effect.succeed({ code: 1, stderr: \"\" })),\n )\n\n const runStartScript = Effect.fnUntraced(function* (directory: string, cmd: string, kind: string) {\n const text = cmd.trim()\n if (!text) return true\n const result = yield* runStartCommand(directory, text)\n if (result.code === 0) return true\n log.error(\"worktree start command failed\", { kind, directory, message: result.stderr })\n return false\n })\n\n const runStartScripts = Effect.fnUntraced(function* (\n directory: string,\n input: { projectID: ProjectID; extra?: string },\n ) {\n const row = yield* Effect.sync(() =>\n Database.use((db) => db.select().from(ProjectTable).where(eq(ProjectTable.id, input.projectID)).get()),\n )\n const project = row ? Project.fromRow(row) : undefined\n const startup = project?.commands?.start?.trim() ?? \"\"\n const ok = yield* runStartScript(directory, startup, \"project\")\n if (!ok) return false\n yield* runStartScript(directory, input.extra ?? \"\", \"worktree\")\n return true\n })\n\n const prune = Effect.fnUntraced(function* (root: string, entries: string[]) {\n const base = yield* canonical(root)\n yield* Effect.forEach(\n entries,\n (entry) =>\n Effect.gen(function* () {\n const target = yield* canonical(pathSvc.resolve(root, entry))\n if (target === base) return\n if (!target.startsWith(`${base}${pathSvc.sep}`)) return\n yield* fs.remove(target, { recursive: true }).pipe(Effect.ignore)\n }),\n { concurrency: \"unbounded\" },\n )\n })\n\n const sweep = Effect.fnUntraced(function* (root: string) {\n const first = yield* git([\"clean\", \"-ffdx\"], { cwd: root })\n if (first.code === 0) return first\n\n const entries = failedRemoves(first.stderr, first.text)\n if (!entries.length) return first\n\n yield* prune(root, entries)\n return yield* git([\"clean\", \"-ffdx\"], { cwd: root })\n })\n\n const reset = Effect.fn(\"Worktree.reset\")(function* (input: ResetInput) {\n if (Instance.project.vcs !== \"git\") {\n throw new NotGitError({ message: \"Worktrees are only supported for git projects\" })\n }\n\n const directory = yield* canonical(input.directory)\n const primary = yield* canonical(Instance.worktree)\n if (directory === primary) {\n throw new ResetFailedError({ message: \"Cannot reset the primary workspace\" })\n }\n\n const list = yield* git([\"worktree\", \"list\", \"--porcelain\"], { cwd: Instance.worktree })\n if (list.code !== 0) {\n throw new ResetFailedError({ message: list.stderr || list.text || \"Failed to read git worktrees\" })\n }\n\n const entry = yield* locateWorktree(parseWorktreeList(list.text), directory)\n if (!entry?.path) {\n throw new ResetFailedError({ message: \"Worktree not found\" })\n }\n\n const worktreePath = entry.path\n\n const base = yield* Effect.promise(() => Git.defaultBranch(Instance.worktree))\n if (!base) {\n throw new ResetFailedError({ message: \"Default branch not found\" })\n }\n\n const sep = base.ref.indexOf(\"/\")\n if (base.ref !== base.name && sep > 0) {\n const remote = base.ref.slice(0, sep)\n const branch = base.ref.slice(sep + 1)\n yield* gitExpect(\n [\"fetch\", remote, branch],\n { cwd: Instance.worktree },\n (r) => new ResetFailedError({ message: r.stderr || r.text || `Failed to fetch ${base.ref}` }),\n )\n }\n\n yield* gitExpect(\n [\"reset\", \"--hard\", base.ref],\n { cwd: worktreePath },\n (r) => new ResetFailedError({ message: r.stderr || r.text || \"Failed to reset worktree to target\" }),\n )\n\n const cleanResult = yield* sweep(worktreePath)\n if (cleanResult.code !== 0) {\n throw new ResetFailedError({ message: cleanResult.stderr || cleanResult.text || \"Failed to clean worktree\" })\n }\n\n yield* gitExpect(\n [\"submodule\", \"update\", \"--init\", \"--recursive\", \"--force\"],\n { cwd: worktreePath },\n (r) => new ResetFailedError({ message: r.stderr || r.text || \"Failed to update submodules\" }),\n )\n\n yield* gitExpect(\n [\"submodule\", \"foreach\", \"--recursive\", \"git\", \"reset\", \"--hard\"],\n { cwd: worktreePath },\n (r) => new ResetFailedError({ message: r.stderr || r.text || \"Failed to reset submodules\" }),\n )\n\n yield* gitExpect(\n [\"submodule\", \"foreach\", \"--recursive\", \"git\", \"clean\", \"-fdx\"],\n { cwd: worktreePath },\n (r) => new ResetFailedError({ message: r.stderr || r.text || \"Failed to clean submodules\" }),\n )\n\n const status = yield* git([\"-c\", \"core.fsmonitor=false\", \"status\", \"--porcelain=v1\"], { cwd: worktreePath })\n if (status.code !== 0) {\n throw new ResetFailedError({ message: status.stderr || status.text || \"Failed to read git status\" })\n }\n\n if (status.text.trim()) {\n throw new ResetFailedError({ message: `Worktree reset left local changes:\\n${status.text.trim()}` })\n }\n\n yield* runStartScripts(worktreePath, { projectID: Instance.project.id }).pipe(\n Effect.catchCause((cause) => Effect.sync(() => log.error(\"worktree start task failed\", { cause }))),\n Effect.forkIn(scope),\n )\n\n return true\n })\n\n return Service.of({ makeWorktreeInfo, createFromInfo, create, remove, reset })\n }),\n )\n\n const defaultLayer = layer.pipe(\n Layer.provide(CrossSpawnSpawner.defaultLayer),\n Layer.provide(Project.defaultLayer),\n Layer.provide(AppFileSystem.defaultLayer),\n Layer.provide(NodePath.layer),\n )\n const { runPromise } = makeRuntime(Service, defaultLayer)\n\n export async function makeWorktreeInfo(name?: string) {\n return runPromise((svc) => svc.makeWorktreeInfo(name))\n }\n\n export async function createFromInfo(info: Info, startCommand?: string) {\n return runPromise((svc) => svc.createFromInfo(info, startCommand))\n }\n\n export async function create(input?: CreateInput) {\n return runPromise((svc) => svc.create(input))\n }\n\n export async function remove(input: RemoveInput) {\n return runPromise((svc) => svc.remove(input))\n }\n\n export async function reset(input: ResetInput) {\n return runPromise((svc) => svc.reset(input))\n }\n}\n", "import { Effect, Layer, ServiceMap, Stream } from \"effect\"\nimport path from \"path\"\nimport { Bus } from \"@/bus\"\nimport { BusEvent } from \"@/bus/bus-event\"\nimport { InstanceState } from \"@/effect/instance-state\"\nimport { makeRuntime } from \"@/effect/run-service\"\nimport { AppFileSystem } from \"@/filesystem\"\nimport { FileWatcher } from \"@/file/watcher\"\nimport { Git } from \"@/git\"\nimport { Snapshot } from \"@/snapshot\"\nimport { Log } from \"@/util/log\"\nimport { Instance } from \"./instance\"\nimport z from \"zod\"\n\nexport namespace Vcs {\n const log = Log.create({ service: \"vcs\" })\n\n const count = (text: string) => {\n if (!text) return 0\n if (!text.endsWith(\"\\n\")) return text.split(\"\\n\").length\n return text.slice(0, -1).split(\"\\n\").length\n }\n\n const work = Effect.fnUntraced(function* (fs: AppFileSystem.Interface, cwd: string, file: string) {\n const full = path.join(cwd, file)\n if (!(yield* fs.exists(full).pipe(Effect.orDie))) return \"\"\n const buf = yield* fs.readFile(full).pipe(Effect.catch(() => Effect.succeed(new Uint8Array())))\n if (Buffer.from(buf).includes(0)) return \"\"\n return Buffer.from(buf).toString(\"utf8\")\n })\n\n const nums = (list: Git.Stat[]) =>\n new Map(list.map((item) => [item.file, { additions: item.additions, deletions: item.deletions }] as const))\n\n const merge = (...lists: Git.Item[][]) => {\n const out = new Map<string, Git.Item>()\n lists.flat().forEach((item) => {\n if (!out.has(item.file)) out.set(item.file, item)\n })\n return [...out.values()]\n }\n\n const files = Effect.fnUntraced(function* (\n fs: AppFileSystem.Interface,\n git: Git.Interface,\n cwd: string,\n ref: string | undefined,\n list: Git.Item[],\n map: Map<string, { additions: number; deletions: number }>,\n ) {\n const base = ref ? yield* git.prefix(cwd) : \"\"\n const next = yield* Effect.forEach(\n list,\n (item) =>\n Effect.gen(function* () {\n const before = item.status === \"added\" || !ref ? \"\" : yield* git.show(cwd, ref, item.file, base)\n const after = item.status === \"deleted\" ? \"\" : yield* work(fs, cwd, item.file)\n const stat = map.get(item.file)\n return {\n file: item.file,\n before,\n after,\n additions: stat?.additions ?? (item.status === \"added\" ? count(after) : 0),\n deletions: stat?.deletions ?? (item.status === \"deleted\" ? count(before) : 0),\n status: item.status,\n } satisfies Snapshot.FileDiff\n }),\n { concurrency: 8 },\n )\n return next.toSorted((a, b) => a.file.localeCompare(b.file))\n })\n\n const track = Effect.fnUntraced(function* (\n fs: AppFileSystem.Interface,\n git: Git.Interface,\n cwd: string,\n ref: string | undefined,\n ) {\n if (!ref) return yield* files(fs, git, cwd, ref, yield* git.status(cwd), new Map())\n const [list, stats] = yield* Effect.all([git.status(cwd), git.stats(cwd, ref)], { concurrency: 2 })\n return yield* files(fs, git, cwd, ref, list, nums(stats))\n })\n\n const compare = Effect.fnUntraced(function* (\n fs: AppFileSystem.Interface,\n git: Git.Interface,\n cwd: string,\n ref: string,\n ) {\n const [list, stats, extra] = yield* Effect.all([git.diff(cwd, ref), git.stats(cwd, ref), git.status(cwd)], {\n concurrency: 3,\n })\n return yield* files(\n fs,\n git,\n cwd,\n ref,\n merge(\n list,\n extra.filter((item) => item.code === \"??\"),\n ),\n nums(stats),\n )\n })\n\n export const Mode = z.enum([\"git\", \"branch\"])\n export type Mode = z.infer<typeof Mode>\n\n export const Event = {\n BranchUpdated: BusEvent.define(\n \"vcs.branch.updated\",\n z.object({\n branch: z.string().optional(),\n }),\n ),\n }\n\n export const Info = z\n .object({\n branch: z.string().optional(),\n default_branch: z.string().optional(),\n })\n .meta({\n ref: \"VcsInfo\",\n })\n export type Info = z.infer<typeof Info>\n\n export interface Interface {\n readonly init: () => Effect.Effect<void>\n readonly branch: () => Effect.Effect<string | undefined>\n readonly defaultBranch: () => Effect.Effect<string | undefined>\n readonly diff: (mode: Mode) => Effect.Effect<Snapshot.FileDiff[]>\n }\n\n interface State {\n current: string | undefined\n root: Git.Base | undefined\n }\n\n export class Service extends ServiceMap.Service<Service, Interface>()(\"@opencode/Vcs\") {}\n\n export const layer: Layer.Layer<Service, never, AppFileSystem.Service | Git.Service | Bus.Service> = Layer.effect(\n Service,\n Effect.gen(function* () {\n const fs = yield* AppFileSystem.Service\n const git = yield* Git.Service\n const bus = yield* Bus.Service\n\n const state = yield* InstanceState.make<State>(\n Effect.fn(\"Vcs.state\")((ctx) =>\n Effect.gen(function* () {\n if (ctx.project.vcs !== \"git\") {\n return { current: undefined, root: undefined }\n }\n\n const get = Effect.fnUntraced(function* () {\n return yield* git.branch(ctx.directory)\n })\n const [current, root] = yield* Effect.all([git.branch(ctx.directory), git.defaultBranch(ctx.directory)], {\n concurrency: 2,\n })\n const value = { current, root }\n log.info(\"initialized\", { branch: value.current, default_branch: value.root?.name })\n\n yield* bus.subscribe(FileWatcher.Event.Updated).pipe(\n Stream.filter((evt) => evt.properties.file.endsWith(\"HEAD\")),\n Stream.runForEach((_evt) =>\n Effect.gen(function* () {\n const next = yield* get()\n if (next !== value.current) {\n log.info(\"branch changed\", { from: value.current, to: next })\n value.current = next\n yield* bus.publish(Event.BranchUpdated, { branch: next })\n }\n }),\n ),\n Effect.forkScoped,\n )\n\n return value\n }),\n ),\n )\n\n return Service.of({\n init: Effect.fn(\"Vcs.init\")(function* () {\n yield* InstanceState.get(state)\n }),\n branch: Effect.fn(\"Vcs.branch\")(function* () {\n return yield* InstanceState.use(state, (x) => x.current)\n }),\n defaultBranch: Effect.fn(\"Vcs.defaultBranch\")(function* () {\n return yield* InstanceState.use(state, (x) => x.root?.name)\n }),\n diff: Effect.fn(\"Vcs.diff\")(function* (mode: Mode) {\n const value = yield* InstanceState.get(state)\n if (Instance.project.vcs !== \"git\") return []\n if (mode === \"git\") {\n return yield* track(\n fs,\n git,\n Instance.directory,\n (yield* git.hasHead(Instance.directory)) ? \"HEAD\" : undefined,\n )\n }\n\n if (!value.root) return []\n if (value.current && value.current === value.root.name) return []\n const ref = yield* git.mergeBase(Instance.directory, value.root.ref)\n if (!ref) return []\n return yield* compare(fs, git, Instance.directory, ref)\n }),\n })\n }),\n )\n\n const defaultLayer = layer.pipe(\n Layer.provide(Git.defaultLayer),\n Layer.provide(AppFileSystem.defaultLayer),\n Layer.provide(Bus.layer),\n )\n\n const { runPromise } = makeRuntime(Service, defaultLayer)\n\n export async function init() {\n return runPromise((svc) => svc.init())\n }\n\n export async function branch() {\n return runPromise((svc) => svc.branch())\n }\n\n export async function defaultBranch() {\n return runPromise((svc) => svc.defaultBranch())\n }\n\n export async function diff(mode: Mode) {\n return runPromise((svc) => svc.diff(mode))\n }\n}\n", "import { Plugin } from \"../plugin\"\nimport { Format } from \"../format\"\nimport { LSP } from \"../lsp\"\nimport { File } from \"../file\"\nimport { FileWatcher } from \"../file/watcher\"\nimport { Snapshot } from \"../snapshot\"\nimport { Project } from \"./project\"\nimport { Vcs } from \"./vcs\"\nimport { Bus } from \"../bus\"\nimport { Command } from \"../command\"\nimport { Instance } from \"./instance\"\nimport { Log } from \"@/util/log\"\nimport { ShareNext } from \"@/share/share-next\"\n\nexport async function InstanceBootstrap() {\n Log.Default.info(\"bootstrapping\", { directory: Instance.directory })\n await Plugin.init()\n ShareNext.init()\n Format.init()\n await LSP.init()\n File.init()\n FileWatcher.init()\n Vcs.init()\n Snapshot.init()\n\n Bus.subscribe(Command.Event.Executed, async (payload) => {\n if (payload.properties.name === Command.Default.INIT) {\n Project.setInitialized(Instance.project.id)\n }\n })\n}\n", "import z from \"zod\"\nimport { ProjectID } from \"@/project/schema\"\nimport { WorkspaceID } from \"./schema\"\n\nexport const WorkspaceInfo = z.object({\n id: WorkspaceID.zod,\n type: z.string(),\n branch: z.string().nullable(),\n name: z.string().nullable(),\n directory: z.string().nullable(),\n extra: z.unknown().nullable(),\n projectID: ProjectID.zod,\n})\nexport type WorkspaceInfo = z.infer<typeof WorkspaceInfo>\n\nexport type Target =\n | {\n type: \"local\"\n directory: string\n }\n | {\n type: \"remote\"\n url: string | URL\n headers?: HeadersInit\n }\n\nexport type Adaptor = {\n configure(input: WorkspaceInfo): WorkspaceInfo | Promise<WorkspaceInfo>\n create(config: WorkspaceInfo, from?: WorkspaceInfo): Promise<void>\n remove(config: WorkspaceInfo): Promise<void>\n target(config: WorkspaceInfo): Target | Promise<Target>\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["z", "Vcs", "defaultLayer", "Effect", "Layer", "ServiceMap", "Stream", "Worktree", "z", "ServiceMap", "Layer", "Effect", "Stream", "makeWorktreeInfo", "createFromInfo", "create", "remove", "project", "reset", "defaultLayer", "z", "z"]
|
|
7
|
-
}
|
package/dist/chunk-SNATISLF.js
DELETED
|
@@ -1,319 +0,0 @@
|
|
|
1
|
-
// Built by esbuild from opencode-server source
|
|
2
|
-
if (typeof globalThis.Bun === 'undefined') {
|
|
3
|
-
globalThis.Bun = {
|
|
4
|
-
version: '0.0.0-node-compat',
|
|
5
|
-
stdin: { async text() { const chunks = []; for await (const c of process.stdin) chunks.push(c); return Buffer.concat(chunks).toString(); } },
|
|
6
|
-
which(cmd) { try { return require('child_process').execFileSync('which', [cmd], { encoding: 'utf8' }).trim(); } catch { return null; } },
|
|
7
|
-
};
|
|
8
|
-
}
|
|
9
|
-
if (typeof globalThis.__name === 'undefined') { globalThis.__name = (t, n) => { Object.defineProperty(t, 'name', { value: n, configurable: true }); return t; }; }
|
|
10
|
-
if (typeof globalThis.__export === 'undefined') { globalThis.__export = (t, a) => { for (const k in a) Object.defineProperty(t, k, { get: a[k], enumerable: true }); }; }
|
|
11
|
-
|
|
12
|
-
import {
|
|
13
|
-
MessageV2,
|
|
14
|
-
ModelID,
|
|
15
|
-
Provider,
|
|
16
|
-
ProviderID,
|
|
17
|
-
Session
|
|
18
|
-
} from "./chunk-6UDEKTJV.js";
|
|
19
|
-
import {
|
|
20
|
-
Account,
|
|
21
|
-
Bus,
|
|
22
|
-
Config
|
|
23
|
-
} from "./chunk-YX3AWX2A.js";
|
|
24
|
-
import {
|
|
25
|
-
Database,
|
|
26
|
-
InstanceState,
|
|
27
|
-
Log,
|
|
28
|
-
SessionTable,
|
|
29
|
-
Timestamps,
|
|
30
|
-
db_exports,
|
|
31
|
-
makeRuntime
|
|
32
|
-
} from "./chunk-J4KUHHYM.js";
|
|
33
|
-
|
|
34
|
-
// packages/opencode/src/share/share-next.ts
|
|
35
|
-
import { Effect, Exit, Layer, Option, Schema, Scope, ServiceMap, Stream } from "effect";
|
|
36
|
-
import { FetchHttpClient, HttpClient, HttpClientRequest, HttpClientResponse } from "effect/unstable/http";
|
|
37
|
-
|
|
38
|
-
// packages/opencode/src/share/share.sql.ts
|
|
39
|
-
import { sqliteTable, text } from "drizzle-orm/sqlite-core";
|
|
40
|
-
var SessionShareTable = sqliteTable("session_share", {
|
|
41
|
-
session_id: text().primaryKey().references(() => SessionTable.id, { onDelete: "cascade" }),
|
|
42
|
-
id: text().notNull(),
|
|
43
|
-
secret: text().notNull(),
|
|
44
|
-
url: text().notNull(),
|
|
45
|
-
...Timestamps
|
|
46
|
-
});
|
|
47
|
-
|
|
48
|
-
// packages/opencode/src/share/share-next.ts
|
|
49
|
-
var ShareNext;
|
|
50
|
-
((ShareNext2) => {
|
|
51
|
-
const log = Log.create({ service: "share-next" });
|
|
52
|
-
const disabled = process.env["OPENCODE_DISABLE_SHARE"] === "true" || process.env["OPENCODE_DISABLE_SHARE"] === "1";
|
|
53
|
-
const ShareSchema = Schema.Struct({
|
|
54
|
-
id: Schema.String,
|
|
55
|
-
url: Schema.String,
|
|
56
|
-
secret: Schema.String
|
|
57
|
-
});
|
|
58
|
-
class Service extends ServiceMap.Service()("@opencode/ShareNext") {
|
|
59
|
-
}
|
|
60
|
-
ShareNext2.Service = Service;
|
|
61
|
-
const db = (fn) => Effect.sync(() => Database.use(fn));
|
|
62
|
-
function api(resource) {
|
|
63
|
-
return {
|
|
64
|
-
create: `/api/${resource}`,
|
|
65
|
-
sync: (shareID) => `/api/${resource}/${shareID}/sync`,
|
|
66
|
-
remove: (shareID) => `/api/${resource}/${shareID}`,
|
|
67
|
-
data: (shareID) => `/api/${resource}/${shareID}/data`
|
|
68
|
-
};
|
|
69
|
-
}
|
|
70
|
-
const legacyApi = api("share");
|
|
71
|
-
const consoleApi = api("shares");
|
|
72
|
-
function key(item) {
|
|
73
|
-
switch (item.type) {
|
|
74
|
-
case "session":
|
|
75
|
-
return "session";
|
|
76
|
-
case "message":
|
|
77
|
-
return `message/${item.data.id}`;
|
|
78
|
-
case "part":
|
|
79
|
-
return `part/${item.data.messageID}/${item.data.id}`;
|
|
80
|
-
case "session_diff":
|
|
81
|
-
return "session_diff";
|
|
82
|
-
case "model":
|
|
83
|
-
return "model";
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
ShareNext2.layer = Layer.effect(
|
|
87
|
-
Service,
|
|
88
|
-
Effect.gen(function* () {
|
|
89
|
-
const account = yield* Account.Service;
|
|
90
|
-
const bus = yield* Bus.Service;
|
|
91
|
-
const cfg = yield* Config.Service;
|
|
92
|
-
const http = yield* HttpClient.HttpClient;
|
|
93
|
-
const httpOk = HttpClient.filterStatusOk(http);
|
|
94
|
-
const provider = yield* Provider.Service;
|
|
95
|
-
const session = yield* Session.Service;
|
|
96
|
-
function sync(sessionID, data) {
|
|
97
|
-
return Effect.gen(function* () {
|
|
98
|
-
if (disabled) return;
|
|
99
|
-
const s = yield* InstanceState.get(state);
|
|
100
|
-
const existing = s.queue.get(sessionID);
|
|
101
|
-
if (existing) {
|
|
102
|
-
for (const item of data) {
|
|
103
|
-
existing.data.set(key(item), item);
|
|
104
|
-
}
|
|
105
|
-
return;
|
|
106
|
-
}
|
|
107
|
-
const next = new Map(data.map((item) => [key(item), item]));
|
|
108
|
-
s.queue.set(sessionID, { data: next });
|
|
109
|
-
yield* flush(sessionID).pipe(
|
|
110
|
-
Effect.delay(1e3),
|
|
111
|
-
Effect.catchCause(
|
|
112
|
-
(cause) => Effect.sync(() => {
|
|
113
|
-
log.error("share flush failed", { sessionID, cause });
|
|
114
|
-
})
|
|
115
|
-
),
|
|
116
|
-
Effect.forkIn(s.scope)
|
|
117
|
-
);
|
|
118
|
-
});
|
|
119
|
-
}
|
|
120
|
-
const state = yield* InstanceState.make(
|
|
121
|
-
Effect.fn("ShareNext.state")(function* (_ctx) {
|
|
122
|
-
const cache = { queue: /* @__PURE__ */ new Map(), scope: yield* Scope.make() };
|
|
123
|
-
yield* Effect.addFinalizer(
|
|
124
|
-
() => Scope.close(cache.scope, Exit.void).pipe(
|
|
125
|
-
Effect.andThen(
|
|
126
|
-
Effect.sync(() => {
|
|
127
|
-
cache.queue.clear();
|
|
128
|
-
})
|
|
129
|
-
)
|
|
130
|
-
)
|
|
131
|
-
);
|
|
132
|
-
if (disabled) return cache;
|
|
133
|
-
const watch = (def, fn) => bus.subscribe(def).pipe(
|
|
134
|
-
Stream.runForEach(
|
|
135
|
-
(evt) => fn(evt).pipe(
|
|
136
|
-
Effect.catchCause(
|
|
137
|
-
(cause) => Effect.sync(() => {
|
|
138
|
-
log.error("share subscriber failed", { type: def.type, cause });
|
|
139
|
-
})
|
|
140
|
-
)
|
|
141
|
-
)
|
|
142
|
-
),
|
|
143
|
-
Effect.forkScoped
|
|
144
|
-
);
|
|
145
|
-
yield* watch(
|
|
146
|
-
Session.Event.Updated,
|
|
147
|
-
(evt) => Effect.gen(function* () {
|
|
148
|
-
const info = yield* session.get(evt.properties.sessionID);
|
|
149
|
-
yield* sync(info.id, [{ type: "session", data: info }]);
|
|
150
|
-
})
|
|
151
|
-
);
|
|
152
|
-
yield* watch(
|
|
153
|
-
MessageV2.Event.Updated,
|
|
154
|
-
(evt) => Effect.gen(function* () {
|
|
155
|
-
const info = evt.properties.info;
|
|
156
|
-
yield* sync(info.sessionID, [{ type: "message", data: info }]);
|
|
157
|
-
if (info.role !== "user") return;
|
|
158
|
-
const model = yield* provider.getModel(info.model.providerID, info.model.modelID);
|
|
159
|
-
yield* sync(info.sessionID, [{ type: "model", data: [model] }]);
|
|
160
|
-
})
|
|
161
|
-
);
|
|
162
|
-
yield* watch(
|
|
163
|
-
MessageV2.Event.PartUpdated,
|
|
164
|
-
(evt) => sync(evt.properties.part.sessionID, [{ type: "part", data: evt.properties.part }])
|
|
165
|
-
);
|
|
166
|
-
yield* watch(
|
|
167
|
-
Session.Event.Diff,
|
|
168
|
-
(evt) => sync(evt.properties.sessionID, [{ type: "session_diff", data: evt.properties.diff }])
|
|
169
|
-
);
|
|
170
|
-
return cache;
|
|
171
|
-
})
|
|
172
|
-
);
|
|
173
|
-
const request2 = Effect.fn("ShareNext.request")(function* () {
|
|
174
|
-
const headers = {};
|
|
175
|
-
const active = yield* account.active();
|
|
176
|
-
if (Option.isNone(active) || !active.value.active_org_id) {
|
|
177
|
-
const baseUrl = (yield* cfg.get()).enterprise?.url ?? "https://opncd.ai";
|
|
178
|
-
return { headers, api: legacyApi, baseUrl };
|
|
179
|
-
}
|
|
180
|
-
const token = yield* account.token(active.value.id);
|
|
181
|
-
if (Option.isNone(token)) {
|
|
182
|
-
throw new Error("No active account token available for sharing");
|
|
183
|
-
}
|
|
184
|
-
headers.authorization = `Bearer ${token.value}`;
|
|
185
|
-
headers["x-org-id"] = active.value.active_org_id;
|
|
186
|
-
return { headers, api: consoleApi, baseUrl: active.value.url };
|
|
187
|
-
});
|
|
188
|
-
const get = Effect.fnUntraced(function* (sessionID) {
|
|
189
|
-
const row = yield* db(
|
|
190
|
-
(db2) => db2.select().from(SessionShareTable).where((0, db_exports.eq)(SessionShareTable.session_id, sessionID)).get()
|
|
191
|
-
);
|
|
192
|
-
if (!row) return;
|
|
193
|
-
return { id: row.id, secret: row.secret, url: row.url };
|
|
194
|
-
});
|
|
195
|
-
const flush = Effect.fn("ShareNext.flush")(function* (sessionID) {
|
|
196
|
-
if (disabled) return;
|
|
197
|
-
const s = yield* InstanceState.get(state);
|
|
198
|
-
const queued = s.queue.get(sessionID);
|
|
199
|
-
if (!queued) return;
|
|
200
|
-
s.queue.delete(sessionID);
|
|
201
|
-
const share = yield* get(sessionID);
|
|
202
|
-
if (!share) return;
|
|
203
|
-
const req = yield* request2();
|
|
204
|
-
const res = yield* HttpClientRequest.post(`${req.baseUrl}${req.api.sync(share.id)}`).pipe(
|
|
205
|
-
HttpClientRequest.setHeaders(req.headers),
|
|
206
|
-
HttpClientRequest.bodyJson({ secret: share.secret, data: Array.from(queued.data.values()) }),
|
|
207
|
-
Effect.flatMap((r) => http.execute(r))
|
|
208
|
-
);
|
|
209
|
-
if (res.status >= 400) {
|
|
210
|
-
log.warn("failed to sync share", { sessionID, shareID: share.id, status: res.status });
|
|
211
|
-
}
|
|
212
|
-
});
|
|
213
|
-
const full = Effect.fn("ShareNext.full")(function* (sessionID) {
|
|
214
|
-
log.info("full sync", { sessionID });
|
|
215
|
-
const info = yield* session.get(sessionID);
|
|
216
|
-
const diffs = yield* session.diff(sessionID);
|
|
217
|
-
const messages = yield* Effect.sync(() => Array.from(MessageV2.stream(sessionID)));
|
|
218
|
-
const models = yield* Effect.forEach(
|
|
219
|
-
Array.from(
|
|
220
|
-
new Map(
|
|
221
|
-
messages.filter((msg) => msg.info.role === "user").map((msg) => msg.info.model).map((item) => [`${item.providerID}/${item.modelID}`, item])
|
|
222
|
-
).values()
|
|
223
|
-
),
|
|
224
|
-
(item) => provider.getModel(ProviderID.make(item.providerID), ModelID.make(item.modelID)),
|
|
225
|
-
{ concurrency: 8 }
|
|
226
|
-
);
|
|
227
|
-
yield* sync(sessionID, [
|
|
228
|
-
{ type: "session", data: info },
|
|
229
|
-
...messages.map((item) => ({ type: "message", data: item.info })),
|
|
230
|
-
...messages.flatMap((item) => item.parts.map((part) => ({ type: "part", data: part }))),
|
|
231
|
-
{ type: "session_diff", data: diffs },
|
|
232
|
-
{ type: "model", data: models }
|
|
233
|
-
]);
|
|
234
|
-
});
|
|
235
|
-
const init2 = Effect.fn("ShareNext.init")(function* () {
|
|
236
|
-
if (disabled) return;
|
|
237
|
-
yield* InstanceState.get(state);
|
|
238
|
-
});
|
|
239
|
-
const url2 = Effect.fn("ShareNext.url")(function* () {
|
|
240
|
-
return (yield* request2()).baseUrl;
|
|
241
|
-
});
|
|
242
|
-
const create2 = Effect.fn("ShareNext.create")(function* (sessionID) {
|
|
243
|
-
if (disabled) return { id: "", url: "", secret: "" };
|
|
244
|
-
log.info("creating share", { sessionID });
|
|
245
|
-
const req = yield* request2();
|
|
246
|
-
const result = yield* HttpClientRequest.post(`${req.baseUrl}${req.api.create}`).pipe(
|
|
247
|
-
HttpClientRequest.setHeaders(req.headers),
|
|
248
|
-
HttpClientRequest.bodyJson({ sessionID }),
|
|
249
|
-
Effect.flatMap((r) => httpOk.execute(r)),
|
|
250
|
-
Effect.flatMap(HttpClientResponse.schemaBodyJson(ShareSchema))
|
|
251
|
-
);
|
|
252
|
-
yield* db(
|
|
253
|
-
(db2) => db2.insert(SessionShareTable).values({ session_id: sessionID, id: result.id, secret: result.secret, url: result.url }).onConflictDoUpdate({
|
|
254
|
-
target: SessionShareTable.session_id,
|
|
255
|
-
set: { id: result.id, secret: result.secret, url: result.url }
|
|
256
|
-
}).run()
|
|
257
|
-
);
|
|
258
|
-
const s = yield* InstanceState.get(state);
|
|
259
|
-
yield* full(sessionID).pipe(
|
|
260
|
-
Effect.catchCause(
|
|
261
|
-
(cause) => Effect.sync(() => {
|
|
262
|
-
log.error("share full sync failed", { sessionID, cause });
|
|
263
|
-
})
|
|
264
|
-
),
|
|
265
|
-
Effect.forkIn(s.scope)
|
|
266
|
-
);
|
|
267
|
-
return result;
|
|
268
|
-
});
|
|
269
|
-
const remove2 = Effect.fn("ShareNext.remove")(function* (sessionID) {
|
|
270
|
-
if (disabled) return;
|
|
271
|
-
log.info("removing share", { sessionID });
|
|
272
|
-
const share = yield* get(sessionID);
|
|
273
|
-
if (!share) return;
|
|
274
|
-
const req = yield* request2();
|
|
275
|
-
yield* HttpClientRequest.delete(`${req.baseUrl}${req.api.remove(share.id)}`).pipe(
|
|
276
|
-
HttpClientRequest.setHeaders(req.headers),
|
|
277
|
-
HttpClientRequest.bodyJson({ secret: share.secret }),
|
|
278
|
-
Effect.flatMap((r) => httpOk.execute(r))
|
|
279
|
-
);
|
|
280
|
-
yield* db((db2) => db2.delete(SessionShareTable).where((0, db_exports.eq)(SessionShareTable.session_id, sessionID)).run());
|
|
281
|
-
});
|
|
282
|
-
return Service.of({ init: init2, url: url2, request: request2, create: create2, remove: remove2 });
|
|
283
|
-
})
|
|
284
|
-
);
|
|
285
|
-
ShareNext2.defaultLayer = ShareNext2.layer.pipe(
|
|
286
|
-
Layer.provide(Bus.layer),
|
|
287
|
-
Layer.provide(Account.defaultLayer),
|
|
288
|
-
Layer.provide(Config.defaultLayer),
|
|
289
|
-
Layer.provide(FetchHttpClient.layer),
|
|
290
|
-
Layer.provide(Provider.defaultLayer),
|
|
291
|
-
Layer.provide(Session.defaultLayer)
|
|
292
|
-
);
|
|
293
|
-
const { runPromise } = makeRuntime(Service, ShareNext2.defaultLayer);
|
|
294
|
-
async function init() {
|
|
295
|
-
return runPromise((svc) => svc.init());
|
|
296
|
-
}
|
|
297
|
-
ShareNext2.init = init;
|
|
298
|
-
async function url() {
|
|
299
|
-
return runPromise((svc) => svc.url());
|
|
300
|
-
}
|
|
301
|
-
ShareNext2.url = url;
|
|
302
|
-
async function request() {
|
|
303
|
-
return runPromise((svc) => svc.request());
|
|
304
|
-
}
|
|
305
|
-
ShareNext2.request = request;
|
|
306
|
-
async function create(sessionID) {
|
|
307
|
-
return runPromise((svc) => svc.create(sessionID));
|
|
308
|
-
}
|
|
309
|
-
ShareNext2.create = create;
|
|
310
|
-
async function remove(sessionID) {
|
|
311
|
-
return runPromise((svc) => svc.remove(sessionID));
|
|
312
|
-
}
|
|
313
|
-
ShareNext2.remove = remove;
|
|
314
|
-
})(ShareNext || (ShareNext = {}));
|
|
315
|
-
|
|
316
|
-
export {
|
|
317
|
-
ShareNext
|
|
318
|
-
};
|
|
319
|
-
//# sourceMappingURL=chunk-SNATISLF.js.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../packages/opencode/src/share/share-next.ts", "../packages/opencode/src/share/share.sql.ts"],
|
|
4
|
-
"sourcesContent": ["import type * as SDK from \"@opencode-ai/sdk/v2\"\nimport { Effect, Exit, Layer, Option, Schema, Scope, ServiceMap, Stream } from \"effect\"\nimport { FetchHttpClient, HttpClient, HttpClientRequest, HttpClientResponse } from \"effect/unstable/http\"\nimport { Account } from \"@/account\"\nimport { Bus } from \"@/bus\"\nimport { InstanceState } from \"@/effect/instance-state\"\nimport { makeRuntime } from \"@/effect/run-service\"\nimport { Provider } from \"@/provider/provider\"\nimport { ModelID, ProviderID } from \"@/provider/schema\"\nimport { Session } from \"@/session\"\nimport { MessageV2 } from \"@/session/message-v2\"\nimport type { SessionID } from \"@/session/schema\"\nimport { Database, eq } from \"@/storage/db\"\nimport { Config } from \"@/config/config\"\nimport { Log } from \"@/util/log\"\nimport { SessionShareTable } from \"./share.sql\"\n\nexport namespace ShareNext {\n const log = Log.create({ service: \"share-next\" })\n const disabled = process.env[\"OPENCODE_DISABLE_SHARE\"] === \"true\" || process.env[\"OPENCODE_DISABLE_SHARE\"] === \"1\"\n\n export type Api = {\n create: string\n sync: (shareID: string) => string\n remove: (shareID: string) => string\n data: (shareID: string) => string\n }\n\n export type Req = {\n headers: Record<string, string>\n api: Api\n baseUrl: string\n }\n\n const ShareSchema = Schema.Struct({\n id: Schema.String,\n url: Schema.String,\n secret: Schema.String,\n })\n export type Share = typeof ShareSchema.Type\n\n type State = {\n queue: Map<string, { data: Map<string, Data> }>\n scope: Scope.Closeable\n }\n\n type Data =\n | {\n type: \"session\"\n data: SDK.Session\n }\n | {\n type: \"message\"\n data: SDK.Message\n }\n | {\n type: \"part\"\n data: SDK.Part\n }\n | {\n type: \"session_diff\"\n data: SDK.FileDiff[]\n }\n | {\n type: \"model\"\n data: SDK.Model[]\n }\n\n export interface Interface {\n readonly init: () => Effect.Effect<void, unknown>\n readonly url: () => Effect.Effect<string, unknown>\n readonly request: () => Effect.Effect<Req, unknown>\n readonly create: (sessionID: SessionID) => Effect.Effect<Share, unknown>\n readonly remove: (sessionID: SessionID) => Effect.Effect<void, unknown>\n }\n\n export class Service extends ServiceMap.Service<Service, Interface>()(\"@opencode/ShareNext\") {}\n\n const db = <T>(fn: (d: Parameters<typeof Database.use>[0] extends (trx: infer D) => any ? D : never) => T) =>\n Effect.sync(() => Database.use(fn))\n\n function api(resource: string): Api {\n return {\n create: `/api/${resource}`,\n sync: (shareID) => `/api/${resource}/${shareID}/sync`,\n remove: (shareID) => `/api/${resource}/${shareID}`,\n data: (shareID) => `/api/${resource}/${shareID}/data`,\n }\n }\n\n const legacyApi = api(\"share\")\n const consoleApi = api(\"shares\")\n\n function key(item: Data) {\n switch (item.type) {\n case \"session\":\n return \"session\"\n case \"message\":\n return `message/${item.data.id}`\n case \"part\":\n return `part/${item.data.messageID}/${item.data.id}`\n case \"session_diff\":\n return \"session_diff\"\n case \"model\":\n return \"model\"\n }\n }\n\n export const layer = Layer.effect(\n Service,\n Effect.gen(function* () {\n const account = yield* Account.Service\n const bus = yield* Bus.Service\n const cfg = yield* Config.Service\n const http = yield* HttpClient.HttpClient\n const httpOk = HttpClient.filterStatusOk(http)\n const provider = yield* Provider.Service\n const session = yield* Session.Service\n\n function sync(sessionID: SessionID, data: Data[]): Effect.Effect<void> {\n return Effect.gen(function* () {\n if (disabled) return\n const s = yield* InstanceState.get(state)\n const existing = s.queue.get(sessionID)\n if (existing) {\n for (const item of data) {\n existing.data.set(key(item), item)\n }\n return\n }\n\n const next = new Map(data.map((item) => [key(item), item]))\n s.queue.set(sessionID, { data: next })\n yield* flush(sessionID).pipe(\n Effect.delay(1000),\n Effect.catchCause((cause) =>\n Effect.sync(() => {\n log.error(\"share flush failed\", { sessionID, cause })\n }),\n ),\n Effect.forkIn(s.scope),\n )\n })\n }\n\n const state: InstanceState<State> = yield* InstanceState.make<State>(\n Effect.fn(\"ShareNext.state\")(function* (_ctx) {\n const cache: State = { queue: new Map(), scope: yield* Scope.make() }\n\n yield* Effect.addFinalizer(() =>\n Scope.close(cache.scope, Exit.void).pipe(\n Effect.andThen(\n Effect.sync(() => {\n cache.queue.clear()\n }),\n ),\n ),\n )\n\n if (disabled) return cache\n\n const watch = <D extends { type: string }>(def: D, fn: (evt: { properties: any }) => Effect.Effect<void>) =>\n bus.subscribe(def as never).pipe(\n Stream.runForEach((evt) =>\n fn(evt).pipe(\n Effect.catchCause((cause) =>\n Effect.sync(() => {\n log.error(\"share subscriber failed\", { type: def.type, cause })\n }),\n ),\n ),\n ),\n Effect.forkScoped,\n )\n\n yield* watch(Session.Event.Updated, (evt) =>\n Effect.gen(function* () {\n const info = yield* session.get(evt.properties.sessionID)\n yield* sync(info.id, [{ type: \"session\", data: info }])\n }),\n )\n yield* watch(MessageV2.Event.Updated, (evt) =>\n Effect.gen(function* () {\n const info = evt.properties.info\n yield* sync(info.sessionID, [{ type: \"message\", data: info }])\n if (info.role !== \"user\") return\n const model = yield* provider.getModel(info.model.providerID, info.model.modelID)\n yield* sync(info.sessionID, [{ type: \"model\", data: [model] }])\n }),\n )\n yield* watch(MessageV2.Event.PartUpdated, (evt) =>\n sync(evt.properties.part.sessionID, [{ type: \"part\", data: evt.properties.part }]),\n )\n yield* watch(Session.Event.Diff, (evt) =>\n sync(evt.properties.sessionID, [{ type: \"session_diff\", data: evt.properties.diff }]),\n )\n\n return cache\n }),\n )\n\n const request = Effect.fn(\"ShareNext.request\")(function* () {\n const headers: Record<string, string> = {}\n const active = yield* account.active()\n if (Option.isNone(active) || !active.value.active_org_id) {\n const baseUrl = (yield* cfg.get()).enterprise?.url ?? \"https://opncd.ai\"\n return { headers, api: legacyApi, baseUrl } satisfies Req\n }\n\n const token = yield* account.token(active.value.id)\n if (Option.isNone(token)) {\n throw new Error(\"No active account token available for sharing\")\n }\n\n headers.authorization = `Bearer ${token.value}`\n headers[\"x-org-id\"] = active.value.active_org_id\n return { headers, api: consoleApi, baseUrl: active.value.url } satisfies Req\n })\n\n const get = Effect.fnUntraced(function* (sessionID: SessionID) {\n const row = yield* db((db) =>\n db.select().from(SessionShareTable).where(eq(SessionShareTable.session_id, sessionID)).get(),\n )\n if (!row) return\n return { id: row.id, secret: row.secret, url: row.url } satisfies Share\n })\n\n const flush = Effect.fn(\"ShareNext.flush\")(function* (sessionID: SessionID) {\n if (disabled) return\n const s = yield* InstanceState.get(state)\n const queued = s.queue.get(sessionID)\n if (!queued) return\n\n s.queue.delete(sessionID)\n\n const share = yield* get(sessionID)\n if (!share) return\n\n const req = yield* request()\n const res = yield* HttpClientRequest.post(`${req.baseUrl}${req.api.sync(share.id)}`).pipe(\n HttpClientRequest.setHeaders(req.headers),\n HttpClientRequest.bodyJson({ secret: share.secret, data: Array.from(queued.data.values()) }),\n Effect.flatMap((r) => http.execute(r)),\n )\n\n if (res.status >= 400) {\n log.warn(\"failed to sync share\", { sessionID, shareID: share.id, status: res.status })\n }\n })\n\n const full = Effect.fn(\"ShareNext.full\")(function* (sessionID: SessionID) {\n log.info(\"full sync\", { sessionID })\n const info = yield* session.get(sessionID)\n const diffs = yield* session.diff(sessionID)\n const messages = yield* Effect.sync(() => Array.from(MessageV2.stream(sessionID)))\n const models = yield* Effect.forEach(\n Array.from(\n new Map(\n messages\n .filter((msg) => msg.info.role === \"user\")\n .map((msg) => (msg.info as SDK.UserMessage).model)\n .map((item) => [`${item.providerID}/${item.modelID}`, item] as const),\n ).values(),\n ),\n (item) => provider.getModel(ProviderID.make(item.providerID), ModelID.make(item.modelID)),\n { concurrency: 8 },\n )\n\n yield* sync(sessionID, [\n { type: \"session\", data: info },\n ...messages.map((item) => ({ type: \"message\" as const, data: item.info })),\n ...messages.flatMap((item) => item.parts.map((part) => ({ type: \"part\" as const, data: part }))),\n { type: \"session_diff\", data: diffs },\n { type: \"model\", data: models },\n ])\n })\n\n const init = Effect.fn(\"ShareNext.init\")(function* () {\n if (disabled) return\n yield* InstanceState.get(state)\n })\n\n const url = Effect.fn(\"ShareNext.url\")(function* () {\n return (yield* request()).baseUrl\n })\n\n const create = Effect.fn(\"ShareNext.create\")(function* (sessionID: SessionID) {\n if (disabled) return { id: \"\", url: \"\", secret: \"\" }\n log.info(\"creating share\", { sessionID })\n const req = yield* request()\n const result = yield* HttpClientRequest.post(`${req.baseUrl}${req.api.create}`).pipe(\n HttpClientRequest.setHeaders(req.headers),\n HttpClientRequest.bodyJson({ sessionID }),\n Effect.flatMap((r) => httpOk.execute(r)),\n Effect.flatMap(HttpClientResponse.schemaBodyJson(ShareSchema)),\n )\n yield* db((db) =>\n db\n .insert(SessionShareTable)\n .values({ session_id: sessionID, id: result.id, secret: result.secret, url: result.url })\n .onConflictDoUpdate({\n target: SessionShareTable.session_id,\n set: { id: result.id, secret: result.secret, url: result.url },\n })\n .run(),\n )\n const s = yield* InstanceState.get(state)\n yield* full(sessionID).pipe(\n Effect.catchCause((cause) =>\n Effect.sync(() => {\n log.error(\"share full sync failed\", { sessionID, cause })\n }),\n ),\n Effect.forkIn(s.scope),\n )\n return result\n })\n\n const remove = Effect.fn(\"ShareNext.remove\")(function* (sessionID: SessionID) {\n if (disabled) return\n log.info(\"removing share\", { sessionID })\n const share = yield* get(sessionID)\n if (!share) return\n\n const req = yield* request()\n yield* HttpClientRequest.delete(`${req.baseUrl}${req.api.remove(share.id)}`).pipe(\n HttpClientRequest.setHeaders(req.headers),\n HttpClientRequest.bodyJson({ secret: share.secret }),\n Effect.flatMap((r) => httpOk.execute(r)),\n )\n\n yield* db((db) => db.delete(SessionShareTable).where(eq(SessionShareTable.session_id, sessionID)).run())\n })\n\n return Service.of({ init, url, request, create, remove })\n }),\n )\n\n export const defaultLayer = layer.pipe(\n Layer.provide(Bus.layer),\n Layer.provide(Account.defaultLayer),\n Layer.provide(Config.defaultLayer),\n Layer.provide(FetchHttpClient.layer),\n Layer.provide(Provider.defaultLayer),\n Layer.provide(Session.defaultLayer),\n )\n\n const { runPromise } = makeRuntime(Service, defaultLayer)\n\n export async function init() {\n return runPromise((svc) => svc.init())\n }\n\n export async function url() {\n return runPromise((svc) => svc.url())\n }\n\n export async function request(): Promise<Req> {\n return runPromise((svc) => svc.request())\n }\n\n export async function create(sessionID: SessionID) {\n return runPromise((svc) => svc.create(sessionID))\n }\n\n export async function remove(sessionID: SessionID) {\n return runPromise((svc) => svc.remove(sessionID))\n }\n}\n", "import { sqliteTable, text } from \"drizzle-orm/sqlite-core\"\nimport { SessionTable } from \"../session/session.sql\"\nimport { Timestamps } from \"../storage/schema.sql\"\n\nexport const SessionShareTable = sqliteTable(\"session_share\", {\n session_id: text()\n .primaryKey()\n .references(() => SessionTable.id, { onDelete: \"cascade\" }),\n id: text().notNull(),\n secret: text().notNull(),\n url: text().notNull(),\n ...Timestamps,\n})\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["ShareNext", "request", "db", "init", "url", "create", "remove"]
|
|
7
|
-
}
|