James Long eeb870b0cc feat(sdk): configure embedded logging (#41809) 5 napja
..
src eeb870b0cc feat(sdk): configure embedded logging (#41809) 5 napja
test 4194d55522 chore: generate 1 hete
README.md eeb870b0cc feat(sdk): configure embedded logging (#41809) 5 napja
package.json d2c99ba97c chore: improve incremental typecheck performance (#40925) 1 hete
sst-env.d.ts fec087bf37 zen: new inference 1 hónapja
tsconfig.json d2c99ba97c chore: improve incremental typecheck performance (#40925) 1 hete

README.md

@opencode-ai/sdk-next

Effect-native scoped OpenCode host for in-process applications. This transitional package will replace the existing generated @opencode-ai/sdk after its consumers migrate.

The SDK executes Server's assembled HTTP router in memory. It opens no listener and performs no network I/O, while preserving the same routing, middleware, handlers, codecs, and errors as the network client.

import { OpenCode } from "@opencode-ai/sdk-next"

const opencode = yield * OpenCode.create()
const session = yield * opencode.sessions.get({ sessionID })

It also exports Tool for plugins that add tools with ctx.tool.transform(...). Embedded plugins run through the ordinary discovery flow and register tools into each Location's ToolRegistry through the normal Tools.Service.register(...) path. Closing the owning Effect Scope releases router resources, location services, fibers, and scoped tool registrations.

Embedded hosts are silent by default. Set log to receive structured log entries at the selected minimum level:

const opencode =
  yield *
  OpenCode.create({
    log: {
      level: "warn",
      emit: (entry) => console.error(entry.message, entry.attributes, entry.cause),
    },
  })

sessions.events({ sessionID, after }) replays durable events after the optional aggregate sequence, then emits newly committed durable events. sessions.interrupt(...) targets execution owned by this host, and sessions.message(...) retrieves one projected Session message.

The same constructor is available as a service Layer:

const program = Effect.gen(function* () {
  const opencode = yield* OpenCode.Service
  return yield* opencode.sessions.get({ sessionID })
})

yield * program.pipe(Effect.provide(OpenCode.layer))

OpenCode.layer adapts the silent default OpenCode.create() for dependency injection; use OpenCode.layerWith(options) to configure the host.