@getpaseo/server 0.1.59 → 0.1.61

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 (274) hide show
  1. package/dist/scripts/dev-runner.js +26 -7
  2. package/dist/scripts/dev-runner.js.map +1 -1
  3. package/dist/server/client/daemon-client-runtime-metrics.d.ts +39 -0
  4. package/dist/server/client/daemon-client-runtime-metrics.d.ts.map +1 -0
  5. package/dist/server/client/daemon-client-runtime-metrics.js +173 -0
  6. package/dist/server/client/daemon-client-runtime-metrics.js.map +1 -0
  7. package/dist/server/client/daemon-client.d.ts +58 -9
  8. package/dist/server/client/daemon-client.d.ts.map +1 -1
  9. package/dist/server/client/daemon-client.js +151 -10
  10. package/dist/server/client/daemon-client.js.map +1 -1
  11. package/dist/server/server/agent/agent-manager.d.ts +55 -48
  12. package/dist/server/server/agent/agent-manager.d.ts.map +1 -1
  13. package/dist/server/server/agent/agent-manager.js +541 -331
  14. package/dist/server/server/agent/agent-manager.js.map +1 -1
  15. package/dist/server/server/agent/agent-metadata-generator.d.ts +3 -2
  16. package/dist/server/server/agent/agent-metadata-generator.d.ts.map +1 -1
  17. package/dist/server/server/agent/agent-metadata-generator.js +31 -16
  18. package/dist/server/server/agent/agent-metadata-generator.js.map +1 -1
  19. package/dist/server/server/agent/agent-projections.d.ts +2 -1
  20. package/dist/server/server/agent/agent-projections.d.ts.map +1 -1
  21. package/dist/server/server/agent/agent-projections.js +29 -1
  22. package/dist/server/server/agent/agent-projections.js.map +1 -1
  23. package/dist/server/server/agent/agent-sdk-types.d.ts +9 -5
  24. package/dist/server/server/agent/agent-sdk-types.d.ts.map +1 -1
  25. package/dist/server/server/agent/agent-sdk-types.js.map +1 -1
  26. package/dist/server/server/agent/agent-storage.d.ts +76 -69
  27. package/dist/server/server/agent/agent-storage.d.ts.map +1 -1
  28. package/dist/server/server/agent/agent-storage.js +13 -6
  29. package/dist/server/server/agent/agent-storage.js.map +1 -1
  30. package/dist/server/server/agent/agent-stream-coalescer.d.ts +41 -0
  31. package/dist/server/server/agent/agent-stream-coalescer.d.ts.map +1 -0
  32. package/dist/server/server/agent/agent-stream-coalescer.js +166 -0
  33. package/dist/server/server/agent/agent-stream-coalescer.js.map +1 -0
  34. package/dist/server/server/agent/agent-timeline-store-types.d.ts +54 -0
  35. package/dist/server/server/agent/agent-timeline-store-types.d.ts.map +1 -0
  36. package/dist/server/server/agent/agent-timeline-store-types.js +2 -0
  37. package/dist/server/server/agent/agent-timeline-store-types.js.map +1 -0
  38. package/dist/server/server/agent/agent-timeline-store.d.ts +32 -0
  39. package/dist/server/server/agent/agent-timeline-store.d.ts.map +1 -0
  40. package/dist/server/server/agent/agent-timeline-store.js +245 -0
  41. package/dist/server/server/agent/agent-timeline-store.js.map +1 -0
  42. package/dist/server/server/agent/mcp-server.d.ts +12 -1
  43. package/dist/server/server/agent/mcp-server.d.ts.map +1 -1
  44. package/dist/server/server/agent/mcp-server.js +276 -65
  45. package/dist/server/server/agent/mcp-server.js.map +1 -1
  46. package/dist/server/server/agent/mcp-shared.d.ts +196 -152
  47. package/dist/server/server/agent/mcp-shared.d.ts.map +1 -1
  48. package/dist/server/server/agent/mcp-shared.js +40 -42
  49. package/dist/server/server/agent/mcp-shared.js.map +1 -1
  50. package/dist/server/server/agent/model-resolver.d.ts.map +1 -1
  51. package/dist/server/server/agent/model-resolver.js +3 -1
  52. package/dist/server/server/agent/model-resolver.js.map +1 -1
  53. package/dist/server/server/agent/prompt-attachments.d.ts +6 -0
  54. package/dist/server/server/agent/prompt-attachments.d.ts.map +1 -0
  55. package/dist/server/server/agent/prompt-attachments.js +31 -0
  56. package/dist/server/server/agent/prompt-attachments.js.map +1 -0
  57. package/dist/server/server/agent/provider-launch-config.d.ts +78 -8
  58. package/dist/server/server/agent/provider-launch-config.d.ts.map +1 -1
  59. package/dist/server/server/agent/provider-launch-config.js +35 -0
  60. package/dist/server/server/agent/provider-launch-config.js.map +1 -1
  61. package/dist/server/server/agent/provider-manifest.d.ts +1 -0
  62. package/dist/server/server/agent/provider-manifest.d.ts.map +1 -1
  63. package/dist/server/server/agent/provider-manifest.js +22 -1
  64. package/dist/server/server/agent/provider-manifest.js.map +1 -1
  65. package/dist/server/server/agent/provider-registry.d.ts +5 -2
  66. package/dist/server/server/agent/provider-registry.d.ts.map +1 -1
  67. package/dist/server/server/agent/provider-registry.js +61 -17
  68. package/dist/server/server/agent/provider-registry.js.map +1 -1
  69. package/dist/server/server/agent/provider-snapshot-manager.d.ts +17 -5
  70. package/dist/server/server/agent/provider-snapshot-manager.d.ts.map +1 -1
  71. package/dist/server/server/agent/provider-snapshot-manager.js +150 -61
  72. package/dist/server/server/agent/provider-snapshot-manager.js.map +1 -1
  73. package/dist/server/server/agent/providers/acp-agent.d.ts +8 -4
  74. package/dist/server/server/agent/providers/acp-agent.d.ts.map +1 -1
  75. package/dist/server/server/agent/providers/acp-agent.js +73 -8
  76. package/dist/server/server/agent/providers/acp-agent.js.map +1 -1
  77. package/dist/server/server/agent/providers/claude/task-notification-tool-call.d.ts +2 -2
  78. package/dist/server/server/agent/providers/claude-agent.d.ts +1 -1
  79. package/dist/server/server/agent/providers/claude-agent.d.ts.map +1 -1
  80. package/dist/server/server/agent/providers/claude-agent.js +8 -7
  81. package/dist/server/server/agent/providers/claude-agent.js.map +1 -1
  82. package/dist/server/server/agent/providers/codex-app-server-agent.d.ts +37 -4
  83. package/dist/server/server/agent/providers/codex-app-server-agent.d.ts.map +1 -1
  84. package/dist/server/server/agent/providers/codex-app-server-agent.js +61 -31
  85. package/dist/server/server/agent/providers/codex-app-server-agent.js.map +1 -1
  86. package/dist/server/server/agent/providers/copilot-acp-agent.d.ts.map +1 -1
  87. package/dist/server/server/agent/providers/copilot-acp-agent.js +3 -2
  88. package/dist/server/server/agent/providers/copilot-acp-agent.js.map +1 -1
  89. package/dist/server/server/agent/providers/mock-load-test-agent.d.ts +64 -0
  90. package/dist/server/server/agent/providers/mock-load-test-agent.d.ts.map +1 -0
  91. package/dist/server/server/agent/providers/mock-load-test-agent.js +585 -0
  92. package/dist/server/server/agent/providers/mock-load-test-agent.js.map +1 -0
  93. package/dist/server/server/agent/providers/opencode-agent.d.ts +19 -4
  94. package/dist/server/server/agent/providers/opencode-agent.d.ts.map +1 -1
  95. package/dist/server/server/agent/providers/opencode-agent.js +227 -118
  96. package/dist/server/server/agent/providers/opencode-agent.js.map +1 -1
  97. package/dist/server/server/agent/providers/pi-direct-agent.d.ts +69 -0
  98. package/dist/server/server/agent/providers/pi-direct-agent.d.ts.map +1 -0
  99. package/dist/server/server/agent/providers/pi-direct-agent.js +1171 -0
  100. package/dist/server/server/agent/providers/pi-direct-agent.js.map +1 -0
  101. package/dist/server/server/agent/providers/tool-call-detail-primitives.d.ts +7 -4
  102. package/dist/server/server/agent/providers/tool-call-detail-primitives.d.ts.map +1 -1
  103. package/dist/server/server/agent-attention-policy.d.ts +13 -13
  104. package/dist/server/server/agent-attention-policy.d.ts.map +1 -1
  105. package/dist/server/server/agent-attention-policy.js +20 -36
  106. package/dist/server/server/agent-attention-policy.js.map +1 -1
  107. package/dist/server/server/bootstrap.d.ts +6 -0
  108. package/dist/server/server/bootstrap.d.ts.map +1 -1
  109. package/dist/server/server/bootstrap.js +113 -11
  110. package/dist/server/server/bootstrap.js.map +1 -1
  111. package/dist/server/server/chat/chat-rpc-schemas.d.ts +44 -44
  112. package/dist/server/server/chat/chat-types.d.ts +6 -6
  113. package/dist/server/server/checkout-diff-manager.d.ts +0 -1
  114. package/dist/server/server/checkout-diff-manager.d.ts.map +1 -1
  115. package/dist/server/server/checkout-diff-manager.js +6 -4
  116. package/dist/server/server/checkout-diff-manager.js.map +1 -1
  117. package/dist/server/server/config.d.ts.map +1 -1
  118. package/dist/server/server/config.js +1 -0
  119. package/dist/server/server/config.js.map +1 -1
  120. package/dist/server/server/file-explorer/service.d.ts.map +1 -1
  121. package/dist/server/server/file-explorer/service.js +2 -1
  122. package/dist/server/server/file-explorer/service.js.map +1 -1
  123. package/dist/server/server/loop/rpc-schemas.d.ts +392 -392
  124. package/dist/server/server/loop-service.d.ts +52 -52
  125. package/dist/server/server/paseo-worktree-archive-service.d.ts +41 -0
  126. package/dist/server/server/paseo-worktree-archive-service.d.ts.map +1 -0
  127. package/dist/server/server/paseo-worktree-archive-service.js +137 -0
  128. package/dist/server/server/paseo-worktree-archive-service.js.map +1 -0
  129. package/dist/server/server/paseo-worktree-service.d.ts +24 -0
  130. package/dist/server/server/paseo-worktree-service.d.ts.map +1 -0
  131. package/dist/server/server/paseo-worktree-service.js +94 -0
  132. package/dist/server/server/paseo-worktree-service.js.map +1 -0
  133. package/dist/server/server/path-utils.d.ts +1 -0
  134. package/dist/server/server/path-utils.d.ts.map +1 -1
  135. package/dist/server/server/path-utils.js +9 -0
  136. package/dist/server/server/path-utils.js.map +1 -1
  137. package/dist/server/server/persisted-config.d.ts +195 -67
  138. package/dist/server/server/persisted-config.d.ts.map +1 -1
  139. package/dist/server/server/persistence-hooks.d.ts.map +1 -1
  140. package/dist/server/server/persistence-hooks.js +3 -0
  141. package/dist/server/server/persistence-hooks.js.map +1 -1
  142. package/dist/server/server/resolve-worktree-creation-intent.d.ts +30 -0
  143. package/dist/server/server/resolve-worktree-creation-intent.d.ts.map +1 -0
  144. package/dist/server/server/resolve-worktree-creation-intent.js +163 -0
  145. package/dist/server/server/resolve-worktree-creation-intent.js.map +1 -0
  146. package/dist/server/server/schedule/rpc-schemas.d.ts +192 -192
  147. package/dist/server/server/schedule/service.d.ts +1 -1
  148. package/dist/server/server/schedule/service.d.ts.map +1 -1
  149. package/dist/server/server/schedule/types.d.ts +44 -44
  150. package/dist/server/server/script-health-monitor.d.ts +39 -0
  151. package/dist/server/server/script-health-monitor.d.ts.map +1 -0
  152. package/dist/server/server/script-health-monitor.js +158 -0
  153. package/dist/server/server/script-health-monitor.js.map +1 -0
  154. package/dist/server/server/script-proxy.d.ts +40 -0
  155. package/dist/server/server/script-proxy.d.ts.map +1 -0
  156. package/dist/server/server/script-proxy.js +245 -0
  157. package/dist/server/server/script-proxy.js.map +1 -0
  158. package/dist/server/server/script-route-branch-handler.d.ts +10 -0
  159. package/dist/server/server/script-route-branch-handler.d.ts.map +1 -0
  160. package/dist/server/server/script-route-branch-handler.js +45 -0
  161. package/dist/server/server/script-route-branch-handler.js.map +1 -0
  162. package/dist/server/server/script-status-projection.d.ts +29 -0
  163. package/dist/server/server/script-status-projection.d.ts.map +1 -0
  164. package/dist/server/server/script-status-projection.js +133 -0
  165. package/dist/server/server/script-status-projection.js.map +1 -0
  166. package/dist/server/server/session.d.ts +77 -13
  167. package/dist/server/server/session.d.ts.map +1 -1
  168. package/dist/server/server/session.js +1290 -548
  169. package/dist/server/server/session.js.map +1 -1
  170. package/dist/server/server/websocket-server.d.ts +27 -3
  171. package/dist/server/server/websocket-server.d.ts.map +1 -1
  172. package/dist/server/server/websocket-server.js +112 -29
  173. package/dist/server/server/websocket-server.js.map +1 -1
  174. package/dist/server/server/workspace-archive-service.d.ts +8 -0
  175. package/dist/server/server/workspace-archive-service.d.ts.map +1 -0
  176. package/dist/server/server/workspace-archive-service.js +17 -0
  177. package/dist/server/server/workspace-archive-service.js.map +1 -0
  178. package/dist/server/server/workspace-git-metadata.d.ts +24 -0
  179. package/dist/server/server/workspace-git-metadata.d.ts.map +1 -0
  180. package/dist/server/server/workspace-git-metadata.js +78 -0
  181. package/dist/server/server/workspace-git-metadata.js.map +1 -0
  182. package/dist/server/server/workspace-git-service.d.ts +104 -5
  183. package/dist/server/server/workspace-git-service.d.ts.map +1 -1
  184. package/dist/server/server/workspace-git-service.js +442 -56
  185. package/dist/server/server/workspace-git-service.js.map +1 -1
  186. package/dist/server/server/workspace-reconciliation-service.d.ts +54 -0
  187. package/dist/server/server/workspace-reconciliation-service.d.ts.map +1 -0
  188. package/dist/server/server/workspace-reconciliation-service.js +176 -0
  189. package/dist/server/server/workspace-reconciliation-service.js.map +1 -0
  190. package/dist/server/server/workspace-registry-bootstrap.d.ts.map +1 -1
  191. package/dist/server/server/workspace-registry-bootstrap.js +4 -3
  192. package/dist/server/server/workspace-registry-bootstrap.js.map +1 -1
  193. package/dist/server/server/workspace-registry.d.ts +8 -8
  194. package/dist/server/server/workspace-registry.test-helpers.d.ts +37 -0
  195. package/dist/server/server/workspace-registry.test-helpers.d.ts.map +1 -0
  196. package/dist/server/server/workspace-registry.test-helpers.js +121 -0
  197. package/dist/server/server/workspace-registry.test-helpers.js.map +1 -0
  198. package/dist/server/server/workspace-script-runtime-store.d.ts +28 -0
  199. package/dist/server/server/workspace-script-runtime-store.d.ts.map +1 -0
  200. package/dist/server/server/workspace-script-runtime-store.js +78 -0
  201. package/dist/server/server/workspace-script-runtime-store.js.map +1 -0
  202. package/dist/server/server/workspace-service-env.d.ts +17 -0
  203. package/dist/server/server/workspace-service-env.d.ts.map +1 -0
  204. package/dist/server/server/workspace-service-env.js +80 -0
  205. package/dist/server/server/workspace-service-env.js.map +1 -0
  206. package/dist/server/server/workspace-service-port-registry.d.ts +19 -0
  207. package/dist/server/server/workspace-service-port-registry.d.ts.map +1 -0
  208. package/dist/server/server/workspace-service-port-registry.js +59 -0
  209. package/dist/server/server/workspace-service-port-registry.js.map +1 -0
  210. package/dist/server/server/worktree-bootstrap.d.ts +55 -10
  211. package/dist/server/server/worktree-bootstrap.d.ts.map +1 -1
  212. package/dist/server/server/worktree-bootstrap.js +290 -112
  213. package/dist/server/server/worktree-bootstrap.js.map +1 -1
  214. package/dist/server/server/worktree-core.d.ts +25 -0
  215. package/dist/server/server/worktree-core.d.ts.map +1 -0
  216. package/dist/server/server/worktree-core.js +75 -0
  217. package/dist/server/server/worktree-core.js.map +1 -0
  218. package/dist/server/server/worktree-errors.d.ts +12 -0
  219. package/dist/server/server/worktree-errors.d.ts.map +1 -0
  220. package/dist/server/server/worktree-errors.js +31 -0
  221. package/dist/server/server/worktree-errors.js.map +1 -0
  222. package/dist/server/server/worktree-session.d.ts +56 -70
  223. package/dist/server/server/worktree-session.d.ts.map +1 -1
  224. package/dist/server/server/worktree-session.js +176 -251
  225. package/dist/server/server/worktree-session.js.map +1 -1
  226. package/dist/server/services/github-service.d.ts +225 -0
  227. package/dist/server/services/github-service.d.ts.map +1 -0
  228. package/dist/server/services/github-service.js +1381 -0
  229. package/dist/server/services/github-service.js.map +1 -0
  230. package/dist/server/shared/messages.d.ts +29408 -12268
  231. package/dist/server/shared/messages.d.ts.map +1 -1
  232. package/dist/server/shared/messages.js +391 -65
  233. package/dist/server/shared/messages.js.map +1 -1
  234. package/dist/server/terminal/shell-integration/zsh/.zshenv +17 -0
  235. package/dist/server/terminal/shell-integration/zsh/paseo-integration.zsh +32 -0
  236. package/dist/server/terminal/terminal-manager.d.ts +9 -0
  237. package/dist/server/terminal/terminal-manager.d.ts.map +1 -1
  238. package/dist/server/terminal/terminal-manager.js +27 -0
  239. package/dist/server/terminal/terminal-manager.js.map +1 -1
  240. package/dist/server/terminal/terminal-output-coalescer.d.ts +30 -0
  241. package/dist/server/terminal/terminal-output-coalescer.d.ts.map +1 -0
  242. package/dist/server/terminal/terminal-output-coalescer.js +55 -0
  243. package/dist/server/terminal/terminal-output-coalescer.js.map +1 -0
  244. package/dist/server/terminal/terminal.d.ts +32 -1
  245. package/dist/server/terminal/terminal.d.ts.map +1 -1
  246. package/dist/server/terminal/terminal.js +397 -17
  247. package/dist/server/terminal/terminal.js.map +1 -1
  248. package/dist/server/utils/checkout-git.d.ts +63 -10
  249. package/dist/server/utils/checkout-git.d.ts.map +1 -1
  250. package/dist/server/utils/checkout-git.js +321 -229
  251. package/dist/server/utils/checkout-git.js.map +1 -1
  252. package/dist/server/utils/promise-timeout.d.ts +9 -0
  253. package/dist/server/utils/promise-timeout.d.ts.map +1 -0
  254. package/dist/server/utils/promise-timeout.js +25 -0
  255. package/dist/server/utils/promise-timeout.js.map +1 -0
  256. package/dist/server/utils/script-hostname.d.ts +8 -0
  257. package/dist/server/utils/script-hostname.d.ts.map +1 -0
  258. package/dist/server/utils/script-hostname.js +14 -0
  259. package/dist/server/utils/script-hostname.js.map +1 -0
  260. package/dist/server/utils/string-command-shell.d.ts +10 -0
  261. package/dist/server/utils/string-command-shell.d.ts.map +1 -0
  262. package/dist/server/utils/string-command-shell.js +21 -0
  263. package/dist/server/utils/string-command-shell.js.map +1 -0
  264. package/dist/server/utils/worktree.d.ts +54 -7
  265. package/dist/server/utils/worktree.d.ts.map +1 -1
  266. package/dist/server/utils/worktree.js +434 -129
  267. package/dist/server/utils/worktree.js.map +1 -1
  268. package/dist/src/terminal/shell-integration/zsh/.zshenv +17 -0
  269. package/dist/src/terminal/shell-integration/zsh/paseo-integration.zsh +32 -0
  270. package/package.json +11 -14
  271. package/dist/server/server/agent/providers/pi-acp-agent.d.ts +0 -28
  272. package/dist/server/server/agent/providers/pi-acp-agent.d.ts.map +0 -1
  273. package/dist/server/server/agent/providers/pi-acp-agent.js +0 -302
  274. package/dist/server/server/agent/providers/pi-acp-agent.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mock-load-test-agent.js","sourceRoot":"","sources":["../../../../../src/server/agent/providers/mock-load-test-agent.ts"],"names":[],"mappings":"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"}
@@ -76,9 +76,10 @@ export declare const __openCodeInternals: {
76
76
  export declare class OpenCodeServerManager {
77
77
  private static instance;
78
78
  private static exitHandlerRegistered;
79
- private server;
80
- private port;
79
+ private currentServer;
80
+ private retiredServers;
81
81
  private startPromise;
82
+ private forcedRefreshPromise;
82
83
  private readonly logger;
83
84
  private readonly runtimeSettings?;
84
85
  private readonly runtimeSettingsKey;
@@ -89,8 +90,22 @@ export declare class OpenCodeServerManager {
89
90
  port: number;
90
91
  url: string;
91
92
  }>;
93
+ acquire(options: {
94
+ force: boolean;
95
+ }): Promise<{
96
+ server: {
97
+ port: number;
98
+ url: string;
99
+ };
100
+ release: () => void;
101
+ }>;
102
+ private getForcedRefreshServer;
103
+ private getCurrentServer;
104
+ private rotateCurrentServer;
92
105
  private startServer;
93
106
  shutdown(): Promise<void>;
107
+ private cleanupRetiredServers;
108
+ private killServer;
94
109
  }
95
110
  export declare class OpenCodeAgentClient implements AgentClient {
96
111
  readonly provider: "opencode";
@@ -102,8 +117,8 @@ export declare class OpenCodeAgentClient implements AgentClient {
102
117
  constructor(logger: Logger, runtimeSettings?: ProviderRuntimeSettings);
103
118
  createSession(config: AgentSessionConfig, _launchContext?: AgentLaunchContext): Promise<AgentSession>;
104
119
  resumeSession(handle: AgentPersistenceHandle, overrides?: Partial<AgentSessionConfig>, _launchContext?: AgentLaunchContext): Promise<AgentSession>;
105
- listModels(options?: ListModelsOptions): Promise<AgentModelDefinition[]>;
106
- listModes(options?: ListModesOptions): Promise<AgentMode[]>;
120
+ listModels(options: ListModelsOptions): Promise<AgentModelDefinition[]>;
121
+ listModes(options: ListModesOptions): Promise<AgentMode[]>;
107
122
  listPersistedAgents(_options?: ListPersistedAgentsOptions): Promise<PersistedAgentDescriptor[]>;
108
123
  isAvailable(): Promise<boolean>;
109
124
  getDiagnostic(): Promise<{
@@ -1 +1 @@
1
- {"version":3,"file":"opencode-agent.d.ts","sourceRoot":"","sources":["../../../../../src/server/agent/providers/opencode-agent.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"opencode-agent.d.ts","sourceRoot":"","sources":["../../../../../src/server/agent/providers/opencode-agent.ts"],"names":[],"mappings":"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"}
@@ -1,11 +1,14 @@
1
+ import { homedir } from "node:os";
1
2
  import { createOpencodeClient, } from "@opencode-ai/sdk/v2/client";
2
3
  import net from "node:net";
3
4
  import { z } from "zod";
4
5
  import { applyProviderEnv, resolveProviderCommandPrefix, } from "../provider-launch-config.js";
5
6
  import { findExecutable, isCommandAvailable } from "../../../utils/executable.js";
7
+ import { withTimeout } from "../../../utils/promise-timeout.js";
6
8
  import { spawnProcess } from "../../../utils/spawn.js";
7
9
  import { mapOpencodeToolCall } from "./opencode/tool-call-mapper.js";
8
10
  import { formatDiagnosticStatus, formatProviderDiagnostic, formatProviderDiagnosticError, resolveBinaryVersion, toDiagnosticErrorMessage, } from "./diagnostic-utils.js";
11
+ import { renderPromptAttachmentAsText } from "../prompt-attachments.js";
9
12
  const OPENCODE_CAPABILITIES = {
10
13
  supportsStreaming: true,
11
14
  supportsSessionPersistence: true,
@@ -455,6 +458,10 @@ function buildOpenCodePromptParts(prompt) {
455
458
  output.push({ type: "text", text: part.text });
456
459
  continue;
457
460
  }
461
+ if (part.type === "github_pr" || part.type === "github_issue") {
462
+ output.push({ type: "text", text: renderPromptAttachmentAsText(part) });
463
+ continue;
464
+ }
458
465
  attachmentOrdinal += 1;
459
466
  const normalized = toOpenCodeDataUrl(part.mimeType, part.data);
460
467
  output.push({
@@ -481,9 +488,10 @@ export const __openCodeInternals = {
481
488
  };
482
489
  export class OpenCodeServerManager {
483
490
  constructor(logger, runtimeSettings) {
484
- this.server = null;
485
- this.port = null;
491
+ this.currentServer = null;
492
+ this.retiredServers = new Set();
486
493
  this.startPromise = null;
494
+ this.forcedRefreshPromise = null;
487
495
  this.logger = logger;
488
496
  this.runtimeSettings = runtimeSettings;
489
497
  this.runtimeSettingsKey = JSON.stringify(runtimeSettings ?? {});
@@ -509,36 +517,90 @@ export class OpenCodeServerManager {
509
517
  OpenCodeServerManager.exitHandlerRegistered = true;
510
518
  const cleanup = () => {
511
519
  const instance = OpenCodeServerManager.instance;
512
- if (instance?.server && !instance.server.killed) {
513
- instance.server.kill("SIGTERM");
514
- }
520
+ void instance?.shutdown();
515
521
  };
516
522
  process.on("exit", cleanup);
517
523
  process.on("SIGTERM", cleanup);
518
524
  process.on("SIGINT", cleanup);
519
525
  }
520
526
  async ensureRunning() {
527
+ const acquisition = await this.acquire({ force: false });
528
+ acquisition.release();
529
+ return acquisition.server;
530
+ }
531
+ async acquire(options) {
532
+ const server = options.force
533
+ ? await this.getForcedRefreshServer()
534
+ : await this.getCurrentServer();
535
+ server.refCount += 1;
536
+ let released = false;
537
+ return {
538
+ server: { port: server.port, url: server.url },
539
+ release: () => {
540
+ if (released) {
541
+ return;
542
+ }
543
+ released = true;
544
+ server.refCount -= 1;
545
+ this.cleanupRetiredServers();
546
+ },
547
+ };
548
+ }
549
+ async getForcedRefreshServer() {
550
+ if (this.forcedRefreshPromise) {
551
+ return this.forcedRefreshPromise;
552
+ }
553
+ this.forcedRefreshPromise = Promise.resolve()
554
+ .then(async () => {
555
+ await this.rotateCurrentServer();
556
+ return this.getCurrentServer();
557
+ })
558
+ .finally(() => {
559
+ this.forcedRefreshPromise = null;
560
+ });
561
+ return this.forcedRefreshPromise;
562
+ }
563
+ async getCurrentServer() {
521
564
  if (this.startPromise) {
522
565
  return this.startPromise;
523
566
  }
524
- if (this.server && this.port && !this.server.killed) {
525
- return { port: this.port, url: `http://127.0.0.1:${this.port}` };
567
+ if (this.currentServer && !this.currentServer.process.killed) {
568
+ return this.currentServer;
526
569
  }
527
570
  this.startPromise = this.startServer();
528
571
  try {
529
572
  const result = await this.startPromise;
573
+ if (!result.retired) {
574
+ this.currentServer = result;
575
+ }
530
576
  return result;
531
577
  }
532
578
  finally {
533
579
  this.startPromise = null;
534
580
  }
535
581
  }
582
+ async rotateCurrentServer() {
583
+ const existing = this.currentServer;
584
+ if (existing) {
585
+ existing.retired = true;
586
+ this.retiredServers.add(existing);
587
+ this.currentServer = null;
588
+ this.cleanupRetiredServers();
589
+ }
590
+ if (this.startPromise) {
591
+ const pending = await this.startPromise;
592
+ pending.retired = true;
593
+ this.retiredServers.add(pending);
594
+ this.currentServer = null;
595
+ this.cleanupRetiredServers();
596
+ }
597
+ }
536
598
  async startServer() {
537
- this.port = await findAvailablePort();
538
- const url = `http://127.0.0.1:${this.port}`;
599
+ const port = await findAvailablePort();
600
+ const url = `http://127.0.0.1:${port}`;
539
601
  const launchPrefix = await resolveProviderCommandPrefix(this.runtimeSettings?.command, resolveOpenCodeBinary);
540
602
  return new Promise((resolve, reject) => {
541
- this.server = spawnProcess(launchPrefix.command, [...launchPrefix.args, "serve", "--port", String(this.port)], {
603
+ const serverProcess = spawnProcess(launchPrefix.command, [...launchPrefix.args, "serve", "--port", String(port)], {
542
604
  stdio: ["ignore", "pipe", "pipe"],
543
605
  env: applyProviderEnv(process.env, this.runtimeSettings),
544
606
  });
@@ -548,47 +610,77 @@ export class OpenCodeServerManager {
548
610
  reject(new Error("OpenCode server startup timeout"));
549
611
  }
550
612
  }, 30000);
551
- this.server.stdout?.on("data", (data) => {
613
+ serverProcess.stdout?.on("data", (data) => {
552
614
  const output = data.toString();
553
615
  if (output.includes("listening on") && !started) {
554
616
  started = true;
555
617
  clearTimeout(timeout);
556
- resolve({ port: this.port, url });
618
+ resolve({
619
+ process: serverProcess,
620
+ port,
621
+ url,
622
+ refCount: 0,
623
+ retired: false,
624
+ });
557
625
  }
558
626
  });
559
- this.server.stderr?.on("data", (data) => {
627
+ serverProcess.stderr?.on("data", (data) => {
560
628
  this.logger.error({ stderr: data.toString().trim() }, "OpenCode server stderr");
561
629
  });
562
- this.server.on("error", (error) => {
630
+ serverProcess.on("error", (error) => {
563
631
  clearTimeout(timeout);
564
632
  reject(error);
565
633
  });
566
- this.server.on("exit", (code) => {
634
+ serverProcess.on("exit", (code) => {
567
635
  if (!started) {
568
636
  clearTimeout(timeout);
569
637
  reject(new Error(`OpenCode server exited with code ${code}`));
570
638
  }
571
- this.server = null;
572
- this.port = null;
639
+ if (this.currentServer?.process === serverProcess) {
640
+ this.currentServer = null;
641
+ }
642
+ for (const retired of Array.from(this.retiredServers)) {
643
+ if (retired.process === serverProcess) {
644
+ this.retiredServers.delete(retired);
645
+ }
646
+ }
573
647
  });
574
648
  });
575
649
  }
576
650
  async shutdown() {
577
- if (this.server && !this.server.killed) {
578
- this.server.kill("SIGTERM");
579
- await new Promise((resolve) => {
580
- const timeout = setTimeout(() => {
581
- this.server?.kill("SIGKILL");
582
- resolve();
583
- }, 5000);
584
- this.server?.on("exit", () => {
585
- clearTimeout(timeout);
586
- resolve();
587
- });
588
- });
651
+ const servers = [
652
+ ...(this.currentServer ? [this.currentServer] : []),
653
+ ...Array.from(this.retiredServers),
654
+ ];
655
+ for (const server of servers) {
656
+ await this.killServer(server);
657
+ }
658
+ this.currentServer = null;
659
+ this.retiredServers.clear();
660
+ }
661
+ cleanupRetiredServers() {
662
+ for (const server of Array.from(this.retiredServers)) {
663
+ if (server.refCount === 0) {
664
+ this.retiredServers.delete(server);
665
+ void this.killServer(server);
666
+ }
589
667
  }
590
- this.server = null;
591
- this.port = null;
668
+ }
669
+ async killServer(server) {
670
+ if (server.process.killed) {
671
+ return;
672
+ }
673
+ await new Promise((resolve) => {
674
+ const timeout = setTimeout(() => {
675
+ server.process.kill("SIGKILL");
676
+ resolve();
677
+ }, 5000);
678
+ server.process.on("exit", () => {
679
+ clearTimeout(timeout);
680
+ resolve();
681
+ });
682
+ server.process.kill("SIGTERM");
683
+ });
592
684
  }
593
685
  }
594
686
  OpenCodeServerManager.instance = null;
@@ -604,28 +696,28 @@ export class OpenCodeAgentClient {
604
696
  }
605
697
  async createSession(config, _launchContext) {
606
698
  const openCodeConfig = this.assertConfig(config);
607
- const { url } = await this.serverManager.ensureRunning();
699
+ const acquisition = await this.serverManager.acquire({ force: false });
700
+ const { url } = acquisition.server;
608
701
  const client = createOpencodeClient({
609
702
  baseUrl: url,
610
703
  directory: openCodeConfig.cwd,
611
704
  });
612
- // Set a timeout for session creation to fail fast
613
- const timeoutPromise = new Promise((_, reject) => {
614
- setTimeout(() => reject(new Error("OpenCode session.create timed out after 10s")), 10000);
615
- });
616
- const response = await Promise.race([
617
- client.session.create({ directory: openCodeConfig.cwd }),
618
- timeoutPromise,
619
- ]);
620
- if (response.error) {
621
- throw new Error(`Failed to create OpenCode session: ${JSON.stringify(response.error)}`);
705
+ try {
706
+ const response = await withTimeout(client.session.create({ directory: openCodeConfig.cwd }), 10000, "OpenCode session.create timed out after 10s");
707
+ if (response.error) {
708
+ throw new Error(`Failed to create OpenCode session: ${JSON.stringify(response.error)}`);
709
+ }
710
+ const session = response.data;
711
+ if (!session) {
712
+ throw new Error("OpenCode session creation returned no data");
713
+ }
714
+ await this.populateModelContextWindowCache(client, openCodeConfig.cwd);
715
+ return new OpenCodeAgentSession(openCodeConfig, client, session.id, this.logger, new Map(this.modelContextWindows), acquisition.release);
622
716
  }
623
- const session = response.data;
624
- if (!session) {
625
- throw new Error("OpenCode session creation returned no data");
717
+ catch (error) {
718
+ acquisition.release();
719
+ throw error;
626
720
  }
627
- await this.populateModelContextWindowCache(client, openCodeConfig.cwd);
628
- return new OpenCodeAgentSession(openCodeConfig, client, session.id, this.logger, new Map(this.modelContextWindows));
629
721
  }
630
722
  async resumeSession(handle, overrides, _launchContext) {
631
723
  const cwd = overrides?.cwd ?? handle.metadata?.cwd;
@@ -638,81 +730,91 @@ export class OpenCodeAgentClient {
638
730
  ...overrides,
639
731
  };
640
732
  const openCodeConfig = this.assertConfig(config);
641
- const { url } = await this.serverManager.ensureRunning();
733
+ const acquisition = await this.serverManager.acquire({ force: false });
734
+ const { url } = acquisition.server;
642
735
  const client = createOpencodeClient({
643
736
  baseUrl: url,
644
737
  directory: openCodeConfig.cwd,
645
738
  });
646
- await this.populateModelContextWindowCache(client, openCodeConfig.cwd);
647
- return new OpenCodeAgentSession(openCodeConfig, client, handle.sessionId, this.logger, new Map(this.modelContextWindows));
739
+ try {
740
+ await this.populateModelContextWindowCache(client, openCodeConfig.cwd);
741
+ return new OpenCodeAgentSession(openCodeConfig, client, handle.sessionId, this.logger, new Map(this.modelContextWindows), acquisition.release);
742
+ }
743
+ catch (error) {
744
+ acquisition.release();
745
+ throw error;
746
+ }
648
747
  }
649
748
  async listModels(options) {
650
- const { url } = await this.serverManager.ensureRunning();
749
+ const acquisition = await this.serverManager.acquire({ force: options.force });
750
+ const { url } = acquisition.server;
651
751
  const client = createOpencodeClient({
652
752
  baseUrl: url,
653
- directory: options?.cwd ?? process.cwd(),
753
+ directory: options.cwd,
654
754
  });
655
- // Background model discovery can be legitimately slow while OpenCode refreshes
656
- // provider state, so allow longer than turn execution paths.
657
- const timeoutPromise = new Promise((_, reject) => {
658
- setTimeout(() => reject(new Error(`OpenCode provider.list timed out after ${OPENCODE_PROVIDER_LIST_TIMEOUT_MS / 1000}s - server may not be authenticated or connected to any providers`)), OPENCODE_PROVIDER_LIST_TIMEOUT_MS);
659
- });
660
- const response = await Promise.race([
661
- client.provider.list({ directory: options?.cwd ?? process.cwd() }),
662
- timeoutPromise,
663
- ]);
664
- if (response.error) {
665
- throw new Error(`Failed to fetch OpenCode providers: ${JSON.stringify(response.error)}`);
666
- }
667
- const providers = response.data;
668
- if (!providers) {
669
- return [];
670
- }
671
- // Only include models from connected providers (ones that are actually available)
672
- const connectedProviderIds = new Set(providers.connected);
673
- // Fail fast if no providers are connected
674
- if (connectedProviderIds.size === 0) {
675
- throw new Error("OpenCode has no connected providers. Please authenticate with at least one provider (e.g., openai, anthropic) or set appropriate environment variables (e.g., OPENAI_API_KEY).");
676
- }
677
- const models = [];
678
- this.modelContextWindows.clear();
679
- for (const provider of providers.all) {
680
- // Skip providers that aren't connected/configured
681
- if (!connectedProviderIds.has(provider.id)) {
682
- continue;
755
+ try {
756
+ // Background model discovery can be legitimately slow while OpenCode refreshes
757
+ // provider state, so allow longer than turn execution paths.
758
+ const response = await withTimeout(client.provider.list({ directory: options.cwd }), OPENCODE_PROVIDER_LIST_TIMEOUT_MS, `OpenCode provider.list timed out after ${OPENCODE_PROVIDER_LIST_TIMEOUT_MS / 1000}s - server may not be authenticated or connected to any providers`);
759
+ if (response.error) {
760
+ throw new Error(`Failed to fetch OpenCode providers: ${JSON.stringify(response.error)}`);
761
+ }
762
+ const providers = response.data;
763
+ if (!providers) {
764
+ return [];
683
765
  }
684
- for (const [modelId, model] of Object.entries(provider.models)) {
685
- const definition = buildOpenCodeModelDefinition(provider, modelId, model);
686
- const contextWindowMaxTokens = extractOpenCodeModelContextWindow(model);
687
- if (contextWindowMaxTokens !== undefined) {
688
- this.modelContextWindows.set(buildOpenCodeModelLookupKey(provider.id, modelId), contextWindowMaxTokens);
766
+ // Only include models from connected providers (ones that are actually available)
767
+ const connectedProviderIds = new Set(providers.connected);
768
+ // Fail fast if no providers are connected
769
+ if (connectedProviderIds.size === 0) {
770
+ throw new Error("OpenCode has no connected providers. Please authenticate with at least one provider (e.g., openai, anthropic) or set appropriate environment variables (e.g., OPENAI_API_KEY).");
771
+ }
772
+ const models = [];
773
+ this.modelContextWindows.clear();
774
+ for (const provider of providers.all) {
775
+ // Skip providers that aren't connected/configured
776
+ if (!connectedProviderIds.has(provider.id)) {
777
+ continue;
778
+ }
779
+ for (const [modelId, model] of Object.entries(provider.models)) {
780
+ const definition = buildOpenCodeModelDefinition(provider, modelId, model);
781
+ const contextWindowMaxTokens = extractOpenCodeModelContextWindow(model);
782
+ if (contextWindowMaxTokens !== undefined) {
783
+ this.modelContextWindows.set(buildOpenCodeModelLookupKey(provider.id, modelId), contextWindowMaxTokens);
784
+ }
785
+ models.push(definition);
689
786
  }
690
- models.push(definition);
691
787
  }
788
+ return models;
789
+ }
790
+ finally {
791
+ acquisition.release();
692
792
  }
693
- return models;
694
793
  }
695
794
  async listModes(options) {
696
- const { url } = await this.serverManager.ensureRunning();
697
- const directory = options?.cwd ?? process.cwd();
795
+ const acquisition = await this.serverManager.acquire({ force: options.force });
796
+ const { url } = acquisition.server;
797
+ const directory = options.cwd;
698
798
  const client = createOpencodeClient({ baseUrl: url, directory });
699
- const timeoutPromise = new Promise((_, reject) => {
700
- setTimeout(() => reject(new Error("OpenCode app.agents timed out after 10s")), 10000);
701
- });
702
- const response = await Promise.race([client.app.agents({ directory }), timeoutPromise]);
703
- if (response.error || !response.data) {
704
- return DEFAULT_MODES;
705
- }
706
- const discovered = response.data
707
- .filter((agent) => agent.mode === "primary" && agent.hidden !== true)
708
- .map((agent) => ({
709
- id: agent.name,
710
- label: agent.name.charAt(0).toUpperCase() + agent.name.slice(1),
711
- description: typeof agent.description === "string" && agent.description.trim().length > 0
712
- ? agent.description.trim()
713
- : DEFAULT_MODES.find((mode) => mode.id === agent.name)?.description,
714
- }));
715
- return discovered.length > 0 ? sortOpenCodeModes(discovered) : DEFAULT_MODES;
799
+ try {
800
+ const response = await withTimeout(client.app.agents({ directory }), 10000, "OpenCode app.agents timed out after 10s");
801
+ if (response.error || !response.data) {
802
+ return DEFAULT_MODES;
803
+ }
804
+ const discovered = response.data
805
+ .filter((agent) => agent.mode === "primary" && agent.hidden !== true)
806
+ .map((agent) => ({
807
+ id: agent.name,
808
+ label: agent.name.charAt(0).toUpperCase() + agent.name.slice(1),
809
+ description: typeof agent.description === "string" && agent.description.trim().length > 0
810
+ ? agent.description.trim()
811
+ : DEFAULT_MODES.find((mode) => mode.id === agent.name)?.description,
812
+ }));
813
+ return discovered.length > 0 ? sortOpenCodeModes(discovered) : DEFAULT_MODES;
814
+ }
815
+ finally {
816
+ acquisition.release();
817
+ }
716
818
  }
717
819
  async listPersistedAgents(_options) {
718
820
  // TODO: Implement by listing sessions from OpenCode
@@ -741,7 +843,7 @@ export class OpenCodeAgentClient {
741
843
  }
742
844
  if (available) {
743
845
  try {
744
- const models = await this.listModels();
846
+ const models = await this.listModels({ cwd: homedir(), force: false });
745
847
  modelsValue = String(models.length);
746
848
  }
747
849
  catch (error) {
@@ -753,7 +855,7 @@ export class OpenCodeAgentClient {
753
855
  }
754
856
  if (!modelsValue.startsWith("Error -")) {
755
857
  try {
756
- await this.listModes();
858
+ await this.listModes({ cwd: homedir(), force: false });
757
859
  }
758
860
  catch (error) {
759
861
  status = formatDiagnosticStatus(available, {
@@ -1242,7 +1344,7 @@ export function translateOpenCodeEvent(event, state) {
1242
1344
  return events;
1243
1345
  }
1244
1346
  class OpenCodeAgentSession {
1245
- constructor(config, client, sessionId, logger, modelContextWindowsByModelKey = new Map()) {
1347
+ constructor(config, client, sessionId, logger, modelContextWindowsByModelKey = new Map(), releaseServer) {
1246
1348
  this.provider = "opencode";
1247
1349
  this.capabilities = OPENCODE_CAPABILITIES;
1248
1350
  this.currentMode = "default";
@@ -1270,6 +1372,7 @@ class OpenCodeAgentSession {
1270
1372
  this.logger = logger;
1271
1373
  this.modelContextWindowsByModelKey = modelContextWindowsByModelKey;
1272
1374
  this.currentMode = normalizeOpenCodeModeId(config.modeId);
1375
+ this.releaseServer = releaseServer ?? null;
1273
1376
  this.selectedModelContextWindowMaxTokens = this.resolveConfiguredModelContextWindowMaxTokens(config.model);
1274
1377
  }
1275
1378
  get id() {
@@ -1768,15 +1871,21 @@ class OpenCodeAgentSession {
1768
1871
  };
1769
1872
  }
1770
1873
  async close() {
1771
- this.abortController?.abort();
1772
- await reconcileOpenCodeSessionClose({
1773
- client: this.client,
1774
- sessionId: this.sessionId,
1775
- directory: this.config.cwd,
1776
- logger: this.logger,
1777
- });
1778
- this.subscribers.clear();
1779
- this.activeForegroundTurnId = null;
1874
+ try {
1875
+ this.abortController?.abort();
1876
+ await reconcileOpenCodeSessionClose({
1877
+ client: this.client,
1878
+ sessionId: this.sessionId,
1879
+ directory: this.config.cwd,
1880
+ logger: this.logger,
1881
+ });
1882
+ this.subscribers.clear();
1883
+ this.activeForegroundTurnId = null;
1884
+ }
1885
+ finally {
1886
+ this.releaseServer?.();
1887
+ this.releaseServer = null;
1888
+ }
1780
1889
  }
1781
1890
  parseSlashCommandInput(text) {
1782
1891
  const trimmed = text.trim();