@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,307 @@
1
+ /**
2
+ * Claude Headless Provider
3
+ *
4
+ * Implements the HeadlessProvider interface using the @anthropic-ai/claude-agent-sdk.
5
+ * Extracted from the original spawner.ts to enable provider abstraction.
6
+ *
7
+ * @module
8
+ */
9
+ import { query as sdkQuery } from '@anthropic-ai/claude-agent-sdk';
10
+ // ============================================================================
11
+ // SDK Input Queue
12
+ // ============================================================================
13
+ /**
14
+ * Message queue for SDK streaming input mode.
15
+ * Allows pushing messages that will be sent to the SDK query.
16
+ */
17
+ class SDKInputQueue {
18
+ queue = [];
19
+ waitingResolve = null;
20
+ closed = false;
21
+ sessionId = '';
22
+ setSessionId(id) {
23
+ this.sessionId = id;
24
+ }
25
+ push(content) {
26
+ if (this.closed)
27
+ return;
28
+ const message = {
29
+ type: 'user',
30
+ message: {
31
+ role: 'user',
32
+ content: content,
33
+ },
34
+ parent_tool_use_id: null,
35
+ session_id: this.sessionId,
36
+ };
37
+ if (this.waitingResolve) {
38
+ this.waitingResolve({ value: message, done: false });
39
+ this.waitingResolve = null;
40
+ }
41
+ else {
42
+ this.queue.push(message);
43
+ }
44
+ }
45
+ close() {
46
+ this.closed = true;
47
+ if (this.waitingResolve) {
48
+ this.waitingResolve({ value: undefined, done: true });
49
+ this.waitingResolve = null;
50
+ }
51
+ }
52
+ [Symbol.asyncIterator]() {
53
+ return {
54
+ next: () => {
55
+ if (this.queue.length > 0) {
56
+ return Promise.resolve({ value: this.queue.shift(), done: false });
57
+ }
58
+ if (this.closed) {
59
+ return Promise.resolve({ value: undefined, done: true });
60
+ }
61
+ return new Promise((resolve) => {
62
+ this.waitingResolve = resolve;
63
+ });
64
+ },
65
+ };
66
+ }
67
+ }
68
+ // ============================================================================
69
+ // Claude Headless Session
70
+ // ============================================================================
71
+ /**
72
+ * A running Claude SDK headless session.
73
+ */
74
+ class ClaudeHeadlessSession {
75
+ inputQueue;
76
+ sdkQuery;
77
+ messageIterator;
78
+ sessionId;
79
+ closed = false;
80
+ constructor(inputQueue, sdkQuery) {
81
+ this.inputQueue = inputQueue;
82
+ this.sdkQuery = sdkQuery;
83
+ this.messageIterator = this.createMessageIterator();
84
+ }
85
+ sendMessage(content) {
86
+ this.inputQueue.push(content);
87
+ }
88
+ [Symbol.asyncIterator]() {
89
+ return this.messageIterator;
90
+ }
91
+ async interrupt() {
92
+ await this.sdkQuery.interrupt();
93
+ }
94
+ close() {
95
+ if (this.closed)
96
+ return;
97
+ this.closed = true;
98
+ this.inputQueue.close();
99
+ }
100
+ getSessionId() {
101
+ return this.sessionId;
102
+ }
103
+ async *createMessageIterator() {
104
+ let resumeErrorDetected = false;
105
+ try {
106
+ for await (const message of this.sdkQuery) {
107
+ if (this.closed)
108
+ break;
109
+ const subtype = 'subtype' in message ? message.subtype : undefined;
110
+ // Check for resume failure (session not found)
111
+ if (message.type === 'result' && subtype === 'error_during_execution') {
112
+ const resultMsg = message;
113
+ const errors = resultMsg.errors || [];
114
+ const sessionNotFoundError = errors.find(e => e.includes('No conversation found with session ID'));
115
+ if (sessionNotFoundError) {
116
+ resumeErrorDetected = true;
117
+ }
118
+ }
119
+ // Extract session ID from system init message
120
+ if (message.type === 'system' && subtype === 'init') {
121
+ this.sessionId = message.session_id;
122
+ if (this.sessionId) {
123
+ this.inputQueue.setSessionId(this.sessionId);
124
+ }
125
+ }
126
+ const agentMessages = this.convertSDKMessage(message);
127
+ for (const agentMessage of agentMessages) {
128
+ yield agentMessage;
129
+ }
130
+ }
131
+ }
132
+ catch (error) {
133
+ if (error instanceof Error && error.name === 'AbortError') {
134
+ // Interrupt - just stop iterating
135
+ return;
136
+ }
137
+ if (!resumeErrorDetected) {
138
+ yield {
139
+ type: 'error',
140
+ content: error instanceof Error ? error.message : String(error),
141
+ raw: error,
142
+ };
143
+ }
144
+ }
145
+ }
146
+ /**
147
+ * Converts an SDK message into one or more AgentMessages.
148
+ *
149
+ * A single SDK assistant/user message may contain multiple content blocks
150
+ * (text, tool_use, tool_result). We decompose these into separate
151
+ * AgentMessages so downstream consumers see the same event types they
152
+ * saw before the provider abstraction (text as assistant/user, tool blocks
153
+ * as tool_use/tool_result). Messages with no meaningful content are dropped.
154
+ */
155
+ convertSDKMessage(message) {
156
+ switch (message.type) {
157
+ case 'system':
158
+ return [{
159
+ type: 'system',
160
+ subtype: 'subtype' in message ? message.subtype : undefined,
161
+ sessionId: 'session_id' in message ? message.session_id : undefined,
162
+ raw: message,
163
+ }];
164
+ case 'assistant':
165
+ return this.decomposeContentBlocks('assistant', message);
166
+ case 'user':
167
+ return this.decomposeContentBlocks('user', message);
168
+ case 'result':
169
+ return [{
170
+ type: 'result',
171
+ subtype: 'subtype' in message ? message.subtype : undefined,
172
+ content: 'result' in message ? message.result : undefined,
173
+ raw: message,
174
+ }];
175
+ default:
176
+ return [];
177
+ }
178
+ }
179
+ /**
180
+ * Decomposes an SDK assistant or user message into individual AgentMessages.
181
+ *
182
+ * Content blocks are mapped as follows:
183
+ * - text blocks → message of the original type (assistant/user) with text content
184
+ * - tool_use blocks → tool_use message
185
+ * - tool_result blocks → tool_result message
186
+ *
187
+ * If no content blocks produce output, the message is dropped entirely
188
+ * (no empty assistant/user events are emitted).
189
+ */
190
+ decomposeContentBlocks(messageType, message) {
191
+ const apiMessage = message.message;
192
+ if (!apiMessage || typeof apiMessage !== 'object')
193
+ return [];
194
+ const msg = apiMessage;
195
+ const results = [];
196
+ // Handle simple string content
197
+ if (typeof msg.content === 'string') {
198
+ if (msg.content.length > 0) {
199
+ results.push({ type: messageType, content: msg.content, raw: message });
200
+ }
201
+ return results;
202
+ }
203
+ // Handle array of content blocks
204
+ if (!Array.isArray(msg.content))
205
+ return [];
206
+ const textParts = [];
207
+ for (const block of msg.content) {
208
+ if (typeof block !== 'object' || block === null || !('type' in block))
209
+ continue;
210
+ const typed = block;
211
+ switch (typed.type) {
212
+ case 'text':
213
+ if (typeof typed.text === 'string' && typed.text.length > 0) {
214
+ textParts.push(typed.text);
215
+ }
216
+ break;
217
+ case 'tool_use':
218
+ results.push({
219
+ type: 'tool_use',
220
+ tool: {
221
+ name: typed.name,
222
+ id: typed.id,
223
+ input: typed.input,
224
+ },
225
+ raw: message,
226
+ });
227
+ break;
228
+ case 'tool_result':
229
+ results.push({
230
+ type: 'tool_result',
231
+ content: typeof typed.content === 'string' ? typed.content : undefined,
232
+ tool: { id: typed.tool_use_id },
233
+ raw: message,
234
+ });
235
+ break;
236
+ }
237
+ }
238
+ // Emit text as the original message type (assistant/user)
239
+ if (textParts.length > 0) {
240
+ // Insert text message first, before tool messages
241
+ results.unshift({
242
+ type: messageType,
243
+ content: textParts.join(''),
244
+ raw: message,
245
+ });
246
+ }
247
+ return results;
248
+ }
249
+ }
250
+ // ============================================================================
251
+ // Claude Headless Provider
252
+ // ============================================================================
253
+ /**
254
+ * Claude headless provider using @anthropic-ai/claude-agent-sdk.
255
+ */
256
+ export class ClaudeHeadlessProvider {
257
+ name = 'claude-headless';
258
+ async spawn(options) {
259
+ const initialPrompt = options.initialPrompt ?? 'You are an AI agent. Await further instructions.';
260
+ // Build environment
261
+ const env = {
262
+ ...process.env,
263
+ ...options.environmentVariables,
264
+ };
265
+ if (options.stoneforgeRoot) {
266
+ env.STONEFORGE_ROOT = options.stoneforgeRoot;
267
+ }
268
+ // Create input queue for streaming input mode
269
+ const inputQueue = new SDKInputQueue();
270
+ // Build SDK options
271
+ const sdkOptions = {
272
+ cwd: options.workingDirectory,
273
+ env,
274
+ permissionMode: 'bypassPermissions',
275
+ allowDangerouslySkipPermissions: true,
276
+ };
277
+ // Pass model if specified
278
+ if (options.model) {
279
+ sdkOptions.model = options.model;
280
+ }
281
+ // Resume if we have a session ID
282
+ if (options.resumeSessionId) {
283
+ sdkOptions.resume = options.resumeSessionId;
284
+ inputQueue.setSessionId(options.resumeSessionId);
285
+ }
286
+ // Create the SDK query
287
+ const queryResult = sdkQuery({
288
+ prompt: inputQueue,
289
+ options: sdkOptions,
290
+ });
291
+ const session = new ClaudeHeadlessSession(inputQueue, queryResult);
292
+ // Push the initial prompt to start the conversation
293
+ inputQueue.push(initialPrompt);
294
+ return session;
295
+ }
296
+ async isAvailable() {
297
+ try {
298
+ // Check if the SDK can be imported
299
+ await import('@anthropic-ai/claude-agent-sdk');
300
+ return true;
301
+ }
302
+ catch {
303
+ return false;
304
+ }
305
+ }
306
+ }
307
+ //# sourceMappingURL=headless.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"headless.js","sourceRoot":"","sources":["../../../src/providers/claude/headless.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Claude Agent Provider
3
+ *
4
+ * Combines the Claude headless (SDK) and interactive (PTY) providers
5
+ * into a single AgentProvider implementation.
6
+ *
7
+ * @module
8
+ */
9
+ import { type AgentProvider, type HeadlessProvider, type InteractiveProvider, type ModelInfo } from '../types.js';
10
+ export { ClaudeHeadlessProvider } from './headless.js';
11
+ export { ClaudeInteractiveProvider } from './interactive.js';
12
+ /**
13
+ * Claude Agent Provider - the default provider using Claude Code CLI and SDK.
14
+ */
15
+ export declare class ClaudeAgentProvider implements AgentProvider {
16
+ readonly name = "claude";
17
+ readonly headless: HeadlessProvider;
18
+ readonly interactive: InteractiveProvider;
19
+ constructor(executablePath?: string);
20
+ isAvailable(): Promise<boolean>;
21
+ getInstallInstructions(): string;
22
+ listModels(): Promise<ModelInfo[]>;
23
+ }
24
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/providers/claude/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,EAAiB,KAAK,aAAa,EAAE,KAAK,gBAAgB,EAAE,KAAK,mBAAmB,EAAE,KAAK,SAAS,EAAE,MAAM,aAAa,CAAC;AAIjI,OAAO,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAC;AACvD,OAAO,EAAE,yBAAyB,EAAE,MAAM,kBAAkB,CAAC;AAE7D;;GAEG;AACH,qBAAa,mBAAoB,YAAW,aAAa;IACvD,QAAQ,CAAC,IAAI,YAAY;IACzB,QAAQ,CAAC,QAAQ,EAAE,gBAAgB,CAAC;IACpC,QAAQ,CAAC,WAAW,EAAE,mBAAmB,CAAC;gBAE9B,cAAc,SAAW;IAK/B,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAKrC,sBAAsB,IAAI,MAAM;IAI1B,UAAU,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;CAoDzC"}
@@ -0,0 +1,80 @@
1
+ /**
2
+ * Claude Agent Provider
3
+ *
4
+ * Combines the Claude headless (SDK) and interactive (PTY) providers
5
+ * into a single AgentProvider implementation.
6
+ *
7
+ * @module
8
+ */
9
+ import { query as sdkQuery } from '@anthropic-ai/claude-agent-sdk';
10
+ import { ProviderError } from '../types.js';
11
+ import { ClaudeHeadlessProvider } from './headless.js';
12
+ import { ClaudeInteractiveProvider } from './interactive.js';
13
+ export { ClaudeHeadlessProvider } from './headless.js';
14
+ export { ClaudeInteractiveProvider } from './interactive.js';
15
+ /**
16
+ * Claude Agent Provider - the default provider using Claude Code CLI and SDK.
17
+ */
18
+ export class ClaudeAgentProvider {
19
+ name = 'claude';
20
+ headless;
21
+ interactive;
22
+ constructor(executablePath = 'claude') {
23
+ this.headless = new ClaudeHeadlessProvider();
24
+ this.interactive = new ClaudeInteractiveProvider(executablePath);
25
+ }
26
+ async isAvailable() {
27
+ // Check if at least the headless provider is available (SDK installed)
28
+ return this.headless.isAvailable();
29
+ }
30
+ getInstallInstructions() {
31
+ return 'Install Claude Code: npm install -g @anthropic-ai/claude-code\nInstall Claude Agent SDK: npm install @anthropic-ai/claude-agent-sdk';
32
+ }
33
+ async listModels() {
34
+ // Create a temporary query instance to access supportedModels().
35
+ // We use a minimal prompt and immediately close the query to avoid
36
+ // actually running a session - we just need the query object's methods.
37
+ let queryInstance;
38
+ try {
39
+ queryInstance = sdkQuery({
40
+ prompt: '',
41
+ options: {
42
+ // Use bypassPermissions to avoid permission prompts
43
+ permissionMode: 'bypassPermissions',
44
+ allowDangerouslySkipPermissions: true,
45
+ },
46
+ });
47
+ }
48
+ catch (error) {
49
+ // SDK query creation failed (e.g., missing executable, spawn error)
50
+ throw new ProviderError(`Failed to initialize Claude SDK query: ${error instanceof Error ? error.message : String(error)}`, 'claude');
51
+ }
52
+ try {
53
+ const sdkModels = await queryInstance.supportedModels();
54
+ // Map SDK ModelInfo (value, displayName, description) to our ModelInfo (id, displayName, description?)
55
+ // The SDK returns models in default-first order, so mark the first one as default.
56
+ // The SDK's displayName can be generic (e.g. "Default (recommended)", "Sonnet").
57
+ // The description contains the real model name before "·" (e.g. "Opus 4.5 · Most capable...").
58
+ return sdkModels.map((model, index) => {
59
+ // Extract model name from description: "Opus 4.5 · ..." → "Opus 4.5"
60
+ const descriptionName = model.description?.split('·')[0]?.trim();
61
+ const displayName = descriptionName || model.displayName;
62
+ return {
63
+ id: model.value,
64
+ displayName,
65
+ description: model.description,
66
+ ...(index === 0 ? { isDefault: true } : {}),
67
+ };
68
+ });
69
+ }
70
+ catch (error) {
71
+ // SDK query failed (e.g., auth error, process crash, "Query closed before response")
72
+ throw new ProviderError(`Failed to list models from Claude SDK: ${error instanceof Error ? error.message : String(error)}`, 'claude');
73
+ }
74
+ finally {
75
+ // Always close the query to clean up resources
76
+ queryInstance.close();
77
+ }
78
+ }
79
+ }
80
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/providers/claude/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,KAAK,IAAI,QAAQ,EAAE,MAAM,gCAAgC,CAAC;AAEnE,OAAO,EAAE,aAAa,EAAuF,MAAM,aAAa,CAAC;AACjI,OAAO,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAC;AACvD,OAAO,EAAE,yBAAyB,EAAE,MAAM,kBAAkB,CAAC;AAE7D,OAAO,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAC;AACvD,OAAO,EAAE,yBAAyB,EAAE,MAAM,kBAAkB,CAAC;AAE7D;;GAEG;AACH,MAAM,OAAO,mBAAmB;IACrB,IAAI,GAAG,QAAQ,CAAC;IAChB,QAAQ,CAAmB;IAC3B,WAAW,CAAsB;IAE1C,YAAY,cAAc,GAAG,QAAQ;QACnC,IAAI,CAAC,QAAQ,GAAG,IAAI,sBAAsB,EAAE,CAAC;QAC7C,IAAI,CAAC,WAAW,GAAG,IAAI,yBAAyB,CAAC,cAAc,CAAC,CAAC;IACnE,CAAC;IAED,KAAK,CAAC,WAAW;QACf,uEAAuE;QACvE,OAAO,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;IACrC,CAAC;IAED,sBAAsB;QACpB,OAAO,qIAAqI,CAAC;IAC/I,CAAC;IAED,KAAK,CAAC,UAAU;QACd,iEAAiE;QACjE,mEAAmE;QACnE,wEAAwE;QACxE,IAAI,aAAa,CAAC;QAClB,IAAI,CAAC;YACH,aAAa,GAAG,QAAQ,CAAC;gBACvB,MAAM,EAAE,EAAE;gBACV,OAAO,EAAE;oBACP,oDAAoD;oBACpD,cAAc,EAAE,mBAAmB;oBACnC,+BAA+B,EAAE,IAAI;iBACtC;aACF,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,oEAAoE;YACpE,MAAM,IAAI,aAAa,CACrB,0CAA0C,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EAClG,QAAQ,CACT,CAAC;QACJ,CAAC;QAED,IAAI,CAAC;YACH,MAAM,SAAS,GAAmB,MAAM,aAAa,CAAC,eAAe,EAAE,CAAC;YAExE,uGAAuG;YACvG,mFAAmF;YACnF,iFAAiF;YACjF,+FAA+F;YAC/F,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;gBACpC,qEAAqE;gBACrE,MAAM,eAAe,GAAG,KAAK,CAAC,WAAW,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC;gBACjE,MAAM,WAAW,GAAG,eAAe,IAAI,KAAK,CAAC,WAAW,CAAC;gBAEzD,OAAO;oBACL,EAAE,EAAE,KAAK,CAAC,KAAK;oBACf,WAAW;oBACX,WAAW,EAAE,KAAK,CAAC,WAAW;oBAC9B,GAAG,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBAC5C,CAAC;YACJ,CAAC,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,qFAAqF;YACrF,MAAM,IAAI,aAAa,CACrB,0CAA0C,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EAClG,QAAQ,CACT,CAAC;QACJ,CAAC;gBAAS,CAAC;YACT,+CAA+C;YAC/C,aAAa,CAAC,KAAK,EAAE,CAAC;QACxB,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Claude Interactive Provider
3
+ *
4
+ * Implements the InteractiveProvider interface by spawning the `claude` CLI
5
+ * in a PTY. Extracted from the original spawner.ts to enable provider abstraction.
6
+ *
7
+ * @module
8
+ */
9
+ import type { InteractiveProvider, InteractiveSession, InteractiveSpawnOptions } from '../types.js';
10
+ /**
11
+ * Claude interactive provider that spawns the `claude` CLI in a PTY.
12
+ */
13
+ export declare class ClaudeInteractiveProvider implements InteractiveProvider {
14
+ readonly name = "claude-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/claude/interactive.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAKH,OAAO,KAAK,EACV,mBAAmB,EACnB,kBAAkB,EAClB,uBAAuB,EAExB,MAAM,aAAa,CAAC;AA6DrB;;GAEG;AACH,qBAAa,yBAA0B,YAAW,mBAAmB;IACnE,QAAQ,CAAC,IAAI,wBAAwB;IACrC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAS;gBAE5B,cAAc,SAAW;IAI/B,KAAK,CAAC,OAAO,EAAE,uBAAuB,GAAG,OAAO,CAAC,kBAAkB,CAAC;IA0DpE,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAUrC,OAAO,CAAC,SAAS;CAkBlB"}
@@ -0,0 +1,142 @@
1
+ /**
2
+ * Claude Interactive Provider
3
+ *
4
+ * Implements the InteractiveProvider interface by spawning the `claude` CLI
5
+ * in a PTY. Extracted from the original spawner.ts to enable provider abstraction.
6
+ *
7
+ * @module
8
+ */
9
+ import { randomUUID } from 'node:crypto';
10
+ import * as pty from 'node-pty';
11
+ // ============================================================================
12
+ // Helpers
13
+ // ============================================================================
14
+ /**
15
+ * Shell-quotes a string for safe inclusion in a bash command.
16
+ */
17
+ function shellQuote(s) {
18
+ return "'" + s.replace(/'/g, "'\\''") + "'";
19
+ }
20
+ // ============================================================================
21
+ // Claude Interactive Session
22
+ // ============================================================================
23
+ /**
24
+ * A running Claude CLI interactive (PTY) session.
25
+ */
26
+ class ClaudeInteractiveSession {
27
+ ptyProcess;
28
+ sessionId;
29
+ pid;
30
+ constructor(ptyProcess, sessionId) {
31
+ this.ptyProcess = ptyProcess;
32
+ this.pid = ptyProcess.pid;
33
+ this.sessionId = sessionId;
34
+ }
35
+ write(data) {
36
+ this.ptyProcess.write(data);
37
+ }
38
+ resize(cols, rows) {
39
+ this.ptyProcess.resize(cols, rows);
40
+ }
41
+ kill() {
42
+ this.ptyProcess.kill();
43
+ }
44
+ onData(callback) {
45
+ this.ptyProcess.onData(callback);
46
+ }
47
+ onExit(callback) {
48
+ this.ptyProcess.onExit((e) => callback(e.exitCode, e.signal));
49
+ }
50
+ getSessionId() {
51
+ return this.sessionId;
52
+ }
53
+ }
54
+ // ============================================================================
55
+ // Claude Interactive Provider
56
+ // ============================================================================
57
+ /**
58
+ * Claude interactive provider that spawns the `claude` CLI in a PTY.
59
+ */
60
+ export class ClaudeInteractiveProvider {
61
+ name = 'claude-interactive';
62
+ executablePath;
63
+ constructor(executablePath = 'claude') {
64
+ this.executablePath = executablePath;
65
+ }
66
+ async spawn(options) {
67
+ // For new sessions, generate a UUID so we know the session ID upfront.
68
+ // The Claude CLI accepts --session-id <uuid> to use a specific ID.
69
+ // For resumed sessions, the ID comes from resumeSessionId.
70
+ const sessionId = options.resumeSessionId ?? randomUUID();
71
+ const args = this.buildArgs(options, sessionId);
72
+ // Build environment
73
+ const env = {
74
+ ...process.env,
75
+ ...options.environmentVariables,
76
+ };
77
+ if (options.stoneforgeRoot) {
78
+ env.STONEFORGE_ROOT = options.stoneforgeRoot;
79
+ }
80
+ const cols = options.cols ?? 120;
81
+ const rows = options.rows ?? 30;
82
+ // Build the CLI command string (simple args only — not the prompt)
83
+ const claudeCommand = [shellQuote(this.executablePath), ...args].join(' ');
84
+ // Spawn PTY using bash -l -c to run the command in a login shell.
85
+ // When an initial prompt is provided, it's passed as a bash positional
86
+ // parameter ($1) via the process argv — this bypasses shell parsing entirely,
87
+ // so the prompt never needs escaping regardless of newlines, quotes, backticks,
88
+ // or other special characters. The prompt goes through execvp() as a raw OS
89
+ // process argument and bash expands "$1" to the exact value.
90
+ const shell = process.platform === 'win32' ? 'cmd.exe' : '/bin/bash';
91
+ const shellArgs = process.platform === 'win32'
92
+ ? []
93
+ : options.initialPrompt
94
+ ? ['-l', '-c', claudeCommand + ' "$1"', '_', options.initialPrompt]
95
+ : ['-l', '-c', claudeCommand];
96
+ const ptyProcess = pty.spawn(shell, shellArgs, {
97
+ name: 'xterm-256color',
98
+ cols,
99
+ rows,
100
+ cwd: options.workingDirectory,
101
+ env,
102
+ });
103
+ const session = new ClaudeInteractiveSession(ptyProcess, sessionId);
104
+ // On Windows, write the command to cmd.exe stdin (bash -c handles this on Unix)
105
+ if (process.platform === 'win32') {
106
+ await new Promise((resolve) => {
107
+ setTimeout(() => {
108
+ ptyProcess.write(claudeCommand + '\r');
109
+ resolve();
110
+ }, 100);
111
+ });
112
+ }
113
+ return session;
114
+ }
115
+ async isAvailable() {
116
+ try {
117
+ const { execSync } = await import('node:child_process');
118
+ execSync(`${this.executablePath} --version`, { stdio: 'ignore' });
119
+ return true;
120
+ }
121
+ catch {
122
+ return false;
123
+ }
124
+ }
125
+ buildArgs(options, sessionId) {
126
+ const args = [
127
+ '--dangerously-skip-permissions',
128
+ ];
129
+ if (options.resumeSessionId) {
130
+ args.push('--resume', shellQuote(options.resumeSessionId));
131
+ }
132
+ else {
133
+ args.push('--session-id', shellQuote(sessionId));
134
+ }
135
+ // Pass model if specified
136
+ if (options.model) {
137
+ args.push('--model', shellQuote(options.model));
138
+ }
139
+ return args;
140
+ }
141
+ }
142
+ //# sourceMappingURL=interactive.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interactive.js","sourceRoot":"","sources":["../../../src/providers/claude/interactive.ts"],"names":[],"mappings":"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"}