@opencode/client 2.0.23 → 2.0.24

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.
Files changed (60) hide show
  1. package/dist/chunks/{service-version-1y4a697q.js → pty-handoff-1y4a697q.js} +1 -1
  2. package/dist/chunks/{service-version-7yt87z36.js → pty-handoff-5yf5aaev.js} +10 -10
  3. package/dist/chunks/{service-version-02j88w0z.js → pty-handoff-71wkqa80.js} +1 -1
  4. package/dist/chunks/{service-version-y2etg5bs.js → pty-handoff-7f0py9js.js} +2 -2
  5. package/dist/chunks/pty-handoff-ank0d71z.js +75 -0
  6. package/dist/chunks/pty-handoff-cqfz2qxq.js +30 -0
  7. package/dist/chunks/{service-version-frbwqjmf.js → pty-handoff-frbwqjmf.js} +1 -1
  8. package/dist/chunks/{service-version-nwcpakzx.js → pty-handoff-js54wxgp.js} +2 -2
  9. package/dist/chunks/{service-version-21favj1f.js → pty-handoff-myyn5x39.js} +17 -17
  10. package/dist/chunks/{service-version-nyqggzs9.js → pty-handoff-qzsnm4q8.js} +19 -19
  11. package/dist/chunks/{service-version-e5ea35j7.js → pty-handoff-src6by76.js} +10 -1
  12. package/dist/chunks/{service-version-t1xa31vm.js → pty-handoff-t1xa31vm.js} +1 -1
  13. package/dist/chunks/{service-version-6f43cgzz.js → pty-handoff-ve4aws36.js} +47 -2
  14. package/dist/chunks/{service-version-z6qdwcsf.js → pty-handoff-w1w809zr.js} +5 -5
  15. package/dist/contract.js +1 -1
  16. package/dist/effect/client.js +12 -12
  17. package/dist/effect/generated/client-error.js +3 -3
  18. package/dist/effect/generated/client.js +5 -5
  19. package/dist/effect/generated/index.js +8 -8
  20. package/dist/effect/index.js +12 -12
  21. package/dist/effect/rpc.js +4 -4
  22. package/dist/effect/service.d.ts +5 -7
  23. package/dist/effect/service.js +39 -122
  24. package/dist/promise/client.js +11 -11
  25. package/dist/promise/generated/client-error.js +3 -3
  26. package/dist/promise/generated/client.js +4 -4
  27. package/dist/promise/generated/index.js +8 -8
  28. package/dist/promise/generated/types.js +1 -1
  29. package/dist/promise/index.js +12 -12
  30. package/dist/promise/rpc.js +2 -2
  31. package/dist/promise/service.d.ts +2 -4
  32. package/dist/promise/service.js +36 -122
  33. package/dist/pty-handoff.js +1 -1
  34. package/dist/rpc-runtime.js +1 -1
  35. package/dist/service-contender.d.ts +27 -1
  36. package/dist/service-contender.js +3 -3
  37. package/dist/service-probe.d.ts +53 -0
  38. package/dist/service-probe.js +13 -0
  39. package/dist/service-timing.js +1 -1
  40. package/dist/service-version.js +1 -1
  41. package/dist/service.js +1 -1
  42. package/dist/shared-events.js +1 -1
  43. package/dist/solid/connection.js +1 -1
  44. package/dist/solid/data.d.ts +3 -0
  45. package/dist/solid/data.js +9 -9
  46. package/dist/solid/index.js +11 -11
  47. package/dist/solid/pty.js +1 -1
  48. package/package.json +4 -4
  49. package/dist/chunks/service-version-gah0fg5v.js +0 -30
  50. /package/dist/chunks/{service-version-6mptkzbc.js → pty-handoff-6mptkzbc.js} +0 -0
  51. /package/dist/chunks/{service-version-9rqn6x4v.js → pty-handoff-9rqn6x4v.js} +0 -0
  52. /package/dist/chunks/{service-version-gne7h7mq.js → pty-handoff-gne7h7mq.js} +0 -0
  53. /package/dist/chunks/{service-version-m2eywc8w.js → pty-handoff-m2eywc8w.js} +0 -0
  54. /package/dist/chunks/{service-version-qav6mfdz.js → pty-handoff-qav6mfdz.js} +0 -0
  55. /package/dist/chunks/{service-version-sxt88q69.js → pty-handoff-sxt88q69.js} +0 -0
  56. /package/dist/chunks/{service-version-vmytr4q8.js → pty-handoff-vmytr4q8.js} +0 -0
  57. /package/dist/chunks/{service-version-vt9jbch8.js → pty-handoff-vt9jbch8.js} +0 -0
  58. /package/dist/chunks/{service-version-vyas3vgt.js → pty-handoff-vyas3vgt.js} +0 -0
  59. /package/dist/chunks/{service-version-xgnj2w4v.js → pty-handoff-xgnj2w4v.js} +0 -0
  60. /package/dist/chunks/{service-version-ydhz1zrh.js → pty-handoff-ydhz1zrh.js} +0 -0
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  isRpcError2,
3
3
  isRpcInternalError2
4
- } from "./service-version-vt9jbch8.js";
4
+ } from "./pty-handoff-vt9jbch8.js";
5
5
 
6
6
  // src/promise/rpc.ts
7
7
  function makeRpc2(raw, events) {
@@ -1,23 +1,23 @@
1
1
  import {
2
2
  ClientApi2
3
- } from "./service-version-vmytr4q8.js";
3
+ } from "./pty-handoff-vmytr4q8.js";
4
4
  import {
5
- ClientError2
6
- } from "./service-version-y2etg5bs.js";
5
+ ClientError3
6
+ } from "./pty-handoff-7f0py9js.js";
7
7
  import {
8
8
  __export
9
- } from "./service-version-9rqn6x4v.js";
9
+ } from "./pty-handoff-9rqn6x4v.js";
10
10
 
11
11
  // src/effect/generated/client.ts
12
- var exports_client2 = {};
13
- __export(exports_client2, {
14
- make: () => make3
12
+ var exports_client4 = {};
13
+ __export(exports_client4, {
14
+ make: () => make5
15
15
  });
16
16
  import { Effect, Stream, Schema } from "effect";
17
17
  import { Sse } from "effect/unstable/encoding";
18
18
  import { HttpClientError } from "effect/unstable/http";
19
19
  import { HttpApiClient } from "effect/unstable/httpapi";
20
- var mapClientError = (error) => HttpClientError.isHttpClientError(error) || Schema.isSchemaError(error) || Sse.Retry.is(error) ? new ClientError2({ cause: error }) : error;
20
+ var mapClientError = (error) => HttpClientError.isHttpClientError(error) || Schema.isSchemaError(error) || Sse.Retry.is(error) ? new ClientError3({ cause: error }) : error;
21
21
  var preserveEffect = () => (effect) => effect;
22
22
  var preserveStream = () => (stream) => stream;
23
23
  var EndpointServerInfo = (raw) => () => preserveEffect()(raw["server.info"]({}).pipe(Effect.mapError(mapClientError)));
@@ -613,6 +613,6 @@ var adaptClient = (raw) => ({
613
613
  websearch: adaptGroupWebsearch(raw["server.websearch"]),
614
614
  config: adaptGroupConfig(raw["server.config"])
615
615
  });
616
- var make3 = (options) => HttpApiClient.make(ClientApi2, options).pipe(Effect.map(adaptClient));
616
+ var make5 = (options) => HttpApiClient.make(ClientApi2, options).pipe(Effect.map(adaptClient));
617
617
 
618
- export { make3, exports_client2 };
618
+ export { make5, exports_client4 };
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  __export
3
- } from "./service-version-9rqn6x4v.js";
3
+ } from "./pty-handoff-9rqn6x4v.js";
4
4
 
5
5
  // src/pty-handoff.ts
6
6
  var exports_pty_handoff = {};
@@ -1,9 +1,9 @@
1
1
  // src/effect/generated/client-error.ts
2
2
  import { Schema } from "effect";
3
3
 
4
- class ClientError2 extends Schema.TaggedError()("ClientError", {
4
+ class ClientError3 extends Schema.TaggedError()("ClientError", {
5
5
  cause: Schema.Defect()
6
6
  }) {
7
7
  }
8
8
 
9
- export { ClientError2 };
9
+ export { ClientError3 };
@@ -0,0 +1,75 @@
1
+ import {
2
+ defaultEnsureTiming2
3
+ } from "./pty-handoff-xgnj2w4v.js";
4
+
5
+ // src/service-probe.ts
6
+ import { homedir } from "node:os";
7
+ import { join } from "node:path";
8
+ function fallback2() {
9
+ return join(process.env["XDG_STATE_HOME"] ?? join(homedir(), ".local", "state"), "opencode", "service.json");
10
+ }
11
+ function same2(left, right) {
12
+ return left.id === right.id && left.version === right.version && left.url === right.url && left.pid === right.pid;
13
+ }
14
+ async function probeResult2(info, timeout = defaultEnsureTiming2.requestTimeout) {
15
+ const endpoint = {
16
+ url: info.url,
17
+ auth: info.password === undefined ? undefined : { type: "basic", username: "opencode", password: info.password }
18
+ };
19
+ const signal = AbortSignal.timeout(timeout);
20
+ const result = await fetch(new URL("/api/info", info.url), { headers: headers2(endpoint), signal }).then(async (response) => ({
21
+ response,
22
+ body: response.status === 404 ? undefined : await response.json()
23
+ })).catch(() => {
24
+ return;
25
+ });
26
+ if (result === undefined)
27
+ return { service: undefined, timedOut: signal.aborted };
28
+ const response = result.response;
29
+ if (response.status === 404)
30
+ return {
31
+ service: {
32
+ info,
33
+ endpoint,
34
+ version: info.version,
35
+ state: "ready",
36
+ compatible: false
37
+ },
38
+ timedOut: false
39
+ };
40
+ const serverInfo = decodeInfo(result.body);
41
+ if (serverInfo === undefined)
42
+ return { service: undefined, timedOut: false };
43
+ if (serverInfo.pid !== info.pid)
44
+ return { service: undefined, timedOut: false };
45
+ if (info.version !== undefined && serverInfo.version !== info.version)
46
+ return { service: undefined, timedOut: false };
47
+ return {
48
+ service: {
49
+ info,
50
+ endpoint,
51
+ version: serverInfo.version,
52
+ state: response.ok ? "ready" : response.status === 500 ? "failed" : "waiting",
53
+ compatible: true
54
+ },
55
+ timedOut: false
56
+ };
57
+ }
58
+ function headers2(endpoint) {
59
+ if (endpoint.auth === undefined)
60
+ return;
61
+ return {
62
+ authorization: "Basic " + Buffer.from(endpoint.auth.username + ":" + endpoint.auth.password).toString("base64")
63
+ };
64
+ }
65
+ function decodeInfo(input) {
66
+ if (typeof input !== "object" || input === null)
67
+ return;
68
+ if (!("version" in input) || typeof input.version !== "string")
69
+ return;
70
+ if (!("pid" in input) || typeof input.pid !== "number" || !Number.isInteger(input.pid) || input.pid < 0)
71
+ return;
72
+ return { version: input.version, pid: input.pid };
73
+ }
74
+
75
+ export { fallback2, same2, probeResult2, headers2 };
@@ -0,0 +1,30 @@
1
+ import {
2
+ make7
3
+ } from "./pty-handoff-frbwqjmf.js";
4
+ import {
5
+ make3
6
+ } from "./pty-handoff-qzsnm4q8.js";
7
+ import {
8
+ makeRpc2
9
+ } from "./pty-handoff-1y4a697q.js";
10
+ import {
11
+ __export
12
+ } from "./pty-handoff-9rqn6x4v.js";
13
+
14
+ // src/promise/client.ts
15
+ var exports_client = {};
16
+ __export(exports_client, {
17
+ OpenCode: () => exports_client,
18
+ make: () => make2
19
+ });
20
+ function make2(options) {
21
+ const raw = make3(options);
22
+ const events = make7((signal, onActivity) => raw.event.subscribe({ signal, onActivity }));
23
+ return {
24
+ ...raw,
25
+ rpc: Object.assign(makeRpc2(raw, events), raw.rpc),
26
+ event: events
27
+ };
28
+ }
29
+
30
+ export { make2, exports_client };
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  __export
3
- } from "./service-version-9rqn6x4v.js";
3
+ } from "./pty-handoff-9rqn6x4v.js";
4
4
 
5
5
  // src/shared-events.ts
6
6
  var exports_shared_events = {};
@@ -1,5 +1,5 @@
1
1
  // src/promise/generated/client-error.ts
2
- class ClientError3 extends Error {
2
+ class ClientError2 extends Error {
3
3
  reason;
4
4
  name = "ClientError";
5
5
  constructor(reason, options) {
@@ -9,4 +9,4 @@ class ClientError3 extends Error {
9
9
  }
10
10
  }
11
11
 
12
- export { ClientError3 };
12
+ export { ClientError2 };
@@ -1,25 +1,25 @@
1
1
  import {
2
2
  make7
3
- } from "./service-version-frbwqjmf.js";
3
+ } from "./pty-handoff-frbwqjmf.js";
4
4
  import {
5
- ClientError2
6
- } from "./service-version-y2etg5bs.js";
5
+ ClientError3
6
+ } from "./pty-handoff-7f0py9js.js";
7
7
  import {
8
- make3
9
- } from "./service-version-7yt87z36.js";
8
+ make5
9
+ } from "./pty-handoff-5yf5aaev.js";
10
10
  import {
11
- make4,
11
+ make6,
12
12
  aborted2
13
- } from "./service-version-z6qdwcsf.js";
13
+ } from "./pty-handoff-w1w809zr.js";
14
14
  import {
15
15
  __export
16
- } from "./service-version-9rqn6x4v.js";
16
+ } from "./pty-handoff-9rqn6x4v.js";
17
17
 
18
18
  // src/effect/client.ts
19
- var exports_client = {};
20
- __export(exports_client, {
21
- OpenCode: () => exports_client,
22
- make: () => make2
19
+ var exports_client3 = {};
20
+ __export(exports_client3, {
21
+ OpenCode: () => exports_client3,
22
+ make: () => make4
23
23
  });
24
24
  import { Cause, Context, Effect, Stream } from "effect";
25
25
  import { HttpClient, HttpClientRequest } from "effect/unstable/http";
@@ -28,9 +28,9 @@ var CurrentHeaders = Context.Reference("@opencode/client/effect/rpc/headers", {
28
28
  return;
29
29
  }
30
30
  });
31
- var make2 = Effect.fn("OpenCode.make")(function* (options) {
31
+ var make4 = Effect.fn("OpenCode.make")(function* (options) {
32
32
  const httpClient = yield* HttpClient.HttpClient;
33
- const raw = yield* make3(options).pipe(Effect.provideService(HttpClient.HttpClient, HttpClient.mapRequestEffect(httpClient, (request) => Effect.map(CurrentHeaders, (headers) => headers ? HttpClientRequest.setHeaders(request, new Headers(headers)) : request))));
33
+ const raw = yield* make5(options).pipe(Effect.provideService(HttpClient.HttpClient, HttpClient.mapRequestEffect(httpClient, (request) => Effect.map(CurrentHeaders, (headers) => headers ? HttpClientRequest.setHeaders(request, new Headers(headers)) : request))));
34
34
  const context = yield* Effect.context();
35
35
  const native = raw.event.subscribe();
36
36
 
@@ -41,12 +41,12 @@ var make2 = Effect.fn("OpenCode.make")(function* (options) {
41
41
  }
42
42
  }
43
43
  const shared = make7((signal) => Stream.toAsyncIterableWith(native.pipe(Stream.interruptWhen(aborted2(signal)), Stream.catchCause((cause) => Stream.fail(new EventFailure(cause)))), context));
44
- const subscribe = () => Stream.fromAsyncIterable(shared.subscribe(), (error) => error).pipe(Stream.catch((error) => Stream.failCause(error instanceof EventFailure ? error.cause : Cause.fail(new ClientError2({ cause: error })))));
44
+ const subscribe = () => Stream.fromAsyncIterable(shared.subscribe(), (error) => error).pipe(Stream.catch((error) => Stream.failCause(error instanceof EventFailure ? error.cause : Cause.fail(new ClientError3({ cause: error })))));
45
45
  return {
46
46
  ...raw,
47
47
  event: { ...raw.event, subscribe },
48
- rpc: Object.assign(make4((input, options) => raw.rpc.call(input).pipe(Effect.provideService(CurrentHeaders, options?.headers)), subscribe), raw.rpc)
48
+ rpc: Object.assign(make6((input, options) => raw.rpc.call(input).pipe(Effect.provideService(CurrentHeaders, options?.headers)), subscribe), raw.rpc)
49
49
  };
50
50
  });
51
51
 
52
- export { make2, exports_client };
52
+ export { make4, exports_client3 };
@@ -1,17 +1,17 @@
1
1
  import {
2
- ClientError3
3
- } from "./service-version-nwcpakzx.js";
2
+ ClientError2
3
+ } from "./pty-handoff-js54wxgp.js";
4
4
  import {
5
5
  __export
6
- } from "./service-version-9rqn6x4v.js";
6
+ } from "./pty-handoff-9rqn6x4v.js";
7
7
 
8
8
  // src/promise/generated/client.ts
9
- var exports_client4 = {};
10
- __export(exports_client4, {
11
- make: () => make6
9
+ var exports_client2 = {};
10
+ __export(exports_client2, {
11
+ make: () => make3
12
12
  });
13
13
  var maxSseEventBytes = 16 * 1024 * 1024;
14
- function make6(options) {
14
+ function make3(options) {
15
15
  const fetch = options.fetch ?? globalThis.fetch;
16
16
  const prepare = (descriptor, requestOptions) => {
17
17
  const baseUrl = new URL(options.baseUrl);
@@ -44,7 +44,7 @@ function make6(options) {
44
44
  const prepared = prepare(descriptor, requestOptions);
45
45
  return await fetch(prepared.url, prepared.init);
46
46
  } catch (cause) {
47
- throw new ClientError3("Transport", { cause });
47
+ throw new ClientError2("Transport", { cause });
48
48
  }
49
49
  };
50
50
  const responseError = async (response, descriptor) => {
@@ -53,7 +53,7 @@ function make6(options) {
53
53
  try {
54
54
  await response.body?.cancel();
55
55
  } catch {}
56
- throw new ClientError3("UnexpectedStatus", { cause: { status: response.status }, detail: String(response.status) });
56
+ throw new ClientError2("UnexpectedStatus", { cause: { status: response.status }, detail: String(response.status) });
57
57
  };
58
58
  const request = async (descriptor, requestOptions) => {
59
59
  const response = await execute(descriptor, requestOptions);
@@ -78,10 +78,10 @@ function make6(options) {
78
78
  try {
79
79
  await response.body?.cancel();
80
80
  } catch {}
81
- throw new ClientError3("UnsupportedContentType", { detail: response.headers.get("content-type") });
81
+ throw new ClientError2("UnsupportedContentType", { detail: response.headers.get("content-type") });
82
82
  }
83
83
  if (response.body === null)
84
- throw new ClientError3("MalformedResponse");
84
+ throw new ClientError2("MalformedResponse");
85
85
  const reader = response.body.getReader();
86
86
  const decoder = new TextDecoder;
87
87
  let buffer = "";
@@ -91,13 +91,13 @@ function make6(options) {
91
91
  try {
92
92
  next = await reader.read();
93
93
  } catch (cause) {
94
- throw new ClientError3("Transport", { cause });
94
+ throw new ClientError2("Transport", { cause });
95
95
  }
96
96
  if (!next.done)
97
97
  requestOptions?.onActivity?.();
98
98
  buffer += decoder.decode(next.value, { stream: !next.done });
99
99
  if (buffer.length > maxSseEventBytes)
100
- throw new ClientError3("SseEventTooLarge");
100
+ throw new ClientError2("SseEventTooLarge");
101
101
  const trailingCarriageReturn = !next.done && buffer.endsWith("\r");
102
102
  if (trailingCarriageReturn)
103
103
  buffer = buffer.slice(0, -1);
@@ -124,7 +124,7 @@ function make6(options) {
124
124
  try {
125
125
  yield JSON.parse(data);
126
126
  } catch (cause) {
127
- throw new ClientError3("MalformedResponse", { cause });
127
+ throw new ClientError2("MalformedResponse", { cause });
128
128
  }
129
129
  }
130
130
  boundary = buffer.indexOf(`
@@ -1421,20 +1421,20 @@ async function json(response) {
1421
1421
  try {
1422
1422
  await response.body?.cancel();
1423
1423
  } catch {}
1424
- throw new ClientError3("UnsupportedContentType", { detail: response.headers.get("content-type") });
1424
+ throw new ClientError2("UnsupportedContentType", { detail: response.headers.get("content-type") });
1425
1425
  }
1426
1426
  let text;
1427
1427
  try {
1428
1428
  text = await response.text();
1429
1429
  } catch (cause) {
1430
- throw new ClientError3("Transport", { cause });
1430
+ throw new ClientError2("Transport", { cause });
1431
1431
  }
1432
1432
  if (text === "")
1433
- throw new ClientError3("MalformedResponse");
1433
+ throw new ClientError2("MalformedResponse");
1434
1434
  try {
1435
1435
  return JSON.parse(text);
1436
1436
  } catch (cause) {
1437
- throw new ClientError3("MalformedResponse", { cause });
1437
+ throw new ClientError2("MalformedResponse", { cause });
1438
1438
  }
1439
1439
  }
1440
1440
  function declared(body) {
@@ -1447,4 +1447,4 @@ function isContentType(response, expected) {
1447
1447
  return response.headers.get("content-type")?.split(";", 1)[0]?.trim().toLowerCase() === expected;
1448
1448
  }
1449
1449
 
1450
- export { make6, exports_client4 };
1450
+ export { make3, exports_client2 };
@@ -2,7 +2,7 @@ import {
2
2
  isFormNotFoundError2,
3
3
  isFormAlreadySettledError2,
4
4
  isPermissionNotFoundError2
5
- } from "./service-version-vt9jbch8.js";
5
+ } from "./pty-handoff-vt9jbch8.js";
6
6
 
7
7
  // src/solid/data.ts
8
8
  import { Worktree } from "@opencode/schema/worktree";
@@ -1162,6 +1162,9 @@ function createData2(config) {
1162
1162
  status(sessionID) {
1163
1163
  return store.session.active[sessionID] ?? "idle";
1164
1164
  },
1165
+ active() {
1166
+ return Object.entries(store.session.active).flatMap(([sessionID, status]) => status === "running" ? [sessionID] : []);
1167
+ },
1165
1168
  input: {
1166
1169
  list(sessionID) {
1167
1170
  return (store.session.pending[sessionID] ?? []).flatMap((item) => item.type === "compaction" ? [] : [item.id]);
@@ -1437,6 +1440,9 @@ function createData2(config) {
1437
1440
  list(sessionID) {
1438
1441
  return store.session.permission[sessionID];
1439
1442
  },
1443
+ sessions() {
1444
+ return Object.entries(store.session.permission).flatMap(([sessionID, requests]) => requests.length > 0 ? [sessionID] : []);
1445
+ },
1440
1446
  sync(sessionID) {
1441
1447
  return sync.run(`session.permission:${sessionID}`, async () => {
1442
1448
  setStore("session", "permission", sessionID, await api().permission.list({ sessionID }));
@@ -1463,6 +1469,9 @@ function createData2(config) {
1463
1469
  const key = locationKey2(ref);
1464
1470
  return forms?.filter((form) => form.location && locationKey2(form.location) === key);
1465
1471
  },
1472
+ sessions() {
1473
+ return Object.entries(store.session.form).flatMap(([sessionID, forms]) => sessionID !== "global" && forms.length > 0 ? [sessionID] : []);
1474
+ },
1466
1475
  sync(sessionID, ref) {
1467
1476
  const key = `session.form:${sessionID}:${sessionID === "global" ? locationKey2(ref ?? defaultLocation()) : ""}`;
1468
1477
  return sync.run(key, async () => {
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  __export
3
- } from "./service-version-9rqn6x4v.js";
3
+ } from "./pty-handoff-9rqn6x4v.js";
4
4
 
5
5
  // src/rpc-runtime.ts
6
6
  var exports_rpc_runtime = {};
@@ -37,7 +37,52 @@ function spawnServiceContender2(command, args, env) {
37
37
  }
38
38
  };
39
39
  }
40
- function contenderFailure2(contender) {
40
+ function contenderPool2(timing) {
41
+ const contenders = new Set;
42
+ let failure;
43
+ let spawnDelay = timing.spawnDelay;
44
+ let lastSpawn = 0;
45
+ return {
46
+ failure: () => failure,
47
+ serviceAnswered() {
48
+ spawnDelay = timing.spawnDelay;
49
+ },
50
+ evict(pid) {
51
+ for (const item of contenders) {
52
+ if (item.child.pid === pid || contenderFinished2(item)) {
53
+ item.release();
54
+ contenders.delete(item);
55
+ }
56
+ }
57
+ failure = undefined;
58
+ lastSpawn = 0;
59
+ },
60
+ recruitNow() {
61
+ lastSpawn = Date.now() - spawnDelay;
62
+ },
63
+ reap() {
64
+ const finished = [...contenders].filter(contenderFinished2);
65
+ failure ??= finished.map(contenderFailure).find((error) => error !== undefined);
66
+ if (finished.some((item) => item.child.exitCode === 0))
67
+ spawnDelay = Math.min(spawnDelay * 2, timing.maxSpawnDelay);
68
+ finished.forEach((item) => contenders.delete(item));
69
+ return contenders.size === 0 ? failure : undefined;
70
+ },
71
+ shouldRecruit(registered) {
72
+ if (lastSpawn === 0 && registered)
73
+ lastSpawn = Date.now();
74
+ return failure === undefined && contenders.size < 2 && Date.now() - lastSpawn >= spawnDelay;
75
+ },
76
+ add(contender) {
77
+ contenders.add(contender);
78
+ lastSpawn = Date.now();
79
+ },
80
+ releaseAll() {
81
+ contenders.forEach((contender) => contender.release());
82
+ }
83
+ };
84
+ }
85
+ function contenderFailure(contender) {
41
86
  const error = contender.error();
42
87
  if (error !== undefined)
43
88
  return error;
@@ -55,4 +100,4 @@ function startupError(message, stderr) {
55
100
  ${stderr}` : message);
56
101
  }
57
102
 
58
- export { spawnServiceContender2, contenderFailure2, contenderFinished2 };
103
+ export { spawnServiceContender2, contenderPool2, contenderFinished2 };
@@ -3,20 +3,20 @@ import {
3
3
  readError2,
4
4
  event2,
5
5
  eventType2
6
- } from "./service-version-t1xa31vm.js";
6
+ } from "./pty-handoff-t1xa31vm.js";
7
7
  import {
8
8
  __export
9
- } from "./service-version-9rqn6x4v.js";
9
+ } from "./pty-handoff-9rqn6x4v.js";
10
10
 
11
11
  // src/effect/rpc.ts
12
12
  var exports_rpc = {};
13
13
  __export(exports_rpc, {
14
14
  RpcClientRuntime: () => exports_rpc,
15
15
  aborted: () => aborted2,
16
- make: () => make4
16
+ make: () => make6
17
17
  });
18
18
  import { Effect, Stream } from "effect";
19
- function make4(call, subscribe) {
19
+ function make6(call, subscribe) {
20
20
  return (definition) => {
21
21
  const methods = Object.fromEntries(Object.entries(definition.methods).map(([name, method]) => [
22
22
  name,
@@ -59,4 +59,4 @@ function aborted2(signal) {
59
59
  });
60
60
  }
61
61
 
62
- export { make4, aborted2, exports_rpc };
62
+ export { make6, aborted2, exports_rpc };
package/dist/contract.js CHANGED
@@ -3,7 +3,7 @@ import {
3
3
  effectOmitEndpoints2,
4
4
  groupNames2,
5
5
  promiseOmitEndpoints2
6
- } from "./chunks/service-version-vmytr4q8.js";
6
+ } from "./chunks/pty-handoff-vmytr4q8.js";
7
7
  export {
8
8
  ClientApi2 as ClientApi,
9
9
  effectOmitEndpoints2 as effectOmitEndpoints,
@@ -1,15 +1,15 @@
1
1
  import {
2
- make2,
3
- exports_client
4
- } from "../chunks/service-version-21favj1f.js";
5
- import"../chunks/service-version-6mptkzbc.js";
6
- import"../chunks/service-version-7yt87z36.js";
7
- import"../chunks/service-version-y2etg5bs.js";
8
- import"../chunks/service-version-z6qdwcsf.js";
9
- import"../chunks/service-version-frbwqjmf.js";
10
- import"../chunks/service-version-t1xa31vm.js";
11
- import"../chunks/service-version-vmytr4q8.js";
2
+ make4,
3
+ exports_client3
4
+ } from "../chunks/pty-handoff-myyn5x39.js";
5
+ import"../chunks/pty-handoff-6mptkzbc.js";
6
+ import"../chunks/pty-handoff-5yf5aaev.js";
7
+ import"../chunks/pty-handoff-7f0py9js.js";
8
+ import"../chunks/pty-handoff-w1w809zr.js";
9
+ import"../chunks/pty-handoff-vmytr4q8.js";
10
+ import"../chunks/pty-handoff-frbwqjmf.js";
11
+ import"../chunks/pty-handoff-t1xa31vm.js";
12
12
  export {
13
- exports_client as OpenCode,
14
- make2 as make
13
+ exports_client3 as OpenCode,
14
+ make4 as make
15
15
  };
@@ -1,6 +1,6 @@
1
1
  import {
2
- ClientError2
3
- } from "../../chunks/service-version-y2etg5bs.js";
2
+ ClientError3
3
+ } from "../../chunks/pty-handoff-7f0py9js.js";
4
4
  export {
5
- ClientError2 as ClientError
5
+ ClientError3 as ClientError
6
6
  };
@@ -1,8 +1,8 @@
1
1
  import {
2
- make3
3
- } from "../../chunks/service-version-7yt87z36.js";
4
- import"../../chunks/service-version-y2etg5bs.js";
5
- import"../../chunks/service-version-vmytr4q8.js";
2
+ make5
3
+ } from "../../chunks/pty-handoff-5yf5aaev.js";
4
+ import"../../chunks/pty-handoff-7f0py9js.js";
5
+ import"../../chunks/pty-handoff-vmytr4q8.js";
6
6
  export {
7
- make3 as make
7
+ make5 as make
8
8
  };
@@ -1,12 +1,12 @@
1
- import"../../chunks/service-version-6mptkzbc.js";
1
+ import"../../chunks/pty-handoff-6mptkzbc.js";
2
2
  import {
3
- exports_client2
4
- } from "../../chunks/service-version-7yt87z36.js";
3
+ exports_client4
4
+ } from "../../chunks/pty-handoff-5yf5aaev.js";
5
5
  import {
6
- ClientError2
7
- } from "../../chunks/service-version-y2etg5bs.js";
8
- import"../../chunks/service-version-vmytr4q8.js";
6
+ ClientError3
7
+ } from "../../chunks/pty-handoff-7f0py9js.js";
8
+ import"../../chunks/pty-handoff-vmytr4q8.js";
9
9
  export {
10
- ClientError2 as ClientError,
11
- exports_client2 as OpenCode
10
+ ClientError3 as ClientError,
11
+ exports_client4 as OpenCode
12
12
  };
@@ -1,15 +1,15 @@
1
1
  import {
2
- ClientError2
3
- } from "../chunks/service-version-y2etg5bs.js";
4
- import"../chunks/service-version-vmytr4q8.js";
5
- import"../chunks/service-version-7yt87z36.js";
6
- import"../chunks/service-version-6mptkzbc.js";
7
- import"../chunks/service-version-frbwqjmf.js";
8
- import"../chunks/service-version-t1xa31vm.js";
9
- import"../chunks/service-version-z6qdwcsf.js";
2
+ ClientError3
3
+ } from "../chunks/pty-handoff-7f0py9js.js";
4
+ import"../chunks/pty-handoff-vmytr4q8.js";
5
+ import"../chunks/pty-handoff-5yf5aaev.js";
6
+ import"../chunks/pty-handoff-6mptkzbc.js";
7
+ import"../chunks/pty-handoff-frbwqjmf.js";
8
+ import"../chunks/pty-handoff-t1xa31vm.js";
9
+ import"../chunks/pty-handoff-w1w809zr.js";
10
10
  import {
11
- exports_client
12
- } from "../chunks/service-version-21favj1f.js";
11
+ exports_client3
12
+ } from "../chunks/pty-handoff-myyn5x39.js";
13
13
 
14
14
  // src/effect/index.ts
15
15
  import { Agent } from "@opencode/schema/agent";
@@ -43,7 +43,7 @@ import { PromptInput } from "@opencode/schema/prompt-input";
43
43
  export {
44
44
  AbsolutePath,
45
45
  Agent,
46
- ClientError2 as ClientError,
46
+ ClientError3 as ClientError,
47
47
  Command,
48
48
  Config,
49
49
  Credential,
@@ -54,7 +54,7 @@ export {
54
54
  Integration,
55
55
  Location,
56
56
  Model,
57
- exports_client as OpenCode,
57
+ exports_client3 as OpenCode,
58
58
  Permission,
59
59
  PermissionSaved,
60
60
  Project,