@botiverse/oar 0.21.2 → 0.23.0

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 (92) hide show
  1. package/README.md +21 -9
  2. package/assets/brands/NOTICE.md +3 -3
  3. package/assets/brands/opencode-on-dark.svg +1 -0
  4. package/assets/brands/opencode-on-light.svg +1 -0
  5. package/assets/brands/opencode.svg +1 -0
  6. package/dist/brands.d.ts +8 -0
  7. package/dist/brands.d.ts.map +1 -1
  8. package/dist/brands.js +8 -0
  9. package/dist/brands.js.map +1 -1
  10. package/dist/contracts/login.d.ts +91 -0
  11. package/dist/contracts/login.d.ts.map +1 -0
  12. package/dist/contracts/login.js +2 -0
  13. package/dist/contracts/login.js.map +1 -0
  14. package/dist/contracts/runtime.d.ts +5 -0
  15. package/dist/contracts/runtime.d.ts.map +1 -1
  16. package/dist/contracts/runtime.js.map +1 -1
  17. package/dist/contracts/session.d.ts +2 -2
  18. package/dist/contracts/session.d.ts.map +1 -1
  19. package/dist/index.d.ts +5 -0
  20. package/dist/index.d.ts.map +1 -1
  21. package/dist/index.js +6 -0
  22. package/dist/index.js.map +1 -1
  23. package/dist/observe/tool-activity.d.ts.map +1 -1
  24. package/dist/observe/tool-activity.js +6 -3
  25. package/dist/observe/tool-activity.js.map +1 -1
  26. package/dist/runtimes/claude/auth-status.d.ts +10 -0
  27. package/dist/runtimes/claude/auth-status.d.ts.map +1 -0
  28. package/dist/runtimes/claude/auth-status.js +47 -0
  29. package/dist/runtimes/claude/auth-status.js.map +1 -0
  30. package/dist/runtimes/claude/index.d.ts +4 -0
  31. package/dist/runtimes/claude/index.d.ts.map +1 -1
  32. package/dist/runtimes/claude/index.js +4 -0
  33. package/dist/runtimes/claude/index.js.map +1 -1
  34. package/dist/runtimes/claude/login.d.ts +6 -0
  35. package/dist/runtimes/claude/login.d.ts.map +1 -0
  36. package/dist/runtimes/claude/login.js +209 -0
  37. package/dist/runtimes/claude/login.js.map +1 -0
  38. package/dist/runtimes/codex/app-server-client.d.ts +4 -1
  39. package/dist/runtimes/codex/app-server-client.d.ts.map +1 -1
  40. package/dist/runtimes/codex/app-server-client.js +4 -4
  41. package/dist/runtimes/codex/app-server-client.js.map +1 -1
  42. package/dist/runtimes/codex/index.d.ts +3 -0
  43. package/dist/runtimes/codex/index.d.ts.map +1 -1
  44. package/dist/runtimes/codex/index.js +3 -0
  45. package/dist/runtimes/codex/index.js.map +1 -1
  46. package/dist/runtimes/codex/login.d.ts +16 -0
  47. package/dist/runtimes/codex/login.d.ts.map +1 -0
  48. package/dist/runtimes/codex/login.js +241 -0
  49. package/dist/runtimes/codex/login.js.map +1 -0
  50. package/dist/runtimes/opencode/index.d.ts +19 -0
  51. package/dist/runtimes/opencode/index.d.ts.map +1 -0
  52. package/dist/runtimes/opencode/index.js +15 -0
  53. package/dist/runtimes/opencode/index.js.map +1 -0
  54. package/dist/runtimes/opencode/installation.d.ts +8 -0
  55. package/dist/runtimes/opencode/installation.d.ts.map +1 -0
  56. package/dist/runtimes/opencode/installation.js +14 -0
  57. package/dist/runtimes/opencode/installation.js.map +1 -0
  58. package/dist/runtimes/opencode/list-models.d.ts +15 -0
  59. package/dist/runtimes/opencode/list-models.d.ts.map +1 -0
  60. package/dist/runtimes/opencode/list-models.js +64 -0
  61. package/dist/runtimes/opencode/list-models.js.map +1 -0
  62. package/dist/runtimes/opencode/session.d.ts +11 -0
  63. package/dist/runtimes/opencode/session.d.ts.map +1 -0
  64. package/dist/runtimes/opencode/session.js +41 -0
  65. package/dist/runtimes/opencode/session.js.map +1 -0
  66. package/dist/shared/acp/profile.d.ts.map +1 -1
  67. package/dist/shared/acp/profile.js +8 -1
  68. package/dist/shared/acp/profile.js.map +1 -1
  69. package/dist/shared/executable/index.d.ts +2 -2
  70. package/dist/shared/executable/index.d.ts.map +1 -1
  71. package/dist/shared/executable/index.js +1 -1
  72. package/dist/shared/executable/index.js.map +1 -1
  73. package/dist/shared/executable/isolated.d.ts.map +1 -1
  74. package/dist/shared/executable/isolated.js +2 -5
  75. package/dist/shared/executable/isolated.js.map +1 -1
  76. package/dist/shared/executable/process.d.ts +25 -8
  77. package/dist/shared/executable/process.d.ts.map +1 -1
  78. package/dist/shared/executable/process.js +25 -1
  79. package/dist/shared/executable/process.js.map +1 -1
  80. package/dist/shared/executable/run.d.ts +2 -0
  81. package/dist/shared/executable/run.d.ts.map +1 -1
  82. package/dist/shared/executable/run.js +1 -0
  83. package/dist/shared/executable/run.js.map +1 -1
  84. package/dist/shared/installation.d.ts +6 -0
  85. package/dist/shared/installation.d.ts.map +1 -1
  86. package/dist/shared/installation.js +7 -2
  87. package/dist/shared/installation.js.map +1 -1
  88. package/dist/shared/login.d.ts +80 -0
  89. package/dist/shared/login.d.ts.map +1 -0
  90. package/dist/shared/login.js +211 -0
  91. package/dist/shared/login.js.map +1 -0
  92. package/package.json +1 -1
@@ -0,0 +1,241 @@
1
+ import { runExecutable } from "../../shared/executable/index.js";
2
+ import { asRecord } from "../../shared/json.js";
3
+ import { errorMessage, LoginSecrets, loginBounds, loginExecutable, stoppedResult, } from "../../shared/login.js";
4
+ import { startAppServerClient } from "./app-server-client.js";
5
+ /*
6
+ * Codex signs in over its app-server (0.160.0 schema), never through
7
+ * `codex login`, whose browser and device flows both clear the stored
8
+ * credentials before the new sign-in completes:
9
+ *
10
+ * → account/login/start { type: "chatgptDeviceCode" }
11
+ * ← { type: "chatgptDeviceCode", loginId, verificationUrl, userCode }
12
+ * ← account/login/completed { loginId, success, error } (notification)
13
+ * → account/read {} ← { account: { type, email, planType } | null, ... }
14
+ *
15
+ * The app-server polls on its own and writes the credential store only once
16
+ * the new tokens are exchanged, so a failure, a cancel or the expiry leaves
17
+ * the stored login untouched; the code expires after 15 minutes. The
18
+ * `chatgptDeviceCode` login type arrived in 0.118.0. Device code sign-in
19
+ * must be allowed in the ChatGPT account's security settings (a workspace
20
+ * admin's permission for workspace accounts).
21
+ */
22
+ const DEVICE_CODE_FLOOR = "0.118.0";
23
+ /** Past the code's 15 minutes, so codex reports the expiry itself. */
24
+ const LOGIN_TIMEOUT_MS = 16 * 60_000;
25
+ const STATUS_TIMEOUT_MS = 20_000;
26
+ const STATUS_SOURCE = "codex login status";
27
+ const DEVICE_CODE_SETTING = "Device code sign-in must be allowed in your ChatGPT security settings (for a workspace account, by its admin).";
28
+ function text(value) {
29
+ return typeof value === "string" && value.trim() !== "" ? value.trim() : undefined;
30
+ }
31
+ /**
32
+ * `codex login status` prints to stderr and exits 0 when logged in
33
+ * (`Logged in using ChatGPT`, or `Logged in using an API key - <masked>`),
34
+ * 1 with `Not logged in` when logged out, and 1 with another message when
35
+ * it cannot tell (an unreadable configuration or credential store).
36
+ */
37
+ export function projectCodexLoginStatus(exitCode, output) {
38
+ if (exitCode === 0) {
39
+ const method = /Logged in using ChatGPT/u.test(output) ? "chatgpt" : (/Logged in using an API key/u.test(output) ? "apiKey" : undefined);
40
+ return { kind: "logged_in", ...(method === undefined ? {} : { account: { method } }), source: STATUS_SOURCE };
41
+ }
42
+ if (exitCode === 1 && /^Not logged in\b/mu.test(output)) {
43
+ return { kind: "logged_out", source: STATUS_SOURCE };
44
+ }
45
+ const line = output.trim().split(/\r?\n/u).at(-1) ?? "";
46
+ return {
47
+ kind: "unknown",
48
+ detail: new LoginSecrets().redact(line === "" ? `exit ${String(exitCode)}` : line),
49
+ source: STATUS_SOURCE,
50
+ };
51
+ }
52
+ export async function codexAuthStatus(installation, options = {}) {
53
+ if (installation.via !== "executable") {
54
+ return { kind: "unknown", detail: "not a machine-installed executable" };
55
+ }
56
+ const result = await runExecutable(installation.command, ["login", "status"], { timeoutMs: options.timeoutMs ?? STATUS_TIMEOUT_MS });
57
+ return projectCodexLoginStatus(result.ok ? 0 : result.exitCode, `${result.stdout}\n${result.stderr}`);
58
+ }
59
+ /** `account/read` after the sign-in; null when codex reports no account. */
60
+ export function projectCodexAccount(result) {
61
+ const account = asRecord(asRecord(result)?.account);
62
+ if (account === null) {
63
+ return null;
64
+ }
65
+ const email = text(account.email);
66
+ const plan = text(account.planType);
67
+ const method = text(account.type);
68
+ return {
69
+ ...(email === undefined ? {} : { email }),
70
+ ...(plan === undefined ? {} : { plan }),
71
+ ...(method === undefined ? {} : { method }),
72
+ };
73
+ }
74
+ /** `account/read` on the same app-server, bounded by the status deadline and the caller's abort; undefined when it gave no answer. */
75
+ async function readAccount(client, signal) {
76
+ if (signal?.aborted === true) {
77
+ return undefined;
78
+ }
79
+ const bounds = loginBounds(signal, STATUS_TIMEOUT_MS);
80
+ try {
81
+ const answer = await Promise.race([
82
+ // oxlint-disable-next-line promise/prefer-await-to-then -- a late rejection (the app-server stopped) is no answer
83
+ client.request("account/read", {}).catch(() => undefined),
84
+ // oxlint-disable-next-line promise/prefer-await-to-then -- the deadline and abort race the read
85
+ bounds.stopped.then(() => undefined),
86
+ ]);
87
+ return answer;
88
+ }
89
+ finally {
90
+ bounds.dispose();
91
+ }
92
+ }
93
+ /** After codex reported success: logged in, with the account when `account/read` names one. */
94
+ async function confirmed(client, signal) {
95
+ const read = await readAccount(client, signal);
96
+ if (read === undefined) {
97
+ return { kind: "logged_in" };
98
+ }
99
+ const account = projectCodexAccount(read);
100
+ return account === null
101
+ ? { kind: "failed", reason: "not_logged_in", detail: "codex reported success, yet account/read shows no account" }
102
+ : { kind: "logged_in", ...(Object.keys(account).length === 0 ? {} : { account }) };
103
+ }
104
+ function exitDetail(code) {
105
+ return `codex app-server exited${code === null || code === undefined ? "" : ` with code ${String(code)}`}`;
106
+ }
107
+ async function runCodexLogin(command, interaction, timeoutMs) {
108
+ const secrets = new LoginSecrets();
109
+ let client = null;
110
+ try {
111
+ // Its stderr never reaches the host's, and a stop takes its Windows process tree too.
112
+ client = startAppServerClient(command, undefined, {}, undefined, { inheritStderr: false, killTree: true });
113
+ }
114
+ catch (error) {
115
+ return { kind: "failed", reason: "process_failed", detail: secrets.line(errorMessage(error)) };
116
+ }
117
+ const app = client;
118
+ const completion = Promise.withResolvers();
119
+ const flow = { loginId: undefined, early: [], exitCode: undefined, settled: false, confirmation: undefined };
120
+ const ours = (params) => {
121
+ const id = params.loginId;
122
+ return id === undefined || id === null || id === flow.loginId;
123
+ };
124
+ const complete = (params) => {
125
+ if (params.success === true) {
126
+ flow.confirmation ??= confirmed(app, interaction.signal);
127
+ }
128
+ completion.resolve({ kind: "completed", params });
129
+ };
130
+ app.onExit((code) => {
131
+ flow.exitCode = code;
132
+ completion.resolve({ kind: "exited", code });
133
+ });
134
+ app.handle({
135
+ onNotification(method, params) {
136
+ if (method !== "account/login/completed") {
137
+ return;
138
+ }
139
+ if (flow.loginId === undefined) {
140
+ flow.early.push(params);
141
+ }
142
+ else if (ours(params)) {
143
+ complete(params);
144
+ }
145
+ },
146
+ onServerRequest() {
147
+ // A login asks the client nothing.
148
+ },
149
+ });
150
+ const run = async () => {
151
+ try {
152
+ await app.spawned;
153
+ }
154
+ catch (error) {
155
+ // An executable that cannot run (found, yet not startable) says so in Node's words.
156
+ return { kind: "failed", reason: "process_failed", detail: secrets.line(errorMessage(error)) };
157
+ }
158
+ try {
159
+ await app.request("initialize", { clientInfo: { name: "oar", version: "0.0.0" }, capabilities: { experimentalApi: true } });
160
+ app.notify("initialized", {});
161
+ const started = await app.request("account/login/start", { type: "chatgptDeviceCode" }, (outcome) => {
162
+ if (outcome.kind === "result") {
163
+ flow.loginId = text(outcome.result.loginId);
164
+ for (const params of flow.early.splice(0)) {
165
+ if (ours(params)) {
166
+ complete(params);
167
+ }
168
+ }
169
+ }
170
+ });
171
+ const verificationUri = text(started.verificationUrl);
172
+ const userCode = text(started.userCode);
173
+ if (flow.loginId === undefined || verificationUri === undefined || userCode === undefined) {
174
+ return { kind: "failed", reason: "process_failed", detail: "codex answered account/login/start without a device code" };
175
+ }
176
+ // A success that came before the start reply is final: nothing left to show the person.
177
+ const early = flow.confirmation;
178
+ if (early !== undefined) {
179
+ return await early;
180
+ }
181
+ if (!flow.settled) {
182
+ try {
183
+ interaction.onEvent({ kind: "device_code", userCode, verificationUri });
184
+ interaction.onEvent({ kind: "info", message: DEVICE_CODE_SETTING });
185
+ }
186
+ catch (error) {
187
+ // A caller that cannot show the code cannot finish the login.
188
+ return { kind: "failed", reason: "interaction_failed", detail: secrets.line(errorMessage(error)) };
189
+ }
190
+ }
191
+ const done = await completion.promise;
192
+ if (flow.confirmation !== undefined) {
193
+ return await flow.confirmation;
194
+ }
195
+ if (done.kind === "exited") {
196
+ return { kind: "failed", reason: "process_failed", detail: `${exitDetail(done.code)} before the sign-in completed` };
197
+ }
198
+ return { kind: "failed", reason: "rejected", detail: secrets.line(text(done.params.error) ?? "codex reported that the sign-in failed") };
199
+ }
200
+ catch (error) {
201
+ // An exit's error carries the app-server's stderr tail: only the exit is reported, never that tail.
202
+ return flow.exitCode === undefined
203
+ ? { kind: "failed", reason: "rejected", detail: secrets.line(errorMessage(error)) }
204
+ : { kind: "failed", reason: "process_failed", detail: exitDetail(flow.exitCode) };
205
+ }
206
+ };
207
+ const bounds = loginBounds(interaction.signal, timeoutMs);
208
+ try {
209
+ const ending = await Promise.race([
210
+ run(),
211
+ // oxlint-disable-next-line promise/prefer-await-to-then -- the deadline and abort race the flow
212
+ bounds.stopped.then((stop) => stop),
213
+ ]);
214
+ flow.settled = true;
215
+ if (typeof ending !== "string") {
216
+ return ending;
217
+ }
218
+ // Codex reported success before the stop: the login is stored.
219
+ return flow.confirmation === undefined ? stoppedResult(ending, timeoutMs) : await flow.confirmation;
220
+ }
221
+ finally {
222
+ flow.settled = true;
223
+ bounds.dispose();
224
+ // The pending login lives in the app-server; stopping it (and its group or tree) ends the polling.
225
+ app.kill();
226
+ await app.exited;
227
+ }
228
+ }
229
+ /** Signs codex in with the app-server's ChatGPT device code flow, relaying the code and its URL. */
230
+ export async function codexLogin(installation, interaction, options = {}) {
231
+ const target = loginExecutable(installation, "codex", DEVICE_CODE_FLOOR);
232
+ if (target.kind === "settled") {
233
+ return target.result;
234
+ }
235
+ if (interaction.signal?.aborted === true) {
236
+ return { kind: "cancelled" };
237
+ }
238
+ const result = await runCodexLogin(target.installation.command, interaction, options.timeoutMs ?? LOGIN_TIMEOUT_MS);
239
+ return result;
240
+ }
241
+ //# sourceMappingURL=login.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"login.js","sourceRoot":"","sources":["../../../src/runtimes/codex/login.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AACjE,OAAO,EAAE,QAAQ,EAAmB,MAAM,sBAAsB,CAAC;AACjE,OAAO,EACL,YAAY,EACZ,YAAY,EACZ,WAAW,EACX,eAAe,EACf,aAAa,GAEd,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,oBAAoB,EAAwB,MAAM,wBAAwB,CAAC;AAEpF;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,iBAAiB,GAAG,SAAS,CAAC;AACpC,sEAAsE;AACtE,MAAM,gBAAgB,GAAG,EAAE,GAAG,MAAM,CAAC;AACrC,MAAM,iBAAiB,GAAG,MAAM,CAAC;AACjC,MAAM,aAAa,GAAG,oBAAoB,CAAC;AAC3C,MAAM,mBAAmB,GAAG,gHAAgH,CAAC;AAE7I,SAAS,IAAI,CAAC,KAAc;IAC1B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;AACrF,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,uBAAuB,CAAC,QAAuB,EAAE,MAAc;IAC7E,IAAI,QAAQ,KAAK,CAAC,EAAE,CAAC;QACnB,MAAM,MAAM,GAAG,0BAA0B,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,6BAA6B,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QACzI,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC;IAChH,CAAC;IACD,IAAI,QAAQ,KAAK,CAAC,IAAI,oBAAoB,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;QACxD,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC;IACvD,CAAC;IACD,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IACxD,OAAO;QACL,IAAI,EAAE,SAAS;QACf,MAAM,EAAE,IAAI,YAAY,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,QAAQ,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;QAClF,MAAM,EAAE,aAAa;KACtB,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,YAAmC,EAAE,UAA6B,EAAE;IACxG,IAAI,YAAY,CAAC,GAAG,KAAK,YAAY,EAAE,CAAC;QACtC,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,oCAAoC,EAAE,CAAC;IAC3E,CAAC;IACD,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC,OAAO,EAAE,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,IAAI,iBAAiB,EAAE,CAAC,CAAC;IACrI,OAAO,uBAAuB,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,EAAE,GAAG,MAAM,CAAC,MAAM,KAAK,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;AACxG,CAAC;AAED,4EAA4E;AAC5E,MAAM,UAAU,mBAAmB,CAAC,MAAe;IACjD,MAAM,OAAO,GAAG,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,CAAC;IACpD,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;QACrB,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAClC,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACpC,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAClC,OAAO;QACL,GAAG,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC;QACzC,GAAG,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC;QACvC,GAAG,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC;KAC5C,CAAC;AACJ,CAAC;AAkBD,sIAAsI;AACtI,KAAK,UAAU,WAAW,CAAC,MAAuB,EAAE,MAA+B;IACjF,IAAI,MAAM,EAAE,OAAO,KAAK,IAAI,EAAE,CAAC;QAC7B,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,MAAM,GAAG,WAAW,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;IACtD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC;YAChC,kHAAkH;YAClH,MAAM,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,GAAc,EAAE,CAAC,SAAS,CAAC;YACpE,gGAAgG;YAChG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,GAAc,EAAE,CAAC,SAAS,CAAC;SAChD,CAAC,CAAC;QACH,OAAO,MAAM,CAAC;IAChB,CAAC;YAAS,CAAC;QACT,MAAM,CAAC,OAAO,EAAE,CAAC;IACnB,CAAC;AACH,CAAC;AAED,+FAA+F;AAC/F,KAAK,UAAU,SAAS,CAAC,MAAuB,EAAE,MAA+B;IAC/E,MAAM,IAAI,GAAG,MAAM,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/C,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACvB,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;IAC/B,CAAC;IACD,MAAM,OAAO,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAC;IAC1C,OAAO,OAAO,KAAK,IAAI;QACrB,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,EAAE,2DAA2D,EAAE;QAClH,CAAC,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;AACvF,CAAC;AAED,SAAS,UAAU,CAAC,IAA+B;IACjD,OAAO,0BAA0B,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,cAAc,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;AAC7G,CAAC;AAED,KAAK,UAAU,aAAa,CAAC,OAAe,EAAE,WAAqC,EAAE,SAAiB;IACpG,MAAM,OAAO,GAAG,IAAI,YAAY,EAAE,CAAC;IACnC,IAAI,MAAM,GAA2B,IAAI,CAAC;IAC1C,IAAI,CAAC;QACH,sFAAsF;QACtF,MAAM,GAAG,oBAAoB,CAAC,OAAO,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,aAAa,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7G,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;IACjG,CAAC;IACD,MAAM,GAAG,GAAG,MAAM,CAAC;IACnB,MAAM,UAAU,GAAG,OAAO,CAAC,aAAa,EAAc,CAAC;IACvD,MAAM,IAAI,GAAc,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,CAAC;IACxH,MAAM,IAAI,GAAG,CAAC,MAAkB,EAAW,EAAE;QAC3C,MAAM,EAAE,GAAG,MAAM,CAAC,OAAO,CAAC;QAC1B,OAAO,EAAE,KAAK,SAAS,IAAI,EAAE,KAAK,IAAI,IAAI,EAAE,KAAK,IAAI,CAAC,OAAO,CAAC;IAChE,CAAC,CAAC;IACF,MAAM,QAAQ,GAAG,CAAC,MAAkB,EAAQ,EAAE;QAC5C,IAAI,MAAM,CAAC,OAAO,KAAK,IAAI,EAAE,CAAC;YAC5B,IAAI,CAAC,YAAY,KAAK,SAAS,CAAC,GAAG,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;QAC3D,CAAC;QACD,UAAU,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC,CAAC;IACpD,CAAC,CAAC;IACF,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE;QAClB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QACrB,UAAU,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;IACH,GAAG,CAAC,MAAM,CAAC;QACT,cAAc,CAAC,MAAM,EAAE,MAAM;YAC3B,IAAI,MAAM,KAAK,yBAAyB,EAAE,CAAC;gBACzC,OAAO;YACT,CAAC;YACD,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;gBAC/B,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAC1B,CAAC;iBAAM,IAAI,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;gBACxB,QAAQ,CAAC,MAAM,CAAC,CAAC;YACnB,CAAC;QACH,CAAC;QACD,eAAe;YACb,mCAAmC;QACrC,CAAC;KACF,CAAC,CAAC;IAEH,MAAM,GAAG,GAAG,KAAK,IAA0B,EAAE;QAC3C,IAAI,CAAC;YACH,MAAM,GAAG,CAAC,OAAO,CAAC;QACpB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,oFAAoF;YACpF,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;QACjG,CAAC;QACD,IAAI,CAAC;YACH,MAAM,GAAG,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,UAAU,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,YAAY,EAAE,EAAE,eAAe,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;YAC5H,GAAG,CAAC,MAAM,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC;YAC9B,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,OAAO,CAAC,qBAAqB,EAAE,EAAE,IAAI,EAAE,mBAAmB,EAAE,EAAE,CAAC,OAAO,EAAE,EAAE;gBAClG,IAAI,OAAO,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;oBAC9B,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;oBAC5C,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;wBAC1C,IAAI,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;4BACjB,QAAQ,CAAC,MAAM,CAAC,CAAC;wBACnB,CAAC;oBACH,CAAC;gBACH,CAAC;YACH,CAAC,CAAC,CAAC;YACH,MAAM,eAAe,GAAG,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;YACtD,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;YACxC,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS,IAAI,eAAe,KAAK,SAAS,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;gBAC1F,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,EAAE,0DAA0D,EAAE,CAAC;YAC1H,CAAC;YACD,wFAAwF;YACxF,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC;YAChC,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;gBACxB,OAAO,MAAM,KAAK,CAAC;YACrB,CAAC;YACD,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;gBAClB,IAAI,CAAC;oBACH,WAAW,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,QAAQ,EAAE,eAAe,EAAE,CAAC,CAAC;oBACxE,WAAW,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,mBAAmB,EAAE,CAAC,CAAC;gBACtE,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,8DAA8D;oBAC9D,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,oBAAoB,EAAE,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;gBACrG,CAAC;YACH,CAAC;YACD,MAAM,IAAI,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC;YACtC,IAAI,IAAI,CAAC,YAAY,KAAK,SAAS,EAAE,CAAC;gBACpC,OAAO,MAAM,IAAI,CAAC,YAAY,CAAC;YACjC,CAAC;YACD,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBAC3B,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,EAAE,GAAG,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,+BAA+B,EAAE,CAAC;YACvH,CAAC;YACD,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,wCAAwC,CAAC,EAAE,CAAC;QAC3I,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,oGAAoG;YACpG,OAAO,IAAI,CAAC,QAAQ,KAAK,SAAS;gBAChC,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE;gBACnF,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,EAAE,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;QACtF,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,MAAM,GAAG,WAAW,CAAC,WAAW,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IAC1D,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC;YAChC,GAAG,EAAE;YACL,gGAAgG;YAChG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,EAAa,EAAE,CAAC,IAAI,CAAC;SAC/C,CAAC,CAAC;QACH,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACpB,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;YAC/B,OAAO,MAAM,CAAC;QAChB,CAAC;QACD,+DAA+D;QAC/D,OAAO,IAAI,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,aAAa,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,YAAY,CAAC;IACtG,CAAC;YAAS,CAAC;QACT,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACpB,MAAM,CAAC,OAAO,EAAE,CAAC;QACjB,mGAAmG;QACnG,GAAG,CAAC,IAAI,EAAE,CAAC;QACX,MAAM,GAAG,CAAC,MAAM,CAAC;IACnB,CAAC;AACH,CAAC;AAED,oGAAoG;AACpG,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,YAAmC,EACnC,WAAqC,EACrC,UAAwB,EAAE;IAE1B,MAAM,MAAM,GAAG,eAAe,CAAC,YAAY,EAAE,OAAO,EAAE,iBAAiB,CAAC,CAAC;IACzE,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC9B,OAAO,MAAM,CAAC,MAAM,CAAC;IACvB,CAAC;IACD,IAAI,WAAW,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,EAAE,CAAC;QACzC,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;IAC/B,CAAC;IACD,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,MAAM,CAAC,YAAY,CAAC,OAAO,EAAE,WAAW,EAAE,OAAO,CAAC,SAAS,IAAI,gBAAgB,CAAC,CAAC;IACpH,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,19 @@
1
+ export declare const opencodeRuntime: {
2
+ readonly id: "opencode";
3
+ readonly brand: {
4
+ readonly name: "OpenCode";
5
+ readonly icon: `data:image/svg+xml,${string}`;
6
+ readonly icons: {
7
+ readonly light: `data:image/svg+xml,${string}`;
8
+ readonly dark: `data:image/svg+xml,${string}`;
9
+ };
10
+ };
11
+ readonly installation: import("../../index.js").InstallationProbe;
12
+ readonly session: import("../../index.js").StartSession;
13
+ readonly listModels: import("../../index.js").ModelLister;
14
+ readonly refusedSessionOptions: Readonly<Partial<Record<import("../../contracts/runtime.js").RefusableSessionOption, string>>>;
15
+ } & import("../../index.js").RuntimeInventories & {
16
+ readonly brand: import("../../brands.js").RuntimeBrand;
17
+ };
18
+ export { opencodeSession } from "./session.js";
19
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/runtimes/opencode/index.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;CAO1B,CAAC;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC"}
@@ -0,0 +1,15 @@
1
+ import { runtimeBrands } from "../../brands.js";
2
+ import { defineRuntime } from "../../contracts/runtime.js";
3
+ import { opencodeInstallation } from "./installation.js";
4
+ import { opencodeListModels } from "./list-models.js";
5
+ import { opencodeRefusedSessionOptions, opencodeSession } from "./session.js";
6
+ export const opencodeRuntime = defineRuntime({
7
+ id: "opencode",
8
+ brand: runtimeBrands.opencode,
9
+ installation: opencodeInstallation,
10
+ session: opencodeSession,
11
+ listModels: opencodeListModels,
12
+ refusedSessionOptions: opencodeRefusedSessionOptions,
13
+ });
14
+ export { opencodeSession } from "./session.js";
15
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/runtimes/opencode/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,6BAA6B,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAE9E,MAAM,CAAC,MAAM,eAAe,GAAG,aAAa,CAAC;IAC3C,EAAE,EAAE,UAAU;IACd,KAAK,EAAE,aAAa,CAAC,QAAQ;IAC7B,YAAY,EAAE,oBAAoB;IAClC,OAAO,EAAE,eAAe;IACxB,UAAU,EAAE,kBAAkB;IAC9B,qBAAqB,EAAE,6BAA6B;CACrD,CAAC,CAAC;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * The install script's directory, `~/.opencode/bin`, which a GUI process's
3
+ * PATH can miss. npm (`opencode-ai`), Homebrew and Scoop copies are on PATH.
4
+ */
5
+ export declare function opencodeInstalledExecutableCandidates(platform?: NodeJS.Platform, home?: string): readonly string[];
6
+ /** `opencode --version` (1.18.30) prints the bare release and takes about 2 s to start. */
7
+ export declare const opencodeInstallation: import("../../index.js").InstallationProbe;
8
+ //# sourceMappingURL=installation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"installation.d.ts","sourceRoot":"","sources":["../../../src/runtimes/opencode/installation.ts"],"names":[],"mappings":"AAIA;;;GAGG;AACH,wBAAgB,qCAAqC,CACnD,QAAQ,GAAE,MAAM,CAAC,QAA2B,EAC5C,IAAI,GAAE,MAAkB,GACvB,SAAS,MAAM,EAAE,CAGnB;AAED,2FAA2F;AAC3F,eAAO,MAAM,oBAAoB,4CAMhC,CAAC"}
@@ -0,0 +1,14 @@
1
+ import { homedir } from "node:os";
2
+ import path from "node:path";
3
+ import { executableInstallation } from "../../shared/installation.js";
4
+ /**
5
+ * The install script's directory, `~/.opencode/bin`, which a GUI process's
6
+ * PATH can miss. npm (`opencode-ai`), Homebrew and Scoop copies are on PATH.
7
+ */
8
+ export function opencodeInstalledExecutableCandidates(platform = process.platform, home = homedir()) {
9
+ const paths = platform === "win32" ? path.win32 : path.posix;
10
+ return [paths.join(home, ".opencode", "bin", platform === "win32" ? "opencode.exe" : "opencode")];
11
+ }
12
+ /** `opencode --version` (1.18.30) prints the bare release and takes about 2 s to start. */
13
+ export const opencodeInstallation = executableInstallation("OAR_OPENCODE_BIN", "opencode", opencodeInstalledExecutableCandidates, undefined, { versionTimeoutMs: 15_000 });
14
+ //# sourceMappingURL=installation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"installation.js","sourceRoot":"","sources":["../../../src/runtimes/opencode/installation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAC;AAEtE;;;GAGG;AACH,MAAM,UAAU,qCAAqC,CACnD,WAA4B,OAAO,CAAC,QAAQ,EAC5C,OAAe,OAAO,EAAE;IAExB,MAAM,KAAK,GAAG,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC;IAC7D,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;AACpG,CAAC;AAED,2FAA2F;AAC3F,MAAM,CAAC,MAAM,oBAAoB,GAAG,sBAAsB,CACxD,kBAAkB,EAClB,UAAU,EACV,qCAAqC,EACrC,SAAS,EACT,EAAE,gBAAgB,EAAE,MAAM,EAAE,CAC7B,CAAC"}
@@ -0,0 +1,15 @@
1
+ import type { ModelEntry, ModelLister } from "../../contracts/list-models.js";
2
+ /**
3
+ * Project `opencode models --verbose` (1.18.30, cli/cmd/models.ts): for each
4
+ * model of every configured provider, a `provider/model` line, then the
5
+ * model as indented JSON closed by a `}` line. The `provider/model` line is
6
+ * the id `opencode acp` offers in its `model` config option. The model's
7
+ * `variants` keys are the values of its `effort` (`thought_level`) option,
8
+ * which `SessionOptions.effort` sets (later builds add a `default` value
9
+ * there, meaning no variant, which is not a level). No `defaultEffort`: which
10
+ * variant a new session starts on is the session's to report.
11
+ */
12
+ export declare function projectOpencodeModels(stdout: string): ModelEntry[];
13
+ /** Reads opencode's model catalog; the first run after an install also fetches models.dev. */
14
+ export declare const opencodeListModels: ModelLister;
15
+ //# sourceMappingURL=list-models.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list-models.d.ts","sourceRoot":"","sources":["../../../src/runtimes/opencode/list-models.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAa9E;;;;;;;;;GASG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,EAAE,CA6BlE;AAED,8FAA8F;AAC9F,eAAO,MAAM,kBAAkB,EAAE,WAWhC,CAAC"}
@@ -0,0 +1,64 @@
1
+ import { runExecutable } from "../../shared/executable/index.js";
2
+ import { processFailure, stderrTail } from "../../shared/executable/diagnostics.js";
3
+ import { asRecord, parseJson } from "../../shared/json.js";
4
+ function text(value) {
5
+ if (typeof value !== "string") {
6
+ return undefined;
7
+ }
8
+ const trimmed = value.trim();
9
+ return trimmed.length > 0 ? trimmed : undefined;
10
+ }
11
+ /**
12
+ * Project `opencode models --verbose` (1.18.30, cli/cmd/models.ts): for each
13
+ * model of every configured provider, a `provider/model` line, then the
14
+ * model as indented JSON closed by a `}` line. The `provider/model` line is
15
+ * the id `opencode acp` offers in its `model` config option. The model's
16
+ * `variants` keys are the values of its `effort` (`thought_level`) option,
17
+ * which `SessionOptions.effort` sets (later builds add a `default` value
18
+ * there, meaning no variant, which is not a level). No `defaultEffort`: which
19
+ * variant a new session starts on is the session's to report.
20
+ */
21
+ export function projectOpencodeModels(stdout) {
22
+ const lines = stdout.split(/\r?\n/u);
23
+ const entries = [];
24
+ let index = 0;
25
+ while (index < lines.length) {
26
+ const id = /^(\S+\/\S+)$/u.exec(lines[index] ?? "")?.[1];
27
+ index += 1;
28
+ if (id === undefined || lines[index] !== "{") {
29
+ continue;
30
+ }
31
+ const body = [];
32
+ while (index < lines.length) {
33
+ const line = lines[index] ?? "";
34
+ body.push(line);
35
+ index += 1;
36
+ if (line === "}") {
37
+ break;
38
+ }
39
+ }
40
+ const model = asRecord(parseJson(body.join("\n")));
41
+ const displayName = text(model?.name);
42
+ const effortLevels = Object.keys(asRecord(model?.variants) ?? {});
43
+ entries.push({
44
+ id,
45
+ ...(displayName === undefined ? {} : { displayName }),
46
+ ...(effortLevels.length === 0 ? {} : { effortLevels }),
47
+ });
48
+ }
49
+ return entries;
50
+ }
51
+ /** Reads opencode's model catalog; the first run after an install also fetches models.dev. */
52
+ export const opencodeListModels = async (installation, options = {}) => {
53
+ if (installation.via !== "executable") {
54
+ return { kind: "unsupported", reason: "opencode model listing requires the opencode executable" };
55
+ }
56
+ const result = await runExecutable(installation.command, ["models", "--verbose"], { timeoutMs: options.timeoutMs ?? 30_000 });
57
+ if (!result.ok) {
58
+ throw processFailure("Failed to list opencode models", result.diagnostics ?? {
59
+ exitCode: result.exitCode, signal: null, stderr: stderrTail(result.stderr),
60
+ });
61
+ }
62
+ return { kind: "ok", models: projectOpencodeModels(result.stdout) };
63
+ };
64
+ //# sourceMappingURL=list-models.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list-models.js","sourceRoot":"","sources":["../../../src/runtimes/opencode/list-models.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import type { RefusedSessionOptions } from "../../contracts/runtime.js";
2
+ import { type AcpSessionProfile } from "../../shared/acp/session.js";
3
+ export declare const opencodeRefusedSessionOptions: RefusedSessionOptions;
4
+ /**
5
+ * `opencode acp` (1.18.30, live 2026-10-05; source packages/opencode/src/acp
6
+ * at v1.18.34) is opencode's own ACP layer over its HTTP server, so the
7
+ * mapping is upstream's.
8
+ */
9
+ export declare const opencodeAcpProfile: AcpSessionProfile;
10
+ export declare const opencodeSession: import("../../index.js").StartSession;
11
+ //# sourceMappingURL=session.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../../src/runtimes/opencode/session.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACxE,OAAO,EAAc,KAAK,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAGjF,eAAO,MAAM,6BAA6B,EAAE,qBAG3C,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,EAAE,iBA2BhC,CAAC;AAEF,eAAO,MAAM,eAAe,uCAAiC,CAAC"}
@@ -0,0 +1,41 @@
1
+ import { acpSession } from "../../shared/acp/session.js";
2
+ import { refuseSessionOptions } from "../../shared/session-options.js";
3
+ export const opencodeRefusedSessionOptions = {
4
+ systemPrompt: "opencode ACP does not expose a system prompt override",
5
+ appendSystemPrompt: "opencode ACP does not expose a system prompt override",
6
+ };
7
+ /**
8
+ * `opencode acp` (1.18.30, live 2026-10-05; source packages/opencode/src/acp
9
+ * at v1.18.34) is opencode's own ACP layer over its HTTP server, so the
10
+ * mapping is upstream's.
11
+ */
12
+ export const opencodeAcpProfile = {
13
+ args: ["acp"],
14
+ // The ACP layer forwards only its own sessions' parts: a `task` subagent
15
+ // runs in a child session whose frames never reach this transport, so the
16
+ // call shows only as the parent's tool call (opaque, tier #1).
17
+ capabilities: { queue: { durable: false }, attribution: "opaque" },
18
+ // Startup loads providers and the models.dev catalog before answering.
19
+ requestTimeoutMs: 30_000,
20
+ // No `authenticate`: the advertised `opencode-login` method answers `{}`;
21
+ // credentials come from `opencode auth login` or provider env vars, and the
22
+ // free opencode models need none.
23
+ validateOptions: (options) => {
24
+ refuseSessionOptions(opencodeRefusedSessionOptions, options);
25
+ },
26
+ // `session/set_model` answers `{}` and 1.18.30 pushes nothing, though the
27
+ // switch applies; `set_config_option` on `model` answers every option with
28
+ // its current value, the new model's effort menu included.
29
+ modelViaConfigOption: true,
30
+ // A prompt sent while one runs is admitted as a user message and the
31
+ // running loop reads it at its next step (session/prompt.ts runLoop); both
32
+ // prompt RPCs are answered when the session goes idle. Live: a steer sent
33
+ // 2.5 s into a shell call changed that turn's final reply.
34
+ steerParams: () => ({}),
35
+ // A resume naming another directory ran in the session's own (live
36
+ // 2026-10-05: `pwd` printed the original directory), so a resume
37
+ // elsewhere is refused from `session/list` (profile.ts).
38
+ resumeKeepsSessionCwd: true,
39
+ };
40
+ export const opencodeSession = acpSession(opencodeAcpProfile);
41
+ //# sourceMappingURL=session.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session.js","sourceRoot":"","sources":["../../../src/runtimes/opencode/session.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAA0B,MAAM,6BAA6B,CAAC;AACjF,OAAO,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAC;AAEvE,MAAM,CAAC,MAAM,6BAA6B,GAA0B;IAClE,YAAY,EAAE,uDAAuD;IACrE,kBAAkB,EAAE,uDAAuD;CAC5E,CAAC;AAEF;;;;GAIG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAsB;IACnD,IAAI,EAAE,CAAC,KAAK,CAAC;IACb,yEAAyE;IACzE,0EAA0E;IAC1E,+DAA+D;IAC/D,YAAY,EAAE,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,WAAW,EAAE,QAAQ,EAAE;IAClE,uEAAuE;IACvE,gBAAgB,EAAE,MAAM;IACxB,0EAA0E;IAC1E,4EAA4E;IAC5E,kCAAkC;IAClC,eAAe,EAAE,CAAC,OAAO,EAAE,EAAE;QAC3B,oBAAoB,CAAC,6BAA6B,EAAE,OAAO,CAAC,CAAC;IAC/D,CAAC;IACD,0EAA0E;IAC1E,2EAA2E;IAC3E,2DAA2D;IAC3D,oBAAoB,EAAE,IAAI;IAC1B,qEAAqE;IACrE,2EAA2E;IAC3E,0EAA0E;IAC1E,2DAA2D;IAC3D,WAAW,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC;IACvB,mEAAmE;IACnE,iEAAiE;IACjE,yDAAyD;IACzD,qBAAqB,EAAE,IAAI;CAC5B,CAAC;AAEF,MAAM,CAAC,MAAM,eAAe,GAAG,UAAU,CAAC,kBAAkB,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"profile.d.ts","sourceRoot":"","sources":["../../../src/shared/acp/profile.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"profile.d.ts","sourceRoot":"","sources":["../../../src/shared/acp/profile.ts"],"names":[],"mappings":"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"}
@@ -103,7 +103,14 @@ export async function openAcpSession(process, profile, options, observe = () =>
103
103
  observe,
104
104
  });
105
105
  if (options.effort !== undefined) {
106
- await applyAcpEffort(process, opened, options.effort, {
106
+ // The effort menu belongs to the model in effect: a model switch whose
107
+ // answer lists the options (`set_config_option`, opencode 1.18.30 where
108
+ // the open model has no effort option and the requested one does) is
109
+ // read instead of the open's.
110
+ const menu = setModelResponse !== undefined && Array.isArray(setModelResponse.configOptions)
111
+ ? { ...opened, response: setModelResponse, openMethod: "session/set_config_option" }
112
+ : opened;
113
+ await applyAcpEffort(process, menu, options.effort, {
107
114
  timeoutMs: profile.requestTimeoutMs ?? 15_000,
108
115
  observe,
109
116
  });
@@ -1 +1 @@
1
- {"version":3,"file":"profile.js","sourceRoot":"","sources":["../../../src/shared/acp/profile.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"profile.js","sourceRoot":"","sources":["../../../src/shared/acp/profile.ts"],"names":[],"mappings":"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"}
@@ -3,6 +3,6 @@ export { runIsolated, type IsolatedResult } from "./isolated.js";
3
3
  export type { ExecutableResult, ExecutableRunner, ExecutableRunOptions } from "./run.js";
4
4
  export { runExecutable } from "./run.js";
5
5
  export { readExecutableVersion, type VersionReader } from "./version.js";
6
- export type { LineProcess } from "./process.js";
7
- export { KILL_GRACE_MS, killGraceMs, OWN_PROCESS_GROUP, requiresShell, signalProcessGroup, spawnLineProcess, } from "./process.js";
6
+ export type { LineProcess, LineProcessOptions } from "./process.js";
7
+ export { KILL_GRACE_MS, killGraceMs, killProcessTree, OWN_PROCESS_GROUP, requiresShell, signalProcessGroup, spawnLineProcess, } from "./process.js";
8
8
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/shared/executable/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,KAAK,cAAc,EAAE,MAAM,eAAe,CAAC;AACjE,YAAY,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAC;AACzF,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,qBAAqB,EAAE,KAAK,aAAa,EAAE,MAAM,cAAc,CAAC;AACzE,YAAY,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EACL,aAAa,EACb,WAAW,EACX,iBAAiB,EACjB,aAAa,EACb,kBAAkB,EAClB,gBAAgB,GACjB,MAAM,cAAc,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/shared/executable/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,KAAK,cAAc,EAAE,MAAM,eAAe,CAAC;AACjE,YAAY,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAC;AACzF,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,qBAAqB,EAAE,KAAK,aAAa,EAAE,MAAM,cAAc,CAAC;AACzE,YAAY,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AACpE,OAAO,EACL,aAAa,EACb,WAAW,EACX,eAAe,EACf,iBAAiB,EACjB,aAAa,EACb,kBAAkB,EAClB,gBAAgB,GACjB,MAAM,cAAc,CAAC"}
@@ -2,5 +2,5 @@ export { resolveExecutable } from "./resolve.js";
2
2
  export { runIsolated } from "./isolated.js";
3
3
  export { runExecutable } from "./run.js";
4
4
  export { readExecutableVersion } from "./version.js";
5
- export { KILL_GRACE_MS, killGraceMs, OWN_PROCESS_GROUP, requiresShell, signalProcessGroup, spawnLineProcess, } from "./process.js";
5
+ export { KILL_GRACE_MS, killGraceMs, killProcessTree, OWN_PROCESS_GROUP, requiresShell, signalProcessGroup, spawnLineProcess, } from "./process.js";
6
6
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/shared/executable/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,EAAE,WAAW,EAAuB,MAAM,eAAe,CAAC;AAEjE,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,qBAAqB,EAAsB,MAAM,cAAc,CAAC;AAEzE,OAAO,EACL,aAAa,EACb,WAAW,EACX,iBAAiB,EACjB,aAAa,EACb,kBAAkB,EAClB,gBAAgB,GACjB,MAAM,cAAc,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/shared/executable/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,EAAE,WAAW,EAAuB,MAAM,eAAe,CAAC;AAEjE,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,qBAAqB,EAAsB,MAAM,cAAc,CAAC;AAEzE,OAAO,EACL,aAAa,EACb,WAAW,EACX,eAAe,EACf,iBAAiB,EACjB,aAAa,EACb,kBAAkB,EAClB,gBAAgB,GACjB,MAAM,cAAc,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"isolated.d.ts","sourceRoot":"","sources":["../../../src/shared/executable/isolated.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,UAAU,CAAC;IAChC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B;AA0BD;;;;;;GAMG;AACH,wBAAsB,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,MAAM,EAAE,EAAE,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,cAAc,CAAC,CAwChI"}
1
+ {"version":3,"file":"isolated.d.ts","sourceRoot":"","sources":["../../../src/shared/executable/isolated.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,UAAU,CAAC;IAChC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B;AAwBD;;;;;;GAMG;AACH,wBAAsB,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,MAAM,EAAE,EAAE,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,cAAc,CAAC,CAwChI"}
@@ -1,6 +1,5 @@
1
- import { execFile } from "node:child_process";
2
1
  import spawn from "cross-spawn";
3
- import { killGraceMs, OWN_PROCESS_GROUP, signalProcessGroup } from "./process.js";
2
+ import { killGraceMs, killProcessTree, OWN_PROCESS_GROUP, signalProcessGroup } from "./process.js";
4
3
  const OUTPUT_LIMIT = 1024 * 1024;
5
4
  /** After the command itself exits, how long a process it left holding the output pipes may keep them. */
6
5
  const PIPE_DRAIN_MS = 2000;
@@ -10,9 +9,7 @@ function keepTail(text) {
10
9
  /** Stop the command and everything it started: its process group on POSIX, its process tree on Windows. */
11
10
  function stopTree(child) {
12
11
  if (process.platform === "win32") {
13
- if (child.pid !== undefined) {
14
- execFile("taskkill", ["/pid", String(child.pid), "/T", "/F"], () => { });
15
- }
12
+ killProcessTree(child);
16
13
  return;
17
14
  }
18
15
  signalProcessGroup(child, "SIGTERM");