@botiverse/oar 0.76.3 → 0.78.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 (203) hide show
  1. package/README.md +6 -4
  2. package/assets/brands/NOTICE.md +3 -3
  3. package/assets/brands/codebuddy-on-dark.svg +1 -0
  4. package/assets/brands/codebuddy-on-light.svg +1 -0
  5. package/assets/brands/codebuddy.svg +1 -0
  6. package/dist/agents/subagent.d.ts.map +1 -1
  7. package/dist/agents/subagent.js +15 -3
  8. package/dist/agents/subagent.js.map +1 -1
  9. package/dist/agents/types.d.ts +1 -1
  10. package/dist/agents/types.d.ts.map +1 -1
  11. package/dist/brands.d.ts +8 -0
  12. package/dist/brands.d.ts.map +1 -1
  13. package/dist/brands.js +8 -0
  14. package/dist/brands.js.map +1 -1
  15. package/dist/contracts/errors.d.ts +2 -2
  16. package/dist/contracts/errors.d.ts.map +1 -1
  17. package/dist/contracts/errors.js.map +1 -1
  18. package/dist/contracts/index.d.ts +1 -0
  19. package/dist/contracts/index.d.ts.map +1 -1
  20. package/dist/contracts/placement.d.ts +37 -0
  21. package/dist/contracts/placement.d.ts.map +1 -0
  22. package/dist/contracts/placement.js +42 -0
  23. package/dist/contracts/placement.js.map +1 -0
  24. package/dist/contracts/records.d.ts +17 -9
  25. package/dist/contracts/records.d.ts.map +1 -1
  26. package/dist/contracts/runtime.d.ts +9 -3
  27. package/dist/contracts/runtime.d.ts.map +1 -1
  28. package/dist/contracts/runtime.js +10 -2
  29. package/dist/contracts/runtime.js.map +1 -1
  30. package/dist/contracts/session.d.ts +15 -2
  31. package/dist/contracts/session.d.ts.map +1 -1
  32. package/dist/contracts/status.d.ts +1 -0
  33. package/dist/contracts/status.d.ts.map +1 -1
  34. package/dist/index.d.ts +4 -0
  35. package/dist/index.d.ts.map +1 -1
  36. package/dist/index.js +7 -0
  37. package/dist/index.js.map +1 -1
  38. package/dist/observe/agent-status.d.ts +2 -0
  39. package/dist/observe/agent-status.d.ts.map +1 -1
  40. package/dist/observe/agent-status.js +15 -1
  41. package/dist/observe/agent-status.js.map +1 -1
  42. package/dist/observe/conversation.js +1 -1
  43. package/dist/observe/conversation.js.map +1 -1
  44. package/dist/observe/display-text.d.ts.map +1 -1
  45. package/dist/observe/display-text.js +2 -0
  46. package/dist/observe/display-text.js.map +1 -1
  47. package/dist/observe/events.d.ts.map +1 -1
  48. package/dist/observe/events.js +7 -1
  49. package/dist/observe/events.js.map +1 -1
  50. package/dist/observe/redact-record.js +2 -2
  51. package/dist/observe/redact-record.js.map +1 -1
  52. package/dist/observe/session-view-events.d.ts.map +1 -1
  53. package/dist/observe/session-view-events.js +12 -1
  54. package/dist/observe/session-view-events.js.map +1 -1
  55. package/dist/observe/session-view-fold.d.ts +1 -0
  56. package/dist/observe/session-view-fold.d.ts.map +1 -1
  57. package/dist/observe/session-view-fold.js +2 -1
  58. package/dist/observe/session-view-fold.js.map +1 -1
  59. package/dist/observe/session-view-tools.d.ts +1 -1
  60. package/dist/observe/session-view-tools.d.ts.map +1 -1
  61. package/dist/observe/session-view-tools.js +3 -3
  62. package/dist/observe/session-view-tools.js.map +1 -1
  63. package/dist/observe/session-view.d.ts +5 -1
  64. package/dist/observe/session-view.d.ts.map +1 -1
  65. package/dist/observe/session-view.js +1 -1
  66. package/dist/observe/session-view.js.map +1 -1
  67. package/dist/observe/turn-stop.d.ts +2 -0
  68. package/dist/observe/turn-stop.d.ts.map +1 -1
  69. package/dist/observe/turn-stop.js +5 -0
  70. package/dist/observe/turn-stop.js.map +1 -1
  71. package/dist/observe/turns.d.ts +9 -5
  72. package/dist/observe/turns.d.ts.map +1 -1
  73. package/dist/observe/turns.js +20 -7
  74. package/dist/observe/turns.js.map +1 -1
  75. package/dist/runtimes/antigravity/index.d.ts +3 -5
  76. package/dist/runtimes/antigravity/index.d.ts.map +1 -1
  77. package/dist/runtimes/antigravity/index.js +1 -1
  78. package/dist/runtimes/antigravity/index.js.map +1 -1
  79. package/dist/runtimes/claude/index.d.ts +2 -4
  80. package/dist/runtimes/claude/index.d.ts.map +1 -1
  81. package/dist/runtimes/claude/index.js +1 -1
  82. package/dist/runtimes/claude/index.js.map +1 -1
  83. package/dist/runtimes/codebuddy/account-control.d.ts +13 -0
  84. package/dist/runtimes/codebuddy/account-control.d.ts.map +1 -0
  85. package/dist/runtimes/codebuddy/account-control.js +88 -0
  86. package/dist/runtimes/codebuddy/account-control.js.map +1 -0
  87. package/dist/runtimes/codebuddy/auth-status.d.ts +7 -0
  88. package/dist/runtimes/codebuddy/auth-status.d.ts.map +1 -0
  89. package/dist/runtimes/codebuddy/auth-status.js +44 -0
  90. package/dist/runtimes/codebuddy/auth-status.js.map +1 -0
  91. package/dist/runtimes/codebuddy/extensions.d.ts +5 -0
  92. package/dist/runtimes/codebuddy/extensions.d.ts.map +1 -0
  93. package/dist/runtimes/codebuddy/extensions.js +28 -0
  94. package/dist/runtimes/codebuddy/extensions.js.map +1 -0
  95. package/dist/runtimes/codebuddy/failure.d.ts +5 -0
  96. package/dist/runtimes/codebuddy/failure.d.ts.map +1 -0
  97. package/dist/runtimes/codebuddy/failure.js +35 -0
  98. package/dist/runtimes/codebuddy/failure.js.map +1 -0
  99. package/dist/runtimes/codebuddy/index.d.ts +18 -0
  100. package/dist/runtimes/codebuddy/index.d.ts.map +1 -0
  101. package/dist/runtimes/codebuddy/index.js +15 -0
  102. package/dist/runtimes/codebuddy/index.js.map +1 -0
  103. package/dist/runtimes/codebuddy/installation.d.ts +2 -0
  104. package/dist/runtimes/codebuddy/installation.d.ts.map +1 -0
  105. package/dist/runtimes/codebuddy/installation.js +7 -0
  106. package/dist/runtimes/codebuddy/installation.js.map +1 -0
  107. package/dist/runtimes/codebuddy/list-models.d.ts +6 -0
  108. package/dist/runtimes/codebuddy/list-models.d.ts.map +1 -0
  109. package/dist/runtimes/codebuddy/list-models.js +90 -0
  110. package/dist/runtimes/codebuddy/list-models.js.map +1 -0
  111. package/dist/runtimes/codebuddy/login.d.ts +6 -0
  112. package/dist/runtimes/codebuddy/login.d.ts.map +1 -0
  113. package/dist/runtimes/codebuddy/login.js +110 -0
  114. package/dist/runtimes/codebuddy/login.js.map +1 -0
  115. package/dist/runtimes/codebuddy/options.d.ts +5 -0
  116. package/dist/runtimes/codebuddy/options.d.ts.map +1 -0
  117. package/dist/runtimes/codebuddy/options.js +21 -0
  118. package/dist/runtimes/codebuddy/options.js.map +1 -0
  119. package/dist/runtimes/codebuddy/prompt-file.d.ts +6 -0
  120. package/dist/runtimes/codebuddy/prompt-file.d.ts.map +1 -0
  121. package/dist/runtimes/codebuddy/prompt-file.js +20 -0
  122. package/dist/runtimes/codebuddy/prompt-file.js.map +1 -0
  123. package/dist/runtimes/codebuddy/session.d.ts +5 -0
  124. package/dist/runtimes/codebuddy/session.d.ts.map +1 -0
  125. package/dist/runtimes/codebuddy/session.js +52 -0
  126. package/dist/runtimes/codebuddy/session.js.map +1 -0
  127. package/dist/runtimes/codex/index.d.ts +2 -4
  128. package/dist/runtimes/codex/index.d.ts.map +1 -1
  129. package/dist/runtimes/codex/index.js +1 -1
  130. package/dist/runtimes/codex/index.js.map +1 -1
  131. package/dist/runtimes/cursor/index.js +1 -1
  132. package/dist/runtimes/cursor/index.js.map +1 -1
  133. package/dist/runtimes/cursor/session.d.ts.map +1 -1
  134. package/dist/runtimes/cursor/session.js +2 -1
  135. package/dist/runtimes/cursor/session.js.map +1 -1
  136. package/dist/runtimes/grok/index.d.ts +3 -5
  137. package/dist/runtimes/grok/index.d.ts.map +1 -1
  138. package/dist/runtimes/grok/index.js +1 -1
  139. package/dist/runtimes/grok/index.js.map +1 -1
  140. package/dist/runtimes/kimi/index.d.ts +3 -5
  141. package/dist/runtimes/kimi/index.d.ts.map +1 -1
  142. package/dist/runtimes/kimi/index.js +1 -1
  143. package/dist/runtimes/kimi/index.js.map +1 -1
  144. package/dist/runtimes/opencode/index.d.ts +3 -5
  145. package/dist/runtimes/opencode/index.d.ts.map +1 -1
  146. package/dist/runtimes/opencode/index.js +1 -1
  147. package/dist/runtimes/opencode/index.js.map +1 -1
  148. package/dist/runtimes/opencode/session.js +4 -4
  149. package/dist/runtimes/opencode/session.js.map +1 -1
  150. package/dist/runtimes/pi/index.js +1 -1
  151. package/dist/runtimes/pi/index.js.map +1 -1
  152. package/dist/runtimes/pi/session.d.ts.map +1 -1
  153. package/dist/runtimes/pi/session.js +1 -1
  154. package/dist/runtimes/pi/session.js.map +1 -1
  155. package/dist/runtimes/pi-durable/index.d.ts.map +1 -1
  156. package/dist/runtimes/pi-durable/index.js +3 -3
  157. package/dist/runtimes/pi-durable/index.js.map +1 -1
  158. package/dist/runtimes/pi-durable/session.d.ts +2 -1
  159. package/dist/runtimes/pi-durable/session.d.ts.map +1 -1
  160. package/dist/runtimes/pi-durable/session.js +2 -1
  161. package/dist/runtimes/pi-durable/session.js.map +1 -1
  162. package/dist/runtimes/qoder/daemon.js +2 -2
  163. package/dist/runtimes/qoder/daemon.js.map +1 -1
  164. package/dist/runtimes/qoder/index.d.ts +3 -5
  165. package/dist/runtimes/qoder/index.d.ts.map +1 -1
  166. package/dist/runtimes/qoder/index.js +1 -1
  167. package/dist/runtimes/qoder/index.js.map +1 -1
  168. package/dist/runtimes/qwen/index.d.ts +3 -5
  169. package/dist/runtimes/qwen/index.d.ts.map +1 -1
  170. package/dist/runtimes/qwen/index.js +1 -1
  171. package/dist/runtimes/qwen/index.js.map +1 -1
  172. package/dist/shared/credential-redaction.d.ts +4 -0
  173. package/dist/shared/credential-redaction.d.ts.map +1 -1
  174. package/dist/shared/credential-redaction.js +13 -4
  175. package/dist/shared/credential-redaction.js.map +1 -1
  176. package/dist/shared/deliver-interrupt.d.ts +1 -0
  177. package/dist/shared/deliver-interrupt.d.ts.map +1 -1
  178. package/dist/shared/deliver-interrupt.js +11 -6
  179. package/dist/shared/deliver-interrupt.js.map +1 -1
  180. package/dist/shared/process-pool.d.ts +33 -0
  181. package/dist/shared/process-pool.d.ts.map +1 -0
  182. package/dist/shared/process-pool.js +115 -0
  183. package/dist/shared/process-pool.js.map +1 -0
  184. package/dist/shared/process-session.d.ts +11 -0
  185. package/dist/shared/process-session.d.ts.map +1 -0
  186. package/dist/shared/process-session.js +126 -0
  187. package/dist/shared/process-session.js.map +1 -0
  188. package/dist/shared/seal-session.d.ts +2 -2
  189. package/dist/shared/seal-session.d.ts.map +1 -1
  190. package/dist/shared/seal-session.js +14 -4
  191. package/dist/shared/seal-session.js.map +1 -1
  192. package/dist/shared/session-credentials.d.ts +2 -1
  193. package/dist/shared/session-credentials.d.ts.map +1 -1
  194. package/dist/shared/session-credentials.js +7 -6
  195. package/dist/shared/session-credentials.js.map +1 -1
  196. package/dist/shared/session-kernel.d.ts +7 -4
  197. package/dist/shared/session-kernel.d.ts.map +1 -1
  198. package/dist/shared/session-kernel.js +23 -3
  199. package/dist/shared/session-kernel.js.map +1 -1
  200. package/dist/testing/scripted-runtime.d.ts.map +1 -1
  201. package/dist/testing/scripted-runtime.js +3 -2
  202. package/dist/testing/scripted-runtime.js.map +1 -1
  203. package/package.json +1 -1
@@ -0,0 +1,88 @@
1
+ import { randomUUID } from "node:crypto";
2
+ import { asRecord, parseJson } from "../../shared/json.js";
3
+ import { LoginSecrets, spawnLoginProcess } from "../../shared/login.js";
4
+ export class CodebuddyAccountRefusalError extends Error {
5
+ constructor(message) { super(message); this.name = "CodebuddyAccountRefusalError"; }
6
+ }
7
+ function exitedError() { return new Error("CodeBuddy exited before answering its account query"); }
8
+ function rememberSecrets(value, secrets) {
9
+ if (Array.isArray(value)) {
10
+ for (const item of value) {
11
+ rememberSecrets(item, secrets);
12
+ }
13
+ return;
14
+ }
15
+ const record = asRecord(value);
16
+ if (record === null) {
17
+ return;
18
+ }
19
+ for (const [key, item] of Object.entries(record)) {
20
+ if (typeof item === "string" && /token|secret|password|api.?key|authUrl|^state$|email|^uid$|^userId$|nickname|enterpriseName|enterpriseId|^username$|^displayName$/iu.test(key)) {
21
+ secrets.add(item);
22
+ }
23
+ else if (typeof item === "object") {
24
+ rememberSecrets(item, secrets);
25
+ }
26
+ }
27
+ }
28
+ export function codebuddyAccountControl(command, env, callback = () => { }) {
29
+ const secrets = new LoginSecrets();
30
+ const pending = new Map();
31
+ const child = spawnLoginProcess(command, ["--print", "--input-format", "stream-json", "--output-format", "stream-json"], env, {
32
+ onLine(line, stream) {
33
+ if (stream !== "stdout") {
34
+ return;
35
+ }
36
+ const frame = asRecord(parseJson(line));
37
+ if (frame === null) {
38
+ return;
39
+ }
40
+ rememberSecrets(frame, secrets);
41
+ const response = asRecord(frame.response);
42
+ if (frame.type === "control_response" && typeof response?.request_id === "string") {
43
+ const waiting = pending.get(response.request_id);
44
+ if (waiting === undefined) {
45
+ return;
46
+ }
47
+ pending.delete(response.request_id);
48
+ if (response.subtype === "success") {
49
+ waiting.resolve(asRecord(response.response) ?? {});
50
+ }
51
+ else {
52
+ waiting.reject(new CodebuddyAccountRefusalError(typeof response.error === "string" ? secrets.line(response.error) : "CodeBuddy refused the control request"));
53
+ }
54
+ }
55
+ else if (frame.type === "control_request") {
56
+ const request = asRecord(frame.request);
57
+ if (request !== null) {
58
+ callback(request);
59
+ }
60
+ }
61
+ },
62
+ });
63
+ let exited = false;
64
+ // oxlint-disable-next-line promise/prefer-await-to-then -- exit notification rejects all pending calls
65
+ void child.exited.then(() => {
66
+ exited = true;
67
+ for (const waiting of pending.values()) {
68
+ waiting.reject(exitedError());
69
+ }
70
+ pending.clear();
71
+ return null;
72
+ });
73
+ return {
74
+ process: child, secrets,
75
+ async request(request) {
76
+ if (exited) {
77
+ throw exitedError();
78
+ }
79
+ const id = `oar-account-${randomUUID()}`;
80
+ const waiting = Promise.withResolvers();
81
+ pending.set(id, waiting);
82
+ child.write(`${JSON.stringify({ type: "control_request", request_id: id, request })}\n`);
83
+ const response = await waiting.promise;
84
+ return response;
85
+ },
86
+ };
87
+ }
88
+ //# sourceMappingURL=account-control.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"account-control.js","sources":["../../../src/runtimes/codebuddy/account-control.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import type { AvailableInstallation } from "../../contracts/installation.js";
2
+ import type { AuthStatus, AuthStatusOptions } from "../../contracts/login.js";
3
+ import { type JsonRecord } from "../../shared/json.js";
4
+ /** Do not expose the account object: it contains the access token as well as account identity. */
5
+ export declare function projectCodebuddyAuthStatus(response: JsonRecord): AuthStatus;
6
+ export declare function codebuddyAuthStatus(installation: AvailableInstallation, options?: AuthStatusOptions, signal?: AbortSignal): Promise<AuthStatus>;
7
+ //# sourceMappingURL=auth-status.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth-status.d.ts","sources":["../../../src/runtimes/codebuddy/auth-status.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,iCAAiC,CAAC;AAC7E,OAAO,KAAK,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC9E,OAAO,EAAY,KAAK,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAMjE,kGAAkG;AAClG,wBAAgB,0BAA0B,CAAC,QAAQ,EAAE,UAAU,GAAG,UAAU,CAI3E;AAED,wBAAsB,mBAAmB,CAAC,YAAY,EAAE,qBAAqB,EAAE,OAAO,GAAE,iBAAsB,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC,CAoBzJ"}
@@ -0,0 +1,44 @@
1
+ import { environmentValue, sessionEnvironment } from "../../shared/environment.js";
2
+ import { asRecord } from "../../shared/json.js";
3
+ import { loginBounds } from "../../shared/login.js";
4
+ import { codebuddyAccountControl } from "./account-control.js";
5
+ const SOURCE = "codebuddy stream-json initialize.account";
6
+ /** Do not expose the account object: it contains the access token as well as account identity. */
7
+ export function projectCodebuddyAuthStatus(response) {
8
+ if (response.account === null) {
9
+ return { kind: "logged_out", source: SOURCE };
10
+ }
11
+ if (asRecord(response.account) !== null) {
12
+ return { kind: "logged_in", source: SOURCE };
13
+ }
14
+ return { kind: "unknown", source: SOURCE, detail: "CodeBuddy initialize gave no account state" };
15
+ }
16
+ export async function codebuddyAuthStatus(installation, options = {}, signal) {
17
+ if (installation.via !== "executable") {
18
+ return { kind: "unknown", detail: "not a machine-installed executable" };
19
+ }
20
+ const env = sessionEnvironment(options.env);
21
+ if ((environmentValue(env, "CODEBUDDY_API_KEY") ?? "") !== "") {
22
+ // Native initialize may synthesize an account from this key without validating it.
23
+ return { kind: "unknown", source: SOURCE, configured: ["environment: CODEBUDDY_API_KEY"], detail: "CODEBUDDY_API_KEY is configured; the native account query does not validate this key or its provider endpoint." };
24
+ }
25
+ const bounds = loginBounds(signal, options.timeoutMs ?? 30_000);
26
+ let client = undefined;
27
+ try {
28
+ const control = codebuddyAccountControl(installation.command, env);
29
+ client = control;
30
+ const read = async () => projectCodebuddyAuthStatus(await control.request({ subtype: "initialize" }));
31
+ const timeout = async () => { const stopped = await bounds.stopped; return { kind: "unknown", source: SOURCE, detail: stopped === "cancelled" ? "CodeBuddy account query cancelled" : "CodeBuddy account query timed out" }; };
32
+ return await Promise.race([read(), timeout()]);
33
+ }
34
+ catch {
35
+ // Process output and control errors can contain an account or a credential.
36
+ return { kind: "unknown", source: SOURCE, detail: "CodeBuddy account query ended without an answer" };
37
+ }
38
+ finally {
39
+ bounds.dispose();
40
+ client?.process.stop();
41
+ await client?.process.exited;
42
+ }
43
+ }
44
+ //# sourceMappingURL=auth-status.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth-status.js","sources":["../../../src/runtimes/codebuddy/auth-status.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /** Native 2.178.1 ExtensionMethod and extNotification call sites.
2
+ * question and delegateTool are requests, not notifications. Preserve
3
+ * received notifications without inventing typed UI, task or child semantics. */
4
+ export declare const codebuddyNotifications: readonly string[];
5
+ //# sourceMappingURL=extensions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extensions.d.ts","sources":["../../../src/runtimes/codebuddy/extensions.ts"],"names":[],"mappings":"AAAA;;iFAEiF;AACjF,eAAO,MAAM,sBAAsB,EAAE,SAAS,MAAM,EAuBnD,CAAC"}
@@ -0,0 +1,28 @@
1
+ /** Native 2.178.1 ExtensionMethod and extNotification call sites.
2
+ * question and delegateTool are requests, not notifications. Preserve
3
+ * received notifications without inventing typed UI, task or child semantics. */
4
+ export const codebuddyNotifications = [
5
+ "_codebuddy.ai/artifact",
6
+ "_codebuddy.ai/artifactBatch",
7
+ "_codebuddy.ai/checkpoint",
8
+ "_codebuddy.ai/command",
9
+ "_codebuddy.ai/authUrl",
10
+ "_codebuddy.ai/liteModelReset",
11
+ "_codebuddy.ai/file_history_snapshot",
12
+ "_codebuddy.ai/delegateToolsChanged",
13
+ "_codebuddy.ai/uiControl",
14
+ "_codebuddy.ai/modRender",
15
+ "_codebuddy.ai/modPress",
16
+ "_codebuddy.ai/fileDirectoryApproval/committed",
17
+ "_codebuddy.ai/modAuthoringChanged",
18
+ "_codebuddy.ai/modClientQuery",
19
+ "_codebuddy.ai/modClientQueryCancel",
20
+ "_codebuddy.ai/modViewEvent",
21
+ "_codebuddy.ai/modSlots",
22
+ "_codebuddy.ai/modRenderFold",
23
+ "_codebuddy.ai/modResidentInvalidate",
24
+ "_codebuddy.ai/modComponentsChanged",
25
+ "_codebuddy.ai/modClientReadyRequired",
26
+ "_codebuddy.ai/modCustomizationChanged",
27
+ ];
28
+ //# sourceMappingURL=extensions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extensions.js","sources":["../../../src/runtimes/codebuddy/extensions.ts"],"names":[],"mappings":"AAAA;;iFAEiF;AACjF,MAAM,CAAC,MAAM,sBAAsB,GAAsB;IACvD,wBAAwB;IACxB,6BAA6B;IAC7B,0BAA0B;IAC1B,uBAAuB;IACvB,uBAAuB;IACvB,8BAA8B;IAC9B,qCAAqC;IACrC,oCAAoC;IACpC,yBAAyB;IACzB,yBAAyB;IACzB,wBAAwB;IACxB,+CAA+C;IAC/C,mCAAmC;IACnC,8BAA8B;IAC9B,oCAAoC;IACpC,4BAA4B;IAC5B,wBAAwB;IACxB,6BAA6B;IAC7B,qCAAqC;IACrC,oCAAoC;IACpC,sCAAsC;IACtC,uCAAuC;CACxC,CAAC"}
@@ -0,0 +1,5 @@
1
+ import type { TurnOutcome } from "../../contracts/session.js";
2
+ import { type JsonRecord } from "../../shared/json.js";
3
+ /** A successful prompt RPC can still carry a failed native task outcome. */
4
+ export declare function codebuddyPromptOutcome(response: JsonRecord): TurnOutcome | null;
5
+ //# sourceMappingURL=failure.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"failure.d.ts","sources":["../../../src/runtimes/codebuddy/failure.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAgB,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAE5E,OAAO,EAAiC,KAAK,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAQtF,4EAA4E;AAC5E,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,UAAU,GAAG,WAAW,GAAG,IAAI,CAqB/E"}
@@ -0,0 +1,35 @@
1
+ import { failureFromStatus } from "../../shared/failure-class.js";
2
+ import { asNumber, asRecord, parseJson } from "../../shared/json.js";
3
+ // Native 2.178.1 error categories precede the less specific HTTP status.
4
+ const CATEGORIES = {
5
+ quota: "quota", auth: "auth", custom_model_auth: "auth", network: "unknown",
6
+ model_service: "provider", empty_model_response: "provider", internal: "unknown",
7
+ };
8
+ /** A successful prompt RPC can still carry a failed native task outcome. */
9
+ export function codebuddyPromptOutcome(response) {
10
+ if (response.stopReason === "cancelled") {
11
+ return { kind: "aborted" };
12
+ }
13
+ // oxlint-disable-next-line eslint/no-underscore-dangle -- Native ACP extension envelope.
14
+ const meta = asRecord(response._meta);
15
+ const outcome = meta?.["codebuddy.ai/outcome"];
16
+ if (response.stopReason !== "refusal" && !(typeof outcome === "string" && outcome.startsWith("FAILED"))) {
17
+ return null;
18
+ }
19
+ const raw = meta?.["codebuddy.ai/errorMessage"];
20
+ const error = typeof raw === "string" ? asRecord(parseJson(raw)) : null;
21
+ const nested = asRecord(error?.error);
22
+ const data = asRecord(error?.data);
23
+ const nestedData = asRecord(nested?.data);
24
+ const category = data?.category ?? nestedData?.category;
25
+ const status = asNumber(data?.statusCode) ?? asNumber(nestedData?.statusCode);
26
+ const message = error?.message ?? nested?.message;
27
+ const fallback = typeof outcome === "string" ? outcome : String(response.stopReason);
28
+ return {
29
+ kind: "failed", failure: (typeof category === "string" ? CATEGORIES[category] : undefined)
30
+ ?? (status === null ? "unknown" : failureFromStatus(status)),
31
+ reason: typeof message === "string" ? message : fallback,
32
+ ...(status === null ? {} : { status }),
33
+ };
34
+ }
35
+ //# sourceMappingURL=failure.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"failure.js","sources":["../../../src/runtimes/codebuddy/failure.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAClE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAmB,MAAM,sBAAsB,CAAC;AAEtF,yEAAyE;AACzE,MAAM,UAAU,GAAoD;IAClE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS;IAC3E,aAAa,EAAE,UAAU,EAAE,oBAAoB,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS;CACjF,CAAC;AAEF,4EAA4E;AAC5E,MAAM,UAAU,sBAAsB,CAAC,QAAoB;IACzD,IAAI,QAAQ,CAAC,UAAU,KAAK,WAAW,EAAE,CAAC;QAAC,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;IAAC,CAAC;IACxE,yFAAyF;IACzF,MAAM,IAAI,GAAG,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IACtC,MAAM,OAAO,GAAG,IAAI,EAAE,CAAC,sBAAsB,CAAC,CAAC;IAC/C,IAAI,QAAQ,CAAC,UAAU,KAAK,SAAS,IAAI,CAAC,CAAC,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC;QAAC,OAAO,IAAI,CAAC;IAAC,CAAC;IACzH,MAAM,GAAG,GAAG,IAAI,EAAE,CAAC,2BAA2B,CAAC,CAAC;IAChD,MAAM,KAAK,GAAG,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACxE,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IACtC,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IACnC,MAAM,UAAU,GAAG,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAC1C,MAAM,QAAQ,GAAG,IAAI,EAAE,QAAQ,IAAI,UAAU,EAAE,QAAQ,CAAC;IACxD,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC,IAAI,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;IAC9E,MAAM,OAAO,GAAG,KAAK,EAAE,OAAO,IAAI,MAAM,EAAE,OAAO,CAAC;IAClD,MAAM,QAAQ,GAAG,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;IACrF,OAAO;QACL,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,OAAO,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;eACrF,CAAC,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;QAC9D,MAAM,EAAE,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ;QACxD,GAAG,CAAC,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC;KACvC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,18 @@
1
+ export declare const codebuddyRuntime: Omit<{
2
+ readonly id: "codebuddy";
3
+ readonly brand: {
4
+ readonly name: "CodeBuddy Code";
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 refusedSessionOptions: Readonly<Partial<Record<import("../../contracts/runtime.js").RefusableSessionOption, string>>>;
12
+ readonly installation: import("../../browser.js").InstallationProbe;
13
+ readonly listModels: (installation: import("../../browser.js").AvailableInstallation, options?: import("../../browser.js").ListModelsOptions | undefined) => Promise<import("../../browser.js").ListModelsResult>;
14
+ readonly login: (installation: import("../../browser.js").AvailableInstallation, interaction: import("../../browser.js").ProviderLoginInteraction, options?: import("../../contracts/login.js").LoginOptions | undefined) => Promise<import("../../contracts/login.js").LoginResult>;
15
+ readonly authStatus: (installation: import("../../browser.js").AvailableInstallation, options?: import("../../contracts/login.js").AuthStatusOptions | undefined) => Promise<import("../../contracts/login.js").AuthStatus>;
16
+ readonly session: (installation: import("../../browser.js").AvailableInstallation, options: import("../../browser.js").SessionOptions, context?: import("../../browser.js").SessionOpenContext | undefined) => Promise<import("../../browser.js").Session>;
17
+ }, "placement" | "session" | "withPlacement"> & import("../../contracts/runtime.js").Runtime;
18
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sources":["../../../src/runtimes/codebuddy/index.ts"],"names":[],"mappings":"AAOA,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;4FAQD,CAAC"}
@@ -0,0 +1,15 @@
1
+ import { runtimeBrands } from "../../brands.js";
2
+ import { defineRuntime } from "../../contracts/runtime.js";
3
+ import { onFirstCall } from "../../shared/lazy.js";
4
+ import { codebuddyInstallation } from "./installation.js";
5
+ import { codebuddyRefusedSessionOptions } from "./options.js";
6
+ export const codebuddyRuntime = defineRuntime({
7
+ id: "codebuddy", brand: runtimeBrands.codebuddy,
8
+ refusedSessionOptions: codebuddyRefusedSessionOptions,
9
+ installation: codebuddyInstallation,
10
+ listModels: onFirstCall(async () => { const { codebuddyListModels } = await import("./list-models.js"); return codebuddyListModels; }),
11
+ login: onFirstCall(async () => { const { codebuddyLogin } = await import("./login.js"); return codebuddyLogin; }),
12
+ authStatus: onFirstCall(async () => { const { codebuddyAuthStatus } = await import("./auth-status.js"); return codebuddyAuthStatus; }),
13
+ session: onFirstCall(async () => { const { codebuddySession } = await import("./session.js"); return codebuddySession; }),
14
+ }, { execution: "process" });
15
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../../../src/runtimes/codebuddy/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,EAAE,8BAA8B,EAAE,MAAM,cAAc,CAAC;AAE9D,MAAM,CAAC,MAAM,gBAAgB,GAAG,aAAa,CAAC;IAC5C,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,aAAa,CAAC,SAAS;IAC/C,qBAAqB,EAAE,8BAA8B;IACrD,YAAY,EAAE,qBAAqB;IACnC,UAAU,EAAE,WAAW,CAAC,KAAK,IAAI,EAAE,GAAG,MAAM,EAAE,mBAAmB,EAAE,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,CAAC,CAAC,OAAO,mBAAmB,CAAC,CAAC,CAAC,CAAC;IACtI,KAAK,EAAE,WAAW,CAAC,KAAK,IAAI,EAAE,GAAG,MAAM,EAAE,cAAc,EAAE,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,OAAO,cAAc,CAAC,CAAC,CAAC,CAAC;IACjH,UAAU,EAAE,WAAW,CAAC,KAAK,IAA+B,EAAE,GAAG,MAAM,EAAE,mBAAmB,EAAE,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,CAAC,CAAC,OAAO,mBAAmB,CAAC,CAAC,CAAC,CAAC;IACjK,OAAO,EAAE,WAAW,CAAC,KAAK,IAAI,EAAE,GAAG,MAAM,EAAE,gBAAgB,EAAE,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,OAAO,gBAAgB,CAAC,CAAC,CAAC,CAAC;CAC1H,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare const codebuddyInstallation: import("../../browser.js").InstallationProbe;
2
+ //# sourceMappingURL=installation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"installation.d.ts","sources":["../../../src/runtimes/codebuddy/installation.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,qBAAqB,8CAEpB,CAAC"}
@@ -0,0 +1,7 @@
1
+ import { environmentHome } from "../../shared/environment-home.js";
2
+ import path from "node:path";
3
+ import { executableInstallation } from "../../shared/installation.js";
4
+ export const codebuddyInstallation = executableInstallation("OAR_CODEBUDDY_BIN", "codebuddy", (env) => [
5
+ path.join(environmentHome(env), ".local", "bin", process.platform === "win32" ? "codebuddy.exe" : "codebuddy"),
6
+ ], ["--help"]);
7
+ //# sourceMappingURL=installation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"installation.js","sources":["../../../src/runtimes/codebuddy/installation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AACnE,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAC;AAEtE,MAAM,CAAC,MAAM,qBAAqB,GAAG,sBAAsB,CAAC,mBAAmB,EAAE,WAAW,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC;IACrG,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,WAAW,CAAC;CAC/G,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC"}
@@ -0,0 +1,6 @@
1
+ import type { ModelEntry, ModelLister } from "../../contracts/list-models.js";
2
+ /** CodeBuddy 2.178.1 returns the model menu and current selection on session/new.
3
+ * The thought-level menu belongs to that current model only. */
4
+ export declare function projectCodebuddyModels(response: unknown): ModelEntry[] | undefined;
5
+ export declare const codebuddyListModels: ModelLister;
6
+ //# sourceMappingURL=list-models.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list-models.d.ts","sources":["../../../src/runtimes/codebuddy/list-models.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAe9E;gEACgE;AAChE,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,OAAO,GAAG,UAAU,EAAE,GAAG,SAAS,CA6BlF;AAuCD,eAAO,MAAM,mBAAmB,EAAE,WAkBjC,CAAC"}
@@ -0,0 +1,90 @@
1
+ import { sessionEnvironment } from "../../shared/environment.js";
2
+ /* oxlint-disable typescript/promise-function-async -- Deadline callbacks deliberately return the SDK's native promises. */
3
+ import { client as createClient, methods, PROTOCOL_VERSION, RequestError, } from "@agentclientprotocol/sdk";
4
+ import { startAcpProcess, withAcpDeadline } from "../../shared/acp/process.js";
5
+ import { acpThoughtLevelOption } from "../../shared/acp/model.js";
6
+ import { asRecord, asRecordList } from "../../shared/json.js";
7
+ import { listingCwd } from "../../shared/listing-cwd.js";
8
+ function text(value) {
9
+ if (typeof value !== "string") {
10
+ return undefined;
11
+ }
12
+ const trimmed = value.trim();
13
+ return trimmed.length > 0 ? trimmed : undefined;
14
+ }
15
+ /** CodeBuddy 2.178.1 returns the model menu and current selection on session/new.
16
+ * The thought-level menu belongs to that current model only. */
17
+ export function projectCodebuddyModels(response) {
18
+ const root = asRecord(response);
19
+ const modelOption = asRecordList(root?.configOptions).find((option) => option.id === "model");
20
+ if (modelOption === undefined) {
21
+ return undefined;
22
+ }
23
+ // A new session's current model: what a session uses with no `model` set.
24
+ const current = text(modelOption.currentValue);
25
+ const thinking = acpThoughtLevelOption(root);
26
+ const effortLevels = asRecordList(thinking?.options)
27
+ .map((option) => text(option.value))
28
+ .filter((value) => value !== undefined && value !== "enabled" && value !== "disabled");
29
+ const defaultEffort = text(thinking?.currentValue);
30
+ const entries = [];
31
+ for (const model of asRecordList(modelOption.options)) {
32
+ const id = text(model.value);
33
+ if (id === undefined) {
34
+ continue;
35
+ }
36
+ const displayName = text(model.name);
37
+ entries.push({
38
+ id,
39
+ ...(displayName === undefined || displayName === id ? {} : { displayName }),
40
+ ...(id === current ? { default: true } : {}),
41
+ ...(id === current && effortLevels.length > 0 ? { effortLevels } : {}),
42
+ ...(id === current && defaultEffort !== undefined && effortLevels.includes(defaultEffort) ? { defaultEffort } : {}),
43
+ });
44
+ }
45
+ return entries;
46
+ }
47
+ async function readNewSession(command, cwd, timeoutMs, env) {
48
+ const runtime = startAcpProcess(command, ["--acp", "--permission-mode", "bypassPermissions"], createClient({ name: "oar" }), { cwd, env });
49
+ try {
50
+ const initialize = methods.agent.initialize;
51
+ await withAcpDeadline(runtime, initialize, timeoutMs, (requestOptions) => runtime.connection.agent.request(initialize, {
52
+ protocolVersion: PROTOCOL_VERSION,
53
+ clientCapabilities: {
54
+ fs: { readTextFile: false, writeTextFile: false },
55
+ terminal: false,
56
+ },
57
+ clientInfo: { name: "oar", version: "0.0.0" },
58
+ }, requestOptions));
59
+ // No `authenticate` or `session/close`: the server reads its
60
+ // own persisted login, and the process is killed once the list is read.
61
+ const newSession = methods.agent.session.new;
62
+ const response = await withAcpDeadline(runtime, newSession, timeoutMs, (requestOptions) => runtime.connection.agent.request(newSession, { cwd, mcpServers: [] }, requestOptions));
63
+ return asRecord(response) ?? {};
64
+ }
65
+ finally {
66
+ runtime.kill();
67
+ await runtime.exited;
68
+ }
69
+ }
70
+ export const codebuddyListModels = async (installation, options = {}) => {
71
+ if (installation.via !== "executable") {
72
+ return { kind: "unsupported", reason: "codebuddy model listing requires the CodeBuddy executable" };
73
+ }
74
+ try {
75
+ const response = await readNewSession(installation.command, listingCwd(options), options.timeoutMs ?? 30_000, sessionEnvironment(options.env));
76
+ const models = projectCodebuddyModels(response);
77
+ if (models === undefined) {
78
+ return { kind: "unsupported", reason: "this CodeBuddy build returns no model config option on session/new" };
79
+ }
80
+ return { kind: "ok", models };
81
+ }
82
+ catch (error) {
83
+ if (error instanceof RequestError && (error.code === -32_000 || /auth(?:entication)?|log(?:ged)? ?in/iu.test(error.message))) {
84
+ return { kind: "unauthenticated", detail: "CodeBuddy requires authentication" };
85
+ }
86
+ // oxlint-disable-next-line eslint/preserve-caught-error -- Native errors may contain credentials or account details.
87
+ throw new Error("Failed to list CodeBuddy models");
88
+ }
89
+ };
90
+ //# sourceMappingURL=list-models.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list-models.js","sources":["../../../src/runtimes/codebuddy/list-models.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import type { AvailableInstallation } from "../../contracts/installation.js";
2
+ import type { LoginOptions, LoginResult } from "../../contracts/login.js";
3
+ import type { ProviderLoginInteraction } from "../../contracts/provider-auth.js";
4
+ /** Keep the CLI's current account environment, including CODEBUDDY_INTERNET_ENVIRONMENT. */
5
+ export declare function codebuddyLogin(installation: AvailableInstallation, interaction: ProviderLoginInteraction, options?: LoginOptions): Promise<LoginResult>;
6
+ //# sourceMappingURL=login.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"login.d.ts","sources":["../../../src/runtimes/codebuddy/login.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,iCAAiC,CAAC;AAC7E,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAC1E,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,kCAAkC,CAAC;AAcjF,4FAA4F;AAC5F,wBAAsB,cAAc,CAAC,YAAY,EAAE,qBAAqB,EAAE,WAAW,EAAE,wBAAwB,EAAE,OAAO,GAAE,YAAiB,GAAG,OAAO,CAAC,WAAW,CAAC,CAgEjK"}
@@ -0,0 +1,110 @@
1
+ import { sessionEnvironment } from "../../shared/environment.js";
2
+ import path from "node:path";
3
+ import { errorMessage, loginBounds, loginExecutable, stoppedResult } from "../../shared/login.js";
4
+ import { asRecord } from "../../shared/json.js";
5
+ import { codebuddyAccountControl } from "./account-control.js";
6
+ import { codebuddyAuthStatus } from "./auth-status.js";
7
+ /** Native auth_failed includes token retrieval errors, not an explicit authorization denial. */
8
+ function authenticationFailure(value, redact) {
9
+ const error = asRecord(value);
10
+ if (error?.type === "cancelled") {
11
+ return { kind: "cancelled" };
12
+ }
13
+ const reason = error?.type === "timeout" ? "timed_out" : "process_failed";
14
+ return { kind: "failed", reason, detail: typeof error?.message === "string" ? redact(error.message) : "CodeBuddy reported that authentication failed" };
15
+ }
16
+ /** Keep the CLI's current account environment, including CODEBUDDY_INTERNET_ENVIRONMENT. */
17
+ export async function codebuddyLogin(installation, interaction, options = {}) {
18
+ const target = loginExecutable(installation, "CodeBuddy", undefined, sessionEnvironment(options.env));
19
+ if (target.kind === "settled") {
20
+ return target.result;
21
+ }
22
+ const aborted = () => interaction.signal?.aborted === true;
23
+ if (aborted()) {
24
+ return { kind: "cancelled" };
25
+ }
26
+ const timeoutMs = options.timeoutMs ?? 5 * 60_000;
27
+ const deadline = Date.now() + timeoutMs;
28
+ const bounds = loginBounds(interaction.signal, timeoutMs);
29
+ const interactionFailed = Promise.withResolvers();
30
+ let client = undefined;
31
+ const flowState = { success: false };
32
+ let settled = false;
33
+ const env = sessionEnvironment(options.env);
34
+ if (options.openBrowser === false) {
35
+ // CodeBuddy's UrlUtils honors BROWSER and does not fall back when it fails.
36
+ env.BROWSER = process.platform === "win32" ? path.join(env.SystemRoot ?? String.raw `C:\Windows`, "System32", "hostname.exe") : "true";
37
+ }
38
+ try {
39
+ client = codebuddyAccountControl(target.installation.command, env, (request) => {
40
+ if (settled) {
41
+ return;
42
+ }
43
+ if (request.subtype === "auth_result_callback" && request.success === true) {
44
+ flowState.success = true;
45
+ }
46
+ if (request.subtype === "auth_result_callback" && request.success === false && asRecord(request.error) !== null) {
47
+ flowState.failure = authenticationFailure(request.error, (text) => client?.secrets.line(text) ?? "CodeBuddy authentication failed");
48
+ }
49
+ const auth = asRecord(request.authState);
50
+ if (request.subtype === "auth_url_callback" && typeof auth?.authUrl === "string") {
51
+ try {
52
+ interaction.onEvent({ kind: "auth_url", url: auth.authUrl, instructions: "Open this URL to sign in to CodeBuddy." });
53
+ }
54
+ catch (error) {
55
+ settled = true;
56
+ interactionFailed.resolve({ kind: "failed", reason: "interaction_failed", detail: client?.secrets.line(errorMessage(error)) ?? "Could not display the login link" });
57
+ }
58
+ }
59
+ });
60
+ const control = client;
61
+ const flow = async () => {
62
+ await control.request({ subtype: "initialize" });
63
+ if (settled) {
64
+ return { kind: "failed", reason: "interaction_failed" };
65
+ }
66
+ // 2.173.0 lists cli-external-link but its provider inherits a different
67
+ // getAuthenticationType. Leave selection to native support(), as the TUI does.
68
+ const answer = await control.request({ subtype: "authenticate" });
69
+ flowState.success ||= answer.success === true;
70
+ return flowState.success ? { kind: "logged_in" } : flowState.failure ?? authenticationFailure(answer.error, (text) => control.secrets.line(text));
71
+ };
72
+ const stopped = async () => stoppedResult(await bounds.stopped, timeoutMs);
73
+ let result = { kind: "failed", reason: "process_failed" };
74
+ try {
75
+ result = await Promise.race([flow(), stopped(), interactionFailed.promise]);
76
+ }
77
+ catch (error) {
78
+ result = flowState.failure ?? { kind: "failed", reason: "process_failed", detail: control.secrets.line(errorMessage(error)) };
79
+ }
80
+ settled = true;
81
+ control.process.stop();
82
+ await control.process.exited;
83
+ if (!flowState.success) {
84
+ return result;
85
+ }
86
+ if (aborted()) {
87
+ return { kind: "logged_in" };
88
+ }
89
+ // Confirmation shares the login deadline and cancellation signal. A
90
+ // native success remains success unless a fresh read contradicts it.
91
+ const remaining = deadline - Date.now();
92
+ if (remaining <= 0) {
93
+ return { kind: "logged_in" };
94
+ }
95
+ const status = await codebuddyAuthStatus(installation, { env: options.env, timeoutMs: Math.min(30_000, remaining) }, interaction.signal);
96
+ return status.kind === "logged_out"
97
+ ? { kind: "failed", reason: "not_logged_in", detail: "CodeBuddy reported success but its account query reads logged out" }
98
+ : { kind: "logged_in" };
99
+ }
100
+ catch {
101
+ return { kind: "failed", reason: "process_failed", detail: "CodeBuddy login could not start" };
102
+ }
103
+ finally {
104
+ settled = true;
105
+ bounds.dispose();
106
+ client?.process.stop();
107
+ await client?.process.exited;
108
+ }
109
+ }
110
+ //# sourceMappingURL=login.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"login.js","sources":["../../../src/runtimes/codebuddy/login.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { RefusedSessionOptions } from "../../contracts/runtime.js";
2
+ import type { SessionOptions } from "../../contracts/session.js";
3
+ export declare const codebuddyRefusedSessionOptions: RefusedSessionOptions;
4
+ export declare function checkCodebuddyLaunchArgs(args: SessionOptions["launchArgs"]): void;
5
+ //# sourceMappingURL=options.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"options.d.ts","sources":["../../../src/runtimes/codebuddy/options.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACxE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAGjE,eAAO,MAAM,8BAA8B,EAAE,qBAQ5C,CAAC;AAEF,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,cAAc,CAAC,YAAY,CAAC,GAAG,IAAI,CAOjF"}
@@ -0,0 +1,21 @@
1
+ import { UnsupportedOptionError } from "../../contracts/errors.js";
2
+ export const codebuddyRefusedSessionOptions = {
3
+ goals: "CodeBuddy ACP has no verified structured goal controls",
4
+ appendSystemPrompt: "CodeBuddy ACP prompt append has no verified private input channel",
5
+ userConfiguration: "CodeBuddy has no verified way to exclude user configuration while preserving native credentials and history",
6
+ outputSchema: "CodeBuddy ACP has no verified final-output schema channel",
7
+ name: "CodeBuddy has no verified session name option",
8
+ serviceTier: "CodeBuddy ACP has no verified service-tier setting and readback",
9
+ additionalDirectories: "CodeBuddy ACP does not advertise additionalDirectories",
10
+ };
11
+ export function checkCodebuddyLaunchArgs(args) {
12
+ const managed = new Set(["--acp", "--acp-transport", "--serve", "--print", "-p", "--input-format", "--output-format",
13
+ "--resume", "-r", "--continue", "-c", "--session-id", "--fork-session", "--permission-mode", "--permission-mode-before-plan", "--system-prompt", "--system-prompt-file", "--"]);
14
+ for (const arg of args ?? []) {
15
+ const flag = arg.split("=", 1)[0] ?? arg;
16
+ if (managed.has(flag)) {
17
+ throw new UnsupportedOptionError("launchArgs", `CodeBuddy launchArgs cannot override ${flag}; OAR owns the protocol and session identity`);
18
+ }
19
+ }
20
+ }
21
+ //# sourceMappingURL=options.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"options.js","sources":["../../../src/runtimes/codebuddy/options.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AAEnE,MAAM,CAAC,MAAM,8BAA8B,GAA0B;IACnE,KAAK,EAAE,wDAAwD;IAC/D,kBAAkB,EAAE,mEAAmE;IACvF,iBAAiB,EAAE,6GAA6G;IAChI,YAAY,EAAE,2DAA2D;IACzE,IAAI,EAAE,+CAA+C;IACrD,WAAW,EAAE,iEAAiE;IAC9E,qBAAqB,EAAE,wDAAwD;CAChF,CAAC;AAEF,MAAM,UAAU,wBAAwB,CAAC,IAAkC;IACzE,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,CAAC,OAAO,EAAE,iBAAiB,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,gBAAgB,EAAE,iBAAiB;QAClH,UAAU,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,cAAc,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,+BAA+B,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,IAAI,CAAC,CAAC,CAAC;IAClL,KAAK,MAAM,GAAG,IAAI,IAAI,IAAI,EAAE,EAAE,CAAC;QAC7B,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC;QACzC,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YAAC,MAAM,IAAI,sBAAsB,CAAC,YAAY,EAAE,wCAAwC,IAAI,8CAA8C,CAAC,CAAC;QAAC,CAAC;IACxK,CAAC;AACH,CAAC"}