ds-harness-remote 0.5.8 → 0.5.11

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 (232) hide show
  1. package/dist/acp/adapter.d.ts +1 -1
  2. package/dist/acp/adapter.d.ts.map +1 -1
  3. package/dist/acp/adapters/claude-history.d.ts +3 -0
  4. package/dist/acp/adapters/claude-history.d.ts.map +1 -0
  5. package/dist/acp/adapters/claude-history.js +118 -0
  6. package/dist/acp/adapters/claude-history.js.map +1 -0
  7. package/dist/acp/adapters/claude-process.d.ts +21 -0
  8. package/dist/acp/adapters/claude-process.d.ts.map +1 -0
  9. package/dist/acp/adapters/claude-process.js +147 -0
  10. package/dist/acp/adapters/claude-process.js.map +1 -0
  11. package/dist/acp/adapters/cursor-process.d.ts +12 -4
  12. package/dist/acp/adapters/cursor-process.d.ts.map +1 -1
  13. package/dist/acp/adapters/cursor-process.js +86 -4
  14. package/dist/acp/adapters/cursor-process.js.map +1 -1
  15. package/dist/acp/adapters/isolated-process.d.ts +45 -0
  16. package/dist/acp/adapters/isolated-process.d.ts.map +1 -0
  17. package/dist/acp/adapters/isolated-process.js +299 -0
  18. package/dist/acp/adapters/isolated-process.js.map +1 -0
  19. package/dist/acp/adapters/opencode-native-api.d.ts +16 -0
  20. package/dist/acp/adapters/opencode-native-api.d.ts.map +1 -0
  21. package/dist/acp/adapters/opencode-native-api.js +103 -0
  22. package/dist/acp/adapters/opencode-native-api.js.map +1 -0
  23. package/dist/acp/adapters/opencode-process.d.ts +86 -0
  24. package/dist/acp/adapters/opencode-process.d.ts.map +1 -0
  25. package/dist/acp/adapters/opencode-process.js +483 -0
  26. package/dist/acp/adapters/opencode-process.js.map +1 -0
  27. package/dist/acp/adapters/opencode.d.ts +8 -0
  28. package/dist/acp/adapters/opencode.d.ts.map +1 -0
  29. package/dist/acp/adapters/opencode.js +8 -0
  30. package/dist/acp/adapters/opencode.js.map +1 -0
  31. package/dist/acp/adapters/pi-process.d.ts +5 -0
  32. package/dist/acp/adapters/pi-process.d.ts.map +1 -0
  33. package/dist/acp/adapters/pi-process.js +5 -0
  34. package/dist/acp/adapters/pi-process.js.map +1 -0
  35. package/dist/acp/adapters/session-models.d.ts +33 -0
  36. package/dist/acp/adapters/session-models.d.ts.map +1 -0
  37. package/dist/acp/adapters/session-models.js +78 -0
  38. package/dist/acp/adapters/session-models.js.map +1 -0
  39. package/dist/acp/gateway.d.ts +10 -0
  40. package/dist/acp/gateway.d.ts.map +1 -1
  41. package/dist/acp/gateway.js +405 -71
  42. package/dist/acp/gateway.js.map +1 -1
  43. package/dist/acp/history-events.d.ts +8 -0
  44. package/dist/acp/history-events.d.ts.map +1 -0
  45. package/dist/acp/history-events.js +119 -0
  46. package/dist/acp/history-events.js.map +1 -0
  47. package/dist/acp/method-policy.d.ts +30 -20
  48. package/dist/acp/method-policy.d.ts.map +1 -1
  49. package/dist/acp/method-policy.js +6 -5
  50. package/dist/acp/method-policy.js.map +1 -1
  51. package/dist/acp/peer-bridge.d.ts +3 -2
  52. package/dist/acp/peer-bridge.d.ts.map +1 -1
  53. package/dist/acp/peer-bridge.js +4 -0
  54. package/dist/acp/peer-bridge.js.map +1 -1
  55. package/dist/acp/pi-tool-result.d.ts +9 -0
  56. package/dist/acp/pi-tool-result.d.ts.map +1 -0
  57. package/dist/acp/pi-tool-result.js +22 -0
  58. package/dist/acp/pi-tool-result.js.map +1 -0
  59. package/dist/acp/virtual-catalog.d.ts +50 -0
  60. package/dist/acp/virtual-catalog.d.ts.map +1 -0
  61. package/dist/acp/virtual-catalog.js +90 -0
  62. package/dist/acp/virtual-catalog.js.map +1 -0
  63. package/dist/acp/virtual-contract.d.ts +172 -0
  64. package/dist/acp/virtual-contract.d.ts.map +1 -0
  65. package/dist/acp/virtual-contract.js +216 -0
  66. package/dist/acp/virtual-contract.js.map +1 -0
  67. package/dist/acp/virtual-event-carrier.d.ts +51 -0
  68. package/dist/acp/virtual-event-carrier.d.ts.map +1 -0
  69. package/dist/acp/virtual-event-carrier.js +222 -0
  70. package/dist/acp/virtual-event-carrier.js.map +1 -0
  71. package/dist/acp/virtual-harness.d.ts +18 -112
  72. package/dist/acp/virtual-harness.d.ts.map +1 -1
  73. package/dist/acp/virtual-harness.js +238 -952
  74. package/dist/acp/virtual-harness.js.map +1 -1
  75. package/dist/acp/virtual-live.d.ts +79 -0
  76. package/dist/acp/virtual-live.d.ts.map +1 -0
  77. package/dist/acp/virtual-live.js +514 -0
  78. package/dist/acp/virtual-live.js.map +1 -0
  79. package/dist/acp/workspace-tools.js +1 -1
  80. package/dist/acp/workspace-tools.js.map +1 -1
  81. package/dist/acp.d.ts.map +1 -1
  82. package/dist/acp.js +1 -0
  83. package/dist/acp.js.map +1 -1
  84. package/dist/client/header.d.ts +10 -0
  85. package/dist/client/header.d.ts.map +1 -0
  86. package/dist/client/header.js +169 -0
  87. package/dist/client/header.js.map +1 -0
  88. package/dist/client/icons.d.ts +3 -0
  89. package/dist/client/icons.d.ts.map +1 -0
  90. package/dist/client/icons.js +3 -0
  91. package/dist/client/icons.js.map +1 -0
  92. package/dist/client/navigation.d.ts +5 -0
  93. package/dist/client/navigation.d.ts.map +1 -0
  94. package/dist/client/navigation.js +30 -0
  95. package/dist/client/navigation.js.map +1 -0
  96. package/dist/client/presentation.d.ts +17 -0
  97. package/dist/client/presentation.d.ts.map +1 -0
  98. package/dist/client/presentation.js +208 -0
  99. package/dist/client/presentation.js.map +1 -0
  100. package/dist/client/progress.d.ts +10 -0
  101. package/dist/client/progress.d.ts.map +1 -0
  102. package/dist/client/progress.js +82 -0
  103. package/dist/client/progress.js.map +1 -0
  104. package/dist/client/settings.d.ts +10 -0
  105. package/dist/client/settings.d.ts.map +1 -0
  106. package/dist/client/settings.js +335 -0
  107. package/dist/client/settings.js.map +1 -0
  108. package/dist/client/shell.d.ts +6 -0
  109. package/dist/client/shell.d.ts.map +1 -0
  110. package/dist/client/shell.js +129 -0
  111. package/dist/client/shell.js.map +1 -0
  112. package/dist/client/types.d.ts +265 -0
  113. package/dist/client/types.d.ts.map +1 -0
  114. package/dist/client/types.js +2 -0
  115. package/dist/client/types.js.map +1 -0
  116. package/dist/client/workspaces.d.ts +11 -0
  117. package/dist/client/workspaces.d.ts.map +1 -0
  118. package/dist/client/workspaces.js +1261 -0
  119. package/dist/client/workspaces.js.map +1 -0
  120. package/dist/client-capabilities.d.ts +6 -0
  121. package/dist/client-capabilities.d.ts.map +1 -0
  122. package/dist/client-capabilities.js +90 -0
  123. package/dist/client-capabilities.js.map +1 -0
  124. package/dist/client-codex-streams.d.ts +23 -0
  125. package/dist/client-codex-streams.d.ts.map +1 -0
  126. package/dist/client-codex-streams.js +156 -0
  127. package/dist/client-codex-streams.js.map +1 -0
  128. package/dist/client-connection.d.ts +38 -0
  129. package/dist/client-connection.d.ts.map +1 -0
  130. package/dist/client-connection.js +210 -0
  131. package/dist/client-connection.js.map +1 -0
  132. package/dist/client-control.d.ts +48 -0
  133. package/dist/client-control.d.ts.map +1 -0
  134. package/dist/client-control.js +293 -0
  135. package/dist/client-control.js.map +1 -0
  136. package/dist/client-locale.d.ts +12 -0
  137. package/dist/client-locale.d.ts.map +1 -1
  138. package/dist/client-locale.js +24 -0
  139. package/dist/client-locale.js.map +1 -1
  140. package/dist/client-runtime-contract.d.ts +162 -0
  141. package/dist/client-runtime-contract.d.ts.map +1 -0
  142. package/dist/client-runtime-contract.js +127 -0
  143. package/dist/client-runtime-contract.js.map +1 -0
  144. package/dist/client-runtime.d.ts +24 -126
  145. package/dist/client-runtime.d.ts.map +1 -1
  146. package/dist/client-runtime.js +171 -867
  147. package/dist/client-runtime.js.map +1 -1
  148. package/dist/client-secure-transport.d.ts +1 -0
  149. package/dist/client-secure-transport.d.ts.map +1 -1
  150. package/dist/client-secure-transport.js +35 -16
  151. package/dist/client-secure-transport.js.map +1 -1
  152. package/dist/client-workspace-queries.d.ts +12 -0
  153. package/dist/client-workspace-queries.d.ts.map +1 -0
  154. package/dist/client-workspace-queries.js +66 -0
  155. package/dist/client-workspace-queries.js.map +1 -0
  156. package/dist/client.d.ts.map +1 -1
  157. package/dist/client.github.js +2158 -1905
  158. package/dist/client.js +2158 -1905
  159. package/dist/client.js.map +1 -1
  160. package/dist/codex/domain.d.ts.map +1 -1
  161. package/dist/codex/domain.js +67 -46
  162. package/dist/codex/domain.js.map +1 -1
  163. package/dist/codex/method-policy.d.ts +7 -7
  164. package/dist/codex/virtual-catalog.d.ts +90 -0
  165. package/dist/codex/virtual-catalog.d.ts.map +1 -0
  166. package/dist/codex/virtual-catalog.js +317 -0
  167. package/dist/codex/virtual-catalog.js.map +1 -0
  168. package/dist/codex/virtual-contract.d.ts +96 -0
  169. package/dist/codex/virtual-contract.d.ts.map +1 -0
  170. package/dist/codex/virtual-contract.js +192 -0
  171. package/dist/codex/virtual-contract.js.map +1 -0
  172. package/dist/codex/virtual-event-carrier.d.ts +52 -0
  173. package/dist/codex/virtual-event-carrier.d.ts.map +1 -0
  174. package/dist/codex/virtual-event-carrier.js +212 -0
  175. package/dist/codex/virtual-event-carrier.js.map +1 -0
  176. package/dist/codex/virtual-harness.d.ts +16 -117
  177. package/dist/codex/virtual-harness.d.ts.map +1 -1
  178. package/dist/codex/virtual-harness.js +123 -1909
  179. package/dist/codex/virtual-harness.js.map +1 -1
  180. package/dist/codex/virtual-history.d.ts +74 -0
  181. package/dist/codex/virtual-history.d.ts.map +1 -0
  182. package/dist/codex/virtual-history.js +546 -0
  183. package/dist/codex/virtual-history.js.map +1 -0
  184. package/dist/codex/virtual-live.d.ts +75 -0
  185. package/dist/codex/virtual-live.d.ts.map +1 -0
  186. package/dist/codex/virtual-live.js +563 -0
  187. package/dist/codex/virtual-live.js.map +1 -0
  188. package/dist/codex/virtual-values.d.ts +29 -0
  189. package/dist/codex/virtual-values.d.ts.map +1 -0
  190. package/dist/codex/virtual-values.js +75 -0
  191. package/dist/codex/virtual-values.js.map +1 -0
  192. package/dist/config.js +4 -4
  193. package/dist/config.js.map +1 -1
  194. package/dist/control-runtime.js +2 -2
  195. package/dist/control-runtime.js.map +1 -1
  196. package/dist/harness-remote-bridge.d.ts +2 -1
  197. package/dist/harness-remote-bridge.d.ts.map +1 -1
  198. package/dist/harness-remote-bridge.js +11 -3
  199. package/dist/harness-remote-bridge.js.map +1 -1
  200. package/dist/index.d.ts.map +1 -1
  201. package/dist/index.js +17301 -14516
  202. package/dist/index.js.map +4 -4
  203. package/dist/plugin-route-dispatcher.d.ts +2 -2
  204. package/dist/plugin-route-dispatcher.d.ts.map +1 -1
  205. package/dist/plugin-route-dispatcher.js +2 -2
  206. package/dist/plugin-route-dispatcher.js.map +1 -1
  207. package/dist/remote-typert-gateway.js +49 -2
  208. package/dist/remote-typert-gateway.js.map +1 -1
  209. package/dist/server-connection.d.ts +1 -0
  210. package/dist/server-connection.d.ts.map +1 -1
  211. package/dist/server-connection.js +6 -1
  212. package/dist/server-connection.js.map +1 -1
  213. package/dist/service.d.ts +1 -1
  214. package/dist/service.d.ts.map +1 -1
  215. package/dist/service.js +16 -5
  216. package/dist/service.js.map +1 -1
  217. package/dist/terminal-carrier-compat.d.ts +14 -0
  218. package/dist/terminal-carrier-compat.d.ts.map +1 -0
  219. package/dist/terminal-carrier-compat.js +259 -0
  220. package/dist/terminal-carrier-compat.js.map +1 -0
  221. package/dist/typert-gateway-contract.d.ts +6 -1
  222. package/dist/typert-gateway-contract.d.ts.map +1 -1
  223. package/dist/typert-gateway-switch.d.ts +2 -1
  224. package/dist/typert-gateway-switch.d.ts.map +1 -1
  225. package/dist/typert-gateway-switch.js +31 -15
  226. package/dist/typert-gateway-switch.js.map +1 -1
  227. package/dist/version.d.ts +1 -1
  228. package/dist/version.d.ts.map +1 -1
  229. package/dist/version.js +1 -1
  230. package/dist/version.js.map +1 -1
  231. package/dsh-plugin.json +1 -1
  232. package/package.json +21 -19
@@ -0,0 +1,483 @@
1
+ import { spawn } from 'node:child_process';
2
+ import { Buffer } from 'node:buffer';
3
+ import { realpath } from 'node:fs/promises';
4
+ import { PLUGIN_VERSION } from '../../version.js';
5
+ import { acpHistoryEvents } from '../history-events.js';
6
+ import { AcpSessionModelState } from './session-models.js';
7
+ import { OpencodeNativeApi, opencodeLoopbackPort, opencodePrivateArgs } from './opencode-native-api.js';
8
+ const ACP_REQUEST_TIMEOUT_MS = 60_000;
9
+ /** Full agent turns (tools + streaming) routinely exceed the short RPC budget. */
10
+ const ACP_PROMPT_TIMEOUT_MS = 10 * 60_000;
11
+ const ACP_START_TIMEOUT_MS = 20_000;
12
+ const MAX_ACP_LINE_BYTES = 288 * 1024 * 1024;
13
+ const MAX_STDERR_CAPTURE_BYTES = 4 * 1024;
14
+ export class OpencodeAcpError extends Error {
15
+ code;
16
+ constructor(code, message, options) {
17
+ super(message, options);
18
+ this.code = code;
19
+ this.name = 'OpencodeAcpError';
20
+ }
21
+ }
22
+ /**
23
+ * Host-local stdio client for one OpenCode CLI ACP process (`opencode acp`).
24
+ * OpenCode natively supports standard Agent Client Protocol (ACP) over stdio.
25
+ */
26
+ export class OpencodeAcpClient {
27
+ binary;
28
+ logger;
29
+ spawnAcp;
30
+ options;
31
+ process;
32
+ nextId = 1;
33
+ pending = new Map();
34
+ inboundHandlers = new Set();
35
+ unavailableHandlers = new Set();
36
+ stdoutBuffer = Buffer.alloc(0);
37
+ stderrBytes = 0;
38
+ ready = false;
39
+ closed = false;
40
+ failureNotified = false;
41
+ startPromise;
42
+ historyBusy = false;
43
+ nativeApi;
44
+ archivedSessions = new Set();
45
+ archivingSessions = new Set();
46
+ constructor(binary = 'opencode', logger, spawnAcp, options = {}) {
47
+ this.binary = binary;
48
+ this.logger = logger;
49
+ this.spawnAcp = spawnAcp;
50
+ this.options = options;
51
+ }
52
+ start() {
53
+ if (this.closed)
54
+ return Promise.reject(new OpencodeAcpError('OPENCODE_CLOSED', 'The OpenCode domain is closed.'));
55
+ if (this.ready)
56
+ return Promise.resolve();
57
+ this.startPromise ??= this.startOnce().finally(() => { this.startPromise = undefined; });
58
+ return this.startPromise;
59
+ }
60
+ isReady() { return this.ready; }
61
+ async isSessionArchived(sessionId, cwd) {
62
+ if (!this.nativeApi)
63
+ return this.archivedSessions.has(sessionId);
64
+ const archived = await this.nativeApi.isArchived(sessionId, cwd);
65
+ if (archived)
66
+ this.archivedSessions.add(sessionId);
67
+ else
68
+ this.archivedSessions.delete(sessionId);
69
+ return archived;
70
+ }
71
+ async archiveSession(sessionId, cwd) {
72
+ if (!this.ready || !this.nativeApi)
73
+ throw new OpencodeAcpError('OPENCODE_ARCHIVE_UNAVAILABLE', 'The Host OpenCode native API is unavailable.');
74
+ if (this.busy.has(sessionId) || this.loads.has(sessionId) || this.archivingSessions.has(sessionId))
75
+ throw new OpencodeAcpError('PROMPT_IN_PROGRESS', 'Stop the OpenCode reply before archiving.');
76
+ this.archivingSessions.add(sessionId);
77
+ try {
78
+ await this.nativeApi.archive(sessionId, cwd);
79
+ this.archivedSessions.add(sessionId);
80
+ }
81
+ finally {
82
+ this.archivingSessions.delete(sessionId);
83
+ }
84
+ }
85
+ /**
86
+ * Replay a saved session in one temporary ACP process so a history read never
87
+ * interrupts a live turn. OpenCode emits the transcript as `session/update`
88
+ * notifications before `session/load` resolves.
89
+ */
90
+ async history(sessionId, cwd) {
91
+ if (this.closed)
92
+ throw new OpencodeAcpError('OPENCODE_CLOSED', 'The OpenCode domain is closed.');
93
+ if (this.historyBusy)
94
+ throw new OpencodeAcpError('OPENCODE_HISTORY_BUSY', 'An OpenCode history read is already in progress.');
95
+ this.historyBusy = true;
96
+ const client = new OpencodeAcpClient(this.binary, this.logger, undefined, { ...this.options, historyReader: true });
97
+ const updates = [];
98
+ let bytes = 0;
99
+ let count = 0;
100
+ let overflow = false;
101
+ const unsubscribe = client.onInbound(message => {
102
+ // A history reader has no authority to run tools or wait for approval.
103
+ if (message.kind === 'request') {
104
+ void client.respondError(message.id, -32601, 'History reader does not support requests.').catch(() => undefined);
105
+ return;
106
+ }
107
+ if (message.method !== 'session/update'
108
+ || message.params?.sessionId !== sessionId
109
+ || overflow)
110
+ return;
111
+ count++;
112
+ bytes += Buffer.byteLength(JSON.stringify(message));
113
+ if (bytes > 8 * 1024 * 1024 || count > 10_000)
114
+ overflow = true;
115
+ else
116
+ updates.push(message);
117
+ });
118
+ try {
119
+ await client.start();
120
+ await client.call('session/load', { sessionId, cwd, mcpServers: [] });
121
+ if (overflow)
122
+ throw new OpencodeAcpError('OPENCODE_HISTORY_TOO_LARGE', 'OpenCode history exceeds the transfer limit.');
123
+ return acpHistoryEvents(updates, sessionId, 'opencode');
124
+ }
125
+ finally {
126
+ unsubscribe();
127
+ await client.close().catch(() => undefined);
128
+ this.historyBusy = false;
129
+ }
130
+ }
131
+ models = new Map();
132
+ loads = new Map();
133
+ busy = new Set();
134
+ async call(method, params, timeoutMs) {
135
+ if (!this.ready)
136
+ throw new OpencodeAcpError('OPENCODE_UNAVAILABLE', 'OpenCode ACP is not ready.');
137
+ const p = isRecord(params) ? params : {};
138
+ const id = typeof p.sessionId === 'string' ? p.sessionId : undefined;
139
+ if (id && this.archivingSessions.has(id))
140
+ throw new OpencodeAcpError('ACP_SESSION_BUSY', 'The OpenCode session is being archived.');
141
+ if (id && this.archivedSessions.has(id) && ['session/load', 'session/prompt', 'dsh/selectModel'].includes(method))
142
+ throw new OpencodeAcpError('ACP_SESSION_ARCHIVED', 'This OpenCode session is archived.');
143
+ const budget = timeoutMs ?? (method === 'session/prompt' ? ACP_PROMPT_TIMEOUT_MS : ACP_REQUEST_TIMEOUT_MS);
144
+ if (method === 'session/load' && id) {
145
+ // Re-reading models must never replay history into an active conversation.
146
+ if (this.models.has(id))
147
+ return { sessionId: id };
148
+ const pending = this.loads.get(id);
149
+ if (pending)
150
+ return pending;
151
+ const load = Promise.resolve().then(() => this.loadSession(method, params, budget, id));
152
+ this.loads.set(id, load);
153
+ try {
154
+ return await load;
155
+ }
156
+ finally {
157
+ this.loads.delete(id);
158
+ }
159
+ }
160
+ if (method === 'session/new')
161
+ return this.loadSession(method, params, budget);
162
+ if (method === 'dsh/sessionModels' || method === 'dsh/selectModel') {
163
+ const models = id ? this.models.get(id) : undefined;
164
+ if (!models)
165
+ throw new OpencodeAcpError('ACP_SESSION_NOT_LOADED', 'Load the OpenCode session before selecting its model.');
166
+ if (method === 'dsh/sessionModels')
167
+ return models.catalog();
168
+ if (this.busy.has(id))
169
+ throw new OpencodeAcpError('PROMPT_IN_PROGRESS', 'Stop the OpenCode reply before changing its model.');
170
+ this.busy.add(id);
171
+ try {
172
+ const result = await models.select(id, p.model, p.reasoningEffort, (method, params) => this.request(method, params, budget));
173
+ this.publish({ kind: 'notification', method: 'session/update', params: { sessionId: id,
174
+ update: { sessionUpdate: 'model_selection', selected: result.selected } } });
175
+ return result;
176
+ }
177
+ finally {
178
+ this.busy.delete(id);
179
+ }
180
+ }
181
+ if (method === 'session/prompt' && id) {
182
+ if (this.busy.has(id))
183
+ throw new OpencodeAcpError('PROMPT_IN_PROGRESS', 'The OpenCode session is busy.');
184
+ this.busy.add(id);
185
+ try {
186
+ return await this.request(method, params, budget);
187
+ }
188
+ finally {
189
+ this.busy.delete(id);
190
+ }
191
+ }
192
+ const result = await this.request(method, params, budget);
193
+ const nativeApi = this.nativeApi;
194
+ if (method === 'session/list' && nativeApi && isRecord(result) && Array.isArray(result.sessions)) {
195
+ // ACP list may return archived native records, including after a restart.
196
+ // Recheck every item against OpenCode; process-local caches are insufficient.
197
+ if (result.sessions.length > 1000)
198
+ throw new OpencodeAcpError('INVALID_MESSAGE', 'The OpenCode catalog page is too large.');
199
+ const items = result.sessions;
200
+ const archivedItems = new Map();
201
+ let next = 0;
202
+ await Promise.all(Array.from({ length: Math.min(4, items.length) }, async () => {
203
+ for (;;) {
204
+ const index = next++;
205
+ if (index >= items.length)
206
+ return;
207
+ const item = items[index];
208
+ if (!isRecord(item) || typeof item.sessionId !== 'string' || typeof item.cwd !== 'string')
209
+ continue;
210
+ const cwd = await realpath(item.cwd).catch(() => undefined);
211
+ if (!cwd)
212
+ continue;
213
+ const archived = await nativeApi.isArchived(item.sessionId, cwd);
214
+ if (archived)
215
+ this.archivedSessions.add(item.sessionId);
216
+ else
217
+ this.archivedSessions.delete(item.sessionId);
218
+ archivedItems.set(index, archived);
219
+ }
220
+ }));
221
+ // The gateway retains authority for archived history, but excludes these
222
+ // entries from its public/default catalog.
223
+ const sessions = items.flatMap((item, index) => archivedItems.has(index)
224
+ ? [{ ...item, archived: archivedItems.get(index) }] : []);
225
+ return { ...result, sessions };
226
+ }
227
+ return result;
228
+ }
229
+ async loadSession(method, params, budget, sessionId) {
230
+ const result = await this.request(method, params, budget);
231
+ const returnedId = isRecord(result) && typeof result.sessionId === 'string' ? result.sessionId : undefined;
232
+ const id = sessionId ?? returnedId;
233
+ if (!this.ready || !id || (sessionId && returnedId && returnedId !== sessionId)) {
234
+ throw new OpencodeAcpError('ACP_INVALID_SESSION', 'OpenCode returned an invalid session.');
235
+ }
236
+ const models = new AcpSessionModelState('opencode');
237
+ models.update(result);
238
+ this.models.set(id, models);
239
+ return result;
240
+ }
241
+ publish(message) {
242
+ for (const handler of this.inboundHandlers)
243
+ handler(message);
244
+ }
245
+ async respond(id, result) {
246
+ this.write({ jsonrpc: '2.0', id, result });
247
+ }
248
+ async respondError(id, code, message) {
249
+ this.write({ jsonrpc: '2.0', id, error: { code, message } });
250
+ }
251
+ onInbound(handler) {
252
+ this.inboundHandlers.add(handler);
253
+ return () => this.inboundHandlers.delete(handler);
254
+ }
255
+ onUnavailable(handler) {
256
+ this.unavailableHandlers.add(handler);
257
+ return () => this.unavailableHandlers.delete(handler);
258
+ }
259
+ async close() {
260
+ if (this.closed)
261
+ return;
262
+ this.closed = true;
263
+ this.ready = false;
264
+ this.models.clear();
265
+ this.nativeApi?.close();
266
+ this.failPending(new OpencodeAcpError('OPENCODE_CLOSED', 'OpenCode ACP was closed.'));
267
+ const child = this.process;
268
+ this.process = undefined;
269
+ if (child === undefined || child.exitCode !== null || child.killed)
270
+ return;
271
+ await new Promise(resolve => {
272
+ const timer = setTimeout(() => {
273
+ child.kill('SIGKILL');
274
+ resolve();
275
+ }, 2_000);
276
+ timer.unref?.();
277
+ child.once('exit', () => {
278
+ clearTimeout(timer);
279
+ resolve();
280
+ });
281
+ child.kill('SIGTERM');
282
+ });
283
+ }
284
+ async startOnce() {
285
+ if (this.process !== undefined) {
286
+ throw new OpencodeAcpError('OPENCODE_STARTING', 'OpenCode ACP is already starting.');
287
+ }
288
+ let child;
289
+ if (this.spawnAcp)
290
+ child = this.spawnAcp(this.binary);
291
+ else {
292
+ const port = await opencodeLoopbackPort();
293
+ if (this.closed)
294
+ throw new OpencodeAcpError('OPENCODE_CLOSED', 'OpenCode ACP was closed.');
295
+ this.nativeApi = new OpencodeNativeApi(`http://127.0.0.1:${port}`);
296
+ child = spawn(this.binary, opencodePrivateArgs(this.options.args ?? ['acp'], port), {
297
+ cwd: this.options.cwd, stdio: ['pipe', 'pipe', 'pipe'], windowsHide: true,
298
+ env: { ...process.env, OPENCODE_SERVER_USERNAME: 'opencode', OPENCODE_SERVER_PASSWORD: this.nativeApi.password },
299
+ });
300
+ }
301
+ this.process = child;
302
+ this.failureNotified = false;
303
+ this.stdoutBuffer = Buffer.alloc(0);
304
+ this.stderrBytes = 0;
305
+ child.stdout.on('data', chunk => this.consumeStdout(Buffer.from(chunk)));
306
+ child.stderr.on('data', chunk => {
307
+ this.stderrBytes = Math.min(MAX_STDERR_CAPTURE_BYTES, this.stderrBytes + Buffer.byteLength(chunk));
308
+ });
309
+ child.on('error', error => this.handleProcessFailure('OPENCODE_BINARY_UNAVAILABLE', error));
310
+ child.on('exit', (code, signal) => {
311
+ if (this.process !== child)
312
+ return;
313
+ this.process = undefined;
314
+ this.ready = false;
315
+ this.nativeApi?.close();
316
+ this.nativeApi = undefined;
317
+ this.models.clear();
318
+ this.failPending(new OpencodeAcpError('OPENCODE_ACP_EXITED', 'OpenCode ACP exited unexpectedly.'));
319
+ if (!this.closed) {
320
+ this.logger?.warn('OpenCode ACP exited', {
321
+ code: code ?? 'none',
322
+ signal: signal ?? 'none',
323
+ stderrBytes: this.stderrBytes,
324
+ });
325
+ this.notifyUnavailable('OPENCODE_ACP_EXITED');
326
+ }
327
+ });
328
+ try {
329
+ await this.request('initialize', {
330
+ protocolVersion: 1,
331
+ clientCapabilities: {
332
+ fs: { readTextFile: false, writeTextFile: false },
333
+ terminal: false,
334
+ },
335
+ clientInfo: {
336
+ name: 'deepseek_harness_remote',
337
+ version: PLUGIN_VERSION,
338
+ },
339
+ }, ACP_START_TIMEOUT_MS);
340
+ this.ready = true;
341
+ this.logger?.info('OpenCode ACP ready');
342
+ }
343
+ catch (error) {
344
+ child.kill('SIGTERM');
345
+ if (error instanceof OpencodeAcpError)
346
+ throw error;
347
+ throw new OpencodeAcpError('OPENCODE_INITIALIZE_FAILED', 'OpenCode ACP initialization failed.', { cause: error });
348
+ }
349
+ }
350
+ request(method, params, timeoutMs) {
351
+ const id = this.nextId++;
352
+ const result = new Promise((resolve, reject) => {
353
+ const timer = setTimeout(() => {
354
+ this.pending.delete(id);
355
+ reject(new OpencodeAcpError('OPENCODE_REQUEST_TIMEOUT', 'OpenCode ACP request timed out.'));
356
+ }, timeoutMs);
357
+ timer.unref?.();
358
+ this.pending.set(id, { resolve, reject, timer });
359
+ });
360
+ try {
361
+ this.write({ jsonrpc: '2.0', id, method, params });
362
+ }
363
+ catch (error) {
364
+ const pending = this.takePending(id);
365
+ pending?.reject(error instanceof Error ? error : new Error('OpenCode ACP write failed.'));
366
+ }
367
+ return result;
368
+ }
369
+ write(message) {
370
+ const child = this.process;
371
+ if (child === undefined || child.stdin.destroyed || !child.stdin.writable) {
372
+ throw new OpencodeAcpError('OPENCODE_UNAVAILABLE', 'OpenCode ACP is not available.');
373
+ }
374
+ child.stdin.write(`${JSON.stringify(message)}\n`);
375
+ }
376
+ consumeStdout(chunk) {
377
+ this.stdoutBuffer = this.stdoutBuffer.length === 0 ? chunk : Buffer.concat([this.stdoutBuffer, chunk]);
378
+ if (this.stdoutBuffer.length > MAX_ACP_LINE_BYTES) {
379
+ this.handleProcessFailure('OPENCODE_RESPONSE_TOO_LARGE', new Error('OpenCode ACP emitted an oversized JSONL message.'));
380
+ return;
381
+ }
382
+ let newline = this.stdoutBuffer.indexOf(0x0a);
383
+ while (newline >= 0) {
384
+ const line = this.stdoutBuffer.subarray(0, newline);
385
+ this.stdoutBuffer = this.stdoutBuffer.subarray(newline + 1);
386
+ if (line.length > 0)
387
+ this.handleLine(line);
388
+ newline = this.stdoutBuffer.indexOf(0x0a);
389
+ }
390
+ }
391
+ handleLine(line) {
392
+ let value;
393
+ try {
394
+ value = JSON.parse(line.toString('utf8'));
395
+ }
396
+ catch {
397
+ this.handleProcessFailure('OPENCODE_INVALID_RESPONSE', new Error('OpenCode ACP emitted invalid JSON.'));
398
+ return;
399
+ }
400
+ if (!isRecord(value)) {
401
+ this.handleProcessFailure('OPENCODE_INVALID_RESPONSE', new Error('OpenCode ACP emitted an invalid message.'));
402
+ return;
403
+ }
404
+ if ((typeof value.id === 'number' || typeof value.id === 'string') && ('result' in value || 'error' in value)) {
405
+ const pending = this.takePending(value.id);
406
+ if (pending === undefined)
407
+ return;
408
+ if ('error' in value && value.error !== undefined) {
409
+ pending.reject(new OpencodeAcpError('OPENCODE_UPSTREAM_ERROR', safeUpstreamError(value.error)));
410
+ }
411
+ else {
412
+ pending.resolve(value.result);
413
+ }
414
+ return;
415
+ }
416
+ if (typeof value.method !== 'string' || value.method.length === 0 || value.method.length > 160)
417
+ return;
418
+ const params = value.params ?? {};
419
+ // session/update is always a live notification; never treat it as an approval request.
420
+ const inbound = value.method !== 'session/update'
421
+ && (typeof value.id === 'string' || typeof value.id === 'number')
422
+ ? { kind: 'request', id: value.id, method: value.method, params }
423
+ : { kind: 'notification', method: value.method, params };
424
+ if (inbound.kind === 'request' && isRecord(params) && typeof params.sessionId === 'string' && this.loads.has(params.sessionId)) {
425
+ void this.respondError(inbound.id, -32600, 'OpenCode session is not loaded.').catch(() => undefined);
426
+ return;
427
+ }
428
+ if (inbound.kind === 'notification' && inbound.method === 'session/update' && isRecord(params) && typeof params.sessionId === 'string') {
429
+ this.models.get(params.sessionId)?.update(params.update);
430
+ // session/load replays belong to the separate history reader, not live UI.
431
+ if (this.loads.has(params.sessionId) && !this.options.historyReader)
432
+ return;
433
+ }
434
+ this.publish(inbound);
435
+ }
436
+ handleProcessFailure(code, cause) {
437
+ this.nativeApi?.close();
438
+ this.nativeApi = undefined;
439
+ this.ready = false;
440
+ this.models.clear();
441
+ this.failPending(new OpencodeAcpError(code, 'OpenCode ACP communication failed.', { cause }));
442
+ const child = this.process;
443
+ this.process = undefined;
444
+ child?.kill('SIGTERM');
445
+ this.logger?.warn('OpenCode ACP communication failed', { code });
446
+ if (!this.closed)
447
+ this.notifyUnavailable(code);
448
+ }
449
+ notifyUnavailable(code) {
450
+ if (this.failureNotified)
451
+ return;
452
+ this.failureNotified = true;
453
+ for (const handler of this.unavailableHandlers)
454
+ handler(code);
455
+ }
456
+ takePending(id) {
457
+ const pending = this.pending.get(id);
458
+ if (pending === undefined)
459
+ return undefined;
460
+ this.pending.delete(id);
461
+ clearTimeout(pending.timer);
462
+ return pending;
463
+ }
464
+ failPending(error) {
465
+ for (const id of [...this.pending.keys()])
466
+ this.takePending(id)?.reject(error);
467
+ }
468
+ }
469
+ function safeUpstreamError(value) {
470
+ if (!isRecord(value) || typeof value.message !== 'string')
471
+ return 'OpenCode ACP rejected the request.';
472
+ const message = value.message.toLowerCase();
473
+ if (message.includes('auth') || message.includes('login') || message.includes('api key')) {
474
+ return 'OpenCode ACP authentication failed.';
475
+ }
476
+ if (message.includes('not initialized'))
477
+ return 'OpenCode ACP is not initialized.';
478
+ return 'OpenCode ACP rejected the request.';
479
+ }
480
+ function isRecord(value) {
481
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
482
+ }
483
+ //# sourceMappingURL=opencode-process.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"opencode-process.js","sourceRoot":"","sources":["../../../src/acp/adapters/opencode-process.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import type { SafeLogger } from '../../logging.js';
2
+ import { type AcpBackendAdapter } from '../adapter.js';
3
+ import type { CursorAcpLike } from './cursor-process.js';
4
+ /** OpenCode ACP backend: OpenCode CLI `opencode acp` over Host stdio. */
5
+ export declare function createOpencodeAcpAdapter(binary?: string, logger?: SafeLogger, createProcess?: (binary: string, logger?: SafeLogger) => CursorAcpLike): AcpBackendAdapter;
6
+ export { OpencodeAcpClient, OpencodeAcpError } from './opencode-process.js';
7
+ export type { OpencodeAcpInbound, OpencodeAcpLike, OpencodeAcpNotification, OpencodeAcpRequest, SpawnOpencodeAcp, } from './opencode-process.js';
8
+ //# sourceMappingURL=opencode.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"opencode.d.ts","sourceRoot":"","sources":["../../../src/acp/adapters/opencode.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAElD,OAAO,EAAsB,KAAK,iBAAiB,EAAE,MAAM,eAAe,CAAA;AAC1E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AAExD,yEAAyE;AACzE,wBAAgB,wBAAwB,CACtC,MAAM,GAAE,MAAmB,EAC3B,MAAM,CAAC,EAAE,UAAU,EACnB,aAAa,GAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,UAAU,KAAK,aAEvD,GACA,iBAAiB,CAEnB;AAED,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AAC3E,YAAY,EACV,kBAAkB,EAClB,eAAe,EACf,uBAAuB,EACvB,kBAAkB,EAClB,gBAAgB,GACjB,MAAM,uBAAuB,CAAA"}
@@ -0,0 +1,8 @@
1
+ import { OpencodeAcpClient } from './opencode-process.js';
2
+ import { adaptCursorProcess } from '../adapter.js';
3
+ /** OpenCode ACP backend: OpenCode CLI `opencode acp` over Host stdio. */
4
+ export function createOpencodeAcpAdapter(binary = 'opencode', logger, createProcess = (path, targetLogger) => (new OpencodeAcpClient(path, targetLogger))) {
5
+ return adaptCursorProcess(createProcess(binary, logger), 'opencode');
6
+ }
7
+ export { OpencodeAcpClient, OpencodeAcpError } from './opencode-process.js';
8
+ //# sourceMappingURL=opencode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"opencode.js","sourceRoot":"","sources":["../../../src/acp/adapters/opencode.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAA;AACzD,OAAO,EAAE,kBAAkB,EAA0B,MAAM,eAAe,CAAA;AAG1E,yEAAyE;AACzE,MAAM,UAAU,wBAAwB,CACtC,SAAiB,UAAU,EAC3B,MAAmB,EACnB,gBAAwE,CAAC,IAAI,EAAE,YAAY,EAAE,EAAE,CAAC,CAC9F,IAAI,iBAAiB,CAAC,IAAI,EAAE,YAAY,CAAC,CAC1C;IAED,OAAO,kBAAkB,CAAC,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,UAAU,CAAC,CAAA;AACtE,CAAC;AAED,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA"}
@@ -0,0 +1,5 @@
1
+ import { IsolatedAcpClient } from './isolated-process.js';
2
+ /** Pi itself is not ACP; use the published pi-acp wrapper. */
3
+ export declare class PiAcpClient extends IsolatedAcpClient {
4
+ }
5
+ //# sourceMappingURL=pi-process.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pi-process.d.ts","sourceRoot":"","sources":["../../../src/acp/adapters/pi-process.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAA;AAEzD,8DAA8D;AAC9D,qBAAa,WAAY,SAAQ,iBAAiB;CAAG"}
@@ -0,0 +1,5 @@
1
+ import { IsolatedAcpClient } from './isolated-process.js';
2
+ /** Pi itself is not ACP; use the published pi-acp wrapper. */
3
+ export class PiAcpClient extends IsolatedAcpClient {
4
+ }
5
+ //# sourceMappingURL=pi-process.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pi-process.js","sourceRoot":"","sources":["../../../src/acp/adapters/pi-process.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAA;AAEzD,8DAA8D;AAC9D,MAAM,OAAO,WAAY,SAAQ,iBAAiB;CAAG"}
@@ -0,0 +1,33 @@
1
+ import type { AcpModelView } from '../virtual-catalog.js';
2
+ /** Only configuration advertised by this session may be selected. */
3
+ export declare class AcpSessionModelState {
4
+ private readonly backend;
5
+ constructor(backend: 'cursor' | 'claude' | 'opencode');
6
+ private get label();
7
+ private model?;
8
+ private effort?;
9
+ private legacy;
10
+ update(value: unknown): void;
11
+ catalog(): {
12
+ current: {
13
+ reasoningEffort?: string | undefined;
14
+ provider: "cursor" | "opencode" | "claude";
15
+ model: string;
16
+ };
17
+ routable: boolean;
18
+ failures: never[];
19
+ groups: {
20
+ id: "cursor" | "opencode" | "claude";
21
+ name: string;
22
+ models: AcpModelView[];
23
+ }[];
24
+ };
25
+ select(sessionId: string, model: unknown, effort: unknown, request: (method: string, params: unknown) => Promise<unknown>): Promise<{
26
+ selected: {
27
+ reasoningEffort?: string | undefined;
28
+ provider: "cursor" | "opencode" | "claude";
29
+ model: string;
30
+ };
31
+ }>;
32
+ }
33
+ //# sourceMappingURL=session-models.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-models.d.ts","sourceRoot":"","sources":["../../../src/acp/adapters/session-models.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AAQzD,qEAAqE;AACrE,qBAAa,oBAAoB;IACnB,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAAP,OAAO,EAAE,QAAQ,GAAG,QAAQ,GAAG,UAAU;IACtE,OAAO,KAAK,KAAK,GAAgG;IAEjH,OAAO,CAAC,KAAK,CAAC,CAAc;IAC5B,OAAO,CAAC,MAAM,CAAC,CAAc;IAC7B,OAAO,CAAC,MAAM,CAAQ;IAEtB,MAAM,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI;IAiB5B,OAAO;;;;;;;;;;;;;;IAYD,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,KAAK,OAAO,CAAC,OAAO,CAAC;;;;;;;CAsBhI"}