From 6272c779123154b774f0a967b10572c404395083 Mon Sep 17 00:00:00 2001 From: "opencode-agent[bot]" Date: Thu, 2 Jul 2026 06:20:58 +0000 Subject: [PATCH] chore(server): publish api package --- packages/server/package.json | 9 ++++ packages/server/script/publish.ts | 52 +++++++++++++++++++ packages/server/src/api.ts | 3 +- packages/server/src/location.ts | 6 +-- packages/server/src/middleware/location.ts | 13 +++++ .../server/src/middleware/session-location.ts | 10 +--- packages/server/tsconfig.publish.json | 14 +++++ script/publish.ts | 3 ++ 8 files changed, 94 insertions(+), 16 deletions(-) create mode 100644 packages/server/script/publish.ts create mode 100644 packages/server/src/middleware/location.ts create mode 100644 packages/server/tsconfig.publish.json diff --git a/packages/server/package.json b/packages/server/package.json index 86e5683dcf..3d7191d532 100644 --- a/packages/server/package.json +++ b/packages/server/package.json @@ -5,10 +5,19 @@ "private": true, "type": "module", "license": "MIT", + "repository": { + "type": "git", + "url": "git+https://github.com/anomalyco/opencode.git", + "directory": "packages/server" + }, + "publishConfig": { + "access": "public" + }, "exports": { "./*": "./src/*.ts" }, "scripts": { + "build:publish": "bun tsc -p tsconfig.publish.json", "typecheck": "tsgo --noEmit" }, "dependencies": { diff --git a/packages/server/script/publish.ts b/packages/server/script/publish.ts new file mode 100644 index 0000000000..f0a3092366 --- /dev/null +++ b/packages/server/script/publish.ts @@ -0,0 +1,52 @@ +#!/usr/bin/env bun + +import { Script } from "@opencode-ai/script" +import { $ } from "bun" +import { rm } from "node:fs/promises" +import { fileURLToPath } from "node:url" + +process.chdir(fileURLToPath(new URL("..", import.meta.url))) + +const originalText = await Bun.file("package.json").text() +const pkg = JSON.parse(originalText) as { + name: string + version: string + private?: boolean + files?: Array + scripts?: Record + dependencies: Record + devDependencies?: Record + exports: Record +} +const tarball = `${pkg.name.replace("@", "").replace("/", "-")}-${pkg.version}.tgz` + +if ((await $`npm view ${pkg.name}@${pkg.version} version`.nothrow()).exitCode === 0) { + console.log(`already published ${pkg.name}@${pkg.version}`) + process.exit(0) +} + +try { + await $`rm -rf dist` + await $`bun run build:publish` + delete pkg.private + delete pkg.scripts + delete pkg.devDependencies + pkg.files = ["dist"] + pkg.exports = { + "./api": { + import: "./dist/api.js", + types: "./dist/api.d.ts", + }, + } + pkg.dependencies = { + "@opencode-ai/protocol": pkg.dependencies["@opencode-ai/protocol"], + effect: pkg.dependencies.effect, + } + await Bun.write("package.json", JSON.stringify(pkg, null, 2) + "\n") + await rm(tarball, { force: true }) + await $`bun pm pack` + await $`npm publish ${tarball} --tag ${Script.channel} --access public` +} finally { + await Bun.write("package.json", originalText) + await rm(tarball, { force: true }) +} diff --git a/packages/server/src/api.ts b/packages/server/src/api.ts index 981ad28db9..7f03cf8fc4 100644 --- a/packages/server/src/api.ts +++ b/packages/server/src/api.ts @@ -1,6 +1,5 @@ import { makeDefaultApi } from "@opencode-ai/protocol/api" -import { LocationMiddleware } from "./location" -import { SessionLocationMiddleware } from "./middleware/session-location" +import { LocationMiddleware, SessionLocationMiddleware } from "./middleware/location.js" export const Api = makeDefaultApi({ locationMiddleware: LocationMiddleware, diff --git a/packages/server/src/location.ts b/packages/server/src/location.ts index 8ae5aa6e6d..2090770d0a 100644 --- a/packages/server/src/location.ts +++ b/packages/server/src/location.ts @@ -4,14 +4,10 @@ import { AbsolutePath } from "@opencode-ai/core/schema" import { WorkspaceV2 } from "@opencode-ai/core/workspace" import { Effect, Layer } from "effect" import { HttpServerRequest } from "effect/unstable/http" -import { HttpApiMiddleware } from "effect/unstable/httpapi" +import { LocationMiddleware } from "./middleware/location.js" export type LocationServices = Layer.Success> -export class LocationMiddleware extends HttpApiMiddleware.Service()( - "@opencode/HttpApiLocation", -) {} - export function response(data: Effect.Effect) { return Effect.gen(function* () { const location = yield* Location.Service diff --git a/packages/server/src/middleware/location.ts b/packages/server/src/middleware/location.ts new file mode 100644 index 0000000000..d5b62cde95 --- /dev/null +++ b/packages/server/src/middleware/location.ts @@ -0,0 +1,13 @@ +import { InvalidRequestError, SessionNotFoundError } from "@opencode-ai/protocol/errors" +import { HttpApiMiddleware } from "effect/unstable/httpapi" + +export class LocationMiddleware extends HttpApiMiddleware.Service()( + "@opencode/HttpApiLocation", +) {} + +export class SessionLocationMiddleware extends HttpApiMiddleware.Service()( + "@opencode/HttpApiSessionLocation", + { + error: [InvalidRequestError, SessionNotFoundError], + }, +) {} diff --git a/packages/server/src/middleware/session-location.ts b/packages/server/src/middleware/session-location.ts index 86fa80f75c..0e733d736e 100644 --- a/packages/server/src/middleware/session-location.ts +++ b/packages/server/src/middleware/session-location.ts @@ -8,16 +8,8 @@ import { WorkspaceV2 } from "@opencode-ai/core/workspace" import { eq } from "drizzle-orm" import { Effect, Layer, Schema } from "effect" import { HttpRouter } from "effect/unstable/http" -import { HttpApiMiddleware } from "effect/unstable/httpapi" import { InvalidRequestError, SessionNotFoundError } from "@opencode-ai/protocol/errors" -import type { LocationServices } from "../location" - -export class SessionLocationMiddleware extends HttpApiMiddleware.Service< - SessionLocationMiddleware, - { provides: LocationServices } ->()("@opencode/HttpApiSessionLocation", { - error: [InvalidRequestError, SessionNotFoundError], -}) {} +import { SessionLocationMiddleware } from "./location.js" const decodeSessionID = Schema.decodeUnknownEffect(SessionV2.ID) diff --git a/packages/server/tsconfig.publish.json b/packages/server/tsconfig.publish.json new file mode 100644 index 0000000000..c6ea622c20 --- /dev/null +++ b/packages/server/tsconfig.publish.json @@ -0,0 +1,14 @@ +{ + "$schema": "https://json.schemastore.org/tsconfig", + "extends": "./tsconfig.json", + "compilerOptions": { + "rootDir": "src", + "outDir": "dist", + "module": "NodeNext", + "moduleResolution": "NodeNext", + "noEmit": false, + "declaration": true, + "allowImportingTsExtensions": false + }, + "include": ["src/api.ts", "src/middleware/location.ts"] +} diff --git a/script/publish.ts b/script/publish.ts index 5ee296a6cf..a622702a06 100755 --- a/script/publish.ts +++ b/script/publish.ts @@ -41,6 +41,9 @@ await $`bun ./packages/schema/script/publish.ts` console.log("\n=== protocol ===\n") await $`bun ./packages/protocol/script/publish.ts` +console.log("\n=== server ===\n") +await $`bun ./packages/server/script/publish.ts` + console.log("\n=== cli ===\n") await $`bun ./packages/cli/script/publish.ts`