@stoneforge/smithy 0.1.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 (497) hide show
  1. package/LICENSE +13 -0
  2. package/README.md +114 -0
  3. package/dist/api/index.d.ts +7 -0
  4. package/dist/api/index.d.ts.map +1 -0
  5. package/dist/api/index.js +7 -0
  6. package/dist/api/index.js.map +1 -0
  7. package/dist/api/orchestrator-api.d.ts +153 -0
  8. package/dist/api/orchestrator-api.d.ts.map +1 -0
  9. package/dist/api/orchestrator-api.js +374 -0
  10. package/dist/api/orchestrator-api.js.map +1 -0
  11. package/dist/bin/sf.d.ts +3 -0
  12. package/dist/bin/sf.d.ts.map +1 -0
  13. package/dist/bin/sf.js +10 -0
  14. package/dist/bin/sf.js.map +1 -0
  15. package/dist/cli/commands/agent.d.ts +20 -0
  16. package/dist/cli/commands/agent.d.ts.map +1 -0
  17. package/dist/cli/commands/agent.js +861 -0
  18. package/dist/cli/commands/agent.js.map +1 -0
  19. package/dist/cli/commands/daemon.d.ts +14 -0
  20. package/dist/cli/commands/daemon.d.ts.map +1 -0
  21. package/dist/cli/commands/daemon.js +272 -0
  22. package/dist/cli/commands/daemon.js.map +1 -0
  23. package/dist/cli/commands/dispatch.d.ts +9 -0
  24. package/dist/cli/commands/dispatch.d.ts.map +1 -0
  25. package/dist/cli/commands/dispatch.js +128 -0
  26. package/dist/cli/commands/dispatch.js.map +1 -0
  27. package/dist/cli/commands/merge.d.ts +11 -0
  28. package/dist/cli/commands/merge.d.ts.map +1 -0
  29. package/dist/cli/commands/merge.js +246 -0
  30. package/dist/cli/commands/merge.js.map +1 -0
  31. package/dist/cli/commands/pool.d.ts +21 -0
  32. package/dist/cli/commands/pool.d.ts.map +1 -0
  33. package/dist/cli/commands/pool.js +762 -0
  34. package/dist/cli/commands/pool.js.map +1 -0
  35. package/dist/cli/commands/serve.d.ts +54 -0
  36. package/dist/cli/commands/serve.d.ts.map +1 -0
  37. package/dist/cli/commands/serve.js +57 -0
  38. package/dist/cli/commands/serve.js.map +1 -0
  39. package/dist/cli/commands/task.d.ts +36 -0
  40. package/dist/cli/commands/task.d.ts.map +1 -0
  41. package/dist/cli/commands/task.js +889 -0
  42. package/dist/cli/commands/task.js.map +1 -0
  43. package/dist/cli/commands/test-orchestration.d.ts +32 -0
  44. package/dist/cli/commands/test-orchestration.d.ts.map +1 -0
  45. package/dist/cli/commands/test-orchestration.js +392 -0
  46. package/dist/cli/commands/test-orchestration.js.map +1 -0
  47. package/dist/cli/index.d.ts +13 -0
  48. package/dist/cli/index.d.ts.map +1 -0
  49. package/dist/cli/index.js +15 -0
  50. package/dist/cli/index.js.map +1 -0
  51. package/dist/cli/plugin.d.ts +23 -0
  52. package/dist/cli/plugin.d.ts.map +1 -0
  53. package/dist/cli/plugin.js +36 -0
  54. package/dist/cli/plugin.js.map +1 -0
  55. package/dist/git/index.d.ts +10 -0
  56. package/dist/git/index.d.ts.map +1 -0
  57. package/dist/git/index.js +12 -0
  58. package/dist/git/index.js.map +1 -0
  59. package/dist/git/merge.d.ts +79 -0
  60. package/dist/git/merge.d.ts.map +1 -0
  61. package/dist/git/merge.js +254 -0
  62. package/dist/git/merge.js.map +1 -0
  63. package/dist/git/worktree-manager.d.ts +299 -0
  64. package/dist/git/worktree-manager.d.ts.map +1 -0
  65. package/dist/git/worktree-manager.js +744 -0
  66. package/dist/git/worktree-manager.js.map +1 -0
  67. package/dist/index.d.ts +24 -0
  68. package/dist/index.d.ts.map +1 -0
  69. package/dist/index.js +31 -0
  70. package/dist/index.js.map +1 -0
  71. package/dist/prompts/director.md +272 -0
  72. package/dist/prompts/index.d.ts +100 -0
  73. package/dist/prompts/index.d.ts.map +1 -0
  74. package/dist/prompts/index.js +294 -0
  75. package/dist/prompts/index.js.map +1 -0
  76. package/dist/prompts/message-triage.md +50 -0
  77. package/dist/prompts/persistent-worker.md +240 -0
  78. package/dist/prompts/steward-base.md +64 -0
  79. package/dist/prompts/steward-docs.md +118 -0
  80. package/dist/prompts/steward-health.md +39 -0
  81. package/dist/prompts/steward-merge.md +168 -0
  82. package/dist/prompts/steward-ops.md +28 -0
  83. package/dist/prompts/steward-reminder.md +26 -0
  84. package/dist/prompts/worker.md +282 -0
  85. package/dist/providers/claude/headless.d.ts +18 -0
  86. package/dist/providers/claude/headless.d.ts.map +1 -0
  87. package/dist/providers/claude/headless.js +307 -0
  88. package/dist/providers/claude/headless.js.map +1 -0
  89. package/dist/providers/claude/index.d.ts +24 -0
  90. package/dist/providers/claude/index.d.ts.map +1 -0
  91. package/dist/providers/claude/index.js +80 -0
  92. package/dist/providers/claude/index.js.map +1 -0
  93. package/dist/providers/claude/interactive.d.ts +21 -0
  94. package/dist/providers/claude/interactive.d.ts.map +1 -0
  95. package/dist/providers/claude/interactive.js +142 -0
  96. package/dist/providers/claude/interactive.js.map +1 -0
  97. package/dist/providers/codex/event-mapper.d.ts +91 -0
  98. package/dist/providers/codex/event-mapper.d.ts.map +1 -0
  99. package/dist/providers/codex/event-mapper.js +299 -0
  100. package/dist/providers/codex/event-mapper.js.map +1 -0
  101. package/dist/providers/codex/headless.d.ts +20 -0
  102. package/dist/providers/codex/headless.d.ts.map +1 -0
  103. package/dist/providers/codex/headless.js +174 -0
  104. package/dist/providers/codex/headless.js.map +1 -0
  105. package/dist/providers/codex/index.d.ts +30 -0
  106. package/dist/providers/codex/index.d.ts.map +1 -0
  107. package/dist/providers/codex/index.js +55 -0
  108. package/dist/providers/codex/index.js.map +1 -0
  109. package/dist/providers/codex/interactive.d.ts +21 -0
  110. package/dist/providers/codex/interactive.d.ts.map +1 -0
  111. package/dist/providers/codex/interactive.js +141 -0
  112. package/dist/providers/codex/interactive.js.map +1 -0
  113. package/dist/providers/codex/jsonrpc-client.d.ts +52 -0
  114. package/dist/providers/codex/jsonrpc-client.d.ts.map +1 -0
  115. package/dist/providers/codex/jsonrpc-client.js +141 -0
  116. package/dist/providers/codex/jsonrpc-client.js.map +1 -0
  117. package/dist/providers/codex/server-manager.d.ts +100 -0
  118. package/dist/providers/codex/server-manager.d.ts.map +1 -0
  119. package/dist/providers/codex/server-manager.js +153 -0
  120. package/dist/providers/codex/server-manager.js.map +1 -0
  121. package/dist/providers/index.d.ts +15 -0
  122. package/dist/providers/index.d.ts.map +1 -0
  123. package/dist/providers/index.js +19 -0
  124. package/dist/providers/index.js.map +1 -0
  125. package/dist/providers/opencode/async-queue.d.ts +21 -0
  126. package/dist/providers/opencode/async-queue.d.ts.map +1 -0
  127. package/dist/providers/opencode/async-queue.js +51 -0
  128. package/dist/providers/opencode/async-queue.js.map +1 -0
  129. package/dist/providers/opencode/event-mapper.d.ts +132 -0
  130. package/dist/providers/opencode/event-mapper.d.ts.map +1 -0
  131. package/dist/providers/opencode/event-mapper.js +204 -0
  132. package/dist/providers/opencode/event-mapper.js.map +1 -0
  133. package/dist/providers/opencode/headless.d.ts +25 -0
  134. package/dist/providers/opencode/headless.d.ts.map +1 -0
  135. package/dist/providers/opencode/headless.js +190 -0
  136. package/dist/providers/opencode/headless.js.map +1 -0
  137. package/dist/providers/opencode/index.d.ts +33 -0
  138. package/dist/providers/opencode/index.d.ts.map +1 -0
  139. package/dist/providers/opencode/index.js +42 -0
  140. package/dist/providers/opencode/index.js.map +1 -0
  141. package/dist/providers/opencode/interactive.d.ts +21 -0
  142. package/dist/providers/opencode/interactive.d.ts.map +1 -0
  143. package/dist/providers/opencode/interactive.js +135 -0
  144. package/dist/providers/opencode/interactive.js.map +1 -0
  145. package/dist/providers/opencode/server-manager.d.ts +145 -0
  146. package/dist/providers/opencode/server-manager.d.ts.map +1 -0
  147. package/dist/providers/opencode/server-manager.js +163 -0
  148. package/dist/providers/opencode/server-manager.js.map +1 -0
  149. package/dist/providers/registry.d.ts +38 -0
  150. package/dist/providers/registry.d.ts.map +1 -0
  151. package/dist/providers/registry.js +82 -0
  152. package/dist/providers/registry.js.map +1 -0
  153. package/dist/providers/types.d.ts +144 -0
  154. package/dist/providers/types.d.ts.map +1 -0
  155. package/dist/providers/types.js +25 -0
  156. package/dist/providers/types.js.map +1 -0
  157. package/dist/runtime/event-utils.d.ts +8 -0
  158. package/dist/runtime/event-utils.d.ts.map +1 -0
  159. package/dist/runtime/event-utils.js +23 -0
  160. package/dist/runtime/event-utils.js.map +1 -0
  161. package/dist/runtime/handoff.d.ts +195 -0
  162. package/dist/runtime/handoff.d.ts.map +1 -0
  163. package/dist/runtime/handoff.js +332 -0
  164. package/dist/runtime/handoff.js.map +1 -0
  165. package/dist/runtime/index.d.ts +17 -0
  166. package/dist/runtime/index.d.ts.map +1 -0
  167. package/dist/runtime/index.js +60 -0
  168. package/dist/runtime/index.js.map +1 -0
  169. package/dist/runtime/message-mapper.d.ts +99 -0
  170. package/dist/runtime/message-mapper.d.ts.map +1 -0
  171. package/dist/runtime/message-mapper.js +202 -0
  172. package/dist/runtime/message-mapper.js.map +1 -0
  173. package/dist/runtime/predecessor-query.d.ts +212 -0
  174. package/dist/runtime/predecessor-query.d.ts.map +1 -0
  175. package/dist/runtime/predecessor-query.js +283 -0
  176. package/dist/runtime/predecessor-query.js.map +1 -0
  177. package/dist/runtime/session-manager.d.ts +466 -0
  178. package/dist/runtime/session-manager.d.ts.map +1 -0
  179. package/dist/runtime/session-manager.js +986 -0
  180. package/dist/runtime/session-manager.js.map +1 -0
  181. package/dist/runtime/spawner.d.ts +407 -0
  182. package/dist/runtime/spawner.d.ts.map +1 -0
  183. package/dist/runtime/spawner.js +781 -0
  184. package/dist/runtime/spawner.js.map +1 -0
  185. package/dist/server/config.d.ts +22 -0
  186. package/dist/server/config.d.ts.map +1 -0
  187. package/dist/server/config.js +59 -0
  188. package/dist/server/config.js.map +1 -0
  189. package/dist/server/daemon-state.d.ts +50 -0
  190. package/dist/server/daemon-state.d.ts.map +1 -0
  191. package/dist/server/daemon-state.js +100 -0
  192. package/dist/server/daemon-state.js.map +1 -0
  193. package/dist/server/events-websocket.d.ts +32 -0
  194. package/dist/server/events-websocket.d.ts.map +1 -0
  195. package/dist/server/events-websocket.js +96 -0
  196. package/dist/server/events-websocket.js.map +1 -0
  197. package/dist/server/formatters.d.ts +94 -0
  198. package/dist/server/formatters.d.ts.map +1 -0
  199. package/dist/server/formatters.js +142 -0
  200. package/dist/server/formatters.js.map +1 -0
  201. package/dist/server/index.d.ts +17 -0
  202. package/dist/server/index.d.ts.map +1 -0
  203. package/dist/server/index.js +153 -0
  204. package/dist/server/index.js.map +1 -0
  205. package/dist/server/lsp-websocket.d.ts +33 -0
  206. package/dist/server/lsp-websocket.d.ts.map +1 -0
  207. package/dist/server/lsp-websocket.js +161 -0
  208. package/dist/server/lsp-websocket.js.map +1 -0
  209. package/dist/server/routes/agents.d.ts +9 -0
  210. package/dist/server/routes/agents.d.ts.map +1 -0
  211. package/dist/server/routes/agents.js +369 -0
  212. package/dist/server/routes/agents.js.map +1 -0
  213. package/dist/server/routes/daemon.d.ts +13 -0
  214. package/dist/server/routes/daemon.d.ts.map +1 -0
  215. package/dist/server/routes/daemon.js +187 -0
  216. package/dist/server/routes/daemon.js.map +1 -0
  217. package/dist/server/routes/events.d.ts +23 -0
  218. package/dist/server/routes/events.d.ts.map +1 -0
  219. package/dist/server/routes/events.js +282 -0
  220. package/dist/server/routes/events.js.map +1 -0
  221. package/dist/server/routes/extensions.d.ts +9 -0
  222. package/dist/server/routes/extensions.d.ts.map +1 -0
  223. package/dist/server/routes/extensions.js +202 -0
  224. package/dist/server/routes/extensions.js.map +1 -0
  225. package/dist/server/routes/health.d.ts +7 -0
  226. package/dist/server/routes/health.d.ts.map +1 -0
  227. package/dist/server/routes/health.js +33 -0
  228. package/dist/server/routes/health.js.map +1 -0
  229. package/dist/server/routes/index.d.ts +21 -0
  230. package/dist/server/routes/index.d.ts.map +1 -0
  231. package/dist/server/routes/index.js +21 -0
  232. package/dist/server/routes/index.js.map +1 -0
  233. package/dist/server/routes/lsp.d.ts +9 -0
  234. package/dist/server/routes/lsp.d.ts.map +1 -0
  235. package/dist/server/routes/lsp.js +50 -0
  236. package/dist/server/routes/lsp.js.map +1 -0
  237. package/dist/server/routes/plugins.d.ts +9 -0
  238. package/dist/server/routes/plugins.d.ts.map +1 -0
  239. package/dist/server/routes/plugins.js +109 -0
  240. package/dist/server/routes/plugins.js.map +1 -0
  241. package/dist/server/routes/pools.d.ts +9 -0
  242. package/dist/server/routes/pools.d.ts.map +1 -0
  243. package/dist/server/routes/pools.js +189 -0
  244. package/dist/server/routes/pools.js.map +1 -0
  245. package/dist/server/routes/scheduler.d.ts +9 -0
  246. package/dist/server/routes/scheduler.d.ts.map +1 -0
  247. package/dist/server/routes/scheduler.js +162 -0
  248. package/dist/server/routes/scheduler.js.map +1 -0
  249. package/dist/server/routes/sessions.d.ts +27 -0
  250. package/dist/server/routes/sessions.d.ts.map +1 -0
  251. package/dist/server/routes/sessions.js +773 -0
  252. package/dist/server/routes/sessions.js.map +1 -0
  253. package/dist/server/routes/tasks.d.ts +9 -0
  254. package/dist/server/routes/tasks.d.ts.map +1 -0
  255. package/dist/server/routes/tasks.js +954 -0
  256. package/dist/server/routes/tasks.js.map +1 -0
  257. package/dist/server/routes/upload.d.ts +8 -0
  258. package/dist/server/routes/upload.d.ts.map +1 -0
  259. package/dist/server/routes/upload.js +40 -0
  260. package/dist/server/routes/upload.js.map +1 -0
  261. package/dist/server/routes/workflows.d.ts +9 -0
  262. package/dist/server/routes/workflows.d.ts.map +1 -0
  263. package/dist/server/routes/workflows.js +532 -0
  264. package/dist/server/routes/workflows.js.map +1 -0
  265. package/dist/server/routes/workspace-files.d.ts +12 -0
  266. package/dist/server/routes/workspace-files.d.ts.map +1 -0
  267. package/dist/server/routes/workspace-files.js +520 -0
  268. package/dist/server/routes/workspace-files.js.map +1 -0
  269. package/dist/server/routes/worktrees.d.ts +9 -0
  270. package/dist/server/routes/worktrees.d.ts.map +1 -0
  271. package/dist/server/routes/worktrees.js +94 -0
  272. package/dist/server/routes/worktrees.js.map +1 -0
  273. package/dist/server/server.d.ts +14 -0
  274. package/dist/server/server.d.ts.map +1 -0
  275. package/dist/server/server.js +258 -0
  276. package/dist/server/server.js.map +1 -0
  277. package/dist/server/services/lsp-manager.d.ts +93 -0
  278. package/dist/server/services/lsp-manager.d.ts.map +1 -0
  279. package/dist/server/services/lsp-manager.js +291 -0
  280. package/dist/server/services/lsp-manager.js.map +1 -0
  281. package/dist/server/services/session-messages.d.ts +61 -0
  282. package/dist/server/services/session-messages.d.ts.map +1 -0
  283. package/dist/server/services/session-messages.js +101 -0
  284. package/dist/server/services/session-messages.js.map +1 -0
  285. package/dist/server/services.d.ts +35 -0
  286. package/dist/server/services.d.ts.map +1 -0
  287. package/dist/server/services.js +159 -0
  288. package/dist/server/services.js.map +1 -0
  289. package/dist/server/static.d.ts +18 -0
  290. package/dist/server/static.d.ts.map +1 -0
  291. package/dist/server/static.js +71 -0
  292. package/dist/server/static.js.map +1 -0
  293. package/dist/server/types.d.ts +20 -0
  294. package/dist/server/types.d.ts.map +1 -0
  295. package/dist/server/types.js +7 -0
  296. package/dist/server/types.js.map +1 -0
  297. package/dist/server/websocket.d.ts +16 -0
  298. package/dist/server/websocket.d.ts.map +1 -0
  299. package/dist/server/websocket.js +143 -0
  300. package/dist/server/websocket.js.map +1 -0
  301. package/dist/services/agent-pool-service.d.ts +181 -0
  302. package/dist/services/agent-pool-service.d.ts.map +1 -0
  303. package/dist/services/agent-pool-service.js +590 -0
  304. package/dist/services/agent-pool-service.js.map +1 -0
  305. package/dist/services/agent-registry.d.ts +185 -0
  306. package/dist/services/agent-registry.d.ts.map +1 -0
  307. package/dist/services/agent-registry.js +432 -0
  308. package/dist/services/agent-registry.js.map +1 -0
  309. package/dist/services/dispatch-daemon.d.ts +429 -0
  310. package/dist/services/dispatch-daemon.d.ts.map +1 -0
  311. package/dist/services/dispatch-daemon.js +1833 -0
  312. package/dist/services/dispatch-daemon.js.map +1 -0
  313. package/dist/services/dispatch-service.d.ts +148 -0
  314. package/dist/services/dispatch-service.d.ts.map +1 -0
  315. package/dist/services/dispatch-service.js +170 -0
  316. package/dist/services/dispatch-service.js.map +1 -0
  317. package/dist/services/docs-steward-service.d.ts +199 -0
  318. package/dist/services/docs-steward-service.d.ts.map +1 -0
  319. package/dist/services/docs-steward-service.js +599 -0
  320. package/dist/services/docs-steward-service.js.map +1 -0
  321. package/dist/services/health-steward-service.d.ts +446 -0
  322. package/dist/services/health-steward-service.d.ts.map +1 -0
  323. package/dist/services/health-steward-service.js +866 -0
  324. package/dist/services/health-steward-service.js.map +1 -0
  325. package/dist/services/index.d.ts +26 -0
  326. package/dist/services/index.d.ts.map +1 -0
  327. package/dist/services/index.js +111 -0
  328. package/dist/services/index.js.map +1 -0
  329. package/dist/services/merge-request-provider.d.ts +59 -0
  330. package/dist/services/merge-request-provider.d.ts.map +1 -0
  331. package/dist/services/merge-request-provider.js +89 -0
  332. package/dist/services/merge-request-provider.js.map +1 -0
  333. package/dist/services/merge-steward-service.d.ts +268 -0
  334. package/dist/services/merge-steward-service.d.ts.map +1 -0
  335. package/dist/services/merge-steward-service.js +568 -0
  336. package/dist/services/merge-steward-service.js.map +1 -0
  337. package/dist/services/plugin-executor.d.ts +247 -0
  338. package/dist/services/plugin-executor.d.ts.map +1 -0
  339. package/dist/services/plugin-executor.js +451 -0
  340. package/dist/services/plugin-executor.js.map +1 -0
  341. package/dist/services/role-definition-service.d.ts +117 -0
  342. package/dist/services/role-definition-service.d.ts.map +1 -0
  343. package/dist/services/role-definition-service.js +289 -0
  344. package/dist/services/role-definition-service.js.map +1 -0
  345. package/dist/services/steward-scheduler.d.ts +336 -0
  346. package/dist/services/steward-scheduler.d.ts.map +1 -0
  347. package/dist/services/steward-scheduler.js +732 -0
  348. package/dist/services/steward-scheduler.js.map +1 -0
  349. package/dist/services/task-assignment-service.d.ts +291 -0
  350. package/dist/services/task-assignment-service.d.ts.map +1 -0
  351. package/dist/services/task-assignment-service.js +454 -0
  352. package/dist/services/task-assignment-service.js.map +1 -0
  353. package/dist/services/worker-task-service.d.ts +202 -0
  354. package/dist/services/worker-task-service.d.ts.map +1 -0
  355. package/dist/services/worker-task-service.js +228 -0
  356. package/dist/services/worker-task-service.js.map +1 -0
  357. package/dist/testing/index.d.ts +13 -0
  358. package/dist/testing/index.d.ts.map +1 -0
  359. package/dist/testing/index.js +17 -0
  360. package/dist/testing/index.js.map +1 -0
  361. package/dist/testing/orchestration-tests.d.ts +62 -0
  362. package/dist/testing/orchestration-tests.d.ts.map +1 -0
  363. package/dist/testing/orchestration-tests.js +1115 -0
  364. package/dist/testing/orchestration-tests.js.map +1 -0
  365. package/dist/testing/test-context.d.ts +171 -0
  366. package/dist/testing/test-context.d.ts.map +1 -0
  367. package/dist/testing/test-context.js +665 -0
  368. package/dist/testing/test-context.js.map +1 -0
  369. package/dist/testing/test-prompts.d.ts +46 -0
  370. package/dist/testing/test-prompts.d.ts.map +1 -0
  371. package/dist/testing/test-prompts.js +140 -0
  372. package/dist/testing/test-prompts.js.map +1 -0
  373. package/dist/testing/test-utils.d.ts +200 -0
  374. package/dist/testing/test-utils.d.ts.map +1 -0
  375. package/dist/testing/test-utils.js +378 -0
  376. package/dist/testing/test-utils.js.map +1 -0
  377. package/dist/types/agent-pool.d.ts +215 -0
  378. package/dist/types/agent-pool.d.ts.map +1 -0
  379. package/dist/types/agent-pool.js +143 -0
  380. package/dist/types/agent-pool.js.map +1 -0
  381. package/dist/types/agent.d.ts +265 -0
  382. package/dist/types/agent.d.ts.map +1 -0
  383. package/dist/types/agent.js +127 -0
  384. package/dist/types/agent.js.map +1 -0
  385. package/dist/types/index.d.ts +11 -0
  386. package/dist/types/index.d.ts.map +1 -0
  387. package/dist/types/index.js +40 -0
  388. package/dist/types/index.js.map +1 -0
  389. package/dist/types/message-types.d.ts +294 -0
  390. package/dist/types/message-types.d.ts.map +1 -0
  391. package/dist/types/message-types.js +354 -0
  392. package/dist/types/message-types.js.map +1 -0
  393. package/dist/types/role-definition.d.ts +272 -0
  394. package/dist/types/role-definition.d.ts.map +1 -0
  395. package/dist/types/role-definition.js +144 -0
  396. package/dist/types/role-definition.js.map +1 -0
  397. package/dist/types/task-meta.d.ts +248 -0
  398. package/dist/types/task-meta.d.ts.map +1 -0
  399. package/dist/types/task-meta.js +213 -0
  400. package/dist/types/task-meta.js.map +1 -0
  401. package/package.json +120 -0
  402. package/web/assets/abap-BrgZPUOV.js +6 -0
  403. package/web/assets/apex-DyP6w7ZV.js +6 -0
  404. package/web/assets/azcli-BaLxmfj-.js +6 -0
  405. package/web/assets/bat-CFOPXBzS.js +6 -0
  406. package/web/assets/bicep-BfEKNvv3.js +7 -0
  407. package/web/assets/cameligo-BFG1Mk7z.js +6 -0
  408. package/web/assets/clojure-DTECt2xU.js +6 -0
  409. package/web/assets/codicon-DCmgc-ay.ttf +0 -0
  410. package/web/assets/coffee-CDGzqUPQ.js +6 -0
  411. package/web/assets/cpp-CLLBncYj.js +6 -0
  412. package/web/assets/csharp-dUCx_-0o.js +6 -0
  413. package/web/assets/csp-5Rap-vPy.js +6 -0
  414. package/web/assets/css-D3h14YRZ.js +8 -0
  415. package/web/assets/cssMode-DMo-5YLA.js +9 -0
  416. package/web/assets/cypher-DrQuvNYM.js +6 -0
  417. package/web/assets/dart-CFKIUWau.js +6 -0
  418. package/web/assets/dockerfile-Zznr-cwX.js +6 -0
  419. package/web/assets/ecl-Ce3n6wWz.js +6 -0
  420. package/web/assets/elixir-deUWdS0T.js +6 -0
  421. package/web/assets/flow9-i9-g7ZhI.js +6 -0
  422. package/web/assets/freemarker2-D4qgkQzN.js +8 -0
  423. package/web/assets/fsharp-CzKuDChf.js +6 -0
  424. package/web/assets/go-Cphgjts3.js +6 -0
  425. package/web/assets/graphql-Cg7bfA9N.js +6 -0
  426. package/web/assets/handlebars-CXFvNjQC.js +6 -0
  427. package/web/assets/hcl-0cvrggvQ.js +6 -0
  428. package/web/assets/html-oyuB_D-B.js +6 -0
  429. package/web/assets/htmlMode-iWuZ24-r.js +9 -0
  430. package/web/assets/index-DqP-_E4F.css +32 -0
  431. package/web/assets/index-R1cylSgw.js +1665 -0
  432. package/web/assets/ini-Drc7WvVn.js +6 -0
  433. package/web/assets/java-B_fMsGYe.js +6 -0
  434. package/web/assets/javascript-CRIkN2Pg.js +6 -0
  435. package/web/assets/jsonMode-DVDkDgex.js +15 -0
  436. package/web/assets/julia-Bqgm2twL.js +6 -0
  437. package/web/assets/kotlin-BSkB5QuD.js +6 -0
  438. package/web/assets/less-BsTHnhdd.js +7 -0
  439. package/web/assets/lexon-YWi4-JPR.js +6 -0
  440. package/web/assets/liquid-CSfldbB5.js +6 -0
  441. package/web/assets/lua-nf6ki56Z.js +6 -0
  442. package/web/assets/m3-Cpb6xl2v.js +6 -0
  443. package/web/assets/markdown-DSZPf7rp.js +6 -0
  444. package/web/assets/mdx-Dd58iymR.js +6 -0
  445. package/web/assets/mips-B_c3zf-v.js +6 -0
  446. package/web/assets/monaco-editor-B4lwqA13.js +751 -0
  447. package/web/assets/monaco-editor-CQpyCxOA.css +1 -0
  448. package/web/assets/msdax-rUNN04Wq.js +6 -0
  449. package/web/assets/mysql-DDwshQtU.js +6 -0
  450. package/web/assets/objective-c-B5zXfXm9.js +6 -0
  451. package/web/assets/pascal-CXOwvkN_.js +6 -0
  452. package/web/assets/pascaligo-Bc-ZgV77.js +6 -0
  453. package/web/assets/perl-CwNk8-XU.js +6 -0
  454. package/web/assets/pgsql-tGk8EFnU.js +6 -0
  455. package/web/assets/php-CpIb_Oan.js +6 -0
  456. package/web/assets/pla-B03wrqEc.js +6 -0
  457. package/web/assets/postiats-BKlk5iyT.js +6 -0
  458. package/web/assets/powerquery-Bhzvs7bI.js +6 -0
  459. package/web/assets/powershell-Dd3NCNK9.js +6 -0
  460. package/web/assets/protobuf-COyEY5Pt.js +7 -0
  461. package/web/assets/pug-BaJupSGV.js +6 -0
  462. package/web/assets/python-XWrMqdhO.js +6 -0
  463. package/web/assets/qsharp-DXyYeYxl.js +6 -0
  464. package/web/assets/r-CdQndTaG.js +6 -0
  465. package/web/assets/razor-DPlhCpIs.js +6 -0
  466. package/web/assets/redis-CVwtpugi.js +6 -0
  467. package/web/assets/redshift-25W9uPmb.js +6 -0
  468. package/web/assets/restructuredtext-DfzH4Xui.js +6 -0
  469. package/web/assets/router-vendor-DHlGizSU.js +41 -0
  470. package/web/assets/ruby-Cp1zYvxS.js +6 -0
  471. package/web/assets/rust-D5C2fndG.js +6 -0
  472. package/web/assets/sb-CDntyWJ8.js +6 -0
  473. package/web/assets/scala-BoFRg7Ot.js +6 -0
  474. package/web/assets/scheme-Bio4gycK.js +6 -0
  475. package/web/assets/scss-4Ik7cdeQ.js +8 -0
  476. package/web/assets/shell-CX-rkNHf.js +6 -0
  477. package/web/assets/solidity-Tw7wswEv.js +6 -0
  478. package/web/assets/sophia-C5WLch3f.js +6 -0
  479. package/web/assets/sparql-DHaeiCBh.js +6 -0
  480. package/web/assets/sql-CCSDG5nI.js +6 -0
  481. package/web/assets/st-pnP8ivHi.js +6 -0
  482. package/web/assets/swift-DwJ7jVG9.js +8 -0
  483. package/web/assets/systemverilog-B9Xyijhd.js +6 -0
  484. package/web/assets/tcl-DnHyzjbg.js +6 -0
  485. package/web/assets/tsMode-BbA1Jbf3.js +16 -0
  486. package/web/assets/twig-CPajHgWi.js +6 -0
  487. package/web/assets/typescript-DcLHYzvH.js +6 -0
  488. package/web/assets/typespec-D-MeaMDU.js +6 -0
  489. package/web/assets/ui-vendor-BSco96uv.js +51 -0
  490. package/web/assets/utils-vendor-DaJ2Dubl.js +911 -0
  491. package/web/assets/vb-DgyLZaXg.js +6 -0
  492. package/web/assets/wgsl-DYQUnd45.js +303 -0
  493. package/web/assets/xml-xKYS3dO6.js +6 -0
  494. package/web/assets/yaml-CNmlXqzH.js +6 -0
  495. package/web/favicon.ico +0 -0
  496. package/web/index.html +22 -0
  497. package/web/logo.png +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"headless.d.ts","sourceRoot":"","sources":["../../../src/providers/opencode/headless.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EACV,gBAAgB,EAChB,eAAe,EACf,oBAAoB,EAGrB,MAAM,aAAa,CAAC;AA+IrB,MAAM,WAAW,sBAAsB;IACrC,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;;GAGG;AACH,qBAAa,wBAAyB,YAAW,gBAAgB;IAC/D,QAAQ,CAAC,IAAI,uBAAuB;IACpC,OAAO,CAAC,MAAM,CAAC,CAAyB;gBAE5B,MAAM,CAAC,EAAE,sBAAsB;IAIrC,KAAK,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,eAAe,CAAC;IAmD9D,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;CAQtC"}
@@ -0,0 +1,190 @@
1
+ /**
2
+ * OpenCode Headless Provider
3
+ *
4
+ * Implements the HeadlessProvider interface using the OpenCode SDK.
5
+ * Manages a shared server, creates sessions, and maps SSE events
6
+ * to the AgentMessage stream.
7
+ *
8
+ * @module
9
+ */
10
+ import { AsyncQueue } from './async-queue.js';
11
+ import { OpenCodeEventMapper } from './event-mapper.js';
12
+ import { serverManager } from './server-manager.js';
13
+ /**
14
+ * Parse a composite model ID (e.g., 'anthropic/claude-sonnet-4-5-20250929')
15
+ * into separate providerID and modelID.
16
+ */
17
+ function parseModelId(model) {
18
+ const slashIndex = model.indexOf('/');
19
+ if (slashIndex === -1) {
20
+ // No slash found - cannot parse as composite ID
21
+ return undefined;
22
+ }
23
+ return {
24
+ providerID: model.slice(0, slashIndex),
25
+ modelID: model.slice(slashIndex + 1),
26
+ };
27
+ }
28
+ // ============================================================================
29
+ // OpenCode Headless Session
30
+ // ============================================================================
31
+ class OpenCodeHeadlessSession {
32
+ client;
33
+ sessionId;
34
+ model;
35
+ eventMapper;
36
+ messageQueue;
37
+ closed = false;
38
+ constructor(client, sessionId, eventSubscription, model) {
39
+ this.client = client;
40
+ this.sessionId = sessionId;
41
+ this.model = model;
42
+ this.eventMapper = new OpenCodeEventMapper();
43
+ this.messageQueue = new AsyncQueue();
44
+ // Start background event processor (fire-and-forget)
45
+ this.processEvents(eventSubscription);
46
+ }
47
+ sendMessage(content) {
48
+ if (this.closed)
49
+ return;
50
+ // Build the request body, including model if provided
51
+ const body = {
52
+ parts: [{ type: 'text', text: content }],
53
+ };
54
+ if (this.model) {
55
+ body.model = this.model;
56
+ }
57
+ // Fire-and-forget: promptAsync returns 204 immediately, SSE events drive the stream
58
+ this.client.session
59
+ .promptAsync({
60
+ path: { id: this.sessionId },
61
+ body,
62
+ })
63
+ .catch((error) => {
64
+ this.messageQueue.push({
65
+ type: 'error',
66
+ content: error instanceof Error ? error.message : String(error),
67
+ raw: error,
68
+ });
69
+ });
70
+ }
71
+ [Symbol.asyncIterator]() {
72
+ return this.messageQueue[Symbol.asyncIterator]();
73
+ }
74
+ async interrupt() {
75
+ await this.client.session.abort({ path: { id: this.sessionId } });
76
+ }
77
+ close() {
78
+ if (this.closed)
79
+ return;
80
+ this.closed = true;
81
+ this.messageQueue.close();
82
+ serverManager.release();
83
+ }
84
+ getSessionId() {
85
+ return this.sessionId;
86
+ }
87
+ /** Injects a synthetic system init message (OpenCode has no equivalent) */
88
+ injectInitMessage() {
89
+ this.messageQueue.push({
90
+ type: 'system',
91
+ subtype: 'init',
92
+ sessionId: this.sessionId,
93
+ raw: { synthetic: true, provider: 'opencode' },
94
+ });
95
+ }
96
+ // ----------------------------------------
97
+ // Private
98
+ // ----------------------------------------
99
+ async processEvents(eventSubscription) {
100
+ try {
101
+ for await (const rawEvent of eventSubscription) {
102
+ if (this.closed)
103
+ break;
104
+ const event = rawEvent;
105
+ const agentMessages = this.eventMapper.mapEvent(event, this.sessionId);
106
+ for (const msg of agentMessages) {
107
+ this.messageQueue.push(msg);
108
+ }
109
+ }
110
+ // Flush any remaining buffered text after stream ends
111
+ for (const msg of this.eventMapper.flush()) {
112
+ this.messageQueue.push(msg);
113
+ }
114
+ }
115
+ catch (error) {
116
+ if (!this.closed) {
117
+ this.messageQueue.push({
118
+ type: 'error',
119
+ content: error instanceof Error ? error.message : String(error),
120
+ raw: error,
121
+ });
122
+ }
123
+ }
124
+ }
125
+ }
126
+ /**
127
+ * OpenCode headless provider using @opencode-ai/sdk.
128
+ * Manages a shared server and creates sessions on demand.
129
+ */
130
+ export class OpenCodeHeadlessProvider {
131
+ name = 'opencode-headless';
132
+ config;
133
+ constructor(config) {
134
+ this.config = config;
135
+ }
136
+ async spawn(options) {
137
+ // 1. Acquire server client
138
+ const client = await serverManager.acquire({
139
+ port: this.config?.port,
140
+ cwd: options.workingDirectory,
141
+ stoneforgeRoot: options.stoneforgeRoot,
142
+ });
143
+ let sessionId;
144
+ // Parse the model ID if provided (e.g., 'anthropic/claude-sonnet-4-5-20250929')
145
+ const modelSpec = options.model ? parseModelId(options.model) : undefined;
146
+ try {
147
+ // 2. Create or resume session
148
+ if (options.resumeSessionId) {
149
+ // Verify session exists (throws on 404)
150
+ await client.session.get({ path: { id: options.resumeSessionId } });
151
+ sessionId = options.resumeSessionId;
152
+ }
153
+ else {
154
+ const result = await client.session.create({
155
+ body: { title: options.initialPrompt?.slice(0, 100) || 'Stoneforge Agent' },
156
+ });
157
+ if (!result.data?.id) {
158
+ throw new Error('OpenCode session creation failed: no session ID returned');
159
+ }
160
+ sessionId = result.data.id;
161
+ }
162
+ // 3. Subscribe to SSE events (SDK returns { stream: AsyncGenerator })
163
+ const { stream } = await client.event.subscribe();
164
+ // 4. Create session object with model if provided
165
+ const headlessSession = new OpenCodeHeadlessSession(client, sessionId, stream, modelSpec);
166
+ // 5. Synthesize system init message
167
+ headlessSession.injectInitMessage();
168
+ // 6. Send initial prompt
169
+ if (options.initialPrompt) {
170
+ headlessSession.sendMessage(options.initialPrompt);
171
+ }
172
+ return headlessSession;
173
+ }
174
+ catch (error) {
175
+ // Release on failure
176
+ serverManager.release();
177
+ throw error;
178
+ }
179
+ }
180
+ async isAvailable() {
181
+ try {
182
+ await import('@opencode-ai/sdk');
183
+ return true;
184
+ }
185
+ catch {
186
+ return false;
187
+ }
188
+ }
189
+ }
190
+ //# sourceMappingURL=headless.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"headless.js","sourceRoot":"","sources":["../../../src/providers/opencode/headless.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * OpenCode Agent Provider
3
+ *
4
+ * Combines the OpenCode headless and interactive providers
5
+ * into a single AgentProvider implementation.
6
+ *
7
+ * @module
8
+ */
9
+ import type { AgentProvider, HeadlessProvider, InteractiveProvider, ModelInfo } from '../types.js';
10
+ export { OpenCodeHeadlessProvider } from './headless.js';
11
+ export { OpenCodeInteractiveProvider } from './interactive.js';
12
+ export { OpenCodeEventMapper } from './event-mapper.js';
13
+ export type { OpenCodeEvent } from './event-mapper.js';
14
+ export { AsyncQueue } from './async-queue.js';
15
+ export { serverManager } from './server-manager.js';
16
+ export interface OpenCodeProviderConfig {
17
+ executablePath?: string;
18
+ port?: number;
19
+ }
20
+ /**
21
+ * OpenCode Agent Provider - alternative provider using OpenCode CLI and SDK.
22
+ */
23
+ export declare class OpenCodeAgentProvider implements AgentProvider {
24
+ readonly name = "opencode";
25
+ readonly headless: HeadlessProvider;
26
+ readonly interactive: InteractiveProvider;
27
+ private readonly config?;
28
+ constructor(config?: OpenCodeProviderConfig);
29
+ isAvailable(): Promise<boolean>;
30
+ getInstallInstructions(): string;
31
+ listModels(): Promise<ModelInfo[]>;
32
+ }
33
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/providers/opencode/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAKnG,OAAO,EAAE,wBAAwB,EAAE,MAAM,eAAe,CAAC;AACzD,OAAO,EAAE,2BAA2B,EAAE,MAAM,kBAAkB,CAAC;AAC/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,YAAY,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEpD,MAAM,WAAW,sBAAsB;IACrC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,qBAAa,qBAAsB,YAAW,aAAa;IACzD,QAAQ,CAAC,IAAI,cAAc;IAC3B,QAAQ,CAAC,QAAQ,EAAE,gBAAgB,CAAC;IACpC,QAAQ,CAAC,WAAW,EAAE,mBAAmB,CAAC;IAC1C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAyB;gBAErC,MAAM,CAAC,EAAE,sBAAsB;IAMrC,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAMrC,sBAAsB,IAAI,MAAM;IAI1B,UAAU,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;CAGzC"}
@@ -0,0 +1,42 @@
1
+ /**
2
+ * OpenCode Agent Provider
3
+ *
4
+ * Combines the OpenCode headless and interactive providers
5
+ * into a single AgentProvider implementation.
6
+ *
7
+ * @module
8
+ */
9
+ import { OpenCodeHeadlessProvider } from './headless.js';
10
+ import { OpenCodeInteractiveProvider } from './interactive.js';
11
+ import { serverManager } from './server-manager.js';
12
+ export { OpenCodeHeadlessProvider } from './headless.js';
13
+ export { OpenCodeInteractiveProvider } from './interactive.js';
14
+ export { OpenCodeEventMapper } from './event-mapper.js';
15
+ export { AsyncQueue } from './async-queue.js';
16
+ export { serverManager } from './server-manager.js';
17
+ /**
18
+ * OpenCode Agent Provider - alternative provider using OpenCode CLI and SDK.
19
+ */
20
+ export class OpenCodeAgentProvider {
21
+ name = 'opencode';
22
+ headless;
23
+ interactive;
24
+ config;
25
+ constructor(config) {
26
+ this.config = config;
27
+ this.headless = new OpenCodeHeadlessProvider({ port: config?.port });
28
+ this.interactive = new OpenCodeInteractiveProvider(config?.executablePath);
29
+ }
30
+ async isAvailable() {
31
+ const headlessAvailable = await this.headless.isAvailable();
32
+ const interactiveAvailable = await this.interactive.isAvailable();
33
+ return headlessAvailable || interactiveAvailable;
34
+ }
35
+ getInstallInstructions() {
36
+ return 'Install OpenCode SDK: npm install @opencode-ai/sdk\nInstall OpenCode CLI: see https://opencode.ai';
37
+ }
38
+ async listModels() {
39
+ return serverManager.listModels({ port: this.config?.port });
40
+ }
41
+ }
42
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/providers/opencode/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EAAE,wBAAwB,EAAE,MAAM,eAAe,CAAC;AACzD,OAAO,EAAE,2BAA2B,EAAE,MAAM,kBAAkB,CAAC;AAC/D,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEpD,OAAO,EAAE,wBAAwB,EAAE,MAAM,eAAe,CAAC;AACzD,OAAO,EAAE,2BAA2B,EAAE,MAAM,kBAAkB,CAAC;AAC/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAExD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAOpD;;GAEG;AACH,MAAM,OAAO,qBAAqB;IACvB,IAAI,GAAG,UAAU,CAAC;IAClB,QAAQ,CAAmB;IAC3B,WAAW,CAAsB;IACzB,MAAM,CAA0B;IAEjD,YAAY,MAA+B;QACzC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,QAAQ,GAAG,IAAI,wBAAwB,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;QACrE,IAAI,CAAC,WAAW,GAAG,IAAI,2BAA2B,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IAC7E,CAAC;IAED,KAAK,CAAC,WAAW;QACf,MAAM,iBAAiB,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;QAC5D,MAAM,oBAAoB,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC;QAClE,OAAO,iBAAiB,IAAI,oBAAoB,CAAC;IACnD,CAAC;IAED,sBAAsB;QACpB,OAAO,mGAAmG,CAAC;IAC7G,CAAC;IAED,KAAK,CAAC,UAAU;QACd,OAAO,aAAa,CAAC,UAAU,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;IAC/D,CAAC;CACF"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * OpenCode Interactive Provider
3
+ *
4
+ * Implements the InteractiveProvider interface by spawning the `opencode` CLI
5
+ * in a PTY. Mirrors the Claude interactive provider pattern.
6
+ *
7
+ * @module
8
+ */
9
+ import type { InteractiveProvider, InteractiveSession, InteractiveSpawnOptions } from '../types.js';
10
+ /**
11
+ * OpenCode interactive provider that spawns the `opencode` CLI in a PTY.
12
+ */
13
+ export declare class OpenCodeInteractiveProvider implements InteractiveProvider {
14
+ readonly name = "opencode-interactive";
15
+ private readonly executablePath;
16
+ constructor(executablePath?: string);
17
+ spawn(options: InteractiveSpawnOptions): Promise<InteractiveSession>;
18
+ isAvailable(): Promise<boolean>;
19
+ private buildArgs;
20
+ }
21
+ //# sourceMappingURL=interactive.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interactive.d.ts","sourceRoot":"","sources":["../../../src/providers/opencode/interactive.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,KAAK,EACV,mBAAmB,EACnB,kBAAkB,EAClB,uBAAuB,EAExB,MAAM,aAAa,CAAC;AAiErB;;GAEG;AACH,qBAAa,2BAA4B,YAAW,mBAAmB;IACrE,QAAQ,CAAC,IAAI,0BAA0B;IACvC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAS;gBAE5B,cAAc,SAAa;IAIjC,KAAK,CAAC,OAAO,EAAE,uBAAuB,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAuDpE,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAUrC,OAAO,CAAC,SAAS;CAclB"}
@@ -0,0 +1,135 @@
1
+ /**
2
+ * OpenCode Interactive Provider
3
+ *
4
+ * Implements the InteractiveProvider interface by spawning the `opencode` CLI
5
+ * in a PTY. Mirrors the Claude interactive provider pattern.
6
+ *
7
+ * @module
8
+ */
9
+ import * as pty from 'node-pty';
10
+ // ============================================================================
11
+ // Helpers
12
+ // ============================================================================
13
+ function shellQuote(s) {
14
+ return "'" + s.replace(/'/g, "'\\''") + "'";
15
+ }
16
+ // ============================================================================
17
+ // OpenCode Interactive Session
18
+ // ============================================================================
19
+ class OpenCodeInteractiveSession {
20
+ ptyProcess;
21
+ sessionId;
22
+ pid;
23
+ constructor(ptyProcess) {
24
+ this.ptyProcess = ptyProcess;
25
+ this.pid = ptyProcess.pid;
26
+ // Listen for session ID in output
27
+ this.ptyProcess.onData((data) => {
28
+ if (!this.sessionId) {
29
+ // OpenCode may output session ID in different formats
30
+ const sessionMatch = data.match(/Session:\s*([a-zA-Z0-9_-]+)/);
31
+ if (sessionMatch) {
32
+ this.sessionId = sessionMatch[1];
33
+ }
34
+ }
35
+ });
36
+ }
37
+ write(data) {
38
+ this.ptyProcess.write(data);
39
+ }
40
+ resize(cols, rows) {
41
+ this.ptyProcess.resize(cols, rows);
42
+ }
43
+ kill() {
44
+ this.ptyProcess.kill();
45
+ }
46
+ onData(callback) {
47
+ this.ptyProcess.onData(callback);
48
+ }
49
+ onExit(callback) {
50
+ this.ptyProcess.onExit((e) => callback(e.exitCode, e.signal));
51
+ }
52
+ getSessionId() {
53
+ return this.sessionId;
54
+ }
55
+ }
56
+ // ============================================================================
57
+ // OpenCode Interactive Provider
58
+ // ============================================================================
59
+ /**
60
+ * OpenCode interactive provider that spawns the `opencode` CLI in a PTY.
61
+ */
62
+ export class OpenCodeInteractiveProvider {
63
+ name = 'opencode-interactive';
64
+ executablePath;
65
+ constructor(executablePath = 'opencode') {
66
+ this.executablePath = executablePath;
67
+ }
68
+ async spawn(options) {
69
+ const args = this.buildArgs(options);
70
+ // Build environment with permission bypass
71
+ const env = {
72
+ ...process.env,
73
+ ...options.environmentVariables,
74
+ OPENCODE_PERMISSION: JSON.stringify({ '*': 'allow' }),
75
+ };
76
+ if (options.stoneforgeRoot) {
77
+ env.STONEFORGE_ROOT = options.stoneforgeRoot;
78
+ }
79
+ const cols = options.cols ?? 120;
80
+ const rows = options.rows ?? 30;
81
+ const shell = process.platform === 'win32' ? 'cmd.exe' : '/bin/bash';
82
+ // Build the CLI command string (simple args only — not the prompt).
83
+ // Use `exec` so the CLI replaces the shell process — when the CLI exits,
84
+ // the PTY exits immediately (no lingering shell to clean up).
85
+ const opencodeCommand = 'exec ' + [shellQuote(this.executablePath), ...args].join(' ');
86
+ // Spawn PTY using bash -l -c to run the command in a login shell.
87
+ // When an initial prompt is provided, it's passed as a bash positional
88
+ // parameter ($1) via the process argv — bypasses shell parsing entirely.
89
+ const shellArgs = process.platform === 'win32'
90
+ ? []
91
+ : options.initialPrompt
92
+ ? ['-l', '-c', opencodeCommand + ' "$1"', '_', options.initialPrompt]
93
+ : ['-l', '-c', opencodeCommand];
94
+ const ptyProcess = pty.spawn(shell, shellArgs, {
95
+ name: 'xterm-256color',
96
+ cols,
97
+ rows,
98
+ cwd: options.workingDirectory,
99
+ env,
100
+ });
101
+ const session = new OpenCodeInteractiveSession(ptyProcess);
102
+ // On Windows, write the command to cmd.exe stdin (bash -c handles this on Unix)
103
+ if (process.platform === 'win32') {
104
+ await new Promise((resolve) => {
105
+ setTimeout(() => {
106
+ ptyProcess.write(opencodeCommand + '\r');
107
+ resolve();
108
+ }, 100);
109
+ });
110
+ }
111
+ return session;
112
+ }
113
+ async isAvailable() {
114
+ try {
115
+ const { execSync } = await import('node:child_process');
116
+ execSync(`${this.executablePath} --version`, { stdio: 'ignore' });
117
+ return true;
118
+ }
119
+ catch {
120
+ return false;
121
+ }
122
+ }
123
+ buildArgs(options) {
124
+ const args = [];
125
+ if (options.resumeSessionId) {
126
+ args.push('--continue', shellQuote(options.resumeSessionId));
127
+ }
128
+ // Pass model via --model flag (format: provider/model, e.g., 'anthropic/claude-sonnet-4-5-20250929')
129
+ if (options.model) {
130
+ args.push('--model', shellQuote(options.model));
131
+ }
132
+ return args;
133
+ }
134
+ }
135
+ //# sourceMappingURL=interactive.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interactive.js","sourceRoot":"","sources":["../../../src/providers/opencode/interactive.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,145 @@
1
+ /**
2
+ * OpenCode Server Manager (Singleton)
3
+ *
4
+ * Manages the lifecycle of a single shared OpenCode server process.
5
+ * Multiple sessions share one server; ref counting shuts it down
6
+ * when the last session releases.
7
+ *
8
+ * @module
9
+ */
10
+ /** Session object from the SDK */
11
+ export interface OpencodeSession {
12
+ id: string;
13
+ projectID?: string;
14
+ directory?: string;
15
+ }
16
+ /** SDK response wrapper — all SDK methods return { data, error, request, response } */
17
+ export interface SdkResponse<T> {
18
+ data: T | undefined;
19
+ error?: unknown;
20
+ }
21
+ /** SSE subscribe result — returns { stream: AsyncGenerator<Event> } */
22
+ export interface SseSubscribeResult {
23
+ stream: AsyncIterable<unknown>;
24
+ }
25
+ /** Text part input for prompts */
26
+ export interface TextPartInput {
27
+ type: 'text';
28
+ text: string;
29
+ }
30
+ /** Model information from OpenCode SDK */
31
+ export interface OpencodeModel {
32
+ id: string;
33
+ providerID?: string;
34
+ name: string;
35
+ }
36
+ /** Provider information from OpenCode SDK (config.providers) */
37
+ export interface OpencodeProvider {
38
+ id: string;
39
+ name: string;
40
+ models: Record<string, OpencodeModel>;
41
+ }
42
+ /** Response from config.providers() */
43
+ export interface ConfigProvidersResponse {
44
+ providers: OpencodeProvider[];
45
+ default: Record<string, string>;
46
+ }
47
+ /** Provider entry from provider.list() — includes all available providers */
48
+ export interface OpencodeProviderListItem {
49
+ id: string;
50
+ name: string;
51
+ models: Record<string, OpencodeModel>;
52
+ }
53
+ /** Response from provider.list() */
54
+ export interface ProviderListResponse {
55
+ all: OpencodeProviderListItem[];
56
+ default: Record<string, string>;
57
+ connected: string[];
58
+ }
59
+ /** Model specification for promptAsync */
60
+ export interface ModelSpec {
61
+ providerID: string;
62
+ modelID: string;
63
+ }
64
+ /** Minimal OpenCode client shape matching the real SDK response wrappers */
65
+ export interface OpencodeClient {
66
+ session: {
67
+ create(opts: {
68
+ body: {
69
+ title?: string;
70
+ };
71
+ }): Promise<SdkResponse<OpencodeSession>>;
72
+ get(opts: {
73
+ path: {
74
+ id: string;
75
+ };
76
+ }): Promise<SdkResponse<OpencodeSession>>;
77
+ abort(opts: {
78
+ path: {
79
+ id: string;
80
+ };
81
+ }): Promise<SdkResponse<unknown>>;
82
+ promptAsync(opts: {
83
+ path: {
84
+ id: string;
85
+ };
86
+ body: {
87
+ parts: TextPartInput[];
88
+ model?: ModelSpec;
89
+ };
90
+ }): Promise<SdkResponse<void>>;
91
+ };
92
+ event: {
93
+ subscribe(): Promise<SseSubscribeResult>;
94
+ };
95
+ config: {
96
+ providers(): Promise<SdkResponse<ConfigProvidersResponse>>;
97
+ };
98
+ provider: {
99
+ list(): Promise<SdkResponse<ProviderListResponse>>;
100
+ };
101
+ }
102
+ export interface ServerManagerConfig {
103
+ port?: number;
104
+ cwd?: string;
105
+ stoneforgeRoot?: string;
106
+ }
107
+ /**
108
+ * Manages a single shared OpenCode server instance.
109
+ *
110
+ * - `acquire()` starts or reuses the server, increments ref count
111
+ * - `release()` decrements ref count, stops server at zero
112
+ * - Concurrent acquire() calls are coalesced into a single startup
113
+ */
114
+ declare class OpenCodeServerManager {
115
+ private client;
116
+ private server;
117
+ private refCount;
118
+ private startPromise;
119
+ acquire(config?: ServerManagerConfig): Promise<OpencodeClient>;
120
+ release(): void;
121
+ shutdown(): void;
122
+ /**
123
+ * List all available models from OpenCode providers.
124
+ * Uses provider.list() to get the full catalog (not just configured providers).
125
+ * Each model ID is formatted as `providerID/modelID`.
126
+ * @returns Flattened array of models with composite IDs
127
+ */
128
+ listModels(config?: ServerManagerConfig): Promise<Array<{
129
+ id: string;
130
+ displayName: string;
131
+ description?: string;
132
+ isDefault?: boolean;
133
+ providerName?: string;
134
+ }>>;
135
+ /**
136
+ * Fallback: list models from config.providers() (only configured providers).
137
+ */
138
+ private listModelsFromConfig;
139
+ private startServer;
140
+ private loadSDK;
141
+ }
142
+ /** Singleton instance */
143
+ export declare const serverManager: OpenCodeServerManager;
144
+ export {};
145
+ //# sourceMappingURL=server-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server-manager.d.ts","sourceRoot":"","sources":["../../../src/providers/opencode/server-manager.ts"],"names":[],"mappings":"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"}