poly-weaver 0.2.5

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 (365) hide show
  1. package/README.md +388 -0
  2. package/dist/agents/implementors/adapter.d.ts +18 -0
  3. package/dist/agents/implementors/adapter.d.ts.map +1 -0
  4. package/dist/agents/implementors/adapter.js +36 -0
  5. package/dist/agents/implementors/adapter.js.map +1 -0
  6. package/dist/agents/implementors/dsl.d.ts +11 -0
  7. package/dist/agents/implementors/dsl.d.ts.map +1 -0
  8. package/dist/agents/implementors/dsl.js +9 -0
  9. package/dist/agents/implementors/dsl.js.map +1 -0
  10. package/dist/agents/implementors/handler.d.ts +10 -0
  11. package/dist/agents/implementors/handler.d.ts.map +1 -0
  12. package/dist/agents/implementors/handler.js +55 -0
  13. package/dist/agents/implementors/handler.js.map +1 -0
  14. package/dist/agents/implementors/index.d.ts +10 -0
  15. package/dist/agents/implementors/index.d.ts.map +1 -0
  16. package/dist/agents/implementors/index.js +21 -0
  17. package/dist/agents/implementors/index.js.map +1 -0
  18. package/dist/agents/implementors/prompts.d.ts +20 -0
  19. package/dist/agents/implementors/prompts.d.ts.map +1 -0
  20. package/dist/agents/implementors/prompts.js +72 -0
  21. package/dist/agents/implementors/prompts.js.map +1 -0
  22. package/dist/agents/implementors/types.d.ts +24 -0
  23. package/dist/agents/implementors/types.d.ts.map +1 -0
  24. package/dist/agents/implementors/types.js +2 -0
  25. package/dist/agents/implementors/types.js.map +1 -0
  26. package/dist/agents/index.d.ts +12 -0
  27. package/dist/agents/index.d.ts.map +1 -0
  28. package/dist/agents/index.js +25 -0
  29. package/dist/agents/index.js.map +1 -0
  30. package/dist/agents/planners/adapter.d.ts +22 -0
  31. package/dist/agents/planners/adapter.d.ts.map +1 -0
  32. package/dist/agents/planners/adapter.js +67 -0
  33. package/dist/agents/planners/adapter.js.map +1 -0
  34. package/dist/agents/planners/dsl.d.ts +13 -0
  35. package/dist/agents/planners/dsl.d.ts.map +1 -0
  36. package/dist/agents/planners/dsl.js +9 -0
  37. package/dist/agents/planners/dsl.js.map +1 -0
  38. package/dist/agents/planners/handler.d.ts +9 -0
  39. package/dist/agents/planners/handler.d.ts.map +1 -0
  40. package/dist/agents/planners/handler.js +86 -0
  41. package/dist/agents/planners/handler.js.map +1 -0
  42. package/dist/agents/planners/index.d.ts +10 -0
  43. package/dist/agents/planners/index.d.ts.map +1 -0
  44. package/dist/agents/planners/index.js +21 -0
  45. package/dist/agents/planners/index.js.map +1 -0
  46. package/dist/agents/planners/prompts.d.ts +30 -0
  47. package/dist/agents/planners/prompts.d.ts.map +1 -0
  48. package/dist/agents/planners/prompts.js +153 -0
  49. package/dist/agents/planners/prompts.js.map +1 -0
  50. package/dist/agents/planners/types.d.ts +37 -0
  51. package/dist/agents/planners/types.d.ts.map +1 -0
  52. package/dist/agents/planners/types.js +2 -0
  53. package/dist/agents/planners/types.js.map +1 -0
  54. package/dist/agents/registry.d.ts +29 -0
  55. package/dist/agents/registry.d.ts.map +1 -0
  56. package/dist/agents/registry.js +44 -0
  57. package/dist/agents/registry.js.map +1 -0
  58. package/dist/agents/reviewers/adapter.d.ts +10 -0
  59. package/dist/agents/reviewers/adapter.d.ts.map +1 -0
  60. package/dist/agents/reviewers/adapter.js +35 -0
  61. package/dist/agents/reviewers/adapter.js.map +1 -0
  62. package/dist/agents/reviewers/dsl.d.ts +12 -0
  63. package/dist/agents/reviewers/dsl.d.ts.map +1 -0
  64. package/dist/agents/reviewers/dsl.js +9 -0
  65. package/dist/agents/reviewers/dsl.js.map +1 -0
  66. package/dist/agents/reviewers/handler.d.ts +8 -0
  67. package/dist/agents/reviewers/handler.d.ts.map +1 -0
  68. package/dist/agents/reviewers/handler.js +48 -0
  69. package/dist/agents/reviewers/handler.js.map +1 -0
  70. package/dist/agents/reviewers/index.d.ts +10 -0
  71. package/dist/agents/reviewers/index.d.ts.map +1 -0
  72. package/dist/agents/reviewers/index.js +33 -0
  73. package/dist/agents/reviewers/index.js.map +1 -0
  74. package/dist/agents/reviewers/prompts.d.ts +25 -0
  75. package/dist/agents/reviewers/prompts.d.ts.map +1 -0
  76. package/dist/agents/reviewers/prompts.js +143 -0
  77. package/dist/agents/reviewers/prompts.js.map +1 -0
  78. package/dist/agents/reviewers/types.d.ts +35 -0
  79. package/dist/agents/reviewers/types.d.ts.map +1 -0
  80. package/dist/agents/reviewers/types.js +10 -0
  81. package/dist/agents/reviewers/types.js.map +1 -0
  82. package/dist/agents/runner.d.ts +62 -0
  83. package/dist/agents/runner.d.ts.map +1 -0
  84. package/dist/agents/runner.js +136 -0
  85. package/dist/agents/runner.js.map +1 -0
  86. package/dist/agents/simplifiers/adapter.d.ts +12 -0
  87. package/dist/agents/simplifiers/adapter.d.ts.map +1 -0
  88. package/dist/agents/simplifiers/adapter.js +27 -0
  89. package/dist/agents/simplifiers/adapter.js.map +1 -0
  90. package/dist/agents/simplifiers/dsl.d.ts +11 -0
  91. package/dist/agents/simplifiers/dsl.d.ts.map +1 -0
  92. package/dist/agents/simplifiers/dsl.js +9 -0
  93. package/dist/agents/simplifiers/dsl.js.map +1 -0
  94. package/dist/agents/simplifiers/handler.d.ts +9 -0
  95. package/dist/agents/simplifiers/handler.d.ts.map +1 -0
  96. package/dist/agents/simplifiers/handler.js +39 -0
  97. package/dist/agents/simplifiers/handler.js.map +1 -0
  98. package/dist/agents/simplifiers/index.d.ts +10 -0
  99. package/dist/agents/simplifiers/index.d.ts.map +1 -0
  100. package/dist/agents/simplifiers/index.js +20 -0
  101. package/dist/agents/simplifiers/index.js.map +1 -0
  102. package/dist/agents/simplifiers/prompts.d.ts +11 -0
  103. package/dist/agents/simplifiers/prompts.d.ts.map +1 -0
  104. package/dist/agents/simplifiers/prompts.js +24 -0
  105. package/dist/agents/simplifiers/prompts.js.map +1 -0
  106. package/dist/agents/simplifiers/types.d.ts +15 -0
  107. package/dist/agents/simplifiers/types.d.ts.map +1 -0
  108. package/dist/agents/simplifiers/types.js +2 -0
  109. package/dist/agents/simplifiers/types.js.map +1 -0
  110. package/dist/agents/whip-hint.d.ts +23 -0
  111. package/dist/agents/whip-hint.d.ts.map +1 -0
  112. package/dist/agents/whip-hint.js +41 -0
  113. package/dist/agents/whip-hint.js.map +1 -0
  114. package/dist/ansi.d.ts +39 -0
  115. package/dist/ansi.d.ts.map +1 -0
  116. package/dist/ansi.js +158 -0
  117. package/dist/ansi.js.map +1 -0
  118. package/dist/cli.d.ts +3 -0
  119. package/dist/cli.d.ts.map +1 -0
  120. package/dist/cli.js +309 -0
  121. package/dist/cli.js.map +1 -0
  122. package/dist/config.d.ts +41 -0
  123. package/dist/config.d.ts.map +1 -0
  124. package/dist/config.js +55 -0
  125. package/dist/config.js.map +1 -0
  126. package/dist/dsl.d.ts +25 -0
  127. package/dist/dsl.d.ts.map +1 -0
  128. package/dist/dsl.js +16 -0
  129. package/dist/dsl.js.map +1 -0
  130. package/dist/flow/artifacts.d.ts +13 -0
  131. package/dist/flow/artifacts.d.ts.map +1 -0
  132. package/dist/flow/artifacts.js +27 -0
  133. package/dist/flow/artifacts.js.map +1 -0
  134. package/dist/flow/built-in/default.d.ts +15 -0
  135. package/dist/flow/built-in/default.d.ts.map +1 -0
  136. package/dist/flow/built-in/default.js +123 -0
  137. package/dist/flow/built-in/default.js.map +1 -0
  138. package/dist/flow/built-in/default.ts +152 -0
  139. package/dist/flow/built-in/why-so-serious.d.ts +15 -0
  140. package/dist/flow/built-in/why-so-serious.d.ts.map +1 -0
  141. package/dist/flow/built-in/why-so-serious.js +147 -0
  142. package/dist/flow/built-in/why-so-serious.js.map +1 -0
  143. package/dist/flow/custom/AUTHORING.md +558 -0
  144. package/dist/flow/custom/index.d.ts +3 -0
  145. package/dist/flow/custom/index.d.ts.map +1 -0
  146. package/dist/flow/custom/index.js +2 -0
  147. package/dist/flow/custom/index.js.map +1 -0
  148. package/dist/flow/custom/load.d.ts +19 -0
  149. package/dist/flow/custom/load.d.ts.map +1 -0
  150. package/dist/flow/custom/load.js +117 -0
  151. package/dist/flow/custom/load.js.map +1 -0
  152. package/dist/flow/diagram.d.ts +37 -0
  153. package/dist/flow/diagram.d.ts.map +1 -0
  154. package/dist/flow/diagram.js +596 -0
  155. package/dist/flow/diagram.js.map +1 -0
  156. package/dist/flow/dsl.d.ts +65 -0
  157. package/dist/flow/dsl.d.ts.map +1 -0
  158. package/dist/flow/dsl.js +210 -0
  159. package/dist/flow/dsl.js.map +1 -0
  160. package/dist/flow/executor.d.ts +22 -0
  161. package/dist/flow/executor.d.ts.map +1 -0
  162. package/dist/flow/executor.js +185 -0
  163. package/dist/flow/executor.js.map +1 -0
  164. package/dist/flow/index.d.ts +16 -0
  165. package/dist/flow/index.d.ts.map +1 -0
  166. package/dist/flow/index.js +12 -0
  167. package/dist/flow/index.js.map +1 -0
  168. package/dist/flow/inspect.d.ts +21 -0
  169. package/dist/flow/inspect.d.ts.map +1 -0
  170. package/dist/flow/inspect.js +54 -0
  171. package/dist/flow/inspect.js.map +1 -0
  172. package/dist/flow/neighbors.d.ts +10 -0
  173. package/dist/flow/neighbors.d.ts.map +1 -0
  174. package/dist/flow/neighbors.js +48 -0
  175. package/dist/flow/neighbors.js.map +1 -0
  176. package/dist/flow/params.d.ts +21 -0
  177. package/dist/flow/params.d.ts.map +1 -0
  178. package/dist/flow/params.js +44 -0
  179. package/dist/flow/params.js.map +1 -0
  180. package/dist/flow/types.d.ts +159 -0
  181. package/dist/flow/types.d.ts.map +1 -0
  182. package/dist/flow/types.js +33 -0
  183. package/dist/flow/types.js.map +1 -0
  184. package/dist/flow-editor/index.d.ts +9 -0
  185. package/dist/flow-editor/index.d.ts.map +1 -0
  186. package/dist/flow-editor/index.js +6 -0
  187. package/dist/flow-editor/index.js.map +1 -0
  188. package/dist/flow-editor/llm.d.ts +33 -0
  189. package/dist/flow-editor/llm.d.ts.map +1 -0
  190. package/dist/flow-editor/llm.js +137 -0
  191. package/dist/flow-editor/llm.js.map +1 -0
  192. package/dist/flow-editor/names.d.ts +5 -0
  193. package/dist/flow-editor/names.d.ts.map +1 -0
  194. package/dist/flow-editor/names.js +21 -0
  195. package/dist/flow-editor/names.js.map +1 -0
  196. package/dist/flow-editor/save.d.ts +59 -0
  197. package/dist/flow-editor/save.d.ts.map +1 -0
  198. package/dist/flow-editor/save.js +143 -0
  199. package/dist/flow-editor/save.js.map +1 -0
  200. package/dist/flow-editor/tui.d.ts +56 -0
  201. package/dist/flow-editor/tui.d.ts.map +1 -0
  202. package/dist/flow-editor/tui.js +628 -0
  203. package/dist/flow-editor/tui.js.map +1 -0
  204. package/dist/flow-editor/validate.d.ts +39 -0
  205. package/dist/flow-editor/validate.d.ts.map +1 -0
  206. package/dist/flow-editor/validate.js +192 -0
  207. package/dist/flow-editor/validate.js.map +1 -0
  208. package/dist/git-info.d.ts +6 -0
  209. package/dist/git-info.d.ts.map +1 -0
  210. package/dist/git-info.js +26 -0
  211. package/dist/git-info.js.map +1 -0
  212. package/dist/orchestrator.d.ts +55 -0
  213. package/dist/orchestrator.d.ts.map +1 -0
  214. package/dist/orchestrator.js +240 -0
  215. package/dist/orchestrator.js.map +1 -0
  216. package/dist/preflight.d.ts +30 -0
  217. package/dist/preflight.d.ts.map +1 -0
  218. package/dist/preflight.js +107 -0
  219. package/dist/preflight.js.map +1 -0
  220. package/dist/preview-panel.d.ts +87 -0
  221. package/dist/preview-panel.d.ts.map +1 -0
  222. package/dist/preview-panel.js +418 -0
  223. package/dist/preview-panel.js.map +1 -0
  224. package/dist/prompts.d.ts +34 -0
  225. package/dist/prompts.d.ts.map +1 -0
  226. package/dist/prompts.js +67 -0
  227. package/dist/prompts.js.map +1 -0
  228. package/dist/providers/base-completion.d.ts +56 -0
  229. package/dist/providers/base-completion.d.ts.map +1 -0
  230. package/dist/providers/base-completion.js +111 -0
  231. package/dist/providers/base-completion.js.map +1 -0
  232. package/dist/providers/claude/completion.d.ts +28 -0
  233. package/dist/providers/claude/completion.d.ts.map +1 -0
  234. package/dist/providers/claude/completion.js +103 -0
  235. package/dist/providers/claude/completion.js.map +1 -0
  236. package/dist/providers/claude/index.d.ts +2 -0
  237. package/dist/providers/claude/index.d.ts.map +1 -0
  238. package/dist/providers/claude/index.js +2 -0
  239. package/dist/providers/claude/index.js.map +1 -0
  240. package/dist/providers/claude/session.d.ts +55 -0
  241. package/dist/providers/claude/session.d.ts.map +1 -0
  242. package/dist/providers/claude/session.js +172 -0
  243. package/dist/providers/claude/session.js.map +1 -0
  244. package/dist/providers/claude/strategy.d.ts +14 -0
  245. package/dist/providers/claude/strategy.d.ts.map +1 -0
  246. package/dist/providers/claude/strategy.js +38 -0
  247. package/dist/providers/claude/strategy.js.map +1 -0
  248. package/dist/providers/codex/completion.d.ts +21 -0
  249. package/dist/providers/codex/completion.d.ts.map +1 -0
  250. package/dist/providers/codex/completion.js +63 -0
  251. package/dist/providers/codex/completion.js.map +1 -0
  252. package/dist/providers/codex/index.d.ts +2 -0
  253. package/dist/providers/codex/index.d.ts.map +1 -0
  254. package/dist/providers/codex/index.js +2 -0
  255. package/dist/providers/codex/index.js.map +1 -0
  256. package/dist/providers/codex/session.d.ts +46 -0
  257. package/dist/providers/codex/session.d.ts.map +1 -0
  258. package/dist/providers/codex/session.js +151 -0
  259. package/dist/providers/codex/session.js.map +1 -0
  260. package/dist/providers/codex/strategy.d.ts +14 -0
  261. package/dist/providers/codex/strategy.d.ts.map +1 -0
  262. package/dist/providers/codex/strategy.js +41 -0
  263. package/dist/providers/codex/strategy.js.map +1 -0
  264. package/dist/providers/copilot/completion.d.ts +22 -0
  265. package/dist/providers/copilot/completion.d.ts.map +1 -0
  266. package/dist/providers/copilot/completion.js +65 -0
  267. package/dist/providers/copilot/completion.js.map +1 -0
  268. package/dist/providers/copilot/index.d.ts +2 -0
  269. package/dist/providers/copilot/index.d.ts.map +1 -0
  270. package/dist/providers/copilot/index.js +2 -0
  271. package/dist/providers/copilot/index.js.map +1 -0
  272. package/dist/providers/copilot/session.d.ts +39 -0
  273. package/dist/providers/copilot/session.d.ts.map +1 -0
  274. package/dist/providers/copilot/session.js +185 -0
  275. package/dist/providers/copilot/session.js.map +1 -0
  276. package/dist/providers/copilot/strategy.d.ts +14 -0
  277. package/dist/providers/copilot/strategy.d.ts.map +1 -0
  278. package/dist/providers/copilot/strategy.js +48 -0
  279. package/dist/providers/copilot/strategy.js.map +1 -0
  280. package/dist/providers/index.d.ts +8 -0
  281. package/dist/providers/index.d.ts.map +1 -0
  282. package/dist/providers/index.js +6 -0
  283. package/dist/providers/index.js.map +1 -0
  284. package/dist/providers/invoke.d.ts +14 -0
  285. package/dist/providers/invoke.d.ts.map +1 -0
  286. package/dist/providers/invoke.js +55 -0
  287. package/dist/providers/invoke.js.map +1 -0
  288. package/dist/providers/path-utils.d.ts +7 -0
  289. package/dist/providers/path-utils.d.ts.map +1 -0
  290. package/dist/providers/path-utils.js +9 -0
  291. package/dist/providers/path-utils.js.map +1 -0
  292. package/dist/providers/prompt-file.d.ts +8 -0
  293. package/dist/providers/prompt-file.d.ts.map +1 -0
  294. package/dist/providers/prompt-file.js +17 -0
  295. package/dist/providers/prompt-file.js.map +1 -0
  296. package/dist/providers/registry.d.ts +17 -0
  297. package/dist/providers/registry.d.ts.map +1 -0
  298. package/dist/providers/registry.js +49 -0
  299. package/dist/providers/registry.js.map +1 -0
  300. package/dist/providers/types.d.ts +145 -0
  301. package/dist/providers/types.d.ts.map +1 -0
  302. package/dist/providers/types.js +5 -0
  303. package/dist/providers/types.js.map +1 -0
  304. package/dist/providers/version.d.ts +11 -0
  305. package/dist/providers/version.d.ts.map +1 -0
  306. package/dist/providers/version.js +31 -0
  307. package/dist/providers/version.js.map +1 -0
  308. package/dist/pty/exit.d.ts +12 -0
  309. package/dist/pty/exit.d.ts.map +1 -0
  310. package/dist/pty/exit.js +43 -0
  311. package/dist/pty/exit.js.map +1 -0
  312. package/dist/pty/spawn.d.ts +20 -0
  313. package/dist/pty/spawn.d.ts.map +1 -0
  314. package/dist/pty/spawn.js +163 -0
  315. package/dist/pty/spawn.js.map +1 -0
  316. package/dist/pty/types.d.ts +44 -0
  317. package/dist/pty/types.d.ts.map +1 -0
  318. package/dist/pty/types.js +2 -0
  319. package/dist/pty/types.js.map +1 -0
  320. package/dist/session/dir.d.ts +19 -0
  321. package/dist/session/dir.d.ts.map +1 -0
  322. package/dist/session/dir.js +31 -0
  323. package/dist/session/dir.js.map +1 -0
  324. package/dist/session/locator.d.ts +28 -0
  325. package/dist/session/locator.d.ts.map +1 -0
  326. package/dist/session/locator.js +88 -0
  327. package/dist/session/locator.js.map +1 -0
  328. package/dist/session/reader.d.ts +12 -0
  329. package/dist/session/reader.d.ts.map +1 -0
  330. package/dist/session/reader.js +94 -0
  331. package/dist/session/reader.js.map +1 -0
  332. package/dist/startup-tui.d.ts +75 -0
  333. package/dist/startup-tui.d.ts.map +1 -0
  334. package/dist/startup-tui.js +504 -0
  335. package/dist/startup-tui.js.map +1 -0
  336. package/dist/status-bar.d.ts +29 -0
  337. package/dist/status-bar.d.ts.map +1 -0
  338. package/dist/status-bar.js +135 -0
  339. package/dist/status-bar.js.map +1 -0
  340. package/dist/terminal-input.d.ts +51 -0
  341. package/dist/terminal-input.d.ts.map +1 -0
  342. package/dist/terminal-input.js +212 -0
  343. package/dist/terminal-input.js.map +1 -0
  344. package/dist/user/dsl.d.ts +13 -0
  345. package/dist/user/dsl.d.ts.map +1 -0
  346. package/dist/user/dsl.js +19 -0
  347. package/dist/user/dsl.js.map +1 -0
  348. package/dist/user/handler.d.ts +16 -0
  349. package/dist/user/handler.d.ts.map +1 -0
  350. package/dist/user/handler.js +49 -0
  351. package/dist/user/handler.js.map +1 -0
  352. package/dist/user/index.d.ts +5 -0
  353. package/dist/user/index.d.ts.map +1 -0
  354. package/dist/user/index.js +4 -0
  355. package/dist/user/index.js.map +1 -0
  356. package/dist/user/prompt.d.ts +86 -0
  357. package/dist/user/prompt.d.ts.map +1 -0
  358. package/dist/user/prompt.js +320 -0
  359. package/dist/user/prompt.js.map +1 -0
  360. package/dist/version.d.ts +2 -0
  361. package/dist/version.d.ts.map +1 -0
  362. package/dist/version.js +4 -0
  363. package/dist/version.js.map +1 -0
  364. package/package.json +50 -0
  365. package/schemas/review-verdict.json +41 -0
@@ -0,0 +1,22 @@
1
+ import type { SessionLine } from "../../session/reader.js";
2
+ import { AbstractCompletionDetector } from "../base-completion.js";
3
+ /**
4
+ * Copilot completion detection.
5
+ *
6
+ * Primary signal: latest assistant turn has ended (`turn_end` occurs after
7
+ * the latest `turn_start`) in the JSONL session file.
8
+ * Secondary signal: quiet debounce (no new data for `quietMs`).
9
+ */
10
+ export declare class CopilotCompletionDetector extends AbstractCompletionDetector {
11
+ private readonly exitToolName?;
12
+ private latestTurnComplete;
13
+ private exitToolCalled;
14
+ constructor(pollMs?: number, quietMs?: number, exitToolName?: string | undefined);
15
+ protected analyzeLines(lines: SessionLine[]): void;
16
+ protected isPrimarySignalFired(): boolean;
17
+ protected extractResponse(lines: SessionLine[]): string;
18
+ protected shouldShortCircuit(_lines: SessionLine[]): boolean;
19
+ protected shouldSuppressPtyTimerReset(): boolean;
20
+ private isLatestTurnComplete;
21
+ }
22
+ //# sourceMappingURL=completion.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"completion.d.ts","sourceRoot":"","sources":["../../../src/providers/copilot/completion.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAE3D,OAAO,EAAE,0BAA0B,EAAE,MAAM,uBAAuB,CAAC;AAEnE;;;;;;GAMG;AACH,qBAAa,yBAA0B,SAAQ,0BAA0B;IAOrE,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC;IANhC,OAAO,CAAC,kBAAkB,CAAS;IACnC,OAAO,CAAC,cAAc,CAAS;gBAG7B,MAAM,SAAM,EACZ,OAAO,SAAM,EACI,YAAY,CAAC,EAAE,MAAM,YAAA;IAKxC,SAAS,CAAC,YAAY,CAAC,KAAK,EAAE,WAAW,EAAE,GAAG,IAAI;IAwBlD,SAAS,CAAC,oBAAoB,IAAI,OAAO;IAIzC,SAAS,CAAC,eAAe,CAAC,KAAK,EAAE,WAAW,EAAE,GAAG,MAAM;cAIpC,kBAAkB,CAAC,MAAM,EAAE,WAAW,EAAE,GAAG,OAAO;cAIlD,2BAA2B,IAAI,OAAO;IAIzD,OAAO,CAAC,oBAAoB;CAe7B"}
@@ -0,0 +1,65 @@
1
+ import { extractCopilotResponse } from "./session.js";
2
+ import { AbstractCompletionDetector } from "../base-completion.js";
3
+ /**
4
+ * Copilot completion detection.
5
+ *
6
+ * Primary signal: latest assistant turn has ended (`turn_end` occurs after
7
+ * the latest `turn_start`) in the JSONL session file.
8
+ * Secondary signal: quiet debounce (no new data for `quietMs`).
9
+ */
10
+ export class CopilotCompletionDetector extends AbstractCompletionDetector {
11
+ exitToolName;
12
+ latestTurnComplete = false;
13
+ exitToolCalled = false;
14
+ constructor(pollMs = 500, quietMs = 500, exitToolName) {
15
+ super(pollMs, quietMs);
16
+ this.exitToolName = exitToolName;
17
+ }
18
+ analyzeLines(lines) {
19
+ this.latestTurnComplete = this.isLatestTurnComplete(lines);
20
+ this.exitToolCalled = false;
21
+ if (this.exitToolName) {
22
+ for (const line of lines) {
23
+ if (line.type === "assistant.message") {
24
+ const data = line.data;
25
+ // Check toolRequests array for the exit tool name
26
+ const toolRequests = data?.toolRequests;
27
+ if (toolRequests) {
28
+ for (const request of toolRequests) {
29
+ if (request.name === this.exitToolName) {
30
+ this.exitToolCalled = true;
31
+ }
32
+ }
33
+ }
34
+ }
35
+ }
36
+ }
37
+ }
38
+ isPrimarySignalFired() {
39
+ return this.latestTurnComplete || this.exitToolCalled;
40
+ }
41
+ extractResponse(lines) {
42
+ return extractCopilotResponse(lines);
43
+ }
44
+ shouldShortCircuit(_lines) {
45
+ return this.exitToolCalled;
46
+ }
47
+ shouldSuppressPtyTimerReset() {
48
+ return this.latestTurnComplete || this.exitToolCalled;
49
+ }
50
+ isLatestTurnComplete(lines) {
51
+ let lastTurnStart = -1;
52
+ let lastTurnEnd = -1;
53
+ for (let i = 0; i < lines.length; i++) {
54
+ const line = lines[i];
55
+ if (line.type === "assistant.turn_start") {
56
+ lastTurnStart = i;
57
+ }
58
+ else if (line.type === "assistant.turn_end") {
59
+ lastTurnEnd = i;
60
+ }
61
+ }
62
+ return lastTurnStart !== -1 && lastTurnEnd > lastTurnStart;
63
+ }
64
+ }
65
+ //# sourceMappingURL=completion.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"completion.js","sourceRoot":"","sources":["../../../src/providers/copilot/completion.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AACtD,OAAO,EAAE,0BAA0B,EAAE,MAAM,uBAAuB,CAAC;AAEnE;;;;;;GAMG;AACH,MAAM,OAAO,yBAA0B,SAAQ,0BAA0B;IAOpD;IANX,kBAAkB,GAAG,KAAK,CAAC;IAC3B,cAAc,GAAG,KAAK,CAAC;IAE/B,YACE,MAAM,GAAG,GAAG,EACZ,OAAO,GAAG,GAAG,EACI,YAAqB;QAEtC,KAAK,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAFN,iBAAY,GAAZ,YAAY,CAAS;IAGxC,CAAC;IAES,YAAY,CAAC,KAAoB;QACzC,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC;QAC3D,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;QAE5B,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACtB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACzB,IAAI,IAAI,CAAC,IAAI,KAAK,mBAAmB,EAAE,CAAC;oBACtC,MAAM,IAAI,GAAG,IAAI,CAAC,IAA2C,CAAC;oBAC9D,kDAAkD;oBAClD,MAAM,YAAY,GAAG,IAAI,EAAE,YAEd,CAAC;oBACd,IAAI,YAAY,EAAE,CAAC;wBACjB,KAAK,MAAM,OAAO,IAAI,YAAY,EAAE,CAAC;4BACnC,IAAI,OAAO,CAAC,IAAI,KAAK,IAAI,CAAC,YAAY,EAAE,CAAC;gCACvC,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;4BAC7B,CAAC;wBACH,CAAC;oBACH,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAES,oBAAoB;QAC5B,OAAO,IAAI,CAAC,kBAAkB,IAAI,IAAI,CAAC,cAAc,CAAC;IACxD,CAAC;IAES,eAAe,CAAC,KAAoB;QAC5C,OAAO,sBAAsB,CAAC,KAAK,CAAC,CAAC;IACvC,CAAC;IAEkB,kBAAkB,CAAC,MAAqB;QACzD,OAAO,IAAI,CAAC,cAAc,CAAC;IAC7B,CAAC;IAEkB,2BAA2B;QAC5C,OAAO,IAAI,CAAC,kBAAkB,IAAI,IAAI,CAAC,cAAc,CAAC;IACxD,CAAC;IAEO,oBAAoB,CAAC,KAAoB;QAC/C,IAAI,aAAa,GAAG,CAAC,CAAC,CAAC;QACvB,IAAI,WAAW,GAAG,CAAC,CAAC,CAAC;QAErB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACtC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YACtB,IAAI,IAAI,CAAC,IAAI,KAAK,sBAAsB,EAAE,CAAC;gBACzC,aAAa,GAAG,CAAC,CAAC;YACpB,CAAC;iBAAM,IAAI,IAAI,CAAC,IAAI,KAAK,oBAAoB,EAAE,CAAC;gBAC9C,WAAW,GAAG,CAAC,CAAC;YAClB,CAAC;QACH,CAAC;QAED,OAAO,aAAa,KAAK,CAAC,CAAC,IAAI,WAAW,GAAG,aAAa,CAAC;IAC7D,CAAC;CACF"}
@@ -0,0 +1,2 @@
1
+ export { CopilotStrategy } from "./strategy.js";
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/providers/copilot/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { CopilotStrategy } from "./strategy.js";
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/providers/copilot/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC"}
@@ -0,0 +1,39 @@
1
+ import type { SessionHandler, SessionSnapshot } from "../types.js";
2
+ import { type SessionLine } from "../../session/reader.js";
3
+ /**
4
+ * Get the Copilot session-state directory.
5
+ * Copilot stores sessions at: ~/.copilot/session-state/
6
+ */
7
+ export declare function getCopilotSessionDir(): string;
8
+ /**
9
+ * Verify a Copilot session belongs to the expected working directory.
10
+ * Reads the `session.start` event and checks `data.context.cwd`.
11
+ *
12
+ * Returns:
13
+ * - `true` — CWD matches
14
+ * - `false` — `session.start` found with a different CWD (definitive mismatch)
15
+ * - `null` — inconclusive (file missing, empty, or no `session.start` event yet)
16
+ */
17
+ export declare function verifyCopilotSessionCwd(eventsFile: string, expectedCwd: string): Promise<boolean | null>;
18
+ /**
19
+ * Extract the last response text from Copilot session events.
20
+ *
21
+ * Finds the last completed turn (bounded by `assistant.turn_start` and
22
+ * `assistant.turn_end`) and collects `data.content` from all
23
+ * `assistant.message` events within that turn.
24
+ */
25
+ export declare function extractCopilotResponse(lines: SessionLine[]): string;
26
+ /**
27
+ * Copilot session handler.
28
+ *
29
+ * Handles session file discovery in Copilot's UUID-based directory structure
30
+ * with CWD verification. Does not support clarification extraction.
31
+ */
32
+ export declare class CopilotSessionHandler implements SessionHandler {
33
+ predictSessionFile(_workdir: string, sessionId: string): string;
34
+ snapshot(_workdir: string): Promise<SessionSnapshot>;
35
+ findSessionFile(snapshot: SessionSnapshot, workdir: string): Promise<string>;
36
+ extractSessionId(sessionFilePath: string): Promise<string>;
37
+ extractPlanFilePath(sessionFilePath: string, _lineOffset: number): Promise<string | undefined>;
38
+ }
39
+ //# sourceMappingURL=session.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../../src/providers/copilot/session.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACnE,OAAO,EAAmB,KAAK,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAG5E;;;GAGG;AACH,wBAAgB,oBAAoB,IAAI,MAAM,CAE7C;AAoBD;;;;;;;;GAQG;AACH,wBAAsB,uBAAuB,CAC3C,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAuBzB;AAED;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,WAAW,EAAE,GAAG,MAAM,CAuCnE;AAED;;;;;GAKG;AACH,qBAAa,qBAAsB,YAAW,cAAc;IAC1D,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM;IAKzD,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC;IAQpD,eAAe,CACnB,QAAQ,EAAE,eAAe,EACzB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,MAAM,CAAC;IA6CZ,gBAAgB,CAAC,eAAe,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAK1D,mBAAmB,CACvB,eAAe,EAAE,MAAM,EACvB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;CAmB/B"}
@@ -0,0 +1,185 @@
1
+ import { join, dirname, basename } from "node:path";
2
+ import { homedir } from "node:os";
3
+ import { access, readdir } from "node:fs/promises";
4
+ import { readSessionFile } from "../../session/reader.js";
5
+ import { normalizePath } from "../path-utils.js";
6
+ /**
7
+ * Get the Copilot session-state directory.
8
+ * Copilot stores sessions at: ~/.copilot/session-state/
9
+ */
10
+ export function getCopilotSessionDir() {
11
+ return join(homedir(), ".copilot", "session-state");
12
+ }
13
+ /**
14
+ * Snapshot existing session UUID directories in ~/.copilot/session-state/.
15
+ */
16
+ async function snapshotSessionDirs(dir) {
17
+ const dirs = new Set();
18
+ try {
19
+ const entries = await readdir(dir, { withFileTypes: true });
20
+ for (const entry of entries) {
21
+ if (entry.isDirectory()) {
22
+ dirs.add(entry.name);
23
+ }
24
+ }
25
+ }
26
+ catch {
27
+ // Directory might not exist yet
28
+ }
29
+ return dirs;
30
+ }
31
+ /**
32
+ * Verify a Copilot session belongs to the expected working directory.
33
+ * Reads the `session.start` event and checks `data.context.cwd`.
34
+ *
35
+ * Returns:
36
+ * - `true` — CWD matches
37
+ * - `false` — `session.start` found with a different CWD (definitive mismatch)
38
+ * - `null` — inconclusive (file missing, empty, or no `session.start` event yet)
39
+ */
40
+ export async function verifyCopilotSessionCwd(eventsFile, expectedCwd) {
41
+ try {
42
+ const lines = await readSessionFile(eventsFile);
43
+ if (lines.length === 0)
44
+ return null;
45
+ for (const line of lines) {
46
+ if (line.type === "session.start") {
47
+ const data = line.data;
48
+ const cwd = data?.context?.cwd;
49
+ if (!cwd)
50
+ return false;
51
+ return normalizePath(cwd) === normalizePath(expectedCwd);
52
+ }
53
+ }
54
+ // File has content but no session.start yet — inconclusive
55
+ return null;
56
+ }
57
+ catch {
58
+ // File doesn't exist or can't be read yet — inconclusive
59
+ return null;
60
+ }
61
+ }
62
+ /**
63
+ * Extract the last response text from Copilot session events.
64
+ *
65
+ * Finds the last completed turn (bounded by `assistant.turn_start` and
66
+ * `assistant.turn_end`) and collects `data.content` from all
67
+ * `assistant.message` events within that turn.
68
+ */
69
+ export function extractCopilotResponse(lines) {
70
+ // Find the last turn_end, then the matching turn_start before it
71
+ let lastTurnEnd = -1;
72
+ let lastTurnStart = -1;
73
+ for (let i = lines.length - 1; i >= 0; i--) {
74
+ if (lines[i].type === "assistant.turn_end" && lastTurnEnd === -1) {
75
+ lastTurnEnd = i;
76
+ }
77
+ else if (lines[i].type === "assistant.turn_start" && lastTurnEnd !== -1) {
78
+ lastTurnStart = i;
79
+ break;
80
+ }
81
+ }
82
+ // When turn_end is missing (e.g., exit tool short-circuit), fall back to
83
+ // collecting all messages after the last turn_start.
84
+ if (lastTurnStart === -1 && lastTurnEnd === -1) {
85
+ // No turn markers at all — find the last turn_start forward
86
+ for (let i = 0; i < lines.length; i++) {
87
+ if (lines[i].type === "assistant.turn_start")
88
+ lastTurnStart = i;
89
+ }
90
+ }
91
+ if (lastTurnStart === -1)
92
+ return "";
93
+ const endIdx = lastTurnEnd !== -1 ? lastTurnEnd : lines.length;
94
+ // Collect assistant.message content strictly within the turn boundaries
95
+ const parts = [];
96
+ for (let i = lastTurnStart + 1; i < endIdx; i++) {
97
+ const line = lines[i];
98
+ if (line.type === "assistant.message") {
99
+ const data = line.data;
100
+ if (data?.content) {
101
+ parts.push(data.content);
102
+ }
103
+ }
104
+ }
105
+ return parts.join("\n");
106
+ }
107
+ /**
108
+ * Copilot session handler.
109
+ *
110
+ * Handles session file discovery in Copilot's UUID-based directory structure
111
+ * with CWD verification. Does not support clarification extraction.
112
+ */
113
+ export class CopilotSessionHandler {
114
+ predictSessionFile(_workdir, sessionId) {
115
+ const dir = getCopilotSessionDir();
116
+ return join(dir, sessionId, "events.jsonl");
117
+ }
118
+ async snapshot(_workdir) {
119
+ const dir = getCopilotSessionDir();
120
+ const dirs = await snapshotSessionDirs(dir);
121
+ // Store directory names as the "files" set — the snapshot type uses
122
+ // Set<string> generically, and we repurpose it for directory names.
123
+ return { skipped: false, dir, files: dirs };
124
+ }
125
+ async findSessionFile(snapshot, workdir) {
126
+ if (snapshot.skipped) {
127
+ throw new Error("Cannot find session file: snapshot was skipped");
128
+ }
129
+ const { dir, files: knownDirs } = snapshot;
130
+ const deadline = Date.now() + 60_000;
131
+ const pollMs = 500;
132
+ while (Date.now() < deadline) {
133
+ let entries;
134
+ try {
135
+ const dirEntries = await readdir(dir, { withFileTypes: true });
136
+ entries = dirEntries
137
+ .filter((e) => e.isDirectory())
138
+ .map((e) => e.name);
139
+ }
140
+ catch {
141
+ entries = [];
142
+ }
143
+ for (const name of entries) {
144
+ if (knownDirs.has(name))
145
+ continue;
146
+ const eventsFile = join(dir, name, "events.jsonl");
147
+ const result = await verifyCopilotSessionCwd(eventsFile, workdir);
148
+ if (result === true) {
149
+ return eventsFile;
150
+ }
151
+ if (result === false) {
152
+ // Definitive CWD mismatch — belongs to a different concurrent
153
+ // Copilot process. Skip permanently.
154
+ knownDirs.add(name);
155
+ }
156
+ // result === null → inconclusive (file missing/empty/no session.start
157
+ // yet). Don't add to knownDirs — retry on next poll.
158
+ }
159
+ await new Promise((r) => setTimeout(r, pollMs));
160
+ }
161
+ throw new Error(`Timed out waiting for new Copilot session directory in ${dir}`);
162
+ }
163
+ async extractSessionId(sessionFilePath) {
164
+ // Session ID is the UUID directory name (parent of events.jsonl)
165
+ return basename(dirname(sessionFilePath));
166
+ }
167
+ async extractPlanFilePath(sessionFilePath, _lineOffset) {
168
+ const planPath = join(dirname(sessionFilePath), "plan.md");
169
+ // Bounded retry: completion detector fires on exit_plan_mode, but plan.md
170
+ // may not be flushed to disk yet. Poll up to 5s at 250ms intervals.
171
+ const deadline = Date.now() + 5_000;
172
+ const pollMs = 250;
173
+ while (Date.now() < deadline) {
174
+ try {
175
+ await access(planPath);
176
+ return planPath;
177
+ }
178
+ catch {
179
+ await new Promise((r) => setTimeout(r, pollMs));
180
+ }
181
+ }
182
+ return undefined;
183
+ }
184
+ }
185
+ //# sourceMappingURL=session.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session.js","sourceRoot":"","sources":["../../../src/providers/copilot/session.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import type { PlanModeConfig, ProviderStrategy, SessionHandler, BuildArgsOpts } from "../types.js";
2
+ import { CopilotCompletionDetector } from "./completion.js";
3
+ export declare class CopilotStrategy implements ProviderStrategy {
4
+ readonly name = "copilot";
5
+ readonly displayName = "GitHub Copilot CLI";
6
+ readonly command = "copilot";
7
+ readonly exitSignal = "\u0003";
8
+ readonly session: SessionHandler;
9
+ version: string | undefined;
10
+ readonly planMode: PlanModeConfig;
11
+ buildArgs(prompt: string, opts: BuildArgsOpts): Promise<string[]>;
12
+ createDetector(): CopilotCompletionDetector;
13
+ }
14
+ //# sourceMappingURL=strategy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"strategy.d.ts","sourceRoot":"","sources":["../../../src/providers/copilot/strategy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,gBAAgB,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAGnG,OAAO,EAAE,yBAAyB,EAAE,MAAM,iBAAiB,CAAC;AAG5D,qBAAa,eAAgB,YAAW,gBAAgB;IACtD,QAAQ,CAAC,IAAI,aAAa;IAC1B,QAAQ,CAAC,WAAW,wBAAwB;IAC5C,QAAQ,CAAC,OAAO,aAAa;IAC7B,QAAQ,CAAC,UAAU,YAAU;IAC7B,QAAQ,CAAC,OAAO,EAAE,cAAc,CAA+B;IAC/D,OAAO,EAAE,MAAM,GAAG,SAAS,CAAa;IACxC,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAI/B;IAEI,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IA6BvE,cAAc,IAAI,yBAAyB;CAG5C"}
@@ -0,0 +1,48 @@
1
+ import { flagIf } from "../types.js";
2
+ import { writePromptFile } from "../prompt-file.js";
3
+ import { CopilotCompletionDetector } from "./completion.js";
4
+ import { CopilotSessionHandler } from "./session.js";
5
+ export class CopilotStrategy {
6
+ name = "copilot";
7
+ displayName = "GitHub Copilot CLI";
8
+ command = "copilot";
9
+ exitSignal = "\x03";
10
+ session = new CopilotSessionHandler();
11
+ version = undefined;
12
+ planMode = {
13
+ argPrefix: "/plan ",
14
+ exitToolName: "exit_plan_mode",
15
+ nativePlanFile: true,
16
+ };
17
+ async buildArgs(prompt, opts) {
18
+ // Write prompt to temp file to avoid CLI length limits (same as Codex).
19
+ const promptRef = await writePromptFile(prompt);
20
+ if (opts.resumeSessionId) {
21
+ return [
22
+ "--resume",
23
+ opts.resumeSessionId,
24
+ "-i",
25
+ promptRef,
26
+ ...flagIf(opts.yolo, "--allow-all"),
27
+ ];
28
+ }
29
+ else if (opts.sessionId) {
30
+ const prefix = opts.promptPrefix ?? "";
31
+ return [
32
+ `--resume=${opts.sessionId}`,
33
+ "-i",
34
+ `${prefix}${promptRef}`,
35
+ ...flagIf(opts.yolo, "--allow-all"),
36
+ ];
37
+ }
38
+ // Fresh session — when promptPrefix is set (plan mode), prepend it to the
39
+ // prompt reference. Unlike Codex, Copilot requires `-i` for input (no
40
+ // positional args).
41
+ const prefix = opts.promptPrefix ?? "";
42
+ return ["-i", `${prefix}${promptRef}`, ...flagIf(opts.yolo, "--allow-all")];
43
+ }
44
+ createDetector() {
45
+ return new CopilotCompletionDetector(100, 200, this.planMode.exitToolName);
46
+ }
47
+ }
48
+ //# sourceMappingURL=strategy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"strategy.js","sourceRoot":"","sources":["../../../src/providers/copilot/strategy.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,yBAAyB,EAAE,MAAM,iBAAiB,CAAC;AAC5D,OAAO,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAErD,MAAM,OAAO,eAAe;IACjB,IAAI,GAAG,SAAS,CAAC;IACjB,WAAW,GAAG,oBAAoB,CAAC;IACnC,OAAO,GAAG,SAAS,CAAC;IACpB,UAAU,GAAG,MAAM,CAAC;IACpB,OAAO,GAAmB,IAAI,qBAAqB,EAAE,CAAC;IAC/D,OAAO,GAAuB,SAAS,CAAC;IAC/B,QAAQ,GAAmB;QAClC,SAAS,EAAE,QAAQ;QACnB,YAAY,EAAE,gBAAgB;QAC9B,cAAc,EAAE,IAAI;KACrB,CAAC;IAEF,KAAK,CAAC,SAAS,CAAC,MAAc,EAAE,IAAmB;QACjD,wEAAwE;QACxE,MAAM,SAAS,GAAG,MAAM,eAAe,CAAC,MAAM,CAAC,CAAC;QAEhD,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;YACzB,OAAO;gBACL,UAAU;gBACV,IAAI,CAAC,eAAe;gBACpB,IAAI;gBACJ,SAAS;gBACT,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,aAAa,CAAC;aACpC,CAAC;QACJ,CAAC;aAAM,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YAC1B,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,IAAI,EAAE,CAAC;YACvC,OAAO;gBACL,YAAY,IAAI,CAAC,SAAS,EAAE;gBAC5B,IAAI;gBACJ,GAAG,MAAM,GAAG,SAAS,EAAE;gBACvB,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,aAAa,CAAC;aACpC,CAAC;QACJ,CAAC;QAED,0EAA0E;QAC1E,uEAAuE;QACvE,oBAAoB;QACpB,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,IAAI,EAAE,CAAC;QACvC,OAAO,CAAC,IAAI,EAAE,GAAG,MAAM,GAAG,SAAS,EAAE,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC,CAAC;IAC9E,CAAC;IAED,cAAc;QACZ,OAAO,IAAI,yBAAyB,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;IAC7E,CAAC;CACF"}
@@ -0,0 +1,8 @@
1
+ export { ClaudeStrategy } from "./claude/index.js";
2
+ export { CodexStrategy } from "./codex/index.js";
3
+ export { CopilotStrategy } from "./copilot/index.js";
4
+ export { invoke } from "./invoke.js";
5
+ export { resolveProvider, computeFeatureGates, DEFAULT_GATES } from "./registry.js";
6
+ export type { FeatureGates } from "./registry.js";
7
+ export type { ProviderStrategy, SessionHandler, SessionSnapshot, PlanModeConfig, CompletionDetector, } from "./types.js";
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/providers/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AACpF,YAAY,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAClD,YAAY,EACV,gBAAgB,EAChB,cAAc,EACd,eAAe,EACf,cAAc,EACd,kBAAkB,GACnB,MAAM,YAAY,CAAC"}
@@ -0,0 +1,6 @@
1
+ export { ClaudeStrategy } from "./claude/index.js";
2
+ export { CodexStrategy } from "./codex/index.js";
3
+ export { CopilotStrategy } from "./copilot/index.js";
4
+ export { invoke } from "./invoke.js";
5
+ export { resolveProvider, computeFeatureGates, DEFAULT_GATES } from "./registry.js";
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/providers/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC"}
@@ -0,0 +1,14 @@
1
+ import type { ProviderStrategy } from "./types.js";
2
+ /**
3
+ * One-shot, non-interactive provider invocation.
4
+ *
5
+ * Sends a prompt to a provider and returns the response text.
6
+ * No session tracking, no gate opening, no resume support.
7
+ *
8
+ * @param provider Provider name (e.g., "claude") or a ProviderStrategy instance.
9
+ * @param prompt The prompt text to send.
10
+ * @param workdir Working directory for the PTY process.
11
+ * @returns The provider's response text.
12
+ */
13
+ export declare function invoke(provider: string | ProviderStrategy, prompt: string, workdir: string): Promise<string>;
14
+ //# sourceMappingURL=invoke.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"invoke.d.ts","sourceRoot":"","sources":["../../src/providers/invoke.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAMnD;;;;;;;;;;GAUG;AACH,wBAAsB,MAAM,CAC1B,QAAQ,EAAE,MAAM,GAAG,gBAAgB,EACnC,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,MAAM,CAAC,CA4CjB"}
@@ -0,0 +1,55 @@
1
+ import { randomUUID } from "node:crypto";
2
+ import { resolveProvider } from "./registry.js";
3
+ import { spawnPty } from "../pty/spawn.js";
4
+ import { sendExit } from "../pty/exit.js";
5
+ import { waitForFile } from "../session/locator.js";
6
+ /**
7
+ * One-shot, non-interactive provider invocation.
8
+ *
9
+ * Sends a prompt to a provider and returns the response text.
10
+ * No session tracking, no gate opening, no resume support.
11
+ *
12
+ * @param provider Provider name (e.g., "claude") or a ProviderStrategy instance.
13
+ * @param prompt The prompt text to send.
14
+ * @param workdir Working directory for the PTY process.
15
+ * @returns The provider's response text.
16
+ */
17
+ export async function invoke(provider, prompt, workdir) {
18
+ const strategy = typeof provider === "string" ? resolveProvider(provider) : provider;
19
+ // Pre-assign session ID when supported
20
+ let preAssignedSessionId;
21
+ let predictedFile;
22
+ if (strategy.session.predictSessionFile) {
23
+ preAssignedSessionId = randomUUID();
24
+ predictedFile = strategy.session.predictSessionFile(workdir, preAssignedSessionId);
25
+ }
26
+ const [args, snapshot] = await Promise.all([
27
+ strategy.buildArgs(prompt, { sessionId: preAssignedSessionId }),
28
+ predictedFile
29
+ ? Promise.resolve({ skipped: true })
30
+ : strategy.session.snapshot(workdir),
31
+ ]);
32
+ const handle = spawnPty({
33
+ command: strategy.command,
34
+ args,
35
+ cwd: workdir,
36
+ interactive: false,
37
+ });
38
+ const detector = strategy.createDetector();
39
+ handle.onData((data) => detector.onPtyData(data));
40
+ try {
41
+ const sessionFile = predictedFile
42
+ ? await waitForFile(predictedFile)
43
+ : await strategy.session.findSessionFile(snapshot, workdir);
44
+ const responseText = await detector.start(sessionFile);
45
+ await sendExit(handle, strategy.exitSignal);
46
+ detector.dispose();
47
+ return responseText;
48
+ }
49
+ catch (err) {
50
+ detector.dispose();
51
+ handle.kill();
52
+ throw err;
53
+ }
54
+ }
55
+ //# sourceMappingURL=invoke.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"invoke.js","sourceRoot":"","sources":["../../src/providers/invoke.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEpD;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,MAAM,CAC1B,QAAmC,EACnC,MAAc,EACd,OAAe;IAEf,MAAM,QAAQ,GACZ,OAAO,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;IAEtE,uCAAuC;IACvC,IAAI,oBAAwC,CAAC;IAC7C,IAAI,aAAiC,CAAC;IACtC,IAAI,QAAQ,CAAC,OAAO,CAAC,kBAAkB,EAAE,CAAC;QACxC,oBAAoB,GAAG,UAAU,EAAE,CAAC;QACpC,aAAa,GAAG,QAAQ,CAAC,OAAO,CAAC,kBAAkB,CAAC,OAAO,EAAE,oBAAoB,CAAC,CAAC;IACrF,CAAC;IAED,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QACzC,QAAQ,CAAC,SAAS,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,oBAAoB,EAAE,CAAC;QAC/D,aAAa;YACX,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,IAAa,EAAE,CAAC;YAC7C,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC;KACvC,CAAC,CAAC;IAEH,MAAM,MAAM,GAAG,QAAQ,CAAC;QACtB,OAAO,EAAE,QAAQ,CAAC,OAAO;QACzB,IAAI;QACJ,GAAG,EAAE,OAAO;QACZ,WAAW,EAAE,KAAK;KACnB,CAAC,CAAC;IAEH,MAAM,QAAQ,GAAG,QAAQ,CAAC,cAAc,EAAE,CAAC;IAC3C,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;IAElD,IAAI,CAAC;QACH,MAAM,WAAW,GAAG,aAAa;YAC/B,CAAC,CAAC,MAAM,WAAW,CAAC,aAAa,CAAC;YAClC,CAAC,CAAC,MAAM,QAAQ,CAAC,OAAO,CAAC,eAAe,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAC9D,MAAM,YAAY,GAAG,MAAM,QAAQ,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QAEvD,MAAM,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAC;QAC5C,QAAQ,CAAC,OAAO,EAAE,CAAC;QAEnB,OAAO,YAAY,CAAC;IACtB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,QAAQ,CAAC,OAAO,EAAE,CAAC;QACnB,MAAM,CAAC,IAAI,EAAE,CAAC;QACd,MAAM,GAAG,CAAC;IACZ,CAAC;AACH,CAAC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Normalize a file path for case-insensitive, slash-agnostic comparison.
3
+ * Converts backslashes to forward slashes, strips trailing slash,
4
+ * and lowercases (for Windows).
5
+ */
6
+ export declare function normalizePath(p: string): string;
7
+ //# sourceMappingURL=path-utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"path-utils.d.ts","sourceRoot":"","sources":["../../src/providers/path-utils.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAE/C"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Normalize a file path for case-insensitive, slash-agnostic comparison.
3
+ * Converts backslashes to forward slashes, strips trailing slash,
4
+ * and lowercases (for Windows).
5
+ */
6
+ export function normalizePath(p) {
7
+ return p.replace(/\\/g, "/").replace(/\/$/, "").toLowerCase();
8
+ }
9
+ //# sourceMappingURL=path-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"path-utils.js","sourceRoot":"","sources":["../../src/providers/path-utils.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAAC,CAAS;IACrC,OAAO,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;AAChE,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Write a prompt to a temp file and return a one-liner reference string.
3
+ *
4
+ * Used by providers (Codex, Copilot) that have CLI length limits or only
5
+ * read the first line of a positional argument.
6
+ */
7
+ export declare function writePromptFile(prompt: string): Promise<string>;
8
+ //# sourceMappingURL=prompt-file.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt-file.d.ts","sourceRoot":"","sources":["../../src/providers/prompt-file.ts"],"names":[],"mappings":"AAKA;;;;;GAKG;AACH,wBAAsB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAUrE"}
@@ -0,0 +1,17 @@
1
+ import { mkdir, writeFile } from "node:fs/promises";
2
+ import { dirname, join } from "node:path";
3
+ import { tmpdir } from "node:os";
4
+ import { randomUUID } from "node:crypto";
5
+ /**
6
+ * Write a prompt to a temp file and return a one-liner reference string.
7
+ *
8
+ * Used by providers (Codex, Copilot) that have CLI length limits or only
9
+ * read the first line of a positional argument.
10
+ */
11
+ export async function writePromptFile(prompt) {
12
+ const promptFile = join(tmpdir(), "poly-weaver", "prompts", `${randomUUID()}.md`);
13
+ await mkdir(dirname(promptFile), { recursive: true });
14
+ await writeFile(promptFile, prompt, "utf-8");
15
+ return `Read and follow all instructions in: ${promptFile}`;
16
+ }
17
+ //# sourceMappingURL=prompt-file.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt-file.js","sourceRoot":"","sources":["../../src/providers/prompt-file.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,MAAc;IAClD,MAAM,UAAU,GAAG,IAAI,CACrB,MAAM,EAAE,EACR,aAAa,EACb,SAAS,EACT,GAAG,UAAU,EAAE,KAAK,CACrB,CAAC;IACF,MAAM,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACtD,MAAM,SAAS,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IAC7C,OAAO,wCAAwC,UAAU,EAAE,CAAC;AAC9D,CAAC"}
@@ -0,0 +1,17 @@
1
+ import type { DriverName } from "../flow/types.js";
2
+ import type { ProviderStrategy } from "./types.js";
3
+ export declare function builtinStrategies(): Map<DriverName, ProviderStrategy>;
4
+ export declare function setProviderVersions(versions: Map<string, string>): void;
5
+ /** Capability gates derived from provider configuration. */
6
+ export type FeatureGates = {
7
+ readonly nativePlanMode: boolean;
8
+ };
9
+ /** Safe default: all gates off. */
10
+ export declare const DEFAULT_GATES: FeatureGates;
11
+ /**
12
+ * Derive feature gates from the resolved provider strategy.
13
+ * Returns DEFAULT_GATES for unknown providers (safe for mock/test drivers).
14
+ */
15
+ export declare function computeFeatureGates(plannerName: string): FeatureGates;
16
+ export declare function resolveProvider(name: string): ProviderStrategy;
17
+ //# sourceMappingURL=registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/providers/registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAOnD,wBAAgB,iBAAiB,IAAI,GAAG,CAAC,UAAU,EAAE,gBAAgB,CAAC,CAUrE;AAED,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAMvE;AAID,4DAA4D;AAC5D,MAAM,MAAM,YAAY,GAAG;IAAE,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAA;CAAE,CAAC;AAEhE,mCAAmC;AACnC,eAAO,MAAM,aAAa,EAAE,YAAwC,CAAC;AAErE;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,YAAY,CASrE;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,gBAAgB,CAS9D"}