refactor(client): rename service start to ensure
This commit is contained in:
parent
75bc611ef1
commit
ec8ee60e0b
17 changed files with 79 additions and 64 deletions
41
packages/docs/build/client.mdx
vendored
41
packages/docs/build/client.mdx
vendored
|
|
@ -70,23 +70,23 @@ for await (const event of client.event.subscribe()) {
|
|||
}
|
||||
```
|
||||
|
||||
## Local service
|
||||
## Local background service
|
||||
|
||||
`Service` discovers and manages the local OpenCode background service from a
|
||||
Node application. The Promise API uses Node APIs directly and does not require
|
||||
Effect or `@effect/platform-node`.
|
||||
The main client entrypoints are browser-compatible and do not include local
|
||||
process management. In a Node application, import the native Promise service
|
||||
API from `@opencode-ai/client/service`.
|
||||
|
||||
- `Service.discover()` returns a healthy registered endpoint without starting
|
||||
a process.
|
||||
- `Service.start()` reuses a compatible service or starts one when needed.
|
||||
- `Service.stop()` stops the registered service.
|
||||
- `Service.ensure()` returns a compatible service, starting one when needed.
|
||||
- `Service.stop()` stops the exact registered service instance.
|
||||
- `Service.headers(endpoint)` creates the authentication headers for a client.
|
||||
|
||||
```ts
|
||||
import { OpenCode } from "@opencode-ai/client"
|
||||
import { Service } from "@opencode-ai/client/service"
|
||||
|
||||
const endpoint = await Service.start()
|
||||
const endpoint = await Service.ensure()
|
||||
const client = OpenCode.make({
|
||||
baseUrl: endpoint.url,
|
||||
headers: Service.headers(endpoint),
|
||||
|
|
@ -95,7 +95,22 @@ const client = OpenCode.make({
|
|||
const health = await client.health.get()
|
||||
```
|
||||
|
||||
Import the native Promise service API from `@opencode-ai/client/service`.
|
||||
`Service.ensure()` accepts an optional registration file, required version,
|
||||
service command, and `onStart` callback:
|
||||
|
||||
```ts
|
||||
const endpoint = await Service.ensure({
|
||||
file: "/var/run/opencode/service.json",
|
||||
version: "2.0.0",
|
||||
command: ["opencode", "serve", "--service"],
|
||||
onStart(reason, previousVersion) {
|
||||
console.log(reason, previousVersion)
|
||||
},
|
||||
})
|
||||
```
|
||||
|
||||
Omit these options to use the standard registration path and
|
||||
`opencode serve --service` command.
|
||||
|
||||
## Effect
|
||||
|
||||
|
|
@ -133,11 +148,11 @@ const session = await Effect.runPromise(
|
|||
Streaming operations, including `client.event.subscribe()` and
|
||||
`client.session.log(...)`, return Effect `Stream` values.
|
||||
|
||||
### Local service
|
||||
### Local background service
|
||||
|
||||
The Effect entrypoint exposes the same service lifecycle operations as Effect
|
||||
values. Add `@effect/platform-node` and provide its filesystem layer when
|
||||
running service operations.
|
||||
The Node-only `@opencode-ai/client/effect/service` entrypoint exposes the same
|
||||
operations as Effect values. Add `@effect/platform-node` and provide its
|
||||
filesystem layer when running them.
|
||||
|
||||
```sh
|
||||
bun add @effect/platform-node
|
||||
|
|
@ -151,7 +166,7 @@ import { Effect } from "effect"
|
|||
import { FetchHttpClient } from "effect/unstable/http"
|
||||
|
||||
const program = Effect.gen(function* () {
|
||||
const endpoint = yield* Service.start()
|
||||
const endpoint = yield* Service.ensure()
|
||||
const client = yield* OpenCode.make({
|
||||
baseUrl: endpoint.url,
|
||||
headers: Service.headers(endpoint),
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue